System object: phased.FrostBeamformer
Package: phased

Perform Frost beamforming


Y = step(H,X)
Y = step(H,X,XT)
Y = step(H,X,ANG)
Y = step(H,X,XT,ANG)
[Y,W] = step(___)


Y = step(H,X) performs Frost beamforming on the input, X, and returns the beamformed output in Y.

Y = step(H,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 = step(H,X,ANG) uses ANG as the beamforming direction. This syntax is available when you set the DirectionSource property to 'Input port'.

Y = step(H,X,XT,ANG) combines all input arguments. This syntax is available when you set the TrainingInputPort property to true and set the DirectionSource property to 'Input port'.

[Y,W] = step(___) returns the beamforming weights, W. This syntax is available when you set the WeightsOutputPort property to true.

    Note:   The object performs an initialization the first time the step method 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


Beamformer object.


Input signal, specified as an M-by-N matrix. M must be larger than the FIR filter length specified in the FilterLength property. N is the number of elements in the sensor array.


Training samples, specified as an M-by-N matrix. M and N are the same as the dimensions of X.


Beamforming directions, specified as a length-2 column vector. The vector has the form [AzimuthAngle; ElevationAngle], in degrees. The azimuth angle must be between –180 and 180 degrees, and the elevation angle must be between –90 and 90 degrees.

Output Arguments


Beamformed output. Y is a column vector of length M, where M is the number of rows in X.


Beamforming weights. W is a column vector of length L, where L is the degrees of freedom of the beamformer. For a Frost beamformer, H, L is given by getNumElements(H.SensorArray)*H.FilterLength.


Apply a Frost beamformer to an 11-element array. The incident angle of the signal is –50 degrees in azimuth and 30 degrees in elevation.

% Signal simulation
ha = phased.ULA('NumElements',11,'ElementSpacing',0.04);
ha.Element.FrequencyRange = [20 20000];
fs = 8e3; t = 0:1/fs:0.3;
x = chirp(t,0,1,500);
c = 340; % Wave propagation speed (m/s)
hc = phased.WidebandCollector('Sensor',ha,...
incidentAngle = [-50; 30];
x = step(hc,x.',incidentAngle);
noise = 0.2*randn(size(x));
rx = x+noise;

% Beamforming
hbf = phased.FrostBeamformer('SensorArray',ha,...
y = step(hbf,rx);


phased.FrostBeamformer uses a beamforming algorithm proposed by Frost. It can be considered the time-domain counterpart of the minimum variance distortionless response (MVDR) beamformer. The algorithm does the following:

  1. Steers the array to the beamforming direction.

  2. Applies an FIR filter to the output of each sensor to achieve the distortionless response constraint. The filter is specific to each sensor.

For further details, see [1].


[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.

Was this topic helpful?