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

41 lines
1007 B
Matlab

function [esti_ang_deg, P_FT, fft_ang_deg] = df_FFT(snapshot, NFFT, fft_ang, array_struct, Ntarget, plot_flag)
%% FFT algorithm
Nsnap = size(snapshot, 2);
if isempty(fft_ang)
fft_freq = -180 : 360/NFFT : (180 - 360/NFFT);
fft_ang_deg = asind(fft_freq / 2 * array_struct.lambda_c / array_struct.unit / 180);
end
% FFT spectrum
zero_padded_input = complex(zeros(NFFT, Nsnap));
zero_padded_input(array_struct.eff_ch_loc+1, :) = snapshot;
if Nsnap == 1
P_FT = abs(flipud(fftshift((1/Nsnap) * ((fft(zero_padded_input, NFFT)))').')).^2;
else
P_FT = abs(flipud(fftshift((1/Nsnap) * (sum(fft(zero_padded_input, NFFT),2))').')).^2;
end
% Plot
if plot_flag == 1
figure()
plot(fft_ang_deg, pow2db(abs(P_FT)));
grid on
xlabel('Angle [deg]')
ylabel('Magnitude [dB]')
end
[pks, pks_ang, ~, ~] = findpeaks(pow2db(abs(P_FT)), fft_ang_deg);
[~, order] = sort(pks, 'descend');
if isempty(pks)
esti_ang_deg = nan;
else
esti_ang_deg = pks_ang(order(1:Ntarget));
end
end