摘 要:設計了FPGA的分布式算法結構和具體的硬件環境。基于FPGA的分布式算法充分利用FPGA的并行處理特性設計算法,簡化了濾波器系統設計。采用了分割查找表技術,節省了FPGA硬件資源。對查找表(LUT)中內容經過相應的修改即可方便地實現低通、高通、帶通濾波。對基于FPGA分布式算法的濾波器進行了仿真及工況環境下的測試實驗。實驗結果表明,該算法不僅提高了系統運行速度,而且節省了大量的FPGA資源,還具有極大的靈活性。關鍵詞:FPGA; FIR 濾波器; 分布式算法; LUT
中圖分類號:TN 713+.7-34文獻標識碼:A
文章編號:1004-373X(2010)16-0117-03
Design of Filter Based on FPGA Distributed Algorithm
CUI Yong-qiang, GAO Xiao-ding, HE Su-xin
(Xi’an Polytechnic University, Xi’an 710048, China)
Abstract: The structure of FPGA distributed algorithm (DA) and the specific hardware environment is designed in this paper. The design of the filter system is simplified with FPGA distributed algorithm and by making full use of FPGA parallel processing algorithm. The technique of partition look-up table (LUT) is adopted to save FPGA hardware resources. The low-pass, high- pass and band-pass filtering can be conveniently achieved by the corresponding modification of the content in LUT. The filter based on FPGA distributed algorithm was tested under the condition of simulation and operation mode. The results show that the algorithm can not only increase the speed of system calculation and save a lot of FPGA resources, but also has enormous flexibility.
Keywords: FPGA; FIR filter; distributed algorithm; LUT;
0 引 言
傳統數字濾波器硬件的實現主要采用專用集成電路 (ASIC)和數字信號處理器(DSP)來實現。FPGA內部的功能塊中采用了SRAM的查找表(look up table,LUT)結構,這種結構特別適用于并行處理結構,相對于傳統方法來說,其并行度和擴展性都很好,它逐漸成為構造可編程高性能算法結構的新選擇。
分布式算法是一種適合FPGA設計的乘加運算,由于FPGA中硬件乘法器資源有限,直接應運乘法會消耗大量的資源。本文利用了豐富的存儲器資源進行查找表運算,設計了一種基于分布式算法低通FIR濾波器;利用線性相位FIR濾波器的對稱性減小了硬件規模;利用分割查找表的方法減小了存儲空間;采用并行分布式算法結構和流水線技術提高了濾波器的速度,在FPGA上實現了該濾波器。
1 分布式的濾波器算法[1]
FIR濾波器突出的特點是單位取樣響應h(n)僅有有限個非零值。對于一個N階的FIR濾波器形式如下[2-3]:
yn=∑N-1k=0xn-khk(1)
在許多數字信號處理應用領域中,在技術上是不需要通用的乘法算法的。對于本系統可以通過Matlab中的fdatool工具根據設計要求設計出濾波器的系統函數h(n),那么乘積項h(k)×x(n-k)就變成了2個常數的乘法。無符號數的分布式算法和有符號數的分布式算法是分布式算法在FIR濾波器中的2種典型算法。
1.1 無符號數的分布式算法設計
由于FPGA為并行處理結構,所以假設x(n-k) 數據寬度為Lb,則由式(1)可表示為:
xn-k=∑L-1i=02ixn-k(i)(2)
由式(1)、式(2)可以得到:
yn=∑L-1i=02i∑N-1k=0xn-k(i)hk(3)
假設:
p(i)=∑N-1k=0xn-k(i)hk(4)
則式(1)可以表示為:
yn=∑L-1i=02ip(i)(5)
1.2 有符號數的分布式算法設計
對于有符號數的補碼表示為:
xn-k=∑L-2i=02ixn-k(i)-2L-1xn-k(L-1)(6)
則由式(5),式(1)可得::
yn=∑L-2i=02ip(i)-2L-1p(L-1)(7)
2 分布式的濾波器的軟件實現[4-5]
從式(5)和式(7)可以看出,利用分布式算法實現一個N項乘積和,關鍵是如何實現式(4)中乘積項及各乘積項之和。
在FPGA中可以預先設定一個N位輸入的查找表來實現部分乘積項,即預先設定N階濾波系統查找表,實現向量x(i)={x0(i),x1(i),x2(i),…,xN-1(i)}到p(i)的一個映射。由于查找表的地址空間與階數成指數關系(2N),完全用查找表來實現部分乘積項需要容量很大的存儲器,這就需要占用巨大的資源,而且功耗增加、速度降低。因此為了減小設計規模,可以將一個大的查找表分為幾個較小的查找表來實現。例如,本系統采用的8階FIR濾波器,則用一個查找表來實現需要256(28)位地址空間的ROM,將8階FIR濾波器分成兩個4階FIR濾波器實現,只需要2個16(24)位地址空間的ROM,這樣大大地降低了設計規模和資源使用量。把輸入x(i)作為地址,分為高四位和低四位地址進行查找。表1給出了8階濾波系統的低四位地址x(i)與p(i)的映射關系。
表1 地址映射關系
x(i)p(i)x(i)p(i)
000001000h3
0001h01001h0+ h3
0010h11010h1+ h3
0011h0+ h11011h0+ h1+ h3
0100h21100h2+ h3
0101h0+ h21101h0+ h2+ h3
0110h1+ h21110h1+ h2+ h3
0111h0+ h1+ h21111h0+ h1+ h2+ h3
本系統中濾波器系統函數采用Matlab中的fdatool工具,并根據設計要求采用了kaiser窗設計出濾波器的系統函數h(n),其采樣頻率為500 kHz,通頻帶帶寬為100 Hz。設計的低通濾波器如圖1所示。若需實現高通或帶通濾波器,只需在設計時利用高通或帶通濾波器代替低通濾波器即可[6-7] 。
圖1 低通濾波器
利用Verilog硬件描述語言設計本系統軟件,系統主要分為以下4個部分。包括頂層文件、A/D采樣、算法實現和D/A轉換。系統總體結構如圖2所示。
圖2 系統整體框圖
由于FPGA頻率為100 MHz,采用的ADC0809轉換頻率必須小于1 MHz,所以在頂層文件對系統時鐘進行200分頻,提供外圍所需時鐘。然后對各模塊進行例化,使之成為完整的系統[8] 。
對A/D采樣輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復位。下降沿時啟動 A/D轉換,之后EOC輸出信號變低,指示轉換正在進行。直到完成A/D轉換,EOC變為高電平,指示A/D轉換結束,結果數據已存入鎖存器,這個信號可用作中斷申請。當OE輸入高電平時,輸出三態門打開,轉換結果的數字量輸出到數據總線上。CLK為時鐘輸入信號線。由頂層文件的分頻時鐘提供500 kHz時鐘,對信號進行采集。
算法主體的實現主要由以下幾個部分組成:數據接收存儲、數據選擇器、2個存儲器、加法和控制部分。
數據接收是在每個時鐘下降沿時檢測轉換完成信號,如果完成,則存入對應的存儲器中,對于N階的系統,就需要存儲N個數據等待處理。然后利用數據選擇器依次選擇各個數據,對數據的每一位進行檢測和提取,組成算法中所需要的數據。在控制信號的作用下利用累加器對數據疊加、移位處理即可實現。
最后,FPGA向DAC0832的數據輸入口(DI0~DI7)輸送數據。提供DAC0832數據鎖存允許控制信號ILE,高電平有效。提供DAC0832控制信號(CS:片選信號;Xfer:數據傳輸控制信號;WR1、WR2:DAC寄存器寫選通信號),低電平有效。
3 仿真實驗、工況信號測試實驗
基于分布式算法低通FIR濾波器選用xilinx公司的virtex-Ⅱ pro器件,在ise10.1下進行設計。利用modelsim 6.5對濾波器進行仿真。系統采用頻率為500 kHz的分頻時鐘,在FPGA中產生一個高頻方波和一個低頻鋸齒波信號,并對兩個信號進行疊加。疊加后的信號作為輸入,對應圖中DIN,經過系統處理后輸出結果對應圖中RESULT,仿真結果如圖3所示。
圖3 軟件仿真
由圖3中可以看出,本系統存在相位偏移和濾波后依然存在雜波信號的缺點,相位偏移主要是由濾波處理滯后于輸入引起的,比較穩定且偏移較小,一般情況下可以忽略;雜波信號由系統階數較低和系數量化誤差引起的。實際應用中可根據情況選擇適當階數的濾波器和提高采樣頻率予以解決[9]。
工況信號測試實驗。由信號發生器同時產生一個50 Hz低頻信號和一個5 kHz高頻信號,然后對兩個信號進行疊加,作為被測的工況信號。被測的工況信號經過A/D轉換、濾波處理、D/A轉換,然后在示波器中顯示,如圖4所示。
輸出波形中過濾掉了高頻信號部分,同時低頻信號能夠通過該濾波器。由圖4中可以看出,濾波處理后與實際信號還存在一定的誤差。誤差主要是由于算法中采用了低階濾波器、系數量化誤差、器件精度低等原因所致,該誤差可以控制在允許范圍,還可以通過選擇高精度的器件和增加濾波器的階數得以提高[10]。
圖4 實際測試
4 結 語
實驗結果表明,基于分布式算法低通FIR濾波器的優點是工作可靠,濾波精度較高,且具有占用資源少,運算速度快。在資源允許的條件下可根據實際應用任意確定濾波器的字長和階數,在高速數字信號處理領域可以得到很好的應用。
參考文獻
[1]張燕君,王海寶,陳澤貴.基于FPGA的FIR濾波器FFT與DA算法的比較[J].電子測量技術,2008(10):173-176.
[2]BAESE U M.數字信號處理的FPGA實現[M].北京:清華大學出版社,2006.
[3]程佩青.數字信號處理教程[M].北京:清華大學出版社,2007.
[4]秦宏伍,史浩,崔#8226;尤里#8226;謝爾蓋維奇.基于FPGA的IIR濾波器整數設計[J].微計算機息,2007,12(2):220-222.
[5]陳昭明.基于FPGA 的FIR 數字濾波器的設計與實現[J].大眾科技,2009(11):48-49.
[6]范寒柏,司加禎.基于 DSP Builder 的16階FIR濾波器的實現[J].現代電子技術,2009,32(20):193-195.
[7]張志恒,王衛芳.基于Matlab 信號處理工具箱的數字濾波器設計與仿真[J].電力學報,2007,22(1):54-56.
[8]田東生,王鵬.基于 FPGA 的 FIR 濾波器的設計與實現[J].電子測量,2007(10):54-57.
[9]蔣立平,譚雪琴.一種基于FPGA的高效FIR濾波器的設計與實現[J].南京理工大學學報,2007,31(1):125-128.
[10]蔣壘,王昌林,劉鎏,等.基于FPGA的FIR數字濾波器算法實現[J].船舶電子工程,2006(1):151-155.