噪聲估計之MCRA

MCRAMCRA1,全稱爲最小值控制的遞歸平均,是cohen提出的一種常用的噪聲估計方法,處理流程框圖 2 如下
在這裏插入圖片描述
從命名上以及以上框圖能看出來着個方法主要包含兩個部分,噪聲譜遞歸平均和最小值控制(跟蹤),下面分別看看這兩個部分

1. 噪聲譜估計(遞歸平均)

還是老套路先定義信號表達式
Y(k,)=n=0N1y(n+M)h(n)ej2πNnk(1) Y(k, \ell)=\sum_{n=0}^{N-1} y(n+\ell M) h(n) e^{-j \frac{2 \pi}{N} n k}\tag1

kk:frequency bin index

\ell:time frame index

hh:analysis window of size N

MM:frame update step in time

定義兩個假設,在第 \ell 幀第kk 個頻率點上語音不存在和語音存在H0(k,),H1(k,)H_0(k,\ell),H_1(k,\ell)概率如下:
H0(k,):Y(k,)=D(k,)H1(k,):Y(k,)=X(k,)+D(k,)(2) \begin{aligned} &H_0(k,\ell):Y(k,\ell)=D(k,\ell)\\ &H_1(k,\ell):Y(k,\ell)=X(k,\ell)+D(k,\ell)\end{aligned}\tag2
其中X(k,)D(k,)X(k,\ell)和D(k,\ell)分別爲純淨語音和噪聲的STFTSTFT表示

定義λd(k,)=E[D(k,)2]\lambda_d(k,\ell)=E[\begin{vmatrix} D(k,\ell) \end{vmatrix}^2]kk幀、\ell子帶處噪聲譜,那麼就可以在無語音段用一個時間維度上的遞歸平滑來更新噪聲,用公式表示如下
H0(k,):λ^d(k,+1)=αdλ^d(k,)+(1αd)Y(k,)2H1(k,):λ^d(k,+1)=λ^d(k,)(3) \begin{array}{l}{H_{0}^{\prime}(k, \ell) : \hat{\lambda}_{d}(k, \ell+1)=\alpha_{d} \hat{\lambda}_{d}(k, \ell)+\left(1-\alpha_{d}\right)|Y(k, \ell)|^{2}} \\ {H_{1}^{\prime}(k, \ell) : \hat{\lambda}_{d}(k, \ell+1)=\hat{\lambda}_{d}(k, \ell)}\end{array}\tag3
其中αd(0<αd<1)\alpha_d(0<\alpha_d<1)爲平滑因子

pP(H1Y(k,))p^{\prime} \triangleq P(H^{\prime}_1|Y(k,\ell))表示語音存在的條件概率,則(3)式可以寫成如下形式
λ~d(k,+1)=α~d(k,)λ^d(k,)+[1α~d(k,)]Y(k,)2(4) \tilde\lambda_d(k,\ell+1)=\tilde{\alpha}_{d}(k, \ell) \hat{\lambda}_{d}(k, \ell)+\left[1-\tilde{\alpha}_{d}(k, \ell)\right]|Y(k, \ell)|^{2}\tag4
其中α~d(k,)\tilde\alpha_d(k,\ell)爲時變的平滑參數
α~d(k,)αd+(1αd)p(k,)(5) \tilde\alpha_d(k,\ell)\triangleq \alpha_d+(1-\alpha_d)p^{\prime}(k,\ell)​\tag5
上面的(4)、(5)兩式就是遞歸平均更新噪聲譜的核心內容,現在的問題就是要求出時變參數α~d(k,)\tilde\alpha_d(k,\ell),也就是要求出語音存在概率這個關鍵變量p(k,)p^{\prime}(k,\ell)

2. 語音存在概率(最小值控制)

2.1. 最小值跟蹤

​ 語音存在概率由帶噪語音當前的能量和指定長度窗內譜最小值的比值來計算,先對帶噪語音譜分別做時間、頻率兩個維度上的平滑

頻率平滑:
Sf(k,)=i=wwb(i)Y(ki,)2(5) S_{f}(k, \ell)=\sum_{i=-w}^{w} b(i)|Y(k-i, \ell)|^{2}\tag5
時間平滑:
S(k,)=αs(k,)S(k,1)+Sf(k,)(6) S(k, \ell)=\alpha_s(k,\ell)S(k,\ell-1)+S_f(k,\ell)\tag6
其中αs(0<αs<1)\alpha_s(0<\alpha_s<1)爲平滑常數

譜最小值Smin(k,)S_{min}(k,\ell)搜索過程如下:

初始化:

Smin(k,)=S(k,0)S_{min}(k,\ell)=S(k,0)

Stmp(k,)=S(k,0)S_{tmp}(k,\ell)=S(k,0)

然後按樣本點(頻譜)比較
Smin(k,)=min{Smin(k,1),S(k,)}Stmp(k,)=min{Stmp(k,1),S(k,)}(7) S_{min}(k,\ell)=min\begin{Bmatrix}S_{min}(k,\ell-1),S(k,\ell)\end{Bmatrix}\\S_{tmp}(k,\ell)=min\begin{Bmatrix}S_{tmp}(k,\ell-1),S(k,\ell)\end{Bmatrix}\tag7
這個時候SminStmpS_{min}和S_{tmp}都還是相等的,當比較了L幀(mod(\ell,L)=0)後
Smin(k,)=min{Stmp(k,1),S(k,)}Stmp(k,)=S(k,)(8) \begin{aligned}&S_{min}(k,\ell)=min\begin{Bmatrix}S_{tmp}(k,\ell-1),S(k,\ell)\end{Bmatrix}\\&S_{tmp}(k,\ell)=S(k,\ell)\end{aligned}\tag8
重複(7)、(8)過程得到最小值譜,其中,搜索窗的長度L會影響到噪聲的跟蹤速度,一般按照經驗選0.5s~1.5s左右。

2.2. 語音存在概率計算

​ 定義局部能量與帶噪語音能量比Sr(k,)S_r(k,\ell)如下
Sr(k,)S(k,l)Smin(k,)(9) S_r(k,\ell)\triangleq\frac{S(k,l)}{S_{min}(k,\ell)}\tag9
定義二值I(k,)I(k,\ell)如下
I(k,)={1,Sr(k,)>δ0,otherwise(10) I(k,\ell)=\left\{\begin{matrix}\begin{aligned}&1,S_r(k,\ell)>\delta\\&0,otherwise\end{aligned}\end{matrix}\right.\tag{10}
最後,語音存在概率更新如下:
p^(k,)=αpp^(k,1)+(1αp)I(k,)(11) \hat{p^{\prime}}(k, \ell)=\alpha_{p} \hat{p^{\prime}}(k, \ell-1)+\left(1-\alpha_{p}\right) I(k, \ell)\tag{11}
其中δαp(0<αp<1)\delta爲預先設定的門限,\alpha_p(0<\alpha_p<1)爲平滑常數

3.code & result

整個過程比較簡單,參照上述過程編寫程序估計噪音,結合譜減法降噪效果如下
在這裏插入圖片描述
在這裏插入圖片描述
對比處理前後可以看到背景噪聲有了明顯的消除,當然因爲譜減法的原因引入了較多的音樂噪聲,這個時候還可以嘗試其它的譜修改方法如維納濾波或者OMLSA
References:


  1. Cohen, I., & Berdugo, B. (2002). Noise estimation by minima controlled recursive averaging for robust speech enhancement. IEEE Signal Processing Letters, 9(1), 12–15 ↩︎

  2. Cohen, I., & Berdugo, B. (2001). Speech enhancement for non-stationary noise environments. Signal Processing, 81(11), 2403–2418 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章