轉載_關於AEC算法的幾點思考

一年前我剖析過開源的AEC算法,文章鏈接是語音增強和語音識別;時隔這麼長時間,再過來看這個算法,略有體會,以下有幾點個人思考:

AEC算法的主要目的是自身音源消除,對於手機或者pc這類的通話場景,這類場景和音響場景稍有差異,兩者遇到的主要問題會有些差異;

對於視頻通話這類場景,兩個通信終端的時鐘偏斜和漂移是不定的,而音箱場景這個是可以在硬件上加以解決的,但是音箱場景的非線性失真卻比通信場景嚴重的,功率放大模塊非線性器件帶來的諧波失真,在室內四個方向都發聲,是得卷積失真,多次反射回聲,聲音突變等會加劇問題處理的複雜性;

當前絕大部分的AEC算法基本都基於頻域分塊處理方法,基於LMS/NLMS、RLS(recursive least square), APA(Affine Projection Algorithm)自適應處理方法。

LMS算法主要的作用消除線性回聲部分,也就是參考信號x中可以經過線性疊加的方式獲得麥克風採集到的回聲信號的估計值,上述公式中的h是濾波器係數,

mumu

是步長因子;e是誤差信號;

LMS算法對輸入信號的頻譜和功率敏感,步長因子的選取直接影響收斂速度和穩定性,對於穩定性要求步長因子小於輸入信號協方差矩陣的跡導數(實際中很少計算,採用定長步長),

對於要求高的場景會選擇根輸入信號的功率對步長進行歸一化,即NLMS算法,

β是歸一化的步長因子,。爲了防止分母爲零,加小數a,得如下:

 

這樣收斂速度和輸入信號的功率絕對值無關。但是這兩種算法在輸入信號相關性很高時,收斂速度都會較慢。RLS算法準則是最小均分誤差。其收斂速度塊,是用於非穩態信號。其算法實現如下:

思考1:

1.步長因子$mu$如何選擇?理想的步長因子是:

但是實際上

h^h^

是未知的,這也意味這步長因子是無法直接求出的,有些算法直接選擇了定長的步長因子(針對場景調節一個因子),但如果步長因子過大,則收斂的速度相應變快,直觀的感受是當音樂突然變化(鼓聲起)等時,能夠快速壓制,這也容易造成過沖,使得失調反而變大,這是因爲誤差信號的估計並不是每時每刻都很準,尤其在double-talk出現時更是如此;在音箱場景中不宜採用固定步長因子的,音箱場景涵蓋的過於複雜,不像通信場景可以得到一個收斂延遲和壓制效果較爲滿意的均衡點。這個步長因子應該根據採集到的參考信號x以及誤差信號e之間關係變化,當然爲了防止抖動,對其自身的平滑還是需要。可以從x的時間序列得到輸入信號的變化,這個變化是源頭上可以反映參考信號變動的,另外誤差信號e是另一個指標來反映,儘管e能夠加速收斂過程,當e失調時也該適當的增加mu,這樣mu可以看成是一個和x序列以及e序列相關的變量;以下是通過算法來跟新步長因子$\mu$(\$lambda$)的方法。

由於觀測信號和濾波器係數都是分塊(重疊相加法或重疊保留法均可實現)方法,這就爲實時性提供了保障。在LMS方法做或許的非線性濾波時系步長的更新也可以採用這裏的方法。

此外還有基於貝葉斯網絡的理論計算LMS方法中步長的選擇的。

2.關於誤差信號,LMS消除的是線性部分,得到的是殘餘線性部分和非線性部分之和,非線性部分來源於外接的噪聲,參考源的卷積響應以及喇叭或者傳輸路徑帶來的非線性,對於從四面八方接收信號場景而言,非線性還是比較明顯,所以必須引入非線性處理方法,有最小均放誤差方法,但是這一方法並不好,實際上webrtc就是採用這個準則,尤其是在double-talk發生時更是如此。這個方法認爲,如果能夠消除噪聲,則得到的最終能量值將最小,這在同一時刻只有一方說話時是成立的,但是當雙方都在說話時,使用誤差能量最小這一準則顯然不適用,這就是很多人會提到的吞字(英文文獻裏稱之爲clipping)現象。只有把字吞掉,能量纔會小,這樣這個沒有double-talk檢測算法必然的結果。

3.所以針對非線性信號(NL-processing),非線性問題在有些文獻中又被稱爲REC(residual echo control),這些

,需要一個方法把非線性部分消掉而不損傷double-talk時發生“誤殺現象”,首先談如何消掉非線性部分,可以將原始信號x通入濾波器中,使用濾波器來近似非線性響應函數,這樣也會得到非線性估計,實際上最早開始部分提到的誤差信號e是減去了線性和非線性部分得到的誤差信號,濾波器係數可以通過最小能量均分來做爲準則進行平滑。非線性部分目前來說算是各個AEC最大的差異體現吧,通常希望濾波器階數較高,能夠處理較長的時間長度(即信號經過多次反射到達的場景)。比較有名的處理的濾波器是volterra 濾波器,使用一階,二階和三階濾波器來去除非線性部分,但隨着階數的增加,計算量也呈現指數方式增加,其一階的表示式如下:

二階的表示如下:

則誤差信號可以表示爲:

則濾波器的係數跟新方式如下:

這裏就涉及到三個步長跟新的速率了,,當0<$\alpha$<2時,是收斂的。

 

4.自適應算法的迭代跟新,這要通過DTD(double-talk detection)來區別對待,實際中發現確實是有用的,可以降低對語音的損傷,但是還不夠,最好是一個比較調節而不是檢測到DTD條件時當即停止相關係數的跟新。DTD檢測算法有能量算法,還有基於幾個信號綜合的互功率譜估計,也有直接通過信號的互相關性估計。

5.端到端的處理

對於ASR而言,AEC是爲了獲得近端的人聲特徵(MFCC或者FBANK),傳統的AEC(場景電話,VOIP之類)得到近端信號給人耳聽的,它們主要是使用頻域特徵做自適應濾波,如果我們的AEC目的是給機器聽的(ASR),可不可以直接在多維的MFCC、FBANK特徵域裏做自適應濾波處理,直接得到近端信號的MFCC或者FBANK特徵?

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