4. 水声信道水池多径冲激响应测量

水池多径测量的物理约束与信号选择

水池是有限尺寸的封闭声场,池壁、水面、池底都会产生强反射。与开阔水域不同,水池中的多径不是"稀疏的几条海面/海底反射",而是直达波 + 多次壁面反射的密集叠加。因此测量目标不是分辨单个反射体,而是获得信道冲激响应 h(τ) 并从中提取两个关键参数:

  • 多径时延扩展:冲激响应中首个有效到达与最后一个超过门限的到达之间的时间差,常用均方根时延扩展 τrms 表征;
  • 相干带宽:Bc ≈ 1/(5τrms),决定后续通信波形可用的带宽上限。

探测信号选用线性调频(LFM)宽带信号:时宽 T 决定处理增益与抗噪能力,带宽 B 决定时延分辨率 Δτ ≈ 1/B。例如 B = 20 kHz 时 Δτ ≈ 50 μs,对应水中声速 1500 m/s 的距离分辨率约 7.5 cm,足以分辨池壁反射。接收端用匹配滤波(相关处理)压缩脉冲,得到等效的冲激响应包络。

水池多径冲激响应测量:信号链与参数提取 消声水池(示例 6 m × 4 m × 3 m) 发射 Tx 接收 Rx 直达波 水面/池壁反射 池底反射 d ≈ 1.2 m,声速 c ≈ 1480 m/s LFM 探测信号 B=20 kHz, T=10 ms 水池信道 h(τ) 多径叠加 + 噪声 匹配滤波 r(t) ⊗ s*(-t) 包络检波 |·| 取包络 参数提取 τ_rms, B_c 匹配滤波输出包络(示意) 时延 τ (ms) 幅度 直达 壁1 壁2 壁3 检测门限 时延扩展 ≈ 1.4 ms

测量实施:从发射到冲激响应

下面给出一个可直接运行的 Python 处理脚本,输入为已采集的接收信号(示例用合成数据模拟水池多径,实际测量时替换为采集到的 wav 数据即可)。脚本完成匹配滤波、包络提取、门限检测与 τrms 计算。

import numpy as np

fs = 200_000          # 采样率 200 kHz
B  = 20_000           # LFM 带宽 20 kHz
T  = 0.010            # LFM 时宽 10 ms
c  = 1480.0           # 水中声速 m/s

# 1) 生成 LFM 探测信号 s(t)
t = np.arange(int(T*fs)) / fs
k = B / T
s = np.cos(2*np.pi*(0.5*k*t**2 - 0.5*B*t))   # 基带等效,中心频率已下变频

# 2) 模拟水池多径接收信号(实际测量时替换为采集数据)
#    直达 + 3 条壁面反射,时延与幅度为示例假设值
delays  = np.array([0.0, 0.35e-3, 0.80e-3, 1.40e-3])
gains   = np.array([1.0, 0.55, 0.32, 0.18])
n_total = int(1.6e-3*fs) + len(s)
rx = np.zeros(n_total)
for d, g in zip(delays, gains):
    i0 = int(d*fs)
    rx[i0:i0+len(s)] += g * s
rx += 0.02 * np.random.randn(n_total)        # 加性噪声

# 3) 匹配滤波:rx 与 s 相关
mf = np.correlate(rx, s, mode='full')
mf = mf / np.max(np.abs(mf))                 # 归一化
env = np.abs(mf)                             # 包络
tau = (np.arange(len(mf)) - (len(s)-1)) / fs # 相对时延轴

# 4) 门限检测,提取有效多径
thr = 0.15
idx = np.where(env > thr)[0]
# 合并相邻过门限点为一个到达峰
peaks, last = [], -10
for i in idx:
    if i - last > int(0.05e-3*fs):
        peaks.append(i)
    last = i
peaks = np.array(peaks)
tau_p = tau[peaks]
amp_p = env[peaks]

# 5) 计算均方根时延扩展
p = amp_p**2
p = p / p.sum()
tau_mean = np.sum(p * tau_p)
tau_rms  = np.sqrt(np.sum(p * (tau_p - tau_mean)**2))
Bc = 1.0 / (5.0 * tau_rms)

print("到达时延(ms):", np.round(tau_p*1e3, 3))
print("相对幅度   :", np.round(amp_p, 3))
print(f"平均时延   : {tau_mean*1e3:.3f} ms")
print(f"τ_rms      : {tau_rms*1e3:.3f} ms")
print(f"相干带宽 Bc: {Bc/1e3:.2f} kHz")

示例数据下预期输出(由给定输入直接推出,非实测):到达时延约 0、0.35、0.80、1.40 ms,τrms 约 0.4 ms 量级,Bc 约 0.5 kHz 量级。若实测结果与预期差异明显,按下表排查。

结果判读与常见问题

现象可能原因处理
直达峰不明显或分裂收发未对准、换能器指向性旁瓣调整对位,检查换能器指向角
反射峰过多且密集水池未消声或测量距离过近加吸声尖劈,增大收发间距
τrms 偏大、Bc 偏小强反射未被抑制调整换能器高度避开对称反射路径
包络底噪高发射功率不足或环境噪声大提高发射电平,增加平均次数
测量前先用示波器确认接收信号未削顶;匹配滤波前对接收数据做带通滤波(通带覆盖 B),可显著降低池外噪声对包络的影响。