用MATLAB仿真阵列天线方向图:阵因子、方向图相乘与栅瓣判据
2026/9/18 12:02:24 网站建设 项目流程

简介:阵列天线方向图及其MATLAB仿真是面向天线工程与电磁场相关课程学习者的技术文档,系统讲解阵列天线方向图的基本原理与基于MATLAB的仿真方法。文档从阵列天线由多单元组成、各单元辐射场矢量和叠加的概念出发,介绍了方向图相乘原理,并给出解析计算与数值仿真的适用场景;随后提供三组完整MATLAB源程序,分别控制阵列个数n、波长lamda、阵元间距d三个变量,绘制方向图曲线并对比参数变化对波束形状、衰减速度及收敛性的影响。资源为1个doc文件,压缩包约97KB,适合通信工程、电子信息类专业学生完成课程设计或实验报告时参考,也便于初学者通过修改参数直观理解阵列天线的波束形成规律。已有344人浏览学习,内容结构紧凑、程序可直接运行,是一份兼具原理推导与实验分析价值的入门资料。

1. 为什么阵列天线方向图值得自己动手仿一遍

把 20 个普通天线振子以四分之一波长间距排成直线,不增加任何馈电功率,主瓣就能被压到十几度以内;再把间距从 0.006m 调到 0.01m,旁瓣的下降速度又会明显变快。这些结果靠直觉很难精确预估,但用阵列天线的阵因子公式,配 MATLAB 十几行代码就能完整复现。阵列天线方向图是相控阵、MIMO 天线和基站天线设计里最基础的一张图,它直接决定波束指向、覆盖范围和抗干扰能力。对刚接触天线仿真的工程师,或者正在做课程设计和面试准备的从业者来说,亲手把 n、lambda、d 三个参数各跑一遍,比直接打开 HFSS、CST 看全波结果更能建立物理直觉。

2. 阵因子公式与方向图相乘:从求和式到 MATLAB 向量化

2.1 阵列天线的辐射场为什么能写成阵因子

阵列天线由不少于两个单元组成,空间某一点的总场是各单元辐射场的矢量和。假设单元是无方向性点源,沿直线等间距摆放,各单元馈电幅度和相位都相同,那么在远区观察方向上,相邻单元的波程差为 dsin(theta),相位差为 psi = 2pidsin(theta)/lamda。把 N 个单元按相位累加,几何级数求和后取绝对值,就得到均匀线阵的归一化阵因子:

|AF(theta)| = |sin(Npsi/2) / (Nsin(psi/2))|

这是整份文档所有仿真代码的核心。需要注意 theta 的单位是弧度,0 对应阵面法线方向,正负方向扫到端射;代码里sita=-pi/2:0.01:pi/2就是只做半空间扫描。

2.2 用向量化写出阵因子曲线

MATLAB 画方向图不需要 for 循环,把 sita 定义为向量,公式一次算完。下面这段代码是所有参数实验的公共模板:

sita = -pi/2:0.01:pi/2; % 观察角,弧度,从 -90 度到 +90 度 N = 20; % 阵元数 d = 0.0075; % 阵元间距,单位 m lamda = 0.03; % 工作波长,单位 m psi = 2*pi*d*sin(sita)/lamda; % 相邻单元相位差 AF = sin(N*psi/2) ./ (N*sin(psi/2)); % 归一化阵因子 AF(isnan(AF)) = 1; % 0 度附近 0/0 修正 F = abs(AF); plot(sita, F, 'b'); grid on; xlabel('theta/radian'); ylabel('amplitude');

变量Ndlamda分别对应原文里的阵列个数、间距和波长;psi是相位差向量,所以必须用./做逐元素除法。AF(isnan(AF)) = 1专门处理 theta=0 时的 0/0;这一行不加,主瓣顶端会缺一个点,曲线看起来像被削平。

提示:如果想让主瓣显示得更高,可以把plot(sita, F, 'b')换成plot(sita, F/max(F), 'b'),把曲线归一化到 1,后续实验对比时会更直观。

2.3 方向图相乘原理和它为什么重要

上面的推导默认单元无方向性。实际单元比如微带贴片、偶极子都有自己的方向图 F_elem(theta),如果所有单元朝向一致,总方向图可以近似写成单元方向图乘以阵因子:

F_total(theta) = F_elem(theta) * AF(theta)

这个方向图相乘原理极大简化多元阵的计算。一个复杂阵列可以先分解成子阵,求子阵方向图,再乘上以子阵为单元组成的阵因子;单元自身方向图非均匀时,也只需要在最后乘一次。紧耦合天线阵列和强互耦宽带宽角阵列,全波仿真里单元间耦合很复杂,但方案预研阶段用单元方向图乘阵因子,依然能快速判断波束扫描趋势。

3. n、lambda、d 三组参数仿真:完整 MATLAB 代码与参数表

3.1 公共设置与参数表

文档里的仿真统一使用sita=-pi/2:0.01:pi/2,方向图公式也一样,区别只在 n、lamda、d 三个变量。跑下面代码前,先把脚本存成.m文件,当前目录切到脚本所在文件夹再运行。这三组程序只用 plot、sin、legend 这些内置函数,不需要额外工具箱。

实验固定参数变量取值关注点
实验1lamda=0.03m, d=lamda/4=0.0075mn=20,25,30阵列个数对方向图的影响
实验2n=20, d=0.0002mlamda=0.002,0.003,0.004m波长对方向图的影响
实验3n=20, lamda=0.03md=0.010,0.0075,0.006m阵元间距对方向图的影响

注意实验2的 d 取得很小,只有 0.0002m。改变 lamda 后,d/lamda 从 0.1 降到 0.05,阵列电尺寸明显变小,所以这一组的主瓣会非常宽。它和工程上常用的 d=lamda/2 场景不同,但作为参数趋势观察没有影响。

实验1 到实验3 的代码里暂时不处理 sita=0 时的 0/0 问题,如果主瓣顶端出现一个凹坑,那不是算法错误,而是数值奇异点,第 4 章会统一讲怎么处理。

3.2 实验1:方向图随阵列个数 n 变化

clear; sita = -pi/2:0.01:pi/2; lamda = 0.03; d = lamda/4; n1 = 20; beta = 2*pi*d*sin(sita)/lamda; F1 = abs(sin((n1/2)*beta) ./ (n1 * sin((1/2)*beta))); n2 = 25; beta = 2*pi*d*sin(sita)/lamda; F2 = abs(sin((n2/2)*beta) ./ (n2 * sin((1/2)*beta))); n3 = 30; beta = 2*pi*d*sin(sita)/lamda; F3 = abs(sin((n3/2)*beta) ./ (n3 * sin((1/2)*beta))); figure(1); plot(sita, F1, 'b', sita, F2, 'r', sita, F3, 'k'); grid on; xlabel('theta/radian'); ylabel('amplitude'); title('方向图与阵列个数的关系'); legend('n=20', 'n=25', 'n=30');

代码把原文档里的 z11、z21 中间变量合并成一步,因为(n/2)*beta就是N*psi/2(1/2)*beta就是psi/2,计算结果与原始脚本完全一致。跑完后可以看到:n 越大,主瓣越窄,旁瓣数量越多,但相邻旁瓣之间的凹陷更深,方向图包络在视觉上衰减得更快。这说明增大阵元数是提高阵列方向性最直接的手段,代价是成本和通道数一起涨。

3.3 实验2:方向图随波长 lamda 变化

clear; sita = -pi/2:0.01:pi/2; N = 20; d = 0.0002; lamda1 = 0.002; beta = 2*pi*d*sin(sita)/lamda1; F1 = abs(sin((N/2)*beta) ./ (N * sin((1/2)*beta))); lamda2 = 0.003; beta = 2*pi*d*sin(sita)/lamda2; F2 = abs(sin((N/2)*beta) ./ (N * sin((1/2)*beta))); lamda3 = 0.004; beta = 2*pi*d*sin(sita)/lamda3; F3 = abs(sin((N/2)*beta) ./ (N * sin((1/2)*beta))); figure(2); plot(sita, F1, 'b', sita, F2, 'r', sita, F3, 'k'); grid on; xlabel('theta/radian'); ylabel('amplitude'); title('方向图与波长的关系'); legend('lamda=0.002', 'lamda=0.003', 'lamda=0.004');

这里固定 d=0.0002m,lamda 从 0.002m 增大到 0.004m,等效于 d/lamda 从 0.1 降到 0.05。阵列的物理长度没变,但电长度 N*d/lamda 变小,主瓣明显变宽,方向图在远离主瓣的区域仍然保持较高电平。原文档里“衰减越慢、收敛性越不好”指的就是这种旁瓣区电平被抬高的现象。这一组实验最重要的结论是:方向图形状由电尺寸决定,不能只看绝对物理尺寸。

3.4 实验3:方向图随阵元间距 d 变化

clear; sita = -pi/2:0.01:pi/2; N = 20; lamda = 0.03; d1 = 0.010; beta = 2*pi*d1*sin(sita)/lamda; F1 = abs(sin((N/2)*beta) ./ (N * sin((1/2)*beta))); d2 = 0.0075; beta = 2*pi*d2*sin(sita)/lamda; F2 = abs(sin((N/2)*beta) ./ (N * sin((1/2)*beta))); d3 = 0.006; beta = 2*pi*d3*sin(sita)/lamda; F3 = abs(sin((N/2)*beta) ./ (N * sin((1/2)*beta))); figure(3); plot(sita, F1, 'b', sita, F2, 'r', sita, F3, 'k'); grid on; xlabel('theta/radian'); ylabel('amplitude'); title('方向图与阵元间距 d 的关系'); legend('d=0.010', 'd=0.0075', 'd=0.006');

这一组 d 分别是 0.010、0.0075、0.006m,对应 d/lamda 为 0.333、0.25、0.2,都小于 0.5,所以不会出现栅瓣。d 增大时,阵列总长度 (N-1)d 变大,主瓣变窄;在相同的 theta 跨度里旁瓣数量变多,第一旁瓣仍然在 -13dB 附近,但更远处的旁瓣包络下降更快。这说明在栅瓣条件允许的范围内,适当拉大间距能改善方向图选择性,但为了压窄主瓣无限加大 d 是不可行的。

4. 从振幅曲线到栅瓣判据:均匀线阵结果分析与常见排错

4.1 三个关键指标:主瓣宽度、旁瓣电平、衰减速度

曲线跑出来后,不要只停留在“看起来变窄了”。工程上更关心半功率波束宽度、第一旁瓣电平和旁瓣包络衰减速度。均匀线阵的阵因子主瓣宽度大约为 0.886lamda/(Nd) 弧度,N*d 越大主瓣越窄。第一旁瓣电平不随 N 明显变化,通常在 -13.26dB 左右;旁瓣数量增多时,只是这些旁瓣在角度轴上铺得更开。文档里“方向图衰减越快/越慢”对应的其实是旁瓣包络的下降快慢,可以用下表归纳:

变量变化主瓣宽度第一旁瓣电平旁瓣包络衰减电尺寸变化
n 增大变窄基本不变视觉上更快N*d/lamda 增大
lamda 增大变宽结构消失更慢N*d/lamda 减小
d 增大变窄基本不变更快N*d/lamda 增大

lamda 增大那一行来自实验2,第一旁瓣已经被推出可视区间,方向图更像单个振子,所以表格里写“结构消失”,意思是不能用第一旁瓣电平来评价这个状态。

4.2 栅瓣判据:间距为什么不是越大越好

实验3的 d 最大只有 0.01m,对应 d/lamda=0.333,安全。如果把 d 改成 0.02m,lamda=0.03m,d/lamda 变成 0.667,方向图会在接近正负 90 度方向出现第二个接近 1 的栅瓣。原因是相邻单元在某个扫描角上的波程差恰好为整数倍波长,所有单元同相叠加。均匀侧射阵不出现栅瓣的条件是 d/lamda < 1/(1+|sin(theta_max)|);扫描到端射时,要求 d < lamda/2。

在 MATLAB 里验证栅瓣很快,接着实验3的变量,直接加一段:

N = 20; sita = -pi/2:0.01:pi/2; lamda = 0.03; d_test = 0.02; beta = 2*pi*d_test*sin(sita)/lamda; F_test = abs(sin((N/2)*beta) ./ (N * sin((1/2)*beta))); plot(sita, F_test);

如果曲线在主瓣外出现第二个接近 1 的峰值,那就是栅瓣。实际相控阵设计会把 d/lamda 控制在 0.5 以内并留余量,否则大角度扫描时栅瓣会进入可视区,把能量打到错误方向。

4.3 MATLAB 仿真里的四个常见坑

第一个坑是角度单位。MATLAB 的 sin 函数默认弧度制,sita=-pi/2:0.01:pi/2扫的是弧度;如果习惯用度数,需要先构造theta_deg=-90:0.5:90,再用sita=theta_deg*pi/180转换。

第二个坑是 0/0。psi=0 时阵因子分子分母同时为 0,MATLAB 输出 NaN,曲线在主瓣中心出现缺口。修正方法是在取绝对值后写F(isnan(F))=1,或者给 beta 加一个极小的数,比如2*pi*d*sin(sita)/lamda + 1e-12。后者的微扰在画图上肉眼看不见,但能防止除零。

第三个坑是只画线性幅度。旁瓣电平低到 0.1 甚至 0.05 时,线性坐标下几乎贴地。更专业的方式是画 dB 方向图:

F_db = 20*log10(F / max(F)); plot(sita, F_db, 'b'); ylim([-40, 0]);

这样第一旁瓣 -13dB、第二旁瓣 -18dB 一眼就能读出来,也更容易做不同参数之间的对比。

第四个坑是类似仿真发散的现象。如果曲线在某个角度突然跳变,或者出现对称的两个高峰,先不要怀疑公式,优先检查 d/lamda 是否超过 0.5,再检查是否把./写成了/,或者向量长度不一致。阵列方向图仿真里真正的发散很少见,绝大多数是 0/0 和弧度度数混用造成的视觉异常。

5. 方向图相乘原理的工程进阶:单元方向图与紧耦合阵列预研

5.1 把阵因子封装成可复用函数

三次实验都在改参数重跑,改动其实只有变量名。把阵因子写成函数,参数扫描会更方便:

function AF = array_factor(sita, d, lamda, N) % 均匀线阵归一化阵因子 % sita: 观察角向量(弧度) % d: 阵元间距(m) % lamda: 工作波长(m) % N: 阵元数 psi = 2*pi*d*sin(sita)/lamda; AF = sin(N*psi/2) ./ (N*sin(psi/2)); AF(isnan(AF)) = 1; AF = abs(AF); end

保存成 array_factor.m 后,第3章的实验1可以缩成三行调用:

sita = -pi/2:0.01:pi/2; F1 = array_factor(sita, 0.0075, 0.03, 20); F2 = array_factor(sita, 0.0075, 0.03, 25);

这个函数没有循环,长向量也能瞬间算完;后面做 n、d 的二维扫描时,外层加两个 for 循环即可。

5.2 用方向图相乘验证单元方向图对总方向图的修正

把无方向性点源换成贴近实际的单元方向图,比如 H 面接近 cos(theta) 的贴片单元,总方向图就是单元方向图乘阵因子:

sita = -pi/2:0.01:pi/2; AF = array_factor(sita, 0.0075, 0.03, 20); F_elem = abs(cos(sita)); F_total = F_elem .* AF;

运行后能看到端射方向被单元方向图明显压低,即使阵因子在端射附近没有完全归零,总方向图也会迅速衰减。这就是方向图相乘原理的实践价值:单元选型决定大角度区域的上限,阵因子决定主波束形状。

5.3 对紧耦合天线阵列预研的意义

紧耦合天线阵列靠强互耦展宽带宽,单元方向图在全波仿真里会随频率和扫描角变化,严格分析必须处理耦合矩阵。方案阶段用“单元方向图 × 阵因子”做零阶近似,可以快速判断波束扫描时主瓣和栅瓣的移动趋势,确认 d/lamda 在工作频段内不触碰栅瓣条件。更近一步,把 d/lamda 和扫描角做成二维矩阵,画出阵因子最大值位置的等高线,就能直接读出安全区边界,再回全波软件精验证。需要特别留意的是,当 d/lamda 接近 0.5 且扫描角接近端射方向时,sin(sita) 的变化率最大,扫描角步长建议取 0.001 弧度,否则端射方向的波束顶点会被大步长切平。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询