Minimum variance distortionless response (MVDR) beamformer weights
narrowband minimum variance distortionless response (MVDR) beamformer
weights for a phased array. When applied to the elements of an array,
the weights steer the response of a sensor array in a specific arrival
direction or set of directions. The
wt = mvdrweights(
specifies the sensor positions of the array. The
specifies the azimuth and elevation angles of the desired response
cov is the sensor spatial covariance
matrix between sensor elements. The output argument,
is a matrix contains the beamformer weights for each sensor and each
direction. Each column of
wt contains the weights
for the corresponding direction specified in
All elements in the sensor array are assumed to be isotropic.
MVDR Beamformer with Arrival Directions of 30 and 45 Degrees
Construct a 10-element, half-wavelength-spaced line array. Choose two arrival directions of interest - one at 30° azimuth and the other at 45° azimuth. Assume both directions are at 0° elevation. Compute the MVDR beamformer weights for each direction. Specify a sensor spatial covariance matrix that contains signals arriving from -60° and 60° and noise at -10 dB.
Set up the array and sensor spatial covariance matrix.
N = 10; d = 0.5; elementPos = (0:N-1)*d; Sn = sensorcov(elementPos,[-60 60],db2pow(-10));
Solve for the MVDR beamformer weights.
w = mvdrweights(elementPos,[30 45],Sn);
Plot the two MVDR array patterns.
plotangl = -90:90; vv = steervec(elementPos,plotangl); plot(plotangl,mag2db(abs(w'*vv))) grid on xlabel('Azimuth Angle (degrees)'); ylabel('Normalized Power (dB)'); legend('30 deg','45 deg'); title('MVDR Array Pattern')
The figure shows plots for each beamformer direction. One plot has the expected maximum gain at 30 degrees and the other at 45 degrees. The nulls at -60 and 60 degrees arise from the fundamental property of the MVDR beamformer of suppressing power in all directions except for the arrival direction.
Quantized Weights in MVDR Beamformer
Construct a 10-element, half-wavelength-spaced line array. Choose the arrival direction of interest to be 18.5° azimuth and 10° elevation. Compute the MVDR beamformer weights and then compute the weights for 3-bit quantization. Specify a sensor spatial covariance matrix that contains signals arriving from -60° and 60° and noise at -10 dB.
Set up the array and the sensor spatial covariance matrix.
N = 10; d = 0.5; elementPos = (0:N-1)*d; SN = sensorcov(elementPos,[-60 60],db2pow(-10));
Solve for the MVDR beamformer weights with and without quantization.
w = mvdrweights(elementPos,[18.5;10],SN); wq = mvdrweights(elementPos,[18.5;10],SN,3);
Plot both MVDR array patterns.
plotangl = -90:90; vv = steervec(elementPos,plotangl); plot(plotangl,mag2db(abs(w'*vv))) hold on plot(plotangl,mag2db(abs(wq'*vv))) grid on xlabel('Azimuth Angle (degrees)') ylabel('Normalized Power (dB)') legend('Non-Quantized Weights','Quantized Weights','Location','SouthWest'); title('Quantized vs Non-quantized Array Patterns') hold off
cov — Sensor spatial covariance matrix
Sensor spatial covariance matrix specified as an N-by-N, complex-valued matrix. In this matrix, N represents the number of sensor elements.
Complex Number Support: Yes
wt — Beamformer weights
Beamformer weights returned as a complex-valued, N-by-M matrix.
In this matrix, N represents the number of sensor
elements of the array while M represents the number
of beamforming directions. Each column of
to a beamforming direction specified in
Minimum Variance Distortionless Response
MVDR beamformer weights minimize the total array output power while setting the gain in the desired response direction to unity (see Van Trees , p. 442). MVDR weights are given by
where is the steering vector corresponding to the desired response direction. S is the spatial covariance matrix. The covariance matrix consists of the variances of the element data and the covariances of the data between the sensor elements. The covariance contains contributions from all incoming signals and noise.
 Van Trees, H.L. Optimum Array Processing. New York, NY: Wiley-Interscience, 2002.
 Johnson, Don H. and D. Dudgeon. Array Signal Processing. Englewood Cliffs, NJ: Prentice Hall, 1993.
 Van Veen, B.D. and K. M. Buckley. “Beamforming: A versatile approach to spatial filtering”. IEEE ASSP Magazine, Vol. 5 No. 2 pp. 4–24.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
Does not support variable-size inputs.
Introduced in R2013a