基于LPC参数与人工神经网络的语音识别系统
项目介绍
本项目展示了一套在MATLAB环境下实现的语音识别方案,核心结合了统计信号处理中的线性预测建模(LPC)技术与机器学习中的前馈人工神经网络(ANN)。系统通过模拟不同声道特性的语音信号,提取能够代表语音本质特征的线性预测系数,并利用神经网络的非线性映射能力完成对不同语音指令的分类。该系统适用于特定人小词汇量的指令识别研究、语音信号处理的教学演示以及智能硬件控制算法的预研。
功能特性
- 端到端仿真流程:涵盖了从原始信号合成、预处理、特征提取到模型训练与性能测量的完整闭环。
- 精细的信号预处理:包含消除直流偏置、高频预加重、分帧及Hamming加窗,使非平稳语音信号转化为短时平稳信号。
- 鲁棒的特征表示:采用12阶LPC系数作为特征向量,有效地压缩了语音数据量,并保留了共振峰等关键声道信息。
- 自动化分类识别:基于Levenberg-Marquardt算法优化的多层前馈网络,具备快速收敛和高精度的分类能力。
- 多维结果可视化:提供训练轨迹、频谱包络、识别散点图及三维混淆矩阵,便于直观评估算法性能。
系统流程与实现逻辑
系统的核心运行逻辑分为五个主要阶段:
1. 数据准备与信号模拟
系统通过数学建模生成三类不同的合成语音信号。每一类信号具有特定的基频激励和不同的滤波器极点(模拟不同的共振峰特性)。为增强系统的鲁棒性,在生成过程中引入了随机的音高波动和加性高斯白噪声。
2. 信号预处理
- 去直流分量:减去信号均值,消除硬件采集可能引入的偏置。
- 预加重:通过一阶高通滤波器补偿语音信号在高频段的能量损耗。
- 分帧加窗:将连续信号切分为240采样点的帧,帧移为80点,并施加汉明窗以减少频谱泄露。
3. LPC特征提取
程序对每一帧信号进行自相关分析,并调用内置的递归函数求解正规方程。提取出的12阶线性预测系数(去掉起始的常数1)构成了该帧的特征。最终,程序将一个练习样本中所有帧的特征取平均,形成一个12维的特征向量作为神经网络的输入。
4. 神经网络构建与训练
系统初始化一个包含20个隐藏层神经元的双层前馈网络。采用有监督学习方式,将提取的LPC特征矩阵输入网络,目标输出为One-hot编码的类别标签。训练过程通过设置误差阈值和迭代次数来控制,直至网络权值收敛。
5. 性能评估与测试
利用未参与训练的测试样本(加入了更强的背景噪声)检验系统的泛化能力。系统自动计算总识别准确率,并为每一类指令生成详细的识别报告。
关键算法说明
线性预测分析 (LPC)
系统实现了经典的Levinson-Durbin递归算法。该算法的核心思想是:语音信号的当前采样值可以通过过去采样值的线性组合来预测。通过最小化预测误差,求解出的系数向量 $a=[1, a_1, a_2, ..., a_p]$ 能够直接体现声道的传递函数特性。在本项目中,这些系数作为语音纹理的“指纹”。
人工神经网络 (ANN)
采用了基于 trainlm(Levenberg-Marquardt)训练算法的神经网络,由于其结合了梯度下降法和牛顿法的优点,非常适合小规模的特征分类任务。网络通过不断的迭代优化,在12维LPC空间中划定分类决策边界。
结果可视化
系统运行结束后会弹出综合分析图表,包含以下内容:
- 训练误差曲线:展示均方误差(MSE)随训练代数下降的过程。
- LPC包络谱:展示由预测系数重构出的信号频率响应,直观反映共振峰。
- 识别分类散点图:对比预测类别与真实标签的偏差。
- 3D混淆矩阵:以三维柱状图形式展示各类别之间是否存在误判,分析系统的分类偏见。
系统要求
- MATLAB R2016b 或更高版本
- Deep Learning Toolbox (原 Neural Network Toolbox)
- Signal Processing Toolbox
使用方法
- 确保已安装上述必要的工具箱。
- 将系统脚本文件置于当前工作路径。
- 直接在命令行窗口运行入口脚本,系统将自动开始数据生成、模型训练及识别评估。
- 运行过程中,命令行会实时输出训练状态和最终识别率。
- 如需识别真实语音,可修改脚本中的数据准备部分,使用 audioread 函数替换合成代码。