2. 声呐信号生成与模拟

主动声呐系统的性能,在很大程度上取决于发射信号形式的选择与回波处理方式。本节围绕三类核心对象展开:主动声呐常用信号(CW、LFM、HFM)的数学表达与 Python 生成方法、海洋环境噪声的模拟,以及目标回波的建模。理解这三者的关系,是后续时频分析、匹配滤波与检测判决的基础。

一、三种常用主动声呐信号

设采样率为 fs,脉宽为 T,时间轴为 t = np.arange(0, T, 1/fs)。三种信号在复基带下的表达与特点如下。

单频矩形脉冲(CW):复包络为 s(t) = A·exp(j2πf₀t),其中 f₀ 为载频。CW 的频谱集中在 f₀ 附近,时宽带宽积约等于 1,距离分辨率受脉宽限制(ΔR ≈ cT/2),但多普勒分辨力好,适合探测径向速度明显的目标。生成时常用 np.exp(1j*2*np.pi*f0*t),再乘矩形窗。

线性调频(LFM):瞬时频率随时间线性变化,复包络为 s(t) = A·exp(j2π(f₀t + ½kt²)),调频斜率 k = B/T,B 为带宽。LFM 的时宽带宽积 BT 可远大于 1,通过脉冲压缩可获得 ΔR ≈ c/(2B) 的距离分辨率,同时保持长脉宽带来的能量优势。Python 中可用 scipy.signal.chirp(t, f0, T, f0+B, method='linear') 直接生成实信号,或按上式构造复基带。

双曲调频(HFM):瞬时频率按双曲线规律变化,复包络为 s(t) = A·exp(-j2πμ·ln(1 - t/t₀)) 形式(不同文献参数化略有差异),其核心特性是对多普勒频移具有近似不变的脉冲压缩输出——目标径向速度引起的频率伸缩在 HFM 上表现为时间平移而非波形展宽,因此适合探测高速或速度未知目标。生成时需注意 t 的取值范围避免对数奇异点,通常取 t ∈ [0, T) 且 t₀ > T。

import numpy as np

fs = 48000          # 采样率 Hz
T  = 0.05           # 脉宽 50 ms
t  = np.arange(int(fs*T)) / fs
f0, B = 8000, 4000  # 起始频率与带宽

# CW
cw = np.exp(1j*2*np.pi*f0*t)

# LFM(复基带,k = B/T)
k = B / T
lfm = np.exp(1j*2*np.pi*(f0*t + 0.5*k*t**2))

# HFM(双曲调频,t0 控制扫频范围)
t0 = T * f0 / B
hfm = np.exp(-1j*2*np.pi*f0*t0*np.log(1 - t/t0))

生成后应检查三点:包络是否为恒模(|s|=1)、瞬时频率是否落在 [f₀, f₀+B] 内、以及频谱是否与设计带宽一致。可用 np.unwrap(np.angle(s)) 差分估计瞬时频率来验证。

三种主动声呐信号的时频特征对比 CW 单频脉冲 f t f₀ 恒定 时宽带宽积≈1,多普勒分辨好 LFM 线性调频 f t 斜率 k=B/T 大时宽带宽积,距离分辨率高 HFM 双曲调频 f t 双曲规律 多普勒不变性,适合高速目标 从信号生成到回波建模的处理链 信号生成 CW/LFM/HFM 信道传播 时延·多普勒·衰减 目标回波 反射系数·展宽 噪声叠加 海洋环境噪声 接收 r(t) r(t) = A·s(t − τ)·exp(j2πf_d t) + n(t),其中 τ 为双程时延,f_d 为多普勒频移

二、海洋环境噪声模拟

海洋环境噪声是接收信号中不可避免的成分,其统计特性直接影响检测性能。工程上常将其建模为加性高斯白噪声(AWGN)经过特定谱形滤波后的有色噪声。典型做法是:先按目标信噪比确定噪声功率,再生成高斯白噪声,最后用滤波器塑造谱形。

设信号功率为 Ps,期望信噪比 SNR_dB,则噪声功率 Pn = Ps / 10^(SNR_dB/10)。白噪声方差取 Pn,即 n = np.sqrt(Pn/2)*(randn + 1j*randn)。若需模拟舰船辐射噪声的低频增强特性,可对白噪声做一阶低通或按 1/f 谱加权;若模拟风关噪声,则在中高频段近似平坦。需要注意:噪声是复数序列时,实部与虚部各承担一半功率,方差分配要一致,否则信噪比会偏差 3 dB。

def add_noise(sig, snr_db, seed=0):
    rng = np.random.default_rng(seed)
    Ps = np.mean(np.abs(sig)**2)
    Pn = Ps / (10**(snr_db/10))
    n  = np.sqrt(Pn/2) * (rng.standard_normal(sig.size)
                          + 1j*rng.standard_normal(sig.size))
    return sig + n

验证时可直接计算 10*np.log10(np.mean(np.abs(sig)**2)/np.mean(np.abs(n)**2)),应接近设定值。若偏差明显,多半是复噪声方差分配或信号功率统计窗口不一致所致。

三、目标回波建模

窄带条件下,点目标回波可写为 r(t) = A·s(t − τ)·exp(j2πf_d t) + n(t)。其中双程时延 τ = 2R/c,R 为目标距离,c 取约 1500 m/s;多普勒频移 f_d = 2v_r f₀/c,v_r 为径向速度(接近为正)。幅度 A 由声传播损失与目标强度决定,示例中可先取常数或按球面扩展 1/R² 衰减。

离散实现的关键是时延不能简单取整。若 τ·fs 非整数,直接索引平移会引入量化误差,应使用分数时延:在频域乘 exp(-j2πf·τ),或用插值重采样。多普勒则通过对时间轴缩放实现,即用 t' = t·(1 - 2v_r/c) 重采样信号,这比单纯乘复指数更接近物理实际(后者只适用于窄带近似)。

def echo_model(sig, fs, R, vr, f0, c=1500.0):
    tau = 2*R/c
    fd  = 2*vr*f0/c
    t   = np.arange(sig.size)/fs
    # 多普勒时间伸缩(重采样)
    from scipy.signal import resample
    scale = 1 - 2*vr/c
    sig_d = resample(sig, int(sig.size*scale))
    # 分数时延(频域相位)
    N   = sig.size
    f   = np.fft.fftfreq(N, 1/fs)
    S   = np.fft.fft(sig_d, N)
    sig_tau = np.fft.ifft(S*np.exp(-1j*2*np.pi*f*tau))
    return sig_tau * np.exp(1j*2*np.pi*fd*t)

建模完成后,可用匹配滤波输出验证:对 LFM 回波做相关,峰值位置应出现在 τ·fs 附近,峰值宽度对应压缩后脉宽约 1/B;改变 v_r 时,CW 的匹配滤波峰值会明显下降(多普勒失配),而 HFM 的峰值位置平移但幅度保持较好——这正是选择信号形式时需要权衡的依据。

建议在同一个脚本中固定随机种子,分别生成三种信号、叠加相同信噪比的噪声、注入同一目标参数的回波,再统一做时频分析与匹配滤波对比。这样能把“信号形式—噪声—回波”三者的影响放在同一坐标系下观察,避免孤立地看单一环节。

综上,CW、LFM、HFM 各有适用场景:CW 胜在多普勒分辨,LFM 胜在距离分辨与大时宽带宽积,HFM 胜在多普勒不变性。噪声模拟要保证功率与谱形可控,回波建模要处理好分数时延与多普勒伸缩。这三部分共同构成主动声呐仿真的输入侧,其参数设置是否合理,将直接决定后续检测与估计结果的可信度。