Main Content

phased.RootMUSICEstimator

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

Description

The phased.RootMUSICEstimator System object™ implements a root multiple signal classification (root-MUSIC) direction of arrival estimator for uniform linear arrays (ULA) and uniform circular arrays (UCA).

To estimate the direction of arrival (DOA):

  1. Create the phased.RootMUSICEstimator 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

example

estim = phased.RootMUSICEstimator creates a root-MUSIC DOA estimator System object, estim. The object estimates a signal's direction of arrival using the root-MUSIC algorithm applied to a uniform linear array (ULA) or uniform circular array (UCA). For the UCA used, the estimator transforms the input array into a ULA-like structure using the phase mode excitation technique [2].

example

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

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 System object

Sensor array, specified as a System object. The sensor array must be a phased.ULA object or a phased.UCA object. When using a phased.UCA object, the ArrayNormal property value can only be set to 'z'.

Signal propagation speed, specified as a positive scalar. Units are in Hz.

Data Types: single | double

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.

Data Types: single | double

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

Data Types: logical

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.

Example: 5

Data Types: double

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.

Example: 'Property'

Data Types: char | string

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

Example: 'MDL'

Data Types: char | string

Specify the number of signals as a positive integer. 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.

Example: 9

Data Types: single | double

Usage

Description

Ang = estim(X) estimates the direction of arrival (DOAs) of a signal X using the root-MUSIC algorithm. This syntax applies only when the SensorArray property set to phased.ULA.

Ang = estim(X,ElAng) specifies, in addition, the assumed elevation angles of the signals. This syntax applies only when the SensorArray property is phased.UCA.

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 signals, specified as a complex-valued matrix whose columns correspond to signal channels.

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.

Data Types: single | double

ElAng is a scalar between –90° and 90° and is applied to all signals. The elevation angles for all signals must be the same as required by the phase mode excitation algorithm. Units are in degrees.

Example: 54

Data Types: single | double

Output Arguments

expand all

Estimated direction of arrivals of signal, returned as a real-valued row vector of the estimated broadside angles. Units are in degrees.

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

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,...
    'ElementSpacing',1);
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,...
    'OperatingFrequency',fc,...
    'NumSignalsSource','Property',...
    'NumSignals',2);
doas = step(sDOA,x + noise);
az = broadside2az(sort(doas),[20 60])
az = 1×2

   10.0001   45.0107

Using the root-MUSIC algorithm, estimate the azimuth angle of arrival of two signals received by a 15-element UCA having a 1.5 meter radius. The antenna operating frequency is 150 MHz. The actual direction of arrival of the first signal is 10 degrees in azimuth and 4 degrees in elevation. The direction of arrival of the second signal is 45 degrees in azimuth and -2 degrees in elevation. In estimating the directions of arrival, assume the signals arrive from 0 degrees elevation.

Set the frequencies of the signals to 500 and 600 Hz. Set the sample rate to 8 kHz and the operating frequency to 150 MHz. Then, create the baseband signals, the UCA array and the plane wave signals.

fs = 8000;
fc = 150e6;
t = (0:1/fs:1).';
x1 = cos(2*pi*t*500);
x2 = cos(2*pi*t*600);
sUCA = phased.UCA('NumElements',15,...
    'Radius',1.5);
x = collectPlaneWave(sUCA,[x1 x2],[10 4; 45 -2]',fc);

Add random complex Gaussian white noise to the signals.

rs = RandStream('mt19937ar','Seed',0);
noise = 0.1/sqrt(2)*(randn(rs,size(x))+1i*randn(rs,size(x)));

Create the phased.RootMUSICEstimator System object™.

sDOA = phased.RootMUSICEstimator('SensorArray',sUCA,...
    'OperatingFrequency',fc,...
    'NumSignalsSource','Property',...
    'NumSignals',2);

Solve for the azimuth angles for zero degrees elevation.

elang = 0;
doas = step(sDOA, x + noise, elang);
az = sort(doas)
az = 1×2

    9.9815   44.9986

Algorithms

expand all

References

[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