录音降噪到底在降什么?噪声门、频谱减法与一次实测

0 阅读5分钟

上周整理一期安全面试的复盘录音,会议室里空调声、键盘声全被收进去了,回放的时候人声糊在一片底噪里。第一反应是把音量调小——当然没用,噪声和人声是叠在同一个波形里的,一起大一起小。后来认真做了一次降噪,顺便把几种降噪手段的原理翻了一遍,发现这事儿比想象中有意思:不同的"降噪"降的根本不是同一种噪声

一、先给噪声分类:稳态噪声和非稳态噪声

降噪算法处理的对象大致分两类:

  • 稳态噪声:频谱特征随时间基本不变。空调嗡嗡声、电流底噪、风扇声都是典型。这类噪声有一个共同宿敌——它们"不动",所以能被建模、被预测、被减掉。
  • 非稳态噪声:键盘敲击、关门声、旁边人说话。特征随时间剧烈变化,很难建立稳定的模型,是所有降噪算法的软肋。

判断你的录音能不能救,第一步就是听一遍:如果干扰以稳态为主,传统算法就有不错的效果;如果全程有突发噪声,就得指望基于深度学习的方案了。

二、噪声门:最粗暴的开关式方案

噪声门(Noise Gate)的逻辑很简单:给信号设一个振幅阈值,低于阈值的段落直接压到接近静音,高于阈值的正常放行。

输入信号
   │
   ├─ 振幅 < 阈值 ──→ 衰减(-40dB 或完全静音)
   └─ 振幅 ≥ 阈值 ──→ 原样通过

它的问题也一目了然:它不认识噪声,只认识音量。说话的气口、句尾拖音、轻声的部分都可能被误切,听感上就是"字头被咬掉"。用噪声门有两个经验参数:

  • 阈值要设在噪声峰值之上、人声谷值之下,中间的窗口越宽越好;
  • 释放时间(release)给长一点,一般 100~300ms,避免句尾突然"掉进洞里"。

适合场景:底噪很轻、人声很实的录音,比如安静房间里的口播。

三、频谱减法:拿噪声的"画像"去减

频谱减法(Spectral Subtraction)是经典算法,思路直白得可爱:

  1. 在录音里找一段"没人说话"的片段(比如开头几秒),估计出噪声的平均频谱,给噪声画像;
  2. 对整段音频做短时傅里叶变换(STFT),逐帧把噪声频谱从混合频谱里减掉
  3. 反变换回时域,得到降噪后的信号。

公式化简后核心就一行:|Ŝ(ω)|² = max(|X(ω)|² − α·|N(ω)|², β·|N(ω)|²),其中 X 是混合信号、N 是噪声估计,α 是过减因子、β 是残留下限。

它的命门在第一步:噪声画像必须准。如果录音从头到尾没有纯噪声段,或者噪声本身就是变化的,估计就崩了。另外频谱减法有个标志性副作用——"音乐噪声",即残留噪声在频谱上呈现随机分布的窄带尖峰,听感像流水声。这也是为什么很多工具会提供"降噪强度"滑块:拉太高,人声会发闷、发水声,就是过减把人声的一部分也削掉了。

四、AI 降噪:让模型学会"什么是人声"

近几年的主流方案换成了深度学习路线:把带噪音频的频谱(或波形)喂给训练好的网络,模型直接预测每个时频单元的掩码(mask)或者干净的幅度谱。

它的优势在非稳态噪声上——训练数据里见过键盘声、风声、婴儿哭声,就能针对性地抑制,不再依赖"先给噪声画像"这个前提。代价是计算量大,以及一个隐性问题:模型没见过的噪声类型,效果可能还不如传统方法,而且过度抑制会带来明显的"电子味",人声高频细节被抹平。

五、一次实测:面试复盘录音的降噪前后

拿真实录音验证一下。素材是一段 9.7MB 的安全岗位面试复盘录音(MP3,约十几分钟),室内环境音明显。我用工具派上的音频降噪工具处理了一遍:

screenshot_01.png

screenshot_02.png

screenshot_03.png

这次验证我用的是工具派上的音频降噪工具,顺手记录一下。处理前后的对比很典型:空调底噪被明显压下去了,句间安静段的波形从"毛刺状"变成接近静音;但键盘敲击这类突发噪声仍有残留——和第三、四节的原理分析对得上,非稳态噪声本来就是传统频谱方法的软肋。另外我没有把强度拉满,实测拉满后人声出现可感知的闷感,符合"过减副作用"的预期。

六、降噪参数怎么选:一张决策表

录音情况建议方案
底噪轻且稳态,人声实噪声门即可,阈值宁低勿高
稳态底噪明显,开头有纯噪声段频谱减法,强度中档起步
底噪复杂或含突发噪声AI 降噪,强度别拉满
什么都拿不准保留原始文件,降噪副本分开存

最后一条不是玩笑:降噪是有损处理,任何参数下都先在副本上操作,这是做音频后期的人踩过无数次坑之后留下的规矩。

项目地址:gjupai.com