第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以内,效果才正常。所以啊,线性代数不是纸上谈兵,它直接决定了算法的稳定性。
好了,这一章的内容就到这里。基础的东西看着简单,但真正用起来,处处都是细节。下一章我们开始讲混响的物理模型和数学描述,到时候你会感谢今天打下的这些基础。