Beamscan Direction-of-Arrival Estimation

This example shows how to use the nonparametric beamscan technique to estimate the direction of arrival (DOA) of signals. The beamscan algorithm estimates the DOAs by scanning the array beam over a region of interest. The algorithm computes the output power for each beamscan angle and identifies the maxima as the DOA estimates.

Note: This example runs only in R2016b or later. If you are using an earlier release, replace each call to the function with the equivalent step syntax. For example, replace myObject(x) with step(myObject,x).

Construct a ULA consisting of ten elements. Assume the carrier frequency of the incoming narrowband sources is 1 GHz.

fc = 1e9;
lambda = physconst('LightSpeed')/fc;
sULA = phased.ULA('NumElements',10,'ElementSpacing',lambda/2);
sULA.Element.FrequencyRange = [8e8 1.2e9];

Assume that there is a wavefield incident on the ULA consisting of two linear FM pulses. The DOAs of the two sources are 30° azimuth and 60° azimuth. Both sources have elevation angles of 0°.

waveform = phased.LinearFMWaveform('SweepBandwidth',1e5,...
sig1 = waveform();
sig2 = sig1;
ang1 = [30; 0];
ang2 = [60;0];
arraysig = collectPlaneWave(sULA,[sig1 sig2],[ang1 ang2],fc);
rng default
npower = 0.01;
noise = sqrt(npower/2)*...
    (randn(size(arraysig)) + 1i*randn(size(arraysig)));
rxsig = arraysig + noise;

Implement a beamscan DOA estimator. Output the DOA estimates, and plot the spatial spectrum.

estimator = phased.BeamscanEstimator('SensorArray',sULA,...
[y,sigang] = estimator(rxsig);

Related Topics