Documentation

Super-resolution DOA Estimation

This example shows how to estimate angles of arrival from two separate signal sources when both angles fall within the main lobe of the array response. In this example, a beamscan DOA estimator cannot resolve the two sources. However, a super-resolution DOA estimator that uses the root MUSIC algorithm can do so.

Plot the array response of the ULA used in the Beamscan Direction-of-Arrival Estimation example. Zoom in on the main lobe.

fc = 1e9;
lambda = physconst('LightSpeed')/fc;
hula = phased.ULA('NumElements',10,'ElementSpacing',lambda/2);
hula.Element.FrequencyRange = [8e8 1.2e9];
plotResponse(hula,fc,physconst('LightSpeed'));
axis([-25 25 -30 0]);

Receive two signal sources with DOAs separated by ten degrees.

ang1 = [30; 0];
ang2 = [40; 0];
Nsnapshots = 1000;
rng default
npower = 0.01;
rxsig = sensorsig(getElementPosition(hula)/lambda,...
   Nsnapshots,[ang1 ang2],npower);

Estimate the directions of arrival using the beamscan estimator. Because both DOAs fall inside the main lobe of the array response, the beamscan DOA estimator cannot resolve them as separate sources.

hbeam = phased.BeamscanEstimator('SensorArray',hula,...
    'OperatingFrequency',fc,'ScanAngles',-90:90,...
    'DOAOutputPort',true,'NumSignals',2);
[~,sigang] = step(hbeam,rxsig);
figure;
plotSpectrum(hbeam);

Use a super-resolution DOA estimator, phased.RootMUSICEstimator to estimate the two directions. This estimator offers better resolution than the nonparametric beamscan estimator.

hroot = phased.RootMUSICEstimator('SensorArray',hula,...
    'OperatingFrequency',fc,'NumSignalsSource','Property',...
    'NumSignals',2,'ForwardBackwardAveraging',true);
doa_est = step(hroot,rxsig)
doa_est =

   40.0091   30.0048

This estimator correctly identifies the two distinct directions of arrival.

See Also

Related Examples

Was this topic helpful?