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

 

posted @ 2018-07-15 13:51  阳光正好只欠拥抱  阅读(4623)  评论(0编辑  收藏  举报