基于DTW算法的孤立词语音识别系统
项目介绍
本项目是一款在MATLAB环境下开发的孤立词语音识别系统。其核心逻辑聚焦于解决语音信号识别中的时间不一致性问题,即不同说话人或同一说话人在不同语速下发音长度不一的情况。系统采用经典的动态时间规整(Dynamic Time Warping, DTW)算法,通过非线性映射寻找测试语音与参考模板之间的最短距离,从而完成特定词汇(如“打开”、“关闭”、“停止”)的自动分类与识别。
功能特性
- 信号预处理:包含高通预加重滤波,用于提升高频共振峰信息。
- 端点检测(VAD):基于短时能量法的自动化逻辑,能够有效剔除信号前后的静音段,仅保留有效语音区间。
- 特征提取模块:系统实现了完整的梅尔频率倒谱系数(MFCC)提取流程,将时域波形转化为能够反映人类听觉特性的倒谱特征矩阵。
- 弹性匹配:利用DTW算法处理语速差异,支持非等长序列的相似度比对。
- 结果可视化:提供原始波形、MFCC特征图谱、匹配距离柱状图以及直观的识别结论展示台。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 基础工具箱:需安装Signal Processing Toolbox(信号处理工具箱)。
- 硬件要求:标准计算机内存,支持图形化窗口输出。
系统实现流程与逻辑
系统代码严格遵循语音识别的标准处理流水线,具体步骤如下:
- 参数初始化:
设置采样率为8000Hz,帧长为256点,帧移为128点,预加重系数为0.97,配置24个Mel滤波器组并提取前12阶MFCC系数。
- 模拟音频环境构建:
通过数学函数合成三类不同特征的波形作为参考模板(代表“打开”、“关闭”、“停止”)。同时生成一段带有随机噪声和时间拉伸变形的测试信号,模拟真实的待识别场景。
- 特征提取子系统:
对所有语音序列进行加窗分帧处理(采用汉明窗),执行FFT变换通过梅尔滤波器组获取能量分布,最后经过对数运算和离散余弦变换(DCT)生成特征矩阵。在该过程中,系统利用短时能量阈值(最大能量的10%)自动截取活动帧。
- 核心比对计算:
计算测试特征与各个模板特征之间的欧氏距离,构建局部代价矩阵。随后应用动态规划(DP)递推公式计算累积距离,允许路径在网格中沿垂直、水平或对角线方向延伸,以实现时间对齐。
- 判决模块:
对比所有模板产生的累积距离,取归一化距离(总距离除以路径长度)最小的词汇作为最终识别结果。
关键算法分析
梅尔频率倒谱系数 (MFCC)
系统利用梅尔刻度将线性频率转换为更符合人耳感知的非线性频率。通过三角滤波器组对频谱进行平滑,提取出的倒谱信息能够有效表征语音的共振峰特性,具有较强的表征能力。
动态时间规整 (DTW)
这是本系统的核心匹配逻辑。对于两个长度分别为N和M的特征序列,算法通过构建一个N×M的代价矩阵,寻找一条从(1,1)到(N,M)的总代价最小的路径。其优势在于能够较好地处理“语速不均”的问题。
鲁棒性与局限性
代码中实现的DTW算法在信噪比较高、词汇量较小的孤立词场景下表现优异。但由于其基于纯距离度量且计算复杂度随词库线性增长,系统在面对强环境噪声或连续语音流识别时存在一定局限性。
使用方法
- 运行环境准备:确保MATLAB路径已正确指向包含脚本的文件夹。
- 执行脚本:在命令行窗口输入主函数名称并回车。
- 交互观察:系统会自动开启一个名为“孤立词语音识别系统演示”的窗口。
- 结果查看:
- 左上角:查看待识别信号的时域波形。
- 右上角:观察提取出的MFCC热力图。
- 左下角:分析各词汇匹配距离的差异(柱状图)。
- 右下角:直接读取红色文字显示的识别结论。
- 控制台输出:详细的匹配距离数值和算法性能总结将同步显示在MATLAB控制台中。