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