降噪与语音检测 · NS 与 VAD
降噪(NS)把风扇、空调这类稳态背景噪声压下去;语音活动检测(VAD)判断此刻有没有人在说话。这一章讲清 NS 的频域降噪原理、VAD 的用途(DTX、增益门控、舒适噪声),以及它们在 APM 链条里的角色。收尾第 7 部分的处理链。
降噪与语音检测 · NS 与 VAD
APM 处理链还剩两个环节:NS(降噪) 把背景噪声压下去,VAD(语音活动检测) 判断有没有人说话。它俩一个“洗”,一个“判”,收尾发送侧的音频处理。
NS:压掉稳态噪声
NS(Noise Suppression) 对付的是稳态背景噪声——风扇嗡嗡、空调声、键盘声底、街道白噪:
NS 在频域工作:它估计出“背景噪声的频谱”(哪些频段一直有稳定的噪声能量),然后在每一帧里衰减这些频段的噪声成分**,保留人声。** 原理基于一个观察:噪声通常是“稳态”的(风扇声持续、频谱稳定),而人声是“变化”的(时有时无、频谱多变)。NS 在你不说话的间隙观察出“本底噪声长什么样”(频谱),说话时就用这个模型,从信号里减掉噪声占主导的部分。像回声抑制一样,它是“按频段衰减”,不是精确相减。
难点还是平衡:降噪太狠,人声的某些频段也被削,声音发闷、有“水声 / 电音”(musical noise);降噪太弱,噪声没除干净。所以 NS 有强度档位,在“去噪”和“保真”之间取舍。它和AEC 回声消除的分工:AEC 除的是“扬声器漏回的结构化回声”,NS 除的是“环境里弥散的稳态噪声”——两种不同的“脏”,各有各的算法。
VAD:有人在说话吗
VAD(Voice Activity Detection) 不“洗”音频,而是判断:此刻这段音频,是人在说话,还是静音 / 纯噪声?
VAD 输出一个简单的判断——“有语音”或“无语音”,但这个判断被下游好几个环节依赖:
- DTX 省带宽 —— VAD 说“没人说话”,Opus 就启动 DTX停发或少发,省带宽;接收端播舒适噪声。VAD 是 DTX 的开关。
- AGC 门控 —— VAD 说“没人说话”,AGC 就别调增益(免得把静音期的背景噪声当信号放大)。
- 降噪辅助 —— NS 在“无语音”时更新它的噪声模型(那时采的纯是噪声,正好学)。
别小看这个二元判断——它是很多“只在说话时才做 / 不做某事”逻辑的触发器。判断怎么下?综合信号的能量(说话通常比静音响)、频谱特征(人声有特定的频谱结构)、过零率等特征。VAD 要快而准:误判“有语音”(其实是噪声)会浪费带宽 / 放大噪声,误判“无语音”(其实在小声说)会切掉话头(对方听你“吞字”)。所以 VAD 在灵敏度上要仔细校准——宁可偶尔多传一点,也别切掉真的语音。
在链条里的协作
把整条 APM 链和 VAD 的协作画出来:
处理链一道道洗(HPF→AEC→NS→AGC),VAD 在旁边判断、门控各环节——净化 + 判断,合力把麦克风的脏音,变成干净、响度稳定、静音省带宽的人声,交给编码。
小结与下一章
NS(降噪) 在频域估计稳态噪声频谱、衰减噪声频段(利用“噪声稳态、人声多变”),和 AEC 除结构化回声分工;难在“去噪 vs 保真”平衡。VAD(语音检测) 判断“有无语音”,触发DTX 省带宽、AGC 门控、NS 更新噪声模型——小小二元判断,是很多逻辑的开关,要快准(别切话头)。至此 APM 处理链完整。
发送侧(APM)和接收侧(NetEq)都讲透了。最后补上音频的“两头”——采集播放的设备抽象,和多路混音。下一章收尾第 7 部分。👉 音频设备与混音。