WebRTC回聲消除(2)
WebRTC的回聲抵消算法(AEC,AECM)有以下幾個重要的模塊:
1.回聲延時估計
2.NLMS
3.NLP
4.CNG
5.雙端檢測(DT)
下面分別介紹:
(1)回聲延時估計
回聲延時長短:基於相關的時延估計算法(其中:基於語音信號自相關求基音周期):回聲抵消場所,延時搜索範圍較大。
webrtc的回聲時延估計,它采用的是gips首席科學家Bastiaan的算法
(2)NLMS(歸一化均方最小自適應算法)
LMS/NLMS/AP/RLS等都是經典的自適應濾波算法,
webrtc中使用的NLMS算法做簡略介紹:
設遠端信號為x(n),近段信號為d(n),W(n)是權重,則誤差信號e(n)=d(n)-w‘(n)x(n) (此處‘表示轉秩),
NLMS對濾波器的系數更新使用變步長方法,
即步長u=u0/(gamma+x‘(n)*x(n));其中u0為更新步長因 子,gamma是穩定因子,
則濾波器系數更新方程為 W(n+1)=W(n)+u*e(n)*x(n);
NLMS比傳統LMS算法復雜度略高,但收斂速度明顯加快。LMS/NLMS性能差於AP和RLS算法。
另外值得一提的是webrtc使用了分段塊頻域自適應濾波(PBFDAF)算法,這也是自適應濾波器的常用算法。自適應濾波的更多資料可以參考simon haykin 的《自適應濾波器原理》。
(3)NLP(非線性濾波)
webrtc采用了維納濾波器。
設估計的語音信號的功率譜為Ps(w),噪聲信號的功率譜為Pn(w),
則濾波器的傳遞函數為: H(w)=Ps(w)/(Ps(w)+Pn(w))。
(4)CNG(舒適噪聲產生)
webrtc采用的舒適噪聲生成器比較簡單,首先生成在[0 ,1 ]上均勻分布的隨機噪聲矩陣,
再用噪聲的功率譜開方後去調制噪聲的幅度。
由於工作需要,最近一直在研究WebRTC裏的AEC算法。根據源碼裏面的fullaec.m文件,總體來說,我認為該AEC算法是屬於分段快頻域自適應濾波算法,Partioned block frequeney domain adaPtive filter(PBFDAF)。具體可以參考Paez Borrallo J M and Otero M G
使用該AEC算法要註意兩點:
1)延時要小,因為算法默認濾波器長度是分為12塊,每塊64點,按照8000采樣率,也就是12*8ms=96ms的數據,而且超過這個長度是處理不了的。
2)延時抖動要小,因為算法是默認10塊也計算一次參考數據的位置(即濾波器能量最大的那一塊),所以如果抖動很大的話找參考數據時不準確的,這樣回聲就消除不掉了。
轉自:http://www.cnblogs.com/mod109/p/5829470.html
WebRTC回聲消除(2)