《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA的FFT算法硬件實現
基于FPGA的FFT算法硬件實現
電子科技
童慶為 陳建春
摘要: 設計了一種基于FPGA的1024點16位FFT算法,采用了基4蝶形算法和流水線處理方式,提高了系統的處理速度,改善了系統的性能。提出了先進行前一級4點蝶形運算,再進行本級與旋轉因子復乘運算的結構。合理地利用了硬件資源。對系統劃分的各個模塊使用VerilogHDL進行編碼設計。對整個系統整合后的代碼進行功能驗證之后,采用QuartusⅡ與Matlab進行聯合仿真,其結果是一致的。該系統既有DSP器件實現的靈活性又有專用FFT芯片實現的高速數據吞吐能力,在數字信號處理領域有廣泛應用。
關鍵詞: 開發工具 FPGA FFT算法
Abstract:
Key words :

FFT(快速傅里葉變換)是一種非常重要的算法,在信號處理、圖像處理、生物信息學、計算物理、應用數學等方面都有著廣泛的應用。在高速數字信號處理中,FFT的處理速度往往是整個系統設計性能的關鍵所在。FPGA(現場可編程門陣列)是一種具有大規模可編程門陣列的器件,不僅具有ASIC(專用集成電路)快速的特點,更具有很好的系統實現的靈活性。基于FPGA的設計可以滿足實時數字信號處理的要求,在市
場競爭中具有很大的優勢。因此,FPGA為高速FFT算法的實現提供了一個很好的平臺。

1 FFT算法的硬件實現
1.1 系統框圖

    本設計利用流水線技術來提高系統的性能,系統框圖,如圖1所示。其中,地址產生單元生成RAM讀寫地址,寫使能信號以及相關模塊的啟動、控制信號,是系統的控制核心;4點蝶形運算單元的最后一級輸出不是順序的;旋轉因子產生單元生成復乘運算中的旋轉因子的角度數據;旋轉因子ROM中預置了每一級運算中所需的旋轉因子。


    在FPGA設計中,為提高系統的運行速度,而將指令分為幾個子操作,每個子操作由不同的單元完成,這樣,每一級的電路結構得到簡化,從而減少輸入到輸出間的電路延時,在較小的時鐘周期內就能夠完成這一級的電路功能。在下一個時鐘周期到來時,將前一級的結果鎖存為該級電路的輸入,這樣逐級鎖存,由最后一級完成最終結果的輸出。也就是說,流水線技術是將待處理的任務分解為相互有關而又相互
獨立、可以順序執行的子任務來逐步實現。本設計中,4點蝶形運算單元、旋轉因子復乘模塊以及最后的精度截取模塊采用流水線技術來處理。
1.2 基4蝶形運算算法原理
   
    式(1)為基4蝶形運算單元的一般表達式,其中,,N為FFT運算的點數,本設計中為1 024,p為旋轉因子W的相位角,其規律將在1.4節討論。X(0)、X(1)、X(2)、X(3)為原始數據,順序輸入RAM后蝶形倒序輸出,與旋轉因子復乘再進行4點蝶形運算,而X1(0)、X1(1)、X1(2)、X1(3)即為第1級蝶形運算的結果。此時RAM存儲的原始數據已經清空,將第1級蝶形運算結果再存回RAM中,按照一定的地址輸出后,與第2級的旋轉因子復乘、4點蝶形運算,得到第2級蝶形運算結果,依此類推。由于蝶形運算為同址操作,所以第2級的RAM寫地址即為第一級的RAM讀地址,每一級的RAM讀地址規律將在1.3節中討論。
    1024點的基4-FFT共需要5級蝶形運算,每級需要計算256個蝶形,其傳統實現框圖如圖2所示。

 


    考慮到第一級蝶形運算不需要旋轉因子,所以第一級的旋轉因子復乘模塊可以省略,但本設計的硬件結構需要循環利用,一般情況下,可以對第一級數據進行×1運算,再進行4點蝶形運算。不過,考慮到我們并不關心每一級蝶形運算后的結果,本文提出了一種蝶形運算的新結構:即先進行前一級的4點蝶形運算,再進行本級的與旋轉因子復乘運算,如圖3所示。


    可以看出,圖3減少了一個旋轉因子復乘模塊,不但節約了一次乘法運算時間,也省略了第一級旋轉因子,更好地利用了硬件結構。
    首先,在QuartusⅡ環境中對4點蝶形運算時序仿真,采用流水線設計,連續輸入連續輸出,仿真結果如圖4所示。


    由圖4可以看出,輸出比輸入延時6個時鐘,這在系統的控制核心地址產生單元的設計中需要考慮到。
1.3 地址產生與時序控制
   
對于1 024.點基4 FFT運算,需要5級蝶形運算,每一級運算都要有寫地址和讀地址,根據FFT同址運算的特點可知,當前的寫地址即是上一級蝶形運算的讀地址。因此完成FFT運算需要設計6級RAM地址。其中第1級的寫地址即是數據輸入的順序地址,不予討論。最后一級讀地址為數據正序輸出所需的地址。其余4級為1 024點數據對應的FFT蝶形運算。
    第一級讀取節點地址的順序應該是:(0,256,512.768),(1,257,513,769),……,(255,511.767,1 023)。易觀察其讀地址的規律如下:設讀取次序的二進制編碼為bit[9:0];則讀地址的二進制編碼為{bit[1:O],bit[9:2]},并且依次可以推出第2、3、4級的讀地址二進制編碼分別為{bit[9:8],bit[1:0],bit[7:2]},{bit[9:6],bit[1:0],bit[5:2]}、{bit[9:4],bit[1:0],bit[3:2]},而最后一級輸出數據的地址二進制編碼則為:{bit[1:0],bit[3:2],bit[5:4],bit[7:6],bit[9:8]}。圖5給出了第1級讀地址和第2級讀地址的部分數據,也可以看出第2級的寫地址即是第1級的讀地址。


    圖1中的地址產生單元作為系統的控制核心,不僅要生成每一級的RAM讀寫地址,還要產生RAM寫使能信號、輸出有效信號以及4點蝶形運算單元和旋轉因子產生單元的啟動信號,由于時序電路還需要考慮器件延時,例如上文提到的4點蝶形運算輸出比輸入延時6個時鐘,以及RAM存取數據輸出比輸入延時1個時鐘,這些都需要在控制核心中考慮到。
1.4 旋轉因子產生
   
對于1 024點FFT蝶形運算,需要1 024個旋轉角度(即2π的1 024等份),其中第一級不需要復乘運算,第6級只是將數據進行整序沒有運算單元,其他4級都需要旋轉因子。本設計采用將旋轉因子預置于ROM中,通過查找表方法得出每一級運算的所需的旋轉因子。根據旋轉因子的可約性,后幾級運算所需的旋轉因子都可以在第一級運算的旋轉因子中找到,因此無需另外存儲。旋轉因子在ROM中的存儲規律是:旋轉因子相位角p處存儲旋轉因子W=*****。定義一個10 bit的計數器count[9:0],則第2、3、4、5級ROM的相位角規律按照Verilog語法可表示為

    為了節省資源,本設計只在ROM單元中存儲了前256個旋轉因子數據,即第一象限因子其余象限的因子可通過象限轉換后得到,這樣就大大節省了存儲單元的硬件資源。圖6為旋轉因子產生單元在QuartusⅡ環境中仿真結果的部分數據。



2 系統仿真結果
   
輸入數據為s=1 024×cos(2π×f_in×t),其中f_in=50 M,Fs=80 MHz,n=40,t=0:1/Fs:(n-1)/Fs,利用QuartusⅡ軟件對系統在100 MHz的時鐘環境下進行了仿真,將仿真輸出結果轉換成tbl文件并利用Matlab軟件讀取后,得到如圖7所示的頻譜數據圖(實部數據部分)。


    圖8所示為Maflab自帶FFT函數對于輸入相同1 024點數據的FFT計算結果(同樣為實部數據部分)。
    通過比較可以看到,本設計的仿真結果與Matlab的仿真結果基本一致,可以正確高效地計算出1 024點FFT數據。

3 結束語
   
本設計全部由Verilog HDL語言實現,采用自頂向下的設計方法,完成了一種基于FPGA的1 024點16位FFT算法,共需要5級運算,每級需要計算256個蝶形。提出了將蝶形運算先進行前一級的蝶形加減運算,再進行本級的與旋轉因子復乘運算的結構。由前所述,平均每個蝶形運算需要4個時鐘周期,所以理論上完成1 024點FFT的總時鐘周期為N=256×4×5=5 120;假設使用的時鐘為100MHz,那么將耗時T=5 120×(1/100)=51.2μs,這與仿真結果51.32μs基本一致。

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 丁香花在线影院在线播放 | 青草伊人网 | 69国产成人综合久久精品 | 国内精品久久久久久野外 | 久久精品国产精品青草色艺 | 亚洲高清在线天堂精品 | 四虎一级片 | run away无删减全集 动漫 | 国产精品免费视频播放 | 国产裸舞福利在线视频合集 | 久久精品视频一区二区三区 | 埃及艳后h版2性传奇 | 欧美高清视频一区 | 2017av| 精品国产免费人成网站 | 美女被爆羞羞网站免费 | 日本午夜视频在线观看 | 999成人国产精品 | 狠狠丁香 | 好吊色青青青国产综合在线观看 | 国产在线中文字幕 | 婷婷视频在线 | 欧美性视频在线 | 久久天天躁狠狠躁狠狠躁 | 久久久久琪琪精品色 | 国产羞羞事1000部在线观看 | 日韩在线看免费高清完整版 | 日产国语一区二区三区在线看 | 日韩综合网 | 视频在线播放免费 | 九九精品在线观看 | 日本国产高清色www视频在线 | 国产精品久久久久久久久久久威 | 国产亚洲精品美女久久久久久2021 | 成人黄色小视频在线观看 | 国产 日韩 欧美 在线 | 丁香六月婷婷在线 | 99色在线观看 | 少女集中营 电影 | 色综合天 | 成人精品国产亚洲欧洲 |