新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > IIR數(shù)字濾波器的FPGA實(shí)現(xiàn)(圖)

IIR數(shù)字濾波器的FPGA實(shí)現(xiàn)(圖)

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

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


iir數(shù)字濾波器的結(jié)構(gòu)
  任意階的iir濾波器可通過(guò)數(shù)學(xué)分解,表示為:

  
  其中為如下的二階形式:

  
  這樣就可以將任意階的iir濾波器通過(guò)若干二階網(wǎng)絡(luò)(也稱(chēng)為濾波器的二階基本節(jié))級(jí)聯(lián)起來(lái)構(gòu)成,其結(jié)構(gòu)如圖1所示。其中,代表第i級(jí)的二階網(wǎng)絡(luò)。
  
  對(duì)于每一個(gè)二階基本節(jié),可以轉(zhuǎn)置直接ii型結(jié)構(gòu)加以實(shí)現(xiàn),如圖2所示。

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


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

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

  通過(guò)上面三步法進(jìn)行的設(shè)計(jì)可以保證iir數(shù)字濾波器中n位乘法器產(chǎn)生的量化舍入誤差最小。

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

  (1)計(jì)算每個(gè)系數(shù)的絕對(duì)值;
  (2)查找出每個(gè)系數(shù)絕對(duì)值中的最大值;
  (3)計(jì)算比此絕對(duì)值大的最小整數(shù);
  (4)對(duì)(3)的結(jié)果取反獲得負(fù)整數(shù);
  (5)計(jì)算需要表示此整數(shù)的最小位數(shù);
  (6)計(jì)算用于表示系數(shù)值分?jǐn)?shù)部分的余下位數(shù)。

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


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

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

  此結(jié)構(gòu)既可以接收串行輸入的數(shù)據(jù),也可以接收并行輸入的數(shù)據(jù),通過(guò)sel進(jìn)行設(shè)置。外部cpu可以通過(guò)read信號(hào)來(lái)訪(fǎng)問(wèn)濾波器的計(jì)算結(jié)果,另外,外部cpu也可以通過(guò)地址總線(xiàn)a[3:0]對(duì)內(nèi)部的存儲(chǔ)器進(jìn)行訪(fǎng)問(wèn),用write信號(hào)對(duì)濾波器系數(shù)進(jìn)行寫(xiě)操作,這樣外部cpu就可以根據(jù)自己的需要對(duì)濾波器進(jìn)行配置,靈活地實(shí)現(xiàn)各種功能。

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

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


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

參考文獻(xiàn)
1 王世一.數(shù)字信號(hào)處理.北京理工大學(xué)出版社. 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


關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉