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