Main Content

phased.TimeDelayLCMVBeamformer

Time delay LCMV beamformer

Description

The TimeDelayLCMVBeamformer object implements a time-delay linear constraint minimum variance beamformer.

To compute the beamformed signal:

  1. Create the phased.TimeDelayLCMVBeamformer object and set its properties.

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

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

Creation

Description

beamformer = phased.TimeDelayLCMVBeamformer creates a time-delay linear constraint minimum variance (LCMV) beamformer System object™, beamformer. The object performs time delay LCMV beamforming on a received signal.

beamformer = phased.TimeDelayLCMVBeamformer(Name=Value) creates a time-delay LCMV beamformer object, beamformer, with each specified property Name set to the specified Value. You can specify additional name-value pair arguments in any order as (Name1=Value1,...,NameN=ValueN).

example

Properties

expand all

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

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

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

Sensor array, specified as a Phased Array System Toolbox array System object. The array cannot 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 by physconst("LightSpeed").

Example: 3e8

Data Types: single | double

Signal sample rate, specified as a positive real-valued scalar. Units are in hertz.

Example: 1e6

Data Types: single | double

FIR filter length, specified as a positive integer. An FIR filter is associated with each sensor element in the array.

Example: 11

Data Types: single | double

LCMV constraint matrix used for time-delay LCMV beamformer, specified as an M-by-K real-valued matrix. Each column of the matrix is a constraint. M is the number of degrees of freedom of the beamformer. For a time-delay LCMV beamformer, the number of degrees of freedom is the product of the number of elements of the array and the filter length specified by the value of the FilterLength property.

Data Types: single | double

Desired response of time-delay LCMV beamformer, specified as a length-K column vector where K is the number of constraints specified in the Constraint property. Each element in the vector defines the desired response of the constraint specified in the corresponding column of the Constraint property. A value of 1 specifies a distortionless response.

Data Types: single | double

Diagonal loading factor, specified as a positive scalar. Use diagonal loading to achieve robust beamforming performance, especially when the sample support is small. This property is tunable.

Data Types: single | double

To enable the training data input port, set this property to true and use the corresponding input argument XT when you execute the object function. To use the input signal X as the training data, set this property to false.

Example: false

Data Types: logical

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

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

Data Types: char

Beamforming direction, specified as a length-2 real-valued column vector in the format [AzimuthAngle;ElevationAngle]. The AzimuthAngle is between –180° and 180°. The ElevationAngle is between –90° and 90°. Units are in degrees.

Dependencies

To enable this property, set the DirectionSource property to "Property".

Data Types: single | double

To obtain the weights used in the beamformer, set this property to true and use the corresponding output argument when invoking step. If you do not want to obtain the weights, set this property to false.

Example: true

Data Types: logical

Usage

Description

Y = beamformer(X) performs LCMV beamforming on the input data, X, and returns the beamformed output in Y.

Y = beamformer(X,XT) uses XT as the training samples to calculate the beamforming weights. This syntax is available when you set the TrainingInputPort property to true.

[Y,W] = beamformer(___) returns the beamforming weights W. This syntax is available when you set the WeightsOutputPort property to true. W is a column vector of length N, where N is the number of elements in the sensor array.

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.

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

Input signal, specified as an M-by-N complex-valued matrix where N is the number of elements of the sensor array.

Data Types: single | double
Complex Number Support: Yes

Training data, specified as a P-by-N complex-valued matrix where N is the number of elements of the sensor array. P must be greater than N.

Data Types: single | double
Complex Number Support: Yes

Output Arguments

expand all

Beamformed signal, returned as a length-M complex-valued column vector.

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 named obj, use this syntax:

release(obj)

expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Examples

collapse all

Apply a time delay LCMV beamformer to an 11-element acoustic ULA array. The elements are omnidirectional microphones. The incident angle of the signal is -50 degrees in azimuth and 30 degrees in elevation. The incident signal is an FM chirp with 500 Hz bandwidth. The propagation speed is a typical speed of sound in air, 340 m/s.

Simulate the signal and add noise.

nElem = 11;
microphone = phased.OmnidirectionalMicrophoneElement(...
    'FrequencyRange',[20 20000]);
array = phased.ULA('Element',microphone,'NumElements',nElem,'ElementSpacing',0.04);
fs = 8000;
t = 0:1/fs:0.3;
x = chirp(t,0,1,500);
c = 340;
collector = phased.WidebandCollector('Sensor',array,...
    'PropagationSpeed',c,'SampleRate',fs,...
    'ModulatedInput',false);
incidentAngle = [-50;30];
x = collector(x.',incidentAngle);
noise = 0.2*randn(size(x));
rx = x + noise;

Create and apply the time-delay LCMV beamformer. Specify a filterlength of 5.

filterLength = 5;
constraintMatrix = kron(eye(filterLength),ones(nElem,1));
desiredResponseVector = eye(filterLength,1);
beamformer = phased.TimeDelayLCMVBeamformer('SensorArray',array,...
    'PropagationSpeed',c,'SampleRate',fs,'FilterLength',filterLength,...
    'Direction',incidentAngle,'Constraint',constraintMatrix,...
    'DesiredResponse',desiredResponseVector);
y = beamformer(rx);

Compare the beamformer output to the input to the middle sensor.

plot(t,rx(:,6),'r:',t,y)
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.

Algorithms

expand all

References

[1] Frost, O. “An Algorithm For Linearly Constrained Adaptive Array Processing”, Proceedings of the IEEE. Vol. 60, Number 8, August, 1972, pp. 926–935.

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

Extended Capabilities

expand all

Version History

Introduced in R2011a