介紹了一種用于IP電話中的自適應回聲消除器,采用歸一化最小二乘(NLMS)自適應濾波器實現,包括語音模式檢測器和粗略時延估計器。最后以TI公司的TMS320C5402 DSP芯片為平臺,實現了該回聲消除器,還對關鍵代碼進行了分析。
關鍵詞:回聲消除,自適應濾波,NLMS,DSP
1 在VoIP中采用回聲消除技術的必要性
與傳統(tǒng)的PSTN網絡采用電路交換技術不同,IP電話采用的是分組交換技術,充分利用Internet來傳輸語音數據,使得價格大大降低,從而取得了長足的發(fā)展。但是IP電話也存在一些弊端,比如語言質量比較差,導致這一弊端的因素很多,其中主要的因素就是網絡延時和算法延時,這主要是由于互聯(lián)網的數據傳輸特點以及語音編解碼耗時較大導致的,總延時長達100ms。根據經驗,如果語音的延時超過了50ms,那么,人耳就可以鑒別出自己的回聲,顯然,IP電話系統(tǒng)的回聲是非常嚴重的,鑒于此,國際電聯(lián)(ITU)也相應地制定了回聲消除的國際規(guī)范,如G.165,G.168。
2 回聲消除器的結構框圖和基本原理
圖1所示是VoIP回聲消除系統(tǒng)結構圖。
從圖1可以看出,整個回聲消除系統(tǒng)分成三個部分:NLMS自適應濾波器、語音檢測器和粗略時延估計器。其中,語音檢測器又分為三個部分:近端說話檢測器、遠端說話檢測器和雙端說話檢測器。
圖1中,A、B端代表遠端用戶,C、D端代表近端用戶,y(n)代表時刻n來自遠端的語音采樣值。y(n)經過互聯(lián)網到達近端用戶的揚聲器端,由于從揚聲器出來的聲音信號經過空氣形成的回聲通道H(z)又會被近端的話筒拾取,這部分回聲信號echo(n)會混同近端用戶的語音信號一起進入近端的話筒,也就形成近端的聲學信號r(n),r(n)再通過互聯(lián)網,向遠端用戶的揚聲器傳輸。如果不采取回聲消除措施,只要遠端信號y(n)通過互聯(lián)網傳回遠端揚聲器的時間超過50ms(這是經常出現的情況),那么,這部分被近端拾取的回聲信號echo(n)會被遠端用戶分辨出來,結果就使得遠端用戶聽到了自己的聲音,會大大降低通話的質量,這是用戶所不能容忍的。所以,必須采取消除回聲的措施。
完成回聲消除的一個很重要的模塊就是自適應濾波器,本文采用NLMS算法進行自適應濾波。當遠端信號y(n)到達近端之后,先把這個信號“復制”一份,放到存儲器中,結合誤差信號,利用NLMS算法不斷調整自適應濾波器的系數,使得y(n)經過自適應濾波器后的輸出盡量逼近回聲信號echo(n),這樣,當近端的語音信號x(n)=0的時候,從B端輸出的誤差信號e(n)也就接近0,從而達到了回聲消除的目的。
當然,在NLMS自適應濾波器進行濾波和系數更新之前,必須檢測語音模式是近端說話模式、遠端說話模式、還是雙端說話模式,因為不同的說話模式NLMS自適應濾波器所執(zhí)行的功能是不完全相同的。另外,由于遠端信號y(n)被自適應濾波器“復制”到存儲器中的時刻t1和y(n)經過回聲通道H(z),進入近端話筒并作相應的處理的時刻t2是不相同的,t2要大于t1,這主要是語音數據編碼、打包和壓縮造成的。為了使得濾波器處理的信號y(n)和傳回遠端的信號r(n)保持對應,即echo(n)和y(n)保持高度的相關性,那么被自適應濾波器“復制”的y(n)信號,最好在存儲器中延時一段時間,這樣才能保證達到回聲消除取得比較好的效果。
3 NLMS自適應濾波器原理
為了討論方便,這里先考慮遠端說話模式,即近端語音信號x(n)為0。為了簡單起見,把圖1中的NLMS自適應濾波器部分單獨抽出來,簡化成圖2。圖2所示是NLMS自適應濾波器結構圖。
[!--empirenews.page--]
其中,H(z)傳遞函數用來表示回聲通道的特性。NLMS自適應濾波器就是要盡快地調整自己的系數,使其沖擊響應盡量逼近H(z)的沖擊響應,這樣才能使誤差信號e(n)逼近0。具體的實現過程如下。
自適應濾波器的輸出由式(1)給出:
其中:N是NLMS自適應濾波器的階數。BT=〔b0,b1Λ,bN-1〕是濾波器的系數矢量。-1),Λ,y(n-N+1)〕是濾波器n時刻的輸入信號矢量。
由于前面已經假設為遠端說話模式,故,近端語音信號x(n)為0。誤差信號e(n)可由式(2)給出:
其中:μ為步長因子,是一個常數,由試驗來確定,μ的選取至關重要,為了確保收斂,必須滿足0<μ<2。μ取值過大,雖然可以加快自適應濾波器的收斂速度,但是誤差信號e(n)也會大,μ取值過小,則使收斂速度變慢。e(n)由式(2)計算。P(n)是n時刻輸入信號矢量yn的短時平均功率,。
4 語音檢測器
語音檢測器在整個回聲消除系統(tǒng)中也占據非常重要的地位,這是因為不同的語音模式自適應濾波器所要求執(zhí)行的功能是不相同的,下面分別說明。
4.1 遠端說話檢測器
當近端用戶不說話而只有遠端用戶說話的時候,就是遠端說話模式。式(4)用于檢測遠端說話模式。
代表遠端信號和近端信號的較短窗功率估計值。是閥值常量,要由實驗來確定,取得太大或者太小都會導致檢測錯誤。
如果檢測出為遠端說話模式,那么,應該通過圖1中的NLMS控制器同時打開NLMS自適應濾波器的濾波功能和系數更新功能。
4.2 雙端說話檢測器
當近端用戶和遠端用戶同時說話的時候,就是雙端說話模式。式(5)用于檢測雙端說話模式。
表誤差信號和近端信號的短窗功率估計值。C是系數常量,C=10ERLE/10,一般ERLE取為8dB。D是閥值常量,要由實驗來確定,取得太大或者太小都會導致檢測錯誤,影響濾波效果。
如果檢測出為雙端說話模式,則要凍結FIR濾波器的系數更新功能,只需要完成濾波功能,即只要計算濾波器輸出r(n)的值。
4.3 近端說話檢測器
當只有近端用戶說話而遠端用戶不說話的時候,就是近端說話模式。式(6)用于檢測近端說話模式。
表近端信號短窗功率估計值和長窗功率估計值。NES MARGIN是閥值常量,要由實驗來確定。
如果檢測出為近端說話模式,那么,應該通過圖1中的NLMS控制器同時凍結NLMS自適應濾波器的濾波功能和系數更新功能。
5 粗略時延估計器
由于遠端信號y(n)通過回聲通道要經過編碼、打包和壓縮的處理,會花費大量的時間,這就必然會產生延時。而且這種延時還是在一定范圍內隨機波動的,這就增加了估計的難度,要想準確地計算出延時的大小是不可能的,只能是一個粗略的估計值,故稱為粗略時
延估計器??梢园凑帐剑?)和式(8)來估計延時值:
首先按照式(7)計算從近端傳到遠端的聲學信號和誤差信號的互相關函數,然后從中選出絕對值最大者,作為延時的估計參數。
6 DSP芯片簡介及關鍵代碼介紹
本文選擇TI公司的DSPTMS320C5402為硬件平臺來實現回聲消除,TMS320C54x是一款低功耗、高性能的定點數字信號處理器,運行速度可達到100MIPS。有兩個40位累加器A、B,192K字可尋址空間(64K字的程序存儲器、64K字數據存儲器及64K字I/O空間)。采用8總線增強型哈佛結構,多級流水線操作,專用的硬件乘法器,DSP的專用指令(如FIRS,LMS)。
下面是用DSP實現回聲消除的NLMS算法的關鍵代碼:
[!--empirenews.page--]
編程的時候,為了提高程序的運行效率,要充分利用DSP芯片的優(yōu)點。要盡量使用指令周期少的尋址方式,如直接尋址、雙操作數尋址。在設計濾波器的數據和系數緩沖區(qū)的時候采用循環(huán)尋址,這樣可以避免大批數據的搬移,節(jié)省指令周期,如果開辟一個長度為L的緩沖區(qū),必須保證其首址最低位至少有N個0,N是滿足2N>R的最小整數。還要多采用如ST‖MPY等并行指令,多采用DSP的專用指令,如LMS、FIRS。
7 結束語
回聲消除技術在IP電話中占有非常重要的地位,本文介紹了用NLMS算法設計回聲消除器,還涉及到語音檢測和時延估計,以及如何在DSP上實現。下面給出63階的NLMS自適應濾波器的系數更新結果,為了方便起見,把回聲通道H(z)等效成一個63階的FIR濾波器,其沖擊響應如圖3所示,并假設近端語音信號x(n)為0,不考慮延時,一段時間后NLMS濾波器的沖擊響應見圖4。圖4所示是收斂后的NLMS自適應濾波器系數。由圖4可以看出,NLMS自適應濾波器的收斂效果較好。
經過測試,本文所述的回聲消除器用于VoIP電話中,可以比較明顯地改善語音的質量。