语音质量评估与可懂度评估

一、语音质量与可懂度

质量只是语音信号众多属性当中的一个,可懂度是另一种属性,这两种属性并不等效。由于这个原因,就有了不同的评估方法用来估计语音的质量和可懂度。质量在本质上是高度主观的且很难被可靠地估计。部分原因是不同的测听者有着不同的自身标准,这就导致了测听者之间的评级得分的巨大差异。

质量评价是估计说话人“如何”发出一段话语,并且得知一些诸如自然度、刺耳度和沙哑度等属性。质量拥有太多的属性以致不能一一列举,根据实际的目的我们只需要知道语音质量的几个属性。可懂度评价是估计说话人说了“什么”,比如说出的单词的意思或内容。

不同于质量,语音可懂度不是主观的,并且通过向测听者展示语音材料(句子、单词等)和让他们分辨词汇可以很容易地被测量。通过计算单词和音素的正确识别数量可以量化可懂度。

我们还不能完全理解语音可懂度和语音质量的关系,部分原因是我们无法得知质量和可懂度在声学上的关系。

语音可以被很好地理解,即使在质量很差的情况下。例如使用少量(3~6个)正弦波合成的语音和使用少量(4个)调制噪声频带合成的语音,正弦波语音给人的感觉是很机械的,但却有很高的可懂度。

相反,有时语音有很好的质量,但却不能完全地被理解。例如,语音在IP(VoIP)网络中传输或者在传输过程中产生了大量的丢包。在接收端,由于某些词的丢失在语音感知时就产生了干扰,会降低语音的可懂度。然而,剩余的词的质量还是很好的。正如这些例子所阐释的,在估计语音质量和语音可懂度时需要不同的方法。

二、语音质量的主观评价方法

主观评价方法是基于一组测听者对原始语音与合成语音进行对比试听,然后根据某种事先规定好的尺度标准来对失真语音划分等级的,主要反映的是测听者主观上对语音质量或者可懂度的一种感知。主观评价分为语音质量的主观评价和语音可懂度的主观评价,常见的语音质量主观评价方法是平均意见得分MOS(Mean Opinion Score)。另外,还有判断满意度测量DAM(Diagnostic Acceptability Measure),它是对语音质量,例如样本自身的感知质量、背景情况及其他因素进行的多维测量。

三、语音可懂度的主观评价方法

常见的语音可懂度主观评价方法是判断韵字测试DRT(Diagnostic Rhyme Test),此外还有的方法是按照听懂的单词占所有单词的个数来计算的,比如100个单词听懂了75个,则主观可懂度为0.75或者75%。可懂度是语音信号的一个重要属性。

语音接受阈 SRT(Speech Reception Threshold)在测量语音可懂度方面可以被用于替代百分比得分。无论在安静环境下还是噪声环境下都可以测量出SRT。在安静环境下,SRT被定义为表示等级或者强度等级,此时测听者识别单词的准确率是50%。通过在从低到高的不同的强度等级的语音材料的表示和强度表现图可以得到SRT。在强度表现图中,我们规定50%这个点对应着SRT。

当在噪声环境下,SRT被定义为信噪(S/N)等级,此时测听者识别单词的准确率是50%。通过从消极信噪等级(如一10dBS/N)到积极信噪等级(如10dBS/N)的不同信噪等级语音的表示和得到一个信噪等级表示图可以得到SRT。从这个图中,我们也规定50%点处对应其SRT。显然,小的消极的信噪等级值意味着表现差,而大的积极的信噪等级值则意味着表现好。信噪表现函数是S形单调递增的,如图所示。

SRT的测量需要估计强度表现函数。然而,由于在不同的强度等级和信噪等级需要不断重复地做测试,这就需要耗费大量的时间才能获得强度表现函数和信噪表现函数。此外,为了得到50%点,信噪等级的范围仍是不清楚的。这就需要一个更实际更有效的方法来获得到SRT。幸运的是,存在这样一个算法且它是基于自适应心理物理程序。
这个程序是自适应的,它会根据测听者的反应系统地调节信噪等级或者安静条件下的强度等级。该程序也被称为up-down程序。语音材料最初是在高信噪等级条件下被提出的。如果测听者能够准确地识别出给出的单词,那么信噪等级就会减少一个固定的数值(即2dB),直到测听者不再识别出给出的单词。然后,信噪等级会增加相同的数值直到测听者不再识别出单词。这个过程的不断进行需要大量的实验跟踪信噪等级的改变。信噪等级从增加到减少或者从高到低的变化、从减少到增加的变化被称为反转。最初的两个反转通常被忽略,以减少最初点的偏差。最后8个反转的中间点做平均就得到了SRT。除了改变信噪等级,同样的程序可以用来得到安静环境下的SRT,我们系统地改变了声音强度等级。信噪等级或者强度等级增加还是减少的那个量称为步长,它需要仔细地选择。选择步长过大可能会使数据错误地置于相对于50%点的位置;步长太小又需要较长的时间来汇集数据。固定的步长(2~4dB)被认为是较好的。

四、语音质量客观评价方法

语音质量的主观评价提供了对语音的可靠评价指标。然而,这些方法费时,同时需要对听者进行训练。基于这些原因,一些研究人员开始探求客观的评价方法。理想情况下,客观评价算法需要在没有原始语音的情况下对语音进行评价。需要结合不同的处理过程的知识,包括低层处理和高层处理。理想的方法所得到的评价结果应与主观评价相一致。
现有的评价方法局限于要知道原始的语音信号,并且多数只能模拟低层的处理过程。尽管有这些局限性,一些评价方法与主观评价有很高的相似度。
在实现时,首先将语音信号分成10~30ms的时间帧,然后比较原始信号与处理信号之间的畸变度。将所有语音帧的畸变度进行平均。畸变度的计算可以在时域进行,也可以在频域进行。对于频域的方法,假设检测到的任何频域畸变都与质量有关。
一些客观评价方法与编码类型畸变的主观评价有很高的相似度,已经应用在编码领域。

4.1、信干噪比SINR(Signal to Interference plus Noise Ratio)

信干噪比SINR(Signal to Interference plus Noise Ratio),指的是系统中信号与干扰和噪声之和的比。

信号是指来自设备外部需要通过设备进行处理的电子信号。

干扰是指系统本身以及异系统带来的干扰,如同频干扰、多径干扰。

噪声是指经过设备后产生的原信号中并不存在的无规则的额外信号,这种信号与环境有关,不随原信号的变化而变化。

计算公式:

信干噪比的表达方式为:

SINR = 10lg[ PS /( PI + PN ) ],其中:

SINR:信干噪比,单位是dB。

PS:信号的有效功率。

PI:干扰信号的有效功率。

PN:噪声的有效功率。

4.2、信噪比(SIGNAL-NOISE RATIO)

英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。这里面的信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化。

计算公式:

信噪比是一个比值,也可以认为是一种倍数,在通信和电子工程中,我们希望的是信噪比越高越好。比如说信号噪声的强度是噪声的10倍、100倍、1000倍,由于这个数字可能是一个很大很大的数字,所以我们采用分贝(dB)来表示。其定义为:“两个同类功率量或可与功率类比的量之比值的常用对数乘以10等于1时的级差” 。公式如下:

4.3、时域分段信噪比(the time-domian segmental SNR,SNRseg)

时域分段信噪比(the time-domian segmental SNR,SNRseg)评价方法计算如下

式中,x(n)纯净语音信号,是处理语音信号,N是帧长(选为30ms,当采样率为8kbit/s时,采样点数为240),M是信号的帧数。该方法存在的问题之一是在语音信号的静音期,原始信号的能量非常小,使时域分段信噪比产生大的负值,使整个的测量结果产生偏差。所采用的补救方法是通过去除掉静音帧或在计算均值时,只考虑SNRseg在[-10,35]dB范围内的帧。

4.4、加权频带分段信噪比(the frequency-weighted segmental SNR,fwSNRseg)

加权频带分段信噪比(the frequency-weighted segmental SNR,fwSNRseg)计算如下

式中,W(j,m)是第j个频带的权重,K是频带数,M是信号的总的帧数,X(j,m)是第m帧中第j个频带的纯净信号的临界频带大小(激励谱),是相同频带中的处理信号相应的频谱绝对值。上式分子中的信噪比项被限定在[-10,35]dB。为了估计动态范围的影响,也可以限定SNR范围为[-15,20]、[-15,25]、[-15,30]、[-15,35]dB。选择[-10,35]dB有两个原因:①为了方便地比较前面的SNRseg方法,需要限定相同的范围;②选择这一范围是为了与一些研究中的语音的动态范围往往超过30dB相一致。

五、语音质量的感知评价方法(PESQ)

20世纪90年代中后期,在感知模型基础上针对之前一些方法对传输情况评价不准确的现象,ITU发起了一场语音评价方法的竞赛,ITU在2001年采用了PAMS的延时校准方法及PSQM99的感知模型,最后形成了PESQ方法。在众多的客观评价方法中,PESQ是在计算上最为复杂的。其计算如下:原始的纯信号和退化信号首先被置于相同的标准测听等级且经过一个滤波器的滤波,这些信号因为时间延迟要进行时间校准,然后通过一个听觉转换器的处理得到响度谱。原始信号和退化信号在响度上的差别通过时间和频率的计算和平均可以产生主观质量评级预测。PESQ产生一个1.0~4.5的得分,得分越高表示质量越好。来自互联网语音协议的应用中,大量的测试条件通过使用PESQ评价方法与主观测听测试达到了极高的相关度(r>0.92)。PESQ评价方法的结构如图所示。

——————————————————————————

十种客观评价语音质量的方法

语音客观评价标准一般分为语音质量评价和语音可懂度评价,这里先介绍语音质量评价。提起语音质量评价,大家第一个想到的肯定是信噪比这个十分常用的评价标准以及它的相关衍生标准,这里总结一些常用的语音质量评价标准供大家参考和使用。

基于SNR的语音质量评价标准

SNR和分段SNR

基于SNR的评价标准想必大家都已经有所了解, 我们首先给出信噪比的定义

但是我们知道语音是短时平稳性的,在语音长度较长的情况下对整体按上式求信噪比,于是有了分段信噪比(segmental SNR),其计算公式为:

其中L为语音长度,M为语音帧数,N为语音帧长度,x(n)为原始语音,x_hat(n)为增强后的语音。但是上述的计算方法会出现一个问题,那就是当语音静音部分较多时会降低信噪比的值,为了解决这一问题可以使用VAD检测的方法在只有语音段才计算信噪比。另外一种方法就是限制信噪比在一定范围内如[-10, 35dB]这样就不需要额外进行VAD检测。

频域SNR

值得一提的是SNR不仅可以在时域进行计算也可以在频域进行计算,频域分段信噪比的计算公式为:

其中K为频带数目,Wj为每个频带的权重。权重可以通过回归分析得到(有兴趣的可以搜索frequency-variant objective measures),另一种方法就是查表,如下表所示。

基于LPC系数的语音质量评价标准

有的算法针对干净语音和增强语音信号的所有LPC模型之间的差异,提出了客观评价标准。我们将语音用p阶全极点模型来表示,即

其中ax就是这节的主角LPC系数,Gx是噪声的激励。

对数似然比距离

那么我们就可以使用对数似然比(Log-Likelihood Ratio, LLR)来评估语音质量,其计算公式为:

同样的将其扩展到频域

其中ax是原始语音的LPC系数,ax_hat是增强后语音的LPC系数,Rx是原始语音LPC系数的自相关矩阵。Ax(ω)对应的是频谱。LLR可以理解为增强信号和原始号的预测残差的能量之比。

Itakura–Saito距离

除了使用LLR之外还有另外一个测度Itakura–Saito, IS,其计算公式为:

其中Gx为增益,计算公式为:

r^T_x是自相关矩阵的第一行。这种方法有个缺点增强信号和原始信号频谱的差异会被这个算法惩罚,但心理声学研究表明频谱水平的差异对质量的影响最小。

倒谱距离

提到LPC不得不让人联想到倒谱,倒谱系数可以从LPC系数递归得到,即

然后我们就可以使用基于倒谱的测度

基于感知的语音质量评价标准

语音质量到底如何主观感受是最重要的,许多工作从听觉机理的角度去对语音质量进行评价。

加权谱倾斜测度

心理声学研究表明,人们对共振峰频率不同的成对元音感觉最敏锐。加权谱倾斜测度(Weighted Spectral Slope, WSS) 首先通过一阶差分来计算每个频段的频谱斜率

然后根据频段是在谱峰值附近还是在波谷附近,峰值是否是最大峰值等条件对谱斜率进行加权,加权公式为:

其中max下标表示全局最大值,locmax表示离其最近的最大值。最后WSS测度可以表示为:

PESQ

PESQ可谓是无人不知,无人不晓虽然它只能检测8000/16000窄带范围内的语音质量,但在很多论文中它被用来评估处理后的语音质量。PESQ的具体细节比较多,如果要写的话需要单独开一篇文章来介绍,因此这里只给出它的流程图。想要了解更多细节可以查看代码的注释。

总结

大多数语音客观评价标准都关注在语音信号的失真程度,较少从人类的听觉去分析,不同评价标准和真实情况的相关系数如下表所示(最后的Composite方法是把上面几种方法加权综合起来得到一个最终的评价结果)。语音评价除了云质量外还有可懂度的评价,它们会在后续的文章中介绍。


本文相关代码是Matlab代码,公众号语音算法组菜单栏点击Code即可获取


参考文献:

[1]. Speech Enhancement Theory and Practice

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STOI(Short-Time Objective Intelligibility)是一种用于评估语音质量的客观指标,它可以用来衡量音频的清晰度和可懂性。以下是一份计算STOI值的Python代码示例: ```python import soundfile as sf import numpy as np def stoi(clean_audio, noisy_audio, sample_rate): """Calculate Short-Time Objective Intelligibility (STOI)""" clean, _ = sf.read(clean_audio) noisy, _ = sf.read(noisy_audio) assert clean.shape == noisy.shape, "Both audios should have the same shape" clean = clean / np.max(np.abs(clean)) noisy = noisy / np.max(np.abs(noisy)) frame_size = int(sample_rate * 0.030) # 30ms hop_size = int(sample_rate * 0.010) # 10ms n_frames = int((len(clean) - frame_size) / hop_size) + 1 clean_stft = np.abs(np.array([np.fft.fft(clean[i:i+frame_size], n=frame_size) for i in range(0, len(clean)-frame_size+1, hop_size)])) noisy_stft = np.abs(np.array([np.fft.fft(noisy[i:i+frame_size], n=frame_size) for i in range(0, len(noisy)-frame_size+1, hop_size)])) clean_stft = clean_stft[:, :int(frame_size/2)] noisy_stft = noisy_stft[:, :int(frame_size/2)] eps = np.finfo(float).eps ratio = np.divide(clean_stft, noisy_stft + eps) log_ratio = np.log10(ratio) log_ratio[np.isnan(log_ratio)] = 0 mean_log_ratio = np.mean(log_ratio, axis=1) modified_mean_log_ratio = np.maximum(np.minimum(mean_log_ratio, 1), -1) stoi_val = np.mean(np.power(10, -0.1 * (modified_mean_log_ratio - 1)), axis=0) return stoi_val ``` 使用方法如下: ```python clean_audio = "clean.wav" noisy_audio = "noisy.wav" sample_rate = 16000 stoi_val = stoi(clean_audio, noisy_audio, sample_rate) print("STOI value:", stoi_val) ``` 其中,`clean_audio`和`noisy_audio`分别是干净语音和带噪语音的文件路径,`sample_rate`是采样率。计算结果以0到1之间的值表示STOI值,值越高表示语音质量越好。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值