当前开源回声消除算法主要有speex 以及webrtc 的aec算法。
两个开源aec 算法的基本原理都是基于自适应滤波nlms。
两者的主要区别:
speex 使用的是mdf 双滤波结构。通过前滤波与本次滤波的结果来调整滤波器系数的更新,
滤波器长度设计的很长,同时对信号做了预加重以及去直流处理。
webrtc aec :模块相对比较复杂,包含了延时估计,nlms以及nlp(非线性压缩),舒适噪声四个模块,
其中延时估计模块采用自相关技术,nlms 模块开源算法只用了12block,nlp 部分使用的是互相干技术。
可能的优化方向:
speex aec 现在大部分是用在嵌入式,硬件对延时模块没有需求,而mdf 结构的效果比webrtc nlms 的效果
好很多,收敛更快(webrtc 自适应滤波部分没有dtd检测,系数一直更新,只有一个简单的发散条件),
speex 优化可以增加nlp 模块,来消除抑制残留回声。
webrtc aec 现在大部分是在软件层使用:
可能的优化方向:
1、由于线程的波动,必须考虑延时估计,不同的设备,不同的信号延时估计的准确性。
2、自适应滤波器系数一直更新,能不能有更好的方法来控制,有没有更好的方法,滤波器长度调整效果怎么样?
3、nlp 部分能不能采用多频带系数代替单一系数,针对自适应滤波部分的问题,能不能做到一定的补救?
4、自适应部分采用子带处理效果会不会比nlp 分子带更好!
关于音频算法,欢迎大家加音频算法讨论群qq:153268894 (作者 zeark)