吳海洲
(中國(guó)電子科技集團(tuán)公司第五十四研究所,石家莊 050081)
在雷達(dá)、通信、測(cè)控等領(lǐng)域,F(xiàn)FT是信號(hào)分析與處理中常用的重要變換。為了便于工程實(shí)現(xiàn),各大FPGA廠商都已推出了FFT的IP核,低速數(shù)據(jù)串行輸入串行輸出,應(yīng)用簡(jiǎn)便,減小設(shè)計(jì)風(fēng)險(xiǎn),縮短了開(kāi)發(fā)周期。但是由于IP核的局限性很強(qiáng),其處理速度、占用資源等不能滿足高速信號(hào)處理的快速發(fā)展。尤其是FPGA中需高速處理的FFT算法,且數(shù)據(jù)通常是并行輸入并行輸出,針對(duì)這一問(wèn)題,借鑒圖像處理中的二維信號(hào)處理方法,將一維FFT算法轉(zhuǎn)換成適用于矩陣運(yùn)算的二維FFT算法,結(jié)合IP核的使用,在FPGA資源與算法復(fù)雜度中折中處理,解決了高速信號(hào)的FFT變換問(wèn)題。
FFT的表達(dá)式[1]如下所示,其中N為FFT的點(diǎn)數(shù)
上式內(nèi)部為N2點(diǎn)的FFT,再乘以相位因子后再進(jìn)行N1點(diǎn)的FFT即可得到N點(diǎn)的FFT。在并行信號(hào)處理中,N1通常選為4或8路,結(jié)合并行運(yùn)算只需要簡(jiǎn)單的乘、加運(yùn)算就可得到對(duì)應(yīng)的4點(diǎn)或8點(diǎn)FFT。
根據(jù)算法描述,可知實(shí)現(xiàn)步驟[2]如下:
(1)將N點(diǎn)數(shù)據(jù)轉(zhuǎn)換成N1行、N2列的矩陣。
(2)對(duì)數(shù)據(jù)矩陣的每行做N2點(diǎn)的FFT變換。
(3)對(duì)該矩陣的每個(gè)數(shù)據(jù)乘以對(duì)應(yīng)的相位因子。
(4)對(duì)矩陣的每列做N1點(diǎn)的FFT變換。
(5)矩陣行列變換,數(shù)據(jù)整序輸出。
由此可見(jiàn),算法的實(shí)質(zhì)就是將一個(gè)N點(diǎn)FFT分解為N1個(gè)N2點(diǎn)FFT和N2個(gè)N1點(diǎn)FFT以及N次與的乘積。
在某信號(hào)處理算法中,需要對(duì)數(shù)據(jù)進(jìn)行2048點(diǎn)FFT變換,但是該算法的處理速度較高,數(shù)據(jù)速率達(dá)到1.2Gbps以上,受限于FPGA的信號(hào)處理速度,數(shù)據(jù)以8路數(shù)據(jù)并行處理。
若直接調(diào)用2048點(diǎn)FFT的IP核,處理步驟需要:(1)2048*8=32768點(diǎn)數(shù)據(jù)進(jìn)行行列轉(zhuǎn)換;(2)調(diào)用8個(gè)2048點(diǎn)的FFT核;(3)32768點(diǎn)數(shù)據(jù)行列轉(zhuǎn)換輸出。這種方法實(shí)現(xiàn)結(jié)構(gòu)簡(jiǎn)單,邏輯清晰,但是缺點(diǎn)是占用FPGA資源較大。以16bit數(shù)據(jù)位寬為例,僅兩次行列轉(zhuǎn)換所需的RAM資源就需1Mbps以上,8個(gè)2048點(diǎn)的FFT核所占的邏輯資源達(dá)58Kbps,而Xilinx的XC5VSX95T芯片邏輯資源一共也只有58Kbps,F(xiàn)PGA內(nèi)不可實(shí)現(xiàn)該算法。
采用二維FFT的方法,將一維2048點(diǎn)FFT變換改為二維8*256點(diǎn)FFT變換,如圖1所示。
圖1 8*256點(diǎn)二維FFT實(shí)現(xiàn)示意圖
FPGA內(nèi)實(shí)現(xiàn)時(shí)可分為四個(gè)模塊流水處理:
模塊1:實(shí)現(xiàn)256點(diǎn)FFT功能,可直接調(diào)用8個(gè)相同配置參數(shù)的256點(diǎn)FFT的IP核;
模塊2:實(shí)現(xiàn)與對(duì)應(yīng)的旋轉(zhuǎn)因子相乘的功能,2048個(gè)旋轉(zhuǎn)因子存儲(chǔ)在8個(gè)深度為256、位寬為16bit的ROM中,相位因子與對(duì)應(yīng)的數(shù)據(jù)進(jìn)行點(diǎn)對(duì)點(diǎn)復(fù)乘;
模塊3:將256列數(shù)據(jù)分別做8點(diǎn)FFT,8路數(shù)據(jù)采用標(biāo)準(zhǔn)的基8蝶形運(yùn)算實(shí)現(xiàn)數(shù)據(jù)的全并行輸入與輸出,如圖2所示。
圖2 基8蝶形運(yùn)算
基8蝶形運(yùn)算中只涉及數(shù)據(jù)的乘、加運(yùn)算,而乘法運(yùn)算是與固定乘數(shù)相乘,,其中,即可用數(shù)據(jù)移位、符號(hào)變換與加法代替乘法運(yùn)算,至此,8點(diǎn)FFT轉(zhuǎn)換為數(shù)據(jù)的移位與相加,且只需幾個(gè)時(shí)鐘周期就可完成。
模塊4:實(shí)現(xiàn)矩陣的轉(zhuǎn)置,可用片上RAM實(shí)現(xiàn),控制RAM的讀寫(xiě)地址,實(shí)現(xiàn)數(shù)據(jù)的整序輸出。
本文將一個(gè)小點(diǎn)數(shù)的二維FFT代替大點(diǎn)數(shù)的FFT運(yùn)算,信號(hào)處理時(shí)鐘沒(méi)有變化,雖然比直接調(diào)用8個(gè)2048點(diǎn)IP核的方法多兩次運(yùn)算,但是綜合計(jì)算過(guò)程只相當(dāng)于1個(gè)2048點(diǎn)FFT的運(yùn)算量,緩存數(shù)據(jù)也只有2048個(gè)數(shù)據(jù),F(xiàn)PGA邏輯資源與緩存資源占用均很少,處理時(shí)延也大大減小。根據(jù)本文算法實(shí)現(xiàn)結(jié)構(gòu)可知,二維FFT將串入串出的一維低速FFT處理變?yōu)椴⑷氩⒊龅母咚傩盘?hào)處理,處理時(shí)鐘沒(méi)有顯著變化,適用于高速信號(hào)并行處理,也適用于其它超大點(diǎn)數(shù)的FFT變換[3]等。
[1] 王曉君,龍騰,周希元.二維級(jí)聯(lián)流水結(jié)構(gòu)大點(diǎn)數(shù)FFT運(yùn)算器實(shí)現(xiàn)研究[J].無(wú)線電工程,2010,40(11):19-22.
[2] 張麗君.大點(diǎn)數(shù)FFT的二維算法FPGA并行實(shí)現(xiàn)[J].無(wú)線電工程,2013,39(3):86-88.
[3] 于東,李麗,韓峰,王堃,豐帆,潘紅兵.一種高精度的大點(diǎn)數(shù)二維FFT處理器設(shè)計(jì)[J].現(xiàn)代雷達(dá),2016,38(5)16-21.