專利名稱::應(yīng)用fpga進(jìn)行浮點(diǎn)fft處理的方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于信號(hào)處理
技術(shù)領(lǐng)域:
,涉及如何使用現(xiàn)場(chǎng)可編程門(mén)陣列FPGA芯片設(shè)計(jì)實(shí)現(xiàn)浮點(diǎn)128、256及1024點(diǎn)基2和基4算法的快速傅立葉變換FFT處理,具體地說(shuō)是一種應(yīng)用FPGA進(jìn)行浮點(diǎn)FFT處理的方法,可以廣泛應(yīng)用于雷達(dá)、通信、圖像等數(shù)字信號(hào)處理
技術(shù)領(lǐng)域:
^
背景技術(shù):
隨著數(shù)字信號(hào)處理技術(shù)的發(fā)展,快速傅立葉變換FFT理論在雷達(dá)、圖像、通信等領(lǐng)域得到越來(lái)越廣泛的應(yīng)用,而如何更加高速時(shí)效的在工程上實(shí)現(xiàn)FFT處理則變得越來(lái)越重要。傳統(tǒng)上,常用的實(shí)現(xiàn)FFT處理的方法主要有(l)利用專用FFT處理芯片進(jìn)行設(shè)計(jì),如.TMC2310、A41102等;(2)利用通用可編程數(shù)字信號(hào)處理DSPi芯片進(jìn)行設(shè)計(jì),目前高速DSP有TMS320C6201、TSIOI、TS201等。利用專用FFT處理芯片設(shè)計(jì)是將FFT的處理過(guò)程固化在芯片內(nèi),為定點(diǎn)運(yùn)算或塊浮點(diǎn)運(yùn)算;利用DSP進(jìn)行設(shè)計(jì)是采用其內(nèi)部的運(yùn)算單元和特殊的尋址方式,滿足FFT運(yùn)算的要求,采用定點(diǎn)或者浮點(diǎn)運(yùn)算,在設(shè)計(jì)方法上遵循基2或者基4的FFT算法,運(yùn)算流程上受限于DSP的架構(gòu),程序執(zhí)行采取串行結(jié)構(gòu)。這些實(shí)現(xiàn)方式存在的問(wèn)題主要有(1)芯片內(nèi)的運(yùn)算單元有限?,F(xiàn)有的DSP只有一個(gè)或兩個(gè)運(yùn)算單元,也就是說(shuō)在同一時(shí)刻最多只能進(jìn)行一個(gè)或兩個(gè)浮點(diǎn)乘法運(yùn)算,這將導(dǎo)致FFT處理過(guò)程所耗時(shí)鐘周期很多。因而即便使程序指令執(zhí)行頻率很高,處理時(shí)間依然受到限制。(2)并行處理能力和流水級(jí)數(shù)有限。不管是FFT專用處理芯片還是通用DSP芯片,為提高運(yùn)算速度,采取并行處理時(shí)均遇到芯片內(nèi)部物理硬件的限制。對(duì)通用DSP芯片來(lái)說(shuō),由于要進(jìn)行取指、譯碼、執(zhí)行等流水作業(yè)的處理,程序運(yùn)行的流水級(jí)數(shù)受到限制。正因?yàn)楝F(xiàn)有進(jìn)行FFT處理的方法存在上述瓶頸問(wèn)題,隨著現(xiàn)場(chǎng)可編程門(mén)陣列FPGA的迅速發(fā)展,采用FPGA實(shí)現(xiàn)FFT處理開(kāi)始成為一種新的手段。由于新推出的FPGA內(nèi)部均有一定數(shù)量的數(shù)字運(yùn)算器如乘加器等,內(nèi)核和較大容量的存儲(chǔ)器SRAM,為快速實(shí)現(xiàn)較多點(diǎn)數(shù),如1024、2048、4096、8192點(diǎn)的FFT提供了可能。一些FPGA生產(chǎn)廠商如美國(guó)的Xilinx公司、Altera公司,也推出了其FFT處理的知識(shí)產(chǎn)權(quán)IP核函數(shù),但其FFT處理的FPGA實(shí)現(xiàn)過(guò)程并沒(méi)有公開(kāi)。另外,這些公司提出的FFT處理的FPGA實(shí)現(xiàn)方法是采用定點(diǎn)或塊浮點(diǎn)運(yùn)算,由于定點(diǎn)或塊浮點(diǎn)運(yùn)算的精度有限,為了防止數(shù)據(jù)溢出,通常要采用移位處理。在一些高精度運(yùn)算的場(chǎng)合,常常需要采用浮點(diǎn)運(yùn)算的方式,在這種情況下,現(xiàn)有FFT處理IP核函數(shù)將無(wú)法滿足要求。
發(fā)明內(nèi)容本發(fā)明的目的是為了避免上述實(shí)現(xiàn)FFT處理方法的不足,提出了一種應(yīng)用FPGA進(jìn)行浮點(diǎn)FFT處理的方法,該方法能在較短的時(shí)鐘周期內(nèi)完成整個(gè)FFT處理,并在運(yùn)算效率上超過(guò)采用通用DSP的處理方法。本發(fā)明的技術(shù)方案是本發(fā)明的實(shí)現(xiàn)所基于的是基2和基4并行算法模型,這種運(yùn)算結(jié)構(gòu)的尋址方式固定,利于編程實(shí)現(xiàn)。本發(fā)明的具體實(shí)現(xiàn)步驟如下(1)、在FFT處理器接收到運(yùn)行FFT處理的信號(hào)后,首先判斷輸入數(shù)據(jù)為定點(diǎn)數(shù)還是浮點(diǎn)數(shù),如果是定點(diǎn)數(shù)則將其轉(zhuǎn)換為浮點(diǎn)數(shù)。(2)、將上述處理好的輸入數(shù)據(jù),依順序存入中間數(shù)據(jù)存儲(chǔ)器l中。(3)、首先依次在中間數(shù)據(jù)存儲(chǔ)器1中取出兩個(gè)數(shù)據(jù),同時(shí)相應(yīng)的在蝶形因子存儲(chǔ)器中讀取計(jì)算所需蝶形因子,將取出的數(shù)據(jù)進(jìn)行蝶形運(yùn)算處理后所得結(jié)果寫(xiě)入中間數(shù)據(jù)存儲(chǔ)器2。循環(huán)進(jìn)行上述操作,直到中間數(shù)據(jù)存儲(chǔ)器l中的全部數(shù)據(jù)都經(jīng)過(guò)處理。(4)、然后依次在中間數(shù)據(jù)存儲(chǔ)器2中取出兩個(gè)數(shù)據(jù),同時(shí)相應(yīng)的在蝶形因子存儲(chǔ)器中讀取計(jì)算所需蝶形因子,將取出的數(shù)據(jù)進(jìn)行蝶形運(yùn)算處理后所得結(jié)果再寫(xiě)入中間數(shù)據(jù)存儲(chǔ)器l。循環(huán)進(jìn)行上述操作,直到中間數(shù)據(jù)存儲(chǔ)器2中的全部數(shù)據(jù)都經(jīng)過(guò)處理。(5)、重復(fù)第(3)、(4)步的操作,在中間數(shù)據(jù)存儲(chǔ)器l、2間交替的進(jìn)行讀寫(xiě)操作,直到所有接收到的需要進(jìn)行FFT處理的信號(hào),經(jīng)過(guò)FFT計(jì)算過(guò)程結(jié)束為止。(6)、從中間數(shù)據(jù)存儲(chǔ)器1或2中取出結(jié)果數(shù)據(jù),在其中哪個(gè)數(shù)據(jù)存儲(chǔ)器中取數(shù)根據(jù)FFT處理點(diǎn)數(shù)的不同而存在差異。處理奇數(shù)級(jí)蝶形運(yùn)算時(shí),從中間數(shù)據(jù)存儲(chǔ)器2中讀取結(jié)果;處理偶數(shù)級(jí)蝶形運(yùn)算時(shí),從中間數(shù)據(jù)存儲(chǔ)器l中讀取結(jié)果。在讀取結(jié)果數(shù)據(jù)的時(shí)候,按照地址反序的方式進(jìn)行讀取。(7)、對(duì)結(jié)果數(shù)據(jù)進(jìn)行浮點(diǎn)轉(zhuǎn)換定點(diǎn)的運(yùn)算,轉(zhuǎn)換之后的定點(diǎn)結(jié)果與浮點(diǎn)結(jié)果一起輸出。本發(fā)明與現(xiàn)有技術(shù)相比具有的優(yōu)點(diǎn)(1)、與采用串行指令操作的DSP,F(xiàn)PGA相比,可以利用并行運(yùn)算方法的特點(diǎn)極大地提高浮點(diǎn)數(shù)處理的運(yùn)算效率,雖然一般情況下FPGA的指令執(zhí)行周期要比DSP大,但是在編程中采用流水并行的運(yùn)算方式可以在大量數(shù)據(jù)運(yùn)算的過(guò)程中顯示出FPGA處理浮點(diǎn)運(yùn)算的優(yōu)越性,本發(fā)明中的浮點(diǎn)運(yùn)算器以及蝶形運(yùn)算就是采用流水的方式。(2)、FPGA處理FFT運(yùn)算除了可以采用并行處理提高速度外,由于FPGA內(nèi)嵌的DSP塊內(nèi)包含有乘法模塊,可同時(shí)完成多個(gè)乘法運(yùn)算,且在FFT處理中所需各種存儲(chǔ)器模塊都可以在FPGA內(nèi)部產(chǎn)生,利用較高規(guī)模的FPGA,使用單芯片足以完成多點(diǎn)數(shù)的浮點(diǎn)FFT處理。(3)、與DSP運(yùn)算性能的比較。采用FPGA設(shè)計(jì)FFT處理比采用DSP的設(shè)計(jì)方法在指令運(yùn)算周期總數(shù)上有很大的提高,其中,使用基2的算法周期數(shù)為采用DSP時(shí)的40X左右,使用基4的算法周期數(shù)為采用DSP時(shí)的10%左右。(4)、由于采用了浮點(diǎn)數(shù)處理,'比現(xiàn)有的采用FPGA處理FFT的方法提高了處理精度,可以應(yīng)用于各種情況下不受數(shù)據(jù)類(lèi)型的限制。(5)、本發(fā)明設(shè)計(jì)的FFT模塊還提供了浮點(diǎn)數(shù)與定點(diǎn)數(shù)的輸入輸出接口,可以根據(jù)實(shí)際情況選擇采用哪一種數(shù)據(jù)格式進(jìn)行系統(tǒng)的輸入和輸出。圖l是本發(fā)明的實(shí)現(xiàn)流程2是本發(fā)明的浮點(diǎn)加法運(yùn)算流程3是本發(fā)明的浮點(diǎn)乘法運(yùn)算流程4是本發(fā)明的FFT運(yùn)算流程示意5是本發(fā)明的浮點(diǎn)FFT模塊的系統(tǒng)結(jié)構(gòu)示意6是本發(fā)明的蝶形運(yùn)算流水操作流程7是本發(fā)明的FFT模塊框8是本發(fā)明的運(yùn)算結(jié)果數(shù)據(jù)比較9是應(yīng)用本發(fā)明在硬件上實(shí)現(xiàn)結(jié)果的示意圖具體實(shí)施方式參照?qǐng)Dl,它是本發(fā)明浮點(diǎn)FFT處理的實(shí)現(xiàn)流程圖,下面詳細(xì)介紹本發(fā)明中浮點(diǎn)FFT處理運(yùn)算過(guò)程-(1)、在浮點(diǎn)FFT處理器接收到運(yùn)行FFT處理信號(hào)后,根據(jù)外部輸入的浮點(diǎn)、定點(diǎn)選擇信號(hào)來(lái)判斷輸入數(shù)據(jù)為定點(diǎn)數(shù)還是浮點(diǎn)數(shù),如果是定點(diǎn)數(shù),首先對(duì)輸入數(shù)據(jù)進(jìn)行定點(diǎn)轉(zhuǎn)浮點(diǎn)處理。(2)、將上述處理好的輸入數(shù)據(jù)依順序存入中間數(shù)據(jù)存儲(chǔ)器1中。(3)、從全零地址開(kāi)始每次在中間數(shù)據(jù)存儲(chǔ)器1中取出兩個(gè)數(shù)據(jù),兩個(gè)數(shù)據(jù)的地址要求只有最高位的不同,如第一次取數(shù)據(jù)的兩個(gè)地址為"00000000"和"10000000",同時(shí)在蝶形因子存儲(chǔ)器中讀取計(jì)算所需蝶形因子。將以上取出的數(shù)據(jù)進(jìn)行蝶形運(yùn)算處理,處理所得到的結(jié)果數(shù)據(jù)順序?qū)懭胫虚g數(shù)據(jù)存儲(chǔ)器2中相鄰的兩個(gè)地址,如第一次計(jì)算結(jié)果存入的地址為"oooooooo"和"ooooooor,。循環(huán)進(jìn)行上述操作,直到中間數(shù)據(jù)存儲(chǔ)器i中的全部數(shù)據(jù)處理完畢。(4)、按上述相同的方式,在中間數(shù)據(jù)存儲(chǔ)器2中取出兩個(gè)數(shù)據(jù),同時(shí)在蝶形因子存儲(chǔ)器中讀取計(jì)算所需蝶形因子。將以上取出的數(shù)據(jù)進(jìn)行蝶形運(yùn)算處理,處理所得到的數(shù)據(jù)順序?qū)懭胫虚g數(shù)據(jù)存儲(chǔ)器1中相鄰的兩個(gè)地址。循環(huán)進(jìn)行操作,直到中間數(shù)據(jù)存儲(chǔ)器2中的全部數(shù)據(jù)處理完畢。(5)重復(fù)第(3)、(4)步的操作,在中間數(shù)據(jù)存儲(chǔ)器l、2間交替的進(jìn)行讀寫(xiě)操作及蝶形運(yùn)算,直到FFT計(jì)算過(guò)程結(jié)束,假設(shè)為256點(diǎn)FFT,則需要進(jìn)行JV=log2256=8級(jí)蝶形運(yùn)算,最后所得的結(jié)果數(shù)據(jù)存儲(chǔ)在中間數(shù)據(jù)存儲(chǔ)器l。(6)從中間數(shù)據(jù)存儲(chǔ)器1或2中取出結(jié)果數(shù)據(jù),在其中哪個(gè)數(shù)據(jù)存儲(chǔ)器中取數(shù),根據(jù)FFT處理點(diǎn)數(shù)的不同而存在差異。處理奇數(shù)級(jí)蝶形運(yùn)算時(shí),從中間數(shù)據(jù)存儲(chǔ)器2中讀取結(jié)果;處理偶數(shù)級(jí)蝶形運(yùn)算時(shí),從中間數(shù)據(jù)存儲(chǔ)器l中讀取結(jié)果。在讀取結(jié)果數(shù)據(jù)的時(shí)候,按照地址反序的方式進(jìn)行讀取。(7)在進(jìn)行數(shù)據(jù)輸出的時(shí)候,輸出浮點(diǎn)數(shù)的同時(shí),進(jìn)行浮點(diǎn)轉(zhuǎn)換定點(diǎn)的處理并輸出定點(diǎn)數(shù)結(jié)果,同時(shí)輸出FFT處理結(jié)束信號(hào)。參照?qǐng)D2、圖3,介紹本發(fā)明中的浮點(diǎn)加法與浮點(diǎn)乘法運(yùn)算方法本發(fā)明中采用的浮點(diǎn)數(shù)格式是國(guó)際電氣及電子工程師協(xié)會(huì)IEEE規(guī)定的標(biāo)準(zhǔn)32位單精度浮點(diǎn)數(shù)格式,如下表所示D31D30…D23D22…DO符號(hào)(s)階碼(e)尾數(shù)(力小數(shù)點(diǎn)浮點(diǎn)數(shù)的數(shù)值=(-1)^1./^2("27),尾數(shù)最高位之前隱藏了"1",也就是說(shuō)尾數(shù)表示的實(shí)際數(shù)為l.f。它的動(dòng)態(tài)范圍為比同樣位數(shù)的定點(diǎn)數(shù)要高出很多,可以適用于精度要求較高的領(lǐng)域。浮點(diǎn)加法運(yùn)算的流程為(1)比較兩浮點(diǎn)數(shù)絕對(duì)值的大小首先將兩數(shù)存儲(chǔ)為A和B,如果l/!Hfll,則兩數(shù)存儲(chǔ)位置不變;如果|^|<|5|,那么交換A、B兩數(shù)的存儲(chǔ)位置。基本原則就是,在加減計(jì)算前對(duì)輸入操作數(shù)進(jìn)行調(diào)整后,A總是對(duì)應(yīng)絕對(duì)值大者。絕對(duì)值的大小決定是通過(guò)比較階碼和尾數(shù)來(lái)完成的,(2)把兩操作數(shù)的尾數(shù)f取出并單獨(dú)進(jìn)行存儲(chǔ),在尾數(shù)最高位前補(bǔ)出隱藏的"1",改變后的尾數(shù)相當(dāng)于是l.f。'(3)進(jìn)行對(duì)階操作,根據(jù)兩操作數(shù)價(jià)碼的差距調(diào)整尾數(shù),使尾數(shù)相對(duì)應(yīng),具體操作是B尾數(shù)1.f中小數(shù)點(diǎn)向左移動(dòng),移動(dòng)位數(shù)為兩數(shù)階碼位的差值。(4)進(jìn)行數(shù)值計(jì)算,根據(jù)符號(hào)位,將浮點(diǎn)尾數(shù)相加或者相減。如果符號(hào)位相同執(zhí)行加法,若符號(hào)位相反則執(zhí)行減法。(5)規(guī)格化處理,整理運(yùn)算結(jié)果,轉(zhuǎn)換成單精度浮點(diǎn)格式后輸出。具體實(shí)現(xiàn)方法就是找出運(yùn)算結(jié)果的各數(shù)據(jù)位中為"1"的最高位,并將其后的23位數(shù)作為結(jié)果數(shù)據(jù)的尾數(shù),同時(shí)對(duì)階碼進(jìn)行相應(yīng)的調(diào)整,符號(hào)位與數(shù)A的符號(hào)位相同。浮點(diǎn)乘法運(yùn)算的流程為(1)判斷輸入有沒(méi)有為O的數(shù),若有則輸出為0,否則繼續(xù)運(yùn)算。(2)首先對(duì)兩個(gè)輸入數(shù)據(jù)的符號(hào)位進(jìn)行異或操作得到結(jié)果數(shù)據(jù)的符號(hào)位。(3)對(duì)輸入數(shù)據(jù)的尾數(shù)進(jìn)行乘法運(yùn)算,進(jìn)行乘法運(yùn)算前首先在尾數(shù)高位補(bǔ)出"1",再將兩數(shù)修改后的尾數(shù)相乘,階碼相加。(4)最后對(duì)結(jié)果進(jìn)行規(guī)格化處理,轉(zhuǎn)化為單精度浮點(diǎn)格式輸出。找到尾數(shù)為1的最高位,并將其后相應(yīng)部分存入尾數(shù)中,同時(shí)對(duì)階碼做出相應(yīng)的調(diào)整。本發(fā)明的浮點(diǎn)加法器可以在5個(gè)時(shí)鐘周期內(nèi)完成浮點(diǎn)數(shù)的加法運(yùn)算,浮點(diǎn)乘法器能夠在兩個(gè)時(shí)鐘周期內(nèi)完成浮點(diǎn)數(shù)的乘法運(yùn)算。參照?qǐng)D4,它是本發(fā)明的FFT運(yùn)算流程示意圖。本發(fā)明采用并行處理的FFT算法進(jìn)行處理,并行處理算法處理數(shù)據(jù)按自然順序輸入,每一級(jí)尋址方法固定,在一級(jí)運(yùn)算處理結(jié)束后,數(shù)據(jù)并不存到原地址位置,而是按自然順序存儲(chǔ)。由于運(yùn)算中每級(jí)的幾何結(jié)構(gòu)固定,對(duì)于每一級(jí)蝶形運(yùn)算來(lái)說(shuō),讀取和寫(xiě)入地址的順序完全相同,所以這種結(jié)構(gòu)尋址方便,易于用FPGA編程,而且能夠加快FFT的運(yùn)算速度。最后的結(jié)果輸出是地址位反序,因此在結(jié)果數(shù)據(jù)輸出時(shí)程序設(shè)計(jì)按地址反序讀取。每一級(jí)蝶形運(yùn)算箭頭上的數(shù)字代表蝶形因子數(shù)據(jù)。參照?qǐng)D5,它是本發(fā)明浮點(diǎn)FFT模塊的系統(tǒng)結(jié)構(gòu)示意圖。系統(tǒng)結(jié)構(gòu)分為六個(gè)模塊,它們分別是控制模塊、蝶形運(yùn)算模塊、定點(diǎn)浮點(diǎn)轉(zhuǎn)換模塊、中間數(shù)據(jù)存儲(chǔ)器1和2、數(shù)據(jù)選擇模塊和蝶形因子存儲(chǔ)器,各模塊的時(shí)鐘輸入為同一信號(hào),下面對(duì)它們分別進(jìn)行介紹(1)、控制模塊通過(guò)計(jì)數(shù)產(chǎn)生中間數(shù)據(jù)存儲(chǔ)器、蝶形因子存儲(chǔ)器以及數(shù)據(jù)選擇模塊的地址、使能和控制信號(hào)。(2)、蝶形運(yùn)算模塊的輸入數(shù)據(jù)包括存儲(chǔ)在中間數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)和蝶形因子數(shù)據(jù),并對(duì)其進(jìn)行蝶形運(yùn)算,運(yùn)算結(jié)果傳送至中間數(shù)據(jù)存儲(chǔ)器。(3)、定點(diǎn)轉(zhuǎn)浮點(diǎn)模塊和浮點(diǎn)轉(zhuǎn)定點(diǎn)模塊將操作數(shù)進(jìn)行定點(diǎn)數(shù)和浮點(diǎn)數(shù)之間的轉(zhuǎn)換。(4)、系統(tǒng)中的兩個(gè)中間數(shù)據(jù)存儲(chǔ)器1和2,它們的設(shè)計(jì)是完全相同的。它們的工作過(guò)程是,當(dāng)一個(gè)存儲(chǔ)器在一次蝶形運(yùn)算中為蝶形運(yùn)算模塊提供輸入運(yùn)算數(shù)據(jù)時(shí),則另一個(gè)在蝶形運(yùn)算結(jié)束后作為輸出數(shù)據(jù)的存儲(chǔ)器。(5)、蝶形因子存儲(chǔ)器用于存儲(chǔ)蝶形因子??梢钥吹?,結(jié)構(gòu)框圖中左上角為FFT輸入信號(hào),右上角為FFT輸出信號(hào),這只是在經(jīng)過(guò)偶數(shù)級(jí)蝶形運(yùn)算后的情況,最終的FFT輸出信號(hào)還是在中間數(shù)據(jù)存儲(chǔ)器1進(jìn)行讀取。反之,如果FFT需要進(jìn)行奇數(shù)級(jí)蝶形運(yùn)算,最后的輸出結(jié)果數(shù)據(jù)將從中間數(shù)據(jù)存儲(chǔ)器2進(jìn)行讀取。參照?qǐng)D6,它是本發(fā)明的蝶形運(yùn)算流水操作流程圖。本發(fā)明設(shè)計(jì)的運(yùn)算模塊采取流水線工作并行處理方式,以加快運(yùn)算速度?,F(xiàn)以基2算法為例,完成蝶形運(yùn)算模塊共需要14個(gè)時(shí)鐘,其中包括數(shù)據(jù)輸入和輸出的各一個(gè)時(shí)鐘周期,浮點(diǎn)乘法運(yùn)算所需的2個(gè)時(shí)鐘周期,兩級(jí)浮點(diǎn)加法運(yùn)算所需的各5個(gè)時(shí)鐘周期。如果采用并行算法,每次只能處理一個(gè)蝶形運(yùn)算,那么對(duì)于時(shí)間的耗費(fèi)是巨大的,而采用流水線工作并行處理方式可以很好的解決這個(gè)問(wèn)題。下面舉例說(shuō)明,如圖6所示在第一組數(shù)據(jù)輸入到蝶形運(yùn)算模塊后,開(kāi)始浮點(diǎn)乘法運(yùn)算的第一時(shí)鐘周期時(shí),第二組數(shù)據(jù)輸入到蝶形運(yùn)算模塊;在第一組數(shù)據(jù)進(jìn)行到浮點(diǎn)乘法運(yùn)算的第二時(shí)鐘周期時(shí),第二組數(shù)據(jù)開(kāi)始進(jìn)行浮點(diǎn)乘法運(yùn)算的第一時(shí)鐘周期,同時(shí)第三組數(shù)據(jù)輸入蝶形運(yùn)算模塊。依此類(lèi)推,在多組運(yùn)算數(shù)據(jù)輸入蝶形運(yùn)算模塊的大部分時(shí)間中,每一級(jí)運(yùn)算模塊都沒(méi)有閑置的時(shí)間,因而得到了充分利用。在整個(gè)運(yùn)算過(guò)程中,除第一組輸出數(shù)據(jù)需要等待較長(zhǎng)時(shí)鐘周期外,之后的每組數(shù)據(jù)處理后的結(jié)果都可以在一個(gè)時(shí)鐘周期后依次得到,從而提高了整體的運(yùn)算速度。參照?qǐng)D7,它是本發(fā)明的FFT模塊框圖,說(shuō)明本發(fā)明FFT模塊綜合的最終結(jié)果。圖中時(shí)鐘信號(hào)為各個(gè)模塊的時(shí)序控制,開(kāi)始運(yùn)行信號(hào)控制整個(gè)模塊開(kāi)始進(jìn)行FFT處理,輸出數(shù)據(jù)傳送信號(hào)表示FFT處理過(guò)程結(jié)束,開(kāi)始傳送結(jié)果數(shù)據(jù),輸入數(shù)據(jù)可以為浮點(diǎn)數(shù)據(jù)或者定點(diǎn)數(shù)據(jù),浮點(diǎn)定點(diǎn)選擇信號(hào)則是為系統(tǒng)判斷數(shù)據(jù)輸入為浮點(diǎn)數(shù)還是定點(diǎn)數(shù),數(shù)據(jù)同時(shí)輸出浮點(diǎn)結(jié)果和定點(diǎn)結(jié)果,可以根據(jù)實(shí)際需要進(jìn)行選擇,F(xiàn)FT模塊內(nèi)部的處理全部為浮點(diǎn)運(yùn)算。參照?qǐng)D8,它是本發(fā)明的運(yùn)算結(jié)果數(shù)據(jù)比較圖,說(shuō)明本發(fā)明仿真處理結(jié)果分析。輸入實(shí)驗(yàn)信號(hào)為以50MHz采樣率進(jìn)行采樣的5MHz頻率的正弦信號(hào),其FFT處理的FPGA仿真結(jié)果如圖8(a)所示,Matlab仿真結(jié)果如圖8(b)所示,可以看出,F(xiàn)PGA仿真結(jié)果與Matlab仿真結(jié)果一致,頻域尖峰值均在第27個(gè)序列處,通過(guò)計(jì)算可得其代表的頻率值為/=50A//fexU5.08AZ/fe,與實(shí)際輸入值基本相同。256參照?qǐng)D9,它是應(yīng)用本發(fā)明在硬件上實(shí)現(xiàn)結(jié)果的示意圖。測(cè)試中,在采樣周期為24MHz時(shí),分別對(duì)lMHz、5MHz、10MHz和12MHz的正弦波進(jìn)行頻譜分析,F(xiàn)FT模塊處理上述不同頻率的正弦信號(hào)在邏輯分析儀上的輸出結(jié)果分別為圖9(a)、(b)、(c)、(d)所示。根據(jù)數(shù)字信號(hào)處理的理論,對(duì)正弦信號(hào)來(lái)說(shuō),F(xiàn)FT分析結(jié)果應(yīng)該有兩個(gè)對(duì)稱的譜峰,隨著輸入信號(hào)頻率的增大,兩個(gè)譜峰會(huì)逐漸接近,而且輸入信號(hào)頻率要滿足奈奎斯特采樣定理,即采樣頻率需要大于輸入信號(hào)最大頻率的兩倍,否則會(huì)發(fā)生頻域混疊。從圖9的各圖中可以觀察到這些現(xiàn)象,當(dāng)輸入信號(hào)頻率為12MHz時(shí),由于采樣周期只有24MHz,所以兩個(gè)譜峰發(fā)生了重合,故在圖9(d)中只能觀察到一個(gè)譜峰。下面分析一下處理結(jié)果的正確性,圖9(a)中l(wèi)MHz信號(hào)的兩個(gè)譜峰的時(shí)間間隔為9.75us,由于邏輯分析儀的采樣周期為10ns(頻率lOOMHz),F(xiàn)PGA輸出頻域序列數(shù)據(jù)的頻率為24MHz,可以計(jì)算得到邏輯分析儀顯示結(jié)果所代表的頻率為/=24纖x[256—(9.75""脂)"謂她/24纖)]/2,測(cè)試值與實(shí)際值絲256上相符,誤差很小?,F(xiàn)對(duì)DSP和FPGA分別進(jìn)行浮點(diǎn)128、256及1024點(diǎn)FFT效率分析,并將測(cè)試數(shù)據(jù)列于表l。DSP采用的型號(hào)為美國(guó)AD公司的TS201,時(shí)鐘頻率使用500MHz;FPGA采用的型號(hào)為Altera公司的EP1S25,對(duì)基2和基4算法分別進(jìn)行分析,使用的時(shí)鐘頻率為100MHz。在處理FFT所需時(shí)間后括號(hào)中的數(shù)值為處理所需周期數(shù)。表1<table>tableseeoriginaldocumentpage10</column></row><table>從表1中可以看出,雖然采用基2算法的FPGA實(shí)現(xiàn)方法處理時(shí)間比TS201相比有一定差距,但是指令周期比其有一定提高,而采用基4算法的FPGA實(shí)現(xiàn)方法在處理時(shí)間和耗費(fèi)指令周期等方面都要優(yōu)越。在工程應(yīng)用中,如果硬件資源允許,采用基4算法的FPGA實(shí)現(xiàn)方法顯然是首選,然而在能夠滿足速度的前提下,也可以選擇耗費(fèi)FPGA資源較少的基2處理方法。表1中TS201的運(yùn)算效率為官方資料值。權(quán)利要求1、一種應(yīng)用FPGA進(jìn)行浮點(diǎn)FFT處理的方法,具體實(shí)現(xiàn)步驟如下(1)、在FFT處理器接收到運(yùn)行FFT處理的信號(hào)后,首先判斷輸入數(shù)據(jù)為定點(diǎn)數(shù)還是浮點(diǎn)數(shù),如果是定點(diǎn)數(shù)則將其轉(zhuǎn)換為浮點(diǎn)數(shù);(2)、將上述處理好的輸入數(shù)據(jù),依順序存入中間數(shù)據(jù)存儲(chǔ)器1中;(3)、首先依次在中間數(shù)據(jù)存儲(chǔ)器1中取出兩個(gè)數(shù)據(jù),同時(shí)相應(yīng)的在蝶形因子存儲(chǔ)器中讀取計(jì)算所需蝶形因子,將取出的數(shù)據(jù)進(jìn)行蝶形運(yùn)算處理后所得結(jié)果寫(xiě)入中間數(shù)據(jù)存儲(chǔ)器2,循環(huán)進(jìn)行上述操作,直到中間數(shù)據(jù)存儲(chǔ)器1中的全部數(shù)據(jù)都經(jīng)過(guò)處理;(4)、然后依次在中間數(shù)據(jù)存儲(chǔ)器2中取出兩個(gè)數(shù)據(jù),同時(shí)相應(yīng)的在蝶形因子存儲(chǔ)器中讀取計(jì)算所需蝶形因子,將取出的數(shù)據(jù)進(jìn)行蝶形運(yùn)算處理后所得結(jié)果再寫(xiě)入中間數(shù)據(jù)存儲(chǔ)器1,循環(huán)進(jìn)行上述操作,直到中間數(shù)據(jù)存儲(chǔ)器2中的全部數(shù)據(jù)都經(jīng)過(guò)處理;(5)、重復(fù)第(3)、(4)步的操作,在中間數(shù)據(jù)存儲(chǔ)器1、2間交替的進(jìn)行讀寫(xiě)操作,直到所有接收到的需要進(jìn)行FFT處理的信號(hào),經(jīng)過(guò)FFT計(jì)算過(guò)程結(jié)束為止;(6)、從中間數(shù)據(jù)存儲(chǔ)器1或2中取出結(jié)果數(shù)據(jù),在其中哪個(gè)數(shù)據(jù)存儲(chǔ)器中取數(shù)根據(jù)FFT處理點(diǎn)數(shù)的不同而存在差異,處理奇數(shù)級(jí)蝶形運(yùn)算時(shí),從中間數(shù)據(jù)存儲(chǔ)器2中讀取結(jié)果數(shù)據(jù);處理偶數(shù)級(jí)蝶形運(yùn)算時(shí),從中間數(shù)據(jù)存儲(chǔ)器1中讀取結(jié)果數(shù)據(jù),在讀取結(jié)果數(shù)據(jù)的時(shí)候,按照地址反序的方式進(jìn)行讀??;(7)、對(duì)結(jié)果數(shù)據(jù)進(jìn)行浮點(diǎn)轉(zhuǎn)換定點(diǎn)的運(yùn)算,轉(zhuǎn)換之后的定點(diǎn)結(jié)果與浮點(diǎn)結(jié)果一起輸出。全文摘要本發(fā)明公開(kāi)了一種應(yīng)用FPGA進(jìn)行浮點(diǎn)FFT處理的方法,它涉及信號(hào)處理
技術(shù)領(lǐng)域:
,其目的是為了避免現(xiàn)有FFT處理方法的不足,該方法能在較短的時(shí)鐘周期內(nèi)完成整個(gè)FFT處理,并在運(yùn)算效率上超過(guò)采用通用DSP的處理方法。該方法的實(shí)現(xiàn)過(guò)程是輸入數(shù)據(jù)處理為浮點(diǎn)數(shù);浮點(diǎn)數(shù)據(jù)按順序存入中間數(shù)據(jù)存儲(chǔ)器1;從中間數(shù)據(jù)存儲(chǔ)器1讀取數(shù)據(jù)進(jìn)行蝶形運(yùn)算,處理結(jié)果存入中間數(shù)據(jù)存儲(chǔ)器2;從中間數(shù)據(jù)存儲(chǔ)器2讀取數(shù)據(jù)進(jìn)行蝶形運(yùn)算,處理結(jié)果存入中間數(shù)據(jù)存儲(chǔ)器1;交替進(jìn)行上述兩步操作,直到FFT處理結(jié)束;從中間數(shù)據(jù)存儲(chǔ)器1或2中按地址倒序讀取運(yùn)算結(jié)果;輸出浮點(diǎn)數(shù)據(jù)處理為定點(diǎn)數(shù),并與浮點(diǎn)結(jié)果一起輸出。本發(fā)明可應(yīng)用于雷達(dá)、通信、圖像等數(shù)字信號(hào)處理
技術(shù)領(lǐng)域:
。文檔編號(hào)G06F17/14GK101231632SQ200710019120公開(kāi)日2008年7月30日申請(qǐng)日期2007年11月20日優(yōu)先權(quán)日2007年11月20日發(fā)明者鵬謝,陳伯孝申請(qǐng)人:西安電子科技大學(xué)