基于i-vector与PLDA算法的说话人识别系统
项目介绍
本项目是一个在MATLAB环境下实现的集成化语音处理平台,专注于说话人身份识别。系统采用了语音识别领域的经典技术框架,即基于恒同矢量(i-vector)提取与概率线性判别分析(PLDA)的评分机制。通过集成化的图形用户界面(GUI),用户可以完成从语音采集、特征分析到模型注册与身份比对的全过程。该系统旨在提供一个直观的实验环境,用于展示说话人识别的核心流程与算法逻辑。
功能特性
- 实时语音采集与处理:系统支持通过麦克风进行3秒的实时录音,或从本地磁盘加载WAV格式的音频文件。
- 多维度信号可视化:系统能够实时绘制语音信号的时域波形图,并同步生成反映频率特征的动态语谱图。
- 参数化模型初始化:具备一键初始化系统模型的功能,模拟生成通用的背景模型(UBM)、总变化空间矩阵(T-Matrix)以及PLDA评估参数。
- 标准特征提取过程:实现了完整的MFCC(梅尔频率倒谱系数)提取流程,包括预加重、分帧、加窗及离散余弦变换。
- 说话人注册库管理:允许用户输入身份标签,并将当前提取的i-vector特征存入内存数据库。
- 智能身份比对:支持待识别语音与库中样本的多路比对,并给出量化的相似度得分与识别结果。
使用方法
- 系统初始化:启动后,首先点击系统初始化按钮。此操作将配置i-vector模型所需的统计维度、总变化空间投影矩阵及PLDA评估参数。
- 输入语音信号:选择实时录音或加载文件。系统会自动重采样至16kHz(如果需要)并转换为单声道。录制或加载成功后,界面将展示对应的波形与语谱图。
- 提取特征:点击提取特征按钮,系统将根据当前音频计算其MFCC参数。
- 注册说话人:在姓名编辑框中输入身份信息(如Speaker_A),点击注册说话人,系统将该语音的特征向量投影至低维i-vector空间并入库。
- 执行识别:输入一段新的语音,点击身份识别。系统将计算当前语音与库中所有注册人员的PLDA相似度,并在结果面板显示最匹配的姓名及置信度得分。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件需求:工作的声卡及麦克风(用于录音功能)。
- 依赖项:系统基于原生MATLAB函数实现,无需额外安装第三方语音工具箱,但录音功能需确保系统音频驱动正常。
实现逻辑与算法说明
主程序逻辑:系统采用事件驱动架构。通过全局数据结构维护采样率(16000Hz)、MFCC维数(13维)、GMM组件数(32个)以及i-vector维度(20维)。
音频预处理:
- 采用1 - 0.97z⁻¹的一阶FIR滤波器进行预加重,以补偿高频能量。
- 分帧采用25ms窗长和10ms帧移。
- 施加Hamming窗以减少频谱泄露。
核心特征提取:
- MFCC计算:在频域应用26组梅尔滤波器组进行能量聚合,取对数后通过离散余弦变换(DCT)获取前13阶系数。
- i-vector提取:首先计算输入特征相对于通用背景模型(UBM)的零阶和一阶统计量。采用了基于欧氏距离的硬分配法确定GMM分量,通过将统计量投影至预设的总变化空间(T矩阵)来获取低维矢量,并进行长度规范化(Standard Length Normalization)。
评分与判别:
- PLDA评分:系统在比对阶段计算注册向量与测试向量之间的关联度。其简化实现基于余弦相似度,并结合线性增益与偏置模拟PLDA的似然比输出。
- 结果可视化:得出的原始分值通过Logistic函数映射为0-100%的相似度得分,用于直观展示识别的可靠性。
图形界面实现:
- 使用figure对象构建主窗口,并通过uipanel划分信号显示、控制面板和结果展示三个功能区。
- 绘图部分通过自定义的采样频率和步长函数,手动计算并绘制瀑布式的时频语谱图。