目前開源回聲消除算法主要有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)