新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > IIR數字濾波器的FPGA實現(圖)

IIR數字濾波器的FPGA實現(圖)

——
作者:魏國華 時間:2007-02-06 來源: 收藏
  摘 要:本文介紹了一種采用級聯(lián)結構在fpga上實現任意階iir數字濾波器的方法。此設計擴展性好,便于調節(jié)濾波器的性能,可以根據不同的要求在不同規(guī)模的fpga上加以實現。
  關鍵詞:iir數字濾波器;級聯(lián)結構;fpga

  iir數字濾波器在很多領域中有著廣闊的應用。與fir數字濾波器相比,它可以用較低的階數獲得高選擇性,所用存儲單元少,經濟而效率高,在相同門級規(guī)模和相同時鐘速度下可以提供更好的帶外衰減特性。下面介紹一種在fpga上實現iir數字濾波器的方法。


iir數字濾波器的結構
  任意階的iir濾波器可通過數學分解,表示為:

  
  其中為如下的二階形式:

  
  這樣就可以將任意階的iir濾波器通過若干二階網絡(也稱為濾波器的二階基本節(jié))級聯(lián)起來構成,其結構如圖1所示。其中,代表第i級的二階網絡。
  
  對于每一個二階基本節(jié),可以轉置直接ii型結構加以實現,如圖2所示。

  采用這種級聯(lián)結構實現iir濾波器的優(yōu)點是每一個基本節(jié)只是關系到濾波器的某一對極點和一對零點,調整系數a0i、a1i、a2i,只單獨地調整了濾波器第i對零點而不影響其他任何零、極點。同樣,調整b1i、b2i系數、也只單獨調整了第i對極點。因此,這種結構便于準確地實現濾波器的零、極點,也便于調整濾波器的頻率響應性能。這種結構的另一個優(yōu)點是存儲單元需要較少,在硬件實現時,可以用一個二階節(jié)進行時分復用,從而降低對fpga硬件資源的要求。


iir數字濾波器的設計
  利用matlab信號處理工具箱中的濾波器設計和分析工具(fdatool)可以很方便地設計出符合應用要求的未經量化的iir濾波器。需要將matlab設計出的iir濾波器進一步分解和量化,從而獲得可用fpga實現的濾波器系數。

  由于采用了級聯(lián)結構,因此如何將濾波器的每一個極點和零點相組合,從而使得數字濾波器輸出所含的噪聲最小是個十分關鍵的問題。為了產生最優(yōu)的量化后的iir數字濾波器,采用如下步驟進行設計。
  (1)首先計算整體傳遞函數的零極點;
  (2)選取具有最大幅度的極點以及距離它最近的零點,使用它們組成一個二階基本節(jié)的傳遞函數;
  (3)對于剩下的極點和零點采用與(2)相類似的步驟,直至形成所有的二階基本節(jié)。

  通過上面三步法進行的設計可以保證iir數字濾波器中n位乘法器產生的量化舍入誤差最小。

  為了設計出可用fpga實現的數字濾波器,需要對上一步分解獲得的二階基本節(jié)的濾波器系數進行量化,即用一個固定的字長加以表示。量化過程中由于存在不同程度的量化誤差,由此會導致濾波器的頻率響應出現偏差,嚴重時會使iir濾波器的極點移到單位圓之外,系統(tǒng)因而失去穩(wěn)定性。為了獲得最優(yōu)的濾波器系數,采用以下步驟進行量化。

  (1)計算每個系數的絕對值;
  (2)查找出每個系數絕對值中的最大值;
  (3)計算比此絕對值大的最小整數;
  (4)對(3)的結果取反獲得負整數;
  (5)計算需要表示此整數的最小位數;
  (6)計算用于表示系數值分數部分的余下位數。

  除了系數存在量化誤差,數字濾波器運算過程中有限字長效應也會造成誤差,因此對濾波器中乘法器、加法器及寄存器的數據寬度要也進行合理的設計,以防止產生極限環(huán)現象和溢出振蕩。


iir數字濾波器的vhdl描述
  由上一節(jié)設計出來的iir數字濾波器可以進一步用vhdl語言加以描述,通過編譯、功能仿真、綜合和時序仿真之后就可以在fpga上實現了。由于采用了級聯(lián)結構,每一個二階基本節(jié)的vhdl描述都是類似的,只是濾波器的系數有所不同,下面著重討論二階基本節(jié)的vhdl描述。

  采用vhdl描述的二階基本節(jié)的頂層結構如圖3所示。數據在執(zhí)行單元內進行處理。執(zhí)行單元內部包含算術和邏輯單元以及一些寄存器;算術和邏輯單元主要由串行乘法器和累加器組成;存儲器包括工作ram和系數rom兩部分,分別用于存放計算的中間結果和濾波器的系數;存儲器和執(zhí)行單元通過內部總線相連接;控制模塊包括程序rom和程序控制單元,程序rom中存放有濾波算法的程序,程序控制單元用于解釋指令并為數據處理模塊產生控制信號。

  此結構既可以接收串行輸入的數據,也可以接收并行輸入的數據,通過sel進行設置。外部cpu可以通過read信號來訪問濾波器的計算結果,另外,外部cpu也可以通過地址總線a[3:0]對內部的存儲器進行訪問,用write信號對濾波器系數進行寫操作,這樣外部cpu就可以根據自己的需要對濾波器進行配置,靈活地實現各種功能。

  各信號的含義如下。
  clk:系統(tǒng)時鐘;
  res:異步全局復位信號,低有效;
  sdata:串行輸入數據;
  pdata:并行輸入數據;
  sel:設置輸入數據為并行還是串行;
  read:讀信號,低有效;
  write:寫信號,低有效;
  sres:同步復位信號,高有效;
  clki:外部cpu時鐘;
  a[3:0]:外部cpu訪問內部寄存器的地址總線;
  out:輸出數據。

  內部算術與邏輯單元是整個濾波器的核心,它的結構如圖4所示。計算過程是,x、y為輸入數據,通過選擇器進入乘法器,算術與邏輯單元從系數rom中讀取濾波器的系數用以輸入數據相乘,相乘的結果與前一步的結果相加進入累加器,累加器讀取上一步計算的中間結果a并計算,最后將此步計算的結果m存入到ram中去。


結語
  本文介紹了一種采用級聯(lián)結構在fpga上實現iir數字濾波器的方法。在實際使用中,可以根據不同精度要求,方便地對該iir濾波器進行修改以滿足不同的指標要求,靈活地組成任意階不同類型的濾波器。同時,在系統(tǒng)運行中,外部cpu可以靈活修改濾波器系數,改變?yōu)V波器的頻率響應,滿足特定的應用要求。

參考文獻
1 王世一.數字信號處理.北京理工大學出版社. 1997
2 bernard gold, lawrence r. rabiner. "theory and application of digital signal processing". prentice-hall. inc., 1975
3 dimitris g. manolakis, john g. proakis. "digital signal processing: principles, algorithms, and applications". macmillan publishing company. 1992


關鍵詞:

評論


相關推薦

技術專區(qū)

關閉