基于DTW算法的孤立词语音识别系统
项目介绍
本项目实现了一个基于动态时间规整(Dynamic Time Warping, DTW)算法的孤立词语音识别系统。该系统专门针对特定人、小词汇量的指令识别场景设计,能够有效处理由于发音语速快慢不一导致的语音序列长度差异问题。系统通过提取语音信号的梅尔频率倒谱系数(MFCC)作为核心特征,并利用动态规划算法计算待识别样本与参考模板之间的最小累计距离,从而实现精准的单词分类。
功能特性
- 鲁棒的特征提取:采用符合人体听觉特性的MFCC算法映射语音信号,增强了系统对语音语义信息的提取能力。
- 动态时间对齐:核心识别算法采用DTW逻辑,允许输入序列在时间轴上进行非线性伸缩,解决了发音速率不同导致的匹配难题。
- 自动化预处理:集成预加重、分帧、汉明窗加窗以及能量门限端点检测(VAD),有效剔除静默段干扰并提升高频增益。
- 全流程可视化:识别过程附带详尽的数据可视化,包括原始波形、MFCC热力图、模板距离对比柱状图及最佳匹配路径曲线。
- 独立性与兼容性:系统内置了滤波器组计算、离散余弦变换(DCT)及窗函数实现,不完全依赖外部信号处理工具箱。
系统要求
- 运行环境:MATLAB R2016b 或更高版本。
- 基础配置:具备基础的计算能力即可,无需高性能显卡。
- 辅助说明:本系统代码内置了模拟语音生成逻辑,可直接运行演示。
逻辑流程与功能实现
1. 信号预处理
系统对原始信号进行数字化处理,首先通过预加重滤波器(系数0.97)提升高频分量,使其频谱变得平滑,便于后续频谱分析。随后将连续语音进行分帧处理(帧长25ms,帧移10ms),并对每一帧施加汉明窗,以减少频谱分析时的能量泄露。
2. 端点检测 (VAD)
系统利用简单的短时能量检测机制进行语音端点定位。通过计算每一帧的能量值,自动筛选出能量高于平均能量20%的帧作为有效语音段,自动剔除背景噪声、呼吸声或前后的静默段,从而降低计算量并提高准确度。
3. 特征提取 (MFCC)
这是系统的核心模块,其实现逻辑如下:
- 频谱计算:对有效语音帧进行快速傅里叶变换(FFT)并计算功率谱。
- 梅尔滤波:设计了一组位于梅尔尺度上的三角形滤波器组,将线性频率映射到感知频率空间。
- 对数能量:对每个滤波器输出取对数以模拟人体对声强的非线性感知。
- DCT变换:通过自定义离散余弦变换将对数能量值转换为倒谱系数。
- 降维与归一化:选取第2至第13维系数作为最终特征(排除第1维能量系数),并对特征矩阵进行均值方差归一化。
4. DTW 匹配决策
系统采用动态规划算法对比预测特征序列与模板库中的参考序列:
- 距离矩阵:计算两个特征序列点对点之间的欧氏距离,形成成本矩阵。
- 路径搜索:利用递归逻辑计算累积距离矩阵,规则允许从(i-1, j), (i, j-1)或(i-1, j-1)转移到当前点(i, j)。
- 距离归一化:将最终的累积总距离除以两条序列长度之和,作为最终的匹配分数。
- 判别:系统遍历模板库,选取距离分数最低的候选词条作为识别结果。
关键算法及细节说明
DTW (动态时间规整)
该算法的优势在于能够寻找一条最优的卷绕路径。代码中实现了完整的回溯逻辑,通过在累积距离矩阵中寻找最小值路径,能够直观地展示待识别语音与参考模板在时间帧上的对应关系。
梅尔滤波器组设计
算法通过 linspace 函数在梅尔频率空间内等间距取点,再通过反射公式还原回线性频率索引,手动构造三角形权重矩阵。这种方式确保了较低频率区域具有更高的分辨率,捕捉更多音色细节。
自定义 DCT 变换
考虑到环境兼容性,代码中使用了手动实现的 DCT 变换公式,通过对对数梅尔能量序列进行余弦基函数投影,实现了特征解耦,确保了特征向量的紧凑性。
识别模型演示
代码目前设定了三个模拟词条:『打开』、『关闭』、『停止』。系统通过模拟不同频率分布的扫描信号来替代真实录音数据,演示了如何通过计算最小路径距离将一个语速较慢的『关闭』指令精准匹配到对应的词条模板上。