WEBRTC回聲消除-AECM算法源碼解析之參數解析

概述
  webrtc 針對回聲問題一共開源了3種回聲消除算法,分別爲aec,aecm,以及aec3,其中aec是最早期的版本,在後續的更新中aec3的出現代替了aec在webrtc 中的地位,而aecm主要是針對計算能力較弱的移動端或是嵌入式設備而開發的,但同時也帶來了它自己的劣勢;本文主要介紹AECM算法的計算邏輯。後面會逐步分析aec和aec3的源碼。
二 參數解析
  參數一
延時參數:delay,通過測試發現,這個參數對回聲消除的效果影響很大。這個到底要怎麼選取呢?是和實際環境有關係嗎?通過實際測試發現,這個和實際的環境延時有關係,實際環境中,是需要根據實際的設備延時來填寫這個的,太大和太小了都會有消除不乾淨。下圖是不同delay的參數測試的結果,可以看出,太大或者太小會導致回聲消除不乾淨。
 
參數二,回聲消除等級
aecm->echoMode = config.echoMode;
這個參數決定回聲消除的等級,同時也決定了吞音的等級,等級越高吞音越明顯,同時回聲消除也越好。這個參數非常重要。下面是這個參數不同的效果展示:
 
參數三 aecm->farEnergyVAD
這個參數這裏沒用到,在aec的裏面,反而是用得着的。
參數四 aecm->currentVADValue
這個參數是標誌是否探測到聲音的。
 
三 函數解析
 
初始化函數:
int32_t WebRtcAecm_Init(void *aecmInst, int32_t sampFreq)
初始化採樣率和回聲消除參數
獲取參考信號的函數
int32_t WebRtcAecm_BufferFarend(void *aecmInst, const int16_t *farend, int16_t nrOfSamples)
該函數是獲取參考信號的值的
回聲消除的主函數
int32_t WebRtcAecm_Process(void *aecmInst, const int16_t *nearendNoisy, const int16_t *nearendClean, int16_t *out, int16_t nrOfSamples, int16_t msInSndCardBuf)
 
四 總結
 
  aecm裏面由於涉及到太多的定點轉換,很難窺探到該算法的原理了。想要了解該算法的原理,還是依靠分析aec,後面再詳細分析一下aec吧,原理搞清楚是關鍵。切勿只浮在表面。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章