回音就是發話端發出的聲音,在經過一陣子以後,自己又聽到自己發出的聲音,通常音量會變比較小一點,但還是能識別出來是自己發出的聲音。
回音通常分為兩種:線路回音、聲學回音。
線路回音是因為傳送語音的實體線路造成的,通常是因為電信局之間是使用四線,而電信局到用戶端是兩芯線,中間會有四線、二線的轉換混合器,如果阻抗不匹配(使用不同型號的電線,或是沒有使用負載線圈),就會導致混合器接收線路的語音訊號,外溢流到發送線路上,因此產生了回音。
聲學回音,就是發話端發出的聲音,傳送到接收端後,接收端以 speaker 播放出來,在麥克風收音時,同時又把 speaker 播放的聲音收錄進去,傳送回到發話端,通常造成這樣的回音的終端,並不會知道自己造成了回音,讓另一端聽到回音。
聲學回音又分為直接回音和間接回音。直接回音是指 speaker 播放出來的聲音未經任何反射直接進入麥克風,這種回音延遲最短。間接回音是指 speaker 播放的聲音經不同的路徑一次或多次反射後進入麥克風所產生的回音集合,有可能是房間的牆壁反射造成的。
回音消除主要包含兩個步驟:線性自適應濾波和非線性處理。
線性自適應濾波就是對 fe=f(fs) 求解,建立遠端回聲的語音模型,進行第一輪回音消除。
非線性處理又分為兩個步驟:殘留回音處理和非線性剪切處理。殘留回音處理進行第二輪回音消除,處理殘留回音;非線性剪切處理就是對衰減量達到閾值的語音信號進行比較激進的剪切處理。
自適應濾波演算法
有兩個系列:LMS 與 RLS
LMS 比較穩定,運算量小,比較容易建置與實作。RLS 執行時收斂速度較快,缺點是運算量大。
LMS: Least Mean Square Algorithm
LMS 是最廣泛使用的濾波器演算法,計算過程只有加法與乘法。做法是讓輸出的誤差訊號的均方值最小化。
LMS 的 adaptation step size 是用來調整加權參數的修正速度,數值太小會讓收斂速度變慢,太大會造成發散。
NLMS: Normalized LMS
重新定義 LMS 中的 𝜇 (adaptation step size),讓 𝜇 會隨輸入訊號的 normalization 而改變,提升收斂的穩定性。
RLS: Recursive Least Squares Algorithm
RLS 演算法目標是將輸出誤差信號平方值總和最小化
open source AEC
目前 open source 的 AEC 演算法有 speex 與 webrtc,兩種都是使用自適應濾波 NLMS。
speex 是使用 MDF 雙濾波結構,用前綠波跟本次濾波的結果來調整濾波器的參數,濾波器的長度很長。
webrtc AEC 比較複雜,包含了 delay 估計, NLMS 及 NLP,舒適噪音。NLMS 的部分只用了 12 block。
目前 speex AEC 用在嵌入式系統,硬體不需要延時模組,速度比較快。webrtc AEC 用在軟體。
References
聲學回聲消除(Acoustic Echo Cancellation)原理與實現
Understanding the Echo "Phenomenon" Causes and Solutions
speex AEC
Speex Acoustic Echo Cancellation (AEC) 回聲消除模塊的使用 2013
speexdsp回聲消除模塊在android中封裝及使用例子 2020
webetc AEC
單獨編譯和使用webrtc音訊回聲消除模組(附完整原始碼+測試音訊檔案)
WebRTC AudioProcessing 3A: AEC AGC ANC 初探
沒有留言:
張貼留言