简介:面向电子工程、通信与雷达方向的学习者与研究人员,这份资源围绕直线天线阵的MATLAB仿真展开,覆盖阵元间距设置、偶极子单元建模、阵列几何定义、频率扫描与远场方向图绘制等关键环节,帮助读者理解相位关系对波束指向与增益的影响,并据此评估旁瓣电平、主瓣宽度与方向性等指标。压缩包共9个文件,约1.1MB,以8张png仿真结果图和1个m脚本为主:脚本承载阵列建模与分析流程,图片则直观呈现二维与三维辐射方向图,便于对照代码理解不同配置下的输出差异。目前已有612人学习,适合具备一定MATLAB基础、希望动手复现并迭代优化天线阵列参数的读者参考。
1. 直线天线阵仿真:为什么“阵因子”才是方向图的主角
把 N 个相同天线沿一条直线等间距排开,方向图会突然变“尖”,主瓣变窄、旁瓣冒头——很多人第一次在 MATLAB 里跑出这条曲线时,会下意识以为是单个天线的方向图被“叠加放大”了。恰恰相反:单元方向图几乎没变,真正被改变的是阵因子(Array Factor)。直线天线阵的仿真,本质上不是画天线,而是把“空间相位差”这件事算清楚。搞懂阵因子怎么从几何关系里长出来、为什么扫描角一变旁瓣就翻车、为什么栅瓣会在某个间距下突然出现,比会调几个pattern函数重要得多。这份基于 MATLAB 的直线天线阵仿真资源,价值就在于把这条从几何到相位的链路完整摊开,让你能亲手验证每一个“玄学”现象背后的数学。
2. 阵因子:空间相位差如何被累加成一个方向图
2.1 从几何到相位:阵因子的推导起点
直线阵的物理图像极其简单:N 个各向同性(或相同)的辐射单元,沿一条轴等间距 d 排开。远场某方向 θ 上,相邻两个单元到观察点的波程差是d·cosθ(以阵轴为参考时)或d·sinθ(以阵轴法向为参考时),对应相位差ψ = k·d·cosθ + β,其中k = 2π/λ是波数,β 是相邻单元之间的馈电相位差——也就是电扫描的那个“旋钮”。
这里有个容易被忽略的细节:波程差是几何量,馈电相位差是电路量,两者在远场是直接相加的。这意味着你既可以用机械转动阵面来改变主瓣指向,也可以固定阵面、只调 β 来“电扫”。仿真里通常固定几何、扫 β,因为这才是相控阵的真正卖点。
把 N 个单元的贡献写成复数和,等比数列求和后得到闭式:
AF(θ) = Σ_{n=0}^{N-1} exp(j·n·ψ) = sin(N·ψ/2) / sin(ψ/2) · exp(j·(N-1)·ψ/2)幅度部分|sin(Nψ/2) / sin(ψ/2)|就是归一化阵因子。这个式子是全篇的“母公式”:主瓣宽度、旁瓣电平、栅瓣位置,全部从它里面读出来。常见的实现思路是先算 ψ 再算 AF,而不是直接对每个单元做循环累加——后者在 N 很大时数值上没问题,但闭式让你能一眼看出“零点在哪、峰值在哪”。
2.2 归一化与方向图相乘:总方向图不是阵因子
总方向图 = 单元方向图 × 阵因子,这是方向图乘积定理。仿真里最容易翻车的地方,是把阵因子当成总方向图直接画出来,然后困惑“为什么和实测对不上”。单元如果是理想各向同性,两者确实一样;但只要单元有真实方向图(比如半波振子),大角度上的总方向图会被单元方向图压下去,阵因子的旁瓣在大角度处会被“削掉”。
MATLAB 里做这件事的典型写法是先构造角度向量,再分别算单元和阵因子,最后逐点相乘:
theta = linspace(0, 2*pi, 2000); % 全平面角度,弧度 d = 0.5; % 间距,以波长为单位 N = 8; % 单元数 beta = 0; % 相邻单元馈电相位差 psi = 2*pi*d*cos(theta) + beta; % 空间相位差 + 电相位差 AF = sin(N*psi/2) ./ (sin(psi/2) + eps); % eps 防止 0/0 AF = abs(AF) / max(abs(AF)); % 归一化eps那一项不是可有可无的装饰:当 ψ→0 时分子分母同时趋零,直接除会得到 NaN,方向图主瓣正中央会出现一个“空洞”,这是新手最常报的“bug”。加一个极小量,或者用sinc形式的等价写法,都能绕开。参数上,d 用波长归一化是最省心的做法,因为所有结论(栅瓣、波束宽度)都以 λ 为尺度,换频率时只需改 λ 而不必重推公式。
2.3 主瓣宽度与旁瓣电平:从公式里读出设计约束
第一零点出现在Nψ/2 = ±π,即ψ = ±2π/N。由此可以反解出主瓣两侧零点对应的角度,两者之差就是零陷波束宽度(FNBW);半功率波束宽度(HPBW)则对应|AF|² = 1/2的位置,近似为0.886·λ/(N·d)弧度(边射、大 N 时)。这两个量直接决定了“阵要多大才能分辨两个目标”。
旁瓣电平则由sin(Nψ/2)/sin(ψ/2)的次峰决定。均匀激励下第一旁瓣约 -13.2 dB,这个数字几乎是天线阵的“出厂设置”。想压低旁瓣,就得改激励幅度分布(切比雪夫、泰勒等),代价是主瓣变宽——这是仿真里最值得反复调的一组权衡。资源里如果提供了激励加权的接口,重点看它怎么把幅度向量乘进求和式,而不是只看最终曲线好不好看。
提示:均匀阵的 -13.2 dB 旁瓣是“理论下限”意义上的基准,任何加权方案都是拿主瓣宽度换旁瓣电平,不存在两者同时最优的免费午餐。
3. 波束扫描与栅瓣:β 一调,为什么旁瓣会“翻车”
3.1 电扫描的相位关系:β 到底在改什么
主瓣指向满足ψ = 0,即2πd·cosθ₀ + β = 0,所以β = -2πd·cosθ₀。这就是电扫描的全部秘密:想让主瓣指向 θ₀,就把相邻单元的馈电相位差设成这个值。仿真里扫一遍 β,就能看到主瓣在空间里“滑动”。
但这里有个几何上的硬约束:cosθ₀的取值范围是 [-1, 1],所以 β 的有效范围是[-2πd, 2πd]。当 d = 0.5λ 时,β 最多到 ±π,对应 θ₀ 从 0° 扫到 180°(以阵轴为参考)。如果 d 更小,扫描范围反而受限;如果 d 更大,虽然 β 范围宽了,但栅瓣问题立刻冒出来。这个“间距决定扫描能力”的关系,是直线阵设计里最反直觉的一环。
3.2 栅瓣的成因:周期性与可见空间的碰撞
栅瓣的本质是阵因子的周期性。sin(Nψ/2)/sin(ψ/2)在ψ = 2πm(m 为整数)处都取峰值,主瓣只是 m = 0 那一个。当ψ = 2πm对应的角度落在“可见空间”(即|cosθ| ≤ 1)内时,就出现了一个和主瓣一样高的假波束——栅瓣。
把ψ = 2πd·cosθ + β代入ψ = ±2π,解出cosθ = (±1 - β/(2π))/d。要让这个解落在 [-1, 1] 之外(即不出现栅瓣),需要d ≤ λ/(1 + |cosθ₀|)。边射(θ₀ = 90°,cosθ₀ = 0)时 d ≤ λ;端射(θ₀ = 0°,cosθ₀ = 1)时 d ≤ λ/2。这就是“为什么扫描到端射附近间距要减半”的由来。
MATLAB 里验证这件事很直接:固定 N,把 d 从 0.4 扫到 0.8,画一组方向图叠在一起,栅瓣会在某个 d 之后突然从大角度方向“长”出来。资源里如果有这样的参数扫描脚本,重点看它怎么组织循环、怎么把多条曲线画在同一张极坐标图上——这比单看一条曲线更能建立直觉。
d_list = [0.4 0.5 0.6 0.7]; figure; hold on; for d = d_list psi = 2*pi*d*cos(theta) + beta; AF = abs(sin(N*psi/2) ./ (sin(psi/2) + eps)); polarplot(theta, AF/max(AF), 'DisplayName', sprintf('d=%.1fλ', d)); end legend;这段代码的关键不在画图,而在beta固定时不同 d 下栅瓣出现的位置差异。d = 0.7λ 时,边射附近已经能看到明显的第二峰,这就是间距超过 λ/2 后“可见空间里挤进了第二个周期”的直接证据。
3.3 扫描时的波束展宽与增益下降
电扫描还有一个常被低估的效应:主瓣指向偏离边射越远,波束越宽、增益越低。原因是有效孔径投影变小了——阵面在扫描方向上的投影长度是N·d·|sinθ₀|(以阵轴为参考时),投影越短,波束越宽。这个效应在 cosθ₀ 接近 1 时最明显,端射附近波束会显著“发胖”。
仿真里验证这一点,可以固定 β 扫几个扫描角,量每个角度下的 HPBW。资源如果提供了波束宽度提取的辅助函数,看它怎么找 -3 dB 点、怎么处理多峰情况下的误判——这是实现细节里很容易埋坑的地方。
4. 从公式到代码:MATLAB 仿真的实现骨架与参数组织
4.1 角度采样与归一化:数值上的两个隐形陷阱
角度采样密度直接决定方向图曲线的“光滑度”,但更隐蔽的问题是峰值漏采。如果采样点恰好跨过主瓣峰值,归一化后的最大值会偏小,整条曲线被“抬高”,旁瓣电平看起来就不对了。稳妥的做法是采样点数取到几千,或者在已知主瓣方向附近加密。
另一个陷阱是归一化基准。用max(abs(AF))归一化,前提是主瓣确实被采到了;如果扫描角接近端射、主瓣很窄,粗采样下 max 可能落在旁瓣上,归一化就彻底错了。常见的实现思路是先解析算出主瓣方向,再在该方向附近局部加密,或者直接用闭式峰值(均匀阵峰值就是 N)做归一化,绕开采样依赖。
4.2 参数化组织:把 N、d、β、激励都变成可扫的维度
一个能反复用的仿真骨架,应该把 N、d、β、激励幅度/相位都做成参数,而不是写死在脚本里。这样你才能做“控制变量”的实验:固定 N 和 d 扫 β 看扫描,固定 β 扫 d 看栅瓣,固定 d 扫 N 看波束宽度收敛。资源里的脚本如果把这些维度拆成了独立函数或结构体参数,说明作者是真的在做“仿真”而不是“画图”。
function AF = array_factor(theta, N, d, beta, amp) % theta: 角度向量(rad) N: 单元数 d: 间距(λ) beta: 递变相位(rad) % amp: 激励幅度向量,长度 N;均匀激励时传 ones(1,N) n = 0:N-1; psi = 2*pi*d*cos(theta(:)).' + beta; % 行向量角度,列向量单元 contrib = amp(:) .* exp(1j * n(:) * psi); % N×M 复矩阵 AF = abs(sum(contrib, 1)); % 沿单元维求和 end这段实现用矩阵乘法替代了显式循环:n(:)*psi生成 N×M 的相位矩阵,sum(...,1)沿单元维累加。好处是向量化后速度快,且amp直接乘进去就支持任意加权,不用改求和逻辑。参数说明里amp的长度必须等于 N,这是调用时最容易传错的地方——传短了 MATLAB 会广播报错,传长了会静默截断或维度不匹配,后者更隐蔽。
4.3 单元方向图的接入:方向图乘积定理的落地
如果单元不是各向同性,就需要把单元方向图乘进来。半波振子的单元方向图是cos(π/2·cosθ)/sinθ,在 θ = 0 处有 0/0,同样需要数值保护。接入方式是逐点相乘:
element = cos(pi/2*cos(theta)) ./ (sin(theta) + eps); total = element .* AF; % 方向图乘积定理 total = total / max(total);这里要注意坐标约定:阵因子里的 θ 和单元方向图里的 θ 必须是同一个参考系。如果阵轴沿 z、单元振子沿 z,两者一致;如果振子垂直于阵轴,就得做坐标变换,否则乘出来的方向图在物理上是错的。资源里如果只做各向同性单元,这一节可以跳过;但只要涉及真实单元,坐标一致性就是必须检查的第一件事。
5. 避坑与排查:直线阵仿真里最容易翻车的几处
5.1 主瓣中央出现 NaN 空洞
现象:方向图在峰值方向突然断掉,曲线中间一个尖坑。原因:sin(ψ/2)在 ψ→0 时分母为零,0/0产生 NaN。解决:分母加eps,或改用sinc(Nψ/2)/sinc(ψ/2)的等价形式,或在 ψ 接近零时用极限值 N 替换。
5.2 旁瓣电平怎么调都对不上 -13.2 dB
现象:均匀激励下第一旁瓣明显偏离 -13.2 dB。原因:多半是角度采样太粗,峰值没采到,归一化基准偏小,整条曲线被抬高;也可能是把阵因子当总方向图画,单元方向图在大角度处压低了旁瓣。解决:加密采样到几千点,确认归一化用的是主瓣峰值;若接了单元方向图,先单独画阵因子核对。
5.3 扫描到某个角度后突然多出一个等高波束
现象:β 调到某个值,方向图里出现两个一样高的主瓣。原因:栅瓣。间距 d 过大,ψ = ±2π的解落进了可见空间。解决:按d ≤ λ/(1+|cosθ₀|)检查间距,扫描角越大间距要越小;端射附近 d 必须 ≤ λ/2。
5.4 换频率后方向图全乱
现象:改工作频率后,原本设计好的方向图主瓣位置、旁瓣全变了。原因:d 用绝对长度(米)写死,频率一变,d/λ 就变了,所有以波长为尺度的结论失效。解决:始终用波长归一化的 d 做参数,频率只影响 λ 的换算,不进入阵因子公式本身。
5.5 加权后主瓣变宽却以为代码写错
现象:加了切比雪夫或泰勒加权,旁瓣降了但主瓣明显变宽,怀疑实现有 bug。原因:这是加权方案的固有代价,不是错误。解决:把主瓣宽度和旁瓣电平一起量,画成权衡曲线,确认变化趋势符合所选加权方案的理论预期,而不是盯着单条曲线找“异常”。
6. 设计取舍:均匀阵、加权阵与扫描范围之间的三角关系
直线阵仿真的终点,不是画出一条漂亮的方向图,而是理解三个量之间的互相拉扯:间距 d决定栅瓣和扫描范围,单元数 N决定波束宽度和增益,激励分布决定旁瓣电平和主瓣宽度的权衡。这三者没有同时最优的解,任何设计都是在约束下做取舍。
均匀激励的优点是实现简单、口径效率最高(边射时增益最大),代价是 -13.2 dB 的旁瓣和固定形状。切比雪夫加权能在给定旁瓣下做到最窄主瓣,但等旁瓣特性在扫描时会恶化;泰勒加权牺牲一点最窄性换取旁瓣的单调衰减,工程上更常用。这些方案在仿真里的差别,最终都落在amp向量怎么取上——公式没变,只是求和时的权重变了。
扫描范围则是另一个维度的约束。d = 0.5λ 是“边射到端射都能扫且不栅瓣”的经典折中,但端射附近波束展宽、增益下降明显;如果应用只要求 ±60° 扫描,d 可以适当放大到 0.6λ 左右换取更窄的边射波束,代价是扫描边缘逼近栅瓣边界。这个取舍在仿真里很容易验证:固定 N,扫 d 和 β 的二维网格,把“栅瓣出现”的边界画出来,就是一张现成的设计图。
我一般会这么理解这件事:直线阵的仿真代码本身很短,短到几十行就能跑通,但真正花时间的是把每个参数变化和物理现象对应起来。从那以后我每次改 d 或 β 之前,都会先手算一遍ψ的极值范围,确认可见空间里没有多余的2πm,再跑脚本——这个习惯帮我省掉了大量“曲线看着怪但不知道哪错了”的排查时间。这份 MATLAB 仿真资源把参数化骨架和方向图乘积都摊开了,拿过去改几个数就能复现上面每一个现象,比读十页公式推导来得直接。希望帮到你。
本文还有配套的精品资源,点击获取