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