摘 要: 使用Xilinx公司最新生產(chǎn)的Spartan-6系列FPGA芯片,采用自頂而下的方法成功設(shè)計出一種基于LMS算法的橫向自適應(yīng)濾波器,并且通過了仿真檢驗,到達(dá)了設(shè)計目標(biāo),能實現(xiàn)預(yù)期功能。
關(guān)鍵詞: 適應(yīng)濾波器; LMS算法; FPGA; 橫向結(jié)構(gòu)
有關(guān)自適應(yīng)信號的研究是電子通信領(lǐng)域的重要課題之一,相關(guān)的理論和技術(shù)一直受到業(yè)界的高度關(guān)注。而自適應(yīng)濾波器可以根據(jù)環(huán)境的改變,使用自適應(yīng)算法來改變自身的結(jié)構(gòu)和相關(guān)參數(shù),是實現(xiàn)自適應(yīng)濾波的有效途徑。
自適應(yīng)濾波器的系數(shù)并不是預(yù)先設(shè)定好的,它是根據(jù)所采用的算法,利用從環(huán)境提取出來的參量和預(yù)設(shè)的目標(biāo)值計算出來的。因而,它的參數(shù)并不是一成不變的,而是隨著外界條件的改變而改變,并且能夠跟蹤輸入信號的時變特征。然而,目前市場上的濾波器很多還是基于傳統(tǒng)的集成電路設(shè)計方法,設(shè)計周期長,調(diào)試?yán)щy,而FPGA正是解決這一問題的有效途徑。鑒于此,在深入研究自適應(yīng)濾波器理論的基礎(chǔ)上,通過FPGA來實現(xiàn)自適應(yīng)濾波器具有很大的實際意義。
本文通過對自適應(yīng)濾波器理論的深入研究,基于最小均方誤差(LMS)算法,采用自頂向下的FPGA設(shè)計理念,使用Xilinx公司最新生產(chǎn)的Spartan-6系列FPGA芯片,實現(xiàn)一種橫向自適應(yīng)濾波器,并且通過Matlab和Quartus II進(jìn)行仿真和測試,驗證了方案的正確性。該設(shè)計具有很強(qiáng)的創(chuàng)新性和社會應(yīng)用價值。
1 自適應(yīng)濾波器設(shè)計原理
1.1 橫向自適應(yīng)濾波器
自適應(yīng)濾波器的結(jié)構(gòu)多種多樣,本設(shè)計采用抽頭延遲線模式的橫向濾波器。這種結(jié)構(gòu)層次十分清晰,并且在量化生產(chǎn)時降低了芯片的制作難度,從而節(jié)約成本,所以得到了廣泛的應(yīng)用。其結(jié)構(gòu)如圖1所示。
權(quán)系數(shù)的調(diào)節(jié)過程簡單來說就是不斷將輸出信號與所要得到的信號進(jìn)行對比,根據(jù)兩者之間的差異調(diào)整濾波器的系數(shù),不斷縮小兩者間的差距,最后實現(xiàn)理想的輸出狀況。在橫向濾波器中,系數(shù)體現(xiàn)在抽頭的加權(quán)上,而加權(quán)系數(shù)就是系統(tǒng)根據(jù)自適應(yīng)算法算出的,往復(fù)循環(huán),直到達(dá)到理想輸出。
1.2 LMS算法
由Professor Widrow和Dr. Hoff引入的最小均方(LMS)算法,由于其簡單性、運算高效性和各種運行條件下良好的性能而被廣泛應(yīng)用。本文以此算法作為自適應(yīng)濾波器的理論設(shè)計基礎(chǔ)。
基于梯度的最小均方(LMS)算法是一種比較基礎(chǔ)卻很實用的算法。根據(jù)參考文獻(xiàn)[1],當(dāng)選定均方誤差為權(quán)矢量二次函數(shù)時,性能度量曲線可以形象地看成是一個碗形曲面,這樣自適應(yīng)處理器的任務(wù)便是不斷地向最低點逼近,即可以通過計算梯度的方法實現(xiàn)性能度量的最優(yōu)化。其原理框圖如圖2所示。
FPGA的設(shè)計方法有很多,本文采用的是較為流行的自頂而下的設(shè)計方法,如圖4所示。采用此方法優(yōu)點有很多。由于系統(tǒng)從上向下進(jìn)行開發(fā),所以在開發(fā)的過程中就可以進(jìn)行適當(dāng)?shù)恼{(diào)試,而不是等到基本成型之后才尋找問題。這樣可以盡早發(fā)現(xiàn)問題,減少研發(fā)中由于失誤帶來的損失。此外,由于底層設(shè)計會因頂層的變化而改變,所以修改的過程也變得更加方便。許多在設(shè)計過程中的新想法也可以加入到產(chǎn)品中試驗,進(jìn)一步提高性能。由此可見,本文所采用的設(shè)計方法是科學(xué)的、高效的。
2 基于FPGA的濾波器設(shè)計
2.1主要組成模塊
本文用Xilinx公司最新生產(chǎn)的Spartan-6系列FPGA芯片進(jìn)行自適應(yīng)濾波器的設(shè)計。根據(jù)LMS算法計算過程實現(xiàn)的功能[2], 將自適應(yīng)濾波器主要分為FIR濾波器模塊、誤差計算模塊、權(quán)值更新模塊、權(quán)值存儲模塊和控制模塊。綜合設(shè)計框圖如圖5所示。
在該設(shè)計中,關(guān)于濾波器的部分,采用嵌入Matlab模塊的方法,直接根據(jù)濾波原理構(gòu)建模型。輸入信號的延時和控制模塊的實現(xiàn)使用Verilog語言編程。
2.2 控制模塊
控制模塊主要用于初始化各模塊、產(chǎn)生控制信號、控制各模塊的特定功能、負(fù)責(zé)數(shù)據(jù)存儲地址分配及數(shù)據(jù)輸入/輸出控制功能、根據(jù)外部輸入的幀時鐘生成數(shù)據(jù)存儲模塊以讀取數(shù)據(jù)的讀寫地址等[3]??刂颇K還要能夠使系統(tǒng)的模塊之間相互協(xié)調(diào),保障系統(tǒng)在局部以及整體上工作流暢。
2.3 FIR濾波模塊
FIR濾波模塊實現(xiàn)FIR算法和抽頭系數(shù)調(diào)整。FIR算法得到Y(jié)(n),其主要實現(xiàn)一個卷積運算, 即Y(n)=W(n)*X(n)。
FIR濾波模塊的輸入Xin主要包括數(shù)據(jù)和權(quán)值系數(shù)兩部分。采用字寬為12 bit的A/D轉(zhuǎn)換器,將轉(zhuǎn)換得到的數(shù)據(jù)存儲在一個深度為N的靜態(tài)隨機(jī)存儲器SRAM中,以此信號數(shù)據(jù)Din作為所設(shè)計的N階FIR濾波器的輸入量。開辟一個字寬為16 bit的ROM用以存儲FIR的權(quán)值系數(shù)Coeffs,其中最高位表示符號位。乘加運算是靠復(fù)用12×16的乘法器和加法器來實現(xiàn)的。系統(tǒng)設(shè)計時,采用Verilog語言實現(xiàn)參數(shù)化乘法器,這樣的設(shè)計有利于系統(tǒng)的簡潔和穩(wěn)定。SROM中的X(n)以及ROM中的系數(shù)W(n)的讀取一定要遵從嚴(yán)格的時序,系統(tǒng)采用狀態(tài)機(jī)輸出地址信號來控制。乘加運算完成之后,會產(chǎn)生數(shù)據(jù)輸出有效信號yvalid。A/D轉(zhuǎn)換過程中會輸出Next信號作為標(biāo)志信號,表示數(shù)據(jù)轉(zhuǎn)換成功,可以進(jìn)行下一次運算。
參數(shù)化乘法器核心代碼如下:
always@(posedge clk)
begin
if(state<8)
begin
addr<=addr+1′b1; //時鐘地址加1,乘法一次
yvalid<=1′b0;
end
else
begin
state<=0;
yn_out<=yout;
yvalid<=1′b1;
end
end
always@(posedge clk)
begin
yout<=yout+re; //累加
end
2.4誤差計算模塊
誤差計算模塊是系統(tǒng)必不可少的一個部分,是對系統(tǒng)功能的強(qiáng)力補(bǔ)充,對于系統(tǒng)的完善有很大意義。FIR濾波器的輸出和期望值會存在一定量的誤差,利用該模塊可實現(xiàn)此誤差的計算。聯(lián)系以下要介紹的權(quán)值存儲模塊中的數(shù)據(jù)和當(dāng)前輸入的數(shù)據(jù)進(jìn)行信號的處理,該模塊還會輸出權(quán)值計算模塊所需數(shù)據(jù)。根據(jù)上面FIR濾波器輸出結(jié)果可知,當(dāng)輸出信號yvalid有效時,yn_out輸出結(jié)果。yn_out輸出結(jié)果作為可以計算誤差的標(biāo)志,在Next信號的上升沿時刻,根據(jù)有效的yvalid,通過一個減法器實現(xiàn)誤差的計算。核心代碼如下:
always@(posedge next)
begin
if(yvalid)
err<=dn-yn_out;
end
2.5 權(quán)值計算及存儲模塊
權(quán)值存儲模塊是關(guān)鍵的輔助模塊,根據(jù)FIR濾波模塊等各個處理模塊的輸出數(shù)據(jù)對信號的數(shù)據(jù)以及權(quán)值進(jìn)行必要的更新。更新的數(shù)據(jù)還要存入存儲模塊。
3 仿真及功能檢驗
完成整個系統(tǒng)的功能測試需要進(jìn)行大量的工作,以確保系統(tǒng)的有效性及工作的穩(wěn)定性。軟件的外圍接口以及算法的功能性都需要經(jīng)過反復(fù)調(diào)試。采用當(dāng)下比較流行的FPGA設(shè)計軟件Quartus II來進(jìn)行測試與改進(jìn)。
Quartus II軟件自帶的仿真工具局限性很大,功能比較單一。如此復(fù)雜的一個系統(tǒng)的仿真分析對Quartus II軟件本身來說是相當(dāng)困難的,而Matlab是強(qiáng)大的數(shù)值分析及信號波形研究軟件,因此利用Matlab和Quartus II軟件的結(jié)合完成系統(tǒng)的仿真測試。利用Matlab產(chǎn)生復(fù)雜的仿真輸入信號,再利用Quartus II進(jìn)行仿真輸出,并利用Matlab進(jìn)行輸出結(jié)果的分析和驗證。2抽頭的FIR自適應(yīng)濾波器的LMS算法RTL結(jié)構(gòu)如圖6所示,其復(fù)雜度是FIR濾波器的3倍。
仿真結(jié)果如圖7所示,僅從波形上看,基本上實現(xiàn)了自適應(yīng)濾波的功能,但是波形并沒有達(dá)到很理想的狀態(tài),低階的LMS模塊自適應(yīng)處理能力較弱,收斂性不好。這主要是因為在該設(shè)計中,FIR濾波器的階數(shù)太小。因此,在實際制作FPGA時,自適應(yīng)抽頭數(shù)用10個。
本文在深入研究自適應(yīng)濾波器的理論和LMS算法的基礎(chǔ)上,利用Xilinx公司最新生產(chǎn)的Spartan-6系列FPGA芯片,采用自頂而下的方法成功設(shè)計出一種基于FPGA的自適應(yīng)濾波器。該設(shè)計結(jié)構(gòu)清晰,原理明確,設(shè)置方便,并且調(diào)試起來十分簡單。通過模擬仿真和時序檢驗,該橫向自適應(yīng)濾波器完成了設(shè)計的要求,可以達(dá)到明顯的濾波效果,其性能滿足很多領(lǐng)域中對濾波器的要求,實用性很強(qiáng)。
參考文獻(xiàn)
[1] HAYKIN S S, WIDROW B. Least-mean-square adaptive filters[M]. John Wiley & Sons, 2003.
[2] 郭繼昌,向暉,滕建輔,等.基于FPGA的FIR濾波器的實現(xiàn)[J].電子技術(shù)應(yīng)用,2000,26(5):62-66.
[3] 楊躍忠,闕沛文,李亮.自適應(yīng)LMS濾波器在FPGA中的實現(xiàn)[J].微計算機(jī)信息,2006,22(11):158-160.