回声消除总结

回声消除系统简介


回声消除总结_第1张图片

一个完整的回声消除系统如上图所示,一般包括对讲检测,线性自适应滤波器,残余回声消除器(一般用NLP滤波)。当然根据具体的应用场景,可能还需要延时对齐模块,舒适噪声模块。其中延时对齐模块对整个系统的性能影响非常大,它主要用于补偿数据播放与数据采集之间的时延差。当然对于一些实时性较好的系统,如DSP平台,这种时延差较少,对性能影响不大。


Speex回声消除

回声消除总结_第2张图片

与上面提到的框架相比,speex略有不同。

1、 没有NLP

2、 没有舒适噪声模块

3、只考虑实时DSP系统,即是没有延时对齐等

4、自适应滤波采用双滤波器结构,自适应滤波算法为MDF,是一种分块频域快速算法,其步长因子是自动更新的。


Speex回声消除步骤:

1、  陷波滤除直流分量,并进行预加重。

2、  采用前级滤波对输入信号进行滤波处理,滤波输出信号存在e[]的后半部分,误差信号方差存储给Sff。

3、  后级滤波器抽头系数W的计算(难点在最优步长的计算)。

4、  对输入信号用后级滤波再次滤波处理,得到的误差信号方差给See,误差存在e[]前半部分.

5、  结合See与Sff综合判断是否需要更新前级滤波系数或者重置后级滤波。

如果需要更新前级滤波系数,则将两级滤波的滤波输出通过加窗平滑合并为总的滤波输出存在e[]后半部分.并foreground = W

6、  如果需要重置后级滤波,则W = foreground, See = Sff,误差信号(其实就是前级滤波的误差)即e[]的前半部分 = 输入input – 前级滤波输出(e[]的后半部分)。

7、计算最后的滤波输出out = input – 滤波输出e[]后半部分,并进行去加重处理。

8、  最优步长的计算总的来说可以理解残留回声方差与误差信号方差之比。


9、 残留回声的估计可以借用泄露因子进行计算:

                              

10、 泄露因子计算可参考文献“OnAdjusting the Learning Rate in Frequency Domain Echo CancellationWithDouble-Talk


                                   回声消除总结_第3张图片

优化思路:

1、  添加nlp模块与舒适噪声模块

2、  调优滤波器步长因子

3、  添加双讲检测机制

4、  如果应用在系统实时性不好的场景,还需添加延时对齐模块。


webrtc 回声消除

回声消除总结_第4张图片

webrtc回声消除框架对比:

1、双讲检测没有,双讲时容易造成滤波器发散,近端声音会消掉一部分。

2、线性自适应滤波器采用PBFDAF,且步长因子固定取 0.6

3、抑制是使用相关性技术,近端误差,近端远端,由低频段相关性参数求出gain


Webrtc回声消除步骤:

1、 延时估计对齐,这里有两个时延,一个是系统的时延,需要用户手动输入,另一个是信号时延,是根据gips滤波法估计得到。

2、 对参考信号,近端信号分别FFT,并计算远端平滑功率Px。

3、 采用PBFDAF算法进行自适应滤波处理,得到误差信号ekfb。

3.1保存当前帧与上一帧的输入数据(近端数据dk,远端数据xk),并求FFT.

3.2求远端信号平滑功率谱

3.3对滤波权系数W前半部分补零,远端信号进行分块滤波处理,将滤波结果求和Y

3.4对Y做IFFT变化,取y的后半部分。

3.5求误差信号 e = dk –y

3.6更新权系数W = W + u*FFT(e[0,:]).*X/Px  (NLMS权值更新公式)

3.7将X内存中的最后一块数据丢掉,数据左移一块,准备下一帧数据处理。

4、 计算近端信号、远端信号、误差信号的平滑功率谱Sx、Sd、Se.

5、计算近端信号与远端信号,近端与误差的互功率谱Sxd、Sed。Sxd越大,回声越大;Sed越大,回声越小


6、 为了准确判断,将Sxd,Sed进行归一化处理(求互相关),得到cohxd,cohed.

7、 计算NLP增益hnld = min(1-cohxd,cohed )

8、 添加舒适噪声。


优化思路:

1、 对webrtc的aec加入双讲检测,双讲处理。

2、 自适应更新滤波器步长因子。

3、 优化NLP模块( NLP模块对webrtc回声消除影响较大)。

Speex与Webrtc回声消除对比

回声消除总结_第5张图片
图1、近端语音,图2、远端语音,图3、Webrtc处理,图4、Speex处理

你可能感兴趣的:(回声消除)