ESPRIT direction of arrival (DOA) estimator for ULA
the direction of arrival of signals parameters via rotational invariance
(ESPRIT) direction of arrival estimate.
To estimate the direction of arrival (DOA):
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.ESPRITEstimator creates an ESPRIT
DOA estimator System
H. The object
estimates the signal's direction-of-arrival (DOA) using the ESPRIT
algorithm with a uniform linear array (ULA).
H = phased.ESPRITEstimator( creates
H, with 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
Signal propagation speed
Specify the propagation speed of the signal, in meters per second, as a positive scalar.
Default: Speed of light
System operating frequency
Specify the operating frequency of the system in hertz as a positive scalar. The default value corresponds to 300 MHz.
Perform forward-backward averaging
Set this property to
Specify the number of averaging used by spatial smoothing to estimate the covariance matrix as a nonnegative integer. Each additional smoothing handles one extra coherent source, but reduces the effective number of element by 1. The maximum value of this property is M–2, where M is the number of sensors.
Source of number of signals
Specify the source of the number of signals as one of
Method to estimate number of signals
Specify the method to estimate the number of signals as one
Number of signals
Specify the number of signals as a positive integer scalar.
This property applies when you set the
Type of least squares method
Specify the least squares method used for ESPRIT as one of
Row weighting factor
Specify the row weighting factor for signal subspace eigenvectors
as a positive integer scalar. This property controls the weights applied
to the selection matrices. In most cases the higher value the better.
However, it can never be greater than (Nsub – 1)/2 where Nsub is
the number of elements in the subarray derived from the array specified
|step||Perform DOA estimation|
Estimate the directions-of-arrival (DOA) of two signals received by a standard 10-element ULA with element spacing 1 m. The antenna operating frequency is 150 MHz. The actual direction of the first signal is 10° in azimuth and 20° in elevation. The direction of the second signal is 45° in azimuth and 60° in elevation.
Create the signals.
fs = 8.0e3; t = (0:1/fs:1).'; x1 = cos(2*pi*t*300); x2 = cos(2*pi*t*400); array = phased.ULA('NumElements',10,'ElementSpacing',1); array.Element.FrequencyRange = [100e6 300e6]; fc = 150e6;
Create the plane waves and add noise.
x = collectPlaneWave(array,[x1 x2],[10 20;45 60]',fc); noise = 0.1/sqrt(2)*(randn(size(x)) + 1i*randn(size(x)));
Estimate the arrival angles.
estimator = phased.ESPRITEstimator('SensorArray',array,... 'OperatingFrequency',fc); doas = estimator(x + noise); az = broadside2az(sort(doas),[20 60])
az = 10.0000 45.0126
The ESPRIT algorithm, as implemented in the
reorganizes the ULA elements into two overlapping subarrays. For an
original N-element array, the first subarray consist of elements 1,...,N
- 1 of the original array. The second subarray consist of
elements 2,...,N of the original array. There
are Nsub = N - 1 elements
in each subarray.
 Van Trees, H. Optimum Array Processing. New York: Wiley-Interscience, 2002.
Usage notes and limitations:
See System Objects in MATLAB Code Generation (MATLAB Coder).