語(yǔ)音增強(qiáng)原理之噪聲估計(jì)
語(yǔ)音增強(qiáng)的整個(gè)過程,通常假設(shè)噪聲為加性隨機(jī)平穩(wěn)噪聲,且語(yǔ)音短時(shí)平穩(wěn),下面的原理描述中,都是在這兩個(gè)假設(shè)前提之下來(lái)做的。整個(gè)語(yǔ)音增強(qiáng)的流程大致可以分為兩大部分
一、噪聲估計(jì)
二、衰減因子(有的地方也叫做增益因子)的計(jì)算
最后,把衰減因子應(yīng)用于帶噪語(yǔ)音,就可以得到我們期望的“純凈語(yǔ)音”。語(yǔ)音增強(qiáng)最難的部分,應(yīng)該是噪聲估計(jì),而不是衰減因子的確定。因些這里重點(diǎn)說下噪聲估計(jì)部分,要進(jìn)行噪聲估計(jì)的話,先要了解帶噪語(yǔ)音的特點(diǎn),根據(jù)這些特點(diǎn)進(jìn)行噪聲的估計(jì),那么,帶噪語(yǔ)音都有哪些特點(diǎn)呢?
(1)噪所對(duì)語(yǔ)音頻譜的影響在頻率上是不均勻的,有的頻譜區(qū)域影響大,有的頻譜區(qū)域影響小,很自然就可以想到,可以利用各頻帶來(lái)估計(jì)噪聲,當(dāng)特定頻帶的信噪比或者語(yǔ)音存在概率比較低時(shí),可以獨(dú)立更新噪聲譜,這就是時(shí)間遞歸平均型噪聲估計(jì)算法的出發(fā)點(diǎn)
(2)即便是在語(yǔ)音活動(dòng)期間,單個(gè)頻帶的帶噪語(yǔ)音功率通常都會(huì)衰減到噪聲的功率水平,這是最小值跟蹤噪聲估計(jì)算法的出發(fā)點(diǎn)。通過在每個(gè)頻帶跟蹤帶噪語(yǔ)音功率的最小值,可以得到該頻帶噪聲水平的一個(gè)粗略估計(jì)。
speex使用的噪聲估計(jì)算法結(jié)合了這兩個(gè)特性,我們分別說下根據(jù)上面兩個(gè)特性延伸出來(lái)的兩個(gè)噪聲估計(jì)算法:最小值跟蹤、時(shí)間遞歸平均。先說下最小值跟蹤噪聲估計(jì)算法,這類估計(jì)算法主要有三種:最小值統(tǒng)計(jì)、最小值搜索、連續(xù)譜最小值跟蹤。
最小值統(tǒng)計(jì)算法是通過統(tǒng)計(jì)過去D幀的各頻點(diǎn)最小值、計(jì)算相應(yīng)的偏差因子來(lái)估計(jì)噪聲的,具體內(nèi)容請(qǐng)參考論文:Noise Power Spectral Density Estimation Based on Optimal Smoothing and Minimum Statistics。這里不再詳細(xì)闡述。
最小值搜索是以遍歷的方式查找過去D幀各頻點(diǎn)的最小值來(lái)估計(jì)噪聲的,這種方法有的地方也稱為最小值查找
連續(xù)譜最小值跟蹤具體內(nèi)容請(qǐng)參考一個(gè)頻域語(yǔ)音降噪算法實(shí)現(xiàn)及改進(jìn)方法中的內(nèi)容,這里同樣也不再詳述。
下面再說下時(shí)間遞歸平均型噪聲估計(jì)算法。這種方法是要用以下的通用形式來(lái)估計(jì)噪聲
\[\hat \sigma _d^2(\lambda ,k) = \alpha (\lambda ,k)\hat \sigma _d^2(\lambda - 1,k) + [1 - \alpha (\lambda ,k)]|Y(\lambda ,k){|^2}\]
這里lamda表示幀數(shù),k表示頻點(diǎn)索引,Y表示頻域的帶噪語(yǔ)音譜,sigma表示噪聲譜,alpha表示平滑因子,這類噪聲估計(jì)算法就是要求出時(shí)頻相關(guān)平滑因子,然后就可以用上式來(lái)估計(jì)噪聲,平滑因子可以基于信噪比來(lái)求,也可以是一個(gè)固定的值。但更常用的是基于頻點(diǎn)k處語(yǔ)音存在或不存在的概率來(lái)計(jì)算,隨后可以看到這個(gè)平滑因子與語(yǔ)音存在概率之間的關(guān)系。
先簡(jiǎn)單說下基于信噪比的遞歸平均噪聲估計(jì)算法,他的主要思想是,當(dāng)信噪比大時(shí)(表示有語(yǔ)音的可能性大),使平滑因子趨向于1,即傾向于使用前一幀的噪聲來(lái)做為當(dāng)前幀的噪聲估計(jì),當(dāng)信噪比小時(shí)(表示沒有語(yǔ)音,全是噪聲可能性大),使平滑因子趨向于0,表示盡可能的用當(dāng)前幀的功率來(lái)做為噪聲估計(jì)。這種方法主要工作考慮是如何在信噪比與平滑因子之間建立函數(shù)關(guān)系或者分段函數(shù)關(guān)系。
再重點(diǎn)說下基于信號(hào)存在概率的遞歸平均算法。我們先看把條件概率引入時(shí),計(jì)算噪聲的方式如何變化,我們首先把噪聲功率譜密度表示為
\[\sigma _d^2(\lambda ,k) = E\{ |D(\lambda ,k){|^2}\} \]
那么,在最小均方誤差意義上最優(yōu)的噪聲功率譜密度可以表示為
\[\sigma _d^2(\lambda ,k) = E[\sigma _d^2(\lambda ,k)|Y(\lambda ,k)] = E[\sigma _d^2(\lambda ,k)|{H_0}]P({H_0}|Y(\lambda ,k)] + E[\sigma _d^2(\lambda ,k)|{H_1}]P({H_1}|Y(\lambda ,k))\]
也就是說,當(dāng)引入概率時(shí),噪聲功率譜密度可以由帶噪語(yǔ)音譜在頻點(diǎn)k不存在語(yǔ)音的條件概率和存在語(yǔ)音的條件概率分別對(duì)不存在語(yǔ)音條件下的噪聲功率譜密度、存在語(yǔ)音條件下的噪聲功率譜密度進(jìn)行加權(quán)、然后求和得到。
我們可以根據(jù)貝葉斯定理很容易的計(jì)算上面式子中的兩個(gè)條件概率。如下所示
\[\begin{array}{l}
r \buildrel \Delta \over = P(H_1^k)/P(H_0^k) \\
\Lambda (\lambda ,k) \buildrel \Delta \over = \frac{{P(Y(\lambda ,k)|H_1^k)}}{{P(Y(\lambda ,k)|H_0^k)}} \\
P(H_0^k|Y(\lambda ,k)) = \frac{{P(Y(\lambda ,k)|H_0^k)P(H_0^k)}}{{P(Y(\lambda ,k)|H_0^k)P(H_0^k) + P(Y(\lambda ,k)|H_1^k)P(H_1^k)}} = \frac{1}{{1 + r\Lambda (\lambda ,k)}} \\
P(H_1^k|Y(\lambda ,k)) = \frac{{r\Lambda (\lambda ,k)}}{{1 + r\Lambda (\lambda ,k)}} \\
\end{array}\]
上面的4個(gè)式子中,第一個(gè)式子r表示存在語(yǔ)音的先驗(yàn)概率與不存在語(yǔ)音的先驗(yàn)概率之比、第二個(gè)式子被稱為似然比。第三個(gè)式子和第四個(gè)式子分別代表頻點(diǎn)k不存在語(yǔ)音的條件概率、頻點(diǎn)k存在語(yǔ)音的條件概率。把上面的兩個(gè)條件概率代入到求噪聲功率譜密度的式子中,得到新的噪聲功率譜密度估計(jì)
\[\sigma _d^2(\lambda ,k) = \frac{1}{{1 + r\Lambda (\lambda ,k)}}E[\sigma _d^2(\lambda ,k)|{H_0}] + \frac{{r\Lambda (\lambda ,k)}}{{1 + r\Lambda (\lambda ,k)}}E[\sigma _d^2(\lambda ,k)|{H_1}]\]
當(dāng)頻點(diǎn)k不存在語(yǔ)音時(shí),我們可以將不存在語(yǔ)音條件下的噪聲功率譜均值用當(dāng)前頻點(diǎn)的短時(shí)功率譜近似、當(dāng)頻點(diǎn)k存在語(yǔ)音時(shí),我們可以將存在語(yǔ)音條件下的噪聲功率譜均值近似為前一幀的噪聲估計(jì),如下所示:
\[\begin{array}{l}
E[\sigma _d^2(\lambda ,k)|{H_0}] \Rightarrow |Y(\lambda ,k){|^2} \\
E[\sigma _d^2(\lambda ,k)|{H_1}] \Rightarrow \sigma _d^2(\lambda - 1,k) \\
\end{array}\]
這樣,估計(jì)噪聲就變成了如下的形式
\[\sigma _d^2(\lambda ,k) = \frac{{r\Lambda (\lambda ,k)}}{{1 + r\Lambda (\lambda ,k)}}\sigma _d^2(\lambda - 1,k) + \frac{1}{{1 + r\Lambda (\lambda ,k)}}|Y(\lambda ,k){|^2}\]
對(duì)比上述的遞歸表達(dá)式與時(shí)間遞歸平均噪聲估計(jì)的通用形式可以發(fā)現(xiàn),時(shí)頻相關(guān)平滑因子alpha在意義上代表頻點(diǎn)k存在語(yǔ)音的條件概率。即:
\[\begin{array}{*{20}{c}}
{\alpha (\lambda ,k) = \frac{{r\Lambda (\lambda ,k)}}{{1 + r\Lambda (\lambda ,k)}}} & {1 - \alpha (\lambda ,k) = \frac{1}{{1 + r\Lambda (\lambda ,k)}}} \\
\end{array}\]
也就是說,平滑因子是似然比的函數(shù),并與語(yǔ)音存在的概率相關(guān),當(dāng)頻點(diǎn)k存在語(yǔ)音的條件概率越大時(shí),越傾向于使用前一幀的噪聲估計(jì),相當(dāng)于越傾向于停止噪聲估計(jì)。反之,就越傾向于繼續(xù)使用當(dāng)前頻點(diǎn)k的功率來(lái)估計(jì)噪聲。
現(xiàn)在我們已經(jīng)介紹了最小值跟蹤、時(shí)間遞歸平均兩類噪聲估計(jì)方法。那么,能不能同時(shí)使用這兩種估計(jì)方法來(lái)使得噪聲的估計(jì)更加準(zhǔn)確呢。還真是可以的,這種方法就是最小值控制的遞歸平均(MCRA)算法。下面就來(lái)看下,這種方法的思路及出發(fā)點(diǎn)。這里噪聲更新的思路是:當(dāng)語(yǔ)音不存在時(shí),更新噪聲的估計(jì),當(dāng)語(yǔ)音存在時(shí),用前一幀的噪聲估計(jì)值做為當(dāng)前幀的噪聲估計(jì)值。如下所示
\[\begin{array}{l}
H_0^k:\hat \sigma _D^2(\lambda ,k) = \alpha \hat \sigma _D^2(\lambda - 1,k) + (1 - \alpha )|Y(\lambda ,k){|^2} \\
H_1^k:\hat \sigma _D^2(\lambda ,k) = \hat \sigma _D^2(\lambda - 1,k) \\
\end{array}\]
于是,噪聲功率譜密度的均方估計(jì)可以表示如下:
\[\begin{array}{l}
\hat \sigma _d^2(\lambda ,k) = E[\sigma _d^2(\lambda ,k)|Y(\lambda ,k)] \\
= E[\sigma _d^2(\lambda ,k)|H_0^k]p(H_0^k|Y(\lambda ,k)) + E[\sigma _d^2(\lambda ,k)|H_0^k]p(H_1^k|Y(\lambda ,k)) \\
= [\alpha \hat \sigma _D^2(\lambda - 1,k) + (1 - \alpha )|Y(\lambda ,k){|^2}]p(H_0^k|Y(\lambda ,k)) + \hat \sigma _D^2(\lambda - 1,k)p(H_1^k|Y(\lambda ,k)) \\
= [\alpha \hat \sigma _D^2(\lambda - 1,k) + (1 - \alpha )|Y(\lambda ,k){|^2}](1 - p(\lambda ,k)) + \hat \sigma _D^2(\lambda - 1,k)p(\lambda ,k) \\
= [\alpha \hat \sigma _D^2(\lambda - 1,k)(1 - p(\lambda ,k)) + \hat \sigma _D^2(\lambda - 1,k)p(\lambda ,k)] + (1 - \alpha )|Y(\lambda ,k){|^2}(1 - p(\lambda ,k)) \\
= [\alpha (1 - p(\lambda ,k)) + p(\lambda ,k)]\hat \sigma _D^2(\lambda - 1,k) + [(1 - \alpha )(1 - p(\lambda ,k))]|Y(\lambda ,k){|^2} \\
= [\alpha + \alpha p(\lambda ,k) + p(\lambda ,k)]\hat \sigma _D^2(\lambda - 1,k) + [1 - p(\lambda ,k) - \alpha + \alpha p(\lambda ,k)]|Y(\lambda ,k){|^2} \\
= [\alpha + (1 - \alpha )p(\lambda ,k)]\hat \sigma _D^2(\lambda - 1,k) + [1 - \alpha - (1 - \alpha )p(\lambda ,k)]|Y(\lambda ,k){|^2} \\
= [\alpha + (1 - \alpha )p(\lambda ,k)]\hat \sigma _D^2(\lambda - 1,k) + [1 - (\alpha + (1 - \alpha )p(\lambda ,k)]|Y(\lambda ,k){|^2} \\
\end{array}\]
其中,上式中的
\[p(\lambda ,k) = p(H_1^k|Y(\lambda ,k))\]
表示語(yǔ)音存在的概率。最終,噪聲功率譜密度的均方估計(jì)可以化簡(jiǎn)為:
\[\begin{array}{*{20}{c}}
{\hat \sigma _d^2(\lambda ,k) = {\alpha _d}(\lambda ,k)\hat \sigma _d^2(\lambda - 1,k) + [1 - {\alpha _d}(\lambda ,k)]|Y(\lambda ,k){|^2}} & {{\alpha _d}(\lambda ,k) \buildrel \Delta \over = \alpha + (1 - \alpha )p(\lambda ,k)} \\
\end{array}\]
從上面的推導(dǎo)過程我們可以看到,MCRA算法的主要流程是:
(1)先用最小值跟蹤法獲得帶噪語(yǔ)音的最小值,它代表的是對(duì)噪聲的初步估計(jì)
(2)再利用這個(gè)最小值來(lái)計(jì)算語(yǔ)音存在的概率p
(3)根據(jù)上式計(jì)算噪聲估計(jì)的平滑因子
(4)利用遞歸平均來(lái)估計(jì)噪聲
speex的噪聲估計(jì)就是采用的這種思路,具體細(xì)節(jié)就不多說了,詳細(xì)問題可以到下面的群里討論!
posted on 2016-06-06 06:13 愛酷媒 閱讀(7051) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)