4. 海洋环境噪声建模与MATLAB实现

水声通信系统里,接收端收到的信号从来不是"干净"的。除了目标信号,水听器还会拾取到大量来自海洋环境的随机扰动,这就是海洋环境噪声。它决定了系统的信噪比下限,也直接影响误码率、检测门限和通信距离。本节从噪声的物理来源出发,梳理其统计特性,再用MATLAB把高斯白噪声和有色噪声"造"出来,最后通过功率谱密度和时域波形观察噪声对信号的实际影响。

一、海洋环境噪声的来源与统计描述

海洋环境噪声按频段和成因大致可分为几类:航运与工业活动产生的低频噪声(约10 Hz~500 Hz),风浪、海面破碎产生的风成噪声(约500 Hz~20 kHz,是水声通信常用频段的主要背景),热噪声(约20 kHz以上,由水分子热运动引起),以及生物噪声、降雨、地震等偶发源。对水声通信而言,最需要关注的是风成噪声和航运噪声,它们构成了中低频段的噪声基底。

在建模时,我们通常把环境噪声近似为平稳各态历经的随机过程,用功率谱密度(PSD)描述其频域能量分布,用概率密度描述其幅度分布。大量实测表明,在较宽频带内,海洋环境噪声的瞬时幅度接近高斯分布,而其功率谱往往不是平坦的——低频能量高、高频能量低,呈现随频率下降的趋势。这就引出了两个基本模型:高斯白噪声(功率谱平坦)和高斯有色噪声(功率谱随频率变化)。

需要强调一个约定:本文所有功率谱密度均采用单边谱表示,单位为 dB/Hz(相对 1 μPa²/Hz 或归一化功率),频率轴从 0 到 fs/2。后续计算和图示都遵循这一约定。

二、用MATLAB生成高斯白噪声

高斯白噪声是最基础的噪声模型:样本服从零均值高斯分布,且功率谱在带宽内平坦。MATLAB中可直接用 randn 生成。设采样率 fs = 48 kHz,时长 T = 1 s,则样本数 N = fs·T = 48000。

fs = 48000;            % 采样率 (Hz)
T  = 1;                % 时长 (s)
N  = fs*T;             % 样本数
sigma2 = 1;            % 噪声方差(功率)
n = sqrt(sigma2)*randn(N,1);   % 零均值高斯白噪声

% 验证统计特性
mean_n = mean(n);              % 应接近 0
var_n  = var(n);               % 应接近 sigma2

这里 randn 产生的是标准正态分布(方差为1),乘以 sqrt(sigma2) 后方差变为 sigma2。运行后 mean_n 通常在 ±0.01 量级,var_n 在 1 附近小幅波动,样本越长越接近理论值。这就是"统计特性"的直观检验:均值趋零、方差趋定值。

白噪声的"白"体现在功率谱上。用 pwelch 估计单边功率谱密度:

[Pxx,f] = pwelch(n, hann(1024), 512, 1024, fs, 'onesided');
Pxx_dB  = 10*log10(Pxx);       % 转 dB

若噪声方差为1、采样率48 kHz,则理论单边PSD为 sigma2/(fs/2) = 1/24000 ≈ 4.17×10⁻⁵,即约 -43.8 dB/Hz。画出的谱线应在这个值附近随机起伏,整体平坦,这就是白噪声的判据。

三、生成有色噪声:以风成噪声为例

真实海洋噪声的谱不是平的。一个常用的近似是让噪声PSD随频率按幂律下降,例如风成噪声在中频段近似 S(f) ∝ f^(-5/3) 到 f^(-2)。生成有色噪声的常用方法是频域整形法:先产生白噪声,做FFT,乘以目标幅度谱形状,再IFFT回时域。

% 目标幅度谱形状:S(f) ∝ f^(-1)(功率 ∝ f^(-2))
f  = (0:N-1)'*(fs/N);          % 频率轴
f(1) = f(2);                   % 避免 0 频除零
shape = 1./sqrt(f);            % 幅度整形(功率为 shape.^2)
shape = shape / sqrt(mean(shape.^2));  % 归一化,保持功率

Nf  = fft(n);                  % 白噪声频谱
Nc  = Nf .* shape;             % 频域整形
nc  = real(ifft(Nc));          % 回到时域
nc  = nc / std(nc);            % 归一化到单位方差

整形后,低频分量被放大、高频被压低,时域波形看起来更"平滑"、起伏更缓。用 pwelch 再看它的谱,会看到一条随频率下降的斜线,而不是白噪声的水平线。这就是有色噪声与白噪声最本质的区别:能量在频域上不再均匀分布。

频域整形时要注意:直接对双边谱整形会破坏共轭对称性,导致IFFT结果为复数。上面用 real() 取实部是一种简化处理;更严谨的做法是只对正频率整形、负频率取共轭,或使用 filter 设计成形滤波器。零基础阶段先用简化法理解原理即可。

四、噪声对信号的影响

把噪声叠加到通信信号上,最直接的观察是时域波形和频谱。设发送一个 BPSK 调制信号 s(t),加入不同信噪比的噪声:

SNR_dB = 10;                   % 目标信噪比
Ps = mean(s.^2);               % 信号功率
Pn = Ps / (10^(SNR_dB/10));    % 所需噪声功率
n_scaled = sqrt(Pn/var(nc))*nc;
r = s + n_scaled;              % 接收信号

信噪比降低时,接收波形上的信号"轮廓"逐渐被噪声淹没,星座点扩散、判决错误增多。在频域上,若噪声是有色的,它会在低频段抬高基底,使低频子载波或低频信号成分受到更强干扰。这正是为什么在OFDM水声通信中,需要根据噪声谱形状做功率分配或均衡——平坦的白噪声假设在真实海洋中往往不成立。

海洋环境噪声建模流程与谱特性对比 MATLAB 生成流程 randn(N,1) 零均值高斯白噪声 fft → 乘幅度谱 shape 频域整形(可选) ifft → 归一化 得到有色噪声 nc pwelch 估计 PSD 验证谱形状 r = s + n_scaled 单边功率谱密度对比(示意) 高斯白噪声:谱平坦 -43.8 dB/Hz 24 kHz 0 能量均匀分布,基底约 -43.8 dB/Hz 风成有色噪声:低频高、高频低 -20 dB/Hz 24 kHz 0 S(f) ∝ f⁻²,低频段噪声更强 有色噪声抬高低频基底 → 低频子载波/成分受扰更强 需按噪声谱形状做功率分配或均衡,而非默认白噪声

五、结果判读与常见问题

完成上述流程后,应从三个角度判读结果。第一,时域统计:白噪声样本均值接近0、方差接近设定值;有色噪声经归一化后方差为1,但相邻样本相关性明显增强。第二,频域形状:白噪声PSD在带宽内近似水平,有色噪声PSD呈下降趋势,斜率应与整形函数一致。第三,系统影响:在相同信噪比下,有色噪声对低频敏感信号的影响大于白噪声,误码率曲线会出现差异。

初学者常遇到两个问题。一是用 pwelch 时窗长选择不当,谱估计起伏过大,误以为噪声"不平坦"——应适当增大窗长或做多次平均。二是频域整形后忘记归一化,导致噪声功率与信号功率不匹配,信噪比计算失真。建议每次生成噪声后都打印 mean、var 和几个频点的PSD值,与理论值对照,形成"生成—检验—使用"的闭环习惯。

掌握白噪声与有色噪声的生成和谱分析,是后续信道建模、接收机设计和性能评估的基础。真实海洋噪声还可能包含脉冲成分和非平稳段,但在零基础阶段,先把高斯白噪声和高斯有色噪声这两个"标准件"用熟、用准,才能在此基础上逐步逼近真实环境。