Main Content


Root MUSIC direction of arrival (DOA) estimator for ULA and UCA


The RootMUSICEstimator object implements the root multiple signal classification (root-MUSIC) direction of arrival estimator for uniform linear arrays (ULA) and uniform circular arrays (UCA). When a uniform circular array is used, the algorithm transforms the input to a ULA-like structure using the phase mode excitation technique [2].

To estimate the direction of arrival (DOA):

  1. Define and set up your DOA estimator. See Construction.

  2. Call step to estimate the DOA according to the properties of phased.RootMUSICEstimator. The behavior of step is specific to each object in the toolbox.


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.


H = phased.RootMUSICEstimator creates a root MUSIC DOA estimator System object, H. The object estimates the signal's direction of arrival using the root MUSIC algorithm with a uniform linear array (ULA).

H = phased.RootMUSICEstimator(Name,Value) creates object, H, 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).



Sensor array System object

Sensor array specified as a System object. The sensor array must be a phased.ULA object or a phased.UCA object.

Default: phased.ULA with default property values


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


System operating frequency

Specify the operating frequency of the system in hertz as a positive scalar. The default value corresponds to 300 MHz. You can specify this property as single or double precision.

Default: 3e8


Perform forward-backward averaging

Set this property to true to use forward-backward averaging to estimate the covariance matrix for sensor arrays with conjugate symmetric array manifold.

Default: false


Spatial smoothing

The averaging number used by spatial smoothing to estimate the covariance matrix, specified as a strictly positive integer. Each additional smoothing value handles one additional coherent source, but reduces the effective number of elements by one. The maximum value of this property is M-2. For a ULA, M is the number of sensors. For a UCA, M is the size of the internal ULA-like array structure defined by the phase mode excitation technique. The default value of zero indicates that no spatial smoothing is employed. You can specify this property as single or double precision.

Default: 0


Source of number of signals

Specify the source of the number of signals as one of 'Auto' or 'Property'. If you set this property to 'Auto', the number of signals is estimated by the method specified by the NumSignalsMethod property.

When spatial smoothing is employed on a UCA, you cannot set the NumSignalsSource property to'Auto' to estimate the number of signals. You can use the functions aictest or mdltest independently to determine the number of signals.

Default: 'Auto'


Method to estimate number of signals

Specify the method to estimate the number of signals as one of 'AIC' or 'MDL'. 'AIC' uses the Akaike Information Criterion and 'MDL' uses Minimum Description Length Criterion. This property applies when you set the NumSignalsSource property to 'Auto'.

Default: 'AIC'


Number of signals

Specify the number of signals as a positive integer scalar. This property applies when you set the NumSignalsSource property to 'Property'. The number of signals must be smaller than the number of elements in the array specified in the SensorArray property. You can specify this property as single or double precision.

Default: 1


stepPerform DOA estimation
Common to All System Objects

Allow System object property value changes


collapse all

Estimate the DOA's of two signals received by a standard 10-element uniform linear array (ULA) having an element spacing of 1 meter. The antenna operating frequency is 150 MHz. The actual direction of the first signal is 10 degrees in azimuth and 20 degrees in elevation. The direction of the second signal is 45 degrees in azimuth and 60 degrees in elevation.

fs = 8000;
t = (0:1/fs:1).';
x1 = cos(2*pi*t*300);
x2 = cos(2*pi*t*400);
sULA = phased.ULA('NumElements',10,...
sULA.Element.FrequencyRange = [100e6 300e6];
fc = 150e6;
x = collectPlaneWave(sULA,[x1 x2],[10 20;45 60]',fc);
rng default;
noise = 0.1/sqrt(2)*(randn(size(x))+1i*randn(size(x)));
sDOA = phased.RootMUSICEstimator('SensorArray',sULA,...
doas = step(sDOA,x + noise);
az = broadside2az(sort(doas),[20 60])
az = 1×2

   10.0001   45.0107


expand all


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

[2] Mathews, C.P., Zoltowski, M.D., "Eigenstructure techniques for 2-D angle estimation with uniform circular arrays." IEEE Transactions on Signal Processing, vol. 42, No. 9, pp. 2395-2407, Sept. 1994.

Extended Capabilities

Version History

Introduced in R2011a