微信公众号:EW Frontier
关注可了解更多的雷达、通信、人工智能相关代码。问题或建议,请公众号留言;
如果你觉得EW Frontier对你有帮助,欢迎加入我的知识星球或面包多,更多代码等你来学
知识星球:https://wx.zsxq.com/dweb2/index/group/15552518881412
面包多:https://mbd.pub/o/author-a2mYl2tsbA==/workQQ交流群:729981694
如有侵权请联系删除~
简介
自适应波束形成技术广泛应用于航空、航天、雷达和通信系统中。自适应波束形成通过调节各 阵元的加权幅度和加权相位,来改变阵列的方向图,使阵列天线的主瓣对准期望用户;同时阵列天 线的零点和副瓣对准其他用户,从而提高接收信噪比 [1,2]。线性约束最小方差 (LCMV)准则是最常 用的自适应波束形成方法。广义旁瓣相消器 (GSC)是 LCMV的一种等效的实现结构 [3,4],GSC结构 将自适应波束形成的约束优化问题转换为无约束的优化问题,分为自适应和非自适应两个支路,分 别称为主支路和辅助支路,要求期望信号只能从非自适应的主支路通过,而自适应的辅助支路中仅 含有干扰和噪声分量,在高信噪比的情况下,将有一部分期望信号泄漏到辅助支路中,出现了信号 相消现象。
主要原理
全部MATLAB代码
GSC.m
clc
clear all;
close all;
m=8 ;% array阵元
p=4; % signal number信号数
N=3000;% recursive number 迭代次数 或快拍数
A=zeros(m,p); % array pattern阵列流型
theta=[30 0 -45 60]*pi/180;% the signal from the direction of 30 degree is expected. DOA 30为期望信号方向
j=sqrt(-1);
w=[0.01 0.2 0.3 0.4]*pi; % frequency for each signal.各个信号的数字频率
%%
s=to_get_s(w,N,p);
s_rec=get_s_rec(s,m,p,theta);
S=s_rec; % output date matrix .m*N 的阵元输出数据矩阵
%%%%——————————————%% 自适应调节权
y=S;% input data of GSC;
ad=exp(-j*pi*[0:m-1]'*sin(theta(1))) %steering vector in the direction of expected. 期望信号方向导向矢量
c=10;% condition 波束形成条件
C=ad';
Wc=C'*inv(C*C')*c; %main path weight 主通道固定权
wa(1:m-1,1)=0; % auxiliary path 辅助通道自适应权
B=get_B(m,theta); % get Block Matrix 得到阻塞矩阵
u=0.000001;
for k=1:N
yb=conj(B)*y(:,k); % m-1*1 的列向量
Zc(k)=Wc.'*y(:,k);
Za(k)=wa(:,k).'*yb;
Z(k)=Zc(k)-Za(k);
wa(:,k+1)=wa(:,k)-u*Z(k)*conj(yb);
end
%%%%------------
%%%main path 主通道
wop=Wc;
drawpp(m,wop);
%%%%auxiliary path 辅助通道
wop=B'*wa(:,N)
drawpp(m,wop);
%%array response 总的阵列响应
wop=Wc-B'*wa(:,N);
drawpp(m,wop);
get_B.m
function Bm=get_B(m,theta) %用于产生阻塞矩阵%采用正交法构造阻塞矩阵
u0=0.5*sin(theta(1)); % 假设阵元间距为半个波长
a0=exp(-j*2*pi*[0:m-1]'*u0);
u=u0+[1:m-1];
B=exp(-j*2*pi*[0:m-1]'*u);
Bm=conj(B');%% M-1*M 的矩阵
get_Rxx.m
function Rxx=get_Rxx(s_rec,N,p,m)
Rxx=zeros(m,m);
x=1:m;
for i=1:N
for t=1:m
s_rec(t,i); =
end
R=x'*x;
Rxx=Rxx+R;
end
Rxx=Rxx/N;
get_s_rec.m
function s_rec=get_s_rec(s,m,p,theta) %用于产生经过阵元后的信号数据
A=zeros(m,p);
j=sqrt(-1);
%%% 阵元间距为半个波长
wi=pi*sin(theta);
A=exp(-j*wi'*[0:(m-1)]); % 阵列流型
s_rec=A'*s;
s_rec=awgn(s_rec,10); % SNR=10 db
to_get_s.m
function s=to_get_s(w,N,p)
s=zeros(p,N);
for i=1:p
s(i,1:N)=exp(j*w(i).*(1:N)); % 复指数信号 假设信道增益为 1
end