2. 语音唤醒基础

做语音唤醒,说白了就是让机器听懂你说的话。但机器听不懂空气振动,它只认0和1。所以,我们得先把声音这种物理信号,变成数字信号。这个过程,就是本章要聊的核心。

我记得刚入行那会儿,总觉得这些基础理论没啥用,直接调库就完了。结果有一次,采样率设错了,唤醒词死活识别不出来,排查了整整两天。嗯,从那以后,我再也不敢小看这些“基础”了。

声音的物理三要素:频率、振幅、相位

声音的本质是振动。你说话时,声带在振动,空气分子被推来推去,形成疏密波。描述这个波,需要三个物理量。

  • 频率(Frequency):每秒振动的次数,单位是赫兹(Hz)。频率决定音高。女声频率高,听起来尖细;男声频率低,听起来低沉。人耳能听到的大约是20Hz到20kHz。语音信号的能量,主要集中在300Hz到3.4kHz之间。做唤醒词时,我们通常关注这个频段。
  • 振幅(Amplitude):振动的幅度,决定音量大小。振幅越大,声音越响。在数字信号里,振幅对应采样点的数值大小。
  • 相位(Phase):描述波形在某个时刻的位置状态,单位是角度或弧度。相位听起来有点抽象。我打个比方:两个人同时拍手,如果拍下去的时刻完全同步,相位差就是0;如果一个人慢半拍,就有相位差。在语音识别里,相位信息对音质影响不大,但对声源定位和某些特征提取很关键。

我的经验:做唤醒词时,频率和振幅是重点关注对象。相位信息在单麦克风方案里经常被忽略,但在麦克风阵列做波束成形时,相位差就是核心参数了。

从模拟到数字:采样与量化

麦克风输出的信号是连续的模拟电压。计算机没法处理连续值,只能每隔一小段时间“拍一张快照”,这就是采样。再把拍到的电压值近似成整数,这就是量化。

采样(Sampling)

采样就是按固定时间间隔,读取信号的瞬时值。这个间隔的倒数,就是采样率。比如采样率16kHz,意味着每秒采样16000次。

量化(Quantization)

采样得到的电压值是连续的,但计算机只能用有限个数字表示。量化就是把连续值映射到离散的等级上。常用的量化精度是16位,也就是把信号范围分成65536个等级。

避坑指南:我曾经在一个项目里,为了省存储空间,把量化精度从16位降到了8位。结果背景噪声明显变大,唤醒率直接掉了十几个点。后来我查资料才发现,量化精度不够,会引入量化噪声。对于语音唤醒,16位是底线,别轻易动它。

奈奎斯特定理:采样的黄金法则

采样率到底设多少才够?奈奎斯特定理给出了答案:采样率必须大于信号最高频率的两倍,才能无失真地重建原始信号。

公式很简单:fs > 2 * fmax

举个例子:人声最高频率大约8kHz,那采样率至少得16kHz。这也是语音领域最常用的采样率。如果你用8kHz采样,那超过4kHz的频率成分就会混叠到低频段,产生失真。

注意:实际应用中,采样率通常取最高频率的2.5到3倍,留点余量。另外,采样前一定要加抗混叠滤波器,把高于fs/2的频率滤掉。我见过有人省了这个滤波器,结果高频噪声混叠进来,怎么调算法都没用。

语音信号的时域与频域表示

同一个语音信号,可以从两个角度看:时域和频域。

时域(Time Domain)

时域就是波形图,横轴是时间,纵轴是振幅。它能直观看到声音的响度变化、静音段、起止点。但时域看不出频率成分。

频域(Frequency Domain)

频域用频谱图表示,横轴是频率,纵轴是能量(或幅度)。它能告诉你声音里包含哪些频率成分,能量分布如何。语音识别里常用的MFCC特征,就是从频域提取的。

时域和频域通过傅里叶变换联系起来。简单说,傅里叶变换能把一段时域波形,分解成不同频率的正弦波之和。

我的习惯:调试唤醒词时,我总会在时域和频域之间来回切换。时域看端点检测有没有切准,频域看特征提取有没有丢信息。两个视角互补,缺一不可。

下面这张图,展示了语音信号从物理世界到数字世界的完整流程,以及时域和频域的关系。

语音信号数字化流程与表示 语音信号数字化流程与表示 物理声音 麦克风采集 采样 量化 数字信号 时域表示(波形图) 频域表示(频谱图) 傅里叶变换 关键参数: 采样率(fs):决定能采集的最高频率,需满足奈奎斯特定理 fs > 2×fmax 量化精度(位深):决定动态范围和信噪比,16位是语音唤醒的常用选择

采样率与量化精度怎么选?

做唤醒词开发,这两个参数是绕不开的。我整理了一张表,方便你对照参考。

参数 常用值 适用场景 注意事项
采样率 8 kHz 电话语音、窄带通信 最高频率4kHz,语音清晰度有限
采样率 16 kHz 语音唤醒、语音识别(主流) 覆盖人声主要频段,性价比最高
采样率 44.1 kHz 音乐、高保真录音 数据量大,唤醒词场景通常不需要
量化精度 8 bit 低功耗、低质量场景 量化噪声大,不推荐用于唤醒词
量化精度 16 bit 语音唤醒、语音识别(主流) 动态范围96dB,满足大部分场景
量化精度 24 bit 专业录音、高动态范围 数据量大,嵌入式设备慎用

我的建议:如果你刚开始做唤醒词开发,直接选16kHz采样率、16位量化精度。这是行业标准配置,绝大多数算法库和硬件都支持。等后面遇到具体问题,再针对性调整。

时域与频域的实际应用

在唤醒词开发中,时域和频域各有各的用处。

时域用得最多的地方:

  • 端点检测(VAD):通过短时能量和过零率,判断有没有人说话。这完全在时域做,计算量小,适合嵌入式实时处理。
  • 音量归一化:调整信号振幅,让不同距离、不同音量的说话人,信号幅度大致一致。

频域用得最多的地方:

  • 特征提取:MFCC、FilterBank等特征,都是从频域算出来的。这些特征是唤醒词模型的输入。
  • 噪声抑制:在频域里,可以识别并衰减特定频段的噪声,比如空调低频嗡嗡声。

我的经验:有一次,唤醒词在安静环境下表现很好,一到嘈杂环境就失灵。我一看频谱,发现是某个频段的背景噪声把语音特征淹没了。后来在频域做了个简单的带通滤波,只保留300Hz到3.4kHz的语音主频段,唤醒率立刻回升。你看,懂点频域知识,关键时刻能救命。

好了,这一章的内容就这些。声音的物理特性、采样量化、奈奎斯特定理、时域频域表示,这些是语音信号处理的基石。后面讲特征提取和唤醒词模型时,你会反复用到它们。