语音增强原理之增益因子

  上次关于语音增强的原理讲说了噪声估计问题,这次打算说下增益因子如何确定,也就是当噪声已知后,如何进行去噪的问题(把增益因子与带噪语音相乘即可)。这里主要说下MMSE滤波,顺带说下谱减法、维纳滤波。当然也有其它方式来实现语音增强的,比如基于矩阵分解原理的子空间法、基于自适应滤波器的降噪,有的方法icoolmedia比较清楚,有的也还在学习之中,同时也欢迎各位朋友就不足之处批评指正。

  先说下经典的谱减法。我们还是假设带噪语音y(n)由纯净语音x(n)和加性噪声d(n)组成,其时域表示与频域表示为

\[\begin{array}{l}
 y(n) = x(n) + d(n) \\
 Y(\omega ) = X(\omega ) + D(\omega ) \\
 \end{array}\]

  在语音增强领域中,最常使用的是频域功率谱形式,那么,带噪语音的功率谱可以表示为Y与其共轭相乘,展开可得

\[\begin{array}{l}
 |Y(\omega ){|^2} = [X(\omega ) + D(\omega )][{X^*}(\omega ) + {D^*}(\omega )] \\
  = |X(\omega ){|^2} + |D(\omega ){|^2} + X(\omega ){D^*}(\omega ) + {X^*}(\omega )D(\omega ) \\
  = |X(\omega ){|^2} + |D(\omega ){|^2} + 2{\mathop{\rm Re}\nolimits} \{ X(\omega ){D^*}(\omega )\}  \\
 \end{array}\]

  展开式的第三项被称为交叉项,当纯净语音与加性噪声不相关时,交叉项为0,那么,当我们已经估计出噪声信号的功率谱时,纯净语音信号的估值就可以表示为

\[|\hat X(\omega ){|^2} = |Y(\omega ){|^2} - |\hat D(\omega ){|^2}\]

  根据线性滤波理论,可以将这个滤波过程建模为

\[|\hat X(\omega ){|^2} = {H^2}(\omega )|Y(\omega ){|^2}\]

  综合以上两式,H可以表示为

\[H(\omega ) = \sqrt {\frac{{|\hat X(\omega ){|^2}}}{{|Y(\omega ){|^2}}}}  = \sqrt {\frac{{|Y(\omega ){|^2} - |\hat D(\omega ){|^2}}}{{|Y(\omega ){|^2}}}}  = \sqrt {1 - \frac{{|\hat D(\omega ){|^2}}}{{|Y(\omega ){|^2}}}} \]

  这里的H,就是线性滤波系统的传递函数,在语音增强领域,通常也称为增益函数/抑制函数、或者增益因子/抑制因子,都是是同一个意思。另外,要注意,上面的这个增益因子表示只是一个理想的过程。因为当从带噪语音中减去估计噪声后,总会遗留一些或长或短的小谱峰,这些谱峰比较影响听感。这种现象就是出现了音乐噪声。因此,如果谱减法要实际使用时,必须做如下改变。

  • 当对噪声估计过高时,就出现了过估计现象,很可能估计出来的噪声功率大于带噪语音的功率,这时,不能简单的把纯净语音的功率置0,而应该设置与噪声相关的一个谱下限值。设置谱下限的目的在于缩小遗留的小谱峰的差异,控制残留噪声的多少和音乐噪声的大小
  • 人为的对噪声多减去一部分,这样做的目的是为了尽可能的减少小谱峰的遗留,避免音乐噪声。

  经过这两方面的改变,谱减法具有如下形式:

\[|\hat X(\omega ){|^2} = \left\{ {\begin{array}{*{20}{c}}
   {|Y(\omega ){|^2} - \alpha |\hat D(\omega ){|^2}}  \\
   {\beta |\hat D(\omega ){|^2}}  \\
\end{array}} \right.\]

  这里当存在语音时,用第一个式子,当没有语音存在时,就用下面的式子,其中,alpha就是过减因子,取为一个大于1的值,beta为一个远小于1的值,具体取值范围请参考Berouti等人的论文:Enhancement of speech corrupted by acoustic noise,这里不再详加叙述。

  这时,当存在语音时谱减法的增益因子就变为

\[H(\omega ) = \sqrt {\frac{{|Y(\omega ){|^2} - \alpha |\hat D(\omega ){|^2}}}{{|Y(\omega ){|^2}}}}  = \sqrt {\frac{{\gamma (\omega ) - \alpha }}{{\gamma (\omega )}}} \]

  这里的gamma是后验信噪比,为带噪语音与噪声的功率之比。谱减法增益因子就说完了。频域维纳滤波的增益因子可以参考我以前写的博客一个频域语音降噪算法实现及改进方法中的内容,里面有详细的推导过程,这里就不详加叙述了。下面重点说下MMSE降噪算法是如何确定增益因子的。

  MMSE估计器用在语音增强之中,就是在贝叶斯准则下估计出来的纯净语音频幅度与实际幅度的均方误差最小,因此,也可以称为贝叶斯MSE。而要做到这一点,我们可以充分利用带噪语音的先验信息来提高估计的准确性。即,假定我们已知信号的噪声DFT系数的概率密度,在此基本上,充分利用这种已知的先验信息,提高估计的准确性。因此,贝叶斯MSE用公式表示如下:

\[Bmse({\hat X_k}) = E[{({X_k} - {\hat X_k})^2}] = \int {\int {{{({X_k} - {{\hat X}_k})}^2}} } p(Y,{X_k})dYd{X_k}\]

  我们来推导下使贝叶斯MSE最小的估计量,首先应用贝叶斯原理,联合概率密度可以写为:\[p(Y,{X_k}) = p({X_k}|Y)p(Y)\]

所以

\[Bmse({{\hat X}_k}) = \int {\left[ {\int {{{({X_k} - {{\hat X}_k})}^2}} p({X_k}|Y)d{X_k}} \right]} p(Y)dY\]

对中括号中的积分求导

\[\begin{array}{l}
 \frac{d}{{d{{\hat X}_k}}}\int {{{({X_k} - {{\hat X}_k})}^2}} p({X_k}|Y)d{X_k} = \int {\frac{d}{{d{{\hat X}_k}}}} {({X_k} - {{\hat X}_k})^2}p({X_k}|Y)d{X_k} \\
  = \int { - 2(} {X_k} - {{\hat X}_k})p({X_k}|Y)d{X_k} \\
  =  - 2\int {{X_k}p({X_k}|Y)d{X_k}}  + 2{{\hat X}_k}\int {p({X_k}|Y)d{X_k}}  \\
 \end{array}\]

令等式等于0,得

\[{{\hat X}_k} = \int {{X_k}p({X_k}|Y)d{X_k}}  = E[{X_k}|Y] = E[{X_k}|Y({\omega _0})Y({\omega _1})...Y({\omega _{N - 1}})]\]

  在此我们假设傅里叶变换系数之音是统计独立的。因此上式可以表示为

\[{{\hat X}_k} = E[{X_k}|Y({\omega _0})Y({\omega _1})...Y({\omega _{N - 1}})] = E[{X_k}|Y({\omega _k})] = \int {{X_k}p({X_k}|Y({\omega _k}))d{X_k}} \]

  可以看到,要想得到MMSE估计器,我们首先需要计算纯净语音第k个分量的后验概率密度函数,它可以通过贝叶斯准则得到:

\[p({X_k}|Y) = \frac{{p(Y({\omega _k})|{X_k})p({X_k})}}{{p(Y({\omega _k}))}} = \frac{{p(Y({\omega _k})|{X_k})p({X_k})}}{{\int {p(Y({\omega _k})|{x_k})p({x_x})d{x_k}} }}\]

  这里xk是随机变量Xk的实际值。把上面这个后验概率密度函数表达式代入我们推导出来的MMSE估计器中

\[{{\hat X}_k} = E[{X_k}|Y({\omega _k})] = \int\limits_0^\infty  {{x_k}p({x_k}|Y({\omega _k}))d{x_k}}  = \frac{{\int\limits_0^\infty  {{x_k}p(Y({\omega _k})|{x_k})p({x_k})} d{x_k}}}{{\int\limits_0^\infty  {p(Y({\omega _k})|{x_k})p({x_x})d{x_k}} }} = \frac{{\int\limits_0^\infty  {\int\limits_0^{2\pi } {{x_k}p(Y({\omega _k})|{x_k},{\theta _k})p({x_k},{\theta _k})d{\theta _k}d{x_k}} } }}{{\int\limits_0^\infty  {\int\limits_0^{2\pi } {p(Y({\omega _k})|{x_k},{\theta _k})p({x_x},{\theta _k})d{\theta _k}d{x_k}} } }}\]

其中

\[\begin{array}{l}
 p(Y({\omega _k})|{x_k},{\theta _k}) = \frac{1}{{\pi {\lambda _d}(k)}}\exp \left\{ { - \frac{1}{{{\lambda _d}(k)}}|Y({\omega _k}) - X({\omega _k}){|^2}} \right\} \\
 p({x_x},{\theta _k}) = \frac{{{x_k}}}{{\pi {\lambda _k}(k)}}\exp \left\{ { - \frac{{x_k^2}}{{{\lambda _k}(k)}}} \right\} \\
 \end{array}\]

代入MMSE估计器中,我们最终得到MMSE幅度谱估计器(推导过程请参考:语音增强-理论与实践中的附录B)

\[{{\hat X}_k} = \frac{{\sqrt {{v_k}} }}{{{\gamma _k}}}\Gamma (1.5)\Phi ( - 0.5,1; - {v_k}){Y_k}\]

其中,Γ(.)为伽马函数,Φ(a,b;c)为合流超几何函数,ξ为先验信噪比、最后一个式子为后验信噪比。

\[\begin{array}{l}
 {v_k} = \frac{{{\xi _k}}}{{1 + {\xi _k}}}{\gamma _k} \\
 {\xi _k} = \frac{{{\lambda _x}(k)}}{{{\lambda _d}(k)}} \\
 {\gamma _k} = \frac{{Y_k^2}}{{{\lambda _d}(k)}} \\
 \end{array}\]

最后,把合流超几何函数写成贝塞尔函数的形式,我们就得到了最终的MMSE估计器的表达式:

\[{{\hat X}_k} = \frac{{\sqrt \pi  }}{2}\frac{{\sqrt {{v_k}} }}{{{\gamma _k}}}\exp \left( { - \frac{{{v_k}}}{2}} \right)\left[ {(1 + {v_k}){I_0}\left( {\frac{{{v_k}}}{2}} \right) + {v_k}{I_1}\frac{{{v_k}}}{2}} \right]{Y_k}\]

  如果我们定义:

  \[G({\xi _k},{\gamma _k}) = \frac{{{{\hat X}_k}}}{{{Y_k}}} = \frac{{\sqrt \pi  }}{2}\frac{{\sqrt {{v_k}} }}{{{\gamma _k}}}\exp \left( { - \frac{{{v_k}}}{2}} \right)\left[ {(1 + {v_k}){I_0}\left( {\frac{{{v_k}}}{2}} \right) + {v_k}{I_1}\frac{{{v_k}}}{2}} \right]\]

的话,这里G就是我们要求的MMSE幅度估计器的增益。

  另外想说一下,MMSE估计的推导思路我弄明白了,主要是通过参考《语音增强-理论与实践》、《统计信号处理基础-估计与检测理论》这两本书做到的,但关于合流超几何函数与贝塞尔函数的推导内容还没完全搞明白,如果不是对理论推导过程非常感兴趣的话,这里也没有必要深究,只要会使用这个结果就行了。

  使用MMSE做语音增强,经典的出处应该是Speech enhancement using minimum mean-square error这篇论文,但里面讲的并不详细,这里尽可能的给出能让大家理解流程的推导。当然,如果感兴趣的话,icoolmedia还是推荐大家最好都认真看一遍上面提到的资料。

时间: 07-02

语音增强原理之增益因子的相关文章

自适应滤波:维纳滤波器——GSC算法及语音增强

作者:桂. 时间:2017-03-26  06:06:44 链接:http://www.cnblogs.com/xingshansi/p/6621185.html 声明:欢迎被转载,不过记得注明出处哦~ [读书笔记04] 前言 仍然是西蒙.赫金的<自适应滤波器原理>第四版第二章,首先看到无约束维纳滤波,接着到了一般约束条件的滤波,此处为约束扩展的维纳滤波,全文包括: 1)背景介绍: 2)广义旁瓣相消(Generalized Sidelobe Cancellation, GSC)理论推导: 3)

一个频域语音降噪算法实现及改进方法

发现很多朋友想进入语音降噪处理的大门,却很容易被铺天盖地的理论弄的很迷惑,不知道从哪里开始比较好.网上给出的参考文章大多干说理论,没有代码实现.很不利于学习.于是打算写这篇语音降噪的文章,并给出相应的实现代码方便交流和进一步的学习. 一.算法核心思想与流程概要 本文给出的降噪算法的核心流程很简单,主要是两个步骤: 环境噪声的假设与估计 频域维纳滤波降噪 这里简单说一下语音相位问题,通常在语音的降噪算法中,是不考虑纯净语音的相位问题的,这是因为理论上可以证明:带噪语音相位就是纯净语音相位的最优估计

【论文:麦克风阵列增强】Speech Enhancement Based on the General Transfer Function GSC and Postfiltering

作者:桂. 时间:2017-06-06  16:10:47 链接:http://www.cnblogs.com/xingshansi/p/6951494.html 原文链接:http://pan.baidu.com/s/1i51Kymp 未完待续 前言 这篇文章是TF-GSC的改进版.虽然TF-GSC对于方向性干扰的抑制效果不错,对于弥散噪声(diffuse noise,题外话:不同方向directional noise的均值,或者接近这种效果,可以理解为diffuse noise.)TF-GS

数字语音信号处理学习笔记——语音信号的短时时域分析(1)

3.1 概述 语音信号是一种非平稳的时变信号,它携带着各种信息.在语音编码.语音合成.语音识别和语音增强等语音处理中都需要提取语音中包含的各种信息.一般而言语音处理的目的有两种:一种是对语音信号进行分析,提取特征参数,用于后续处理:另一种是加工语音信号,例如在语音增强中对含噪语音进行背景噪声抑制,以获得相对"干净"的语音:在语音合成方中需要对分段语音进行拼接平滑,获得主观音质较高的合成语音,这方面的应用同样是建立在分析并提取语音信号信息的基础上的.总之,语音信号分析的目的就在于方便有效

自适应滤波——第二章:维纳滤波器(1)

作者:桂. 时间:2017-03-23  06:28:45 链接:http://www.cnblogs.com/xingshansi/p/6603263.html 声明:欢迎被转载,不过记得注明出处哦~ 前言 仍然是西蒙.赫金的<自适应滤波器原理>第四版,距离上次看这本书已经过去半个月,要抓点紧了.本文主要包括: 1)何为维纳滤波器(Wiener Filter); 2)Wiener滤波器的推导: 内容为自己的学习总结,内容多有参考他人,最后一并给出链接. 一.维纳滤波器简介 A-基本概念 对于

基于谱减法的声音去噪

转载请注明出处: http://xiahouzuoxin.github.io/notes/ 谱减法模型 实际听觉环境中,肯定是含有噪声的,那掺杂有噪声的声音信号中原声音信号和噪声信号是如何体现的呢?一种普遍被使用的方法是:采集到的声音信号永远都是原信号与噪声信号的叠加,即 模型是信号的直接叠加,这就要满足:原信号与噪声信号不相关.其实有些情况下这个条件是不满足的,所以依然有很多其他的模型,如有人认为原信号和噪声信号是卷积的关系.当然,这些都是模型,还没有明确的理论证明那种是对的,反正哪种好用我们

iOS进阶学习-即时通讯(2)

本篇是续接即时通讯(1). 一.好友列表 管理好友列表是通过XMPP中的花名册(XMPPRoster).代码示例: #pragma mark - 管理好友 // 获取管理好友的单例对象 XMPPRosterCoreDataStorage *rosterStorage = [XMPPRosterCoreDataStorage sharedInstance]; // 给roster属性进行初始化 self.xmppRoster = [[XMPPRoster alloc] initWithRoster

Chapter 1:Introduction

作者:桂. 时间:2017-05-24  08:06:45 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 1.语音增强(speech enhancement)主要从攻/防两面入手:quality + intelligibility,quality希望噪声尽可能抑制; intelligibility希望语音信号失真不严重,很多算法只从quality角度去分析问题. 2.语音增强的影响因素很多: 应用场景 比如空旷的原野

LMS算法去噪

LMS在语音增强中具备广泛的应用,是最为常见的算法之一,该算法也是很多更为复杂算法的理论基础或 组成部分,例如阵列语音增强中的重要方法--GSC(广义旁瓣抵消).LMS算法由最初的版本延伸出来许多变种结构,例如归一化LMS,变步长LMS等等.这些都是对LMS的迭代部分进行了一定的优化所得. 最近又看起了GSC的实现,以前写的程序又重新看了一遍,差不多又巩固了一遍,希望以后自己能够不要忘记了····我这个破记性,有时候真是很无奈! 首先是理论部分推导,在此不详述,简要给出流程: 自适应线性组合器及