音频客观测评方法PESQ
一、简介
语音质量感知评估(Perceptual Evaluation of Speech Quality)是一系列的标准,包括一种用于自动评估电话系统用户所体验到的语音质量的测试方法。该标准于2001年被确定为ITU-T P.862建议书[1]。PESQ被电话制造商、网络设备供应商和电信运营商用于客观的语音质量测试。PESQ的继任者POLQA(ITU-T P.863建议书[2])的第一版于2011年生效。(引用wiki)
协议中提供源码:https://www.itu.int/rec/T-REC-P.862-200511-W!Amd2/en
Python开源链接:https://github.com/ludlows/PESQ

二、原理

PESQ中,原始信号和被测信号通过感知模型映射到internal representation。认知模型利用这种representation差异来预测被测信号的语音质量。
PESQ认知模型用于预测感知语音质量的internal representation,是基于使用频率(以Bark为单位的音高)和强度(以Sone为单位的响度)的心理物理等效物的信号表示来计算的。
三、实现

总的想法是:
1)对原始信号和通过被测系统的信号首先电平调整到标准听觉电平,再利用IRS(Intermediate Reference System)滤波器模拟标准电话听筒进行滤波;
2)对通过电平调整和滤波之后的两个信号在时间上对准,并进行听觉变换,这个变换包括对系统中线性滤波和增益变化的补偿和均衡;
3)将两个听觉变换后的信号之间的谱失真测度作为扰动(即差值),分析扰动曲面提取出的两个退化参数,在频率和时间上累积起来,映射到MOS的预测值。
1、电平调整
首先要调整原始音频和被测音频的整体音量。这步是将整体原始音频信号X(t)和被测试音频信号Y(t)都缩放到相同的恒定功率水平。
PESQ假设主观听音水平是一个常数,约为耳参考点处的79分贝SPL(P.830,[23]第8.1.2节)。音量对齐是基于原始信号和被测信号的带通滤波版本(300-3000 Hz)的功率来进行的。
除了时域中的电平对齐外,在时频分析之后,还需要在频域中对齐power。这是通过生成一个频率为1000 Hz、幅度为40分贝SPL的正弦波来实现的。这个正弦波使用32毫秒帧长的加窗快速傅里叶变换(FFT)转换到频域。将频率轴转换为modified Bark尺度后,通过乘以功率缩放因子Sp,将得到的基音功率密度的峰值幅度归一化为
的功率值。
代码实现如下:
pesq_measure->fix_power_level
void fix_power_level (SIGNAL_INFO *info, char *name, long maxNsamples)
{long n = info-> Nsamples;long i;float *align_filtered = (float *) safe_malloc ((n + DATAPADDING_MSECS * (Fs / 1000)) * sizeof (float)); float global_scale;float power_above_300Hz;for (i = 0; i < n + DATAPADDING_MSECS * (Fs / 1000); i++) {align_filtered [i] = info-> data [i];}apply_filter (align_filtered, info-> Nsamples, 26, align_filter_dB);power_above_300Hz = (float) pow_of (align_filtered, SEARCHBUFFER * Downsample, n - SEARCHBUFFER * Downsample + DATAPADDING_MSECS * (Fs / 1000),maxNsamples - 2 * SEARCHBUFFER * Downsample + DATAPADDING_MSECS * (Fs / 1000));global_scale = (float) sqrt (TARGET_AVG_POWER / power_above_300Hz); for (i = 0; i < n; i++) {info-> data [i] *= global_scale; }safe_free (align_filtered);
}
2、IRS滤波
这是基于假设听力测试是通过一个手机设备进行的。为了模拟受试者实际听到的信号,需要计算原始语音信号和被测试语音信号的IRS滤波。通过在整个文件上执行快速傅里叶变换(FFT),在频域中使用与IRS接收特性相似的分段线性响应进行滤波,然后在整个语音文件长度上执行逆FFT来实现。
这样得到了缩放后的输入信号Xs(t)和输出信号Ys(t)的滤波版本Xirss(t)和Yirss(t)。PESQ中,无论实际主观实验使用的是IRS还是modified IRS滤波,都使用单一的IRS类接收滤波器。因为大多数情况下,确切的滤波是未知的,而且即使知道确切的滤波,手持设备与耳朵之间的耦合也是未知的。因此,ITU-T要求客观方法对手持设备的滤波相对不敏感。此外,ITU-T基准中不允许对滤波进行调整。
代码实现如下:
pesq_measure

3、时间对齐与均衡
若原始语音文件和被测试语音文件以较大的静音间隔开始或结束,可能会影响对这些文件中某些平均失真值的计算。因此,需要估算这些文件开头和结尾的静音部分。
从原始语音文件的开头和结尾开始,必须连续五个绝对样本值的总和超过500,该位置才被视为活跃间隔的开始或结束。这个开始和结束之间的间隔被定义为活跃语音时间间隔。为了节省计算周期和存储空间,某些计算可以限制在活跃间隔内进行。
代码实现如下:
pesq_measure->pesq_psychoacoustic_model
#define CRITERIUM_FOR_SILENCE_OF_5_SAMPLES 500.

4、听觉变换
实际生活中,人耳会执行时频变换。在PESQ中通过在一个32毫秒帧长的Hann window进行短时快速傅里叶变换来模拟。连续帧之间的重叠率为50%。原始信号和被测试信号的功率谱(复数快速傅里叶变换(FFT)分量的实部和虚部的平方和)被分别存储在独立的实值数组中。在PESQ中,单个帧内的相位信息被丢弃,所有计算仅基于功率表示
和![]()
另外Bark scale反映了人类听觉系统在低频时具有比高频更精细的频率分辨率这一特性。这一特性通过快速傅里叶变换(FFT)频带的分组实现,即将相应FFT频带的功率进行归一化求和。将赫兹频率尺度映射到Bark approximates的扭曲函数。所得信号被称为基音功率密度:PPXwirss(f)n和PPYwirss(f)n。

5、扰动处理
被测信号中帧的起始点会根据variable delay estimator观测到的延迟进行偏移。原始语音信号的时间轴则保持不变。如果延迟增加,处理过程中会省略被测试信号的部分内容;而如果延迟减少,则会重复被测试信号的部分内容。这种时间轴的修改在与主观感知的整体语音质量的相关性方面取得了最佳结果。
这块的详细介绍需要参考《Perceptual Evaluation of Speech Quality (PESQ), the new ITU standard for end-to-end speech quality assessment. Part II – Psychoacoustic model》
6、识别坏间隔
连续多帧中,若帧扰动超过某一阈值,那么这些帧被称为不良区间。
在少数情况下,由于预处理观测到的时间延迟不正确,客观测量会预测在最少的不良帧数内会出现较大的失真。对这些不良区间,我们通过定位预处理观测到的延迟进行预补偿后的绝对原始信号与绝对被测试信号之间的互相关最大值,来估计新的延迟值。
当互相关最大值低于某一阈值时,我们认为该区间是噪声与噪声的匹配,此时该区间不再被视为不良区间,并停止对该区间的处理。否则,将重新计算不良区间内各帧的帧扰动,如果新的帧扰动值较小,则用它替换原始的帧扰动值。最终得到的帧扰动值Dn和DAn用于计算主观感知的整体语音质量。

四、参考
语音质量评估 - 冬色 - 博客园语音质量评估,就是通过人类或自动化的方法评价语音质量。在实践中,有很多主观和客观的方法评价语音质量。主观方法就是通过人类对语音进行打分,比如MOS、CMOS和ABX Test。客观方法即是通过算法评测语音质量,在实时语音通话领域,这一问题研究较多,出现了诸如如PESQ和P.563这样的有参考和无参考
https://www.cnblogs.com/mengnan/p/12046332.html
https://www.itu.int/rec/T-REC-P.862-200511-W!Amd2/en
https://www.itu.int/rec/T-REC-P.862-200511-W!Amd2/en
http://www.mp3-tech.org/programmer/docs/2001-P03a.pdf
http://www.mp3-tech.org/programmer/docs/2001-P03a.pdf
相关文章:
音频客观测评方法PESQ
一、简介 语音质量感知评估(Perceptual Evaluation of Speech Quality)是一系列的标准,包括一种用于自动评估电话系统用户所体验到的语音质量的测试方法。该标准于2001年被确定为ITU-T P.862建议书[1]。PESQ被电话制造商、网络设备供应商和电…...
前后端分离的项目使用nginx 解决 Invalid CORS request
我是这样打算的,前端用nginx代理,使用80 转443 端口走https 前端的地址就是http://yumbo.top 或https://yumbo.top 后端服务地址是:http://yumbo.top:8081 下面是我的完整配置,功能是正常的,加了注释 user nginx; …...
回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测
回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测 目录 回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测基本介绍程序设计基本介绍 SVM-Adaboost集成学习是一种将支持向量机(SVM)与AdaBoost算法相结合的集成学习…...
常见排序算法总结 (五) - 堆排序与堆操作
堆排序(借助 API) 算法思想 利用堆能够维护数组中最大值的性质,根据数组元素建立最大堆,依次弹出元素并维护堆结构,直到堆为空。 稳定性分析 堆排序是不稳定的,因为堆本质上是完全二叉树,排…...
kubernetes的三种探针ReadinessProbe、LivenessProbe和StartupProbe,以及使用示例
前言 k8s中的Pod由容器组成,容器运行的时候可能因为意外情况挂掉。为了保证服务的稳定性,在容器出现问题后能进行重启,k8s提供了3种探针 k8s的三种探针 为了探测容器状态,k8s提供了两个探针: LivenessProbe和ReadinessProbe L…...
掌握线性回归:从简单模型到多项式模型的综合指南
目录 一、说明 二、简单线性回归 三、线性回归的评估指标 3.1 线性回归中的假设 四、从头开始的简单线性回归代码 五、多元线性回归 六、多元线性回归代码 七、多项式线性回归 八、多项式线性回归代码 九、应用单变量多项式回归 十、改变多项式的次数 十一、多列多项式回归 一、…...
Java:183 基于SSM的高校食堂系统
项目介绍 基于SSM的食堂点餐系统 角色:管理员、用户、食堂 前台用户可以实现商品浏览,加入购物车,加入收藏,预定,选座,个人信息管理,收货信息管理,收藏管理,评论功能,…...
光谱相机
光谱相机是一种能够同时获取目标物体的空间图像信息和光谱信息的成像设备。 1、工作原理 光谱相机通过光学系统将目标物体的光聚焦到探测器上,在探测器前设置分光元件,如光栅、棱镜或滤光片等,将光按不同波长分解成多个光谱通道,…...
AI绘图:开源Stable Diffusion 3 ComfyUI下载安装方法
AI绘图:开源Stable Diffusion 3 ComfyUI下载安装方法 安装好后软件运行效果: 第一步:安装ComfyUI的最新版本 1、请从下面的地址下载压缩包,并解压缩到硬盘 https://github.com/comfyanonymous/ComfyUI/releases/download/late…...
一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测
一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测 目录 一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现INFO-CNN-SVM向量加权算法优化卷积神经网络结…...
AES笔记整理
文章目录 1. 简介2. 密钥加法层2. 字节代换层3. 行位移 - ShiftRows4. 列混淆 - MixColumn5. 其他5.1列混淆矩阵乘法运算5.2 AES密钥生成 6. 参考资料 以下内容为信息安全开发过程中,AES对称加密算法的笔记,大部分内容转载其他文章,若描述不清…...
Jmeter 性能压测-Tomcat连接数
1、影响性能的线程状态 ①BLOCKED,如果线程中有BLOCKED,就代表有阻塞情况,需要进行排查 ②TIMED_WAITING,如果线程中有TIMED_WAITING,就代表有等待的情况,要分情况来排查 系统线程在等待(如果…...
基于Vue3的组件封装技巧分享
1、需求说明 需求背景:日常开发中,我们经常会使用一些UI组件库诸如and design vue、element plus等辅助开发,提升效率。有时我们需要进行个性化封装,以满足在项目中大量使用的需求。 错误示范:基于a-modal封装一个自定…...
python中r代表什么意思
r在python中表示什么意思? “r”是“raw”的简写。去查单词,意思是“未加工的,原料”。因此,不难想象,在python字符串前面,表示“按原样输出字符串”,也就是说字符串里的元素,原来什…...
《量子计算对人工智能发展的深远影响》
在科技发展的浪潮中,量子计算与人工智能无疑是两颗璀璨的明星,二者的融合正引领着一场深刻的科技变革. 量子计算的独特之处在于其利用量子比特的叠加和纠缠特性,能够实现并行计算,从而在处理复杂问题时展现出超越传统计算的巨大潜…...
12.2【JAVA EXP4]next.js的各种问题,DEBUG,前端补强,前后端交互,springSecurity ,java 配置,h2数据库
在服务器组件中使用了 useState 这样的 React Hook。useState 只能在客户端组件中使用,而不能在服务器组件中使用。Next.js 的新架构(App Router)中,默认情况下,页面和布局组件是服务器组件,因此不能直接使…...
docker启动一个helloworld(公司内网服务器)
这里写目录标题 容易遇到的问题:1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法: 最简单的方式: docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World: docker…...
使用 Netty 实现 RPC 通信框架
使用 Netty 实现 RPC 通信框架 远程过程调用(RPC,Remote Procedure Call) 是分布式系统中非常重要的通信机制。它允许客户端调用远程服务器上的方法,就像调用本地方法一样。RPC 的核心在于屏蔽底层通信细节,使开发者关…...
【机器学习06--贝叶斯分类器】
文章目录 基础理解01 贝叶斯决策论02 极大似然估计03 朴素贝叶斯分类器04 半朴素贝叶斯分类器05 贝叶斯网06 EM算法 补充修正1. 贝叶斯定理与分类的基本概念2. 贝叶斯决策论3. 极大似然估计4. 朴素贝叶斯分类器5. 半朴素贝叶斯分类器6. 贝叶斯网7. EM算法 面试常考 基础理解 本…...
创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持续下去的动力! 目录 一. 简单汇总一下创建…...
FCU1501嵌入式控制单元:工业物联网数据通信网关的硬件选型与开发实践
1. 项目概述:FCU1501,一个“非典型”嵌入式控制单元的诞生最近,嵌入式圈子里关于“数据通信网关”的讨论又热了起来。这玩意儿听起来高大上,但说白了,就是给各种设备、系统之间搭桥的“翻译官”和“交通警察”。传统上…...
2026年哪个开源商城,更适合长期维护?——真正决定商城系统寿命的,从来不是“功能多少”,而是“复杂业务长期是否还能稳定演进”
很多企业第一次选开源商城系统时。 通常都会特别关注: 功能全不全插件多不多页面好不好看上线速度快不快 因为在很多人认知里: 功能越多 → 系统越成熟 于是很多企业前期选型时。 都会优先选择: 功能最多的插件最全的营销玩法最丰富的…...
3分钟快速搞定:让Windows资源管理器完美显示iPhone照片缩略图
3分钟快速搞定:让Windows资源管理器完美显示iPhone照片缩略图 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 还在为…...
3步解锁网易云音乐NCM文件:免费转换工具终极指南
3步解锁网易云音乐NCM文件:免费转换工具终极指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM格式音乐无法在其他设备…...
Vue-Tree-List 实战指南:构建现代化树形结构的终极方案
Vue-Tree-List 实战指南:构建现代化树形结构的终极方案 【免费下载链接】vue-tree-list 🌲A vue component for tree structure 项目地址: https://gitcode.com/gh_mirrors/vu/vue-tree-list 在现代前端开发中,树形结构是处理层级数据…...
逻辑回归实战:从原理、数值稳定到生产级代码实现
1. 什么是逻辑回归:从医生诊断到快递分拣的真实场景逻辑回归不是教科书里那个干巴巴的“S型曲线”,它是我过去八年带团队做工业质检项目时,每天早上打开监控大屏第一眼就要确认的模型——当产线摄像头拍下第372个电路板,系统在0.8…...
为什么92%的CRM项目在6个月内失去用户喜爱?揭秘Lovable CRM的3层情感化设计模型
更多请点击: https://intelliparadigm.com 第一章:Lovable CRM系统搭建 Lovable CRM 是一个轻量、可扩展、开发者友好的客户关系管理系统,专为中小团队设计,强调易用性与可定制性的平衡。它基于 Go 语言后端与 Vue 3 前端构建&am…...
GAN与密码学的真实接口:从概念纠偏到工程落地
1. 项目概述:这不是密码学,也不是GAN训练指南,而是一场概念误读的深度解剖 “Understanding GAN Cryptography”——这个标题一出现,我就在笔记本上划了三道横线。不是因为难,而是因为它根本不存在。过去三年里&#x…...
回归测试:确保 Harness 更新不破坏现有功能
回归测试实战指南:如何确保Harness平台更新不破坏现有CI/CD核心功能? 摘要/引言 你有没有遇到过这种场景:为了用上Harness新出的金丝雀发布优化功能,团队兴高采烈更新了平台版本,结果第二天全公司一半的发版流水线集体挂了?跨阶段传参失效、K8s部署权限报错、自定义插件…...
AI——LangChain 三大核心概念
LangChain 三大核心概念一、LangChain 三大核心概念1. 提示词模板 PromptTemplate2. 模型调用 ChatOpenAI / ChatZhipuAI3. 链 Chain二、完整可运行代码(带角色设定)功能三、如果你想用 **智谱 GLM**四、总结一、LangChain 三大核心概念 1. 提示词模板 …...
