63 lines
2.1 KiB
Matlab
63 lines
2.1 KiB
Matlab
function [esti_ang_deg, P_FT, fft_ang_elev_deg, fft_ang_azi_deg] = df_FFT_mar510(zp_snapshot, NFFT_elev, NFFT_azi, fft_ang_elev_deg, fft_ang_azi_deg, 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
|
|
% -
|
|
%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
temp_Nsnap = size(zp_snapshot);
|
|
Nsnap = temp_Nsnap(end);
|
|
|
|
if isempty(fft_ang_elev_deg)
|
|
fft_elev_freq = -180 : 360/NFFT_elev : (180 - 360/NFFT_elev);
|
|
fft_ang_elev_deg = asind(fft_elev_freq / 2 * array_struct.lambda_c / array_struct.d_unit_elev / 180);
|
|
end
|
|
|
|
if isempty(fft_ang_azi_deg)
|
|
fft_azi_freq = -180 : 360/NFFT_azi : (180 - 360/NFFT_azi);
|
|
fft_ang_azi_deg = asind(fft_azi_freq / 2 * array_struct.lambda_c / array_struct.d_unit_azi / 180);
|
|
end
|
|
|
|
% FFT spectrum
|
|
if Nsnap == 1
|
|
P_FT = abs((((1/Nsnap) * ((fft(zero_padded_input, NFFT_azi)))').')).^2;
|
|
else
|
|
P_FT = abs((fftshift((1/Nsnap) * (sum(fft(zero_padded_input, NFFT_azi),2))').')).^2;
|
|
end
|
|
|
|
|
|
[pks, pks_ang, ~, ~] = findpeaks(pow2db(abs(P_FT_2D)), 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
|
|
|