1. 程式人生 > >回聲消除

回聲消除

Webrtc回聲消除模組在linux上的單獨編譯

版權宣告:本文為博主原創文章,若需轉載請註明出處。

本文基於以下連結編寫
[1]: http://blog.51cto.com/silversand/166095 回聲消除原理
[2]: https://www.cnblogs.com/mod109/p/5827918.html 回聲消除在window下的編譯
[3]: https://download.csdn.net/download/weixin_42050131/10429863 另一位博主的測試音訊下載地址

.

1、 回聲消除原理的簡單說明

在這裡插入圖片描述
【圖片轉自上文連結】

  1. 回聲分為聲學回聲以及線路回聲,本文只討論聲學回聲(AEC)。

  2. 如上圖,男士的語音資料通過網路傳輸到女士揚聲器上,並通過揚聲器在空間範圍內傳播,這時女士通過麥克風向男士對講:
    1)假設在理想空曠環境中,並且麥克風結構合理,那麼男士聽到的語音完全為女士的對話。
    2)當週圍障礙物較多,比如狹小的空間內,之前男士的語音資料經過牆壁等物體反彈並傳至麥克風上,並與女士語音資料混合,那麼男士聽到的語音則為女士的對話以及混合了男士之前語音資料的一段音訊。這時,稱這段混合音訊中男士語音資料為回聲。

  3. 理想而言,如果想要從這段混合音訊檔案中取出女士對話,只需在訊號上從混合音訊資料中減去之前男士的語音資料即可,故此我們需要在麥克風錄入女士聲音的同時,把男士傳過來的音訊資料記錄,以供訊號“減法”需要。
    但是實際上,由於原男士語音訊號經過反彈衰減最終傳至麥克風,這段音訊(迴音)和之前男士的音訊資料並不一致。所以實際中,我們把原始男士音訊資料進行一定運算之後才作為“減法”中的相減量,結果也即混合音訊減法後只能儘量趨近於原始女士音訊而非完全為女士音訊。
    .

2、 編譯準備

  1. 下載連結2博主所提供的Windows下的原始碼。
  2. 準備兩段pcm音訊,一段為近端麥克風音訊(混合音訊),一段為遠端揚聲器音訊(上文所述男士原音訊,也即對比音訊)

3、 編譯

  1. 由於原博主使用的windows下的編譯,所以在Linux下相應的x86編譯巨集開關要關閉
    同時取消sse , sse2等相關檔案的編譯。
  2. 本文編譯環境較老,所以編譯時關閉所有彙編(neon/mips)加速。
    原始碼已自行修改,編譯步驟參見:
    #tar -xf EchoCancellation_webrtc.tar.gz
    #cd WebRtcAudioAllTest/
    #cd WebRtcAudioTest/
    #make
    原始碼下載地址: https://github.com/GitDolhpin/webrtc_linux_echo_cancellation
    說明:
    如果編譯過程中出現如下錯誤,重新make即可,這是由於*.o檔案在製作靜態庫過程中不同步造成的。
    在這裡插入圖片描述

4、 測試

    1)由於需要兩段音訊,所以從文中所述連結中下載相應的WAV音訊。
    2)WAV音訊轉換為pcm音訊:
		 	WAV音訊與pcm的區別是WAV音訊比pcm音訊多了44個位元組的頭,相應去掉即可。
		 	文中所述使用Cool Edit Pro工具轉換,轉換後pcm格式為16bit位深,8KHz取樣率 ,一幀取樣持續週期5ms ,單通道
    3)如果已下載文中linux壓縮包並編譯,其中已有音訊檔案,直接測試即可:
          mic混合音訊 micin.pcm
          揚聲器音訊  speaker.pcm
          執行       ./webrtc_echo 20   //實測延時20ms時迴音消除效果最好
		  處理後的音訊為out.pcm ,可以與麥克風音訊對比,觀察回聲消除效果。

使用Cool Edit Pro分析結果