Skip to content

降噪与前处理

前处理不是简单“把声音变干净”,而是为后面的唤醒、识别和通话创造更稳定的输入。它要在三个目标之间取舍:保留目标人声、压制干扰、控制延迟和失真。

语音设备里常说的 3A 通常指 AECANS/NSAGC

| 模块 | 全称 | 解决的问题 | 简化理解 | | --- | --- | --- | | AEC | Acoustic Echo Cancellation | 消除设备自己播放产生的回声 | 把“自己放出来的声音”从麦克风里减掉 | | ANS / NS | Automatic Noise Suppression / Noise Suppression | 抑制环境噪声 | 判断哪些频段更像噪声并压低 | | AGC | Automatic Gain Control | 自动控制语音响度 | 小声拉高,大声压住 |

3A 音频前处理链路

3A 的顺序很关键。多数语音设备会先做 AEC,再做 ANS,最后做 AGC。原因是:如果先做 AGC,残留回声和噪声也会被一起放大;如果先做 ANS,回声可能被当作环境噪声处理,破坏 AEC 需要的线性关系。

3A 的输入输出

阶段输入输出关键依赖
AEC麦克风信号 + 播放参考回声被压低的语音参考完整、延迟稳定、双讲保护
ANSAEC 后的语音噪声被压低的语音噪声估计、语音保真、场景覆盖
AGCANS 后的语音响度稳定的语音目标响度、增益上下限、攻击释放时间

3A 的目标不是让波形“看起来漂亮”,而是让后级模型更稳定。对唤醒和 ASR 来说,最重要的是语音特征保留;对通话来说,还要兼顾自然度和听感疲劳。

AEC 回声消除

AEC 解决的是“设备把自己说的话又听进去”。智能音箱播放音乐时唤不醒、会议终端对方听到回声、TTS 播报时 ASR 误识别,通常都要先看 AEC。

AEC 自适应滤波原理

原理

扬声器播放的声音会经过喇叭、外壳、桌面、墙面和空气反射后进入麦克风。AEC 拿到播放参考后,尝试学习这条回声路径,生成一个“估计回声”,再从麦克风信号里减掉。

这类算法常用自适应滤波思路。滤波器不是固定的,因为用户移动设备、房间变化、音量变化都会改变回声路径。残留回声越大,滤波器越需要继续更新。

关键输入

输入为什么重要
麦克风信号包含近端人声、噪声和真实回声
播放参考告诉 AEC 系统刚才到底播放了什么
延迟关系参考和麦克风必须能对齐,否则估计回声错位
双讲判断用户说话和系统播放同时存在时,不能把用户声音消掉

关键参数和机制

作用调不好会怎样
回声尾长覆盖房间和结构回声持续时间太短会留长尾回声,太长会增加算力和收敛压力
延迟估计对齐播放参考和麦克风回声错位后抵消失败,甚至引入新的残留
收敛速度滤波器适应回声路径变化的速度太慢跟不上环境变化,太快可能误学近端人声
双讲检测判断用户是否正在插话弱则误消人声,强则回声残留增加
非线性处理 NLP压制线性 AEC 后的残留回声过强会让近端语音断续、发闷

典型失效

现象根因判断方式
播放音乐时唤不醒残留回声压过唤醒词看 AEC 前后唤醒置信度和 ERLE
会议里对方听到回声参考缺失或延迟漂移对齐播放参考和麦克风录音
用户插话被压掉双讲保护弱播放时近端说话,听近端是否被切碎
大音量下效果突然变差扬声器或功放非线性失真看波形削顶和 THD+N

AEC 调试顺序

  1. 先确认播放参考是否完整,包含音乐、提示音、TTS、系统音效。
  2. 再确认参考和麦克风信号的延迟是否稳定。
  3. 单独测试远端单讲,只看回声衰减。
  4. 测试近端单讲,确认没有误处理人声。
  5. 测试双讲,确认用户插话不会被消掉。
  6. 最后测试大音量播放,因为非线性失真通常在大音量下暴露。

ANS / NS 噪声抑制

ANS 解决的是环境噪声。它通常在短时频谱上工作:把音频切成很多小时间片和小频率片,判断每一小块更像语音还是噪声,再决定保留、压低或平滑。

这里的难点不是“把非语音全删掉”,而是“在噪声和语音重叠时尽量保住语音”。语音中的辅音、气声、字头本来就短而弱,过强降噪很容易把这些信息一起压掉。

常见路线

路线思路特点
频谱减法估计噪声谱,再从当前频谱中扣掉简单、低算力,容易产生音乐噪声
维纳滤波根据语音和噪声能量比例计算抑制增益比频谱减法平滑,但依赖估计质量
统计模型根据噪声平稳性和语音概率动态调整传统通话系统常见
深度学习降噪模型直接估计语音掩码或干净语音复杂噪声效果更强,但算力和数据要求高

噪声类型

噪声算法难度原因
风扇、空调、底噪较低频谱稳定,容易估计
键盘、关门、碗筷声中等时间上突发,容易误伤辅音
音乐、电视声较高结构复杂,和语音频段重叠
其他人说话很高与目标语音特征接近
风噪很高低频强、随机性强,结构防风更重要

关键参数

参数作用取舍
抑制强度噪声压低多少太弱噪声残留,太强语音失真
噪声更新速度噪声模型多久适应新环境太慢跟不上,太快会把语音学成噪声
语音保护对疑似语音区域少处理保护强则噪声残留,保护弱则吞字
低频处理控制风噪、震动、空调低频过强会让声音变薄
后平滑减少音乐噪声和闪烁感过强会让语音拖尾

过度降噪的副作用

降噪强度越高,不一定识别率越高。过强的 NS 会造成音乐噪声、字头丢失、辅音变弱和语音断续。对 ASR 来说,目标是保留可识别特征;对通话来说,还要兼顾自然度和听感疲劳。

AGC 自动增益

AGC 控制响度,让远处小声和近处大声都落在可用范围。它像自动音量旋钮,但不能替代硬件增益设计。

参数作用取舍
目标响度希望语音达到的平均电平太高会放大噪声,太低会影响识别
攻击时间音量变大时多久压下来太慢会削顶,太快会不自然
释放时间音量变小时多久拉上去太快会把静音噪声拉高
最大增益最多能放大多少过大容易把底噪变成明显噪声

AGC 为什么容易出问题

AGC 位于 3A 后段,它看到的是 AEC 和 ANS 处理后的结果。如果前面残留了回声或噪声,AGC 可能把这些残留一起放大。很多“降噪后底噪忽大忽小”“安静时噪声被拉起来”“远处说话忽然变闷”的问题,都和 AGC 策略有关。

现象常见原因调整方向
静音时底噪被拉高AGC 在非语音段继续增益联动 VAD,限制静音增益
近处大声破音攻击时间太慢或前级已削顶降低前级增益,缩短攻击时间
远处小声听不清最大增益不足或目标响度太低提高增益上限,但同时检查噪声
声音忽大忽小攻击/释放时间不平衡放慢释放,避免频繁抽动
ASR 置信度波动AGC 改变语音动态太剧烈固定目标响度并减少增益抖动

3A 之间的冲突

3A 不是三个互不相关的开关。它们会互相影响。

冲突表现处理
AEC 残留被 AGC 放大播放时背景里总有系统自己的声音先修 AEC,再调 AGC
ANS 过强影响 AEC 双讲用户插话被压碎或断续降低 ANS 强度,确认双讲保护
AGC 把噪声抬高安静处底噪明显AGC 联动 VAD,限制非语音增益
AEC NLP 过强像降噪回声少了但人声也被切断降低 NLP 或改善回声路径
ANS 和 AGC 共同造成抽吸感噪声随人声一涨一落放慢 AGC 释放,增加 ANS 平滑

3A 调试流程

  1. 先关掉 ANS 和 AGC,只验证 AEC。
  2. AEC 稳定后打开 ANS,比较噪声下降和语音失真。
  3. 最后打开 AGC,观察响度稳定性和底噪是否被抬高。
  4. 每一步都保留原始麦克风、播放参考、AEC 输出、ANS 输出和 AGC 输出。
  5. 指标要同时看 ERLE、SNR、语音失真、唤醒率、WER 和主观听感。

3A 之外的增强模块

波束形成

波束形成利用多个麦克风之间的时间差、相位差和能量差,把目标方向的声音增强,把其他方向的声音压低。它不是“凭空变清楚”,而是利用空间信息做取舍。

前提出错后果
阵列几何准确麦克风位置、间距、方向不对,主瓣会指错方向
多路同步稳定各路采样不同步,时间差和相位差就不可信

波束形成通常放在 AEC 后、ANS 前后结合使用。远场阵列设备不能只靠 ANS 硬压噪声,空间增强往往更关键。

VAD 端点检测

VAD 判断“现在是不是有人声”。它影响唤醒、ASR 起止点、录音切片和降噪控制。

VAD 不是只看能量。安静场景里能量阈值有效,但车噪、电视声和多人背景会让能量判断失效。更稳的 VAD 会结合频谱形状、语音周期性、上下文连续性和模型置信度。

问题表现调整方向
起点太晚第一个字被吞增加前置缓存,降低起始阈值
终点太早句尾被截断增加尾部静音,放宽结束判断
太敏感噪声触发识别增加连续帧确认或提高阈值
太保守轻声、儿童声漏掉补充低音量和儿童样本

模块顺序怎么定

场景推荐思路
有播放的设备先保证 AEC,再做 BF、NS、AGC、VAD
远场阵列设备阵列校准和 BF 很关键,单靠 NS 不够
通话会议AEC 和双讲保护优先,不能只追求降噪强度
纯近场识别轻量 NS、AGC、VAD 即可,避免过处理
车载路噪模型、座位方向和 AEC 要一起调

验收标准

前处理验收不能只听一段音频。至少要分场景看:

指标看什么
ERLE回声消除是否有效
双讲保真播放时用户插话是否被保留
SNR 改善噪声是否被压低
语音失真字头、辅音、尾音是否被破坏
WER / 唤醒率前处理是否真的帮助后级模型
延迟帧长和模型是否影响实时交互

总结

3A 是语音前处理的主干。AEC 先处理系统回声,ANS 再压环境噪声,AGC 最后控制响度。调试时要按顺序逐个验证,不能把 3A 当成三个独立开关一起拉满。真正稳定的效果来自完整参考、可靠延迟、适度降噪、受控增益和分阶段录音回放。

别急,先让缓存热一下。