然而,虽然阵列天线的方向图是全向的,但是通过一定技术对阵列的输出进行适当的加权后,可以使阵列天线对特定的一个或多个空间目标产生方向性波束,即“波束成形”,且波束的方向性可控。波束成形技术可以使发射和接收信号的波束指向所需要用户,提高频谱利用率,降低干扰。
传统的波束成形算法通常是根据用户信号波达方向(DOA)的估计值构造阵列天线的加权向量,且用户信号DOA在一定时间内不发生改变。然而,在移动通信系统中,用户的空间位置是时变的,此时,波束成形权向量需要根据用户当前位置进行实时更新。自适应波束成形算法可以满足上述要求。
本毕业设计将对阵列信号处理中的波束成形技术进行研究,重点研究自适应波束成形技术。要求理解掌握波束成形的基本原理,掌握几种典型的自适应波束成形算法,熟练使用MATLAB仿真软件,并使用MA TLAB仿真软件对所研究的算法进行仿真和分析,评估算法性能。
(一)波束成形:
波束成形,源于自适应天线的一个概念。接收端的信号处理,可以通过对多天线阵元接收到的各路信号进行加权合成,形成所需的理想信号。从天线方向图(pattern)视角来看,这样做相当于形成了规定指向上的波束。例如,将原来全方位的接收方向图转换成了有零点、有最大指向的波瓣方向图。同样原理也适用用于发射端。对天线阵元馈电进行幅度和相位调整,可形成所需形状的方向图。
波束成形技术属于阵列信号处理的主要问题:使阵列方向图的主瓣指向所需的方向。
在阵列信号处理的范畴内,波束形成就是从传感器阵列重构源信号。虽然阵列天线的方向图是全方向的,但阵列的输出经过加权求和后,却可以被调整到阵列接收的方向增益聚集在一个方向上,相当于形成了一个“波束”。
波束形成技术的基本思想是:通过将各阵元输出进行加权求和,在一时间内将天线阵列波束“导向”到一个方向上,对期望信号得到最大输出功率的导向位置即给出波达方向估计。
“导向”作用是通过调整加权系数完成的。对于不同的权向量,上式对来自不同方向的电波便有不同的响应,从而形成不同方向的空间波束。
波束成形的工作过程是怎样的?以热点为例,基站给客户端周期性发送声信号,客户端将信道信息反馈给基站,于是基站可根据信道状态发送导向数据包给客户端。高速的数据计算处理,给出了复形的指示,客户端方向上的增益得以加强,方向图随之整型,相应方向的传输距离也有所增加。AP 如果用4组发射天线4x4三组空间流,便能在多天线得到的增益基础上,获取较大的空间分集增益。 (资料搜集自:百度百科、通信信号处理第十一章)
(二)波束形成器:
1.Bartlett 波束形成器
Bartlett 波束形成器是经典Fourier 分析,对传感器阵列数据的一种自然推广。思想:使波束形成的输出功率相对于某个输入信号为最大。当存在多个信源时,波束形成的问题等价于加性噪声中的谐波频率估计。
设我们希望来自方向θ的输出功率为最大,则该最大化的问题可表示为:
argmax[{(n)X (n)W}]
H H H xx W R W E W X =
arg max[W E{X(n)X (n)}W]H H = 2222arg max[E |d(t)||W a()|||W ||]H θσ=+
在白噪声方差2σ一定的情况下,权向量的范数||W||不影响输出信噪比。故取||W||=1,
用Lagrange 乘子法容易求得上述最大化问题的解为:
加权向量BF W 可以解释为一空间滤波器,它与照射到阵列上的信号匹配。直观上,阵列加权使该信号在各阵元上产生的延迟(还可能是衰减)均衡,以便使它们各自的贡献最大限度的综合在一起。
空间波束:()()H
BF BF W a θθ=
特点:最优权和所需信号匹配,而无法抑制干扰。
分辨能力i 取决于阵列的几何结构和信噪比。
2.Capon 波束形成器
Bartlett 波束形成器不是自适应的,不能适应不同的干扰环境。为了针对不同的环境做自适应处理,波束形成器必须自动对消干扰信号,具有自适应功能。
Capon 波束形成器的数学描述为:
Min H W
RW St ()1H W a θ=
思想:使来自非θ方向的任何干扰所贡献的功率为最小,但又能保持在观测方向θ上的信号功率不变。
最优权矢量可以用Lagrange 乘子法求解。
空间波束:
()W ()H CAP BF a θθ=
特点:自适应干扰对消。对消干扰数受阵列几何结构的。分辨能力取决于阵列几何结构和信噪比。
(三)自适应波束形成算法
自适应波束形成是智能天线的关键技术,其核心是通过一些自适应波束形成算法获得天线阵列的最佳权重,并最终最后调整主瓣专注于所需信号的到达方向,以及抑制干扰信号,通过这些方式,天线可以有效接收所需信号。在实际应用中,收敛性,复杂性和鲁棒性的速度是在选择自适应波束形成算法时要考虑的主要因素。
智能天线是一种基于自适应天线原理的移动通信新技术,它结合了自适应天线技术的优点,利用天线阵列对波束的汇成和指向的控制,产生多个的波束,可以自适应的调整其波束图以跟踪信号的变化。
接受时,每个阵元的输入被自适应性的加权调整,并与其他的信号相加已达到从混合的接收信号中解调出期望得到的信号并抑制干扰信号的目的,它对干扰信号调零,以减少或是抵消干扰信号。发射时,根据从接收信号获知的用户设备信号方位,通过自适应性的调整每个辐射阵元输出的幅度和相位,使得他们的输出在空间叠加,产生指向目标用户设备的赋形波束,智能天线的特点是能够以较低的代价换取天线的覆盖范围、系统容量、业务质量、抗阻塞和抗掉话等性能的提高。
LMS最小均方算法、RLS递推最小二乘算法(基于参考信号的自适应波束形成的算法) SCB标准CAPON波束形成算法(基于波达角估计的自适应波束形成的算法)
Buss gang自适应均衡算法
clear,clc
m=8; % sensors
n=2; % sources
theta=[0 20]; % in angle
d=0.3; % 1/2 lambada
N=500; % samples
L=100; % resolution in [-90' 90']
Meann=0; % mean of noise
varn=1; % variance of noiseSNR=10; % signal-to-noise ratio
INR=10; % interference-to-noise ratio
rvar1=sqrt(varn) * 10^(SNR/20); % variance of signal
rvar2=sqrt(varn) * 10^(INR/20); % variance of interference
% generate the source signals
s=[rvar1*exp(j*2*pi*50*0.001*[0:N-1])
rvar2*exp(j*2*pi*(100*0.001*[0:N-1]+rand))];
% generate the A matrix
A=exp(-j*2*pi*d*[0:m-1].'*sin(theta*pi/180));
% generate the noise component
e=sqrt(varn/2)*(randn(m,N)+j*randn(m,N));
% generate the ULA data
Y=A*s+e;
% initialize weight matrix and associated parameters for LMS predictor de =s(1, :);
mu=1e-3;
w = zeros(m, 1);
for k = 1:N
% predict next sample and error
y(k) = w'*Y(:, k);
e(k) = de(k) - y(k);
% adapt weight matrix and step size
w = w + mu * Y(:,k)*conj(e(k));end
% beamforming using the LMS method
beam=zeros(1,L);
for i = 1 : L
a=exp(-j*2*pi*d*[0:m-1].'*sin(-pi/2 + pi*(i-1)/L));
beam(i)=20*log10(abs(w'*a));
end
% plotting command followed
figure
angle=-90:180/L:(90-180/L);
plot(angle,beam);
xlabel('方向角(度)');
ylabel('幅度响应/(dB)');
figure
for k = 1:N
en(k)=(abs(e(k))).^2;
end
semilogy(en);
xlabel('迭代次数n');
ylabel('e^{2}(n)');
波束形成器的本质是一个乘加器。
高斯牛顿算法(RLS):引入遗忘因子的作用是让离n时刻较近的误差有较大的权重,距离较远的拥有降低的权重,确保以前观测到的数据被渐渐“遗忘”,从而使滤波器工作在一个平稳状态下。
代价公式:
写成wiener滤波器的形式:输入:()
u i
下面是算法推导:
n
()()()
n i H
i
R n u i u i
λ-
=
=∑
n-1
-10
*()()u ()*()n i H H
i u i u i n u n λλ-==∑+
设: 则:
令: (n)R(n 1)x(n)x (n)H
R λ=-+
则:
其中: 为增益向量,又:
11(n)R (n 1)(n)
(n)(n)(n)R(n 1)(n)(n)(n)R (n 1)(n)
H H
P k μμμλμμλμμ---===-++-
**0
1()()()(n 1)()()
()[(n 1)()(n)(1)]
n
n i i H
r n u i d i r d n u n P n P k n u P n λλλ-=-=∑=-+=---
所以:
11***(n)R (n)r(n)P(n)r(n)
(1)(1)()[(1)()
()()(1)()]()()(1)(1)(1)()()()()(1)()w(n-1)k(n)e (n) (*)
H H H w P n r n d n P n u n k n u n P n u n k n u n P n r n w n d n k n k n u n w n w n λ--===--+------=-+--=+化简得:
式中:
()()(1)()H
e n d n w n u n =--先验误差 )
(u *(n))1-n (*n u R H +=λ)
n (R A =)1(1-=-n R B λ1=D )(n u C =H
C C
D B A 11--+=B
C BC C
D BC B A H H 11)(--+-=)
()1n ()(1)
1()()()1()1()(111121
1
1
n u R n u n R n u n u n R n R n R H H -+---
-=--------λλλ)n ()(1-=R n P 1()[(n 1)()(n)(1)]H
P n P k n u P n λ-=---)()1-n ()n ()()1n ()(n u P u n u P n k H +-=λ
总结RLS 算法的步骤。
1、初始化:w(0)=0, R(0)=σI,
2、更新:对于n=1、2···计算:
()(n 1)()H y n w u n =-滤波:
()()()e n d n y n =-估计误差: (n-1)u()(n)()(1)()
H P n k u n P n u n λ=+-更新 *()(1)()()w n w n k n e n =-+更新权向量:
1
P()[(n 1)()(n)(n-1)]H n P k n u P λ=--更新
希望相关矩阵初始值R(0)在R(n)中占很小的比重,因此设R(0)=σI 。σ一般取0.001。
1、RLS 算法对非平稳信号的适应性好。
2、RLS 算法收敛速度快,估计精度高稳定性好。
3、遗忘因子越大,越不易遗忘,效果越好。
4、RLS 算法计算复杂度高,不利于实时性处理。
RLS算法设计及流程
M =15; %均衡滤波器阶数为2*M+1
Lb=10; %信道b长度为L+1
%Lb=2; %信道c长度为L+1
%hb=[0.407 0.815 0.407];%离散时间信道c
hb=[0.04 -0.05 0.07 -0.21 0.50 0.72 0.36 0.00 0.21 0.03 0.07]; %离散时间信道b Hb=zeros(2*M+1,2*M+Lb+1);
for k =1:2*M+1; %信道b的信道矩阵
Hb(k,k:1:k+Lb)=hb;
end
%%%产生伯努利序列和加性白噪声,构建均衡滤波器的输入数据矩阵sigma=1e-3; %加性白高斯噪声的方差
N=2000; %迭代次数
s=randsrc(2*M+Lb+N,1); %伯努利序列
vn=sqrt(sigma)*randsrc(2*M+Lb+N,1);
S=zeros(2*M+Lb+1,N); %发射信号矩阵S
V=zeros(2*M+1,N); %加性白高斯噪声矩阵V
for k=1:N
S(:,k)=s(2*M+Lb+k:-1:k);
V(:,k)=vn(2*M+k:-1:k);end
Ub=Hb*S+V; %均衡滤波器输入数据矩阵 Ub
%%%RLS迭代算法
dn=S(M+Lb+1,:); %期望信号
lambda = 0.990; %RLS遗忘因子
delta =0.004; %RLS调整参数
wb_RLS =zeros(2*M+1,N+1);
wb_RLS(M+1,1)=1; %权向量初始值
epsilon=zeros(N,1); %先验估计误差
P1=eye(2*M+1)/delta; %相关矩阵逆的初始值
for k=1:N %RLS算法迭代过程
PIn=P1*Ub(:,k);
deno= lambda+Ub(:,k)'*PIn
kn=PIn/deno;
epsilon(k)=dn(k)-wb_RLS(:,k)'*Ub(:,k);
wb_RLS(:,k+1)=wb_RLS(:,k)+kn*conj(epsilon(k));
P1=P1/lambda-kn*Ub(:,k)'*P1/lambda; end
MSEB_RLS = abs(epsilon).^2; %单次实验均方误差MSEB_RLS n=1:2000;
plot(n,MSEB_RLS)
title('RLS算法学习曲线')
xlabel('迭代次数n')
ylabel('MSEB_RLS')
axis([0 2000 1e-3 1e+2]);