- 相關推薦
基于fpga 的f.i.r 濾波器設計探討
1.引言
數字濾波在圖像處理、語音識別和模式識別等數字信號處理中占有重要地位。與模擬濾波器相比,數字濾波器可以滿足濾波器幅度和相位特性的嚴格要求,可以克服模擬濾波器所無法克服的電壓漂移、溫度漂移和噪聲等問題。有限沖激響應(FIR)濾波器可以保證嚴格的線性相位。同時由于其實現結構主要是非遞歸的,因此FIR 濾波器可以穩定工作。FIR 濾波器被廣泛用于各類數字信號處理系統中實現卷積、相關、自適應濾波、正交插值等處理,對于非實時系統和低速采樣系統,FIR 濾波器的運算可在CPU 或DSP 處理器上采用軟件實現。但對于無線通訊、雷達以及工業控制,甚至語音信號處理等實時應用,由于FIR 運算計算量過大,采用DSP 軟件可能無法實現,因此采用可編程器件便是最好的方法。
目前 FIR 濾波器大致有以下幾種實現方法:
(1)使用單片通用數字濾波器集成電路。單片通用數字濾波器使用簡單方便,但由于字長和階數的規格較少,不能完全滿足實際需要。雖可采用多片擴展來滿足,但會增加體積和功耗,因而在實際中受到一定限制。
(2)采用DSP 器件實現。由于有專門的函數可供調用,因此使用DSP 器件設計FIR濾波器相對較簡單,其應用也最為廣泛。其唯一缺點是程序順序執行,盡管DSP 器件性能不斷提高,但在某些實時性要求極高的場合中受到限制。
(3)采用可編程邏輯器件實現。隨著可編程邏輯器件的容量和速度的不斷增加,實現單片系統集成已經成為可能。利用可編程邏輯器件實現FIR 濾波器,由于實現的是硬件并行算法,因此特別適用于某些實時性要求高的場合。
2.FIR 濾波器基本原理
濾波,顧名思義是對輸入信號通過一定的處理得到輸出信號,這個處理通常是提取信號中某頻率范圍內的信號成分,把這種處理的過程稱為濾波。而能實現濾波處理的運算電路或設備就稱為濾波器。數字濾波器是完成信號濾波處理功能的,用有限精度算法實現的離散時間線性非時變系統,其輸入是一組數字量,其輸出是經過變換的另一組數字量。數字濾波器具有穩定性高、精度高、靈活性大等突出優點。隨著數字技術的發展,用數字技術設計濾波器的功能越來越受到人們的注意和廣泛的應用。FPGA 有著規整的內部邏輯塊陣列和豐富的連線資源,特別適合細精度和高并行度結構特點的數字信號處理任務,如FIR、FFT 等。本文詳細討論利用FPGA 實現FIR 濾波器的設計過程,并且對設計中的關鍵技術—分布式算法進行詳細描述。
3. FIR 分布式算法原理
3.1 總體設計
分布式算法是一種以實現乘加運算為目的的運算方法。它與傳統算法實現乘加運算的不同在于執行部分積運算的先后順序不同。簡單地說,分布式算法在完成乘加功能時是通過將各輸入數據每一對應位產生的部分積預先進行相加形成相應部分積,然后再對各部門積進行累加形成最終結果,而傳統算法是等到所有乘積產生之后再進行相加來完成乘加運算的。與傳統算法相比,分布式算法可極大地減少硬件電路規模,很容易實現流水線處理,提高電路的執行速度。
FIR 濾波器(Finite Impulse Response)有直接型、級聯型和頻率抽樣型三種基本結構,其中最常見的是直接型結構。這種結構也稱為抽頭延遲線結構,或橫向濾波器結構。
可以看出,線性相位FIR 濾波器的固有對稱屬性可以降低所需要的乘法器的數量,它使得乘法器的數量降低了一半,而加法器的數量增加了一半,總的運算量減少。
FIR 濾波器的優點有:
(1)即具有嚴格的線性相位,又具有任意的幅度;(2)FIR 濾波器的單位抽樣響應是有限長的,因此濾波器性能穩定;(3)只要經過一定的延遲時,任何非因果有限長序列,因而能用因果系統來實現;(4)FIR 濾波器由于單位沖擊響應是有限長的,因而可用快速傅立葉變換(FFT)算法來實現過濾信號,可大大提高運算效率。
4.FIR 濾波器設計實現
4.1 總體設計思路
基于抽取濾波器的工作原理,本文采用FLEX10K 實現了一個具有線性相位的16 階FIR抽取濾波器,利用原理圖和VHDL 共同完成源文件設計。
1.FIR 濾波器的設計指標
采樣頻率:5KHz截止頻率:2KHz類型:低通 輸入數據寬度: 8 位階 數:16 階 系數數據寬度: 8 位
2.參數提取
使用 MATLAB6.1 軟件中Filter Design Toolbox 工具箱中的FDA Tool,選擇低通濾波器,Kaiser 窗設計方法,Fs=5KHz,Fc=2KHz,階數為16 位,線性相位。
根據數字系統輸出與輸入的關系,并根據模塊化的設計思想,把系統分為六個模塊,包括控制模塊,數據寄存模塊,加法模塊,計數模塊,數據選擇模塊以及乘加模塊。其核心部分是控制模塊,通過對控制模塊編程,分別在相應的周期內實現A/D 讀入,轉換以及數據的讀出,再經數據寄存器來儲存數據,經加法模塊后來實現系數相同的兩個采樣值相加,以節省儲存空間。加完后的采樣值通過計數部分的地址選擇信號與乘加部分隨機儲存器部分的對應系數相乘后輸出,乘加模塊里包括有反饋環節以實現與前面乘加的結果進行累加,待完成8 次累加后,把數據送到輸出端并再送往D/A 轉換器,這時實現了把數字信號轉化成模擬信號的工作。然后把輸出接到示波器上,在輸入端通過高頻信號發生器輸入一個模擬信號,如果信號的最高頻率小于濾波器的截止頻率,則示波器上顯示信號能順利通過,反之若信號的最高頻率大于截止頻率,則不能通過。
編程時考慮到應用模塊化的設計思想,對各個模塊分別進行編譯仿真調試,保正每個部分的功能實現后再進行綜合,這樣有利于實現程序的最優化設計,如果有哪一部分出了問題可以單獨進行修改仿真調試,避免了大規模設計中從頭開始查找的繁瑣問題。
4.2 各模塊實現
4.2.1 控制模塊實現
控制器是抽取濾波器的核心模塊,有兩個功能:一是接收輸入數據,二是向其它模塊發送數據和控制信號。它根據加法器、乘法器和累加器的時序特性,有規律地向加法器發送抽頭數據,向乘法器發送系數,向累加器發送控制信號,讓加法器、乘法器和累加器在每個時鐘周期都完成指定的任務,從而實現流水線操作。控制器的功能用VHDL 語言描述,用寄存器存放抽頭和系數。
4.2.2 數據移位模塊的實現
數據移位模塊的符號圖如圖6 所示,其中:DATAIN[7..0]是來自A/D 轉換器的數據;OUT0[7..0]~OUT15[7..0]是16 個輸出數據,送往加法器;SCLK 是時鐘信號,接控制器的ENSHIFT 端。數據移位寄存器中共有16 個觸發器,每來一個脈沖,數據依次往后移。
4.2.3 加法模塊實現本論文所設計的濾波器是具有線性相位的FIR 濾波器,滿足偶對稱條件:h(n)=h(n-N-1)。
利用加法模塊來減少乘法運算的計算量,提高運行速度、簡化設計。加法模塊的符號圖如圖8 所示,其中:ADDIN0[7..0]~ADDIN15[7..0]是輸入數據,來自數據移位模塊;ADDO0~ADDO7 是輸出數據,送往乘法累加單元。
4.2.4 數據選擇模塊實現
根據計數器發送的的地址選擇信號,依次輸出D0~D7 八個數據,送往乘法累加單元,與ROM 中的特征參數對應進行乘法累加。
4.2.5 計數模塊實現
計數模塊按照控制器所產生的COM_CLK(于計數器的CLK 相連)信號,向數據選擇模塊和ROM 單元發送地址信號,取出數據于參數,送往乘法累加單元進行乘法累加。其中:CLK 是時鐘信號,CLR 清零信號,Q[2..0]輸出地址信號。
4.2.6 乘法累加模塊實現
乘法累加單元接受來自數據選擇單元的數據和ROM 單元內的特征參數,完成乘法累加的運算,并最總輸出結果,送往D/A 轉換器。
其中:SEL[2..0]是地址選擇信號,按時序選擇ROM 中的特征參數,TAP_OUT[7..0]是來自數據選擇單元的數據,/COM_CLK 是時鐘信號,/ENCOM 清零信號 ,DA_WE 是輸出數據的控制信號。
5 編譯,仿真,調試結果
5.1 編譯、仿真
將各部分的原理圖(或程序)分別畫出(或輸入),對各部分分別進行編譯仿真,生成*.sym 符號圖后,再進行綜合,畫出頂層文件原理圖,再進行編譯,確保正確后再進行波形的仿真。由于器件的綜合會有一定時間的時延,所以也可以分析各部分的時延。
在仿真通過后就可進行編程/下載到目標器件中。首先進行管腳鎖定(本次設計使用的目標器件為FLEX10K10LC84-4,鎖定情況如表一所示),完成管腳鎖定后,重新編譯使之生效,此時回到原來的設計文件“*.gdf”上的輸入輸出信號旁都標有其對應的管腳號。重新編譯好后,在重新進行時序仿真,若正確,可進行下一步,器件編程/配置.在通過項目編譯后可生成文件*.sof 用于下載.FLEX系列有些類似FPGA,其邏輯塊LE 及內部互連信息都是通過芯片內部的存儲器單元陣列完成的,這些存儲單元陣列可由配置程序裝入, 存儲單元陣列采用SRAM 方式,對這類器件的下載稱為配置。因為FLEX 系列的配置信息采用SRAM 方式保存,所以掉電后FLEX 系列的配置信息會丟失,需每次系統上電后重新配置。
5.2 調試
在調試的過程中,出現了不少問題,例如:由于忽略了A/D 轉換器TLC549 是串行輸出這一點,而設計的控制器的輸入數據是并行的,造成了不匹配;進行管腳鎖定時,輸出數據的高位和低位鎖反;在設計控制模塊時,有不少情況起初沒有考慮到或是和預想的不一致等。但經過認真的分析,排除疑點,調試出了預期的結果。
6 結論
假設在輸入端通過高頻信號發生器輸入一個模擬正弦信號,如果信號的最高頻率小于濾波器的截止頻率f s =2KHz,則示波器上顯示信號能順利通過;反之信號的最高頻率如果大于截止頻率,則信號不能通過。
具體說明如下:
(1) 在 RESET 信號的控制下,實現低電平復位,即所有的輸出均置為零。
(2) 在時鐘信號CLK 的控制下,在內部產生一個新的時鐘信號CLK-1us,隨著計數功能的啟動,在不同的時間段將啟動不同的模塊工作,以實現不同的功能。
(3) FPGA 與外部器件A/D TLC549 有3 個接口連接,由于TLC549 是串行輸出數據,因此DATA-IN 只賦一位變量,AD_ rd 負責將經TLC549 處理過的數字信號輸入FPGA,以便數字濾波器對其進行處理。
(4) FPGA 與D/A 的接口是8 位,因此分派了DATA OUT[7..0]的輸出口,在經D/A轉換后,以便在模擬示波器上顯示。
但是我們最終得到的波形,并沒有像輸入波形過渡那么平滑。
引起這種現象的原因可能是參數設置的不夠精確、各器件之間存在干擾、采樣的點數不夠密等。在這里還需要指出的一點是:當我們把高頻信號發生器產生的正弦波信號加到EDA 實驗箱上時,波形發生了失真,頂部的圓弧過度變窄,底部的圓弧過度變寬,底部的失真情況比頂部明顯的多。
【基于fpga 的f.i.r 濾波器設計探討】相關文章:
基于FPGA實現FIR濾波器的研究03-18
基于EDA技術的FPGA設計03-18
基于FPGA的前端圖像采集卡的設計11-22
基于FPGA的DDS信號發生器的設計03-03
基于FPGA的高頻時鐘的分頻和分配設計03-19
基于頻罩法的FIR濾波器的設計03-07