Novatek iVoT 平台使用Acoustic Echo Cancellation功能

關鍵字 :NovatekAECAudio

前言

若要開發支援雙向通話功能的Novatek iVoT產品,如IP攝影機或是視訊會議系統,通常會遭遇到回聲的困擾,便是遠端麥克風發出的聲音,傳到本地端由本機的喇叭發出後,又迴授到本機的麥克風而造成回聲的現象,此時可透過AudioLib的協助,用軟體的方式讓iVoT的設備可以支援Acoustic Echo Cancellation(AEC)的功能。

AudioLib

AudioLib是一個開放原始碼的函式庫,存放在GitHub,其中包含數個聲音相關的函式庫與編解碼器等,而Acoustic Echo Cancellation也包含在內,其背後的功能實現是奠基於另外一套開源函式庫speex,但是重新包裝讓使用者更方便使用。



其中AEC相關的功能,可以參考其中的AEC資料夾,裡面有所需的header files、source files與範例程式。

編譯與建置

按照說明文件”Audio codec library user guide.pdf”的說明,將特定資料夾複製至Novatek SDK的對應資料夾中,再於SDK中執行make指令,便可以編譯函式庫,並自動於編譯完成後將函式庫複製至SDK的輸出資料夾中,方便專案的整合。

範例說明

專案中的將編譯完成的函式庫與測試檔案,複製到EVB上,其中測試檔案說明如下

  • aec_mic.pcm:為麥克風所接收到的訊號
  • aec_speaker.pcm:為喇叭所發出的聲音
  • aec_output.pcm:為進行AEC處理後的結果

函式使用時,需先指定以下參數

  • SAMPLING_RATE:聲音採樣率,範例中設為8k
  • NN:每次送入的audio frame中有多少個sample
  • TAIL:adaptive impulse response的長度
  • NUM_MIC:麥克風的數量
  • NUM_SPEAKER:喇叭的數量
  • CH:聲道數

將各參數設置到對應的成員變數中

執行AUD_AEC_PreInit(),API會計算函式庫所需的記憶體大小並配置 




接下來是初始化函式庫,並設定AEC相關參數


後續便是依序讀取pcm檔案的內容,並輸入至API中處理,最後將結果輸出於output檔案。

執行結果

執行aec_test程式後,會出現選單,再輸入e便可執行AEC的測試,過程的中顯示的訊息如下:


使用分析軟體可以發現,以下為喇叭發出的聲音


會對麥克風採集到的說話聲造成影響

但是在透過AEC處理後,便可以順利消除喇叭的影響,只留下應該採集到的人聲部分

參考資料

https://www.speex.org/

https://github.com/AITg-ADC/AudioLib

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論