波束形成是阵列信号处理中的一个重要领域。常规的波束形成,可以通过FFT是实现,其权矢量一般由期望方向的导向矢量加窗后得到。
假设有一个由N个阵元组成的线阵,有一来自方向的来波信号入射到阵元上,其导向矢量可以写为
其中,为阵元间距,为波长。则入射信号可以写为,为加性噪声。若该方向的信号为期望信号,则对该方向形成波束。对入射信号进行加权后,可以表示为,为加权权矢量,。
若想实现对方向的波束形成,则令即可。现在假设一仿真背景,有一个由11个阵元构成的均匀线阵(ULA),阵元间距为半波长,实现对方向15°的波束形成。以下为仿真代码与结果图,
%%天线方向图
clear all;clc;close all;
N=11;%阵元数目
d_lambda=0.5;%阵元间距比波长
theta0=15;%波束指向
theta=-90:0.1:90;
win=taylorwin(N);
theta0=theta0*pi/180;
theta=theta*pi/180;
a0=exp(j*2*pi*d_lambda*(0:N-1)'*sin(theta0));%导向矢量
a=exp(j*2*pi*d_lambda*(0:N-1)'*sin(theta));
ww=a0.*win;//对权矢量加窗
pattern=abs(ww'*a);
pattern1=abs(a0'*a);
figure;
plot(theta*180/pi,20*log10(pattern/max(pattern)),'-',theta*180/pi,20*log10(pattern1/max(pattern1)),'--');
xlabel('方位角/(°)');ylabel('归一化方向图/dB');
legend('加权','未加权');
grid on;
但是,在复杂的现实环境中,阵列接收信号不仅有期望信号,也有噪声,干扰,杂波。若期望信号功率较弱,可能会出现被干扰、杂波信号淹没的情况。因此希望波束方向图可以在干扰、杂波等方向形成零陷,从而得到更好的抑制,自适应波束形成算法应运而生。
在自适应算法中,有几种常见的准则:最小均方误差准则、最大信噪比准则、线性约束最小方差准则等。在不同的优化准则下,自适应波束形成可以得到不同的最优权矢量。各种优化准则都有其使用的前提条件:最小均方误差准则需要已知期望信号、最大信噪比准则准则需要已知信号自相关矩阵与噪声自相关矩阵、线性约束最小方差准则需要已知期望信号的来波方向与。现在主要讲解线性约束最小方差准则。
假设有一个来自方向的期望信号,阵列接收信号为
其中,为期望信号,为噪声信号。假设最优权矢量为,经加权后得到
现在希望经加权后,项尽可能小,即尽可能小。阵列接收信号总功率可以表示为
因此,优化问题就转为了希望尽可能小,即噪声方差最小化(在信号处理中,我们常常假设信号、噪声满足零均值的高斯分布,即自相关函数与协方差等价)。
同时为了保证阵列对在方向的期望信号保持一定的增益。因此需要加一个约束条件,我们常用的约束条件为(g为一常数,一般取1)。
由此可将优化问题最终表述为
利用拉格朗日乘子法解上述优化问题
将上式分别对、求偏导得
(1)
(2)
化简(1)式得到
两端同乘,利用(2)式得到
将表达式回带入(1)式得到
做如下仿真实验,阵元数20的线阵,期望信号从0°入射,干扰从20°,40°入射,分别用线性约束最小方差准则和常规波束形成得到的权矢量对入射信号加权,得到如下结果。
N=20;%阵元数
d_lambda=0.5;
theta0=0;%期望信号方向
theta=[-60:1:60];
thetaj=[20,40];%干扰方向
SNR=20;%信噪比
JNR=60;%干燥比
Ns=32;%采样点
nj=length(thetaj);
j=sqrt(-1);eps=0.00001;
as0=exp(j*2*pi*d_lambda*[0:N-1]'*sin(theta0*pi/180));
noise=0.707*(randn(N,Ns)+1i*randn(N,Ns));
amp_j=10^(JNR/20)*0.707*(randn(nj,Ns)+1i*randn(nj,Ns));
aj=exp(j*2*pi*d_lambda*[0:N-1]'*sin(thetaj*pi/180));
xj=aj*amp_j+noise;
Rin=1/Ns*(xj*xj');
Rin_inv=inv(Rin);
W=Rin_inv*as0;
atheta=exp(j*2*pi*d_lambda*[0:N-1]'*sin(theta*pi/180));
pattern1=abs(W'*atheta);
pattern2=abs(as0'*atheta);
pattern1=20*log10(pattern1/max(pattern1));
pattern2=20*log10(pattern2/max(pattern2));
plot(theta,pattern1,'-',theta,pattern2,'--');
legend('LCMV准则','常规波束形成');
axis([-60 60 -80 0]);
grid on;