1. 课程导入

各位同学好,我是这门课的主讲。今天咱们聊聊 VAD——语音活动检测。

VAD 这名字听起来挺唬人,说白了就是判断「现在有没有人在说话」。一个二分类问题:是语音,还是非语音。就这么简单。

但简单背后,坑不少。我在项目中遇到过好几次,VAD 没做好,整个系统就像聋了一样——要么该响应时不响应,要么不该响应时乱响应。嗯,咱们今天就把这事彻底讲透。

1.1 什么是 VAD

VAD(Voice Activity Detection),中文叫语音活动检测。它的任务只有一个:判断当前音频片段里是否包含人声。

你想想看,麦克风一直在采集声音。但大部分时间,采集到的可能是空调声、键盘声、马路上的车流声,或者干脆就是静音。VAD 要做的,就是从这些乱七八糟的声音里,把真正的人声挑出来。

核心定义:VAD 是一个二分类器,输入是音频帧(通常 10-30ms),输出是 0(非语音)或 1(语音)。

我习惯把 VAD 比作一个门卫。它站在音频流的入口,问每一帧:「你是人声吗?是就放行,不是就拦下。」这个门卫要是太松,啥都放进来,下游的语音识别、唤醒模块就得处理一堆垃圾;要是太严,真正的人声被拦在外面,用户体验直接崩盘。

1.2 VAD 的应用场景

VAD 不是孤立存在的。它几乎出现在所有语音产品的第一线。我挑三个最常见的场景说说。

1.2.1 语音唤醒

这是 VAD 最经典的应用。你喊「小爱同学」或「Hey Siri」,设备怎么知道你在喊它?

流程是这样的:麦克风一直在采集音频,VAD 先判断有没有人声。一旦检测到语音,才把这段音频送给唤醒词模型做进一步判断。如果没有 VAD,唤醒模型就得 24 小时不间断运行——功耗扛不住,算力也扛不住。

我曾经在一个低功耗芯片上做唤醒方案,VAD 的功耗只占整个唤醒链路的 5%,但它拦截了 90% 以上的非语音输入。你说值不值?

1.2.2 降噪

降噪算法需要知道哪些部分是目标语音,哪些是噪声。VAD 就是那个「信号灯」。

当 VAD 判定当前帧是语音时,降噪算法会尽量保留细节,不损伤音质。当 VAD 判定是非语音时,降噪算法可以大胆地压制噪声,甚至直接静音。

我记得有一次做车载降噪,车速一快,风噪特别大。VAD 如果误判,把语音帧当成噪声压掉,司机说的话就听不清了。后来我们专门针对这种场景优化了 VAD 的阈值策略。

1.2.3 通信

VoIP、对讲机、会议系统,都离不开 VAD。它的作用是:只在有人说话时才发送数据包。

你想想看,如果没人说话也一直发包,带宽浪费不说,还会引入不必要的背景噪声。VAD 在这里相当于一个「智能开关」——有人说话就开,没人说话就关。

个人经验:在通信场景中,VAD 的「尾音切除」是个大坑。切得太快,对方会觉得「话没说完就被掐了」;切得太慢,又会引入大量静音包。我一般建议保留 200-400ms 的 hangover(拖尾)时间。

1.3 VAD 的核心指标

评价一个 VAD 好不好,不能光凭感觉。我一般看三个指标:准确率、召回率、实时性。下面这张表可以帮你快速理解它们的区别。

指标 定义 通俗理解 对用户体验的影响
准确率 所有判断中,判断正确的比例 VAD 整体上有多靠谱 准确率低,系统会频繁误判
召回率 实际语音中,被正确检测出来的比例 有没有漏掉真正的人声 召回率低,语音会被「吃掉」
实时性 从音频输入到输出判决的延迟 VAD 反应够不够快 延迟高,交互会「慢半拍」

1.3.1 准确率

准确率 = (正确检测的语音帧 + 正确检测的非语音帧) / 总帧数。

这个指标看起来直观,但有个陷阱:如果非语音帧占绝大多数(比如 90%),你什么都不做,全部判为非语音,准确率也有 90%。所以只看准确率是不够的。

避坑指南:我曾经见过一个团队,报告 VAD 准确率 98%,结果一上线就翻车。为什么?因为他们的测试集里 95% 都是静音帧。VAD 只要一直输出 0,准确率就很高,但实际场景中语音一来就全漏了。所以,一定要结合召回率一起看。

1.3.2 召回率

召回率 = 正确检测的语音帧 / 实际语音帧总数。

召回率低,意味着很多语音被漏掉了。在语音唤醒场景中,召回率低会导致「喊了没反应」;在通信场景中,会导致「声音断断续续」。

召回率和准确率往往是矛盾的。你越想抓住所有语音(提高召回率),就越容易把非语音也判成语音(降低准确率)。这个 trade-off 怎么平衡?取决于你的业务场景。

  • 唤醒场景:宁可误唤醒,也不能漏唤醒。所以召回率优先。
  • 降噪场景:宁可漏掉一点语音细节,也不能把噪声当成人声保留。所以准确率优先。
  • 通信场景:两者都要兼顾,通常用 ROC 曲线找最佳阈值。

1.3.3 实时性

实时性,说白了就是 VAD 处理一帧音频需要多长时间。

在嵌入式设备上,VAD 通常跑在 DSP 或 NPU 上。如果处理一帧需要 20ms,而帧长只有 10ms,那就跟不上实时采集的速度——音频会越积越多,最终导致延迟越来越大。

我个人的经验是:VAD 的处理时间不能超过帧长的一半。比如帧长 10ms,VAD 必须在 5ms 内完成判决。留出余量给其他模块。

实时性要求:在大多数前端部署场景中,VAD 的端到端延迟(从音频输入到输出判决)应控制在 10ms 以内。超过 30ms,用户就能明显感觉到「卡顿」。

1.4 VAD 的核心逻辑框架

下面这张图,是我自己总结的 VAD 核心逻辑框架。它把 VAD 的输入、处理、输出、以及三个核心指标的关系串在了一起。你可以在脑子里把它当成一个「地图」,后面几章的内容都会围绕它展开。

VAD 核心逻辑框架 音频输入帧 特征提取 VAD 判决 输出:0 或 1 核心指标 • 准确率:整体判断正确率 • 召回率:语音漏检率 • 实时性:处理延迟 典型应用 • 语音唤醒 • 降噪 • 通信

从这张图你可以看到,VAD 的流程并不复杂:音频进来 → 提取特征 → 做判决 → 输出结果。但真正决定 VAD 好坏的,是特征怎么提、判决阈值怎么设、以及能不能在硬件上跑得够快。这些内容,咱们后面几章会一个一个拆开讲。

1.5 本章小结

好,咱们把第一章的内容捋一捋:

  • VAD 是什么:一个判断「有没有人声」的二分类器。
  • 应用场景:语音唤醒(降低功耗)、降噪(区分语音和噪声)、通信(节省带宽)。
  • 核心指标:准确率、召回率、实时性。三者互相制约,需要根据场景做取舍。

嗯,第一章就到这里。内容不多,但都是基础。后面的章节,咱们会深入到特征提取、阈值策略、以及如何在嵌入式设备上把 VAD 跑起来。准备好了吗?