基于Itakura-Saito (IS) 测度的语音质量客观评价系统
项目介绍
本项目是一个基于MATLAB开发的语音质量客观评估工具。它利用Itakura-Saito (IS) 测度算法来衡量参考语音信号与受损语音信号(如经过编码、加噪或滤波处理后的信号)之间的差异。IS测度通过比较两者的线性预测编码(LPC)功率谱包络,能够灵敏地反映出语音共振峰位置和形状的变化,是评估语音通信系统还原度和语音增强效果的重要定量指标。
系统特性
- 全流程信号预处理:包含信号长度一致性裁切、基于互相关的自动时间同步以及高通预加重处理,确保比对基础的一致性。
- 高保真LPC分析:采用经典的Levinson-Durbin递归算法提取每一帧语音的全极点模型参数,精确建模语音的频谱特性。
- 非线性畸变捕捉:IS测度对对数似然比的高度敏感性,使其能够捕捉到传统信噪比(SNR)难以反映的频谱包络畸变。
- 多维度结果展示:不仅输出全局平均测度值,还提供时域波形图、逐帧IS距离分布图以及典型帧的频谱包络对比图。
- 直观的质量分级:根据计算出的测度数值,自动映射到从“优秀”到“差”的四个主观感官等级。
核心功能实现逻辑
- 参数初始化与信号获取:
系统设置采样率(16kHz)、帧长(30ms)、帧移(15ms)以及12阶LPC模型。程序生成包含谐波均衡的模拟参考信号,并通过添加随机噪声和低通滤波模拟受损语音。
- 信号校准与对齐:
通过互相关函数(xcorr)计算参考信号与受损信号之间的延迟量,并进行时间平移补齐,消除因时延导致的评估误差。
- 时域预处理:
应用一阶高通滤波器进行预加重,提升高频分量以平衡语音频谱。随后对信号进行分帧处理,并对每一帧施加汉明窗(Hamming Window)以减少频谱泄露。
- LPC参数提取:
对每一帧信号计算自相关函数,并执行Levinson-Durbin递归。该过程产出两组关键数据:一是反映频谱结构的AR模型系数,二是反映残差能量的增益系数。
- Itakura-Saito 距离计算:
利用公式
d_IS = (a_deg * R_ref * a_deg') / (a_ref * R_ref * a_ref') + log((a_ref * R_ref * a_ref') / (a_deg * R_deg * a_deg')) - 1 进行计算。该公式通过参考信号的自相关矩阵与受损信号的LPC系数交叉运算,衡量两个功率谱形状的对数似然差异。
- 统计与评估:
系统计算所有帧的IS距离均值作为最终得分。数值越接近0表示质量越高,并根据预设阈值(0.1、0.5、1.5)给出定性的质量标签。
关键函数与算法说明
- Levinson-Durbin 递归分析:在不直接进行矩阵求逆的情况下,高效解出LPC系数和预测误差能量。它是计算IS距离的底层支柱。
- IS距离算子实现:通过循环计算预测误差项,直接从时域自相关值和频域系数中求得距离,避免了复杂的频域积分运算,提高了计算效率。
- 频谱包络重构:利用
freqz 函数根据LPC系数还原全极点模型的频率响应。这允许系统直观地展示受损信号在哪些频率点上发生了明显的共振峰偏移或抑制。 - 自动同步逻辑:通过寻找互相关函数的峰值点来确定信号偏移,确保了计算是在对应样本点之间进行的。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱需求:Signal Processing Toolbox(用于freqz、hamming、butter及filter等信号处理函数)。
- 硬件建议:标准PC环境即可,处理1.5秒信号通常可在数秒内完成。
使用方法
- 启动MATLAB环境。
- 确保所有内置支持函数与主程序位于同一搜索路径下。
- 运行
main 函数。 - 控制台将打印处理帧数、LPC阶数、平均IS距离以及主观质量预估结果。
- 系统会自动弹出三组对比图表,用于定性观察信号在时域和频域的受损情况。
- 如需评估实际语音文件,只需将代码中的信号生成部分替换为
audioread 导入的本地WAV文件即可。