基于矢量量化(VQ)的说话人识别系统
项目介绍
本项目是一个在MATLAB环境下开发的完整说话人识别演示系统。其核心原理是利用音频信号的声学特征,通过矢量量化(Vector Quantization, VQ)技术为每个说话人构建特征码本。在识别阶段,系统通过对比待测语音与已知码本之间的量化失真程度,实现对说话人身份的自动判别。
功能特性
- 具备完整的信号处理全流程,包含预处理、特征提取、模型训练、匹配识别及结果可视化。
- 采用梅尔频率倒谱系数(MFCC)作为声学特征,能够有效捕捉说话人的声道结构差异。
- 实现经典的LBG聚类算法,将高维特征空间压缩为代表性的码本中心。
- 包含内置的模拟语音生成功能,无需依赖外部录音库即可演示系统闭环。
- 自动化输出统计报告,并通过图形化界面直观展示特征分布与识别结果。
系统要求
- 运行环境:MATLAB R2016a 或更高版本。
- 硬件要求:标准处理器,内存建议 4GB 以上。
- 软件工具箱:建议安装信号处理工具箱(Signal Processing Toolbox),以便支持dct、hamming等基础函数。
使用方法
- 启动MATLAB并进入项目所在文件夹。
- 在命令行窗口直接输入系统主入口命令:main
- 系统将自动执行以下操作:
- 生成模拟的三位说话人语音数据。
- 提取各说话人的MFCC特征并训练VQ码本。
- 对预设的测试样本进行身份检索。
- 弹出可视化分析图表并输出识别准确率。
详细实现逻辑
系统主函数严格遵循以下四个逻辑阶段:
- 数据准备阶段
系统配置采样率为 8000Hz。考虑到教学与演示需求,系统内部实现了一个模拟数据生成器。该功能基于不同的基频(100Hz, 150Hz, 210Hz)和谐波加噪,为 3 位虚拟说话人分别生成 3 组训练样本和 1 组测试样本。每个样本时长为 2 秒,并加入了指数衰减包络以模拟真实的语音起伏。
- 特征提取与模型训练阶段
系统对每一段训练语音进行逐帧处理:
-
预处理:应用 [1, -0.97] 的一阶高通滤波器进行预加重,通过分帧(帧长 256 点,帧移 128 点)和汉明窗(Hamming Window)处理以保证信号的短时平稳。
-
MFCC提取:计算每帧的功率谱,通过 20 个梅尔滤波器组获取梅尔能谱,取对数后进行离散余弦变换(DCT)。最终提取 2 至 13 阶(共 12 阶)系数作为核心特征矢量。
-
VQ码本训练:核心采用了 LBG 算法。该算法从所有特征矢量的全局均值质心开始,通过 0.01 的偏移量 epsilon 进行迭代分裂(1->2->4->8->16),并在每次分裂后运行 K-means 优化算法,直到为每位说话人生成一个包含 16 个聚类中心的码本。
- 识别与测试阶段
系统提取待测样本的 MFCC 特征序列,并将其与所有已知说话人的码本进行比对:
-
距离度量:利用欧氏距离计算待测特征矢量与各码本中心之间的最小距离。
-
决策准则:计算整段语音特征到特定码本的平均量化失真(Distortion)。根据最小失真准则,将待测语音判定为与之具有最小平均距离的码本所属说话人。
- 结果统计与可视化阶段
系统计算并输出识别准确率。同时通过图形化窗口展示以下内容:
- 待测语音的 MFCC 特征倒谱图。
- 不同说话人码本中心在特征空间(前两维)的分布散点图。
- 各测试样本相对于所有码本的量化失真柱状图。
关键算法说明
- MFCC 特征提取:通过模拟人耳对非线性频率(Mel Scale)的感知规律,将线性频率轴转换为梅尔刻度,由于提取的是倒谱参数,具有良好的去卷积特性,能较好地表征说话人的个人特征。
- LBG 聚类算法:这是一种基于“分裂”思想的矢量量化算法。它解决了 K-means 算法对初始质心依赖的问题。通过不断增加质心数量并优化,系统能以较小的码本规模(如 16 个矢量)代表数千帧语音的分布,极大提高了匹配效率。
- 欧氏距离计算:利用高效的矩阵运算实现大量特征矢量之间的距离快速求解,确保了识别过程的实时性。