利用FPGA實(shí)現(xiàn)的FFT變換設(shè)計(jì)
隨著集成電路的飛速發(fā)展,在圖像處理,通信和多媒體等很多領(lǐng)域中,數(shù)字信號(hào)處理技術(shù)已經(jīng)被廣泛應(yīng)用。快速傅立葉變換(FFT)算法的提出,使得數(shù)字信號(hào)處理的運(yùn)算時(shí)間上面縮短了好幾個(gè)數(shù)量級(jí)。因此對(duì)FFT算法及其實(shí)現(xiàn)方法的研究具有很強(qiáng)的理論和現(xiàn)實(shí)意義。
本文引用地址:http://cafeforensic.com/article/266000.htm1 FFT算法及其實(shí)現(xiàn)方法
現(xiàn)場(chǎng)可編程門陣列FPGA是一種可編程使用的信號(hào)處理器件,其運(yùn)算速度高,內(nèi)置高速乘法器可實(shí)現(xiàn)復(fù)雜累加乘法運(yùn)算;同時(shí)其存儲(chǔ)量大,無(wú)需外接存儲(chǔ)器就可實(shí)現(xiàn)大量數(shù)據(jù)運(yùn)算;而且算法實(shí)現(xiàn)簡(jiǎn)單,通過(guò)VHDL編程語(yǔ)言可輕松實(shí)現(xiàn)功能開發(fā),縮短了開發(fā)周期。FPGA已經(jīng)在通訊、視頻、圖像處理等領(lǐng)域被廣泛使用。
本次設(shè)計(jì)采用FPGA實(shí)現(xiàn)8點(diǎn)32位的FFT變換,現(xiàn)場(chǎng)可編程門陣列FPGA是一種可編程使用的信號(hào)處理器件,用戶可以通過(guò)改變配置信息對(duì)其功能進(jìn)行定義,以滿足設(shè)計(jì)需求。與DSP相比,F(xiàn)PGA實(shí)現(xiàn)FFT具有速度高,存儲(chǔ)容量大,硬件實(shí)現(xiàn)簡(jiǎn)單,I/O帶寬高等特點(diǎn)。
FFT處理器被分成一下幾個(gè)主要的功能模塊:數(shù)據(jù)地址產(chǎn)生單元、蝶形運(yùn)算單元、數(shù)據(jù)選擇單元、控制單元、存儲(chǔ)單元等。通過(guò)VHDL語(yǔ)言在CycloneII系列芯片上編程實(shí)現(xiàn)。運(yùn)算方案采用順序處理的方法。傅立葉變換實(shí)現(xiàn)時(shí)首先進(jìn)行基2、基4分解,一般來(lái)說(shuō),如果算法使用基2實(shí)現(xiàn),雖然使用的資源較多,但速度優(yōu)勢(shì)明顯。設(shè)計(jì)中采用基-2DIT-FFT算法來(lái)實(shí)現(xiàn)整個(gè)系統(tǒng)的設(shè)計(jì),如圖1所示。
圖1
在FFT模塊的設(shè)計(jì)中,旋轉(zhuǎn)因子與輸入數(shù)據(jù)進(jìn)行的是一個(gè)小數(shù)乘法的蝶形運(yùn)算,需要將旋轉(zhuǎn)因子表示成小數(shù)的二進(jìn)制形式。為了保證運(yùn)算結(jié)果的正確性,還需要將輸入和輸出數(shù)據(jù)進(jìn)行小數(shù)點(diǎn)的調(diào)整。在此次設(shè)計(jì)中采用定點(diǎn)小數(shù)的方法,所謂定點(diǎn)小數(shù),就是小數(shù)點(diǎn)的位置是固定的。設(shè)計(jì)中統(tǒng)一將小數(shù)點(diǎn)放在了Q6的位置,在仿真的結(jié)果圖中顯示的輸出數(shù)據(jù)均是小數(shù)點(diǎn)經(jīng)過(guò)移位后的結(jié)果即結(jié)果均擴(kuò)大了64倍。
復(fù)數(shù)乘法器采用FPGA內(nèi)部IP核的例化與調(diào)用來(lái)設(shè)計(jì)實(shí)現(xiàn)了蝶形處理,這樣就可以提高蝶形運(yùn)算單元的的運(yùn)算速度,降低了運(yùn)算復(fù)雜度??刂茊卧脑O(shè)計(jì)通過(guò)一個(gè)有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)控制器。通過(guò)有限狀態(tài)機(jī)狀態(tài)的輸出分別控制ROM因子表、隨機(jī)存儲(chǔ)器RAM和蝶形處理器。使它們可以協(xié)調(diào)一致地工作,從而實(shí)現(xiàn)FFT運(yùn)算的正確輸出。
將系統(tǒng)設(shè)計(jì)的各個(gè)模塊連接起來(lái),利用順序處理的FFT設(shè)計(jì)結(jié)構(gòu),將輸入數(shù)據(jù)的8個(gè)點(diǎn)放到RAM中進(jìn)行處理。經(jīng)過(guò)元件例化和調(diào)用操作完一級(jí)蝶形之后對(duì)其結(jié)果進(jìn)行存儲(chǔ);之后完成二級(jí)蝶形操作及存儲(chǔ);最后進(jìn)行三級(jí)蝶形的操作。
若輸入8點(diǎn)數(shù)據(jù)為[5,8,3,2.0,6,1,2].其仿真結(jié)果經(jīng)轉(zhuǎn)換后的值為(即結(jié)果擴(kuò)大了64倍):[1728,410-j218,64-j640,230+j38,-576,230-j38,64+j640,410+j218 ],與MATLAB仿真的結(jié)果一致。
如圖2所示,圖中的x0,x1,x2……x7是輸入信號(hào),分別給它們輸入的值為[5,8,3,2,0,6,1,2];y0_i,y0_r……y7_i,y7_r是仿真中得到的輸出信號(hào)。經(jīng)過(guò)運(yùn)算,輸出結(jié)果與理論計(jì)算結(jié)果一致。
圖2
2總結(jié)
通過(guò)仿真驗(yàn)證此次利用FPGA實(shí)現(xiàn)的FFT設(shè)計(jì)采用內(nèi)置雙端口RAM、ROM單元,實(shí)現(xiàn)了存取數(shù)據(jù)、旋轉(zhuǎn)因子計(jì)算、蝶形計(jì)算,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,運(yùn)算可靠性高,速度得到了進(jìn)一步提升。
評(píng)論