# NSRD/RD - MUSIC algorithm implementation on an URA.

3 views (last 30 days)
Kumar Vishal Rai on 29 Jun 2022
Commented: Garmit Pant on 18 Apr 2024
Hello dear Community,
Has anyone tried implementing RD-MUSIC or NSRD-MUSIC algorithm to estimate the direction of arrival angle. I am trying to implement NSRD algorithm given in below link but unable to get proper results.
https://www.hindawi.com/journals/ijap/2015/127621/
Kumar Vishal

Garmit Pant on 5 Mar 2024
Hello Kumar Vishal Rai
I understand that you are trying to implement the NSRD-MUSIC algorithm for estimation of the direction of arrival angle in MATLAB.
While the implementation of this particular algorithm is not present in MATLAB, the task of estimation of DOA angle can be achieved using in-built MATLAB functions. 2D direction of arrival can be estimated by using the “phased.MUSICEstimator2D System object. The code snippet below illustrates how to estimate the DOAs of two signals.
% Define the frequencies of two signals in Hz
f1 = 450.0;
f2 = 600.0;
% Define the direction of arrival (DOA) of the two signals in degrees
% DOA is specified as [Azimuth; Elevation]
doa1 = [-37; 0]; % DOA of the first signal
doa2 = [17; 20]; % DOA of the second signal
% Define the carrier frequency of the signals in Hz
fc = 150e6;
% Calculate the wavelength of the signals using the speed of light
c = physconst('LightSpeed'); % Speed of light in m/s
lam = c / fc; % Wavelength in meters
% Define the sampling frequency in Hz
fs = 8000;
% Create a Uniform Rectangular Array (URA) of antennas
array = phased.URA('Size', [11 11], 'ElementSpacing', [lam/2 lam/2]);
array.Element.FrequencyRange = [50.0e6 500.0e6]; % Set the operational frequency range of the array elements
% Generate time vector for 1 second duration with the specified sampling frequency
t = (0:1/fs:1).'; % Time vector
% Generate the two signals as cosine waves at their respective frequencies
x1 = cos(2*pi*t*f1); % Signal 1
x2 = cos(2*pi*t*f2); % Signal 2
% Simulate the reception of the plane waves by the antenna array
% 'collectPlaneWave' collects the plane waves coming from specified DOAs
x = collectPlaneWave(array, [x1 x2], [doa1, doa2], fc);
% Noise is complex to simulate real-world scenarios (I and Q channels)
noise = 0.1*(randn(size(x)) + 1i*randn(size(x))); % Noise with 0.1 scaling factor
% Create a MUSIC estimator object for 2D DOA estimation
estimator = phased.MUSICEstimator2D('SensorArray', array, ...
'OperatingFrequency', fc, ...
'NumSignalsSource', 'Property', ...
'DOAOutputPort', true, 'NumSignals', 2, ...
'AzimuthScanAngles', -50:.5:50, ...
'ElevationScanAngles', -30:.5:30);
% Estimate the DOAs of the incoming signals using the MUSIC algorithm
% The noisy signals are used as input
[~, doas] = estimator(x + noise);
% Plot the spatial spectrum estimated by the MUSIC algorithm
% This plot helps visualize the directions from which the signals are arriving
plotSpectrum(estimator);
MATLAB also has the functionality to implement the MUSIC algorithm for DOA estimation of signals on ULA. You can use the “musicdoa” function of the Phased Array System Toolbox to do the same.
For further understanding, refer to the links to the MATLAB documentation given below:
1. phased.MUSICEstimator2D” System object- https://www.mathworks.com/help/releases/R2022a/phased/ref/phased.musicestimator2d-system-object.html
2. musicdoa” function – https://www.mathworks.com/help/releases/R2022a/phased/ref/musicdoa.html
3. Documentation on Super Resolution DOA – https://www.mathworks.com/help/releases/R2022a/phased/ug/music-super-resolution-doa-estimation.html
I hope you find the above explanation and suggestions useful!
Garmit Pant on 18 Apr 2024

### Categories

Find more on Direction of Arrival Estimation in Help Center and File Exchange

R2022a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!