单通道语音增强之维纳滤波(三)

来源:互联网 发布:小麦淘商城 知乎 编辑:程序博客网 时间:2024/06/05 11:03

3.1 非迭代维纳滤波算法简介

  上一节中主要介绍了一些利用迭代的方法去近似求解非因果解的维纳滤波增益函数的算法,并且实验结果也表明,利用迭代方法实现的非因果解维纳滤波具有不错的消噪性能。而这一节中,我将着重介绍几种用非迭代的方法去求解的算法,并对它们进行详细的理论分析和实验验证。
  非迭代维纳滤波算法的思想很简单,就是求解下面的非因果解形式的增益函数方程:

这里写图片描述

其中,这里写图片描述这里写图片描述分别表示估计的纯净语音功率谱和噪声的功率谱。因此,如何去估计出这两个功率谱值成为了求解上述方程的关键。接下来,我将介绍两大类基于此方程的非迭代维纳滤波算法,分别是:无约束的非迭代维纳滤波算法和有约束的非迭代维纳滤波算法。

3.2 无约束的非迭代维纳滤波算法

  说到无约束的非迭代维纳滤波算法,就不得不提,Scalart, P. 和 Filho, J.于1996年提出的基于先验信噪比的维纳滤波算法。在他们的算法中,首次提出了用一种判决引导的方法去估计先验信噪比,然后求解增益函数方程。接下来,就详细介绍一下该算法的原理。
  如果我们对增益函数方程,这里写图片描述的分子分母同除以这里写图片描述,于是,我们就得到了下面的基于先验信噪比的增益函数形式:

这里写图片描述

其中,这里写图片描述 表示在频点这里写图片描述估计的先验信噪比。对于先验信噪比的估计,Scalart, P. 和 Filho, J.提出了一种利用后验信噪比和过去的先验信噪比进行加权组合的方法如下:

这里写图片描述

其中,这里写图片描述是一个平滑常数,可以取0.98,这里写图片描述表示在第m-1帧频点这里写图片描述处的增强信号功率谱,这里写图片描述这里写图片描述分别表示第m帧频点这里写图片描述处的带噪语音和噪声功率谱。这种递归关系使得 这里写图片描述 的估计具有较好的平滑性,继而可以消除音乐噪声。
  而在上述的先验信噪比估计方法中,噪声功率谱这里写图片描述是未知的,因此需要我们进行估计。对于该噪声功率谱的估计,这里采用无语音帧时的信号功率谱近似估计得到。除了这种粗略的噪声估计方法,还有MS、MCRA等性能较好的噪声估计方法,我会在后面的噪声估计专题中专门介绍。
  接下来,我们进行实验测试算法的性能,从NOIZEUS语音库中,摘取一段采样率为8kHz的纯净语音,并与白噪声混成0dB和15dB的两段带噪语音。利用算法进行降噪处理,得到其时域波形图如下所示。

这里写图片描述
图一 纯净语音信号的时域波形图

这里写图片描述
图二 带噪语音和增强后语音信号的时域波形图

  图一是纯净语音信号的时域波形图,图二是0dB和15dB带噪语音及其增强后语音的时域波形图。其中左上角为0dB的带噪语音,右上角为增强后的0dB带噪语音,左下角为15dB的带噪语音,右下角为增强后的15dB带噪语音。从仿真试验可以看出,在低信噪比情况下(0dB),基于先验信噪比的维纳滤波算法会有较大的残留噪声,但没有产生音乐噪声,同时也保持了较小的语音失真。而在高信噪比情况下(15dB),也会存在残留噪声,但是语音失真会相对更小。因此,基于先验信噪比的维纳滤波算法可以应用于一些对语音质量要求较高,但又允许一些残留噪声的情况。此外,虽然该算法的消噪能力有限,但是不会产生音乐噪声,且运算复杂度低,完全可以满足某些工程领域对实时处理的要求。

3.3 有约束的非迭代维纳滤波算法

  上面介绍了无约束的非迭代维纳滤波算法,但是有些时候,我们对残留噪声的要求比较高,也就是说,我们希望将残留噪声限制在某一阈值以下,同时还能保持较小的语音失真,于是这就变成了一个约束最优化问题,也就有了下面两种有约束的非迭代维纳滤波算法:噪声失真和语音失真约束的非迭代维纳滤波算法、心理声学约束的非迭代维纳滤波算法。

3.3.1噪声失真和语音失真约束的维纳滤波

  算法的主要思想就是对残留噪声程度和语音失真程度进行约束,首先,我们先量化一下语音失真和噪声失真如下所示:

这里写图片描述
   这里写图片描述

其中,这里写图片描述为噪声功率谱。那么语音失真这里写图片描述和噪声失真这里写图片描述的功率谱均方值可表示为:

这里写图片描述
这里写图片描述

那么,上述误差的总均方值可表示如下:

这里写图片描述

其中,这里写图片描述这里写图片描述分别量化了所引入的噪声失真(可以理解为残留噪声的程度)和语音失真。然而,语音失真和噪声失真是互为矛盾的,我们不可能同时让语音失真和噪声失真都很小,于是便考虑设计一个最小化语音失真的同时将噪声失真限制在某一预设的阈值水平下的最优滤波器。也就是,实现如下目标方程:

这里写图片描述
这里写图片描述

  为了求解上述约束方程,我们引入朗格朗日因子这里写图片描述来求解,于是便推导出如下所示的增益函数表达式:

这里写图片描述

其中,这里写图片描述为估计的先验信噪比,这里写图片描述为拉格朗日乘数可变参数。

  接下来,只需要求解上述增益函数解中的参数这里写图片描述这里写图片描述即可。首先,是先验信噪比这里写图片描述的估计,下面介绍几种先验信噪比这里写图片描述的具体估计方法:

方法1: 利用谱减法估计先验信噪比

这里写图片描述
这里写图片描述

其中,这里写图片描述为过减因子。上述方法首先利用了过减法来大致估计一个纯净语音信号的功率谱,然后再计算先验信噪比的值。

方法2: 判决引导的方法估计先验信噪比

这里写图片描述

这里介绍的判决引导的方法,就是基于先验信噪比的维纳滤波算法中提出的方法,通过对过去和当前的这里写图片描述估计进行递归式的加权组合,使其具有较好的平滑性,从而抵消音乐噪声。

方法3: 先计算先验信噪比的多窗谱比率小波阈值估计法

  因为这里写图片描述的估计波动的大小会影响语音增强的性能,因此除了FFT的谱估计器,我们还可以采用更好的谱估计器来进一步减小波动。这里就介绍一种利用多窗法的谱估计器来改进这里写图片描述的估计。这里写图片描述的具体估计步骤如下:

  1. 首先计算多窗谱的先验信噪比这里写图片描述
        这里写图片描述
        这里写图片描述
        这里写图片描述
        这里写图片描述
    其中,L为窗的数量,可以设置为5,这里写图片描述为第k个数据窗,且这些窗是正交的。这里写图片描述这里写图片描述分别为带噪语音和噪声信号的多窗功率谱。此外,为了消除这里写图片描述的负分量,设置其下限如下:
        这里写图片描述
        这里写图片描述
    这里写图片描述为谱下限因子,可取这里写图片描述

  2. 这里写图片描述取对数并通过小波阈值法得到其对数估计。
    <1> 计算这里写图片描述。其中,C为常数,这里写图片描述为双Digamma函数。
    <2>对这里写图片描述进行离散小波变换(DWT)直到这里写图片描述层(这里写图片描述可设为5),得到各j层的DWT经验系数这里写图片描述
    <3>对小波系数进行阈值处理,并对处理后的小波系数进行逆DWT得到优化后的估计值:这里写图片描述

  3. 利用下列公式进行最终的优化估计。
    这里写图片描述,其中这里写图片描述为真正的先验信噪比,这里写图片描述近似为高斯分布的噪声。于是,我们可以进一步得到:
        这里写图片描述
    即为先验信噪比对数估计值,求其对数逆变换就是最终的估计值。

方法4: 后计算先验信噪比的多窗谱比率小波阈值估计法

  后计算先验信噪比的多窗谱小波阈值估计法,基本的方法和方法3相同,只是最后才计算先验信噪比,具体步骤如下:

  1. 首先分别计算多窗功率谱这里写图片描述这里写图片描述
        这里写图片描述
        这里写图片描述
    为了消除这里写图片描述的负分量,设置其下限如下:
        这里写图片描述
        这里写图片描述
    这里写图片描述为谱下限因子,可取这里写图片描述

  2. 分别对这里写图片描述这里写图片描述求其小波阈值法估计
    <1>计算这里写图片描述这里写图片描述
    <2>对Z(w)进行DWT变换到这里写图片描述层(这里写图片描述可设为5),得到各j层的DWT经验系数这里写图片描述
    <3>对各自的小波系数进行阈值处理,并对处理后的小波系数进行逆DWT得到优化后的估计值:这里写图片描述这里写图片描述
    <4>计算先验信噪比:
        这里写图片描述

  以上便是对先验信噪比的四种估计方法,第二种方法应用最广,第三、四种方法的性能更好,但运算复杂度相对也较高。其实,在基于短时谱的语音增强算法中,先验信噪比和噪声值的估计是决定算法性能好坏最关键的两个参数。在维纳滤波这个专题中,我就先介绍上述这四类先验信噪比的估计方法,还有其他几种比较好的先验信噪比估计方法,我将会在后面的基于统计模型的专题中再一一介绍。
  接下来,再介绍一下在噪声失真和语音失真约束的维纳滤波算法中另一个很重要的参数这里写图片描述的估计。对于朗格朗日因子这里写图片描述的估计,我们可以根据不同的SNR,进行分段计算如下:

           这里写图片描述

           这里写图片描述

           这里写图片描述

其中,这里写图片描述为最大上限值,设为10。而这里写图片描述这里写图片描述这里写图片描述。求完这里写图片描述值和先验信噪比这里写图片描述的值以后,代入增益函数的表达式这里写图片描述即可。

  最后,进行实验仿真验证。实验设置与无约束的非迭代维纳滤波算法一样,也用无语音帧来估计噪声,并采用判决引导的方法来估计先验信噪比,然后分别对0dB和15dB的带噪语音进行测试,并与3.2中算法的时域波形图进行比较如下。

这里写图片描述
图三 0dB时语音和噪声约束的时域波形图

这里写图片描述
图四 15dB时语音和噪声约束的时域波形图

  图三为0dB时,语音和噪声约束的维纳滤波算法与3.2中无约束的维纳滤波算法的时域波形比较。其中,左上角为纯净的语音信号,右上角为0dB的带噪语音信号,左下角为3.2中的算法增强后的0dB语音信号,右下角为本节中介绍的算法增强后的0dB语音信号。从图中,可以看出,对语音和噪声施加约束后,的确可以进一步地抑制噪声,当然相应地也会带来更大一点的语音失真。图四为15dB时,语音和噪声约束的维纳滤波算法与3.2中无约束的维纳滤波算法的时域波形比较。其中,左上角为纯净的语音信号,右上角为15dB的带噪语音信号,左下角为3.2中的算法增强后的15dB语音信号,右下角为本节中介绍的算法增强后的15dB语音信号。从图中,可以看出,在信噪比较高的情况下(15dB),施加约束的算法的性能提升不明显,与3.2中的算法几乎没什么差异,主观听音测试时,很仔细地去听,才会感觉到带约束的算法的残留噪声更少一点。总之,相比于无约束的非迭代维纳滤波算法,本节中对语音和噪音施加约束的方法的确对噪声抑制强度有所提高,并且噪声环境越恶劣,带约束算法的性能优势体现的更明显。虽然语音的失真也会相应的变大,但主观听音时基本不会有所察觉。因此,如果在工程领域要使用维纳滤波算法进行降噪的话,个人认为,本节中介绍的语音失真和噪声失真约束的非迭代维纳滤波算法是最合适的选择,因为它既不需要很高的运算量,还可以取得十分不错的降噪效果,着实是维纳滤波领域十分不错的一种方法。

3.3.2 心理声学约束的维纳滤波

  有关心理声学约束的维纳滤波算法的研究在学术界也有很多,其中最典型的算法,当属语音增强界大牛Loizou于2004年提出的基于听觉掩蔽的算法。很不幸,Loizou老前辈已经与世长辞了,但他对语音增强领域做出的贡献是巨大,包括我最近做的这些专题都是基于他老人家的著作《语音增强理论与实践》一书,Loizou他本人对人耳的听觉特性做了很多研究,并将它们成功地应用到了语音增强算法中去,本节就将介绍一下他本人提出的基于听觉掩蔽的非迭代维纳滤波算法,以表示对他本人深深的缅怀。

  在之前的语音失真和噪声失真约束的非迭代维纳滤波算法中,它考虑了所有频率的平均噪声失真,最小化语音失真的同时,也将噪声失真限制在了一个常阈值水平之下。其实,我们还可以再进行细化,考虑每个频率点上的噪声失真,并将其分别限制在某一阈值之下,这些阈值如果被设置为在相应频率处人耳的掩蔽阈值这里写图片描述,那便有了如下的基于听觉掩蔽的非迭代维纳滤波算法。

  该算法的本质就是求解下面的约束优化问题:

这里写图片描述
这里写图片描述

同样采用3.3.1中的拉格朗日乘数法进行求解,通过一系列的推导,我们会得到其的增益函数表达式如下:

这里写图片描述

其中,这里写图片描述为在频率这里写图片描述处对掩蔽阈值设置的约束。这里写图片描述的求解公式如下:

这里写图片描述

这里写图片描述代入增益函数表达式,就会得到最终的增益函数形式:

这里写图片描述

显然,在新的增益函数表达式中,我们不再需要去估计先验信噪比,只需要估计噪声值这里写图片描述和每个频点处对应的掩蔽阈值这里写图片描述即可。

  对于噪声的估计,Loizou的文章中采用的是MCRA的噪声估计算法,关于该算法的详细介绍可以参考《语音增强理论与实践》第9章,另外,我也会在以后的噪声估计专题中详细介绍该算法。还需要提及的是,Loizou在其2004年的文章中,还利用了多窗功率谱估计的方法来计算噪声功率谱,以达到进一步减小波动的目的。那剩下的就是掩蔽阈值的估计,这里写图片描述的具体大小是根据语音的不同而变化的,简单点说,就是在某个频率处的语音信号会在其所在的频率点和其周围的频率点产生一些掩蔽阈值,如果噪声的幅值低于这些阈值,那么噪声就会被语音信号掩蔽,以至于人耳不会听到这些噪声的存在;相反,如果噪声的幅值高于这些阈值,那么噪声就不会被掩蔽,就会被人耳察觉。正如下图所示:

这里写图片描述

  而我们要做的就是,在具体的一帧中,根据其语音信号的特点估计出该帧中所有频率点处的掩蔽阈值,然后再对其进行有针对的降噪。而对掩蔽阈值这里写图片描述的估计可以参考Johnston于1988年提出的算法,但是在Johnston提出的算法中,我们需要用到纯净语音信号来估计掩蔽阈值,因此我们可以采用简单的谱减法先计算出一个粗略的纯净语音信号值,然后再将其代入到Johnston的算法中,去计算出掩蔽阈值的估计值。

  仿真实验,我们仍然采用0dB和15dB白噪声污染的带噪语音进行算法的性能测试。其时域波形图如下所示:

这里写图片描述
图五 纯净语音信号的时域波形图

这里写图片描述
图六 算法增强后0dB和15dB的语音信号的时域波形图

  图五是纯净语音信号的时域波形图,图六是增强后的语音波形图,其中左上角是0dB的带噪语音,右上角是增强后的0dB带噪语音,左下角是15dB的带噪语音,右下角是增强后的15dB带噪语音。从图中,可以看出,在低信噪比(0dB)的情况下,Loizou的算法表现的并不好,因为它将语音信号也消除了,这是万万不能容忍的。而在高信噪比(15dB)的情况下,性能会好了很多,虽然也有少部分语音丢失,但从波形图上可以看出,噪音还是降得很干净的,并且主观听音测试也听不出噪声的残余。所以,Loizou的算法很好地将噪声抑制在人耳听觉以下,但是也带了语音信号的消除和失真问题,这也是需要在以后的算法中进行改进的。对于语音信号的消除问题,我个人认为与多窗功率谱法有关,过度的噪声平滑,造成了MCRA算法的噪声估计不准,使得部分语音被抵消,而这种噪声估计错误在低信噪比的情况下更加显著,所以就会有图六中的情况出现,通过实验测试,如果我们将MCRA的搜索窗长度由25帧(图六中的测试就使用了25帧的搜索窗长)增加到100帧,那么高信噪比情况下的语音消除问题就会大大改善,但低信噪比情况下依旧不如人意,如图七所示。而且通过对运算时间的测量发现,窗长增加至100帧并没有增加多少运算量,因此,对于Loizou的这套算法,在使用时选择合适的搜索窗长度是十分重要的。另外,语音失真的问题是不可避免的,因为语音失真和噪声失真是相互制约和矛盾的,减小了一个,另一个就会增加。总之,该算法在相对较高的信噪比环境,且对语音失真要求不高,但对噪声残留的干净程度有很高要求的工程领域,还是很有用武之地的。PS:我写的这些都是基于我个人对语音增强的理解,我也知道我的理解可能是错误的、片面的,但是我就是想写点东西,一是为了防止遗忘,二是希望对做语音增强相关研究的人有一点点帮助就好。不管别人怎么看,我都会坚持一直写下去,也许它对你来说可能屁用没有,但是它对于我来说是有意义的,无论如何我都会坚持。

这里写图片描述
图七 100帧搜索窗长时的时域波形图

参考文献:
1.《语音增强理论与实践》(Loizou)
2. Scalart, P. and Filho, J. (1996). Speech enhancement based on a priori signal to noise estimation. Proc. IEEE Int. Conf. Acoust. , Speech, Signal Processing, 629-632.
3. Hu,Y. and Loizou,P.(2004) Incorporating a Psychoacoustical Model in Frequency Domain Speech Enhancement (IEEE SIGNAL PROCESSING LETTERS)
4. Martin, R. (2001). Noise power spectral density estimation based on optimal smoothing and minimum statistics. IEEE Transactions on Speech and Audio Processing, 9(5), 504-512.
5. Johnston J D.(1988) Transform coding of audio signals using perceptual noise criteria[J]. IEEE Journal on Selected Areas in Communications, 1988, 6(2):314-323.

原创粉丝点击