3. 窄带信号与阵列接收数据模型

波束形成算法的推导几乎都建立在一个共同前提上:阵列接收到的信号是“窄带”的,并且可以用复解析信号(复基带)来描述。如果这一层模型没有建立清楚,后面出现的导向矢量、协方差矩阵、快拍等概念就会变成没有来源的符号。本节从连续时间信号出发,逐步落到离散快拍模型,并给出可直接运行的仿真数据生成方法。

一、从实信号到复解析信号

实际水听器输出的是实值电压信号,例如 s(t) = a(t)·cos(2πf₀t + φ(t)),其中 a(t) 是缓变包络,f₀ 是载频,φ(t) 是缓变相位。实信号的频谱关于零频共轭对称,正负频率各占一半能量,直接处理会带来冗余,也不便于表达相位差。

复解析信号的做法是只保留正频率分量:对实信号做希尔伯特变换得到正交分量,构造 z(t) = s(t) + j·ŝ(t),其频谱在负频率处为零。进一步乘以 e^(-j2πf₀t) 搬移到基带,得到复包络 z̃(t) = a(t)·e^(jφ(t))。这一步的意义在于:载频被剥离,剩下的复包络只携带幅度与相位信息,而阵列各阵元之间的相位差恰好就体现在这个复包络上。工程实现中通常用正交下变频(I/Q 解调)直接得到两路实信号,再组合成复数序列,这与希尔伯特变换在数学上等价。

二、窄带假设到底约束了什么

窄带假设的严格表述是:信号带宽 B 远小于载频 f₀,等价地,信号包络在信号跨越整个阵列的传播时间 τ_max 内近似不变,即 B·τ_max ≪ 1。对间距为 d、阵元数为 M 的均匀线阵,最大传播时延约为 (M-1)d·sinθ/c。

这个条件带来的关键简化是:阵元间的时延可以只用相移表示。若信号到达第 m 个阵元相对参考阵元延迟 τ_m,则 z̃(t - τ_m) ≈ z̃(t)·e^(-j2πf₀τ_m)——包络不变,只多了一个与频率和时延有关的复相位。于是阵列流形退化为一个只与来向有关的复向量,这就是导向矢量的来源。若窄带条件不成立(例如宽带声呐、大孔径阵列、低载频高带宽场景),包络在阵元间发生明显变化,相移模型失效,必须改用时延或频域分段处理。

判断是否满足窄带条件时,用 B·τ_max 与 1 比较即可。例如 f₀ = 3 kHz、B = 200 Hz、M = 16、d = 0.25 m、c = 1500 m/s、端射方向 θ = 90°,则 τ_max ≈ 15×0.25/1500 = 2.5 ms,B·τ_max = 0.5,已接近临界,实际中应谨慎使用纯相移模型。

三、阵列快拍模型

设空间中有 K 个远场窄带源,来向为 θ₁…θ_K,复包络为 s_k(t)。以均匀线阵为例,取第一个阵元为参考,第 m 个阵元(m = 0,1,…,M-1)相对参考阵元的时延为 τ_m(θ) = m·d·sinθ/c,对应相移 e^(-j2πf₀τ_m)。把所有阵元在同一时刻的复采样排成列向量,得到单快拍模型:

x(t) = A(θ)·s(t) + n(t)
A(θ) = [a(θ₁), a(θ₂), …, a(θ_K)]
a(θ) = [1, e^(-j2πf₀d·sinθ/c), …, e^(-j2πf₀(M-1)d·sinθ/c)]ᵀ

其中 A 为 M×K 阵列流形矩阵,a(θ) 为 M×1 导向矢量,n(t) 为各阵元独立的复高斯噪声。对 N 个时间采样(快拍)堆叠,得到 X = A·S + N,X 为 M×N 矩阵。后续的协方差矩阵估计 R̂ = (1/N)·X·Xᴴ 就建立在这个数据矩阵上。

需要特别注意符号约定:本文采用 e^(-j2πf₀τ),即信号延迟对应负相位,导向矢量中相位随阵元序号递减(当 sinθ > 0 时)。若换用相反的傅里叶变换约定,导向矢量需整体共轭,否则波束图会出现镜像。全文与图示必须保持同一约定。

窄带阵列接收数据模型:从平面波到快拍矩阵 ① 远场平面波入射 波前(等相位面) 阵面 阵元 0,1,…,M-1 θ ② 窄带:时延 → 相移 τ_m = m·d·sinθ / c e^(-j2πf₀τ_m) 条件:B·τ_max ≪ 1 ③ 导向矢量 a(θ) 1 e^(-j2πf₀τ₁) ⋮ e^(-j2πf₀τ_(M-1)) M×1 复向量 ④ 多快拍数据矩阵 X = A·S + N A(θ) M × K 阵列流形 各列 = a(θ_k) × S K × N 源复包络 N 个快拍 + N M × N 复高斯噪声 阵元间独立 = X M × N 每列 = 一个快拍 R̂ = X·Xᴴ / N 符号约定:延迟对应负相位 e^(-j2πf₀τ),导向矢量相位随阵元序号递减(sinθ > 0 时)

四、仿真数据生成:一个可复现的示例

下面用 Python 生成一组符合上述模型的仿真数据。参数设定为:f₀ = 3 kHz,c = 1500 m/s,d = λ/2 = 0.25 m,M = 8,两个等功率源分别位于 -20° 与 30°,N = 200 快拍,信噪比 10 dB。这些数值属于教学示例假设,不代表任何实测系统。

import numpy as np

f0, c, d, M, N = 3000.0, 1500.0, 0.25, 8, 200
theta = np.deg2rad([-20.0, 30.0])
snr_db = 10.0

m = np.arange(M)[:, None]                 # M×1
a = np.exp(-1j * 2 * np.pi * f0 * m * d * np.sin(theta) / c)  # M×K
s = (np.random.randn(len(theta), N) + 1j*np.random.randn(len(theta), N)) / np.sqrt(2)
n = (np.random.randn(M, N) + 1j*np.random.randn(M, N)) / np.sqrt(2)
n *= 10 ** (-snr_db / 20)                 # 按单阵元噪声功率归一
X = a @ s + n                             # M×N 快拍矩阵
R = X @ X.conj().T / N                    # 样本协方差矩阵

生成后应做两项基本检查。第一,验证导向矢量与几何一致:对 θ = 30°,相邻阵元相位差应为 -2πf₀d·sin30°/c = -π/2,即 a 的第二行应为 -j,可直接打印核对。第二,验证协方差矩阵的秩结构:无噪声时 R 的秩等于源数 K = 2,加入噪声后小特征值抬升到噪声功率附近,大特征值对应两个源。若发现秩明显偏离预期,通常是导向矢量符号写反或快拍数不足导致。

还需要注意快拍之间的相关性。上述代码中 s 各列独立,对应“非相关源”;若模拟相干源(如多径),应令第二个源的复包络为第一个源的常数倍,此时 R 会降秩,常规 MUSIC 失效,这正是后续讨论解相干算法的动机。此外,若要在仿真中体现窄带条件的边界,可把带宽 B 调大,用多个频点叠加生成 X,观察相移模型与真实时延模型之间的偏差随 B·τ_max 增大的变化。

五、模型使用中的常见陷阱

  • 相位符号不一致:导向矢量与协方差、波束加权中使用相反约定,会导致估计角度正负颠倒,且在小角度时不易察觉。
  • 把复包络当实信号处理:对复解析信号直接取实部再算协方差,会丢失正交分量,等效于把阵列孔径减半。
  • 忽略窄带条件:大孔径或宽带场景下仍用相移模型,波束主瓣展宽、旁瓣抬高,且指向偏差随频率变化。
  • 快拍数不足:N 小于或接近 M 时,样本协方差矩阵病态,特征分解结果不稳定,需用对角加载或增加快拍。