3. 水声信道基础与仿真参数设定

水声通信与无线电通信最大的差别,在于信道本身极其“不友好”。声波在海水中传播速度约1500 m/s,比空气中快四倍多,却比电磁波慢二十万倍;这带来长传播时延,也带来严重的多径扩展。要做出可信的MATLAB仿真,第一步不是写调制解调器,而是把信道的关键物理量变成可计算的参数。本节围绕声速、传播损失、环境噪声三个基本概念,说明如何在MATLAB中定义频率、距离、深度、声速剖面等核心参数,并绘制参数影响曲线。

一、声速:不是常数,而是随深度变化的剖面

很多初学者直接把声速写成 c = 1500,这在粗略估算时可用,但会掩盖声线弯曲这一水声特有现象。工程上常用Mackenzie九项式由温度T(℃)、盐度S(‰)、深度D(m)计算声速:

function c = sound_speed(T, S, D)
% Mackenzie (1981) 声速经验公式,输入可为同维数组
    c = 1448.96 + 4.591*T - 5.304e-2*T.^2 + 2.374e-4*T.^3 ...
        + 1.340*(S-35) + 1.630e-2*D + 1.675e-7*D.^2 ...
        - 1.025e-2*T.*(S-35) - 7.139e-13*T.*D.^3;
end

典型深海声速剖面呈三层结构:表面混合层近似等温、声速基本不变;其下是负梯度层,声速随深度下降;约1000 m附近达到声速最小值,即声道轴;再往下因压力增大,声速回升。声线总是向声速小的方向弯曲,因此声道轴附近的声能被“困”住,可远距离传播。仿真中若只取常数声速,就无法复现这种聚焦与阴影区效应。

二、传播损失:几何扩展加吸收

传播损失TL描述声强随距离的衰减,工程上常拆成扩展损失与吸收损失两部分。球面扩展对应 20log10(r),柱面扩展对应 10log10(r);吸收系数α(dB/km)随频率快速上升,可用Thorp公式估算:

f_kHz = f/1000;
alpha = 0.11*f_kHz.^2./(1+f_kHz.^2) + 44*f_kHz.^2./(4100+f_kHz.^2) ...
        + 2.75e-4*f_kHz.^2 + 0.003;   % dB/km
TL = 20*log10(r/1000) + alpha*(r/1000);  % r 单位 m,按球面扩展

注意单位统一:距离用米输入、换算成千米参与吸收项,否则会出现数量级错误。下图把本节的核心参数关系串起来:声速剖面决定声线弯曲,频率与距离共同决定传播损失,环境噪声则叠加在接收信号上。

水声信道核心参数关系 声速剖面 c(D) 0 深 声速 声道轴 混合层 负梯度 正梯度 传播损失 TL(f, r) TL 距离 r 高频 中频 低频 吸收随 f 增大 环境噪声与 SNR 航运噪声(低频主导) 风关噪声(高频主导) 热噪声(极高频) SNR = SL − TL − (NL − DI) 接收端判决依据 SNR 过低 → 误码 参数链:声速剖面 → 声线/多径 → 传播损失 → 叠加噪声 → 信噪比 → 通信性能

三、环境噪声:用经验谱描述

海洋环境噪声没有确定波形,工程上用功率谱密度描述。Wenz谱给出典型量级:航运噪声在10~100 Hz最强,风关噪声在100 Hz~10 kHz随频率下降,热噪声在20 kHz以上上升。仿真中常把噪声建模为带限高斯白噪声,其方差由噪声谱级NL(dB re 1 μPa/√Hz)与接收带宽B换算:

NL = 60;                 % 示例:噪声谱级 60 dB
B  = 4000;               % 接收带宽 Hz
N0 = 10^(NL/10);         % 线性谱密度(相对量)
noise = sqrt(N0*B/2) * (randn(1,N) + 1j*randn(1,N));

这里用复高斯噪声模拟基带等效信道,实部虚部各占一半功率,因此除以2。若做通带仿真,则只需单路实噪声,系数改为 sqrt(N0*B)。这一细节在零基础阶段最容易出错,务必先明确仿真是在通带还是基带进行。

四、在MATLAB中组织参数并绘制影响曲线

建议把参数集中成一个结构体,避免散落变量导致单位混乱。下面给出可直接运行的最小示例,用于观察频率与距离对传播损失的影响:

par.f  = 12000;          % 载波频率 Hz
par.B  = 4000;           % 带宽 Hz
par.r  = 1000:100:10000; % 通信距离 m
par.D  = 0:10:1000;      % 深度 m
par.T  = 15; par.S = 35; % 温度、盐度

c_prof = sound_speed(par.T, par.S, par.D);
f_kHz  = par.f/1000;
alpha  = 0.11*f_kHz^2/(1+f_kHz^2) + 44*f_kHz^2/(4100+f_kHz^2) ...
         + 2.75e-4*f_kHz^2 + 0.003;
TL     = 20*log10(par.r/1000) + alpha*(par.r/1000);

figure;
subplot(1,2,1); plot(c_prof, par.D); set(gca,'YDir','reverse');
xlabel('声速 m/s'); ylabel('深度 m'); title('声速剖面');
subplot(1,2,2); plot(par.r/1000, TL);
xlabel('距离 km'); ylabel('传播损失 dB'); title('TL 随距离变化');

运行后可观察到两个现象:左图声速剖面在约1000 m处出现极小值,说明声道轴位置;右图TL随距离近似对数上升,且斜率中包含吸收项贡献。若把 par.f 改为 30000 Hz 重跑,右图曲线整体上移,这就是高频吸收更强的直观体现。判断参数是否合理,可对照量级:12 kHz、10 km 时TL大致在70~80 dB量级,若算出几百dB,多半是距离单位或log底数写错。

建议在脚本开头统一约定:距离一律用米存储、绘图时换算为千米;频率一律用Hz存储、Thorp公式内换算为kHz;深度向下为正。约定写进注释,后续章节复用同一套参数结构体即可避免反复换算。

五、参数选取的工程判断

参数不是随便填的。载频与带宽要匹配换能器与可用频段:低频传播远但带宽窄、数据率低;高频带宽大但吸收快、作用距离短。距离与深度决定几何扩展与声速剖面采样范围,若仿真浅海(如100 m以内),声速剖面近似等温,多径以海面海底反射为主;若仿真深海,则必须保留声道轴。噪声谱级要按海域与海况选取,航运繁忙海域低频噪声可比安静海域高10 dB以上。把这些判断写进参数注释,仿真结果才有物理意义,而不是一组漂亮但无法解释的曲线。

完成本节后,你应当能够:用Mackenzie公式生成声速剖面并识别声道轴;用Thorp公式计算吸收系数并合成传播损失曲线;按通带或基带正确生成噪声;把频率、距离、深度、声速剖面组织成统一参数结构体。这些参数将直接作为后续信道建模与调制解调仿真的输入。