基于高斯混合模型(GMM)的说话人识别系统
项目介绍
本项目是一个在MATLAB环境下实现的文本无关说话人识别演示系统。系统通过模拟具有不同物理特性的语音信号,提取能够代表声道特征的梅尔频率倒谱系数(MFCC),并利用期望最大化(EM)算法构建高斯混合模型(GMM)。最终,系统采用最大似然准则(ML)在多个目标说话人模型中进行匹配,实现身份辨识。该系统完整展示了从信号合成、预处理、特征建模到分类决策的全过程。
功能特性
- 语音信号模拟:通过基频合成、谐波构造及声道共振峰滤波,模拟不同身份的说话人语音。
- 高级特征提取:包含预加重、分帧加窗、梅尔滤波器组映射及倒谱分析,支持13位MFCC及其一阶差分特征。
- 特征增强技术:内置倒谱均值归一化(CMN)处理,提升特征的鲁棒性。
- 统计建模:实现基于EM算法的GMM参数训练,支持多维度高斯分量和对角协方差矩阵优化。
- 自动识别决策:基于帧平均对数似然概率的最大化准则进行身份判定。
- 多维可视化:自动生成对数似然评分矩阵热图及说话人特征空间分布聚类图。
系统逻辑流程
- 参数初始化:配置采样率为16000Hz,定义5名说话人,设定训练与测试样本比例,确定13维MFCC和8个高斯分量。
- 数据准备:
- 训练阶段:为每位说话人模拟生成2秒的语音信号,提取MFCC及差分特征。
- 测试阶段:为每位说话人模拟生成1.5秒的随机语音,作为待识别样本。
- 模型构建:对每位说话人的训练特征进行转置处理,应用EM算法迭代更新均值、协方差和权重分配,直至模型收敛。
- 识别匹配:计算测试样本特征序列在每个已训练GMM模型下的对数似然得分,取最大得分对应的模型ID为识别结果。
- 结果评估:对比预测标签与真实标签,计算系统识别准确率,并绘制可视化图表。
关键部分细节分析
#### 语音信号模拟算法
系统通过设定不同的基频(f0)来区分说话人个体,利用5次谐波合成基础声源。通过二阶巴特沃斯带通滤波器模拟人体声道的共振峰特性(频率范围300Hz-3000Hz),并在信号中加入特定比例的高斯白噪声以模拟真实环境。
#### MFCC特征提取逻辑
- 预处理:采用 [1, -0.97] 的高通滤波器滤除低频干扰。
- 频域转换:使用25ms窗口和10ms步进进行短时傅里叶变换,利用26个梅尔滤波器组进行非线性频率压缩。
- 动态特征:在13维静态倒谱系数基础上,计算一阶差分(Delta)特征,构成26维复合特征向量,有效捕捉语音的动态演变。
- 归一化:通过减去维度均值,消除系统偏差或由于模拟环境带来的静态特征偏移。
#### EM算法训练机制
- 初始化:采用随机样本选点初始化高斯均值,利用全局方差初始化协方差。
- E步(Expectation):根据当前模型参数计算每个观测样本属于各个高斯分量的响应度(Responsibility)。
- M步(Maximization):利用响应度加权更新每个分量的均值向量、对角协方差矩阵和混合权重。
- 鲁棒性处理:在协方差更新中加入微小的正则化项(1e-4),防止因数据点过少导致的奇异矩阵问题。
#### 识别判据
系统采用对数似然准则。由于一段语音包含多帧特征,系统计算了整段语音所有帧在模型下的对数似然值的统计平均。这种帧平均对数似然得分能更准确地反映测试序列与统计模型之间的匹配程度。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必备工具箱:信号处理工具箱(用于执行DCT变换及滤波器设置)。
- 硬件要求:标准CPU即可,系统运行内存建议4GB以上。
使用方法
- 打开MATLAB软件,将工作路径切换至代码所在目录。
- 在命令行窗口直接输入 main 并回车。
- 系统将自动执行模拟数据生成、模型训练及识别测试逻辑。
- 运行结束后,控制台将显示识别准确率报告,并自动弹出对数似然评分矩阵和特征空间分布两张可视化图表。
- 如需测试实际录音文件,可修改代码中语音生成部分,使用 audioread 函数加载本地WAV文件。