作者:桂。
時間:2017-06-14 12:08:57
鏈接:http://www.cnblogs.com/xingshansi/p/6956556.html
主要是《Speech enhancement: theory and practice》的讀書筆記,全部內容可以點擊這里。
書中代碼:http://pan.baidu.com/s/1hsj4Wlu,提取密碼:9dmi
前言
主要梳理單通道噪聲估計的一般方法,內容為自己的學習記錄,如果有不准確/錯誤的地方,還希望幫忙指出來。
一、算法原理
本文不打算作綜述類描述,只介紹幾種常用的噪聲估計算法,首先介紹一下噪聲估計的一般思路,噪聲估計主要基於以下三個現象:
現象一:在音頻信號中,閉塞因閉合段頻譜能量趨於零或接近噪聲水平,除此之外還會注意到:
- 靜默(silent)段出現在清摩擦音的低頻段,特別是2kHz以下的頻段;
- 靜默段(silent)出現在元音或一般的濁音(半元音、鼻音)期間的高頻段,通常是4kHz以上,如圖所示:

由於該特性,噪聲在頻譜上非均勻分布,不同頻帶具有不同的SNR,例如car噪聲則具有低頻特性,高頻部分受影響較小,從而高頻部分提取的帶噪譜可以更有效地估計和更新噪聲譜。更一般地,對於任意類型噪聲,只要該頻帶無語音的概率很高或者SNR很低,則可以估計/更新該頻帶的噪聲譜,這類思想是遞歸平均噪聲估計算法(the recursive-averaging type of noise-estimation algorithms)的支撐點。
現象二:即使在語音活動的區域,帶噪語音信號在單個頻帶的功率通常會衰減到噪聲的功率水平,我們因此可以追蹤在短時窗內(0.4~1s)帶噪語音譜每個頻帶的最小值,實現各個頻帶噪聲的估計。該現象是最小值跟蹤算法(the minima-tracking algorithms)的支撐點。
現象三:每個頻帶能量的直方圖揭示了一個理論:出現頻次最高的值對應頻帶的噪聲水平。有時譜能量直方圖有兩種模式:1)低能量對應無聲段、語音的低能量段;2)高能量模式對應(noisy)語音的濁音段。低能量成分大於高能量成分:

但這個現象並不是一成不變,作者進行實驗驗證得出了結論:通常低頻具有雙峰分布,中頻-高頻為單峰。以上現象,頻帶能量直方圖最大值對應頻帶的噪聲水平,這是直方圖噪聲估計算法(histogram-based noise-estimation algorithms)的支撐點。
總結一下,以上三個現象引出了三類噪聲估計算法:
- 遞歸平均噪聲算法
- 最小值跟蹤算法
- 直方圖噪聲估計算法
二、遞歸平均噪聲算法
這類方法有利用信噪比相關、加權譜平均、基於信號存在概率等方法,這里只介紹基於信號存在概率的遞歸平均噪聲估計算法,因為常用的MCRA及其變種就屬於該范疇。
先說基本框架

從而實現噪聲譜估計

剩下的就是一些常規的思路了。
A-似然比方法
兩個基本要點:1)利用ML准則估計概率;2)利用
近似表達
。
這樣一來,噪聲估計為

其實這就是平滑的思路,只不過平滑因子對應這里的存在概率

按照之前的分析,在DFT系數復高斯模型下,可以實現參數估計

這樣一來就完成了參數估計,噪聲實現估計,細節上還有很多修繕的地方,這里就不提了。
B-MCRA算法(Minima-Controlled Recursive-Averaging Algorithms)
1-MCRA基本框架
先說說MCRA的基本框架

噪聲譜估計

2-算法實現

寫到這里,想到作者去世已經近五年,心里非常非常難過。寫一本好書要花費多少的心血啊,而把研究做到如此細致、深入對后來人的幫助又是多么巨大。古人將修路造橋定義為大善之事,這些科研人員在科學道路上給后來人鋪平了道路,他們又何嘗不是修路人呢?今天讀着他們的著作,感受着他們的思想,卻連當面說些感謝話的機會也不再有!
步驟一:

αs為常數平滑因子,S為帶噪語音的頻譜。
其中Sf為:

w(.)為窗函數,
步驟二:
對S進行最小值跟蹤(與連續譜最小值跟蹤思路一致):

不過這里得到的是Smin
步驟三:計算p

其中Sr為

通常對p有一個后處理的平滑操作:

ap是常數。
步驟四:計算時頻相關平滑因子

其中
步驟五:更新噪聲譜

這一步是怎么推導來的呢?
由

和

聯立得出

這就是噪聲估計的表達式了。
3-算法修正(MCRA2)
給出完成的算法實現

其實與MCRA就是一點不同:

按不同頻帶取不同的數值。

其他步驟完全相同。如果說這個方法有效,那也只是作者對音頻特性做了分析,有了先驗知識作為支撐,單從理論上來講這一點改進算不上突破。
3-改進的MCRA(IMCRA)
首先交代一下IMCRA的算法實現:


步驟一:仍然是S和Smin的計算;
步驟二:計算I(語音活動檢測):

其中
,Bmin是最小噪聲估計偏差,這里不再估計而是采用常數Bmin=1.66.
步驟三:回顧MCRA的更新:

與它不同的是,ICMRA更新:

也是采用遞歸平均

步驟四:計算語音不存在概率:
條件概率不再用

進行推導,而是改用

進行估計。將

代入,得出概率估計

其中
為語音不存在的先驗概率,
,這里的參數與之前的含義一致:
參數改進:上面的
可以作為先驗給定,也可以利用實驗數據進行估計,下面交代一下q估計的思路:

公式里的邊界閾值都是設定的常數。其中

步驟五(還是承接步驟四):從步驟四可以看出,只要估計出
,就可以完成p的估計。
在語音增強一文也出了該參數的兩個實現思路:1)Maximum-Likelihood Method;2)Decision-Directed Approach.
步驟六:噪聲估計。
計算出p以后,分別借助

和

完成噪聲估計,並進一步對噪聲譜進行修正

至此完成了IMCRA的落地。
三、最小值跟蹤算法
該類算法仍然可以細分下去,這里主要介紹兩種算法:1)最小值統計——minimum statistics Noise estimation;2)連續譜最小值跟蹤——continuous spectral minimum tracking。
A-最小值統計算法
按照作者的說法,該算法通常會:1)低估噪聲的實際水平;2)該算法不能無延遲地對噪聲功率的變化進行跟蹤。
先說算法的整個思路:


下面分別細說一下步驟。
步驟二:主要利用

說一下它的由來,主要利用最小均方誤差准則

其中(該公式有誤,少了-1)

得到

其中
並不能直接得到,可以參考之前的方法進行估計,但這不是噪聲估計的本意,這里的最終目的就是估計噪聲譜,因此此處考慮用
來近似表達。但當α接近於1時,更新太慢,因此有學者做了改進:

在此基礎上再級聯一個限定最大值的α(αmax)估計,並認為兩者是獨立關系,得出最終的α:

步驟三:步驟三就是水到渠成的事了

步驟四:主要計算偏差因子
其中D是幀數,只要計算出
,就可以估計B:

至此完成了步驟四。
步驟五:就是D幀內最小值搜索

步驟六:噪聲譜估計

B-連續譜最小值跟蹤
如果有D幀的數據,最小值統計算法需要2D幀的延遲,即使划分V幀子窗,也要D+V的延遲(最大情況)。有沒有辦法改善這個問題呢?這是連續譜最小值跟蹤的出發點。
由於只有
涉及到延遲問題,其他操作不變。

其中參數設定:

四、直方圖噪聲估計算法
這里只給出最基本的思路介紹,首先說一下算法實現:

步驟一:計算
沒什么可說的;
步驟二:借助一階遞歸計算S:

a為常數.
步驟三:計算前D幀功率譜密度的直方圖,histogram的bins認為設定(如40bins);
步驟四:找出直方圖的最大值對應的功率,作為噪聲譜估計


步驟五:借助步驟四中估計的噪聲譜,利用一階回歸進行噪聲譜更新

其中
是常數。
在工程實現上,還有幾個需要注意的細節,也在這里說一下。
1)步驟二中的平滑因子a影響最終的估計結果,下圖是a=0的情形:

2)該方法會出現噪聲譜過估計的情況

為了避免這種過估計,通常有兩個修正策略:1)增大統計的幀數D;2)統計直方圖時丟棄能量較大的幀,這一個操作可以通過設定Threshold進行篩選:

就寫這么些了,感興趣的可以跟我交流,也可以翻翻原作。
