常规波束形成MATLAB实例分析

这段时间由于学习和工作原因开始学习阵列信号处理的相关知识,本系列仅用于个人学习记录,本人也是刚刚开始学习,若在文章中有错误或者问题,非常欢迎各位大佬批评指正!


波束形成对于阵列信号处理是一个十分重要的组成部分,最常规的波束形成方法,是一种相控阵天线法,该方法选取了一个权向量来补偿阵列中各阵元的传播延时,从而使得阵元输出在某一期望方向上可以同向叠加,在该方向上产生一个主瓣波束,在其他方向上产生较小的响应。

本文现在将用MVDR算法并以常规波束形成角度来构造等距线阵MATLAB代码

参量初始化

要实现波束形成,我们首先要知道一些基本的参量,如阵元数,快拍数,信号源个数,信号入射角度,干扰源个数及其入射角度等等。

这里着重强调一下快拍数,在阵列信号处理和波束形成的理论中,快拍数十分重要,他指的是在信号采样过程中的总采样点的个数,也可以理解是采样次数,即采样时间点的数量(样本数量),如:对于M个阵元的阵列,其在第t个快拍时接收到的信号为(这里无视干扰以及噪声,仅为举例理解)

X(t)=[X1(t),X2(t), ... ,XM(t)]

快拍数主要是用于协方差矩阵估计,协方差矩阵对于波束形成算法是非常重要的部分。

快拍数越多,协方差矩阵估计越准确,波束形成效果越好,但不能无限多,会使计算更复杂,对存储要求也较高。

参量初始化代码如下:

%%参量初始化
M=18;%天线数
L=100;%快拍数
thetas=10;%信号入射角度
thetai=[-30 30];%干扰入射角度
n=[0:M-1]';

方向矢量构造

对于方向矢量的构造,我们可以参考均匀线阵的阵列响应矢量

A(\theta )=\begin{bmatrix}1 & exp(-j2\pi dsin\theta /\lambda )&...& exp(-j2\pi (M-1)dsin\theta /\lambda )\\\end{bmatrix}

本文里的均匀线阵以半波长布阵,即

d=\lambda /2

所以信号和噪声的方向矢量构造如下:

%%方向矢量
vs=exp(-j*pi*n*sin(thetas/180*pi));%信号方向矢量
vi=exp(-j*pi*n*sin(thetai/180*pi));%干扰方向矢量

所需信号构造

对于该信号,我们需要构造他的有用部分,噪声部分和干扰部分,我们假设这里的信噪比和干燥比都是10,代码如下:

%%信号生成
f=16000;%载波频率
t=[0:1:L-1]/200;
snr=10;
inr=10;
xs=sqrt(10^(snr/10))*vs*exp(j*2*pi*f*t);%构造有用信号
xi=sqrt(10^(inr/10)/2)*vi*[randn(length(thetai),L)+j*randn(length(thetai),L)];
%构造干扰信号
noise=[randn(M,L)+j*randn(M,L)]/sqrt(2);%噪声,归一化处理(根号2)
X=xi+noise;

对于期望信号,其是一个正弦型信号,形式为:

x_{s}(t)=A_{s} exp(2\pi ft+\phi )

代码中的 v_{s} 即为公式里的相角 \phi ,而幅值 A_{s} 的构造则是与信噪比有关。

信噪比为

SNR(dB)=10log_{10}(\frac{P_{s}}{P_{n}})

所以可推导出

P_{s}=10^{\frac{SNR}{10}}P_{n}

P_{s}\propto \left | A_{s} \right |^{2}

x_{s} 构造完成。 

这里的干扰信号 x_{i} 假设为随机复高斯信号,且其幅值与期望信号构造方法一样,利用了干噪比INR

对于噪声,假设其也是复高斯信号,唯一需要说明的是,在 MATLAB编程语言中,生成标准正态分布的随机数时,通常会得到均值为 0、方差为 1 的高斯噪声。为了将其实部和虚部的方差调整为1​,需要对噪声进行归一化处理,所以最后除以了根号2,是为了确保噪声的总功率为1。

在学习过程中,也有一个比较重要的问题值得思考,在代码中对于信号 X 没有包含期望信号 x_{s} ,经查阅资料分析思考,可能的原因如下:

在 LCMV 波束形成算法中,通常假设期望信号是已知的方向矢量,而协方差矩阵仅由干扰和噪声构成。况且波束形成器的目标是对准期望信号方向,同时抑制干扰和噪声。如果期望信号被加入到接收信号中,可能会引入不必要的偏差,影响波束形成的效果。

权向量计算与波束图绘制(针对MVDR/LCMV波束形成器)

对于LCMV波束形成器,其准则为:在某种约束条件下使阵列输出的方差最小。

约束函数为:

J(w)=w^{H}Rw

约束条件为:

w^{H}A(\theta )=f

然而,当线性约束条件  f=1 时,该算法就变成了最小方法无畸变响应,MVDR波束形成器,其权向量计算公式为:

w=\frac{R^{-1}A(\theta )}{A(\theta )^{H}R^{-1}A(\theta )}

当  {R^{-1}A(\theta )}=1 时,即为Capon波束形成。

%%协方差矩阵
R=X*X'/L;%构造协方差矩阵

%%权向量计算
wop1=inv(R)*vs/(vs'*inv(R)*vs);%波束形成

波束图绘制

%%波束图绘制
sita=45*[-1:0.001:1];%扫描方向范围
v=exp(-j*pi*n*sin(sita/180*pi));%扫描方向矢量
B=abs(wop1'*v);
plot(sita,20*log10(B/max(B)),'k');
title('波束图');
xlabel('角度/degree');
ylabel('波束图/dB');
grid on
axis([-45 45 -50 0]);
hold off

最后需要计算最后总的波束响应,公式这里不再赘述。

以上就是最常规的波束形成器的构造思路,本人仅为新手,欢迎各位大佬批评指正,完整MATLAB代码如下:

%%参量初始化
M=18;%天线数
L=100;%快拍数
thetas=10;%信号入射角度
thetai=[-30 30];%干扰入射角度
n=[0:M-1]';

%%方向矢量
vs=exp(-j*pi*n*sin(thetas/180*pi));%信号方向矢量
vi=exp(-j*pi*n*sin(thetai/180*pi));%干扰方向矢量

%%信号生成
f=16000;%载波频率
t=[0:1:L-1]/200;
snr=10;
inr=10;
xs=sqrt(10^(snr/10))*vs*exp(j*2*pi*f*t);%构造有用信号
xi=sqrt(10^(inr/10)/2)*vi*[randn(length(thetai),L)+j*randn(length(thetai),L)];
%构造干扰信号
noise=[randn(M,L)+j*randn(M,L)]/sqrt(2);%噪声,归一化处理(根号2)
X=xi+noise;

%%协方差矩阵
R=X*X'/L;%构造协方差矩阵

%%权向量计算
wop1=inv(R)*vs/(vs'*inv(R)*vs);%波束形成

%%波束图绘制
sita=45*[-1:0.001:1];%扫描方向范围
v=exp(-j*pi*n*sin(sita/180*pi));%扫描方向矢量
B=abs(wop1'*v);
plot(sita,20*log10(B/max(B)),'k');
title('波束图');
xlabel('角度/degree');
ylabel('波束图/dB');
grid on
axis([-45 45 -50 0]);
hold off



代码输出为

文献参考:张小飞 《阵列信号处理及MATLAB实现》     电子工业出版社

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值