技术干货 | 为高音质保驾护航 - 通信中的回声消除
導讀:語音通信,在當代生活已經成為了大家主要的溝通交流方式,而通話語音的質量也是衡量每個廠商系統好壞的標志之一。這次給大家分享網易云信是如何通過回聲消除算法保證通話語音質量的。
文|胡林艷
網易云信音視頻引擎開發工程師
?前言
?回聲產生原因?
在語音通信中,回聲一直是影響音質的主要因素,它會帶來種種影響,比如在漏回聲、產生雜音、處理人聲斷續、忽大忽小、丟字、失聲等現象中,有一部分就是回聲或者工作失調的回聲消除算法引起的。所以,一個優質的回聲消除算法,將在很大程度上提升語音通信的音質。所謂回聲,就是自己的聲音又傳回自己。
簡單來說,一個人的聲音傳到對方,經過揚聲器播放,通過空間聲場傳播被麥克風采集到,這樣回聲 echo 就產生了。疊加了近端本身的聲音(包括近端語音,近端噪聲),這樣對端就聽到了自己的聲音(回聲 echo)+ 另一方聲音。
一端麥克風采集的混合信號,有本端說話人的語音信號和對端說話人通過揚聲器播放的語音產生的回聲(紅色信號),這樣疊加的語音信號(藍色信號)通過傳輸線路傳到對端揚聲器播放,對端人就聽到自己剛剛的語音信號,即所謂的回聲。
所以混合信號中除了本地的語音之外,還有對方的回聲信號。回聲消除算法,就是要把這個紅色的回聲信號從藍色的麥克風混合信號中去除掉。
?回聲帶來的影響?
回聲是不能在通話回路中存在的,一方面會引起對話的混淆,一方面也會帶來嘯叫,在會議中影響更大。所以通常會加入回聲消除算法進行處理。
如果回聲沒有被算法完全消除,會因為消除產生畸變,導致聽起來像雜音,嚴重影響主觀感受。同時,回聲消除處理兩端同時說話的雙講數據時,可能會將近端語音當作回聲處理,導致近端語音出現忽大忽小,甚至剪切的效果。因此,一個優質的回聲消除算法在通話中,極為重要。
?回聲消除原理
?回聲消除框架?
回聲消除算法實施時,參考信號是從播放端接收到的遠端信號獲得的,聲音從揚聲器播放出去,再被采集產生的回聲,分成直達聲和反射回聲。直達聲是最先到達并且能量最大的回聲,往往和設備本身、軟件系統設計、聲音傳播路徑有關。所以需要一個方法,找到參考信號/揚聲器信號跟麥克風信號之間的延遲,并調整緩沖區,使得算法獲取到的參考信號和回聲信號中間時延較小。
回聲經過揚聲器播放,聲音傳播,再到麥克風采集,經過了三個系統,而這三個系統中,揚聲器、麥克風系統為非線性系統的可能性很高,而聲音傳播的系統,是線性系統。所以整個過程中,有可能存在非線性部分,但是肯定存在線性部分,而在無法預知回聲特征前提下,去跟蹤線性回聲成為一種可行的辦法。跟蹤的線性回聲,從采集信號中減去,就得到了回聲的殘留信號。
而非線性的回聲,可以通過非線性的處理方式將殘差信號中的殘余回聲給徹底抑制掉。
如圖所示,一個完整的回聲消除算法框架,包含三個主要模塊
延遲估計模塊。
線性濾波模塊。
非線性處理模塊。
?時延估計模塊?
時延產生原因
參考信號取自下行接收的數據,麥克風信號取自采集的數據,中間存在時延、聲音傳播時間(無論內外)、播放采集線程工作的 buffer、啟動時間差等。不同設備、不同環境下存在的時延不同。
時延估計模塊影響
時延的對齊可以減輕自適應濾波器的壓力,減少濾波器的跟蹤長度,降低開銷, 如果沒有時延對齊模塊,就需要將濾波器跟蹤的長度設計成能夠覆蓋所有參考信號到回聲信號之間的時延,這經常是上百毫秒的,計算量非常大。
時延的對齊影響濾波器的性能。時延沒對齊,濾波器跟蹤的參考信號和回聲信號相關性極低,濾波器收斂會受到影響。時延估計過量,濾波器跟蹤的信號緩沖區中根本找不到參考信號,濾波器同樣不能收斂。
時延的對齊速度,影響整個收斂速度,影響濾波器收斂,同時也影響非線性回聲處理。時延變化時,需要能夠快速跟蹤到時延的變化,并且迅速調整,否則就會偶現回聲。
時延估計設計
一般來說,由于設備揚聲器和麥克風的響應影響,回聲的分布大致在中頻段,高頻低頻部分回聲很少,因此可以在中頻段去跟蹤回聲。
Webrtc 的 aec?模塊采用的是頻域 Binary Spectrum 的方法。將兩端的頻譜中間頻段的分布映射到二值化數據,尋找相似性最高的遠端信號并計算對應的時延,該方法計算量很低,但是受噪聲影響很大。
Webrtc 的 aec3 模塊采用的是線性濾波。匹配濾波器的方法是直接在時域信號做 NLMS (Normalized Least Mean Square) 處理,這個方法魯棒性很好。
時域信號互相關會出現多個峰值,導致時延估計不準。我們考慮采用頻域互相關的方法,結合線性濾波,一方面保證魯棒性,一方面利用頻域互相關檢測速度快的特點,加快檢測速度。
?線性濾波模塊?
x(n) 為遠端輸入信號,經過未知的回聲路徑 h(n) 得到 y(n)=x(n)?h(n),再加上觀測噪聲 v(n),得到近端輸入信號 s(n)=y(n)+v(n)。x(n) 通過自適應濾波器 w(n) 得到估計的回聲信號,并與近端輸入信號 s(n) 相減得到誤差信號 e(n),即 e(n)=s(n)?conj(w(n))x(n),自適應濾波算法所估計的回聲路徑就越接近實際的回聲路徑,得到的誤差就越小,回聲殘留就越小。所以用得到的誤差大小作為自適應調整的方向。
濾波器采用特定的自適應算法不停地調整權值向量,使估計的回聲路徑 w(n) 逐漸趨近于真實回聲路徑 h(n)。這樣濾波器的輸出能夠逼近真實的回聲,從而使誤差信號中不存在回聲信號。
自適應濾波器收斂階段,近端信號是完全的 echo,不能混雜有近端語音。因為近端和噪聲是會擾亂 h(n) 的收斂過程。也就是說要求回聲消除算法開始運轉后收斂要非常快,最好要求對方的算法在你一說就收斂好了,收斂好之后,如果對方開始說話,這個 h(n) 系數就不要變化了,需要穩定下來。
回聲路徑可能是變化的,一旦出現變化,回聲消除算法要能判斷出來,因為自適應濾波器學習要重新開始,也就是 h(n) 需要一個新的收斂過程,以逼近新的回音路徑 H。自適應濾波器需要在收斂速度和跟蹤性能、穩態失調之間進行平衡。
線性濾波器設計
自適應濾波器,目前常用的是 NLMS 濾波器和 Kalman 濾波器,這兩種濾波器各自有優點和缺點。Kalman 濾波收斂速度快,收斂性能欠缺;NLMS 相對來說比較平穩。基本上就是在于收斂速度和跟蹤性能、穩態失調有不同的偏向。但是無論哪種濾波器,都是可以調整跟蹤的速度來改變收斂速度和跟蹤性能之間的平衡,NLMS 改變的是步長值,Kalaman 改變的是增益。
我們考慮用多種濾波器混合使用的方案,取不同濾波器的優點,保證收斂速度,同時也相互限制發散。非線性濾波器也會參與估計回聲、雙講的狀態,從而控制自適應濾波器跟蹤步長,根據狀態實現變步長跟蹤。
?非線性濾波模塊?
非線性處理模塊通常是計算參考信號、麥克風信號、線性回聲信號以及殘差之間的相關性,估計殘留回聲,或者回聲的狀態。采用維納濾波的方式消除回聲,其重點在于如何估計殘留回聲,而估計殘留回聲的大小,也直接影響到最終消除的結果。殘留回聲估計不足,回聲處可能會有殘留;殘留回聲估計太過,雙講處會對近端語音損傷。
非線性濾波器設計
我們的非線性處理模塊針對參考信號、麥克風信號、線性回聲信號以及殘差信號,采用峰值相關性、頻域相關性、幅值相似性等特點,聯合判斷得到雙講狀態、回聲狀態等信息。除了上述的相關性外,還可以利用線性濾波器的更新權值去獲得回聲的狀態。而影響最終輸出結果的,是殘余回聲或者回聲大小的估計。殘余回聲的估計,采用了回聲的狀態和濾波器的 ERL (Echo Return Loss) 估計相結合的方法。
業務中回聲消除算法設計
?不同場景對回聲的需求?
根據業務的需求,我們結合場景分類模塊,將通話場景分成音樂場景和語音場景,而不同的場景下,回聲的特點和對回聲消除的要求不同,從而可以調整回聲和雙講的平衡。
在音樂對話場景下,雙講占比較多,希望保留音樂,音樂下回聲不明顯,所以在整個非線性檢測上,偏向于雙講的檢測。在語音對話場景下,雙講占比小,回聲要求干凈,所以非線性檢測上,偏向于回聲的檢測。
?不同模式對回聲的需求??
通過檢測外設情況,分成耳機模式、外放模式。耳機下通常是沒有回聲的,部分由于線路耦合產生的回聲,或者耳機密封性不好外漏的回聲,線性特點明顯,回聲較小,但是耳機下對回聲和雙講的剪切感都比較明顯,可以結合線性濾波器的殘差結果,調整殘留回聲的估計。而常用的外放模式下,基本上回聲都非常大,信回比低,對回聲的殘留比較敏感,所以殘留回聲估計時,會比較偏向于回聲估計,從而達到最優的聽覺效果。
結語
以上技術方案就是本次分享的全部內容,通過回聲消除技術,能夠提升用戶的聽感,適應各種場景切換和環境變化,保證不受回聲干擾。每塊技術都比較重要,也是經過多次優化調優的結果。網易云信也將繼續打磨音頻技術,給行業帶來更好的服務。
?作者介紹?
胡林艷,網易云信音視頻引擎開發工程師,負責音頻引擎的回聲消除算法開發,在傳統語音增強算法設計方面有豐富的經驗。
?相關閱讀推薦?
技術實踐|網易云信 IM SDK 服務高可用技術方案
云信小課堂|搭建應用級別在線聊天室,7步就夠了!
技術干貨 | 高性能短鏈設計與實現
總結
以上是生活随笔為你收集整理的技术干货 | 为高音质保驾护航 - 通信中的回声消除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术干货 | 高性能短链设计与实现
- 下一篇: 资讯|WebRTC M93 更新