M C R A MCRA M C R A ,全稱爲最小值控制的遞歸平均,是cohen提出的一種常用的噪聲估計方法,處理流程框圖 如下
從命名上以及以上框圖能看出來着個方法主要包含兩個部分,噪聲譜遞歸平均和最小值控制(跟蹤),下面分別看看這兩個部分
1. 噪聲譜估計(遞歸平均)
還是老套路先定義信號表達式
Y ( k , ℓ ) = ∑ n = 0 N − 1 y ( n + ℓ M ) h ( n ) e − j 2 π N n k (1)
Y(k, \ell)=\sum_{n=0}^{N-1} y(n+\ell M) h(n) e^{-j \frac{2 \pi}{N} n k}\tag1
Y ( k , ℓ ) = n = 0 ∑ N − 1 y ( n + ℓ M ) h ( n ) e − j N 2 π n k ( 1 )
k k k :frequency bin index
ℓ \ell ℓ :time frame index
h h h :analysis window of size N
M M M :frame update step in time
定義兩個假設,在第 ℓ \ell ℓ 幀第k k k 個頻率點上語音不存在和語音存在H 0 ( k , ℓ ) , H 1 ( k , ℓ ) H_0(k,\ell),H_1(k,\ell) H 0 ( k , ℓ ) , H 1 ( k , ℓ ) 概率如下:
H 0 ( k , ℓ ) : Y ( k , ℓ ) = D ( k , ℓ ) H 1 ( 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
H 0 ( k , ℓ ) : Y ( k , ℓ ) = D ( k , ℓ ) H 1 ( k , ℓ ) : Y ( k , ℓ ) = X ( k , ℓ ) + D ( k , ℓ ) ( 2 )
其中X ( k , ℓ ) 和 D ( k , ℓ ) X(k,\ell)和D(k,\ell) X ( k , ℓ ) 和 D ( k , ℓ ) 分別爲純淨語音和噪聲的S T F T STFT S T F T 表示
定義λ d ( k , ℓ ) = E [ ∣ D ( k , ℓ ) ∣ 2 ] \lambda_d(k,\ell)=E[\begin{vmatrix}
D(k,\ell)
\end{vmatrix}^2] λ d ( k , ℓ ) = E [ ∣ ∣ D ( k , ℓ ) ∣ ∣ 2 ] 爲k 幀 、 ℓ 子 帶 k幀、\ell子帶 k 幀 、 ℓ 子 帶 處噪聲譜,那麼就可以在無語音段用一個時間維度上的遞歸平滑來更新噪聲,用公式表示如下
H 0 ′ ( k , ℓ ) : λ ^ d ( k , ℓ + 1 ) = α d λ ^ d ( k , ℓ ) + ( 1 − α d ) ∣ Y ( k , ℓ ) ∣ 2 H 1 ′ ( 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
H 0 ′ ( k , ℓ ) : λ ^ d ( k , ℓ + 1 ) = α d λ ^ d ( k , ℓ ) + ( 1 − α d ) ∣ Y ( k , ℓ ) ∣ 2 H 1 ′ ( k , ℓ ) : λ ^ d ( k , ℓ + 1 ) = λ ^ d ( k , ℓ ) ( 3 )
其中α d ( 0 < α d < 1 ) \alpha_d(0<\alpha_d<1) α d ( 0 < α d < 1 ) 爲平滑因子
用p ′ ≜ P ( H 1 ′ ∣ Y ( k , ℓ ) ) p^{\prime} \triangleq P(H^{\prime}_1|Y(k,\ell)) p ′ ≜ P ( H 1 ′ ∣ Y ( k , ℓ ) ) 表示語音存在的條件概率,則(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 , ℓ + 1 ) = α ~ d ( k , ℓ ) λ ^ d ( k , ℓ ) + [ 1 − α ~ d ( k , ℓ ) ] ∣ Y ( k , ℓ ) ∣ 2 ( 4 )
其中α ~ d ( k , ℓ ) \tilde\alpha_d(k,\ell) α ~ d ( k , ℓ ) 爲時變的平滑參數
α ~ d ( k , ℓ ) ≜ α d + ( 1 − α d ) p ′ ( k , ℓ ) (5)
\tilde\alpha_d(k,\ell)\triangleq \alpha_d+(1-\alpha_d)p^{\prime}(k,\ell)\tag5
α ~ d ( k , ℓ ) ≜ α d + ( 1 − α d ) p ′ ( k , ℓ ) ( 5 )
上面的(4)、(5)兩式就是遞歸平均更新噪聲譜的核心內容,現在的問題就是要求出時變參數α ~ d ( k , ℓ ) \tilde\alpha_d(k,\ell) α ~ d ( k , ℓ ) ,也就是要求出語音存在概率這個關鍵變量p ′ ( k , ℓ ) p^{\prime}(k,\ell) p ′ ( k , ℓ )
2. 語音存在概率(最小值控制)
2.1. 最小值跟蹤
語音存在概率由帶噪語音當前的能量和指定長度窗內譜最小值的比值來計算,先對帶噪語音譜分別做時間、頻率兩個維度上的平滑
頻率平滑:
S f ( k , ℓ ) = ∑ i = − w w b ( i ) ∣ Y ( k − i , ℓ ) ∣ 2 (5)
S_{f}(k, \ell)=\sum_{i=-w}^{w} b(i)|Y(k-i, \ell)|^{2}\tag5
S f ( k , ℓ ) = i = − w ∑ w b ( i ) ∣ Y ( k − i , ℓ ) ∣ 2 ( 5 )
時間平滑:
S ( k , ℓ ) = α s ( k , ℓ ) S ( k , ℓ − 1 ) + S f ( k , ℓ ) (6)
S(k, \ell)=\alpha_s(k,\ell)S(k,\ell-1)+S_f(k,\ell)\tag6
S ( k , ℓ ) = α s ( k , ℓ ) S ( k , ℓ − 1 ) + S f ( k , ℓ ) ( 6 )
其中α s ( 0 < α s < 1 ) \alpha_s(0<\alpha_s<1) α s ( 0 < α s < 1 ) 爲平滑常數
譜最小值S m i n ( k , ℓ ) S_{min}(k,\ell) S m i n ( k , ℓ ) 搜索過程如下:
初始化:
S m i n ( k , ℓ ) = S ( k , 0 ) S_{min}(k,\ell)=S(k,0) S m i n ( k , ℓ ) = S ( k , 0 )
S t m p ( k , ℓ ) = S ( k , 0 ) S_{tmp}(k,\ell)=S(k,0) S t m p ( k , ℓ ) = S ( k , 0 )
然後按樣本點(頻譜)比較
S m i n ( k , ℓ ) = m i n { S m i n ( k , ℓ − 1 ) , S ( k , ℓ ) } S t m p ( k , ℓ ) = m i n { S t m p ( 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
S m i n ( k , ℓ ) = m i n { S m i n ( k , ℓ − 1 ) , S ( k , ℓ ) } S t m p ( k , ℓ ) = m i n { S t m p ( k , ℓ − 1 ) , S ( k , ℓ ) } ( 7 )
這個時候S m i n 和 S t m p S_{min}和S_{tmp} S m i n 和 S t m p 都還是相等的,當比較了L幀(mod(ℓ \ell ℓ ,L)=0)後
S m i n ( k , ℓ ) = m i n { S t m p ( k , ℓ − 1 ) , S ( k , ℓ ) } S t m p ( 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
S m i n ( k , ℓ ) = m i n { S t m p ( k , ℓ − 1 ) , S ( k , ℓ ) } S t m p ( k , ℓ ) = S ( k , ℓ ) ( 8 )
重複(7)、(8)過程得到最小值譜,其中,搜索窗的長度L會影響到噪聲的跟蹤速度,一般按照經驗選0.5s~1.5s左右。
2.2. 語音存在概率計算
定義局部能量與帶噪語音能量比S r ( k , ℓ ) S_r(k,\ell) S r ( k , ℓ ) 如下
S r ( k , ℓ ) ≜ S ( k , l ) S m i n ( k , ℓ ) (9)
S_r(k,\ell)\triangleq\frac{S(k,l)}{S_{min}(k,\ell)}\tag9
S r ( k , ℓ ) ≜ S m i n ( k , ℓ ) S ( k , l ) ( 9 )
定義二值I ( k , ℓ ) I(k,\ell) I ( k , ℓ ) 如下
I ( k , ℓ ) = { 1 , S r ( k , ℓ ) > δ 0 , o t h e r w i s e (10)
I(k,\ell)=\left\{\begin{matrix}\begin{aligned}&1,S_r(k,\ell)>\delta\\&0,otherwise\end{aligned}\end{matrix}\right.\tag{10}
I ( k , ℓ ) = { 1 , S r ( k , ℓ ) > δ 0 , o t h e r w i s e ( 1 0 )
最後,語音存在概率更新如下:
p ′ ^ ( k , ℓ ) = α p p ′ ^ ( 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 ′ ^ ( k , ℓ ) = α p p ′ ^ ( k , ℓ − 1 ) + ( 1 − α p ) I ( k , ℓ ) ( 1 1 )
其中δ 爲 預 先 設 定 的 門 限 , α p ( 0 < α p < 1 ) \delta爲預先設定的門限,\alpha_p(0<\alpha_p<1) δ 爲 預 先 設 定 的 門 限 , α p ( 0 < α p < 1 ) 爲平滑常數
3.code & result
整個過程比較簡單,參照上述過程編寫程序估計噪音,結合譜減法降噪效果如下
對比處理前後可以看到背景噪聲有了明顯的消除,當然因爲譜減法的原因引入了較多的音樂噪聲,這個時候還可以嘗試其它的譜修改方法如維納濾波或者OMLSA 等
References: