音频评价指标

news/2024/12/21 20:09:54/

第一个是主观评价指标,后面几个是客观评价指标

1.MOS (Mean Opinion Score, 平均意见得分)

  • 评价方法

MOS 是一种主观评估方法,通过让一组听众对合成的语音质量进行评分来衡量语音的自然度或质量。评分通常在 1 到 5 的范围内,1 表示“非常差”,5 表示“非常好”。

使用方法: 听众会根据语音的自然度、清晰度、情感表达等进行评分,最终通过平均听众的评分得到该语音的 MOS 值。

  • 置信区间

由于不同听众的评分可能会有所不同,因此 MOS 通常会附带一个置信区间,通过得分样本的均值,方差,分别临界值(通常为95%的临界值)来计算。

区间表示在 95% 的情况下,真实的平均分会落在该区间内。置信区间越小,说明听众的评分越一致;置信区间越大,说明评分差异较大。

  • CMOS

COMS (Comparative Mean Opinion Score)是直接让听众比较, 并给予评分,因此是一个相对评分, 如下:

-3: A 比 B 差很多
-2: A 比 B 差一些
-1: A 比 B 略差
0: A 和 B 差不多
+1: A 比 B 略好
+2: A 比 B 好一些
+3: A 比 B 好很多

CMOS 主要用于评估多个语音系统之间的相对质量,尤其是在研究不同模型、算法或数据集对语音合成效果的影响时。由于 CMOS 是一种比较性的评价方式,它可以更清楚地揭示不同系统之间的细微差异。

总结:
CMOS 是通过让听众比较两段语音,给出相对评分的主观评估方法。
它不同于 MOS 的绝对评分,更注重对比不同系统生成的语音质量。

2. MCD (Mel Cepstral Distortion, 梅尔倒谱差异)

MCD单位为dB, 计算公式如下:

MCD = 10 ln ⁡ ( 10 ) 2 ∑ t = 1 T ( c t ( ref ) − c t ( syn ) ) 2 \text{MCD} = \frac{10}{\ln(10)} \sqrt{2 \sum_{t=1}^{T} \left( c_t^{(\text{ref})} - c_t^{(\text{syn})} \right)^2} MCD=ln(10)102t=1T(ct(ref)ct(syn))2

c t ( ref ) c_t^{(\text{ref})} ct(ref) : 参考语音的第t个梅尔倒频系数

c t ( syn ) c_t^{(\text{syn})} ct(syn) : 合成语音的第t个梅尔倒频系数

T T T: 倒谱系数的维度, 一般为13 或 25, 维度越大细节特征越多

3. TTS 字词错误率

  • 编辑距离

编辑距离指通过插入、删除或替换字符来使生成文本与参考文本匹配所需要的最小操作数(通常使用 Levenshtein 距离计算

  • 词错误率(Word Error Rate, WER)

    WER = 编辑距离 / 单词总数

  • 字符错误率(Character Error Rate, CER)

    CER = 编辑距离 / 字符数

4.STOI

Short-Time Objective Intelligibility (STOI) 是一种用于评估语音信号可懂度的客观评价指标,适用于语音增强、去噪等任务。

STOI 的设计初衷是模拟人类在听觉上对语音可懂度的感知,通常用于对比增强语音和原始干净语音之间的差异。

STOI 通过计算输入的干净语音和失真语音(例如经过噪声、增强或变换后的语音信号)之间的相似度来评估语音信号的可懂度。它的主要流程可以归纳如下:

  • 将语音信号划分为短时帧(通常是 20ms 长)。
  • 对每个帧进行短时傅里叶变换 (STFT) 并提取出频谱。
  • 通过频带加权,对干净语音和失真语音之间的差异进行分析。
  • 计算每个帧的对数相似度,得出 STOI 分数。

STOI 的输出是一个介于 0 到 1 之间的分数,数值越高表示语音可懂度越好,越接近 1 表示信号与参考信号的相似性越高。

import numpy as np from scipy.io import wavfile from pystoi import stoi # 加载干净语音和失真语音 
fs_clean, clean_speech = wavfile.read("clean_speech.wav") 
fs_noisy, noisy_speech = wavfile.read("noisy_speech.wav") # 确保采样率相同 
assert fs_clean == fs_noisy, "Sampling rates do not match!" # 计算 STOI 分数 
stoi_score = stoi(clean_speech, noisy_speech, fs_clean, extended=False) print(f'STOI Score: {stoi_score:.4f}')

注:extended=True:是使用扩展的 STOI 计算方法(ESTOI),一种更加准确的STOI评估方法。

5.PESQ

Perceptual Evaluation of Speech Quality (PESQ) 是一种用于客观评估语音质量的标准化指标。它最初由 ITU-T(国际电信联盟-电信标准化部门)在 P.862 建议书中提出,用于评估通信系统中的语音质量。PESQ 被广泛用于语音编解码器、语音增强、去噪等语音处理技术的质量评估。

PESQ 是一种基于感知模型的质量评估算法,它通过模拟人耳对语音失真的感知能力来评估语音的质量。PESQ将参考语音信号(干净的原始语音)与失真语音信号(例如经过编码、传输、增强或去噪后的语音)进行对比,生成一个质量分数,通常在 -0.5 到 4.5 之间, 值越高越接近无损。

步骤:

  • 将语音信号划分为短时帧。
  • 模拟人类听觉系统处理语音信号的方式,提取出感知特征。
  • 通过计算参考信号和失真信号之间的感知差异,给出一个量化的 PESQ 分数。
import numpy as np 
from scipy.io import wavfile 
from pesq import pesq 
from pesq import PesqError # 加载干净语音和失真语音 
fs_clean, clean_speech = wavfile.read("clean_speech.wav") 
fs_noisy, noisy_speech = wavfile.read("noisy_speech.wav") # PESQ 算法支持的采样率为 8000 或 16000 Hz,确保采样率一致 
if fs_clean != fs_noisy: raise ValueError("Sampling rates do not match!") 
if fs_clean not in [8000, 16000]: raise ValueError("PESQ only supports 8000 Hz or 16000 Hz") # 计算 PESQ 分数 try: pesq_score = pesq(fs_clean, clean_speech, noisy_speech, 'wb') # 'wb' for wide-band (16000 Hz), 'nb' for narrow-band (8000 Hz) print(f'PESQ Score: {pesq_score:.4f}') 
except PesqError as e: print(f'Error calculating PESQ: {e}')
  • 读取语音信号: 使用 scipy.io.wavfile.read 读取干净的语音文件和失真的语音文件。

  • 确保采样率一致: PESQ 只支持两种采样率:8000 Hz (窄带) 和 16000 Hz (宽带),因此需要确保两种语音信号的采样率相同并且符合 PESQ 支持的采样率。

  • 计算 PESQ: 调用 pesq 函数传入采样率、干净语音和失真语音,并选择 wb 或 nb 模式来指示是宽带(16kHz)还是窄带(8kHz)计算。返回的 pesq_score 是 PESQ 分数。


http://www.ppmy.cn/news/1527137.html

相关文章

速盾:文件下载开cdn消耗流量大吗?

CDN(内容分发网络)是一种用于提高网站性能和用户体验的技术。它通过将静态文件和动态内容分发到位于世界各地的服务器节点,从而实现更快的加载速度和更高的可靠性。 在文件下载方面,CDN可以帮助提供更快速和可靠的下载体验。当用…

【乐吾乐大屏可视化组态编辑器】API接口文档(pgsql)

API接口文档(pgsql) 在线使用:https://v.le5le.com/ 采用前后端分离架构,乐吾乐后端服务提供一整套完整的web组态编辑器的所有数据接口,包含2D/3D图纸接口服务、文件接口服务和用户接口服务等,安装包版本…

智能机巢+无人机:自动化巡检技术详解

智能机巢与无人机的结合,在自动化巡检领域展现出了巨大的潜力和优势。以下是对这一技术的详细解析: 一、智能机巢概述 智能机巢,也被称为无人机机场或无人机机巢,是专门为无人机提供停靠、充电、维护等服务的智能化设施。它不仅…

【计算机网络】TCP 协议——详解三次握手与四次挥手

文章目录 一、引言二、TCP1、TCP 的数据格式2、TCP 的三次握手3、TCP 的四次挥手4、TCP 的全双工通信 三、TCP 的状态转换1、TCP 连接的建立(三次握手)状态2、TCP 连接的终止(四次挥手)状态3、TCP 异常情况 一、引言 TCP与UDP的区…

如何在win10Docker安装Mysql数据库?

1.拉取镜像 docker pull mysql 2.查看镜像 使用以下命令来查看是否已安装了 mysql镜像。 3.运行镜像 命令: docker run -p 3306:3306 --name mysql --restartalways --privilegedtrue \ -v /usr/local/mysql/log:/var/log/mysql \ -v /usr/local/mysql/data:/var…

Spring Boot基础

项目创建 项目启动 请求响应 RestController 1.返回值处理 RestController:这个注解结合了Controller和ResponseBody的功能。它默认将所有处理请求的方法的返回值直接作为响应体内容返回,主要用于构建RESTful API。返回的数据格式通常是JSON或XML&…

ccfcsp-202112-1、序列查询

202112-1 序列查询 #include <bits/stdc.h> using namespace std; int main(){int n, N;cin >> n >> N;vector<int> A(n 1,0);vector<int> fa(N 1,0);for(int i 1; i < n; i){cin >> A[i];}int j 1;int sum 0;for(int i 1; i &l…

sqlguna靶场get shell

一、打开靶场&#xff0c;发现一个搜索框&#xff0c;尝试sql注入&#xff0c;发现可以注入&#xff0c;爆破数据库&#xff0c;表名&#xff0c;字段名以及 用户名密码 二、发现密码被MD5&#xff0c;解密后得到密码 三、进入后台界面登陆查看 四、发现添加新闻出可以上传图片…