基于MATLAB的0-9语音识别系统
项目介绍
本项目是一个基于 MATLAB 开发的孤立词语音识别系统,专门用于识别阿拉伯数字 0 到 9。系统采用梅尔频率倒谱系数(MFCC)作为语音特征,并结合动态时间规整(DTW)算法解决了语音信号在时间长度不一致时的匹配问题。该系统完整演示了从语音预处理、端点检测、特征提取到模式匹配和结果可视化的全过程。
功能特性
- 完整的数字识别流程:涵盖了从原始音频到最终数字分类的全部核心步骤。
- 稳健的特征提取:采用 MFCC 及其一阶差分特征,能够捕获语音的静态和动态声学特性。
- 动态时间对齐:利用 DTW 算法克服说话速度和发音时长不同带来的识别障碍。
- 自动化端点检测:通过双门限法自动定位有效语音段,排除环境噪声和静音干扰。
- 直观的可视化界面:提供波形图、特征谱图、置信度统计及识别报告。
系统要求
- MATLAB R2016b 或更高版本。
- MATLAB 信号处理工具箱(用于执行 DCT 变换及数字滤波)。
使用方法
- 在 MATLAB 环境中打开主程序脚本。
- 直接运行主函数。系统将首先自动生成 0-9 数字的模拟训练特征模板(实际应用中可将其替换为 WAV 文件加载)。
- 程序将模拟输入一个特定数字的语音信号进行识别测试。
- 运行结束后,系统会自动弹出可视化窗口,展示原始波形、MFCC 特征、各数字的匹配概率以及最终识别结论。
- 若需测试不同数字,可修改代码中指定的测试变量数值。
实现逻辑与功能说明
系统运行逻辑遵循经典的模式识别框架:
- 系统初始化:设置采样率(8000Hz)、MFCC 阶数(12阶)、帧长与帧移等核心声学参数。
- 训练模板构建:通过循环生成 10 类数字的基准信号。对每一类信号执行特征提取,并将生成的 MFCC 特征矩阵存储在元胞数组中作为标准模板库。
- 待测信号输入:模拟生成一段包含噪声和特定频率特征的测试语音。
- 预处理与端点检测(VAD):
- 首先计算每一帧的短时能量和短时过零率。
- 设定能量和过零率的双重门限,自动识别语音的起始点和结束点。
- 剔除无效的静音段,仅保留有效语音部分以提高匹配精度。
- 特征提取模块:
- 预加重:通过高通滤波器补偿高频分量的损耗。
- 分帧加窗:将信号切分为重叠的帧,并施加 Hamming 窗以减少频谱泄露。
- 频域转换:执行 FFT 获取功率谱。
- 梅尔滤波:通过一组三角形滤波器组获取梅尔刻度下的能量。
- 倒谱分析:执行对数运算和离散余弦变换(DCT),提取前 12 阶 MFCC。
- 动态特征:计算 MFCC 的一阶偏导(差分特征)并与静态特征合并,形成 24 维复合特征向量。
- 模式匹配(DTW):
- 将测试信号的特征矩阵与模板库中 10 个数字的模板逐一对比。
- 构建累积距离矩阵,寻找两条时间序列之间的最短路径。
- 输出代表差异程度的 DTW 距离。
- 分类决策:
- 寻找 DTW 距离最小的模板索引,判定为对应的识别数字。
- 利用距离倒数归一化算法计算每个数字的后验概率(置信度)。
- 结果展现:绘制多维度的图形报告,实时反馈识别准确性。
关键函数与算法分析
- 语音提取函数:实现了信号的数字化切片(Enframe),支持自定义帧长和重叠度,是后续处理的基础。
- 梅尔滤波器组构建:根据采样率计算梅尔频率刻度,并在频域内线性插值生成三角形滤波窗口,模拟人类听觉感官。
- 动态时间规整(DTW)算法:核心匹配算法。它允许时间序列进行非线性缩放,即使同一数字的发音快慢不一,也能准确计算其相似度,解决了语音信号时间尺度不规整的问题。
- 后验概率计算模型:将抽象的欧氏距离距离转化为直观的百分比概率,为评估识别结果的可信度提供了量化指标。
- 综合分析界面:通过 subplot 布局,在同一画布上集成展示时域波形、时频特征信息、概率分布柱状图及文本结论,增强了人机交互体验。