Main Content

phased.SubbandMVDRBeamformer

宽带minimum-variance distortionless-response beamformer

Description

Thephased.SubbandMVDRBeamformerSystem object™ implements a wideband minimum variance distortionless response beamformer (MVDR) based on the subband processing technique. This type of beamformer is also called a Capon beamformer.

To beamform signals arriving at an array:

  1. Create thephased.SubbandMVDRBeamformerobject and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, seeWhat Are System Objects?

Creation

Description

beamformer= phased.SubbandMVDRBeamformercreates a subband MVDR beamformer System object,beamformer. The object performs subband MVDR beamforming on the received signal.

beamformer= phased.SubbandMVDRBeamformer(Name,Value)creates a subband MVDR beamformer System object,beamformer, with each specified propertyNameset to the specifiedValue. You can specify additional name-value pair arguments in any order asName1,Value1,...,NameN,ValueN.

Example:beamformer = phased.SubbandMVDRBeamformer('SensorArray',phased.URA('Size',[5 5]),'OperatingFrequency',500e6)sets the sensor array to a 5-by-5 uniform rectangular array (URA) with all other default URA property values. The beamformer has an operating frequency of 500 MHz.

Properties

expand all

Unless otherwise indicated, properties arenontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and thereleasefunction unlocks them.

If a property istunable, you can change its value at any time.

For more information on changing property values, seeSystem Design in MATLAB Using System Objects.

Sensor array, specified as an array System object belonging to Phased Array System Toolbox. The sensor array can contain subarrays.

Example:phased.URA

Signal propagation speed, specified as a real-valued positive scalar. Units are in meters per second. The default propagation speed is the value returned byphysconst('LightSpeed').

Example:3e8

Data Types:single|double

Operating frequency, specified as a positive scalar. Units are in Hz.

Example:1e9

Data Types:single|double

Sample rate of signal, specified as a positive scalar. Units are in Hz. The System object uses this quantity to calculate the propagation delay in units of samples.

Example:1e6

Data Types:single|double

Number of processing subbands, specified as a positive integer.

Example:128

Data Types:double

Source of beamforming direction, specified as'Property'or'Input port'. Specify whether the beamforming direction comes from theDirectionproperty of this object or from the input argument,ANG. Values of this property are:

'Property' Specify the beamforming direction using theDirectionproperty.
'Input port' Specify the beamforming direction using the input argument,ANG.

Data Types:char

Beamforming directions, specified as a real-valued 2-by-1 vector or a real-valued 2-by-Lmatrix. For a matrix, each column specifies a different beamforming direction. Each column has the form[AzimuthAngle;ElevationAngle]. Azimuth angles must lie between –180° and 180° and elevation angles must lie between –90° and 90°. All angles are defined with respect to the local coordinate system of the array. Units are in degrees.

Example:(40; 30)

Dependencies

To enable this property, set theDirectionSourceproperty to'Property'.

Data Types:single|double

Diagonal loading factor, specified as a nonnegative scalar. Diagonal loading is a technique used to achieve robust beamforming performance, especially when the sample size is small. A small sample size can lead to an inaccurate estimate of the covariance matrix. Diagonal loading also provides robustness due to steering vector errors. The diagonal loading technique adds a positive scalar multiple of the identity matrix to the sample covariance matrix.

Tunable:Yes

Data Types:single|double

启用training data input, specified asfalseortrue. When you set this property totrue, use the training data input argument,XT, when running the object. Set this property tofalseto use the input data,X, as the training data.

Data Types:logical

启用the output of beamforming weights, specified asfalseortrue. To obtain the beamforming weights, set this property totrueand use the corresponding output argument,W. If you do not want to obtain the weights, set this property tofalse.

Data Types:logical

Option to enable output of subband center frequencies, specified as eithertrueorfalse. To obtain the subband center frequencies, set this property totrueand use the corresponding output argumentFREQSwhen calling the object.

Data Types:logical

Usage

Description

Y= beamformer (X)performs wideband MVDR beamforming on the input,X, and returns the beamformed output inY. This syntax usesXfor training samples to calculate the beamforming weights. Use theDirection属性指定方向波束形成。

Y= beamformer (X,XT)usesXTfor training samples to calculate the beamforming weights.

Y= beamformer (X,ANG)usesANGas the beamforming direction. This syntax applies when you set theDirectionSourceproperty to'Input port'.

[Y,W] = beamformer(___)returns the beamforming weights,W. This syntax applies when you set theWeightsOutputPortproperty totrue.

[Y,FREQS] = beamformer(___)returns the center frequencies of the subbands,FREQS. This syntax applies when you set theSubbandsOutputPortproperty totrue.

example

You can combine optional input arguments when you set their enabling properties. Optional input arguments must be listed in the same order as their enabling properties. For example,[Y,W,FREQS] = beamformer(X,XT,ANG)is valid when you specifyTrainingInputPortastrueand setDirectionSourceto'Input port'.

Input Arguments

expand all

Wideband input signal, specified as anM-by-Nmatrix, whereNis the number of array elements.Mis the number of samples in the data. If the sensor array consists of subarrays,Nis then the number of subarrays.

The size of the first dimension of the input matrix can vary to simulate a changing signal length. A size change can occur, for example, in the case of a pulse waveform with variable pulse repetition frequency.

If you set theTrainingInputPorttofalse, then the object usesXas training data. In this case, the dimensionMmust be greater thanN×NB. whereNBis the number of subbands specified in theNumSubbands.

If you setTrainingInputPorttotrue, use theXTargument to supply training data. In this case, the dimensionMcan be any positive integer.

Example:[1,1;j,1;0.5,0]

Data Types:single|double
Complex Number Support:Yes

Wideband training samples, specified as aP-by-Nmatrix whereNis the number of elements. If the sensor array consists of subarrays, thenNrepresents the number of subarrays.

The size of the first dimension of the input matrix can vary to simulate a changing signal length. A size change can occur, for example, in the case of a pulse waveform with variable pulse repetition frequency.

This argument applies when you setTrainingInputPorttotrue. The dimensionPis the number of samples in the training data.Pmust be larger thanN×NB, whereNBis the number of subbands specified in theNumSubbandsproperty.

Example:FT = [1,1;j,1;0.5,0]

Data Types:single|double
Complex Number Support:Yes

Beamforming direction, specified as a2-by-Lreal-valued matrix, whereLis the number of beamforming directions. This argument applies only when you set theDirectionSourceproperty to'Input port'. Each column takes the form of[AzimuthAngle;ElevationAngle]. Angle units are in degrees. The azimuth angle must lie between –180° and 180°. The elevation angle must lie between –90° and 90°. Angles are defined with respect to the local coordinate system of the array.

Example:[40 30;0 10]

Data Types:single|double

Output Arguments

expand all

Beamformed output, returned as anM-by-Lcomplex-valued matrix. The quantityMis the number of signal samples andLis the number of beamforming directions specified in theANGargument.

Beamforming weights, returned as anN-by-K-by-Lcomplex-valued matrix. The quantityNis the number of sensor elements or subarrays andKis the number of subbands specified by theNumSubbandsproperty. The quantityLis the number of beamforming directions. Each column ofWcontains the narrowband beamforming weights used in the corresponding subband for the corresponding directions.

Dependencies

To return this output, set theWeightsOutputPortproperty totrue.

Data Types:single|double

Center frequencies of subbands, returned as aK-by-1 real-valued column vector. The quantityKis the number of subbands specified by theNumSubbandsproperty.

Dependencies

To return this output, set theSubbandsOutputPortproperty totrue.

Data Types:single|double

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object namedobj, use this syntax:

release(obj)

expand all

step RunSystem objectalgorithm
release Release resources and allow changes toSystem objectproperty values and input characteristics
reset Reset internal states ofSystem object

Examples

collapse all

Apply subband MVDR beamforming to an underwater acoustic 11-element ULA. The incident angle of the signal is 1 0 azimuth and 3 0 elevation. The signal is an FM chirp having a bandwidth of 1 kHz. The speed of sound is 1500 m/s.

Simulate signal

array = phased.ULA('NumElements',11,'ElementSpacing',0.3); fs = 2e3; carrierFreq = 2000; t = (0:1/fs:2)'; sig = chirp(t,0,2,fs/2); c = 1500; collector = phased.WidebandCollector('Sensor',array,'PropagationSpeed',c,...'SampleRate',fs,'ModulatedInput',true,...'CarrierFrequency',carrierFreq); incidentAngle = [10;0]; sig1 = collector(sig,incidentAngle); noise = 0.3*(randn(size(sig1)) + 1j*randn(size(sig1))); rx = sig1 + noise;

Apply MVDR beamforming

beamformer = phased.SubbandMVDRBeamformer('SensorArray',array,...'Direction',incidentAngle,'OperatingFrequency',carrierFreq,...'PropagationSpeed',c,'SampleRate',fs,'TrainingInputPort',true,...'SubbandsOutputPort',true,“我们ightsOutputPort',true); [y,w,subbandfreq] = beamformer(rx, noise);

Plot the signal that is input to the middle sensor (channel 6) vs the beamformer output.

plot(t(1:300),real(rx(1:300,6)),'r:',t(1:300),real(y(1:300))) xlabel('Time') ylabel(“振幅”) legend('Original','Beamformed');

Figure contains an axes object. The axes object with xlabel Time, ylabel Amplitude contains 2 objects of type line. These objects represent Original, Beamformed.

Plot array response

Plot the response pattern for five bands

pattern(array,subbandfreq(1:5).',-180:180,0,...'PropagationSpeed',c,“我们ights',w(:,1:5));

Apply subband MVDR beamforming to an underwater acoustic 11-element ULA. Beamform the arriving signals to optimize the gain of a linear FM chirp signal arriving from 0 degrees azimuth and 0 degrees elevation. The signal has a bandwidth of 2.0 kHz. In addition, there unit amplitude 2.250 kHz interfering sine wave arriving from 28 degrees azimuth and 0 degrees elevation. Show how the MVDR beamformer nulls the interfering signal. Display the array pattern for several frequencies in the neighborhood of 2.250 kHz. The speed of sound is 1500 meters/sec.

Simulate Arriving Signal and Noise

array = phased.ULA('NumElements',11,'ElementSpacing',0.3); fs = 2000; carrierFreq = 2000; t = (0:1/fs:2)'; sig = chirp(t,0,2,fs/2); c = 1500; collector = phased.WidebandCollector('Sensor',array,'PropagationSpeed',c,...'SampleRate',fs,'ModulatedInput',true,...'CarrierFrequency',carrierFreq); incidentAngle = [0;0]; sig1 = collector(sig,incidentAngle); noise = 0.3*(randn(size(sig1)) + 1j*randn(size(sig1)));

Simulate Interfering Signal

Combine both the desired and interfering signals.

fint = 250; sigint = sin(2*pi*fint*t); interfangle = [28;0]; sigint1 = collector(sigint,interfangle); rx = sig1 + sigint1 + noise;

Apply MVDR Beamforming

Use the combined noise and interfering signal as training data.

beamformer = phased.SubbandMVDRBeamformer('SensorArray',array,...'Direction',incidentAngle,'OperatingFrequency',carrierFreq,...'PropagationSpeed',c,'SampleRate',fs,'TrainingInputPort',true,...'NumSubbands',64,...'SubbandsOutputPort',true,“我们ightsOutputPort',true); [y,w,subbandfreq] = beamformer(rx,sigint1 + noise); tidx = [1:300]; plot(t(tidx),real(rx(tidx,6)),'r:',t(tidx),real(y(tidx))) xlabel('Time') ylabel(“振幅”) legend('Original','Beamformed')

Figure contains an axes object. The axes object with xlabel Time, ylabel Amplitude contains 2 objects of type line. These objects represent Original, Beamformed.

Plot Array Response Showing Beampattern Null

Plot the response pattern for five bands near 2.250 kHz.

fdx = [5,7,9,11,13]; pattern(array,subbandfreq(fdx).',-50:50,0,...'PropagationSpeed',c,“我们ights',w(:,fdx),...'CoordinateSystem','rectangular');

Figure contains an axes object. The axes object with title Azimuth Cut (elevation angle = 0.0°), xlabel Azimuth Angle (degrees), ylabel Directivity (dBi) contains 5 objects of type line. These objects represent 2.1250 kHz, 2.1875 kHz, 2.2500 kHz, 2.3125 kHz, 2.3750 kHz.

The beamformer places a null at 28 degrees for the subband containing 2.250 kHz.

More About

expand all

Algorithms

expand all

References

[1] Van Trees, H.Optimum Array Processing. New York: Wiley-Interscience, 2002.

Extended Capabilities

Version History

Introduced in R2015b