2、基础知识:语音信号处理基础、MFCC特征提取、关键词识别任务定义与常见数据集
在进入Edge AI语音模型压缩之前,必须先建立对语音信号处理链路的基本认知。关键词识别(Keyword Spotting, KWS)是典型的资源受限场景下的语音任务,其输入并非原始波形,而是经过一系列信号处理与特征提取后得到的低维表示。本章将围绕“语音信号如何变成模型输入”这一主线,依次讲解语音信号数字化基础、MFCC特征提取的完整流程、KWS任务的形式化定义,以及最常用的Speech Commands数据集。理解这些内容,是后续进行模型剪枝、量化和知识蒸馏的前提——因为特征维度和分布直接决定了模型压缩策略的选择空间。
2.1 语音信号数字化与预处理
语音信号本质上是模拟信号,必须经过采样、量化和编码才能被计算机处理。在Edge AI场景中,最常见的配置是16kHz采样率、16bit量化、单声道PCM格式。16kHz采样率意味着奈奎斯特频率为8kHz,覆盖了语音信号绝大部分能量所在的频段(300Hz-3.4kHz为电话语音主要频带,而宽带语音扩展到7kHz)。选择16kHz而非44.1kHz,是因为人耳对语音的感知上限约为8kHz,更高的采样率只会增加数据量而对识别准确率几乎没有贡献。
预处理阶段包含三个关键步骤:预加重、分帧和加窗。预加重使用一阶高通滤波器(系数通常为0.97),目的是提升高频分量——因为语音信号的高频段能量衰减较快,预加重可以平衡频谱,使后续的频谱分析更加稳定。分帧是将连续语音切分为短时片段,通常帧长为25-30ms,帧移为10-20ms。帧移小于帧长意味着相邻帧有重叠,这可以避免帧边界处的信息丢失。加窗则使用Hamming窗或Hann窗,目的是减少帧边缘的频谱泄漏。
2.2 MFCC特征提取完整流程
梅尔频率倒谱系数(Mel-Frequency Cepstral Coefficients, MFCC)是语音识别领域最经典的特征表示。其核心思想是模拟人耳对频率的非线性感知——人耳对低频信号的分辨能力远高于高频,因此使用Mel刻度对频率进行非线性映射。Mel频率与线性频率的转换公式为:
Mel(f) = 2595 * log10(1 + f / 700)
MFCC提取的完整流程如下:
- 预加重与分帧加窗:如前所述,得到每帧约480个采样点(30ms × 16kHz)。
- FFT变换:对每帧信号做512点FFT,得到频谱幅度。512点FFT的频率分辨率为16000/512 = 31.25Hz。
- 功率谱计算:取频谱幅度的平方,得到功率谱。
- Mel滤波器组:设计一组三角滤波器(通常40个),在Mel刻度上等间距排列,将功率谱映射到Mel域。每个滤波器的输出是该频带内能量的加权和。
- 对数压缩:对每个滤波器输出取自然对数,模拟人耳对声音强度的对数感知。
- DCT变换:对对数能量向量做离散余弦变换(DCT-II),取前13个系数作为静态MFCC特征。DCT的作用是去相关,使各维特征之间尽可能独立。
- 差分特征:计算一阶差分(Δ)和二阶差分(ΔΔ),分别捕捉特征的动态变化和加速度信息。最终每帧特征维度为13×3=39维。
| 步骤 | 输入 | 输出 | 关键参数 | 对压缩的影响 |
|---|---|---|---|---|
| 预加重 | 原始波形 | 高频增强波形 | 系数α=0.97 | 无直接影响 |
| 分帧 | 连续波形 | 帧序列 | 帧长30ms,帧移20ms | 帧移增大→帧数减少→计算量降低 |
| FFT | 每帧480点 | 256点频谱 | 512点FFT | FFT点数减少→频率分辨率降低 |
| Mel滤波 | 256点功率谱 | 40维Mel能量 | 滤波器组数量40 | 滤波器减少→特征维度降低 |
| DCT | 40维对数能量 | 13维静态特征 | 保留系数13 | 保留系数减少→输入维度降低 |
| 差分 | 13维静态特征 | 39维完整特征 | 一阶+二阶差分 | 省略差分→维度降至13维 |
2.3 关键词识别任务定义
关键词识别(KWS)的任务定义可以形式化为:给定一段连续的音频流,系统需要检测其中是否包含预设的关键词(如“Hey Siri”、“OK Google”、“小爱同学”),并在检测到关键词时触发后续操作。与大规模语音识别(ASR)不同,KWS通常只识别少量固定词汇(10-30个),且运行在低功耗设备上,需要满足实时性和低延迟要求。
KWS的典型任务模式有两种:分类模式和检测模式。分类模式将音频切分为固定长度的片段(如1秒),判断该片段属于哪个关键词类别或背景噪声类别。检测模式则处理连续音频流,需要在时间轴上定位关键词的起止位置。在模型压缩场景中,分类模式更为常见,因为其输入输出结构固定,便于优化。
KWS模型的输入通常是MFCC特征矩阵,形状为[T, F],其中T为时间帧数,F为特征维度。以1秒音频为例,帧移20ms会产生约49帧,加上上下文扩展后通常取64帧。特征维度为39维(含差分)或13维(仅静态)。因此,模型输入张量形状为[1, 64, 39]或[1, 64, 13],这直接决定了模型第一层的参数量。
2.4 Speech Commands数据集详解
Speech Commands数据集是Google于2018年发布的开源关键词识别数据集,目前已成为KWS领域的事实标准。该数据集包含超过10万条音频,每条时长约1秒,采样率为16kHz,格式为WAV。数据集中包含30个类别,其中20个核心词汇(如“yes”、“no”、“up”、“down”、“left”、“right”等),加上“silence”(静音)和“unknown”(未知词)两个特殊类别,以及若干背景噪声样本。
数据集的官方划分方式为:训练集约80%、验证集约10%、测试集约10%。划分时确保同一说话人的音频不会同时出现在训练集和测试集中,以评估模型的泛化能力。在模型压缩实验中,通常使用Speech Commands的v2版本,其类别数为35(包含更多词汇和噪声类型)。
使用Speech Commands数据集时,需要注意以下几点:
- 类别不平衡:不同词汇的样本数量略有差异,但整体分布较为均匀。在压缩模型中,类别不平衡可能导致量化误差对少数类影响更大。
- 背景噪声:数据集中包含“silence”类别,通常通过从背景噪声样本中随机截取1秒音频生成。在压缩场景中,噪声鲁棒性是一个重要考量。
- 数据增强:常见增强方式包括时间偏移、速度扰动、添加背景噪声等。增强后的数据分布变化会影响模型压缩后的表现,因此压缩前后应使用相同的增强策略。
| 数据集版本 | 类别数 | 总样本数 | 采样率 | 音频时长 | 适用场景 |
|---|---|---|---|---|---|
| Speech Commands v1 | 30 | ~65,000 | 16kHz | 1秒 | 基础KWS实验 |
| Speech Commands v2 | 35 | ~105,000 | 16kHz | 1秒 | 标准KWS基准测试 |
| Google Speech Commands | 35 | ~105,000 | 16kHz | 1秒 | 模型压缩与量化实验 |
2.5 特征提取对模型压缩的影响分析
特征提取环节的选择直接决定了模型压缩的可行性和效果。从模型压缩的角度,特征维度、特征分布和特征计算复杂度是三个关键考量因素。
特征维度影响模型输入层的大小。以典型的KWS模型(如DS-CNN)为例,第一层卷积的输入通道数等于特征维度。当特征维度从39降至13时,第一层参数量减少约67%,整体模型参数量减少约20-30%。但需要注意的是,特征维度降低会损失信息,可能导致准确率下降。实验表明,在Speech Commands数据集上,使用13维静态特征相比39维完整特征,准确率下降约1-2个百分点。
特征分布影响量化压缩的效果。MFCC特征经过对数压缩和DCT后,各维度的数值范围差异较大——低维系数(如第0维)通常能量较大,而高维系数能量较小。在INT8量化时,这种分布不均匀会导致量化误差增大。解决方案包括:对特征进行逐维归一化、使用per-channel量化、或在量化前对特征做额外的缩放。
特征计算复杂度影响端到端的延迟。MFCC提取本身需要FFT、滤波、DCT等操作,在低功耗MCU上可能消耗数毫秒时间。对于实时KWS系统,特征提取的延迟与模型推理的延迟同等重要。在模型压缩项目中,应同时优化特征提取代码(如使用定点FFT、查表法计算Mel滤波器)和模型推理代码。
2.6 案例拆解:从39维到13维的压缩实验
假设我们有一个基于DS-CNN的KWS模型,输入为1秒音频的39维MFCC特征(64帧×39维),模型参数量约为80K,在Cortex-M4上推理延迟为45ms。现在需要将模型部署到资源更紧张的Cortex-M0+平台上,目标延迟为30ms以内。
初始分析:模型参数量80K中,第一层卷积(输入39通道,输出48通道,3×3卷积核)的参数量为39×48×3×3=16,848,占总参数量的21%。如果将输入特征从39维降至13维,第一层参数量降至13×48×3×3=5,616,减少约67%。整体参数量降至约68K,减少15%。
实施步骤:
- 修改特征提取代码,仅输出13维静态MFCC特征,省略差分计算。
- 调整模型输入层,将输入通道数从39改为13。
- 使用Speech Commands v2数据集重新训练模型,保持其他超参数不变。
- 在验证集上评估准确率,记录与39维基线模型的差异。
实验结果:39维基线模型准确率为94.2%,13维模型准确率为92.8%,下降1.4个百分点。模型参数量从80K降至68K,推理延迟从45ms降至32ms(其中特征提取节省约8ms,模型推理节省约5ms)。虽然延迟仍未达到30ms目标,但结合后续的INT8量化(预计再节省30%推理时间),可以满足要求。
复盘经验:特征维度压缩带来的准确率损失在可接受范围内,但需要配合其他压缩手段才能达到目标。此外,13维特征对噪声的鲁棒性略差,在信噪比较低的场景下准确率下降更明显。因此,在实际部署中需要根据目标场景的噪声水平权衡特征维度的选择。