线性阵列栅瓣与阵列天线增益:MATLAB仿真及工程抑制方法
2026/9/16 13:07:37 网站建设 项目流程

简介:面向无线通信与天线设计学习场景的阵列天线仿真资源,围绕增益、主瓣与栅瓣等核心概念,提供基于MATLAB的可运行实验程序。压缩包内共2个文件,包含1个脚本文件与1份实验说明文档,整体大小仅863KB;脚本用于天线方向图仿真计算,文档用于关键概念与参数影响的原理梳理,便于快速下载与本地运行。目前已有754人学习使用,适合电磁场与微波技术、通信工程专业学生及天线工程师用来验证理论、辅助课程设计。仿真程序支持调节扫描角、天线元素间距、馈电相位与元素数量,直接观察方向图中主瓣宽度、增益变化和栅瓣抑制效果;说明文档系统梳理了阵列增益来源、主瓣(linr主)含义以及栅瓣产生机理,便于对照仿真结果深入理解设计参数对阵列性能的影响,为实际天线布局与波束控制提供参考。

1. 线性阵列天线增益与栅瓣:先解决“方向图第二支同高峰”

在MATLAB里把均匀直线阵列的方向图跑出来,主瓣旁边却立着一根几乎一样高的尖峰;重新运行、换数据文件、调整坐标轴,它仍然纹丝不动。这不是代码写错,而是线性阵列(linr,Linear Array)在特定阵元间距与扫描角组合下产生的阵列栅瓣。栅瓣不改变主瓣的峰值指向性,但会分走总辐射能量,让阵列天线增益的实际表现低于方向图峰值给人的印象;在相控阵搜索和通信链路里,栅瓣还会把带外干扰从完全无关的方向吸进接收机。这篇博文用MATLAB把阵列天线增益、阵列栅瓣、线性阵列三者的定量关系完整拆开:从阵因子公式推导栅瓣出现的间距阈值,给出一套可直接运行的方向图与增益计算代码,最后总结栅瓣定位、验证和工程抑制的常用手段。适合雷达、5G毫米波阵列和正在做阵列信号处理课设的工程师阅读。

2. 线性阵列阵因子与栅瓣的数学边界:从阵元间距到波束扫描角

2.1 均匀直线阵列的阵列因子与主瓣方向

线性阵列里最常作为分析起点的是均匀直线阵列(ULA):N个全向单元沿直线等间距排列,激励幅度相同,相位依次递增一个固定量。这个相位递进量决定波束指向,而相邻单元之间的空间相位差由 kd·cosθ 给出,其中 k=2π/λ 是自由空间波数,d 是实际阵元间距,θ 是从阵列轴向算起的观察角。把N个单元的场在某个θ方向叠加,就得到阵列因子:

AF(θ) = ∑_{n=0}^{N-1} e^{jn(kd·cosθ + β)} = sin(Nψ/2) / sin(ψ/2),其中 ψ = kd·cosθ + β。

这是一条等比数列求和公式,也是后面所有栅瓣分析的出发点。ψ=0时分子分母同时为0,按极限取AF=N,方向图在这里形成主瓣。要把主瓣对准θ₀,需要设置 β = -kd·cosθ₀,于是 ψ 改写成 kd(cosθ - cosθ₀)。宽边阵对应θ₀=90°,ψ=kd·cosθ,方向图最大值出现在θ=90°;端射阵对应θ₀=0°,ψ=kd(cosθ-1),最大值压在阵列轴线方向。

从公式能直接读出两个容易被忽略的性质。第一,AF是ψ的周期函数,周期是2π,所以方向图会在ψ=±2π、±4π等位置重复出现峰值。第二,观察角θ的物理可见范围只有0°到180°,对应ψ只能在有限区间内取值。一旦重复峰落入这个可见区间,方向图上就会出现与主瓣等高的“假主瓣”,这就是栅瓣。理解这个周期结构,比死记“间距要小于半个波长”有用得多。

2.2 栅瓣出现的精确条件:d/λ与扫描角共同决定

栅瓣是否出现,取决于ψ在θ遍历0°到180°时能不能碰到2π的整数倍。更严格地说,出现第m级栅瓣的条件是存在某个θ∈[0°,180°]满足:

kd(cosθ - cosθ₀) = 2πm,m=±1,±2,…。

把k=2π/λ代入并整理,栅瓣所在角度由下式给出:

cosθ_grating = cosθ₀ + m·λ/d。

因为cosθ的取值不可能超出[-1,1],上式右侧落在[-1,1]区间才存在实数解。宽边阵θ₀=90°时,m=1对应 cosθ_grating = λ/d;只有当d/λ>1时,λ/d才小于1,栅瓣才会进入可见区。也就是说,固定不扫描的宽边线性阵列,无栅瓣条件是d/λ≤1;d恰好等于1λ时栅瓣压在端射方向边缘,d=1.2λ时栅瓣分别出现在约±33.6°和±146.4°。

那为什么教材和工程规范几乎都写d≤0.5λ?因为相控阵要扫描。一旦θ₀偏离宽边,无栅瓣条件会收紧为:

d/λ < 1/(1+|cosθ₀|)。

θ₀=60°时允许间距降到0.667λ,θ₀=45°时降到0.586λ,θ₀=0°时只剩0.5λ。工程上留出角度余量、加工公差和互耦余量,直接采用0.5λ,这样常规扫描范围内都不会碰到栅瓣。所以“0.5λ”是工程经验值,不是物理硬边界。很多文档把两者混为一谈,导致有人用仿真看见d=0.8λ宽边阵在端射方向抬高的曲线就误判为栅瓣;实际上宽边不扫描时栅瓣要到d>λ才出现,那个抬高只是阵列口径有限造成的边缘效应。

2.3 用解析公式预判栅瓣出现在哪个角度

栅瓣角度公式是排错时最值钱的工具。算一个典型场景:N=16,d/λ=0.8,θ₀=60°,则cosθ₀=0.5。m=-1时右边等于0.5-1/0.8=-0.75,arccos得到138.6°,栅瓣在这个方向;m=1时右边等于1.75,超过1,无实数解。因此该配置只有一个栅瓣,不会出现对称的左右两根。

把几个常用扫描角算出来,就是一张可以直接抄走的表:

波束指向θ₀(°)最大无栅瓣间距 d/λd/λ=0.8时的第一栅瓣方向(°)
90(宽边)1.000
600.667138.6
450.586122.9
300.536112.6
0(端射)0.500104.5

从表里能看出一个规律:扫描角越靠近端射,允许的间距越小,栅瓣越向主瓣靠拢。设计时如果把最大扫描角代入1/(1+|cosθ₀|)算边界,再留5%到10%余量,就不用在仿真里反复试错。MATLAB里验证这张表也很简单,直接写acosd(cosd(60) + (-1)/0.8)就能算出138.6°,整个过程不需要建模型。

提示:阵列因子公式推导的是栅瓣出现的必要条件。实际工程还要考虑单元方向图对栅瓣的抑制:单元方向图本身在端射附近有零点时,即使栅瓣落在可见区,也可能被单元方向图压到很低。

3. 用MATLAB绘制方向图并复现增益与栅瓣

3.1 最小可运行的ULA方向图函数

直接给一段能跑的MATLAB函数,建议存成 ula_af.m,后面所有算例都复用它。

function [AF_dB, theta_deg] = ula_af(N, d_lambda, theta0_deg) % 均匀直线阵列(ULA)阵列因子 % N : 阵元数 % d_lambda : 阵元间距与波长之比 d/λ % theta0_deg : 波束指向角,90 度表示宽边 theta_deg = -90 : 0.1 : 90; theta = theta_deg * pi / 180; th0 = theta0_deg * pi / 180; psi = 2 * pi * d_lambda * (cos(theta) - cos(th0)); AF = sin(N * psi / 2) ./ sin(psi / 2 + 1e-12); AF_dB = 20 * log10(abs(AF) / N + eps); end

psi是相邻阵元之间的相位差;用封闭式求和代替for循环,N取1024也能瞬间出图。sin(psi/2 + 1e-12)是为防止psi=0时除零;eps防止log10(0)报-Inf。除以N归一化,保证主瓣峰值显示为0 dB。角度步长0.1°对多数阵列方向图足够;N超过256时主瓣会变得很窄,建议把步长改成0.01°或更细,避免漏掉真正的峰值。

调用方式:

[AF8, th] = ula_af(8, 1.2, 90); plot(th, AF8, 'LineWidth', 1.5); grid on; ylim([-60, 3]); xlabel('观察角 θ (deg)'); ylabel('归一化阵因子 (dB)'); title('N=8, d/λ=1.2, 宽边');

运行后会看到θ=90°主瓣附近出现约±33.6°和±146.4°四根等高尖峰,与2.3节公式预判的位置完全一致。把d_lambda改成0.5再跑一次,栅瓣消失,只剩主瓣和幅度较低的副瓣。这一眼就能确认栅瓣不是仿真噪声。

3.2 参数扫描观察d/λ变化时栅瓣如何进入可见区

单独看一张图不够直观,把间距从0.5λ扫到1.2λ更说明问题。

d_list = [0.5, 0.8, 1.0, 1.2]; figure('Position',[100 100 900 700]); for ii = 1:4 subplot(2, 2, ii); [AF, th] = ula_af(8, d_list(ii), 90); plot(th, AF, 'LineWidth', 1.2); grid on; ylim([-50, 3]); title(sprintf('d/λ = %.1f, N = 8', d_list(ii))); xlabel('θ (deg)'); ylabel('dB'); end

这个四联图值得多看几眼。d=0.5时所有副瓣都在-12 dB以下,是教科书式方向图;d=0.8时曲线形态几乎不变,因为宽边阵的无栅瓣边界是1.0λ;d=1.0时±90°端射方向出现临界抬高,栅瓣正从可见区边缘探头;d=1.2时栅瓣完全进入可见区,形成四根等高尖峰。栅瓣的出现是个连续演化过程,不是布尔开关。工程上审图时如果发现端射方向曲线异常上翘,第一反应应该是算d/λ和扫描角,而不是怀疑加了窗或者阵元排列有误。

3.3 用数值积分计算方向性增益,量化栅瓣分走的能量

阵列增益严格说包含方向性D和辐射效率η两部分。无互耦、全向单元的等幅阵列理想假设下,效率取1,先算方向性。方向性定义为最大辐射强度与平均辐射强度之比,对圆对称线阵方向图有:

D = 2 / ∫₀^π |AF(θ)|²·sinθ dθ,

其中AF已归一化到峰值1。MATLAB里用数值积分实现:

function G_dB = ula_gain(N, d_lambda, theta0_deg) theta_deg = -90 : 0.1 : 90; theta = theta_deg * pi / 180; [AF_dB, ~] = ula_af(N, d_lambda, theta0_deg); AF_pow = 10.^(AF_dB / 20); % 场强线性值 AF_pow = AF_pow / max(AF_pow); % 峰值归一化为 1 D = 2 / trapz(theta, AF_pow.^2 .* sin(theta)); G_dB = 10 * log10(D); end

trapz是梯形法数值积分,积分变量必须是弧度;sinθ来自球坐标系下的面积分微元。对全向单元的长线阵,理论极限是D≈2N,所以N=8时约12 dBi,N=16时约15 dBi。表2是这个函数在几个典型间距下的近似输出:

Nd/λ主瓣峰值方向性(dBi)栅瓣情况
80.50 dB约12.0
81.00 dB约10.8端射临界
81.20 dB约9.24根栅瓣
161.20 dB约12.14根栅瓣

关键点在于:主瓣峰值始终是0 dB,方向性却从12 dBi掉到9 dBi左右,差出的约3 dB就是被栅瓣分走的能量。放在雷达方程里,3 dB直接换算成探测距离下降约19%。所以审阅仿真结果时只看峰值增益会完全错过栅瓣隐患,必须同时看方向性系数和完整方向图曲线。

4. 抑制栅瓣的三类阵列参数:间距、阵元数、窗函数

4.1 间距d是最直接的开关,但还有互耦约束

把d/λ控制在1/(1+|cosθ₀|)以内,栅瓣就不会出现。对需要±45°扫描的相控阵,最大间距是0.586λ,工程上往往再压到0.5λ。一方面给口径加工误差留余量,另一方面降低单元间互耦造成阵中方向图畸变的风险。间距小于0.4λ时互耦明显上升,单元驻波变差,实际增益反而下降。间距大于0.6λ时栅瓣风险高,互耦虽然变小,但副瓣电平开始抬升。所以0.5λ是低副瓣、无栅瓣、互耦可控三者的折中,不是物理公式逼出来的唯一解。

如果项目确实需要大间距,常见做法是把单元方向图设计成在栅瓣方向有零点。贴片天线和波导缝隙阵的单元方向图在端射附近增益很低,即使栅瓣角度落在可见区,单元方向图也会把栅瓣整体压低。这是“大间距但栅瓣不明显”的可行路径,前提是栅瓣方向和单元方向图零点方向对齐。仿真时要用方向图 = 阵因子 × 单元方向图而不是只看阵因子。

4.2 阵元数N只改变瓣宽,不改变栅瓣位置

有人遇到栅瓣,第一反应是加阵元。加N确实让主瓣和栅瓣同时变窄,方向性提升,但栅瓣角度完全不变,因为栅瓣位置只由d/λ和θ₀决定,与N无关。用代码验证:

for N = [8, 16, 32] [AF, th] = ula_af(N, 1.2, 90); figure; plot(th, AF, 'LineWidth', 1.2); hold on; for gl = [33.6, -33.6, 146.4, -146.4] xline(gl, '--k', 'HandleVisibility', 'off'); end grid on; ylim([-80, 3]); title(sprintf('N=%d, d/λ=1.2', N)); end

运行后四条虚线对应解析法算出的栅瓣角度,无论N取8还是32,虚线位置不变。N=32时栅瓣更尖锐,峰值依然接近0 dB。这说明阵元数只能提升主瓣分辨力和增益,不能消除空间周期采样带来的栅瓣。N增大还会带来一个仿真细节:主瓣变窄后0.1°角度步长可能让峰值落在采样点之间,方向图最高点显示不到0 dB。这时把步长改成0.01°,或者对方向图做三次样条插值,就能看到完整的0 dB主瓣。

4.3 窗函数压副瓣,压不掉周期重复的栅瓣

加窗是阵列信号处理最常用的副瓣抑制手段,切比雪夫窗甚至能把副瓣电平压到指定的-30 dB、-40 dB。但窗函数作用在幅度上,对ψ域的周期结构没有任何影响。MATLAB里直接对比三种窗:

N = 16; d_lambda = 1.2; th0 = 90; theta_deg = -90 : 0.1 : 90; theta = theta_deg * pi / 180; psi = 2 * pi * d_lambda * (cos(theta) - cos(th0*pi/180)); n = (0:N-1)'; win1 = ones(N,1); % 矩形窗 win2 = chebwin(N, 30); % 30dB 切比雪夫窗 win3 = hann(N); % 汉宁窗 AF1 = abs(win1.' * exp(1j*n*psi)) / sum(win1); AF2 = abs(win2.' * exp(1j*n*psi)) / sum(win2); AF3 = abs(win3.' * exp(1j*n*psi)) / sum(win3); figure; plot(theta_deg, 20*log10(AF1+eps), 'LineWidth', 1.2); hold on; plot(theta_deg, 20*log10(AF2+eps), 'LineWidth', 1.2); plot(theta_deg, 20*log10(AF3+eps), 'LineWidth', 1.2); legend('矩形窗','切比雪夫窗','汉宁窗'); grid on; ylim([-70, 3]);

注意win.' * exp(1j*n*psi)用矩阵乘法一次算出所有角度上的阵列因子,比双重for循环干净得多。运行结果里矩形窗的普通副瓣约-13 dB,切比雪夫窗把它压到-30 dB,汉宁窗压到-31 dB左右;唯独那四根栅瓣纹丝不动,仍然趴在0 dB附近。

原因很直观:加窗改变的是ψ域中每个峰的高度和宽度,但周期性重复的峰还在ψ=±2π位置。要真正治本,得打破阵列空间周期性,例如非均匀间距、随机稀疏阵列、密度锥削阵列。这些方案没有统一的封装函数,需要结合自己的孔径和扫描角设计。课设或快速验证阶段也可以先通过随机抖动阵元位置(把d变成d+δ)观察栅瓣被摊开的效果,代价是副瓣底噪抬高,需要权衡。

提示:N<10时切比雪夫窗的低副瓣设计可能无法实现,MATLAB会在命令行给出警告,这不影响方向图绘制,但设计指标不能按-30 dB去验收。

5. 方向图峰值可疑时:栅瓣定位、验证与实测存档

5.1 三句话快速判定主瓣、副瓣、栅瓣

第一,栅瓣角度一定满足 cosθ_gl = cosθ₀ + mλ/d,拿计算器按一遍,能对上就是栅瓣。第二,栅瓣峰值对幅度加窗几乎不敏感,把矩形窗和汉宁窗两条曲线叠在一起看,重合的等高峰是栅瓣,被明显压低的是普通副瓣。第三,栅瓣和主瓣形状相似、宽度接近,普通副瓣则更扁更矮。三条里满足两条,基本可以锁定栅瓣。

5.2 用findpeaks自动定位并和理论值对照

肉眼看图容易漏掉被单元方向图压制的栅瓣,用MATLAB自动找峰更可靠:

[AF, th] = ula_af(16, 1.2, 90); [pks, locs] = findpeaks(AF, th, ... 'MinPeakHeight', -10, 'SortStr', 'descend'); m = -3:3; th_grating = acosd(0 + m / 1.2); % 宽边阵 θ0=90° th_grating = th_grating(abs(th_grating) <= 90); disp('实测峰值角度:'); disp(locs'); disp('理论栅瓣角度:'); disp(th_grating);

acosd是MATLAB的反余弦角度函数,0 + m/1.2对应宽边阵栅瓣公式中的 cosθ₀ + mλ/d。实测locs会包含0°主瓣和约±33.6°栅瓣;如果仿真时把观察范围扩到-180°到180°,还能看到±146.4°的栅瓣。把实测和理论逐行对比,比肉眼看图快得多。

5.3 把方向图投影到ψ域,让栅瓣的周期性现形

栅瓣的本质是ψ=±2π处周期重复的主瓣,最直接的验证方式是把横轴从θ换成ψ=2π(d/λ)(cosθ-cosθ₀)。修改ula_af函数,让psi也作为返回值,然后画plot(psi, AF_dB)。此时所有栅瓣的间距严格等于2π,普通副瓣则没有这个等间距特征。这个技巧在验证非均匀阵列时更有价值:非线性阵列的“栅瓣”不再等间距,ψ域投影能立刻暴露剩余的空间周期性,判断稀疏化是否真正打散能量。把这两张图存进仿真报告,调试结论可复现,后续改版也不会丢失判断依据。

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

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

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

立即咨询