Main Content

step

System object: phased.SubbandMVDRBeamformer
Namespace: phased

Wideband MVDR beamforming

Syntax

Y = step(sMVDR,X)
Y = step(sMVDR,X,XT)
Y = step(sMVDR,X,ang)
[Y,Wts] = step(sMVDR,___)
[Y,Freq] = step(sMVDR,___)
[Y,Wts,Freq] = step(sMVDR,X,XT,ang)

Description

Note

Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.

Y = step(sMVDR,X) performs wideband MVDR beamforming on the input, X, and returns the beamformed output in Y. This syntax uses X for training samples to calculate the beamforming weights. Use the Direction property to specify the beamforming direction.

Y = step(sMVDR,X,XT) uses XT as the training samples to calculate the beamforming weights. This syntax applies only when you set the TrainingInputPort property to true. Use the Direction property to specify the beamforming direction.

Y = step(sMVDR,X,ang) uses ang as the beamforming direction. This syntax applies only when you set the DirectionSource property to 'Input port'.

[Y,Wts] = step(sMVDR,___) returns the beamforming weights, Wts, when you set the WeightsOutputPort property to true.

[Y,Freq] = step(sMVDR,___) returns the center frequencies of the subbands, Freq, when you set the SubbandsOutputPort property to true. Freq is a length-K column vector where, K is the number of subbands specified in the NumSubbands property.

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,Wts,Freq] = step(sMVDR,X,XT,ang) is valid when you specify TrainingInputPort to true and specify DirectionSource to 'Input port'.

Note

The object performs an initialization the first time the object is executed. This initialization locks nontunable properties and input specifications, such as dimensions, complexity, and data type of the input data. If you change a nontunable property or an input specification, the System object issues an error. To change nontunable properties or inputs, you must first call the release method to unlock the object.

Input Arguments

expand all

Subband MVDR beamformer, specified as a System object.

Example: phased.SubbandMVDRBeamformer

Wideband input field, specified as an M-by-N matrix, where N is the number of array elements. If the sensor array consists of subarrays, N is then the number of subarrays. M is the number of samples in the data.

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 the TrainingInputPort to false, then step uses X as training data. In this case, the dimension M must be greater than N×NB. where NB is the number of subbands specified in the NumSubbands property.

If you set TrainingInputPort to true, use the XT argument to supply training data. In this case, the dimension M can be any positive integer.

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

Data Types: double
Complex Number Support: Yes

Wideband training samples, specified as a P-by-N matrix where N is the number of elements. If the sensor array consists of subarrays, then N represents 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 set TrainingInputPort to true. The dimension P is the number of samples in the training data. P must be larger than N×NB, where NB is the number of subbands specified in the NumSubbands property.

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

Data Types: double
Complex Number Support: Yes

Beamforming direction, specified as a 2-by-L real-valued matrix, where L is the number of beamforming directions. This argument applies only when you set the DirectionSource property 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: F = [40 30; 0 10]

Data Types: double

Output Arguments

expand all

Beamformed output, returned as an M-by-L complex-valued matrix. The quantity M is the number of signal samples and L is the number of beamforming directions specified in the ang argument.

Beamforming weights, returned as an N-by-K-by-L complex-valued matrix. The quantity N is the number of sensor elements or subarrays and K is the number of subbands specified by the NumSubbands property. The quantity L is the number of beamforming directions. Each column of Wts contains the narrowband beamforming weights used in the corresponding subband for the corresponding directions. This output applies only when you set the WeightsOutputPort property to true.

Center frequencies of subbands, returned as a K-by-1 real-valued column vector. The quantity K is the number of subbands specified by the NumSubbands property. To return this output, set the SubbandsOutputPort property to true.

Examples

expand all

Apply subband MVDR beamforming to an underwater acoustic 11-element ULA. The incident angle of the signal is 10 azimuth and 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,'WeightsOutputPort',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('Amplitude')
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,'Weights',w(:,1:5));

Figure contains an axes object. The hidden axes object contains 7 objects of type line, text. These objects represent 2.00000 kHz Ⓐ , 2.03125 kHz , 2.06250 kHz , 2.09375 kHz , 2.12500 kHz .

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,'WeightsOutputPort',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('Amplitude')
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,'Weights',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.

References

[1] Proakis, J. Digital Communications. New York: McGraw-Hill, 2001.

[2] Skolnik, M. Introduction to Radar Systems, 3rd Ed. New York: McGraw-Hill

[3] Saakian, A. Radio Wave Propagation Fundamentals. Norwood, MA: Artech House, 2011.

[4] Balanis, C. Advanced Engineering Electromagnetics. New York: Wiley & Sons, 1989.

[5] Rappaport, T. Wireless Communications: Principles and Practice, 2nd Ed New York: Prentice Hall, 2002.

Version History

Introduced in R2015b