摘 要:分析了FIR濾波器幾種常見實現方法的原理與不足;提出一種基于SoPC的FIR濾波器設計;介紹了系統的設計流程及實現方法;結合Matlab給出FIR濾波器的仿真結果。整個設計以Altera公司現場可編程邏輯器芯片EP3C25E144C8N為核心,具有程序簡單,調試方便的特點,有一定的實用價值及應用前景。
關鍵詞:FIR濾波器; SoPC; Matlab; 現場可編程邏輯器
中圖分類號:TP713 文獻標識碼:A
文章編號:1004-373X(2010)12-0072-03
Design and Realization of FIR Filter Based on SoPC
HU Zi-ying1,ZHOU Wei-long2,NIE Hui2
(1. Hunan University of Science and Engineering, Yongzhou 425100, China;
2. Electric and Information Engineering College, Hunan University of Technology, Zhuzhou 412008, China)
Abstract:A design of FIR filter based on SoPC is proposed, and the principle and deficiency of several common realization methods of FIR filter are analyzed. The design flow and realization of the system is discussed, and the simulation result of FIR filter is given combined with Matlab. The system uses the EP3C25E144C8N (produced by Altera) as the core, and it has features of simple program and convenient debugging.
Keywords:FIR filter; SoPC; Matlab; FPGA
0 引 言
數字濾波(idgital filter)是由數字乘法器、加法器和延時單元組成的一種計算方法。其功能是對輸入離散信號的數字代碼進行運算處理,以達到改變信號頻譜的目的。數字濾波器根據頻域特性可分為低通、高通、帶通和帶阻4個基本類型;根據時域特性可分為無限脈沖響應(infinite impulse response,IIR)濾波器和有限脈沖響應(finite impulse response,FIR)濾波器。FIR濾波器不存在穩定性和是否可實現的問題,容易做到線性相位,故在數據通信、圖像處理等領域廣泛應用[1]。
目前,FIR濾波器的硬件實現有以下幾種方式:一種是使用通用數字濾波器集成電路,這種電路使用簡單,但是由于字長和階數的規格較少,不易完全滿足實際需要;雖然可采用多片擴展來滿足要求,但會增加體積和功耗,因而在實際應用中受到限制。另一種是使用DSP 芯片,DSP芯片有專用的數字信號處理函數可調用,實現 FIR 濾波器相對簡單,但是由于程序順序執行,速度受到限制。而且,就是同一公司不同系統的DSP芯片,其編程指令也會有所不同,開發周期較長。還有一種是使用可編程邏輯器件,如FPGA(field programmable gate array ),即現場可編程門陣列,有著規整的內部邏輯塊整列和豐富的連線資源,特別適合用于細粒度和高并行度結構的 FIR 濾波器實現,相對于串行運算主導的通用 DSP 芯片來說,并行性和可擴展性都更好[2]。
本文介紹一種基于SoPC的FIR濾波器設計方案,設計流程如圖1所示。該設計方法程序簡單,調試方便,得到的FIR濾波器精確度高。
1 FIR濾波器原理
FIR數字濾波器是一種非遞歸系統,其沖激響應總是有限長的,其系統函數可以記為:H(z)=∑Mk=0bkz-k,最基本的FIR濾波器可用下式表示[3]:y(n)=∑N-1m=0x(n-m)h(m)。式中:x(n-m)是輸入采樣序列;h(m)是濾波器系數;N是濾波器的階數;y(n)表示濾波器的輸出序列。也可以用卷積來表示輸出序列y(n)與x(n),h(n)的關系:
y(n)=x(n)*h(n)
圖2顯示了一個典型的直接T型3階FIR濾波器[4],其輸出序列y(n)滿足下列等式:
h(n)= h(0)x(n)+h(1)x(n-1)+
h(2)x(n-2)+h(3)x(n-3)
圖1 設計流程圖
圖2 3階FIR濾波器結構
在該FIR濾波器中,總共存在3個延時結,4個乘法單元,1個4輸入的加法器。如果采用普通的數字信號處理器(DSP)來實現,只能用串行的方式順序地執行延時、乘加操作,不可能在1個DSP處理器指令周期內完成,必須用多個指令周期來完成。但如果采用FPGA來實現,就可以采用并行結構,在1個時鐘周期內得到1個FIR濾波器的輸出。不難發現,圖2的電路結構是一種流水線結構,這種結構在硬件系統中有利于并行高速運行[5]。
2 FIR濾波器的實現
Altera提供的FIR Complier是結合Altera FPGA器件的FIR Filter Core,DSP Builder與FIR Compiler 可以緊密結合起來。DSP Builder提供了FIR Core的應用環境和仿真驗證環境。
2.1 建立模型文件
為了調用FIR IP Core,在Simulink環境中新建模型文件,放置Signal Compiler模塊和FIR 模塊。啟動Simulink的方法:打開Matlab,在主命令窗口直接鍵入Simulink,按回車即可。然后打開Altera DSP Builder模塊,在MegaCore Functions 調出fir_compiler_v7_0。
2.2 配置FIR濾波器核[6]
雙擊模型中的FIR模塊,在彈出來的選擇窗口中有:關于這個核(about this core)、程序說明書(documentation)、顯示元件(display symbol)、步驟1確定參數(Step1:Parameterize)和步驟2生成(Step2:Generate)等4個不同的選項。點擊Step1,便打開了FIR濾波器核的參數設置窗口,如圖3所示。
由圖3可見,濾波器的系數精度為32位,器件為CycloneⅢ,結構為并行濾波器,結構選擇了1級流水線,濾波器由LC邏輯宏單元構成,系數數據存于FPGA的M9K模塊中,1個輸入通道,32位有符號并行輸入,全精度數據輸出。設定后會直接顯示濾波器的頻率響應(frequency response)或時域響應及系數值(time response coefficeient values)。由其頻率響應圖可以看出,此FIR濾波器為低通濾波器。如果不符合設計要求,則可以通過對Edit Coefficient Set選項,對濾波器進行重新配置。
圖3 確定FIR 濾波器系數
2.3 生成VHDL語言
完成FIR濾波器核配置后,便可得到設計好的濾波器,加入輸入/輸出信號,形成如圖4所示電路。點擊SignalCompiler,再選擇Analyze,選擇Sigle step compilation中的Convert MDL to VHDL,就可以生成對應的VHDL語言。
圖4 FIR濾波器編譯電路圖
在QuartusⅡ中打開編譯后生成的fir.qpf工程文件,可以得到濾波器的VHDL語言,其部分代碼如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_signed.all;
library dspbuilder;
use dspbuilder.dspbuilderblock.all;
library lpm;
use lpm.lpm_components.all;
Entity fir is
Port(
clock: in std_logic;
sclrp: in std_logic:=′0′;
ast_sink_data: in std_logic_vector(31 downto 0);
ast_sink_error: in std_logic_vector(1 downto 0);
ast_sink_valid: in std_logic;
ast_source_ready: in std_logic;
reset: in std_logic;
Output: out std_logic;
Output1: out std_logic_vector(31 downto 0);
Output2: out std_logic_vector(1 downto 0);
Output3: out std_logic
);
end fir;
編譯成功后,可以將其轉換成元件。
2.4 系統功能仿真
在Matlab中,建立M文件,運用前面設置好參數所生成的FIR濾波器,打開FIR濾波器時域響應與系數值(time response coefficeient values)。得到該濾波器的時域響應和系數值如圖5所示,由該系數表確定濾波器,并進行算法級仿真,得到如圖6所示的波形。圖6(a)為濾波前信號,圖6(b)為濾波后信號。從仿真波形可以看出,經過FIR濾波器之后,高次諧波信號被很好地濾除了,達到了預定的設計目標[7]。
圖5 FIR濾波器時域響應與系數值圖
圖6 FIR的仿真波形
3 基本FPGA片上系統的功能測試
設計目標器件選用美國 Altera公司 Cyclone系列 FPGA 器件中的 EP3C25E144C8N 芯片,通過開發工具 Quartus Ⅱ對各個模塊的 VHDL 源程序及頂層電路進行編譯、邏輯綜合、電路的糾錯、驗證、自動布局布線及仿真等各種測試,最終將設計編譯的數據下載到芯片中,同時與單片機AT89C51 結合,進一步進行數據 的快速處理和控制,實現鍵盤可設置參數及LCD 顯示。經實際電路測試驗證,達到了設計的要求[8]。
4 結 語
這種基于SoPC數字濾波器的設計與實現,不僅利用 Matlab中的Simulink與Alterl DSP Builder工具確定 FIR 濾波器系數,不用編程,只需簡單的設置,而且通過VHDL層次化設計方法,同時使FPGA與單片機相結合,采用C51及VHDL語言模塊化設計思想進行優化編程,進一步完善了數據的快速處理和有效控制,提高了設計的靈活性、可靠性,也增強了系統功能的可擴展性。
參考文獻
[1]張登奇,李望移.基于Matlab的FIR數字濾波器設計[J].計算機時代,2007(11):47-49.
[2]王靜,魚云岐.基于FPGA的FIR 數字濾波器設計與仿真[J].國外電子元器件,2008(11):90-92.
[3]程佩青.數字信號處理教程[M].3版.北京:清華大學出版社,2006.
[4]羅韓君,劉明偉,王成.基于DSP Builder的FIR濾波器設計與實現[J].微計算機信息,2009,25(2):148-149.
[5]潘松,黃繼業.EDA技術與VHDL[ M] .2版.北京:清華大學出版社,2007.
[6]Altera Corporation. FIR compiler user guide[ M] . [ S.l.] : Altera Corporation, 2006.
[7]張志涌.精通Matlab 6.5版[M].北京:北京航空航天大學出版社,2003.
[8]楊國慶.基于 FPGA的 FIR數字濾波器的設計與實現[J].現代電子技術,2008,31(19):184-186.