MATLAB Code
clc;
clear;
close all;
%% Step 1: Define Parameters
M = 8; % Number of array sensors
d = 0.5; % Sensor spacing (lambda/2)
K = 2; % Number of signals
N = 200; % Number of snapshots
theta = [-20 30]; % True signal angles (degrees)
SNR = 10; % Signal-to-noise ratio (dB)
fprintf('Step 1: Parameters Initialized\n');
%% Step 2: Generate Signal Sources
t = 1:N;
s1 = exp(1j*2*pi*0.05*t);
s2 = exp(1j*2*pi*0.1*t);
S = [s1; s2];
figure;
plot(real(S(1,:)))
title('Signal 1 (Real Part)')
xlabel('Samples')
ylabel('Amplitude')
figure;
plot(real(S(2,:)))
title('Signal 2 (Real Part)')
xlabel('Samples')
ylabel('Amplitude')
fprintf('Step 2: Source Signals Generated\n');
%% Step 3: Construct Steering Matrix
A = zeros(M,K);
for k = 1:K
A(:,k) = exp(-1j*2*pi*d*(0:M-1)'*sin(theta(k)*pi/180));
end
fprintf('Step 3: Steering Matrix Created\n');
%% Step 4: Generate Received Signals
X = A*S;
noise = (randn(M,N) + 1j*randn(M,N))/sqrt(2);
noise = noise * 10^(-SNR/20);
X = X + noise;
figure;
plot(real(X(1,:)))
title('Received Signal at Sensor 1')
xlabel('Samples')
ylabel('Amplitude')
fprintf('Step 4: Received Signals with Noise Generated\n');
%% Step 5: Estimate Covariance Matrix
R = (X*X')/N;
figure;
imagesc(abs(R))
colorbar
title('Covariance Matrix Magnitude')
xlabel('Sensors')
ylabel('Sensors')
fprintf('Step 5: Covariance Matrix Computed\n');
%% Step 6: Eigenvalue Decomposition
[Evec, Eval] = eig(R);
eigenvalues = diag(Eval);
figure;
stem(sort(eigenvalues,'descend'))
title('Eigenvalues of Covariance Matrix')
xlabel('Index')
ylabel('Eigenvalue')
fprintf('Step 6: Eigen Decomposition Done\n');
%% Step 7: Sort Eigenvalues and Eigenvectors
[eigenvalues_sorted, idx] = sort(eigenvalues,'descend');
Evec_sorted = Evec(:,idx);
fprintf('Step 7: Eigenvalues Sorted\n');
%% Step 8: Separate Signal and Noise Subspace
Es = Evec_sorted(:,1:K); % Signal subspace
En = Evec_sorted(:,K+1:end); % Noise subspace
fprintf('Step 8: Signal and Noise Subspaces Separated\n');
%% Step 9: MUSIC Spectrum Calculation
angles = -90:0.1:90;
Pmusic = zeros(size(angles));
for i = 1:length(angles)
steering = exp(-1j*2*pi*d*(0:M-1)'*sin(angles(i)*pi/180));
Pmusic(i) = 1/(steering'*(En*En')*steering);
end
Pmusic = abs(Pmusic);
Pmusic = 10*log10(Pmusic/max(Pmusic));
fprintf('Step 9: MUSIC Spectrum Computed\n');
%% Step 10: Plot MUSIC Spectrum
figure;
plot(angles,Pmusic,'LineWidth',2)
grid on
xlabel('Angle (degrees)')
ylabel('Spectrum (dB)')
title('MUSIC Spatial Spectrum')
fprintf('Step 10: MUSIC Spectrum Plotted\n');
Output
Step 1: Parameters Initialized
Step 2: Source Signals Generated
Step 3: Steering Matrix Created
Step 4: Received Signals with Noise Generated
Step 5: Covariance Matrix Computed
Step 6: Eigen Decomposition Done
Step 7: Eigenvalues Sorted
Step 8: Signal and Noise Subspaces Separated
Step 9: MUSIC Spectrum Computed
Step 10: MUSIC Spectrum Plotted