Files
RADAR_system_analysis/Functions/01. Direction finding/df_1D_MUSIC.m
T
2025-07-29 21:45:44 +09:00

44 lines
1.2 KiB
Matlab

function [esti_ang_deg, P_MUSIC, test_ang_deg] = df_1D_MUSIC(snapshot, Ntarget, array_struct, fov_deg, unit_ang_deg , plot_flag)
% Number of Snapshots
Nsnap = size(snapshot, 2);
% Estimated Correlation matrix of X
Rx = (1/Nsnap) * (snapshot * snapshot');
% MUSIC algorithm
% Eigen decomposition
[Q, ~, ~] = svd(Rx);
% Noise subspace
Q_n = Q(:, Ntarget+1:end);
% MUSIC algorithm
test_ang_deg = -fov_deg : unit_ang_deg : fov_deg - unit_ang_deg;
P_MUSIC = zeros(1, length(test_ang_deg));
if size(array_struct.eff_ch_loc, 1) == 1
array_struct.eff_ch_loc = array_struct.eff_ch_loc.';
end
Q_n_square = Q_n * Q_n';
for ang_idx = 1 : length(test_ang_deg)
z = exp(1i * 2 * pi / array_struct.lambda_c * array_struct.unit * -sind(test_ang_deg(ang_idx)));
test_sv = z.^array_struct.eff_ch_loc;
P_MUSIC(ang_idx) = 1 / (test_sv' * Q_n_square * test_sv);
end
if plot_flag == 1
figure()
plot(test_ang_deg, pow2db(abs(P_MUSIC)));
grid on
xlabel('Test angle [deg]');
ylabel('Magnitude [dB]');
end
[pks, pks_ang, ~, ~] = findpeaks(pow2db(abs(P_MUSIC)), test_ang_deg);
[~, order] = sort(pks, 'descend');
esti_ang_deg = pks_ang(order(1:Ntarget));
end