AEC(回声消除)延时估计
webrtc aec3 中采用了时域nlms算法进行延迟估计,滤波器能量最大的点对应着延迟值。为了降低计算量,降采样到4k进行处理,使用了5个滤波器,每个滤波器长度512点,相邻滤波器中间有128点交叠,最大可估计的延时为:
d e l a y _ s = ( 512 ∗ 5 − 128 ∗ 4 ) / 4000 = 0.512 s delay\_s=(512*5-128*4)/ 4000 = 0.512s delay_s=(512∗5−128∗4)/4000=0.512s
开始看的时候感觉分块比较麻烦,还有重叠增加计算量,为什么不使用一个2048点的滤波器进行延时估计代替5个分块的滤波器?为了解答疑惑,进行了仿真对比,发现分块和交叠都是有作用的,再次感慨webrtc具有好多工程技巧,每次看都有收获。
滤波器分块对比
仿真构造延时依次为30,60和100点的数据,对比4个256点分块滤波器和1个1024长滤波器的滤波器收敛效果,结果如下:
可以看出延时发生改变时分块滤波器重新收敛的速度更快。
滤波器重叠对比
仿真了不同延时,是否重叠时滤波器的估计效果,发现作用有两点:
1)加快收敛,相互交叠的滤波器谁先收敛使用谁的。
2)当滤波器延迟值比较大的时候,尾部的滤波器估计相对不准确。