简介:阵列天线方向图比较是无线通信与天线设计中的常见议题,这份资料面向天线工程初学者、通信专业学生以及需要快速评估阵列性能的工程师,用于理解单元数、阵元间距和波长如何影响辐射特性。压缩包内共四个文件,均为Matlab脚本(.m),包体仅约2KB,轻量易用,已有2133人浏览学习。脚本分别对应阵列单元数、阵元间距、波长等参数的方向图仿真,可直观对比不同设置下的波束宽度、旁瓣抑制和零点分布;例如,增加单元数会提升增益但增益随单元数平方根增长,阵元间距为半波长时可有效抑制旁瓣,间距过小或过大则分别导致方向图畸变或无法形成定向波束,波长与阵元间距的比值则决定主瓣与零点的出现位置。通过运行这些脚本,读者可以快速掌握阵列天线设计中的关键权衡,为课程实验或实际工程中的阵列配置提供参考。
1. 几种阵列的方向图比较:为什么同样的口径,方向图差这么远
拿到一个测向阵列的选型需求时,最先要做的不是挑功放,不是定芯片,而是把几种阵列的方向图比较一遍。同样的口径、同样的阵元数,线阵、面阵、圆阵在方向图上可能差出主瓣宽度两倍、副瓣抬高10dB的差距;这不是单元性能的问题,而是阵列构型和相位权重共同决定的结果。方向图本质上是一个关于观察角度的函数,可由阵列因子和单元方向图相乘得到,栅瓣位置由阵元间距决定,扫描范围又反过来受栅瓣约束。这篇笔记从这些基础约束讲起,给出三类阵列的可复现仿真脚本、对比结果和选型建议,再把从仿真到实测最容易翻车的五个坑逐一拆开,适合正在做阵列选型或方向图仿真的工程师对照着用。
2. 方向图比较前先立好基准:阵列因子、栅瓣与坐标约定
方向图比较最怕两套结果各说各话:一套把θ定义在阵列法线方向,一套把θ定义在z轴夹角;一套阵元相位参考放在第一个阵元,一套放在几何中心。幅度结果可能一致,但相位项、扫描后的对称性和代码里的符号会完全对不上。所以仿真之前,先把比较基准定死。
2.1 阵列因子与方向图乘积定理
阵列总方向图可以写成单元方向图与阵列因子的乘积:F_total(θ,φ) = F_element(θ,φ) · AF(θ,φ)。其中阵列因子只由阵元位置、激励幅度和相位决定,和单元本身的天线形式无关。这意味着单独画阵列因子的方向图,看到的是"理想各向同性单元"下的阵列响应;真实方向图还要把单元方向图乘进去。很多方向图比较的结果差异,其实就来自这一步没有乘。
以沿z轴放置的均匀线阵为例,若阵元坐标z_n,激励权重w_n,波数k=2π/λ,阵列因子写成:
AF(θ) = Σ w_n · exp(j·k·z_n·cosθ)
相位参考取在几何中心时,z_n取负对称序列,方向图的相位项最干净。常做做法是把权重拆成两部分:幅度锥削乘以扫描相移,扫描相移取目标方向θ0的共轭,即exp(-j·k·z_n·cosθ0)。这样写出来的阵列因子,主瓣会准确落在θ0,后续做波束扫描只需要改这一个参数。
2.2 栅瓣与单元间距:最大扫描角从哪来
栅瓣是方向图比较里最容易被忽略的约束。均匀线阵中,当观察角满足sinθ_b = sinθ0 ± m·λ/d时,阵列因子会再次同相叠加,形成与主瓣等高的栅瓣。只要某个栅瓣落入可见空间(|sinθ|≤1),方向图上就会出现第二主瓣。避免栅瓣的条件可以写成:
d/λ ≤ 1 / (1 + |sinθ_max|)
以最常用的d=0.5λ为例,允许的最大扫描角约±30°;要扫到±60°,间距必须压到0.536λ以下。工程上常见做法是直接取d=0.5λ,它能覆盖±90°不出现栅瓣,代价是阵元数上去后口径变短、波束变宽。少数方案取0.6λ~0.65λ换取更窄波束,但扫描范围一大,栅瓣就会从边缘冒出来。
| 最大扫描角θ_max | 允许的最大d/λ | 工程常用取值 |
|---|---|---|
| 0°(不扫描) | 1.0 | 0.8~0.9 |
| ±30° | 0.667 | 0.5~0.6 |
| ±45° | 0.586 | 0.5 |
| ±60° | 0.536 | 0.5(留裕量) |
面阵的情况类似,只是栅瓣出现在u-v平面的二维网格上。矩形栅格面阵在u-v空间同时产生四个对称栅瓣,三角形栅格能减少一个方向的周期重复,所以大扫描角相控阵常用三角形布阵。
2.3 统一坐标和口径
比较三种阵列时,我一般把坐标约定固定为:θ为与z轴的夹角,范围0°~180°;φ为从x轴正方向逆时针转过的方位角,范围-180°~180°。线阵沿z轴放置,面阵和圆阵放在xy平面。这样同一套θ、φ定义可以直接套到三种阵列脚本上,而不需要每个脚本单独换坐标公式。
口径也要统一口径。比较方向图前先声明是"同阵元数"还是"同物理口径面积",两者结论可能正好相反。比如8元半波长线阵与半径0.8λ的8元圆阵,前者栅瓣特性更简单,后者方位对称性更好,但直接比增益没有意义,因为两者实际口径完全不同。常见错误是拿不同口径的阵列比方向图,最后得出"圆阵波束宽、增益差"的结论,其实换成同口径后差距并没有那么大。
3. 三类阵列方向图仿真脚本:线阵、面阵、圆阵
脚本全部用Python写,只依赖numpy,不用额外工具箱,方便在任何环境里改参数复现。三个函数都返回阵列因子的幅度值,调用方自己归一化、自己画图。
3.1 均匀线阵的方向图:一维测向的基本盘
import numpy as np def ula_af(theta_deg, N, d_lam, theta0_deg=0): """均匀线阵阵列因子(幅度) theta_deg : 观察角,相对阵列法线的角度 N : 阵元数 d_lam : 阵元间距,单位波长 theta0_deg: 波束指向角 """ n = np.arange(N) - (N - 1) / 2 # 以几何中心为相位参考 th = np.deg2rad(theta_deg) th0 = np.deg2rad(theta0_deg) # 导向矢量乘以指向扫描相位,做向量点积 af = np.exp(1j * 2 * np.pi * d_lam * n * (np.sin(th) - np.sin(th0))) return np.abs(af.sum(axis=0))调用时把观察角网格传进去,主瓣会落在theta0_deg指定的方向。代码里的核心是(sin(th) - sin(th0))这一项:sin(th)来自导向矢量,sin(th0)来自扫描相位,两者相减等效于把阵列的波束旋转到θ0。相位参考取在几何中心,所以方向图天然关于法线对称,不会出现数值上的线性相位漂移。
参数上最敏感的是d_lam:取0.5时能看到完整的无栅瓣扫描特性;取0.7时波束更窄,但扫描角一拉大就会出现栅瓣。N决定主瓣宽度,N越大波束越窄,副瓣电平在均匀激励下稳定在-13.3dB附近,不会因为N增大而自动降低。
3.2 矩形面阵的方向图:两维扫描的直积解
def rpa_af(theta_deg, phi_deg, Nx, Ny, dx_lam, dy_lam, theta0_deg=0, phi0_deg=0): """矩形栅格平面阵的阵列因子 theta_deg/phi_deg : 观察角,theta为与z轴夹角,phi为方位角 Nx/Ny : x和y方向的阵元数 dx_lam/dy_lam : x和y方向的阵元间距(波长) """ # 观察方向和波束指向都换算到u-v平面 u = np.sin(np.deg2rad(theta_deg)) * np.cos(np.deg2rad(phi_deg)) v = np.sin(np.deg2rad(theta_deg)) * np.sin(np.deg2rad(phi_deg)) u0 = np.sin(np.deg2rad(theta0_deg)) * np.cos(np.deg2rad(phi0_deg)) v0 = np.sin(np.deg2rad(theta0_deg)) * np.sin(np.deg2rad(phi0_deg)) nx = np.arange(Nx) - (Nx - 1) / 2 ny = np.arange(Ny) - (Ny - 1) / 2 # 阵列因子可分离为两个一维线阵因子的乘积 afx = np.exp(1j * 2 * np.pi * dx_lam * nx[:, None] * (u[None, :] - u0)).sum(axis=0) afy = np.exp(1j * 2 * np.pi * dy_lam * ny[:, None] * (v[None, :] - v0)).sum(axis=0) return np.abs(afx * afy)矩形面阵的阵列因子可以拆成x方向线阵因子乘y方向线阵因子,这是它最大的数学优势。只要x、y两个方向各自的间距和阵元数确定,整个面阵的方向图就由两个一维结果直接相乘。用u、v坐标后,波束指向变成一组固定的(u0, v0),扫描时不需要动网格,只需要改u0和v0两个值。
这个函数的输出是单个观察角(θ,φ)下的幅度值。要画完整三维方向图,用np.meshgrid生成θ和φ网格后传入,再把返回值reshape成网格尺寸。如果只需要看某个切面,比如方位面(θ=90°),直接把θ固定为90、φ取线性网格就行。
3.3 均匀圆阵的方向图:全向扫描与对称性
def uca_af(theta_deg, phi_deg, N, R_lam, theta0_deg=90, phi0_deg=0): """均匀圆阵阵列因子 N : 阵元数,均匀分布在xy平面圆周上 R_lam : 圆半径,单位波长 """ phi_n = 2 * np.pi * np.arange(N) / N # 阵元方位角 th = np.deg2rad(theta_deg) ph = np.deg2rad(phi_deg) th0 = np.deg2rad(theta0_deg) ph0 = np.deg2rad(phi0_deg) # 导向矢量:相位参考在圆心 a = np.exp(1j * 2 * np.pi * R_lam * np.sin(th)[:, None] * np.cos(ph[:, None] - phi_n[None, :])) # 扫描权重:指向(theta0, phi0) w = np.exp(-1j * 2 * np.pi * R_lam * np.sin(th0) * np.cos(ph0 - phi_n)) return np.abs(a @ w)圆阵的阵列因子不能在直角坐标里拆成x和y两个独立方向的乘积,因为每个阵元的相位同时依赖θ和φ。代码里cos(ph - phi_n)这一项来自阵元位置矢量与观察方向矢量的点积,sin(th)则是仰角方向的投影。当只做方位面扫描时,固定θ=90°,公式立刻退化成只含cos(ph - phi_n)的形式,物理含义非常直观:波束在方位面内旋转时,方向图形状基本保持不变。
圆阵列因子展开后是一系列整数阶柱函数的叠加,半径R_lam越大,高阶项权重越高,方向图越接近一个理想的环形口径。实际工程里圆阵的优势在全方位扫描,劣势是同口径下增益和口径效率不如面阵,因为每一时刻只有面向波束方向的那部分阵元在有效辐射。
4. 方向图对比怎么读:波束宽度、栅瓣表现与阵列选型
把三类阵列跑出来之后,真正有价值的是读差异、找规律。不要只盯着主瓣宽度,还要看栅瓣出现在哪、扫描后波束是否展宽、副瓣是否抬升,这些才是选型决策的关键依据。
4.1 线阵 vs 面阵:扫描锥和栅瓣的不同表现
线阵只能在阵列轴与法线组成的平面内扫描,另一个维度完全没有波束控制能力。它的半功率波束宽度近似为BW ≈ 0.886λ / (N·d·cosθ0),扫描角θ0越大,cosθ0越小,波束越宽。这个展宽是几何投影造成的,线阵在端射方向的理论波束宽度趋于无穷大,所以一维线阵很少用于大角度端射扫描。
面阵在两个维度上都能控制波束,但扫描范围受限得更明显。矩形栅格面阵在u-v平面按1/dx和1/dy周期延拓,扫描角变大时,最近的一组栅瓣会从u或v等于±1的边界挤进可见区。相同阵元间距下,三角形栅格比矩形栅格在二维方向上栅瓣间距更远,工程上做宽角扫描相控阵时,三角形布阵能比矩形布阵多争取约15%的阵元间距,这是很实用的经验值。
4.2 圆阵的方向图特点:波束展宽与单元利用率
圆阵最突出的特点是方位面扫描时,主瓣宽度不随扫描角变化。线阵扫描到±60°时波束宽度几乎翻倍,圆阵从0°转到90°,主瓣形状基本不变。这让圆阵在需要全方位测向或360°覆盖的场景里成为首选,比如无线电测向、全向监测和卫星通信终端。
代价在于单元利用率。圆阵激励后,真正对某个方向波束有贡献的只是圆周上朝向该方向的那一段阵元,背向单元几乎不参与辐射。等效口径远小于物理周长对应的口径,方向性系数自然低于同尺寸的矩形面阵。工程上经常看到8元圆阵的增益和6元线阵差不多,就是单元利用率在起作用。圆阵另一个坑是阵元极化方向沿圆周变化,如果没有在方向图里乘以实际单元方向图,仿真结果会偏乐观。
4.3 一张表看差异:按场景选阵列
| 阵列类型 | 波束控制维度 | 扫描时波束宽度 | 栅瓣风险 | 方向性系数 | 工程复杂度 |
|---|---|---|---|---|---|
| 均匀线阵 | 一维 | 按1/cosθ展宽 | 仅平面内出现 | 中等 | 低 |
| 矩形面阵 | 二维 | 两轴独立展宽 | u-v平面四角出现 | 高 | 中 |
| 均匀圆阵 | 二维(方位对称) | 基本不变 | 半径过大时出现 | 中低 | 中高 |
选型时我一般按三条判断走:只要一维测向,线阵最简单,成本最低;需要二维扫描且空间足够,矩形面阵是首选,三角形布阵可以留到宽角设计再升级;需要360°方位覆盖且允许增益损失,圆阵或者圆环阵更合适。反过来,如果需求既要求全方位覆盖又要求高增益,单一构型很难同时满足,常见的做法是多个子阵拼接或采用共形阵列,这已经超出这篇笔记的范围了。
5. 阵列方向图从仿真到实测的5个常见坑
方向图仿真的代码本身不难,难的是结果和实测对不上。以下五个坑是我在对比各类阵列方向图时反复遇到的,按现象、原因、解决三段拆开,能少走不少弯路。
5.1 栅瓣冒出来,角度还对称
现象:方向图上除主瓣外,左右对称地出现两个等高峰值,扫描角越大,这两个峰越往中间靠。原因:阵元间距取到了0.6λ以上,或者扫描角超过了2.2节给的无栅瓣范围。解决:先用公式算允许的最大间距,再回头改代码里的d_lam。如果间距必须大于0.5λ,就限制最大扫描角,并在方向图上把可见区边界标出来,确认栅瓣没有进入|sinθ|≤1的区域。
5.2 E面和H面波束宽度对不上
现象:矩形面阵仿真时,x方向切面波束宽度8°,y方向切面却是12°,怎么看都不协调。原因:x和y方向的阵元数或阵元间距不一致,两个方向的阵列孔径不同,波束宽度自然不同。解决:按需求分别设定Nx和Ny。需要两个切面波束一致,就让Nx·dx = Ny·dy;需要某个方向更窄,就加大对应方向的孔径。不要指望通过加权统一两个方向的波束宽度,锥削只能调副瓣,改变不了由孔径决定的主瓣宽度。
5.3 圆阵主瓣方向偏了
现象:理论波束指向0°,仿真出来主瓣偏向5°或-5°,看起来像坐标标错了。原因:相位参考点不统一。有些脚本把第一个阵元当相位参考,有些把圆心当参考,两种写法在圆阵上会差出一个固定相位项,对圆形阵列来说方向图会整体旋转。解决:统一把相位参考放在圆心,激励权重用exp(-j·2π·R_lam·sinθ0·cos(φ0-φ_n)),并且确认φ_n从x轴正方向起算、逆时针递增。改完之后先拿N=4的小圆阵手算一组相位,验证指向正确再放大阵元数。
5.4 加窗后波束被压得太宽
现象:为了压低副瓣加了锥削窗,副瓣从-13dB降到-30dB,但半功率波束宽度也从8°变成了11°甚至更宽。原因:加窗必然展宽主瓣,这是窗函数的时频对偶性质决定的,不是代码写错了。不同窗的主瓣展宽系数差异很大,均匀加权展宽系数1.0,普通可调窗能到1.3以上。解决:做方向图对比时,把加窗前后的半功率波束宽度和副瓣电平列在同一张表里,按系统指标决定取舍。如果副瓣要求高,优先用按指定副瓣电平反推参数的可调窗,而不是一上来套固定窗。
5.5 大扫描角下副瓣不对称且抬升
现象:扫描到±60°时,一侧副瓣抬到-6dB,另一侧却还正常,方向图明显不对称。原因:阵列因子本身是对称的,但单元方向图不是。按方向图乘积定理,大扫描角下单元方向图对一侧的阵列因子施加了更强的锥削,造成副瓣一侧被压低、另一侧被抬高。互耦在大角度扫描时也会加剧这种不对称。解决:对比方向图时,必须把单元方向图乘进总方向图里,使用真实的单元方向图或至少用cos^q(θ)近似;副瓣指标也应在最大扫描角处验证,不要只在法线方向测。
6. 用方向图积分标定阵列设计:方向性系数与口径效率
方向图对比的最终目的是给设计定量结论,最实用的定量指标是方向性系数和口径效率。方向性系数可以从方向图直接积分得到,不需要额外测量设备。
def directivity_from_pattern(theta_deg, phi_deg, pattern): """从幅度方向图计算方向性系数(dBi) theta_deg/phi_deg : 观察角网格(一维) pattern : 对应网格的幅度方向图,未归一化 """ th = np.deg2rad(theta_deg) ph = np.deg2rad(phi_deg) # 球坐标下对功率方向图做面积分 integrand = np.abs(pattern)**2 * np.sin(th)[:, None] # 新版NumPy用np.trapezoid,旧版用np.trapz,按环境替换 P_rad = np.trapezoid(np.trapezoid(integrand, ph, axis=1), th) D = 4 * np.pi * np.max(np.abs(pattern)**2) / P_rad return 10 * np.log10(D + 1e-12)这个函数对三类阵列通用,只要传入对应的方向图网格即可。积分时注意把θ和φ换成弧度作为积分轴,直接用角度数值做积分会让结果差一个系数。算出口径效率也很简单:均匀口径照射时的理想方向性系数为D_ap = 4π·A/λ²,其中A是物理口径面积,实际方向性系数除以D_ap就是口径效率。面阵均匀激励时效率能到90%以上,加窗后会降到70%~80%;圆阵因为单元利用率低,口径效率常年在50%~60%徘徊,这是圆阵增益上不去的根本原因。
我现在的习惯是,任何阵列方案动工之前先算三行字:阵元间距d/λ、最大扫描角、单元方向图假设,然后把这三行和方向图积分结果一起写进对比记录里。方向图仿真最大的价值不是画出一张漂亮的图,而是让你在设计阶段就看到构型带来的天花板。希望帮到你。
本文还有配套的精品资源,点击获取