复习两个与噪声有关的参数:SI-SDR和PESQ
说明
在开发和测试降噪算法的过程中,不论是使用传统降噪算法,还是现在新的机器学习的降噪算法,非常重要的一环就是eval,那我们在评估一个语音信号算法的时候,几个常见参数是我们需要关注的。
-
SI-SDR
-
PESQ(Perceptual Evaluation of Speech Quality)
-
STOI(Short-Time Objective Intelligibility)
-
CSIG、CBAK、COVL(来自 P.862.2 标准)
-
MOS(Mean Opinion Score)
接下来简单总结和理解一下几个常见参数
一、SI-SDR
在说明什么是SI-SDR之前,需要了解什么是SDR:
SDR(Signal-to-Distortion Ratio) :传统信噪比指标,衡量总信号能量与失真能量的比值,但对信号缩放敏感。
· SDR 核心定义
SDR 计算的是原始干净信号的能量与处理过程中引入的失真能量的比值,公式如下:
SDR=10⋅log10(∣∣s∣∣2∣∣e∣∣2)SDR = 10 \cdot \log_{10}\left(\frac{||\mathbf{s}||^{2}}{||\mathbf{e}||^{2}}\right)SDR=10⋅log10(∣∣e∣∣2∣∣s∣∣2)
其中,s 是原始干净信号(参考信号),e 是误差信号(处理后信号与原始信号的差值),||·||² 表示信号的能量(L2 范数的平方)
注:L2范式的表达如下:
假设
s=[s1,s2,s3,...,sN]T\mathbf{s} = [s_1, s_2, s_3, ..., s_N]^Ts=[s1,s2,s3,...,sN]T
则∣∣s∣∣=∑n=1Nsn2||\mathbf{s}|| = \sqrt{\sum_{n=1}^{N} s_n^2}∣∣s∣∣=n=1∑Nsn2
误差信号 e\mathbf{e}e是估计信号 s^\hat{\mathbf{s}}s^与原始信号 s\mathbf{s}s的差值: e=s^−s\mathbf{e} = \hat{\mathbf{s}} - \mathbf{s}e=s^−s,其平方 ∣∣e∣∣2||\mathbf{e}||^2∣∣e∣∣2代表估计误差的总能量。
总结SDR:
比值 ∣∣s∣∣2∣∣e∣∣2\frac{||\mathbf{s}||^{2}}{||\mathbf{e}||^{2}}∣∣e∣∣2∣∣s∣∣2是信扰比。SDR 值(以分贝 dB 表示)越高,说明信号失真越小。
SI-SDR的改进和对比
SDR 在计算时允许对估计信号进行任意缩放,这会导致评分失真。其实从公式上就可以很自然的得到结论,在测试的时候尺度的不同会导致这个比值同步的放大,这个SDR的值会跟着幅度相对的移动,这显然不是我们想要的,所以对此,我们需要在进行SDR计算之前,对语音信号进行一个相对应的幅度缩放:
· 核心思想:
核心思想: 在计算误差之前,先将估计信号 s^\hat{\mathbf{s}}s^投影到原始信号 s\mathbf{s}s上,找到与 s\mathbf{s}s最匹配的尺度分量。然后,误差只来自于与 s\mathbf{s}s垂直的失真分量。
定义如下:
-
计算投影(尺度分量): 找到估计信号 s^\hat{\mathbf{s}}s^在原始信号 s\mathbf{s}s方向上的投影。这相当于找到一个最佳缩放系数 α\alphaα,使得 αs\alpha\mathbf{s}αs最接近 s^\hat{\mathbf{s}}s^。
这里的 ⟨s^,s⟩∣∣s∣∣2\frac{\langle \hat{\mathbf{s}}, \mathbf{s} \rangle}{||\mathbf{s}||^2}∣∣s∣∣2⟨s^,s⟩就是最佳缩放系数 α\alphaα。 -
计算误差(失真分量): 从估计信号中减去上面的投影部分,剩下的就是失真。
eresidual=s^−starget\mathbf{e}_{\text{residual}} = \hat{\mathbf{s}} - \mathbf{s}_{\text{target}}eresidual=s^−starget -
计算 SI-SDR: 使用投影后的信号能量除以失真信号的能量。SI-SDR=10⋅log10(∣∣starget∣∣2∣∣eresidual∣∣2)SI\text{-}SDR = 10 \cdot \log_{10}\left(\frac{||\mathbf{s}_{\text{target}}||^{2}}{||\mathbf{e}_{\text{residual}}||^{2}}\right)SI-SDR=10⋅log10(∣∣eresidual∣∣2∣∣starget∣∣2)
SI-SDR最终公式:
SI-SDR=10⋅log10(∣∣αs∣∣2∣∣s^−αs∣∣2)=10⋅log10((sTs^)2∣∣s∣∣2 ∣∣s^∣∣2−(sTs^)2)SI\text{-}SDR = 10 \cdot \log_{10} \left( \frac{ || \alpha \mathbf{s} ||^2 }{ || \hat{\mathbf{s}} - \alpha \mathbf{s} ||^2 } \right) = 10 \cdot \log_{10} \left( \frac{ (\mathbf{s}^T \hat{\mathbf{s}}) ^2 }{ ||\mathbf{s}||^2 \, ||\hat{\mathbf{s}}||^2 - (\mathbf{s}^T \hat{\mathbf{s}})^2 } \right)SI-SDR=10⋅log10(∣∣s^−αs∣∣2∣∣αs∣∣2)=10⋅log10(∣∣s∣∣2∣∣s^∣∣2−(sTs^)2(sTs^)2)
二、 PESQ(Perceptual Evaluation of Speech Quality,语音质量感知评估)
这是一个复杂的算法,用于客观地评估语音质量。它的计算过程模拟了人耳的听觉感知系统。
PESQ 计算核心步骤
PESQ 通过比较原始参考信号(未经失真的干净语音)和待测的退化信号(经过系统处理或压缩后有失真的语音)来计算分数。整个过程可分为以下几个关键步骤
步骤1:预处理与电平对齐
-
输入信号:输入原始的参考信号 xref(t)x_{ref}(t)xref(t)和退化信号 xdeg(t)x_{deg}(t)xdeg(t)。
-
滤波:使用一个模拟标准电话听筒频率响应的滤波器(通常为 300-3400 Hz 带通滤波器)对两个信号进行滤波,以聚焦于语音通信相关的频段。
-
电平对齐:将两个信号的响度调整到相同的标准感知电平(通常是 -26 dBov)。这一步确保了比较是在相同的“音量”下进行,避免单纯的声音大小影响评分。
-
时间对齐:这是非常关键的一步。使用一个精确的算法将退化信号与参考信号在时间轴上对齐,以补偿任何可能的延迟。如果对不齐,得分会毫无意义。
步骤2:听觉变换(模拟人耳感知)
这是 PESQ 的核心,它将信号从时间域转换到类似于人耳听觉的感知域。
-
快速傅里叶变换
-
巴克尺度滤波
-
计算响度
步骤3: 计算感知扰动(计算差异)
在每个时间帧和每个巴克频带上,比较参考信号和退化信号的响度,计算出各种“扰动”(即差异)。主要包括两种:
- 对称扰动
Psym(t,b)=Ldeg(t,b)−Lref(t,b)Lref(t,b)+L0P_{sym}(t, b) = \frac{L_{deg}(t, b) - L_{ref}(t, b)}{L_{ref}(t, b) + L_0}Psym(t,b)=Lref(t,b)+L0Ldeg(t,b)−Lref(t,b)
其中:
· Lref(t,b)L_{ref}(t, b)Lref(t,b)和 Ldeg(t,b)L_{deg}(t, b)Ldeg(t,b)分别是参考信号和退化信号在时间 ttt、巴克频带 bbb上的响度。
· L0L_0L0是一个很小的常数,用于防止分母为零。
· L0L_0L0是一个很小的常数,用于防止分母为零。
- 非对称扰动:
Pasym(t,b)=...P_{asym}(t, b) = ...Pasym(t,b)=...
这种扰动专门用于捕捉信号削波(Clipping) 等引入的非线性失真。其关键在于,它对信号幅度的增加(如噪音)和减少(如削波导致的信号丢失)给予不同的权重。
步骤 4:扰动聚合与概率映射
时间聚合:将每个频带上的扰动随时间进行平均,但对于特别讨厌的短时突发失真(如“咔嗒”声),会给予更高的权重。
频率聚合:将各个巴克频带的扰动值合并为两个总体的扰动值:一个对称扰动密度 DsymD_{sym}Dsym和一个非对称扰动密度 DasymD_{asym}Dasym。
概率映射:将这两个扰动密度代入一个预先定义好的心理声学模型(通常是一个多元回归模型)。这个模型是在大量主观听力测试数据上训练出来的,其目的是将客观的扰动值映射到主观的听觉感受上。
PESQ=a0+a1⋅Dsym+a2⋅Dasym\text{PESQ} = a_0 + a_1 \cdot D_{sym} + a_2 \cdot D_{asym}PESQ=a0+a1⋅Dsym+a2⋅Dasym
输出最终分数
最终,算法会输出一个MOS-LQO 分数。
· MOS:平均意见得分,范围通常为 1(差)到 5(优)。
· LQO:听力质量客观值。
PESQ 的得分范围大致在 -0.5 到 4.5 之间。
· ~4.5:表示质量极好,几乎听不出失真。
· ~3.0:表示质量一般,有些许失真但可接受。
· < 2.0:表示质量较差,难以听清。
PESQ总结
PESQ 的计算流程可以简化为:
电平与时间对齐 -> FFT 转到频域 -> 巴克尺度滤波(模拟人耳) -> 计算瞬时响度 -> 计算对称与非对称扰动 -> 时间/频率聚合 -> 通过心理声学模型映射到主观MOS分数。
与 SI-SDR 等基于波形能量的指标不同,PESQ 的优势在于它高度模拟了人耳的真实听觉感知,因此其评分结果与人类的主观听感有很高的相关性。它特别擅长评估编码失真、包丢失、抖动和噪音等对语音质量的影响。