Files
2025-07-29 21:45:44 +09:00

61 lines
1.9 KiB
Matlab

function [esti_ang_deg, P_FT, fft_ang_deg] = df_FFT_mar510(snapshot, NFFT, lambda_c, fft_ang, array_struct, Ntarget)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Conventioanl Beamforming algorithm for df
% Start : 23.08.25
% End : 23.08.25
% developed by Kwanggoo Yeo
%
% Description
% - Input
% - 1) snapshot [matrix], [-] : raw data(snapshot) for df
% - 2) test_ang_elev_deg [vector], [deg] : elevation angle grid for beamforming
% - 3) test_ang_azi_deg [vector], [deg] : Azimuth angle grid for beamforming
% - 4) lambda_c [scalar], [m] : wavelength of center frequency
% - 4) array_struct [struct], [-] : Structure containing virtual array information
% - 5) Ntarget [scalar], [-] : The number of targets in snapshot
%
% - Output
% - 1) esti_ang_deg [matrix], [deg] : The estimated angles by CBF
% - 2) P_CBF [matrix], [linear] : power spectrum of CBF
%
% History
% (23.08.25) Completed
%
% Referece
% -
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nsnap = size(snapshot, 2);
if isempty(fft_ang)
fft_freq = -180 : 360/NFFT : (180 - 360/NFFT);
fft_ang_deg = asind(fft_freq / 2 * lambda_c / array_struct.d_unit / 180);
end
% FFT spectrum
zero_padded_input = complex(zeros(NFFT, Nsnap));
zero_padded_input(flip(abs(array_struct.azi_eff_ch_loc))+1, :) = snapshot;
if Nsnap == 1
%P_FT = abs((fftshift((1/Nsnap) * ((fft(zero_padded_input, NFFT)))').')).^2;
P_FT = abs((((1/Nsnap) * ((fft(zero_padded_input, NFFT)))').')).^2;
else
P_FT = abs((fftshift((1/Nsnap) * (sum(fft(zero_padded_input, NFFT),2))').')).^2;
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