1. 程式人生 > >貝塞爾函式法實現束控加權

貝塞爾函式法實現束控加權

使用貝塞爾函式法對各個頻率點的權值進行計算調整,實現恆定波束的形成,演算法的效果不是很好,應該是演算法的應用場景上有限制。本質上這就是一種時域內通過濾波器組實現恆定波束的方法。

clc
clear 
close all

M = 5;
d = 0.043;
c = 343;

thetas = 0*pi/180;

f = 400:200:4000;
Lf = length(f);

vs = exp(-1j*2*pi*f'*(0:(M-1))*d*sin(thetas)/c).';

theta_scan = (-90:1:90);
Lt = length(theta_scan);
Bp = zeros(Lf,Lt);
for i = 1:Lf
    fi = f(i);
    v_scan = exp(-1j*2*pi*fi*(0:(M-1))'*d*sin(theta_scan*pi/180)/c);
    Bp(i,:) = 20*log10(abs(v_scan'*vs(:,i)));
    Bp(i,:) = Bp(i,:) - max(Bp(i,:));
end

figure
plot(theta_scan,Bp)
xlabel('angle/deg')
ylabel('Bp(dB)')
grid on
xlim([-90,90])
title('cbf')

orders = 50;
Tf_ref = zeros(Lf,M,2*orders + 1);

for i = 1:Lf
    fi = f(i);
    for j = 1:M
        besselj_params = 2*pi*fi*d*(j - 1)/c;
        Tf_ref(i,j,:) = besselj(-orders:1:orders,besselj_params);
    end
end

for iloop1 = 1:30
Tref = squeeze(Tf_ref(1,:,:));
Bp_cb = zeros(Lf,Lt);
fcenter = 400 + 100*iloop1;
for i = 1:Lf
    fi = f(i);
    for j = 1:Lt
        vs_ref = exp(-1j*2*pi*fcenter*(0:(M-1))'*d*sin(theta_scan(j)*pi/180)/c);
        Tf = squeeze(Tf_ref(i,:,:));
        T = Tref * pinv(Tf'*Tf)*Tf';
        weight = T' *vs_ref;
        Bp_cb(i,j) = 20*log10(abs(weight' * vs(:,i)));
    end
    Bp_cb(i,:) = Bp_cb(i,:) - max(Bp_cb(i,:));
end

figure
plot(theta_scan,Bp_cb)
xlabel('angle/deg')
ylabel('Bp(dB)')
grid on
xlim([-90 90])
title('constane beamwith bf')
end