4. 波束形成基本原理与常规波束形成器
波束形成的本质,是对阵列各阵元接收到的信号施加一组可控的复加权,使来自某个方向的信号同相叠加、来自其他方向的信号相互抵消或削弱,从而在空间上形成“指向性”。理解这一节,需要抓住三个层次:物理上的延迟求和、数学上的权向量设计,以及评价结果的波束图。三者构成从原理到实现的完整链条。
一、从几何延迟到延迟求和
先约定坐标系:以均匀直线阵(ULA)为例,阵元沿 x 轴等间距 d 排列,远场平面波以与阵列法线(阵列正前方)夹角 θ 入射,θ 称为方位角,法线方向为 0°。相邻阵元间的波程差为 Δr = d·sinθ,对应时延 τ = d·sinθ / c,c 为声速(水中约 1500 m/s)。
若入射方向为 θ₀,则第 n 个阵元(n = 0,1,…,N−1)相对参考阵元的时延为 τₙ = n·d·sinθ₀ / c。延迟求和(Delay-and-Sum, DAS)波束形成器对每个阵元先补偿这一时延,再求和:
y(t) = Σₙ xₙ(t + τₙ) (连续时间形式)
y[k] = Σₙ xₙ[k + round(τₙ·fs)] (离散采样形式)
补偿后,来自 θ₀ 的信号在各通道对齐、相干相加,幅度约为 N 倍;来自其他方向的信号因残余时延而部分抵消。这就是“延迟求和”名称的由来,也是常规波束形成器(Conventional Beamformer, CBF)的物理内核。
二、窄带近似与权向量设计
当信号为窄带(中心频率 f₀,波长 λ = c/f₀)时,时延可等效为相移:τₙ 对应相位 φₙ = −2πf₀τₙ = −2πn(d/λ)sinθ₀。于是 DAS 可写成复加权求和形式:
y = wᴴ x, w = [1, e^{−j2π(d/λ)sinθ₀}, …, e^{−j2π(N−1)(d/λ)sinθ₀}]ᵀ
这里的 w 就是导向向量(steering vector),也称阵列流形向量。CBF 的权向量设计原则非常直接:权向量取期望方向的导向向量,即 w = a(θ₀),使该方向增益归一化最大。若需保持无失真响应,可加约束 wᴴa(θ₀) = 1,此时 w = a(θ₀)/(aᴴ(θ₀)a(θ₀)),即归一化匹配权。
设计时有两个工程要点。其一是栅瓣:当阵元间距 d > λ/2 时,除主瓣外会出现与主瓣等高的栅瓣,导致方位模糊,因此通常取 d ≤ λ/2。其二是主瓣宽度:主瓣宽度近似与 λ/(N·d) 成正比,阵元数越多、孔径越大,主瓣越窄、分辨力越高,但旁瓣结构也随之变化。
三、波束图的定义与读图
波束图(Beam Pattern)描述阵列对单位强度平面波的响应随入射角的变化,定义为:
B(θ) = |wᴴ a(θ)|² / (wᴴw · aᴴ(θ)a(θ)) (归一化功率形式)
B_dB(θ) = 10·log₁₀ B(θ)
读图时关注四个量:主瓣指向(峰值所在角度,应等于设计指向 θ₀)、−3 dB 主瓣宽度(分辨力指标)、峰值旁瓣电平(PSL,抗干扰与抗混响能力指标)、栅瓣位置(是否存在模糊)。对 N 元均匀加权 ULA,第一旁瓣约 −13.2 dB,这是均匀加权 CBF 的经典特征。
四、CBF 仿真实现
下面给出一段可直接运行的 Python 示例,参数为教学假设:N = 16 元 ULA,f₀ = 3 kHz,c = 1500 m/s,d = λ/2 = 0.25 m,设计指向 θ₀ = 20°,扫描范围 −90°~90°。该示例用于演示流程与读图方法,结果数值随参数变化,并非实测数据。
import numpy as np
import matplotlib.pyplot as plt
N, f0, c = 16, 3000.0, 1500.0
lam = c / f0
d = lam / 2
theta0 = np.deg2rad(20)
scan = np.deg2rad(np.arange(-90, 91, 0.5))
def steering(theta):
n = np.arange(N)
return np.exp(-1j * 2 * np.pi * d / lam * n * np.sin(theta))
w = steering(theta0) / N # 归一化匹配权
B = np.zeros_like(scan)
for i, th in enumerate(scan):
a = steering(th)
B[i] = np.abs(np.vdot(w, a))**2 / (np.vdot(w, w).real * np.vdot(a, a).real)
B_dB = 10 * np.log10(B + 1e-12)
plt.plot(np.rad2deg(scan), B_dB)
plt.xlabel('方位角 θ (°)'); plt.ylabel('归一化响应 (dB)')
plt.grid(True); plt.show()
实现中有三处容易出错。第一,导向向量的符号约定必须与波束图定义一致:若 a(θ) 用 e^{−j…},则 w 取 a(θ₀) 的共轭转置作用于 x,即 y = wᴴx;符号反了会导致主瓣指向镜像到 −θ₀。第二,归一化分母要同时除以 wᴴw 与 aᴴa,否则不同角度下响应幅度不可比。第三,扫描步长过粗会漏掉主瓣峰值,建议不大于 0.5°。
五、结果判读与常见问题
运行上述代码后,应观察到:主瓣峰值出现在 20°,峰值归一化为 0 dB;第一旁瓣约 −13 dB;−3 dB 宽度约 6°~7°(随 N 与 d/λ 变化)。若主瓣出现在 −20°,说明导向向量符号约定与求和式不一致;若在 ±60° 附近出现与主瓣等高的峰,说明 d 超过 λ/2 产生了栅瓣;若旁瓣整体偏高,需检查是否误用了未归一化的权或阵列存在幅度误差。
把本节串起来看:几何时延决定了“往哪个方向对齐”,权向量把时延翻译成复加权,波束图则把权向量的效果可视化为主瓣、旁瓣与栅瓣。掌握这三者的对应关系,就能在仿真中通过改一个参数、看一处图形,快速定位问题所在。