2. 语音基础
做唤醒词识别,说白了就是让机器听懂你说的话。但机器听不懂空气振动,它只认0和1。所以,我们得先把声音这种物理现象,变成数字信号。这一章,我就带你把这层窗户纸捅破。
声音的物理三要素:频率、振幅、相位
声音的本质是什么?是空气的疏密振动。这种振动有三个基本属性,我管它们叫「三要素」。
- 频率(Frequency):每秒振动的次数,单位是赫兹(Hz)。频率决定了音调高低。女声尖细,因为频率高(200-800 Hz);男声低沉,因为频率低(80-400 Hz)。
- 振幅(Amplitude):振动的幅度,决定了音量大小。振幅越大,声音越响。
- 相位(Phase):振动在时间轴上的起始位置,单位是度(°)或弧度(rad)。相位单独听没啥感觉,但多个声音叠加时,相位关系会严重影响最终效果。
一个我踩过的坑: 刚做语音项目时,我总觉得相位不重要,反正人耳听不出来。直到有一次做双麦克风降噪,两个通道的相位没对齐,结果噪声没消掉,反而把语音给抵消了。嗯,从那以后我再也不敢小看相位了。
这三者的关系,可以用一个正弦波公式概括:
s(t) = A * sin(2πft + φ)
其中 A 是振幅,f 是频率,φ 是相位。你想想看,任何复杂的声音,比如你的说话声,都可以拆解成无数个不同频率、振幅、相位的正弦波叠加。这就是傅里叶变换的核心思想,后面我们会用到。
从模拟到数字:采样率与量化
麦克风输出的信号是连续的模拟电压,但计算机只能处理离散的数字。怎么转?两步走:采样和量化。
采样(Sampling)
每隔一小段时间,抓取一个瞬间的电压值。这个间隔的倒数就是采样率,单位是 Hz。比如 16 kHz 采样率,就是每秒抓 16000 个点。
量化(Quantization)
把抓到的电压值,用二进制数表示。每个样本用多少位二进制数,就是位深度。常见的是 16 位,也就是每个样本用 16 个 0 或 1 表示,取值范围是 -32768 到 32767。
| 参数 | 常见值 | 说明 |
|---|---|---|
| 采样率 | 16 kHz | 唤醒词识别的黄金标准,兼顾精度与计算量 |
| 采样率 | 44.1 kHz | CD 音质,用于音乐,唤醒词场景没必要 |
| 位深度 | 16 bit | 动态范围 96 dB,够用 |
| 位深度 | 24 bit | 动态范围 144 dB,录音棚级别 |
我的个人习惯: 做嵌入式唤醒词项目,我一般固定用 16 kHz、16 bit、单声道。为什么?因为再高的采样率,对唤醒词准确率提升微乎其微,但计算量翻倍,电池扛不住。
奈奎斯特定理:采样的底线
采样率是不是越高越好?理论上是的,但实际有成本限制。那最低能低到多少?这就引出了奈奎斯特定理。
定理很简单:采样率必须大于信号最高频率的两倍,否则会发生混叠(Aliasing),导致信号失真。
fs > 2 * f_max
举个例子:人声的最高频率大约 8 kHz。所以采样率至少得 16 kHz。如果你用 8 kHz 采样,那 4 kHz 以上的频率就会「伪装」成低频信号混进来,听起来怪怪的。
我曾经犯过的错: 有一回为了省存储空间,我把采样率降到 8 kHz,结果唤醒词在安静环境下还行,一到嘈杂环境就频繁误唤醒。排查了半天,发现是高频噪声混叠到了低频段,把特征搞乱了。从那以后,我老老实实加了个抗混叠滤波器,采样率也回到了 16 kHz。
为什么会这样?因为采样率不够,高频信号会「折叠」回低频区域。你想想看,原本 6 kHz 的噪声,用 8 kHz 采样后,会变成 2 kHz 的信号,跟语音混在一起,谁也分不清。
知识体系总览
下面这张图,把本章的核心逻辑串起来了。从物理世界的声音,到数字世界的样本,每一步都有对应的参数和约束。
你看,从物理声音到数字信号,中间经过了采样和量化两道关卡。而奈奎斯特定理,就是采样这关的「红线」。踩了这条线,后面的工作全白费。
一个小技巧: 实际工程中,采样率一般取最高频率的 2.5 到 3 倍,留点余量。比如人声最高 8 kHz,我用 22.05 kHz 采样,既保证质量,又不会太浪费资源。当然,唤醒词场景 16 kHz 完全够用。
好了,这一章的内容就这些。你只要记住:频率决定音调,振幅决定音量,相位影响叠加效果;采样和量化是把模拟信号变数字的两步;奈奎斯特定理是采样率的下限。这些概念后面会反复用到,尤其是做特征提取的时候。