语音质量评价指标:PESQ(已经过时)

概述

PESQ(Perceptual evaluation of speech quality)(语音质量的感知评估)是一种客观的全参考的语音质量评估方法,其在国际电信联盟的标注化代号为ITU-T P.862
PESQ算法需要带噪的衰减信号和一个原始的参考信号,能够对客观语音质量评估提供一个主观MOS的预测值,而且可以映射到MOS刻度范围,PESQ得分范围在 -0.5–4.5 之间。得分越高表示语音质量越好。

其实现代码如下(在Python中也可直接调用相应的pesq模块):

def get_pesq(clean_wav, denoised_wav):
    """
    计算两个音频的pesq,要求采样率为16000或8000,且8000只支持窄带。
    PESQ就是用经过处理后的语音文件(语音压缩、重构等)与原始语音进行比较。PESQ得分范围在-0.5--4.5之间。得分越高表示语音质量越好。
    git: https://github.com/vBaiCai/python-pesq
    :param clean_wav: 原始文件
    :param denoised_wav: 待评估文件
    :return: score
    """
    ref, sr0 = sf.read(clean_wav)
    deg, sr1 = sf.read(denoised_wav)
    
    # 检查采样率是否达标
    if sr0 == sr1 and (sr0 == 16000 or sr0 == 8000):
        logger.info("ref_audio/deg_audio音频采样率为: %s/%s" % (str(sr0), str(sr1)))
    else:
        logger.error("音频采样率必须为16000或窄带8000。ref_audio/deg_audio音频采样率为: %s/%s" % (str(sr0), str(sr1)))
        return False

    # 检查两个音频文件长度,帧数相差不大于10
    if abs(len(ref) - len(deg)) > 10:
        logger.error("ref_wav/deg_wav两个音频长度不一致: %d/%d" % (len(ref), len(deg)))
        return False

    score = pesq(ref, deg, sr0)
    logger.success("PESQ算法计算的MOS值为:%s" % str(score))
    
    return score

PESQ 流程

Speech Quality Assessment.pdf
—— 上图来自 Speech Quality Assessment.pdf

问题

好好看看这个:
PESQ,STOI score (Speech Quality) for different languages(Non-English)

我截取出一些关键部分:

  • PESQ 已经过时不可用了!
    在这里插入图片描述
  • PESQ的继任是POLQA,但是由于一些原因不再公开(需要获得授权)
    在这里插入图片描述
  • 不要(因为语种不同)随意更改算法模型
    在这里插入图片描述

参考:

  1. 音频质量PESQ得分评估原理与步骤
  2. PESQ,STOI score (Speech Quality) for different languages(Non-English)
  • 6
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
PESQ(Perceptual Evaluation of Speech Quality)是一种用于语音质量客观评价的算法。它可以通过对比原始语音和压缩或传输后的语音之间的差异来评估语音质量PESQ算法的实现可以使用MATLAB进行。MATLAB是一种功能强大的数学计算和数据分析工具,可以用于信号处理和语音分析。 在MATLAB中,可以使用波形分析、滤波和频谱分析等技术来实现PESQ算法。以下是一个简单的MATLAB代码示例,实现了PESQ算法的基本功能: ```matlab % 输入原始语音和压缩/传输后的语音文件 original_file = 'original.wav'; processed_file = 'processed.wav'; % 读取原始语音和处理后的语音 [x, fs] = audioread(original_file); [y, fs] = audioread(processed_file); % 做必要的前处理,例如滤波器和增益调整 % 计算PESQ得分 pesq_score = pesq(x, y, fs); disp(['PESQ Score: ', num2str(pesq_score)]); ``` 上述代码中,我们首先读取原始语音和处理后的语音文件。然后可以对原始语音和处理后的语音进行一些预处理,例如滤波或增益调整,以模拟实际环境中的传输或压缩条件。 最后,我们通过调用`pesq()`函数来计算PESQ得分。该函数将原始语音、处理后的语音和采样率作为输入参数,并返回一个表示语音质量的数值。得分越高,表示语音质量越好。 需要注意的是,这只是一个简单的示例代码,实际的PESQ算法可能需要更多的处理步骤和参数设置。 总的来说,PESQ算法可用于语音质量客观评价,并可以使用MATLAB来实现。这种客观评价方法可以帮助我们判断语音信号在压缩或传输过程中的质量损失程度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值