基于MATLAB的多算法语音信号自动识别系统
项目简介
本项目实现了一套完整的、基于MATLAB图形用户界面(GUI)的语音信号自动识别系统。系统旨在提供一个直观的实验平台,用于语音信号的采集、分析、模型训练及识别。系统核心集成了动态时间规整(DTW)、矢量量化(VQ)以及隐马尔可夫模型(HMM)三种主流的模式匹配算法,支持端到端的语音处理流程,包括前端预处理、端点检测、特征提取(主要是MFCC)以及后续的模式识别任务。
功能特性
- 图形化交互界面:提供可视化的操作面板,包含波形显示、特征谱图显示、控制按钮及状态反馈区域。
- 多源语音采集:支持通过麦克风实时录音(采样率8kHz,16位,单声道)以及加载外部WAV语音文件(自动重采样及单声道转换)。
- 实时可视化:在录音或加载完成后,系统会自动绘制时域波形图,并标记出检测到的有效语音端点;同时绘制MFCC特征谱图。
- 端点检测(VAD):内置基于短时能量和过零率的双门限检测算法,自动剔除静音片段,截取有效语音。
- 特征提取:采用梅尔频率倒谱系数(MFCC)作为核心特征,包含预加重、分帧、加窗、FFT、梅尔滤波、DCT变换及倒谱提升等标准处理步骤。
- 动态训练库:支持用户输入标签并将当前语音特征加入内存中的训练数据库。
- 多算法识别:
*
DTW (动态时间规整):适用于匹配长度不一致的序列。
*
VQ (矢量量化):基于LBG算法生成码本,计算效率高。
*
HMM (隐马尔可夫):基于统计模型,计算对数似然概率。
- 结果反馈:实时显示识别结果(标签)以及对应的匹配得分(距离或似然度)。
系统要求
- MATLAB R2016a 或更高版本(建议)。
- MATLAB Audio Toolbox(用于录音和处理音频对象)。
- 支持音频输入的硬件设备(麦克风)。
使用方法
- 启动系统:运行主脚本,系统界面将自动弹出。
- 获取语音:
* 点击“录音”按钮开始说话,再次点击停止录音。
* 或点击“加载文件”选择本地WAV文件。
- 观察信号:界面将显示预处理后的波形及红色虚线标记的有效端点,下方显示MFCC特征热力图。
- 模型训练(注册):
* 在“标签录入”框中输入当前语音的内容(如“前进”、“One”)。
* 点击“加入训练库”,系统会自动提取特征并根据三种算法分别建立模型存入内存数据库。
- 语音识别(测试):
* 录制或加载一段新的语音。
* 在“识别算法选择”下拉菜单中选择 DTW、VQ 或 HMM。
* 点击“开始识别”,系统将显示最匹配的标签及得分。
详细实现逻辑与关键算法
1. 全局数据管理
系统使用全局结构体
sys_data 管理运行时数据,包括:
- 音频原始数据及采样率(统一为8000Hz)。
- 提取后的特征矩阵。
- 内存数据库:以Cell数组形式存储,每个单元包含标签、原始MFCC特征、训练好的VQ码本以及HMM模型参数。
2. 音频预处理与端点检测
音频数据进入系统后,依次经过以下处理:
- 预加重:通过一阶高通滤波器
H(z) = 1 - 0.97z^{-1} 提升高频分量。 - 双门限端点检测 (VAD):
* 计算每一帧的短时能量(Energy)和过零率(ZCR)。
* 设定高低两个能量门限(MH, ML)以及过零率门限。
* 采用三态机逻辑(静音、可能开始、语音段)进行搜索。首先利用高门限确定语音核心段,再向两侧利用低门限和过零率扩展边界,确保语音起止点的准确性。
* 若检测到的语音长度不足800个采样点,系统将判定为无效语音不予处理。
3. 特征提取 (MFCC)
系统核心特征提取函数
extract_mfcc 实现了以下流程:
- 分帧:帧长25ms,帧移10ms。
- 加窗:对每一帧信号乘以汉明窗(Hamming Window)以减少频谱泄露。
- 频谱计算:进行512点FFT变换并计算功率谱。
- 梅尔滤波:构建包含26个三角滤波器的梅尔滤波器组(Mel Filterbank),将线性频率映射到梅尔频标,模拟人耳听觉特性。
- 虽然域变换:对滤波器组输出取对数,再进行离散余弦变换(DCT)。
- 倒谱提升:选取DCT后的第2至13个系数(共12阶),并应用正弦窗函数进行倒谱提升(Liftering),以平滑倒谱系数。
4. 模式识别算法逻辑
在点击识别时,系统会将当前测试语音的特征与数据库中的模板逐一比较:
- DTW算法:计算测试特征序列与参考模板特征序列之间的动态时间规整距离,取距离最小者为结果。
- VQ算法:利用训练阶段生成的码本(Codebook,代码中设定为16阶),计算测试特征矢量与码本的平均量化失真/距离,取距离最小者为结果。
- HMM算法:利用训练阶段生成的隐马尔可夫模型(代码中设定的状态数为5),计算测试序列相对于该模型的对数似然概型(Log-Likelihood),取似然度最大者为结果。
5. 模型训练逻辑
当用户点击“加入训练库”时,系统会对当前提取的特征执行以下操作:
- 保存模板:直接保存特征矩阵用于DTW匹配。
- VQ训练:调用LBG算法(Linde-Buzo-Gray),将特征矢量聚类生成大小为16的码本。
- HMM训练:基于当前观测序列,训练一个简单的左-右型HMM模型(包含高斯混合参数),状态数预设为5。
代码结构说明
- 回调函数架构:主程序采用嵌套函数结构,所有的UI回调(录音、加载、训练、识别)共享父域中的数据,保证了数据流转的简便性。
- 绘图机制:通过
uipanel 和 axes 布局,使用 handle 对象实时更新波形线图和 imagesc 绘制的特征谱图。