當前開源回聲消除算法主要有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 部分能不能採用多頻帶係數代替單一系數,針對自適應濾波部分的問題,能不能做到一定的補救?
關於音頻算法,歡迎大家加音頻算法討論羣:153268894 (作者 zeark)