项目文档:基于DTW算法的0-9数字语音识别仿真系统
项目简介
本项目是一个基于MATLAB开发的孤立数字语音识别系统,旨在通过计算机仿真实现对0到9这十个阿拉伯数字发音的自动识别。系统核心采用
动态时间规整(DTW)算法作为模板匹配技术,并结合
梅尔频率倒谱系数(MFCC)作为特征向量,有效解决了语音信号在时长和语速上的随机性问题。
本项目代码通过一个主流程脚本整合了数据准备、模型训练、识别测试及结果可视化分析的全过程,既适合作为算法学习的演示示例,也支持通过扩展录音文件用于实际场景测试。
主要功能特性
- 全流程自动化:单个脚本即可完成环境检查、数据生成、特征训练、识别测试及结果统计。
- 自动数据合成:内置数据生成机制。如果未检测到录音文件,系统会自动生成基于正弦波叠加噪声的模拟语音信号(0-9),确保代码下载即运行,无需预先录音。
- 鲁棒的特征提取:采用MFCC特征提取算法,包含预加重、分帧加窗、FFT、Mel滤波及DCT变换等标准处理流程。
- 端点检测(VAD):基于短时能量的端点检测算法,自动截取语音的有效片段,去除静音段干扰。
- DTW 模式匹配:实现标准DTW动态规划算法,计算测试语音与参考模板之间的最小累积距离。
- 可视化性能分析:测试结束后自动绘制混淆矩阵图和匹配距离散点图,直观展示识别效果。
系统要求
- MATLAB R2016a 及以上版本
- Signal Processing Toolbox(信号处理工具箱)
快速开始与使用方法
- 准备环境:将项目代码保存为MATLAB脚本文件。
- 运行系统:
* 直接运行主函数。
*
首次运行:如果工作目录下没有
train 和
test 文件夹,程序会自动创建,并生成模拟的
.wav 音频文件用于演示算法流程。
*
自定义数据:若需识别真实语音,请手动清空
train 和
test 文件夹,并按照命名规范存入录好的WAV文件。
- 数据命名规范:
*
训练集:
train/{数字}_{编号}.wav (例如:
train/0_1.wav)
*
测试集:
test/{数字}_{编号}.wav (例如:
test/0_1.wav)
* 默认配置为:采样率 8000Hz,每个数字训练样本5个,测试样本5个。
系统实现逻辑与算法细节
本项目的主程序严格按照以下流程串行执行,代码逻辑结构清晰:
1. 系统初始化与配置
程序首先定义了全局参数配置,包括采样率(8kHz)、帧长(30ms)、帧移(10ms)以及MFCC系数个数(12个)。随后调用数据检查函数,确保训练和测试目录存在,若确实WAV文件,则利用正弦波和谐波叠加高斯白噪声的方式合成模拟语音数据。
2. 训练阶段 (Training Stage)
在此阶段,系统构建参考模板库:
- 遍历0-9每个数字的训练样本文件。
- 预处理:读取音频文件后,首先通过VAD端点检测截取有效语音段。如果检测到的片段过短(说明检测失败),则保留原始信号回退。
- 特征提取:对有效语音段进行MFCC提取,获得特征矩阵。
- 模板存储:不同于简单的平均法,本系统保留了每个数字的所有训练样本特征作为子模板,构建了一个鲁棒的参考模板库(Reference Templates)。
3. 测试阶段 (Testing Stage)
在此阶段,系统对测试集进行逐个识别:
- 遍历测试目录下的所有语音文件,同样经过读取、VAD截取和MFCC提取步骤。
- DTW匹配策略:采用最近邻原则。系统将当前测试样本的特征矩阵与库中所有数字的所有参考模板逐一计算DTW距离。
- 判决:寻找全局最小的累积距离,该最小距离对应的参考模板所属的数字即为识别结果。
- 实时在控制台输出每个文件的识别结果、匹配距离以及是否正确。
4. 关键算法实现
#### 端点检测 (VAD)
- 实现方式:基于短时能量(Short-Time Energy)。
- 逻辑:对信号进行归一化,计算每帧的能量值。设定阈值为最大能量的10%。寻找超过该阈值的起始帧和结束帧,并向两侧预留5帧的缓冲(Padding),防止切除语音的起止辅音。
#### 特征提取 (MFCC)
1.
预加重:使用高通滤波器
[1 -0.9375] 提升高频分量。
2.
分帧加窗:应用汉明窗(Hamming Window)减少频谱泄露。
3.
频谱计算:进行FFT变换并计算功率谱。
4.
Mel滤波:构建包含24个三角滤波器的滤波器组,将频谱映射到Mel刻度。
5.
倒谱变换:取对数后进行离散余弦变换(DCT),取第2至第13个系数作为最终特征(去除了反应平均能量的直流分量)。
#### 动态时间规整 (DTW)
- 核心逻辑:计算两个不同长度序列(测试序列和参考序列)之间的相似度。
- 距离计算:首先计算两序列帧与帧之间的欧氏距离矩阵。
- 动态规划:构建累积距离矩阵
D。通过递归公式 D(n,m) = d(n,m) + min(D(n-1,m), D(n,m-1), D(n-1,m-1)) 寻找一条从起点到终点的最优路径,解决发音时长不一致的问题。
5. 结果可视化
程序执行完毕后,会弹出一个图形窗口展示统计结果:
- 混淆矩阵 (Confusion Matrix):以灰度图形式展示真实数字与预测数字的分布情况,直观反映哪些数字容易被误识别。
- 匹配距离分布图:绘制所有测试样本的最小DTW距离散点图。通过不同的标记颜色区分识别正确与错误的样本,帮助分析是否存在距离异常的离群点。