Time delay LCMV beamformer
TimeDelayLCMVBeamformer object implements
a time-delay linear constraint minimum variance beamformer.
To compute the beamformed signal:
Define and set up your time-delay LCMV beamformer. See Construction.
stepto perform the beamforming operation according to the properties of
phased.TimeDelayLCMVBeamformer. The behavior of
stepis specific to each object in the toolbox.
Starting in R2016b, instead of using the
to perform the operation defined by the System object™, you can
call the object with arguments, as if it were a function. For example,
= step(obj,x) and
y = obj(x) perform
H = phased.TimeDelayLCMVBeamformer creates
a time-delay linear constraint minimum variance (LCMV) beamformer System object,
The object performs time delay LCMV beamforming on the received signal.
H = phased.TimeDelayLCMVBeamformer( creates
a time-delay LCMV beamformer object,
each specified property Name set to the specified Value. You can specify
additional name-value pair arguments in any order as (
Handle to sensor array
Specify the sensor array as a handle. The sensor array must
be an array object in the
Signal propagation speed
Specify the propagation speed of the signal, in meters per second, as a positive scalar. You can specify this property as single or double precision.
Default: Speed of light
Signal sampling rate
Specify the signal sampling rate (in hertz) as a positive scalar. This property can be specified as single or double precision.
FIR filter length
Specify the length of the FIR filter behind each sensor element in the array as a positive integer. This property can be specified as single or double precision.
Specify the constraint matrix used for time-delay LCMV beamformer as an
M-by-K matrix. Each column of the
matrix is a constraint and 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
Desired response vector
Specify the desired response used for time-delay LCMV beamformer as a column vector of length
K, where K is the number of
constraints in the
Diagonal loading factor
Specify the diagonal loading factor as a positive scalar. Diagonal loading is a technique used to achieve robust beamforming performance, especially when the sample support is small. This property is tunable. This property can be specified as single or double precision.
Add input to specify training data
To specify additional training data, set this property to
Source of beamforming direction
Specify whether the beamforming direction comes from the
Specify the beamforming direction of the beamformer as a column vector of length 2. The
direction is specified in the format of
Output beamforming weights
To obtain the weights used in the beamformer, set this property
|step||Perform time-delay LCMV beamforming|
|Common to All System Objects|
Allow System object property value changes
Time-Delay LCMV Beamformer
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')
The beamforming algorithm is the time-domain counterpart of the narrowband linear constraint minimum variance (LCMV) beamformer. The algorithm does the following:
Steers the array to the beamforming direction.
Applies an FIR filter to the output of each sensor to achieve the specified constraints. The filter is specific to each sensor.
This System object supports single and double precision for input data, properties, and arguments. If
the input data
X is single precision, the output data is single precision.
If the input data
X is double precision, the output data is double
precision. The precision of the output is independent of the precision of the properties and
 Frost, O. “An Algorithm For Linearly Constrained Adaptive Array Processing”, Proceedings of the IEEE. Vol. 60, Number 8, August, 1972, pp. 926–935.
 Van Trees, H. Optimum Array Processing. New York: Wiley-Interscience, 2002.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
Requires dynamic memory allocation. See Limitations for System Objects that Require Dynamic Memory Allocation.
See System Objects in MATLAB Code Generation (MATLAB Coder).
This System object supports single and double precision for input data, properties, and arguments. If the input data
Xis single precision, the output data is single precision. If the input data
Xis double precision, the output data is double precision. The precision of the output is independent of the precision of the properties and other arguments.
Introduced in R2011a