上篇“几种常用的噪声估计算法(一)”主要介绍了分位数噪声估计、直方图噪声估计和最小值跟踪噪声估计算法,本篇主要介绍基于递归平均噪声估计算法及其衍生算法。由于是同一篇文章的上下两部分,所以采用相同的标题序列。
4、递归平均噪声估计算法(the recursive-averaging type of noise-estimation algorithms)
时间递归平均算法利用了噪声信号对语音频谱通常具有非均匀影响的观察结果,即频谱的某些区域受噪声的影响比其他区域更大。换句话说,每个光谱成分通常都有不同的有效信噪比。当某一频段的有效信噪比极低时,我们可以估计和更新噪声谱的各个频段。同样地,当语音出现在特定频段的概率较低时,我们可以更新噪声频谱的单个频带。这种观察导致了递归平均类型的算法,在这种算法中,噪声频谱被估计为过去噪声估计和当前噪声语音频谱的加权平均。权值根据每个频域的有效信噪比或语音存在概率自适应变化。递归平均噪声估计算法主要使用信噪比相关、加权谱平均、基于信号存在概率等方法。
(1)SNR依赖的递归平均(SNR-dependent recursive averaging):
SNR依赖的递归平均本质是将后验信噪比通过函数映射为alpha,主要有两个映射函数:
首先计算后验信噪比:
映射函数1)
映射函数2)
上面两个映射函数中,β和p都是常数因子,其取值,影响噪声估计性能。
(2)加权谱平均(weighted spectral averaging):
加权谱平均采用固定的平滑因子,但是通过信噪比的比较来确定什么时候更新噪声谱估计。
1)
上式中β表示后验信噪比阈值,其大小选择影响噪声估计性能。一般选择2.5.
图9.17是上述算法估计出的噪声,箭头指示的地方出现了明显的过估计现象。过估计主要发生在信噪比较低的时候,尤其是前面有高能量成分时。2)为了克服过估计问题,对1)进行如下改进:
图9.18是上述算法估计出的噪声,其中δ = α = 0.9 、ε = 2.5。很多情况下,有效的消除了过估计误差。3)
图9.19是上述算法估计出的噪声, γ = 0.85, β = 1.2, and α = 0.9.除了个别过估计片段,该算法表现良好。β和γ阈值可用于控制噪声谱的增减速率, γ = 0.85, β = 1.2, and α = 0.9.,选择这些阈值使噪声估计的增长不超过3 dB / s或下降不超过12 dB / s。
(3)基于语音存在概率的递归平均算法(recursive-averaging algorithms based on signal-presence uncertainty):
(1)
(2)
在MMSE准则下:
(3)
上式表示基于语音存在概率的递归平均算法的一般形式,式中P分别代表语音不存在的条件概率和语音存在时的条件概率。在现有的统计检测框架下,条件概率被认为是平滑因子。
下面是几种不同的语音确实概率估计方法:
1)似然比方法(Likelihood Ratio Approach)
(贝叶斯公式)
(4)
(5)
(6)
上式中:r是先验语音存在概率和语音缺失概率比;Λ(λ, k)是似然比。
(7)
将公式(4)(7)带入到(3)中,得到(8):
(8)
当语音不存在时,
可以使用短时功率谱Y^2近似;当语音存在时,
可以使用上一帧的噪声功率谱估计近似,于是得到公式(9):
(9) 假设在高斯统计模型下:
(10) (10)中两式相除得到(11):
(11)
公式(11)中的 ξk(先验信噪比可以通过DD引导判决方法(公式12)得到)
(12)
似然比Λ(λ, k)我们可以使用其几何平均代替,计算公式为(13),式中 L 为频点。
(13) 将
和公式(11)带入公式(13),得到:
(14)
最终得到公式(15),式中的α不再是频率k的函数,可以用在所有的频率上:
(15)
图片9.20是r = 0.05使用公式(15)估计的噪声,从图中可以看出,2-2.5s时,出现过估计,由于α不准确导致。 上述就是似然比方法(Likelihood Ratio Approach)的详细推理过程。另外还有一些其他的方法:
i:
在公式(9)中,我们直接使用前一帧的噪声谱估计近似
。另一种方法是采用高斯统计模型计算,公式如下:
(16)
公式(16), ξk(先验信噪比可以通过DD引导判决方法(公式12)得到),采用噪声信号的长时平滑PSD而不是均方估计来更新噪声PSD.
(17)
ii:
另外一种算法依然采用公式(15)进行估计,不同之处在于α的取值:
(18)
两种算法的相似之处都是采用了后验SNR的平均
。而后者则把α限制在了0.8到0.98之间。
2)最小值控制的递归平均算法(Minima-Controlled Recursive-Averaging (MCRA) Algorithms)
上一节中,我们推导出α(λ, k)依赖于语音存在条件概率
,实际上,
。有三种方法计算语音存在条件概率:1)含噪语音功率谱与其局部最小值的比值与阈值进行比较。条件概率(平滑因子)受谱最小值控制,因此被称为minima-controlled recursive-averaging (MCRA)算法。2)第二种方法与第一种类似,不同之处在于采用不同算法跟踪含噪语音PSD的最小值。3)采用公式(7)计算条件概率,不同之处在于上述算法中的先验信噪比是定值,此处需要计算。
i:MCRA
(19)
均方估计:
(20)
(21)
表示语音存在的条件概率。
(22)
上式中:
。不同于SNR-dependent methods,平滑因子在0到1之间变化,αd大于等于α,小于等于1。三种不同的时间递归方法估计p(λ, k),进而得到αd。 MCRA算法使用含噪语音功率谱与其局部最小值的比值与阈值进行比较。需要计算含噪语音功率谱的局部最小值,采用简化的MS算法(最小值跟踪中的最小统计算法)。
(23)
(24)
公式(23)(24)用来计算含噪语音功率谱。(23)中αs是平滑因子,(24)中w为窗函数,一般选择汉明窗,2*L+1是窗长。当前时刻,频点k上下L频带加窗平滑。采用公式(25)寻找最小值Smin。
(25)
含噪语音功率谱与其局部最小值的比值Sr定义如下(该定义与后验信噪比定义相似,Smin就是噪声PSD,S就是含噪语音PSD):
(26)
Sr和设定的阈值比较,就可以得到p(λ, k)的当前值,再使用公式(28)平滑得到最终的p(λ, k)。
(27)
(28)
以上便是MCRA算法的推导过程,下面是算法步骤:
图9.21是使用MCRA算法估计噪声的例子。(b)是估计的p(λ, k),虽然最后对其平滑,但是最终结果大多数情况下依然是0-1二值,因为在时间窗D内,其一般保持恒定。
ii:MCRA-2
MCRA算法估计噪声可能会滞后,尤其是噪声能量增大的时候。MCRA-2算法不再使用MS方法跟踪PSD最小值,而是使用连续谱最小值跟踪算法(公式29),这个算法的好处在于不再受时间窗D的限制。另外对阈值也进行了公式(30)调整(公式(30)的阈值可以根据噪声类型不同,自己设置):
(29)
(30)
MCRA-2算法步骤如下:
上图是MCRA算法和MCRA-2算法对比,1.8s时噪声能量变大,MCRA算法跟踪需要1s左右的时间。MCRA-2优于MCRA。另外MCRA-2降噪后的语音在可懂度等方面也优于MCRA,接近MS算法(最小值跟踪中的最小统计算法)。
iii:IMCRA
IMCRA算法不再使用公式(27)的方法计算p(λ, k),而是使用
和
得到公式(31):
(31) 将公式31的计算结果带入公式22,得到噪声谱估计:
(32)
将计算得到的噪声谱估计乘以补偿因子β=1.47,以减小语音失真。
公式31中需要计算q(λ, k)(语音不存在的先验概率)。q(λ, k)的估计受含噪语音平滑功率谱的最小值控制。该方法包含平滑和最小值跟踪两个迭代过程。第一个迭代提供每个频点的粗略VAD,第二次迭代中的平滑排除了相对强的语音成分,从而允许使用更小的窗口完成最小值的跟踪。短窗口可以更好地跟踪高的非平稳噪声。
第一个迭代的平滑操作与MCRA中公式23、24、25类似,得到Smin。然后使用以下规则进行语音存在与否的粗略判断:
(33)
Bmin表示最小值噪声估计的偏差。 第二次迭代的平滑只对(33)确定的主要包含噪声的谱进行。
(34)
(35)
34中的平滑过程排除了高能量语音成分,这将允许我们选择较大的平滑窗口(即35式中大的αs)和较小的最小搜索窗口,选择较小的窗长D对于最小跟踪是重要的,因为我们可以减少响应噪声功率上升的延迟。下图中a是使用公式23估计的S(λ, k),b是使用公式34、35估计出的S(λ, k)。可以看出,确实滤除了高能量语音信号。
可以对公式35中的~S(λ, k)进行最小值跟踪。先验语音不存在的概率:
(36)
上式中,只使用ζ (λ,k)不能检测微弱的语音成分。两个阈值一起使用,可以阻止微弱语音部分(低信噪比时)估计的噪声水平增长。
通过比较,IMCRA算法对噪声的估计误差最小。