本文对工作过程中遇到的音质评估问题作以记录。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。
1. 引言
这篇文章主要想简单地谈一下评估音质的方法。对一段含噪语音降完噪之后,想评估一下其音质,最常想到的方法就是使用 pesq(perceptual evaluation of speech quality) 工具对其进行打分,而计算 pesq 得分需要事先知道含噪语音中的纯干净语音成分,这种音质评估方法就称为有参考音质评估。
2. 方法
而降完噪之后的信号其实包含两部分:语音成分和噪声成分, 如何单独评估降噪算法对干净语音的失真以及对噪声的降噪量那。当然,需要先从降完噪之后的信号中分离出语音成分和噪声成分,下面介绍一种简单的分离方法:
s
^
⃗
c
l
e
a
n
=
<
s
⃗
d
e
n
o
i
s
e
d
,
s
⃗
c
l
e
a
n
>
s
⃗
c
l
e
a
n
∣
∣
s
⃗
c
l
e
a
n
∣
∣
2
\vec{\hat{s}}_{clean}=\frac{\lt\vec{s}_{denoised},\vec{s}_{clean}\gt\vec{s}_{clean}}{||\vec{s}_{clean}||^{2}}
s^clean=∣∣sclean∣∣2<sdenoised,sclean>sclean
其中,
- s ⃗ d e n o i s e d \vec{s}_{denoised} sdenoised:表示降完噪的信号
- s ^ ⃗ c l e a n \vec{\hat{s}}_{clean} s^clean:表示降完噪信号中的语音成分
- s ⃗ c l e a n \vec{s}_{clean} sclean:表示事先知道的含噪语音中的纯干净语音成分
- < a ⃗ , b ⃗ > \lt\vec{a},\vec{b}\gt <a,b>:表示 a ⃗ \vec{a} a 和 b ⃗ \vec{b} b 的点积操作
- ∣ ∣ a ⃗ ∣ ∣ 2 ||\vec{a}||^{2} ∣∣a∣∣2:表示 a ⃗ \vec{a} a 的 2 范数的平方
这种做法的思想是将降完噪之后的信号投影到干净语音上。分离出降完噪信号中的语音成分和噪声成分后就能进一步估计降噪算法对语音的失真以及对噪声的降噪量了,上述公式其实就是计算 SISNR 的公式。
3. 注意事项
在具体实现的过程中需要注意以下两点:
- 在计算投影因子 < s ⃗ d e n o i s e d , s ⃗ c l e a n > ∣ ∣ s ⃗ c l e a n ∣ ∣ 2 \frac{<\vec{s}_{denoised},\vec{s}_{clean}>}{||\vec{s}_{clean}||^{2}} ∣∣sclean∣∣2<sdenoised,sclean> 的时候可以(如每帧 30ms)计算;
- 在计算上述公式中分子的时候, s ⃗ d e n o i s e d \vec{s}_{denoised} sdenoised 和 s ⃗ c l e a n \vec{s}_{clean} sclean 必须对齐,两者之间尽可能不存在延迟。
4. 举例
下面给个例子看一下分离效果:

5. 参考文献
[1] Vincent E , Gribonval R , Fevotte C . Performance measurement in blind audio source separation[J]. IEEE Transactions on Audio, Speech and Language Processing, 2006, 14(4):1462-1469.