# Capon Beamformer#

Implementation of the Capon beamformer, also referred to as Minimum Variance Distortionless Response (MVDR).

The Capon beamformer estimates the power $$\hat{P}$$ received from a direction $$(\theta, \phi)$$, where $$\theta$$ is the zenith and $$\phi$$ is the azimuth angle of interest in spherical coordinates, respectively. Let $$\mathbf{X} \in \mathbb{C}^{N \times T}$$ be the the matrix of $$T$$ time-discrete samples acquired by an antenna arrary featuring $$N$$ antennas and

$\mathbf{R}^{-1} = \left( \mathbf{X}\mathbf{X}^{\mathsf{H}} + \lambda \mathbb{I} \right)^{-1}$

be the respective inverse sample correlation matrix loaded by a factor $$\lambda \in \mathbb{R}_{+}$$. The antenna array’s response towards a source within its far field emitting a signal of small relative bandwidth is $$\mathbf{a}(\theta, \phi) \in \mathbb{C}^{N}$$. Then, the Capon beamformer’s spatial power response is defined as

$\hat{P}_{\mathrm{Capon}}(\theta, \phi) = \frac{1}{\mathbf{a}^{\mathsf{H}}(\theta, \phi) \mathbf{R}^{-1} \mathbf{a}(\theta, \phi)}$

with

$\mathbf{w}(\theta, \phi) = \frac{\mathbf{R}^{-1} \mathbf{a}(\theta, \phi)}{\mathbf{a}^{\mathsf{H}}(\theta, \phi) \mathbf{R}^{-1} \mathbf{a}(\theta, \phi)} \in \mathbb{C}^{N}$

being the beamforming weights to steer the sensor array’s receive characteristics towards direction $$(\theta, \phi)$$, so that

$\mathcal{B}\lbrace \mathbf{X} \rbrace = \mathbf{w}^\mathsf{H}(\theta, \phi) \mathbf{X}$

is the implemented beamforming equation.

Parameters:

loading (float, optional) – Diagonal covariance loading coefficient $$\lambda$$. Defaults to zero.

yaml_tag: Optional[str] = 'Capon'#

YAML serialization tag.

Number of input streams required by this beamformer.

Dimension $$N$$ of the input sample matrix $$\mathbf{X} \in \mathbb{C}^{N \times T}$$.

Returns:

Number of input streams $$N$$.

Number of output streams generated by this beamformer.

Dimension $$M$$ of the output sample matrix $$\mathbf{Y} \in \mathbb{C}^{M \times T}$$.

Returns:

Number of output streams $$M$$.

Number of required receive focus angles.

Returns:

Number of focus angles $$F$$.

Required for robust matrix inversion in the case of rank-deficient sample covariances.

Returns:

Diagonal loading coefficient $$\lambda$$.

Raises:

_decode(samples, carrier_frequency, angles)#

Decode signal streams for receive beamforming.

This method is called as a subroutine during receive() and probe().

Parameters:
• samples (np.ndarray) – Signal samples, first dimension being the number of signal streams $$N$$, second the number of samples $$T$$.

• carrier_frequency (float) – The assumed carrier central frequency of the samples $$f_\mathrm{c}$$.

• angles (ndarray) – (np.ndarray): Spherical coordinate system angles of arrival in radians. A three-dimensional numpy array with the first dimension representing the number of angles, the second dimension of magnitude number of focus points $$F$$, and the third dimension containing the azimuth and zenith angle in radians, respectively.

Return type:

ndarray

Returns:

Stream samples of the focused signal towards all focus points. A three-dimensional numpy array with the first dimension representing the number of focus points, the second dimension the number of returned streams and the third dimension the amount of samples.