Initial Commit.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user