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 的信号,跟语音混在一起,谁也分不清。

知识体系总览

下面这张图,把本章的核心逻辑串起来了。从物理世界的声音,到数字世界的样本,每一步都有对应的参数和约束。

音频信号数字化流程 物理声音 频率 / 振幅 / 相位 采样 采样率 fs 量化 位深度 数字信号 0 和 1 的序列 奈奎斯特定理约束 fs > 2 × f_max → 否则产生混叠 关键参数推荐(唤醒词场景) 采样率:16 kHz | 位深度:16 bit | 声道:单声道 抗混叠滤波器:必须加,截止频率设为 7.5 kHz 左右

你看,从物理声音到数字信号,中间经过了采样和量化两道关卡。而奈奎斯特定理,就是采样这关的「红线」。踩了这条线,后面的工作全白费。

一个小技巧: 实际工程中,采样率一般取最高频率的 2.5 到 3 倍,留点余量。比如人声最高 8 kHz,我用 22.05 kHz 采样,既保证质量,又不会太浪费资源。当然,唤醒词场景 16 kHz 完全够用。

好了,这一章的内容就这些。你只要记住:频率决定音调,振幅决定音量,相位影响叠加效果;采样和量化是把模拟信号变数字的两步;奈奎斯特定理是采样率的下限。这些概念后面会反复用到,尤其是做特征提取的时候。