问题来源:
当有两个相互交错的端点在进行通话时,假设这两个端点分别为Na和Nb, 此时Na发出的声音在Nb中播放出来,而Nb的采集设备会采集出来Na的声音,此时将Nb的采集的声音发送到Na时,Na将听到刚才自己的声音。
问题模型:
假设Na的函数为fax,那么在Na端听到的回声将是Kfa(x+w) + fbx。可见,在这个模型中,有两个参数很关键,第一个是K,即幅值衰减系数,第二个是w,即相位。如何动态的确定这两个参数?显然,直接确定这两个参数是不可行的。那怎么办呢?
解决方法:
自适应滤波器:自适应滤波器具有在未知环境下良好的运作并跟踪输入统计量随时间变化的能力。对于不同的应用有不同的实现结构,但是它们有一个基本的特征:输入向量X(n)和期望响应d(n)被用来计算估计误差e(n),即e(n)=d(n)-x(n),并利用此信号误差构造一个自适应算法。最常用的就是基于最小二乘法的函数。φ =

自适应滤波器主要应用是:预测,辨识,反建模,干扰消除,噪声消除等。
实现:
回声消除算法在speex中有一个实现,叫做MDF滤波器。这个滤波器的实现可以参看mdf.c文件。
备注:
需要加强对自适应滤波器的理解和MDF的实现