2、唤醒词声学基础:语音信号的基本特征
各位同学好,我是老张。今天咱们聊聊唤醒词背后的声学基础。说实话,很多做唤醒词的朋友,一上来就调模型、跑数据,结果效果不好,回头才发现是声学预处理没搞明白。嗯,这章咱们就把地基打牢。
2.1 语音信号的基本特征
语音信号是什么?说白了,就是空气振动产生的压力波,被麦克风捕捉后变成的电信号。我习惯把它看作一个随时间变化的波形——这就是时域。
时域特征
时域里我们能看什么?三个东西最重要:
- 幅度:声音的大小,也就是音量。唤醒词检测里,幅度太低可能漏检,太高又容易误触发。
- 周期:浊音(比如元音)有明显的周期性,清音(比如/s/、/sh/)则像噪声一样随机。这个区别在端点检测里很有用。
- 过零率:信号穿过零轴的次数。清音的过零率高,浊音低。我在做低功耗唤醒时,经常用这个特征快速区分语音段和静音段。
重要提醒:时域波形直观,但信息量有限。真正做唤醒词识别,我们更依赖频域特征。
频域特征
为什么要看频域?你想想看,两个不同的人说同一个“你好”,时域波形可能差很多,但频域的能量分布却相对稳定。这就是频域分析的价值。
从时域到频域,靠的是傅里叶变换。具体来说:
- 低频部分(0-1kHz):包含基频和第一共振峰,元音的主要能量在这里
- 中频部分(1-4kHz):第二、第三共振峰,辅音的关键信息
- 高频部分(4kHz以上):摩擦音、爆破音的能量区
我记得有个项目,客户抱怨唤醒词“小爱同学”在嘈杂环境下老是误唤醒。后来一分析,原来是环境噪声集中在低频段,和唤醒词的低频能量重叠了。我们做了个简单的带通滤波器,把300Hz以下切掉,误唤醒率直接降了一半。
2.2 人耳听觉特性与Mel刻度
为什么要提人耳?因为唤醒词最终是给人听的,对吧?人耳不是个线性系统——它对低频敏感,对高频迟钝。具体来说:
- 1000Hz以下:人耳能分辨很小的频率变化(约3-5Hz)
- 1000Hz以上:分辨能力越来越差,到8000Hz时,需要变化几百赫兹才能察觉
Mel刻度就是模拟这个特性的。公式很简单:
Mel(f) = 2595 * log10(1 + f/700)
这个公式把线性频率映射到Mel频率上。1000Hz对应1000Mel,但4000Hz只对应约2000Mel。说白了,高频被“压缩”了。
我的经验:做唤醒词时,Mel滤波器组一般用40个通道就够了。太多反而容易过拟合,太少又丢失细节。我踩过这个坑——一开始用了80个通道,模型大了两倍,效果没提升多少。
2.3 语音信号预处理
预处理是唤醒词系统的第一道关卡。做不好,后面全是白费。我把它拆成三步:预加重、分帧、加窗。
预加重
语音信号有个特点:高频能量天然比低频低。你看频谱图,通常是低频高、高频低,像下坡一样。预加重就是把这个坡“拉平”。
公式很简单:
y[n] = x[n] - α * x[n-1]
α一般取0.95到0.98之间。我习惯用0.97,效果比较均衡。
为什么要做预加重?两个原因:
- 补偿高频损失,让频谱更平坦
- 提高信噪比,尤其是高频段的辅音
注意:预加重系数α不能太大。我曾经试过0.99,结果高频噪声被放大了,唤醒率反而下降。嗯,这个坑我替你们踩过了。
分帧
语音信号是非平稳的,但短时间(10-30ms)内可以认为是平稳的。所以我们把它切成一段段的小帧。
参数怎么选?
| 参数 | 典型值 | 我的建议 |
|---|---|---|
| 帧长 | 20-30ms | 25ms,兼顾时域和频域分辨率 |
| 帧移 | 10-15ms | 10ms,帧与帧之间重叠50%以上 |
| 采样率 | 8kHz/16kHz | 16kHz,唤醒词需要保留高频信息 |
举个例子:16kHz采样率,25ms帧长就是400个采样点,10ms帧移就是160个采样点。每帧和前一帧有240个采样点重叠。
加窗
分帧后直接做FFT会出问题——帧的边缘不连续,导致频谱泄露。加窗就是为了解决这个。
常用的窗函数:
- 汉明窗:最常用,旁瓣衰减适中,主瓣宽度合理
- 汉宁窗:旁瓣衰减更快,但主瓣稍宽
- 矩形窗:别用,频谱泄露严重
汉明窗的公式:
w[n] = 0.54 - 0.46 * cos(2πn/(N-1)), 0 ≤ n ≤ N-1
我个人习惯用汉明窗,没什么特别的原因,就是项目里一直这么用,效果稳定。你如果做实验,可以试试汉宁窗,在某些场景下表现更好。
核心要点:预处理三步走——预加重补偿高频、分帧保证平稳性、加窗消除频谱泄露。这三步做完,才能得到干净的语音帧,后续提取MFCC或FilterBank特征才有意义。
2.4 小结
这一章我们聊了语音信号的时域和频域特征,人耳的Mel刻度,以及预处理的三个关键步骤。这些东西看着基础,但我在实际项目中见过太多人栽跟头——要么帧长选错了导致特征不稳定,要么忘了预加重导致高频信息丢失。
下一章,我们会把这些预处理后的信号,进一步提取成MFCC特征。那是唤醒词系统的“标准输入”。到时候我会分享一些特征提取的实战技巧,包括怎么调参数、怎么加速计算。
好,今天就到这里。有问题随时交流。
公众号:蓝海资料掘金营,微信deep3321