2-142 基于matlab的圆形阵列的波束形成进行仿真 【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真,具有14页文档。 假设发射信号载频为1GHz,圆形阵列半径为0.8米,在圆周上均匀布置30个阵元。 1.画出指向0度的方向图。 2.如果目标在0度,有一不相干的干扰信号在30度,干扰噪声功率比为30dB。 请用自适应波束形成方法画出方向图。 程序已调通,可直接运行。


最近在搞圆形阵列波束形成的仿真,发现这东西虽然数学推导有点麻烦,但用MATLAB实现起来还挺有意思的。尤其是看到方向图随着参数调整变化的时候,感觉像在玩声波版的激光剑。直接上干货,先说说怎么用30个阵元围成的圆盘阵列搞事情。

阵元摆位是关键

首先得把30个阵元均匀撒在半径0.8米的圆周上。这里有个坑——阵元编号和角度的对应关系搞错的话,方向图会直接翻车。用极坐标最直观:

theta = linspace(0, 2*pi, N+1); theta(end) = []; % 30等分圆周
elem_pos = R * [cos(theta); sin(theta)].'; % 阵元坐标计算

这里linspace最后一个点要和第一个点重合,所以得删掉重复的2π位置。画出来的阵型要是吃豆人形状就对了,千万别摆成多边形。

固定波束形成

想要波束指向0度,核心是计算各阵元的相位差。这里用经典的时延波束形成方法:

lambda = 3e8/1e9; % 波长计算
steer_angle = 0; % 主瓣指向
steer_vec = exp(-1j*2*pi/lambda * (elem_pos*[cosd(steer_angle); sind(steer_angle)])); % 导向矢量

这个steer_vec相当于给每个阵元发了个"时间校准器",让所有阵元接收到的0度信号实现同相加。画方向图的时候有个技巧——扫描角度别用整数步长,否则会在某些角度出现锯齿:

scan_angle = linspace(-180, 180, 361);
pattern = abs(steer_vec * array_response).'; % 方向图计算

运行后能看到典型的多旁瓣结构,主瓣宽度大概在6度左右。这时候如果突然来个30度的干扰,传统波束形成就跪了,得搬出自适应算法。

2-142 基于matlab的圆形阵列的波束形成进行仿真 【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真,具有14页文档。 假设发射信号载频为1GHz,圆形阵列半径为0.8米,在圆周上均匀布置30个阵元。 1.画出指向0度的方向图。 2.如果目标在0度,有一不相干的干扰信号在30度,干扰噪声功率比为30dB。 请用自适应波束形成方法画出方向图。 程序已调通,可直接运行。

自适应抗干扰

MVDR算法这时候就是救世主。关键在干扰加噪声协方差矩阵的计算:

interf_angle = 30; % 干扰方位
S_interf = exp(-1j*2*pi/lambda*(elem_pos*[cosd(interf_angle); sind(interf_angle)])); % 干扰导向矢量
R = 10^(30/10)*(S_interf*S_interf') + eye(N); % 协方差矩阵
w_mvdr = (inv(R)*steer_vec)/(steer_vec'*inv(R)*steer_vec); % 最优权值

这里有个细节,干扰功率比是30dB,所以要在协方差矩阵里体现功率差异。eye(N)那项相当于给系统留了点热噪声,防止矩阵求逆的时候数值爆炸。

效果验证

对比自适应前后的方向图,能看到在30度位置出现了明显的零陷,深度大概35dB。但副作用是主瓣稍微变胖了点,毕竟天下没有免费的午餐:

% 画图对比
plot(scan_angle, 20*log10(normal_pattern/max(normal_pattern)), 'b');
hold on;
plot(scan_angle, 20*log10(mvdr_pattern/max(mvdr_pattern)), 'r--');

实际跑代码时会发现,当干扰靠近主瓣时(比如干扰在5度),零陷会开始吞噬主瓣能量。这时候就得换鲁棒性更好的算法,不过那就是另一个故事了。

仿真中最魔幻的时刻,是看着那个深不见底的零陷精准戳在干扰方向上的时候——仿佛阵列突然长了眼睛,对着干扰说:"就你叫夏洛啊?"

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐