王志鐸, 馬令坤, 張俊濤
(1.陜西科技大學 電氣與控制工程學院, 陜西 西安 710021; 2.陜西科技大學 電子信息與人工智能學院, 陜西 西安 710021)
在語音通信的過程中往往會受到各種噪聲的干擾,這些噪聲可能是由于路徑損耗、反射、衍射等各種原因造成從而使通信質(zhì)量下降,抑制這些干擾,提高通信質(zhì)量是十分必要的[1].傳統(tǒng)的濾波器無法濾除特性和傳輸路徑不斷變化的噪聲信號,隨著數(shù)字信號處理技術(shù)的發(fā)展,自適應濾波技術(shù)已經(jīng)成為數(shù)字信號處理領(lǐng)域的一個重要分支,且已經(jīng)廣泛應用到生活、工作和軍事等領(lǐng)域[2].在實際應用中,不同的應用場合對硬件實現(xiàn)的速度和成本的要求不同,例如,移動電話中使用的LMS自適應濾波器需要盡可能小的面積以減輕設(shè)備的重量,但是該應用中的速度不太重要,因為它用于語音處理[3].
FPGA采用并行處理方式,使用靈活且易于裁剪,因此用于FPGA實現(xiàn)的自適應噪聲抵消器的硬件設(shè)計變得十分重要.在本文中,以DE2-115為硬件平臺在FPGA上實現(xiàn)音頻的自適應噪聲消除,使用符號LMS算法實現(xiàn)噪聲抵消器,同時采用高性能音頻編解碼芯片WM8731對信號進行采集和輸出,通過SIMULINK和FPGA進行連接[4]將實時的語音信號輸入FPGA中進行處理以實現(xiàn)高信噪比的自適應噪聲抵消.
自適應噪聲抵消是一種自適應系統(tǒng),用于從所需信號中去除不需要的噪聲.如圖1所示,自適應噪聲抵消有兩個輸入,稱為主輸入和參考輸入.參考輸入經(jīng)過濾波器并從主輸入中減去,主輸入包含信號和噪聲[5].來自參考輸入的噪聲信號n1通過噪聲路徑信道傳遞到主輸入端,該主輸入端接收信號源s和不相關(guān)的噪聲n0.噪聲n1經(jīng)過濾波器以產(chǎn)生輸出信號y,它是n0的近似,并從主輸入d中減去,以產(chǎn)生稱為誤差信號e的系統(tǒng)輸出信號e=s+n0-y.誤差信號用于使用自適應算法調(diào)整自適應濾波器的權(quán)重系數(shù),以使誤差信號最小化.
圖1 自適應噪聲抵消模型
最小均方算法的基本結(jié)構(gòu)如圖2所示.可以用三種基本關(guān)系的形式表述如下:
y(k)=uTW
(1)
e(k)=d(k)-y(k)
(2)
Wk+1=Wk+2×μ×e(k)×u(k)
(3)
從算法的迭代公式可以看出,只要給定濾波器的長度,收斂因子,LMS算法只利用輸入信號u和期望信號d即可進行計算,不需要計算自相關(guān)矩陣Rx以及互相關(guān)向量等,因此非常適合用于先驗知識未知的場合.
圖2 LMS自適應濾波器框圖
從LMS算法的公式可以看出,一個M階的LMS自適應濾波器在一個輸入信號周期內(nèi)要使用M次乘法完成濾波,還需要2M次乘法完成系數(shù)的更新,而乘法運算會在FPGA中占用較多的資源,為了LMS濾波器的乘法次數(shù),將對該項目使用符號LMS算法,以減少對邏輯單元的占用,從而能夠設(shè)計出更多可能的自適應濾波器[6].
符號LMS算法同樣是利用隨機梯度來達到最優(yōu)解,不同的是,符號法只給出梯度迭代的方向,而不給出具體的梯度值,性能沒有LMS算法穩(wěn)定,但相對的換來了運算速度的增加和硬件資源的節(jié)約,符號LMS算法的迭代公式有三種形式[7],即:
Wk+1=Wk+μ×sign[e(k)]×x(k)
(4)
Wk+1=Wk+μ×sign[x(k)]×e(k)
(5)
Wk+1=Wk+μ×sign[e(k)]×sign[x(k)]
(6)
分別稱上述三種算法為符號-誤差算法、符號-數(shù)據(jù)算法、符號-符號算法,比較三個公式,容易看出,符號LMS算法在權(quán)值更新的過程減少了M次乘法運算,對于乘法器資源有限且乘法速度有限制的FPGA來說可以大幅提高LMS算法的運算速度[8].式(6)對誤差信號和參考信號都進行了符號運算,通過誤差信號和輸入信號的符號來決定梯度迭代的方向,減少了2M次乘法運算.
符號LMS算法有三種形式,算法性能的隨機性很大,收斂速度、穩(wěn)態(tài)誤差會有不同的特性,在FPGA上實現(xiàn)之前首先在MATLAB平臺對符號LMS算法進行仿真,并與傳統(tǒng)的LMS算法進行對比,評價出算法性能較好的一種,并對不同噪聲條件下符號LMS算法降噪的性能進行對比分析.
編寫MATLAB代碼進行仿真驗證,利用MATLAB產(chǎn)生兩個正弦信號,信號s頻率為500 Hz,幅度為1,噪聲n頻率為1 kHz,幅度為1,并將s和n疊加作為含噪信號,信號長度為1 000,濾波器的階數(shù)M=8,收斂因子μ=0.125.由文獻[9]知符號-數(shù)據(jù)算法和符號-符號LMS算法相對于符號-誤差算法收斂速度更快,而符號-數(shù)據(jù)算法比符號-符號算法有更好的穩(wěn)態(tài)誤差,再者從硬件實現(xiàn)的角度來看并不需要符號-符號LMS算法,因為與μ相乘是一個常數(shù)的縮放,在FPGA中可以通過數(shù)據(jù)移位實現(xiàn)與μ相乘,只需將μ設(shè)定為2的N次冪的形式即可,調(diào)用符號LMS算法程序,通過更改權(quán)值更新的公式運行程序出符號-數(shù)據(jù)LMS算法和傳統(tǒng)LMS算法并繪制出信號圖形和均方誤差圖形如圖3和圖4所示.
圖3 兩種算法仿真前后對比圖
圖4 均方誤差曲線圖
可以看到輸出信號跟預期信號基本相同,但是有細微的畸變,從誤差曲線可以看出,符號數(shù)據(jù)LMS的收斂速度跟傳統(tǒng)LMS算法基本保持一致,達到穩(wěn)態(tài)之前均方誤差較大,達到穩(wěn)態(tài)之后和傳統(tǒng)算法的穩(wěn)態(tài)誤差基本相同.
正弦波疊加的干擾抵消驗證了符號-數(shù)據(jù)LMS算法的可行性,通過實際疊加噪聲的語音信號進一步進行驗證,利用兩個具有一定距離的USB聲卡連接麥克風采集環(huán)境中的信號[10],并存儲在MATLAB環(huán)境中,用來采集信號的麥克風,一個靠近噪聲源采集噪聲,另一個靠近聲源位置采集含噪聲的聲音信號,將信號通過抵消器進行仿真驗證.
2.2.1 單頻率噪聲消除仿真
人說話的語音頻率范圍為300~3 400 Hz,屬于中低頻信號[11].生活中經(jīng)常會存在一些中低頻的干擾噪聲,例如GSM通信過程中,會受到頻率為217 Hz的TDMA噪聲的干擾[12].利用信號發(fā)生器輸出500 Hz的正弦波并通過功放放大用揚聲器輸出作為環(huán)境中的噪聲,同時在距離噪聲源一定位置發(fā)出“你好”的聲音,用兩路分別靠近噪聲源位置和人聲位置的麥克風同時采集環(huán)境中的聲音,通過SIMULINK存儲到MATLAB環(huán)境中進行處理,采集到的單頻噪聲信號的歸一化峰值為0.05,語音信號的峰值為0.1,仿真結(jié)果如圖5所示.
通過對比圖5(b)、(d)可以發(fā)現(xiàn),降噪系統(tǒng)抵消單頻的500 Hz噪聲信號效果明顯,系統(tǒng)只在開始階段有輕微的波動,從輸入輸出信號的頻譜也可以看出500 Hz附近的分量被大幅的衰減,抵消器對單頻信號的消除效果明顯,經(jīng)過計算在抵消前后的信噪比分別為-23.49 dB和3.83 dB,信噪比增益為27.32 dB.
(a)噪聲信號 (b)不含噪聲語音信號
(c)含噪語音信號 (d)消噪后信號
(e)含噪語音信號頻譜 (f)消噪后信號頻譜圖5 500 Hz單頻噪聲消除仿真
2.2.2 多種單頻噪聲疊加消除仿真
實際環(huán)境中同樣存在著諸如風扇噪聲等多頻噪聲,利用MATLAB生成歸一化幅度均為0.3的頻率分別為100 Hz、500 Hz和1 100 Hz的三個正弦波疊加的噪聲,通過揚聲器進行播放作為環(huán)境中的噪聲,利用同樣的方式采集信號到MATLAB環(huán)境中進行噪聲的抵消運算,采集到的多頻噪聲歸一化峰值為0.82,語音信號的歸一化最大峰值為0.1,仿真結(jié)果如圖6所示.
在經(jīng)過抵消器進行噪聲抵消之后還原出了語音信號,對比圖6(b)、(d)可以發(fā)現(xiàn),系統(tǒng)收斂速度相對于單頻信號變慢,收斂之后仍然有很好的抵消效果.從頻譜分析可以看出抵消前在100 Hz、500 Hz和 1 100 Hz附近有很大的分量,抵消后三個單頻尖峰基本被抵消掉,經(jīng)過計算在抵消前后的信噪比分別為-29.27 dB和-4.62 dB,信噪比增益為24.65 dB.
(a)噪聲信號 (b)不含噪聲語音信號
(c)含噪語音信號 (d)消噪后信號
(e)含噪語音信號頻譜 (f)消噪后信號頻譜圖6 多頻噪聲消除仿真
2.2.3 白噪聲消除仿真
白噪聲的頻帶范圍更寬,包含著更多的諧波分量,利用MATLAB生成均值為0,方差為1的白噪聲信號并通過揚聲器在室內(nèi)環(huán)境中播放,同時播放一段歌曲音頻[13],用兩個麥克風采集數(shù)據(jù)到MATLAB環(huán)境中并通過抵消器進行白噪聲的抵消,采集到的白噪聲歸一化峰值幅度為0.15,音樂信號的歸一化峰值幅度為0.3,仿真結(jié)果如圖7所示,抵消器較好地還原出了歌曲的聲音,從時域圖和頻譜圖都可以清晰地看出,白噪聲較好的被抵消掉.經(jīng)過計算在抵消前后的信噪比分別為-4.06 dB和15.92 dB,信噪比增益為19.98 dB.
(a)噪聲信號 (b)不含噪聲語音信號
(c)含噪語音信號 (d)消噪后信號
(e)含噪語音信號頻譜 (f)消噪后信號頻譜圖7 白噪聲消除仿真圖
自適應噪聲消除器的詳細結(jié)構(gòu)如圖8所示.由于要進行盲濾波,自適應濾波器需要測量參考噪聲和主輸入信號,這是公式(2)中的參考信號d.在源信號相對較弱的場中測量時,噪聲才能有效地用作參考.因此,記錄參考噪聲的麥克風必須與記錄主要輸入的麥克風保持一定距離.播放噪音的兩個揚聲器必須是相同的設(shè)置,以便噪聲在測量區(qū)域的任何地方同步.使用兩個USB聲卡連接麥克風同步采集含噪語音信號和噪聲信號.對于實時數(shù)據(jù)采集和自適應濾波,輸入的兩路信號經(jīng)過SIMULINK被記錄至MATLAB工作空間,連接并作為立體聲輸出信號回放,然后作為FPGA的輸入.這樣的結(jié)構(gòu)還允許異步自適應濾波,即記錄輸入數(shù)據(jù),將其存儲在MATLAB工作空間中,并將其用作FPGA的輸入,以便以后進行自適應濾波.立體聲線路輸入由兩個不同的輸入信號組成:左聲道中的含噪信號和右聲道中的噪聲信號.噪聲信號n1與誤差信號e和收斂因子μ一起決定了權(quán)重更新的速度.權(quán)重更新在LMS狀態(tài)機中定義,狀態(tài)機在一個音頻周期期間運行和處理一個音頻樣本.
圖8 系統(tǒng)整體框圖
WM8731音頻編解碼器可以提供高質(zhì)量的24位音頻.芯片支持麥克風輸入、線路輸入和輸出端口[14],采樣率可從8 kHz到96 kHz,采樣精度可以為8 bit、16 bit或 32 bit,WM8731通過串行I2C總線接口控制,該接口連接到FPGA芯片的引腳.本文采用48 kHz的采樣率和16 bit的采樣精度進行聲音信號的采集和輸出,利用LINEIN接口的兩路ADC分別采集含噪語音信號和噪聲信號,降噪后的信號利用LINEOUT接口的DAC進行輸出[15].利用FPGA內(nèi)部的PLL進行分頻得到18.432 MHz的時鐘作為音頻芯片的時鐘信號,編寫I2C總線通信代碼進行芯片寄存器配置,讀取兩路ADC的值送到狀態(tài)機進行降噪處理之后再由DAC控制輸出信號.
狀態(tài)機由狀態(tài)寄存器和組合邏輯電路構(gòu)成,能夠根據(jù)控制信號按照預先設(shè)定的狀態(tài)進行狀態(tài)轉(zhuǎn)移,是協(xié)調(diào)相關(guān)信號動作,完成特定操作的控制中心[16].符號LMS算法狀態(tài)機如圖9所示,為了跟MATLAB仿真保持一致,算法仍設(shè)為8階,利用DE2-115的其中四個撥碼開關(guān)將收斂因子μ設(shè)置為16級可調(diào),實驗時設(shè)置收斂因子取0.125.
圖9 符號LMS算法狀態(tài)機
每采集一個新的數(shù)據(jù)狀態(tài)機進入工作狀態(tài),首先進行系數(shù)的更新,系數(shù)更新公式采用公式(5)進行實現(xiàn),直接對輸入數(shù)據(jù)最高為判斷得出數(shù)據(jù)的符號進行梯度方向的判斷,進而改變誤差信號e的方向,收斂因子μ采用移位的方式實現(xiàn),整個權(quán)值更新的過程不再需要乘法運算的參與,后面三個狀態(tài)對采樣的數(shù)據(jù)進行緩沖保存,進而實現(xiàn)語音信號的實時處理.
圖10是符號LMS算法的ModelSim時序驗證圖,用跟MATLAB相同的數(shù)據(jù)進行硬件仿真,可以驗證算法在FPGA中成功實現(xiàn),同時也可以看到輸出信號達到穩(wěn)態(tài)的時間在微秒級別.權(quán)重更新的算法優(yōu)化也為FPGA節(jié)省了較多的乘法器.同MATLAB仿真結(jié)果相比,F(xiàn)PGA對信號的還原有相對較大的畸變,這是因為FPGA實現(xiàn)過程中,數(shù)據(jù)位寬為16位,權(quán)重系數(shù)位寬為32位,位寬的限制導致其必然和MATLAB中全精度計算有著一定的誤差.
圖10 FPGA仿真結(jié)果圖
利用SIMULINK實時采集兩路USB聲卡的信號并輸出給FPGA進行音頻信號的實時降噪處理,設(shè)置左右聲道分別輸出實時采集的信號和經(jīng)過噪聲抵消器處理的信號,將輸出信號接到示波器進行觀察,同時用示波器分析出兩路信號的頻譜,如圖11、圖12和圖13所示.從示波器圖形可以看出,500 Hz的噪聲被衰減了25 dB左右,疊加了三種正弦波的信號在每個單頻尖峰都有20 dB以上的抵消效果,疊加了白噪聲的音頻信號也能有效的消除噪聲,從頻譜圖中可以看出對白噪聲在整個頻帶上有平均約15 dB的衰減,這意味著噪聲可以降低到原始水平的1/10~3/10.
圖11 實時單頻噪聲抵消圖
圖12 實時多頻率噪聲抵消圖
圖13 實時白噪聲抵消圖
本文首先闡述了自適應LMS算法和速度更快的符號LMS算法,并且使用MATLAB進行分析比對,驗證了不同噪聲環(huán)境下自適應噪聲抵消算法的效果,然后將基于符號LMS算法的自適應噪聲抵消器在FPGA硬件上實現(xiàn),并通過ModelSim仿真驗證了符號LMS算法在FPGA上實現(xiàn)的收斂性和穩(wěn)定性.同時在FPGA上實時運行抵消器并驗證了不同噪聲下自適應噪聲抵消的效果,從實驗結(jié)果來看,無論是環(huán)境中的單頻噪聲還是白噪聲,在抵消器的作用下都能較好的被抵消,從而還原出有用信號.
本文在DE2-115開發(fā)板上實現(xiàn)的自適應噪聲抵消器可以有效地實時抵消正弦噪聲和多頻噪聲,并且也可以較好的抵消白噪聲,并且采用的符號LMS算法有效的節(jié)省了硬件資源,同時由于FPGA設(shè)計靈活且易裁剪,可以根據(jù)需求更改濾波器的階數(shù)、系數(shù)的位寬等參數(shù)應用在不同的場合.