[25.08.17] Applying DOA logic : CBF
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
function [esti_ang_deg, P_CBF] = df_cbf(snapshot, test_ang_elev_deg, test_ang_azi_deg, lambda_c, array_struct, Ntarget)
|
||||
function [esti_ang_deg, P_CBF] = df_cbf(snapshot, test_ang_elv_deg, test_ang_azi_deg, lambda_c, array_struct, Ntarget)
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
% Conventioanl Beamforming algorithm for df
|
||||
@@ -9,7 +9,7 @@ function [esti_ang_deg, P_CBF] = df_cbf(snapshot, test_ang_elev_deg, test_ang_az
|
||||
% Description
|
||||
% - Input
|
||||
% - 1) snapshot [matrix], [-] : raw data(snapshot) for df
|
||||
% - 2) test_ang_elev_deg [vector], [deg] : elevation angle grid for beamforming
|
||||
% - 2) test_ang_elv_deg [vector], [deg] : elvation 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
|
||||
@@ -29,11 +29,11 @@ function [esti_ang_deg, P_CBF] = df_cbf(snapshot, test_ang_elev_deg, test_ang_az
|
||||
|
||||
|
||||
% Spectrum
|
||||
P_CBF = zeros(length(test_ang_elev_deg), length(test_ang_azi_deg));
|
||||
for ang_elev_idx = 1 : length(test_ang_elev_deg)
|
||||
P_CBF = zeros(length(test_ang_elv_deg), length(test_ang_azi_deg));
|
||||
for ang_elv_idx = 1 : length(test_ang_elv_deg)
|
||||
for ang_azi_idx = 1 : length(test_ang_azi_deg)
|
||||
sv = exp(-1i * 2 * pi / lambda_c * ( array_struct.azi_eff_ch_loc.' * array_struct.lambda_c * cosd(test_ang_elev_deg(ang_elev_idx)) * sind(test_ang_azi_deg(ang_azi_idx)) + array_struct.elev_eff_ch_loc.' * array_struct.lambda_c * sind(test_ang_elev_deg(ang_elev_idx))));
|
||||
P_CBF(ang_elev_idx, ang_azi_idx) = abs((sum(sv'*snapshot))).^2;
|
||||
sv = exp(-1i * 2 * pi / lambda_c * ( array_struct.azi_eff_ch_loc.' * array_struct.u_azi * cosd(test_ang_elv_deg(ang_elv_idx)) * sind(test_ang_azi_deg(ang_azi_idx)) + array_struct.elv_eff_ch_loc.' * array_struct.u_elv * sind(test_ang_elv_deg(ang_elv_idx))));
|
||||
P_CBF(ang_elv_idx, ang_azi_idx) = abs((sum(sv'*snapshot))).^2;
|
||||
end
|
||||
end
|
||||
|
||||
@@ -46,7 +46,7 @@ if size(P_CBF, 1) == 1
|
||||
esti_ang_deg = pks_ang(order(1:Ntarget));
|
||||
end
|
||||
elseif size(P_CBF, 2) == 1
|
||||
[pks, pks_ang, ~, ~] = findpeaks(pow2db(abs(P_CBF)), test_ang_elev_deg);
|
||||
[pks, pks_ang, ~, ~] = findpeaks(pow2db(abs(P_CBF)), test_ang_elv_deg);
|
||||
[~, order] = sort(pks, 'descend');
|
||||
if isempty(pks)
|
||||
esti_ang_deg = nan;
|
||||
@@ -59,7 +59,7 @@ else
|
||||
if isempty(pks)
|
||||
esti_ang_deg = nan;
|
||||
else
|
||||
esti_ang_deg = [test_ang_elev_deg(locs_x(order(1:Ntarget))).' test_ang_azi_deg(locs_y(order(1:Ntarget))).'];
|
||||
esti_ang_deg = [test_ang_elv_deg(locs_x(order(1:Ntarget))).' test_ang_azi_deg(locs_y(order(1:Ntarget))).'];
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user