webRTC中語音降噪模塊ANS細節詳解(一)


ANS(adaptive noise suppression) 是webRTC中音頻相關的核心模塊之一,為眾多公司所使用。從2015年開始,我在幾個產品中使用了webRTC的3A(AEC/ANS/AGC)模塊。以前僅僅是使用,對其中的算法原理只是初步了解。近半年來,我利用業余時間在看着《語音增強:理論與實踐》和《實時語音處理實踐指南》這兩本書,對降噪算法有了更深的理解,同時又對ANS的代碼進行了調試,基本掌握了算法實現。我想把我對ANS的理解寫出來。由於內容細節較多,就出一個系列吧。webRTC中的ANS是基於維納濾波來降噪的,本篇就先講講維納濾波的基本原理。

 

如圖1所示,輸入信號y(n)經過一個濾波器后產生一個輸出信號x(n),希望x(n)盡量逼近期望信號d(n)。這可以通過計算估計誤差e(n)並使其最小化來實現,能夠最小化這個估計誤差的最優濾波器叫做維納濾波器。

通常維納濾波器為線性的,且是FIR濾波器,因為FIR濾波器是穩定的,以及它是線性的方便計算。因而濾波器輸出x(n)可以寫成式1:

                                                       (1)

其中h(k)為濾波器系數,M為濾波器個數,即是M階的濾波器。x(n)可以改寫成式2:

                                                                                               (2)

其中h為M行1列的濾波器系數向量,y為M行1列的包括過去M個樣本的輸入向量。h和y表示如下:

所以是一個實數值。

估計誤差e(n)可以表示如式3:

                                                                     (3)

為了找到最優的濾波器系數,得求估計誤差的統計均方值,即式4:

                                                                                                   (4)

其中E[•]表示期望。因為

所以

 令

從而得到式5:

                                                             (5)

展開后得到如下系列式子:

 

因為

所以

定義表示兩個輸入值之間的自相關,n表示序列差。所以:

再定義表示輸入值和期望輸出值之間的互相關,n表示序列差。所以:

 

所以上面式子5可以改寫成式子6

      (6)

展開后得式7:

                                  (7)

再改寫成如下形式,得到式8:

                                                 (8)

上面的式8是有限脈沖響應濾波器。再來考慮一種雙邊的無限脈沖濾波器,形式如式9:

                                                        (9)

則式8可寫成式10:

                                              (10)

寫成卷積形式,得到式11:

                                                                                         (11)

對兩邊做傅里葉變換,時域卷積變成頻域就是乘積,所以得到式12:

                                                                                      (12)

其中是輸入的自功率譜,自功率譜等於自相關的傅里葉變換。 是輸入與輸出的互功率譜,互功率譜等於互相關的傅里葉變換。所以得到式13:

                                                                                                  (13)

上式就是頻域維納濾波器的一般形式。

 

如果要把維納濾波用到語音降噪上,圖1中的y(n)就是帶噪語音信號,x(n)就是純凈語音信號。假設n(n)表示噪聲信號,如果只考慮加性噪聲,則帶噪語音信號、純凈語音信號和噪聲信號的關系如下:y(n) = x(n) + n(n),做傅里葉變換后的表達式如下:

 假設噪聲與語音不相關且具有零均值,則

 

 

其中表示純凈語音的自功率譜,表示噪聲的自功率譜。

帶入式13可得式14:

                                                                               (14)

如果定義為頻點為時的先驗信噪比(prior SNR,表示純凈語音和噪聲的功率比值,后驗信噪比(post SNR)表示帶噪語音和噪聲的功率比值) ,則式14可以表示為式15:

                                                                                          (15)

式15就是維納濾波器的通用的表示形式,是用先驗信噪比來表示的。webRTC里的ANS就是基於這個表達式做語音降噪的。下篇將講ANS的處理流程以及語音信號在時域和頻域相互轉換時的一些細節。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM