# 降噪与语音检测 · NS 与 VAD

> 降噪（NS）把风扇、空调这类稳态背景噪声压下去；语音活动检测（VAD）判断此刻有没有人在说话。这一章讲清 NS 的频域降噪原理、VAD 的用途（DTX、增益门控、舒适噪声），以及它们在 APM 链条里的角色。收尾第 7 部分的处理链。

- 作者：David（道雾轩）
- 专栏：音视频与 WebRTC 详解（https://daiw.org/manual/webrtc.md）
- 最后更新：2026-07-14
- 原文：https://daiw.org/manual/webrtc/ns-vad
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

# 降噪与语音检测 · NS 与 VAD

[APM 处理链](https://daiw.org/manual/webrtc/apm-overview)还剩两个环节：**NS（降噪）** 把背景噪声压下去，**VAD（语音活动检测）** 判断有没有人说话。它俩一个“洗”，一个“判”，收尾发送侧的音频处理。

## NS：压掉稳态噪声

**NS（Noise Suppression）** 对付的是**稳态背景噪声**——风扇嗡嗡、空调声、键盘声底、街道白噪：

<Callout type="info">
  **NS 在频域工作：它估计出“背景噪声的频谱”（哪些频段一直有稳定的噪声能量），然后在每一帧里**衰减这些频段的噪声成分**，保留人声。** 原理基于一个观察：**噪声通常是“稳态”的**（风扇声持续、频谱稳定），而人声是“变化”的（时有时无、频谱多变）。NS 在你**不说话的间隙**观察出“本底噪声长什么样”（频谱），说话时就用这个模型，从信号里**减掉**噪声占主导的部分。像[回声抑制](https://daiw.org/manual/webrtc/aec3-internals)一样，它是“按频段衰减”，不是精确相减。

  难点还是**平衡**：降噪太狠，人声的某些频段也被削，声音发闷、有“水声 / 电音”（musical noise）；降噪太弱，噪声没除干净。所以 NS 有强度档位，在“去噪”和“保真”之间取舍。它和[AEC 回声消除](https://daiw.org/manual/webrtc/aec3-internals)的分工：AEC 除的是“[扬声器漏回的结构化回声](https://daiw.org/manual/webrtc/aec3-echo-problem)”，NS 除的是“环境里弥散的稳态噪声”——两种不同的“脏”，各有各的算法。
</Callout>

## VAD：有人在说话吗

**VAD（Voice Activity Detection）** 不“洗”音频，而是**判断**：此刻这段音频，是**人在说话**，还是**静音 / 纯噪声**？

<Callout type="info">
  **VAD 输出一个简单的判断——“有语音”或“无语音”，但这个判断被下游好几个环节依赖：**

  - **[DTX 省带宽](https://daiw.org/manual/webrtc/audio-codecs)** —— VAD 说“没人说话”，[Opus 就启动 DTX](https://daiw.org/manual/webrtc/audio-codecs)停发或少发，省带宽；接收端播[舒适噪声](https://daiw.org/manual/webrtc/neteq-operations)。**VAD 是 DTX 的开关。**
  - **[AGC 门控](https://daiw.org/manual/webrtc/agc)** —— VAD 说“没人说话”，[AGC 就别调增益](https://daiw.org/manual/webrtc/agc)（免得把静音期的背景噪声当信号放大）。
  - **降噪辅助** —— [NS 在“无语音”时](https://daiw.org/manual/webrtc/ns-vad)更新它的噪声模型（那时采的纯是噪声，正好学）。

  别小看这个二元判断——它是很多“只在说话时才做 / 不做某事”逻辑的**触发器**。判断怎么下？综合信号的**能量**（说话通常比静音响）、**频谱特征**（人声有特定的频谱结构）、**过零率**等特征。VAD 要**快而准**：误判“有语音”（其实是噪声）会浪费带宽 / 放大噪声，误判“无语音”（其实在小声说）会**切掉话头**（对方听你“吞字”）。所以 VAD 在灵敏度上要仔细校准——宁可偶尔多传一点，也别切掉真的语音。
</Callout>

## 在链条里的协作

把[整条 APM 链](https://daiw.org/manual/webrtc/apm-overview)和 VAD 的协作画出来：

```mermaid
flowchart LR
    MIC["麦克风"] --> HPF["高通滤波"]
    HPF --> AEC["AEC3 消回声"]
    AEC --> NS["NS 降噪"]
    NS --> AGC["AGC 增益"]
    AGC --> ENC["编码(Opus)"]
    VAD["VAD 判断有无语音"] -.->|"无语音→DTX"| ENC
    VAD -.->|"无语音→别调增益"| AGC
    VAD -.->|"无语音→更新噪声模型"| NS
```

**处理链一道道洗（HPF→AEC→NS→AGC），VAD 在旁边判断、门控各环节**——净化 + 判断，合力把麦克风的脏音，变成干净、响度稳定、静音省带宽的人声，交给[编码](https://daiw.org/manual/webrtc/audio-codecs)。

## 小结与下一章

**NS（降噪）** 在频域**估计稳态噪声频谱、衰减噪声频段**（利用“噪声稳态、人声多变”），和 [AEC 除结构化回声](https://daiw.org/manual/webrtc/aec3-internals)分工；难在“去噪 vs 保真”平衡。**VAD（语音检测）** 判断“有无语音”，触发[DTX 省带宽](https://daiw.org/manual/webrtc/audio-codecs)、[AGC 门控](https://daiw.org/manual/webrtc/agc)、[NS 更新噪声模型](https://daiw.org/manual/webrtc/ns-vad)——小小二元判断，是很多逻辑的开关，要快准（别切话头）。至此 [APM 处理链](https://daiw.org/manual/webrtc/apm-overview)完整。

发送侧（[APM](https://daiw.org/manual/webrtc/apm-overview)）和接收侧（[NetEq](https://daiw.org/manual/webrtc/neteq-overview)）都讲透了。最后补上音频的“两头”——采集播放的设备抽象，和多路混音。下一章收尾第 7 部分。👉 [音频设备与混音](https://daiw.org/manual/webrtc/audio-device-mixer)。

## 参考资料

- [1] libwebrtc 源码.`modules/audio_processing/ns/`（降噪）、`modules/audio_processing/vad/`、`common_audio/vad/`。
- [2] 频域降噪（谱减法）、VAD —— 语音信号处理基础。
- [3] 关联[APM 总览](https://daiw.org/manual/webrtc/apm-overview)、[Opus DTX](https://daiw.org/manual/webrtc/audio-codecs)。
