1. 程式人生 > >WebRTC回聲消除(2)

WebRTC回聲消除(2)

適應 時長 and span bsp 基於 最大的 方程 矩陣

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)