Main Content

Rectangular Array MVDR Beamformer

This example shows how to implement a minimum-variance distortionless-response (MVDR) beamformer for a 4x4 rectangular antenna array in HDL.

MVDR (Minimum Variance Distortionless Response) beamforming is a signal processing technique used in radar applications to enhance the detection and tracking of targets while suppressing interference and noise from other sources. The goal of beamforming is to improve the radar's spatial resolution and target detection capabilities. The MVDR beamforming algorithm provides maximum signal to noise in the direction of the desired target and minimum output power in the directions of interference and noise.


This example uses MVDR beamforming to improve the detection and tracking of a target in the presence of interference and noise. Assume that the target is being tracked by a radar system consisting of an array of antennas placed in a rectangular array. The received radar signal will be corrupted by noise and interference from other sources. The MVDR beamforming algorithm aligns the antenna array with the direction of the target and suppresses noise and interference from other directions.

The 4x4 antenna geometry has each antenna element spaced by lambda/2 so all the elements of the array are on coordinates of +/-3/4 or +/-1/4 lambda. The antenna is oriented so that the boresight is aligned with x axis and the array is centered around 0,0 in the y,z plane. Using the pattern method of the sensor array, you can plot the normalized antenna response. This antenna does not have a counterpoise (ground plane) or back baffle behind the elements so it is sensitive to signals from both the positive and negative x axis directions, but Phase Array System Toolbox™ only allows for steering angles in the positive x direction. You can change the antenna elements to add back baffling, if needed.

The steering vector angles for this antenna indicate the direction to maximize signal from that direction and minimize interference from other directions. The direction you choose for the steering vector has a very large effect on your ability to receive the return signal and a few degrees of misalignment can make the received signal undecodeable. The antenna can be steered in both azimuth and elevation, but this example steers only the azimuth.

Beamformer Behavioral Model

The MVDR beamformer preserves the gain in the direction of arrival of a desired signal and attenuates interference from other directions [1].

Input Signals, Frequencies, and Directions

This model sets up a single primary signal and a single interfering signal, using a frame size of 800 samples. The Narrowband Rx Array block combines these signals, along with their respective source angles of 20 and 60 degrees azimuth with an implied 0 degree elevation. The block uses the 4x4 sensor array from the initialization file and an operating frequency of 915 MHz. The output of the Narrowband Rx Array block is a vector of signals from the sensor array with the geometry of the source angles applied. This vector is sent to the Receiver Preamp which reduces the signal, simulating return loss, and adds phase noise.

In order to better match the HDL algorithm, the resulting output is quantized to a 12-bit fixed-point value and then converted back to double precision. This conversion allows you to model the quantization effects in the double-precision behavioral model of the MVDR algorithm.

Behavioral Model in MATLAB

The behavioral algorithm in MATLAB® is the classic MVDR algorithm where the covariance matrix is formed by multiplying the input by its conjugate. The covariance matrix is then used with the backslash or mldivide operator and the steering vector to solve the set of equations $Ax = b$ where $A$ is the covariance matrix, $b$ is the steering vector, and $x$ is the weight vector for the MVDR beamformer. The weight vector is then normalized and the normalized vector is conjugated and multiplied by the input to apply the beamforming and steering.

Computing the Response in MATLAB

Given readings from a sensor array, such as the uniform rectangular array (URA) in the following diagram, form data matrix $A$ from samples of the array, where $a(t)$ is an $n$-by-1 column vector of readings from the array sampled at time $t$, and $a(t)^H$ is one row of matrix $A$. Many more samples are taken than there are elements in the array. This sampling results in the number of rows in $A$ being much greater than the number of columns. An estimate of the covariance matrix is $A^HA$, where $A^H$ is the Hermitian or complex-conjugate transpose of $A$.

Compute the MVDR beamformer response by solving the following equation for $x$, where $b$ is a steering vector pointing in the direction of the desired signal.

$$(A^HA)x = b$$

The MVDR weight vector $w$ is computed from $x$ and $b$ using the following equation, which normalizes $x$ to preserve the gain in the direction of arrival of the desired signal.

$$w = \frac{x}{b^H x}$$

The MVDR system response is the inner product of the MVDR weight vector $w$ and a current sample from the sensor array $a(t)$.

$$y = w^H a(t)$$

The MVDR beamforming algorithm does not depend on the antenna geometry. The antenna geometry is captured in the supplied steering vector, but the algorithm works only with the variance between channels.

Hardware-Friendly Algorithm

Instead of forming data matrix $A$ and computing the Cholesky factorization of covariance matrix $A^HA$, the upper-triangular matrix of the QR decomposition of $A$ is computed directly and updated as each data vector $a(t)$ streams in from the sensor array. Because the data is updated indefinitely, a forgetting factor is applied after each factorization. To integrate with an equivalent of a matrix of $m$ rows, the forgetting factor $\alpha$ should be set to

$$\alpha = \exp(\frac{-1}{2m})$$

This example simulates the equivalent of a matrix with $m=300$ rows, so the forgetting factor is set to 0.9983.

The Complex Partial-Systolic Matrix Solve Using Q-less QR Decomposition with Forgetting Factor block is implemented using the method shown in the example "FPGA-Based Minimum-Variance Distortionless-Response (MVDR) Beamformer". The upper-triangular matrix $R$ from the QR decomposition of $A$ is identical to the Cholesky factorization of $A^HA$ except the signs of values on the diagonal. Solving the matrix equation $(A^HA)x = b$ by computing the Cholesky factorization of $A^HA$ is not as efficient or as numerically sound as computing the QR decomposition of $A$ directly.

After the beamingforming operations, you are left with a two-times oversampled QPSK signal that you can filter and decode. Implementing the raised cosine receive filter in an FPGA is very straightforward. You get the filter coefficients from the initializiation code and you can view them in the behavioral received filter by opening the block and clicking on the "View Filter Response" button. This filter is a 21-tap decimate by two FIR filter with an initial latency of 30 cycles. The valid control signal into the filter is continuously high after the latency of the beamformer, but since the filter decimates the input, the output valid of the filter is high only every other cycle.

From the filter, the data is passed through the phase rotation multiplier and AGC multiplier to a Phase Detector built out of basic blocks. Since the Phased-Array Toolbox operates on baseband signals, there is no carrier to remove with the classic QPSK Costas loop, but using the sign-bit to take either the input signal real and imaginary components or their negations allows the phase detector to output a phase error signal proportional to the required phase rotation to place the QPSK constellation back on the correct axis. This phase error is then passed to proportional-integral (PI) filter and the result is integrated into a phase output.

Phase Correction

The phase output must be corrected by multiplying by $\frac{1}{2*pi}$ to get the normalized phase needed for the HDL-optimized complex exponential block. The sine and cosine output from the complex exponential block, as a complex number, is then used to phase rotate the original filter output, putting the QPSK back on the correct constellation points. This operation completes the phase correction feedback look.

Gain Correction

The signal is also passed through automatic gain control (AGC). The AGC is a "bang-bang" controller with just hysteresis between the upper and lower thresholds. In practice the AGC for a QPSK signal just needs to spread the constellation enough to enable correct sign-bit-based data thresholding. The input to the AGC is separated into real and imaginary parts and each part is squared and then summed to form an estimate of the signal power. You need to low-pass filter the result and decimate it so that the AGC adjusts the gain with a slower period. You accomplish this filter and decimation with a CIC decimating filter that decimates the power input by 100. You then compare the decimated result to the upper and lower limits.

In a normalized QPSK signal, the center of each constellation point is $\pm\frac{\sqrt{2}}{2}$ from the center in both X and Y dimensions, which means the vector distance to the center is 1.0. In the power domain of the CIC filter output, the upper and lower limits are slightly above and below sqrt(2), since the filter output is already the sum of the squares of the input real and imaginary parts. The example shows a +/-2.5% hysteresis band for these limits to compare with the filter output. You then use an up/down counter with an enable using the MATLAB Fuction block. The counter will change anytime the power is outside the given range and the direction it changes depends on whether the upper or lower limit is exceeded. You use the counter output to index a table of gain values. You choose 0.5 dB steps starting from 0.5 dB of gain up to 16 dB of gain, for a total of 32 steps. The AGC multiplier uses the output of this gain table, completing the AGC loop.

Going Further

The Phased Array System Toolbox does a simplified baseband or IF simulation of radar systems, so adding more RF processing to the model would help to make the HDL portion of the design closer to the final form.

You could do the steering vector computation in HDL as well. This operation requires sine and cosine computations on the azimuth and elevation and some simple geometry for the array coordinates.

The QPSK data for the radar signal can be used to carry information and you could decode and display that information.


[1] C.M. Rader. "VLSI Systolic Arrays for Adaptive Nulling". In: IEEE Signal Processing Magazine (July 1996), pp. 29--49.