第1章:信号处理基础回顾

各位同学好,我是你们这门课的主讲。在正式进入混响抑制算法之前,我觉得有必要先带大家把信号处理的基础再过一遍。别嫌我啰嗦,这些基础东西,说白了就是咱们吃饭的碗筷——碗不干净,菜再好也白搭。

我在做音频算法这行快十年了,见过太多人一上来就调参数、跑模型,结果效果不好,回头一看,连STFT的窗函数选错了都不知道。嗯,咱们今天就把这些坑先填上。

4.1 短时傅里叶变换(STFT)

傅里叶变换大家都熟,但音频信号是非平稳的——你想想看,一段语音里,元音和辅音的频率特性完全不一样。直接对整个信号做FFT,等于把不同时间的信息混在一起,这显然不合理。

STFT的思路很简单:加窗,分段,再对每一段做FFT。用数学表达就是:

X(m, k) = Σ x[n] · w[n - mR] · e^(-j2πkn/N)

这里m是帧索引,k是频率索引,w是窗函数,R是帧移。我个人习惯用汉宁窗,旁瓣抑制效果不错,主瓣宽度也能接受。

关键参数:

  • 帧长(N):通常取512或1024点,对应采样率16kHz时约32ms或64ms
  • 帧移(R):一般取N/4或N/2,我建议用N/4,重叠更多,时域重建更平滑
  • 窗函数:汉宁窗、汉明窗、布莱克曼窗,各有千秋

我在项目中遇到过一个问题:用矩形窗做STFT,结果频谱泄漏得一塌糊涂。后来换成汉宁窗,效果立竿见影。所以啊,窗函数别看它小,选错了真要命。

4.2 功率谱密度估计

功率谱密度(PSD)说白了就是信号能量在频率上的分布。做混响抑制时,我们经常需要估计噪声的PSD,然后跟带噪语音的PSD做对比,才能决定哪些频率要压、哪些要留。

常用的估计方法有两种:

方法 原理 优缺点
周期图法 直接对信号做FFT,取模平方 简单,但方差大,不稳定
Welch法 分段加窗,平均周期图 方差小,但分辨率略降
自相关法 先算自相关,再做FFT 适合短数据,计算量大

我个人推荐Welch法。为什么?因为它的方差控制得好,做出来的PSD曲线平滑,不容易出现虚假峰值。你想想看,如果PSD估计不准,后面维纳滤波的增益系数就会算错,那整个算法就崩了。

小技巧:做PSD估计时,别忘了加窗。我曾经偷懒没加窗,结果估计出来的噪声谱全是毛刺,调试了三天才发现问题。嗯,血的教训。

4.3 维纳滤波原理

维纳滤波,说白了就是找一个最优的线性滤波器,让输出信号跟期望信号之间的均方误差最小。这个思想在混响抑制里非常核心——我们想从带混响的信号里恢复出干净的语音,本质上就是个最优估计问题。

频域维纳滤波器的增益公式长这样:

H(k) = P_s(k) / [P_s(k) + P_n(k)]

其中P_s(k)是纯净语音的PSD,P_n(k)是噪声的PSD。你看,这个公式多直观——信噪比高的频段,增益接近1,保留;信噪比低的频段,增益接近0,抑制。

但问题来了:我们哪知道P_s(k)和P_n(k)?这就是混响抑制算法的核心挑战——你得从带噪信号里估计出这两个量。

注意:维纳滤波假设信号和噪声是平稳的、不相关的。但实际音频信号哪有不相关的?语音和混响之间就有很强的相关性。所以直接套用维纳滤波,效果往往不理想。需要做各种改进,比如先做去相关处理。

我记得刚入行时,直接拿维纳滤波做降噪,结果语音失真得一塌糊涂。后来才明白,理论公式是死的,但应用场景是活的。你得根据实际情况调整先验信噪比的估计方法。

4.4 线性代数基础

做音频算法,线性代数绕不开。尤其是后面讲子空间法、自适应滤波时,矩阵运算满天飞。这里我挑几个最常用的概念过一遍。

向量内积:衡量两个向量的相似度。在麦克风阵列波束形成里,我们经常用导向向量跟接收信号做内积,来增强某个方向的声音。

矩阵特征值分解:把矩阵分解成特征值和特征向量的形式。在子空间法中,我们把带噪信号的协方差矩阵做特征分解,把信号子空间和噪声子空间分开,然后只保留信号子空间的部分。

奇异值分解(SVD):比特征分解更通用,任何矩阵都能做。我在做房间冲激响应估计时,经常用SVD来求伪逆,解决欠定问题。

实用公式:

  • 协方差矩阵:R = E[xx^H],用于描述信号的相关性
  • 迹:tr(R),等于各通道功率之和
  • 条件数:最大奇异值/最小奇异值,衡量矩阵的病态程度

你可能会问:这些数学概念跟混响抑制有什么关系?关系大了去了。比如在MVDR波束形成器里,你要解一个带约束的优化问题,最后就归结到求协方差矩阵的逆。如果矩阵病态,求出来的逆全是噪声,那算法就废了。

我曾经在一个混响严重的会议室里做测试,协方差矩阵的条件数高达10^6,结果波束形成出来的语音全是爆音。后来加了正则化项,把条件数压到100以内,效果才正常。所以啊,线性代数不是纸上谈兵,它直接决定了算法的稳定性。

第1章知识体系结构图 信号处理基础 短时傅里叶变换 功率谱密度估计 维纳滤波原理 线性代数基础 加窗分段 帧移重叠 Welch法 周期图法 增益公式 先验SNR 特征分解 SVD分解 四个基础模块相互支撑,共同构成混响抑制算法的理论基石 ↓ 后续章节将在此基础上展开 ↓

好了,这一章的内容就到这里。基础的东西看着简单,但真正用起来,处处都是细节。下一章我们开始讲混响的物理模型和数学描述,到时候你会感谢今天打下的这些基础。

专注资料整理