專利名稱:一種多粒度并行fft蝶形計(jì)算的方法及相應(yīng)的裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及集成電路設(shè)計(jì)中快速傅立葉變換(FFT)的蝶形計(jì)算領(lǐng)域,尤其是一種多粒度并行FFT蝶形計(jì)算的方法及相應(yīng)的裝置。
背景技術(shù):
信號(hào)處理系統(tǒng)經(jīng)常需要將信號(hào)內(nèi)容在時(shí)域和頻域進(jìn)行轉(zhuǎn)換,快速傅立葉變換算法 (FFT)可進(jìn)行時(shí)域和頻域間的信號(hào)轉(zhuǎn)換。相對(duì)于其它轉(zhuǎn)換算法來說,快速傅立葉變換算法具有結(jié)構(gòu)統(tǒng)一、計(jì)算量少的優(yōu)點(diǎn),因此廣泛應(yīng)用于信號(hào)處理系統(tǒng)中。FFT算法輸入N個(gè)數(shù)據(jù),輸出N個(gè)數(shù)據(jù);一般稱時(shí)域至頻域的變換為正向變換,而頻域至?xí)r域的變換為逆向變換。FFT算法有多種實(shí)現(xiàn)方式,但都由庫利-圖基算法演變而來。對(duì)于N個(gè)數(shù)據(jù)點(diǎn),基2的庫利-圖基算法包括log2N個(gè)計(jì)算級(jí)。每個(gè)計(jì)算級(jí)輸入N個(gè)數(shù),輸出N個(gè)數(shù);前一計(jì)算級(jí)的輸出經(jīng)過一定的排序后作為后一計(jì)算級(jí)的輸入。第一級(jí)輸入為原始數(shù)據(jù),最后一級(jí)輸出為FFT計(jì)算結(jié)果。對(duì)于8點(diǎn)長度的FFT計(jì)算,其計(jì)算流程如圖1 所示,整個(gè)計(jì)算過程需要三個(gè)計(jì)算級(jí)103 :S0,S1,S2。每個(gè)計(jì)算級(jí)103由N/2個(gè)蝶形102組成,蝶形的計(jì)算結(jié)構(gòu)如圖2所示。每個(gè)蝶形輸入有兩個(gè)數(shù)據(jù)點(diǎn)A和B,以及一個(gè)旋轉(zhuǎn)因子W, 經(jīng)過蝶形計(jì)算后得到兩個(gè)計(jì)算結(jié)果A+BW和A-BW。每個(gè)蝶形計(jì)算中,輸入數(shù)據(jù)A和B的序號(hào)具有確定的對(duì)應(yīng)關(guān)系,該對(duì)應(yīng)關(guān)系由蝶形所在的計(jì)算級(jí)以及輸入數(shù)據(jù)A或B的序號(hào)來確定;同時(shí),旋轉(zhuǎn)因子W的值由當(dāng)前蝶形所在的計(jì)算級(jí)103、輸入數(shù)據(jù)A或B的序號(hào)、FFT數(shù)據(jù)長度確定。如圖1中SO計(jì)算級(jí)中的第1個(gè)數(shù)據(jù)必定與第0個(gè)數(shù)據(jù)構(gòu)成一蝶形,并且第0個(gè)數(shù)據(jù)為蝶形輸入的A,第1個(gè)數(shù)據(jù)為蝶形輸入的B,而W的值為1。而Sl計(jì)算級(jí)中的第1個(gè)數(shù)據(jù)必定與第3個(gè)數(shù)據(jù)構(gòu)成一蝶形,并且第1個(gè)數(shù)據(jù)為蝶形輸入的A,第3個(gè)數(shù)據(jù)為蝶形輸入的B,而W的值為1。計(jì)算級(jí)之間存在數(shù)據(jù)相關(guān),后一計(jì)算級(jí)必須等待前一計(jì)算級(jí)完成以后才能開始計(jì)算。因此,每級(jí)計(jì)算完成后都需要將結(jié)果存放在存儲(chǔ)器中,下一級(jí)計(jì)算從存儲(chǔ)器中讀取上一級(jí)的計(jì)算結(jié)果作為本級(jí)計(jì)算的輸入。計(jì)算級(jí)內(nèi)的蝶形相互獨(dú)立,蝶形的計(jì)算順序不影響計(jì)算結(jié)果,但每個(gè)蝶形所讀取的數(shù)據(jù)A、B和旋轉(zhuǎn)因子W必須滿足內(nèi)在的對(duì)應(yīng)關(guān)系。在并行FFT計(jì)算中,運(yùn)算部件從多粒度并行存儲(chǔ)器中讀取多個(gè)蝶形所需數(shù)據(jù)及對(duì)應(yīng)的旋轉(zhuǎn)因子,并行計(jì)算多個(gè)、多級(jí)蝶形,然后將計(jì)算結(jié)果并行寫入存儲(chǔ)器,以便進(jìn)行一下級(jí)計(jì)算,如圖3所示。圖中假定數(shù)據(jù)長度為64,并行粒度為4,即多粒度并行存儲(chǔ)器305 — 次可讀寫4個(gè)數(shù)據(jù)。此時(shí),兩相鄰計(jì)算級(jí)中存在數(shù)據(jù)相關(guān)的4個(gè)蝶形303構(gòu)成一個(gè)蝶形組 302,兩相鄰計(jì)算級(jí)中的蝶形組構(gòu)成一計(jì)算節(jié)301。蝶形計(jì)算模塊從多粒度并行存儲(chǔ)器305 并行讀取一個(gè)蝶形組所需數(shù)據(jù)點(diǎn)和旋轉(zhuǎn)因子,完成一個(gè)蝶形組計(jì)算后,再將計(jì)算結(jié)果并行寫回多粒度并行存儲(chǔ)器305。在蝶形組302中,每個(gè)蝶形的輸入A、B、W仍必須滿足其內(nèi)在的對(duì)應(yīng)關(guān)系,因此,并行FFT算法中必須考慮計(jì)算數(shù)據(jù)和旋轉(zhuǎn)因子在存儲(chǔ)器中的分布,以及每個(gè)蝶形組302的讀寫地址和讀寫方式,以保證蝶形計(jì)算模塊每次都能并行讀取所需數(shù)據(jù)和旋轉(zhuǎn)因子。
對(duì)于并行FFT算法,目前國內(nèi)外有一些相關(guān)的研究,如專利200910054018.9(基于 FPGA實(shí)現(xiàn)并行結(jié)構(gòu)FFT處理器的方法),專利201110163600. 6 (基于并行處理的FFT裝置及其方法),專利US6, 792,441B2 (Parallel Multiprocessing For Fast Fourier Transform With Pipeline Architecture) 0該類專利都著重討論如何將長序列的FFT數(shù)據(jù)分解成多個(gè)短序列的FFT,利用多個(gè)處理器并行計(jì)算各個(gè)短序列的FFT,最后對(duì)多個(gè)短序列的FFT進(jìn)行交織計(jì)算,得到最終的長序列FFT結(jié)果。但是對(duì)短序列的FFT運(yùn)算,存在多級(jí)蝶形計(jì)算, 每級(jí)蝶形計(jì)算都需要相關(guān)的存儲(chǔ)器讀寫操作,占用很大的延時(shí)。因此,該類并行蝶形計(jì)算方法速度仍受到很大的制約。
發(fā)明內(nèi)容
為了解決上述問題,本發(fā)明提出一種使用多個(gè)緩沖器裝置對(duì)輸入數(shù)據(jù)進(jìn)行多粒度并行FFT蝶形計(jì)算的方法及相應(yīng)的裝置。根據(jù)本發(fā)明的一方面,提出一種使用多個(gè)緩沖器裝置對(duì)輸入數(shù)據(jù)進(jìn)行多粒度并行FFT蝶形計(jì)算的方法,其中第一和第二緩沖器裝置用于緩存并行FFT蝶形組每級(jí)蝶形計(jì)算所需要的數(shù)據(jù),第三緩沖器裝置用于緩存并行FFT蝶形組每級(jí)蝶形計(jì)算所需要的旋轉(zhuǎn)因子,第四緩沖器裝置用于緩存經(jīng)過并行FFT蝶形組計(jì)算完成后的結(jié)果數(shù)據(jù),其特征在于,N點(diǎn)輸入數(shù)據(jù)分成「(log2A0/q個(gè)計(jì)算節(jié),每個(gè)計(jì)算節(jié)中包含個(gè)蝶形組,
蝶形組是并行蝶形計(jì)算的基本單位,其中,「1表示向上取整,L為并行粒度因子,其決定了
并行讀取且可獨(dú)立進(jìn)行蝶形計(jì)算的數(shù)據(jù)個(gè)數(shù)為浐;所述蝶形組中的FFT蝶形計(jì)算方法包括以下步驟步驟1,設(shè)定計(jì)數(shù)器的初始值i = L-Rq ;步驟2,通過MUX選通器從所述第一或第二緩沖器裝置中讀入蝶形計(jì)算所需要的 2L個(gè)數(shù)據(jù),將2L個(gè)數(shù)據(jù)分為組,并從所述第三緩沖器裝置中順序讀取2H個(gè)并行蝶形計(jì)算所需要的旋轉(zhuǎn)因子;步驟3,對(duì)所述組數(shù)據(jù)進(jìn)行一級(jí)并行蝶形計(jì)算;步驟4,將蝶形計(jì)算結(jié)果寫入所述第二緩沖器裝置中,對(duì)數(shù)據(jù)進(jìn)行重排;步驟5,修改當(dāng)前計(jì)數(shù)器i的值為i = i-Ι ;步驟6,判斷i的值是否為0,如果i = 0,表示當(dāng)前蝶形組計(jì)算完成,轉(zhuǎn)向步驟7, 否則返回到步驟2;步驟7,將所述第二緩沖器裝置中的數(shù)據(jù)寫入所述第四緩沖器裝置中,完成一個(gè)蝶形組計(jì)算。根據(jù)本發(fā)明的另一方面,提出了一種對(duì)輸入數(shù)據(jù)進(jìn)行多粒度并行FFT蝶形組計(jì)算的裝置,其特征在于,該裝置包括多個(gè)緩沖器裝置、一計(jì)數(shù)器、多個(gè)數(shù)據(jù)選通模塊、多個(gè)蝶形計(jì)算模塊、一寫回控制模塊,其中,第一和第二緩沖器裝置用于緩存并行FFT蝶形組每級(jí)蝶形計(jì)算所需要的數(shù)據(jù);第三緩沖器裝置用于緩存并行FFT蝶形組每級(jí)蝶形計(jì)算所需要的旋轉(zhuǎn)因子;第四緩沖器裝置用于緩存經(jīng)過并行FFT蝶形組計(jì)算完成后的結(jié)果數(shù)據(jù);所述計(jì)數(shù)器用于標(biāo)識(shí)蝶形組完成蝶形計(jì)算所需要的級(jí)數(shù),所述計(jì)數(shù)器為遞減計(jì)數(shù)器,其初始值為L-Rq,當(dāng)一級(jí)蝶形計(jì)算完成后該計(jì)數(shù)器的值i減1,L為并行粒度因子,其決定了并行讀取且可獨(dú)立進(jìn)行蝶形計(jì)算的數(shù)據(jù)個(gè)數(shù)為2S Rq表示當(dāng)前蝶形組從第Rq級(jí)開始計(jì)算。所述多個(gè)數(shù)據(jù)選通模塊用于根據(jù)所述計(jì)數(shù)器的數(shù)值選擇從所述第一或第二緩沖器裝置中讀入蝶形計(jì)算所需要的力個(gè)數(shù)據(jù),每一個(gè)數(shù)據(jù)選通模塊輸入2個(gè)數(shù)據(jù);所述多個(gè)蝶形計(jì)算模塊中的每一個(gè)從與其相應(yīng)的數(shù)據(jù)選通模塊中讀取數(shù)據(jù),根據(jù)所述第三緩沖器裝置中緩存的旋轉(zhuǎn)因子對(duì)讀取的數(shù)據(jù)進(jìn)行蝶形計(jì)算,并將計(jì)算結(jié)果寫入所述第二緩沖器裝置中;所述寫回控制模塊根據(jù)計(jì)數(shù)器的值決定是否需要將所述第二緩沖器裝置中的數(shù)據(jù)寫入到所述第四緩沖器裝置中。本發(fā)明的方法每次從輸入緩沖器和旋轉(zhuǎn)因子緩沖器中獲取并行FFT蝶形計(jì)算所需的數(shù)據(jù)和旋轉(zhuǎn)因子。輸入緩沖器和旋轉(zhuǎn)因子緩沖器中數(shù)據(jù)和旋轉(zhuǎn)因子已根據(jù)特定的并行粒度和數(shù)據(jù)格式準(zhǔn)備好,不需要額外的位反序操作,讀取后數(shù)據(jù)和旋轉(zhuǎn)因子可直接進(jìn)行FFT 蝶形計(jì)算。從輸入緩沖器和旋轉(zhuǎn)因子緩沖器中讀取蝶形計(jì)算所需的數(shù)據(jù)和旋轉(zhuǎn)因子后,蝶形組302內(nèi)部多級(jí)蝶形計(jì)算在運(yùn)算部件內(nèi)部并行實(shí)現(xiàn),多級(jí)蝶形計(jì)算完成后把蝶形計(jì)算結(jié)果寫回輸出緩沖器,中間不會(huì)訪問緩沖器。在整個(gè)并行FFT蝶形計(jì)算中,每級(jí)蝶形計(jì)算并非原址操作,蝶形計(jì)算完成后需要對(duì)結(jié)果進(jìn)行數(shù)據(jù)重排,以滿足下一級(jí)的蝶形計(jì)算能正確執(zhí)行,數(shù)據(jù)重排通過數(shù)據(jù)重排緩沖器實(shí)現(xiàn)。本發(fā)明的裝置,每次從輸入緩沖器和旋轉(zhuǎn)因子緩沖器中讀取一個(gè)蝶形組計(jì)算所需的數(shù)據(jù)和旋轉(zhuǎn)因子,之后用統(tǒng)一的蝶形表達(dá)式并行地進(jìn)行多級(jí)蝶形計(jì)算并把計(jì)算結(jié)果寫回到輸出緩沖器中,最大限度地減少了訪問緩沖器的次數(shù),大大提高了蝶形計(jì)算的速度,并減少了功耗,本發(fā)明能高效、并行地執(zhí)行多粒度、多數(shù)據(jù)格式的蝶形計(jì)算,還可以根據(jù)具體實(shí)現(xiàn)指明蝶形計(jì)算的并行粒度和數(shù)據(jù)格式,對(duì)平衡組和非平衡組的FFT蝶形計(jì)算均適用。
圖1是數(shù)據(jù)長度為8時(shí)按時(shí)間抽取的基2-FFT算法流程圖。圖2是一個(gè)基本蝶形結(jié)構(gòu)示意圖。圖3是本發(fā)明中蝶形、蝶形組、計(jì)算級(jí)、計(jì)算節(jié)的示意圖。圖4是本發(fā)明多粒度并行FFT蝶形組計(jì)算方法流程圖。圖5是本發(fā)明中8點(diǎn)蝶形組算法示意圖。圖6是8點(diǎn)FFT蝶形組內(nèi)部硬件結(jié)構(gòu)圖。圖7是8點(diǎn)數(shù)據(jù)重排緩沖器數(shù)據(jù)處理示意圖。圖8是1個(gè)基本蝶形計(jì)算模塊內(nèi)部硬件結(jié)構(gòu)圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。為了實(shí)現(xiàn)并行FFT讀寫和計(jì)算,首先定義并行粒度2l(L為正整數(shù))并行粒度是指從緩沖器中并行讀取并且可獨(dú)立進(jìn)行蝶形計(jì)算的數(shù)據(jù)個(gè)數(shù),其中L為并行粒度因子。蝶形組開始計(jì)算級(jí)Rq 表征當(dāng)前蝶形組開始的計(jì)算級(jí),當(dāng)N點(diǎn)FFT為平衡組時(shí), 即N = Lk,其中,k為正整數(shù),每個(gè)蝶形組均有L級(jí)蝶形,Rq始終為0 ;當(dāng)為非平衡組時(shí),即 N Φ Lk,最后計(jì)算節(jié)中蝶形組不需要L級(jí)蝶形,根據(jù)N點(diǎn)不同設(shè)置Rq為1 (L_l),即從第 Rq級(jí)蝶形開始計(jì)算,也即表示當(dāng)前FFT蝶形組計(jì)算所需要的蝶形計(jì)算級(jí)數(shù)為L-Rq。FFT的一個(gè)基本蝶形計(jì)算結(jié)果表示為A士B*W,其中A、B分別表示FFT蝶形計(jì)算所需的第一、二個(gè)數(shù)據(jù),W表示旋轉(zhuǎn)因子。如圖3所示,為本發(fā)明中蝶形計(jì)算、蝶形組、計(jì)算級(jí)、計(jì)算節(jié)的示意圖,整個(gè)N點(diǎn)FFT 運(yùn)算由多個(gè)計(jì)算節(jié)301組成。計(jì)算節(jié)的數(shù)目受蝶形組并行粒度影響,對(duì)于N點(diǎn)FFT計(jì)算, 若蝶形組并行粒度為2S那么計(jì)算節(jié)的數(shù)目為「(log2A0/^H,其中,「 表示向上取整。每一計(jì)算節(jié)301內(nèi)部包含「#/2”個(gè)蝶形組302,一個(gè)蝶形組由多個(gè)計(jì)算級(jí)304構(gòu)成,蝶形組302是并行FFT蝶形計(jì)算的最小并行單位。在平衡組FFT中,每一計(jì)算節(jié)中的蝶形組結(jié)構(gòu)相同,運(yùn)算流程也相同,也就是說,將N點(diǎn)輸入數(shù)據(jù)以蝶形組為基本單位進(jìn)行「(log2 Λ0 / Pv / 1 次的重復(fù)處理,直到獲得最終所需的處理結(jié)果。在非平衡組FFT中,最后計(jì)算節(jié)中蝶形組與之前計(jì)算節(jié)蝶形組結(jié)構(gòu)不同,但其基本運(yùn)算流程仍是相同的。首先蝶形計(jì)算裝置從輸入緩沖器中和旋轉(zhuǎn)因子緩沖器(數(shù)據(jù)從多粒度并行存儲(chǔ)器305讀出放入輸入緩沖器和旋轉(zhuǎn)因子緩沖器)讀取一個(gè)蝶形組302計(jì)算所需的數(shù)據(jù)和旋轉(zhuǎn)因子,之后進(jìn)行相關(guān)的蝶形計(jì)算并把計(jì)算結(jié)果寫回到輸出緩沖器(數(shù)據(jù)最終從輸出緩沖器中取出寫回到多粒度并行存儲(chǔ)器 305,緩沖器是存儲(chǔ)器和運(yùn)算單元數(shù)據(jù)交互的一個(gè)中間媒介)。圖4為本發(fā)明提供的多粒度并行FFT蝶形組計(jì)算方法流程圖,如圖4所示,本發(fā)明所提出的多粒度并行FFT蝶形組計(jì)算方法包括以下步驟步驟401,設(shè)定計(jì)數(shù)器的初始值i = L-Rq,其中,L為并行粒度因子,其決定了并行讀取且可獨(dú)立進(jìn)行蝶形計(jì)算的數(shù)據(jù)個(gè)數(shù)2S其中,Rq表示當(dāng)前蝶形組從第Rq級(jí)蝶形開始, 在平衡組FFT中Rq始終為0,在非平衡組FFT中Rq根據(jù)N的不同設(shè)置為1 (L_l)。將i 初始化為L-Rq,表示當(dāng)前FFT蝶形組計(jì)算所需要的蝶形計(jì)算級(jí)數(shù)。步驟402,通過多路復(fù)用(MUX)選通器讀入蝶形計(jì)算所需要的個(gè)數(shù)據(jù),將個(gè)數(shù)據(jù)分為組,并從旋轉(zhuǎn)因子緩沖器中順序讀取個(gè)并行蝶形計(jì)算所需要的旋轉(zhuǎn)因子;該數(shù)據(jù)可能來自輸入緩沖器,也可能來自數(shù)據(jù)重排緩沖器。MUX的控制信號(hào)來自計(jì)數(shù)器i的值,當(dāng)i = L-Rq時(shí)讀入數(shù)據(jù)輸入緩沖器中的數(shù)據(jù),否則讀入數(shù)據(jù)重排緩沖器中的數(shù)據(jù);所述旋轉(zhuǎn)因子緩沖器中存儲(chǔ)的旋轉(zhuǎn)因子滿足以下條件如果輸入數(shù)據(jù)為滬個(gè),那么所述旋轉(zhuǎn)因子緩沖器共存儲(chǔ)有(L-Rq)Mw個(gè)旋轉(zhuǎn)因子,這(L-Rq)^H個(gè)旋轉(zhuǎn)因子被分為L-Rq組,每一組有個(gè)旋轉(zhuǎn)因子,其中,第L-Rq組中的個(gè)旋轉(zhuǎn)因子各不相同;第 L-Rq-I組中個(gè)旋轉(zhuǎn)因子每2個(gè)相同,即有2"個(gè)不同的旋轉(zhuǎn)因子;第L-Rq-2組中個(gè)旋轉(zhuǎn)因子每4個(gè)相同,即有個(gè)不同的旋轉(zhuǎn)因子,依次類推。步驟403,對(duì)所述組數(shù)據(jù)進(jìn)行一級(jí)并行蝶形計(jì)算。步驟404,將蝶形計(jì)算結(jié)果寫入數(shù)據(jù)重排緩沖器中,對(duì)數(shù)據(jù)進(jìn)行重排,以進(jìn)行下一級(jí)蝶形計(jì)算。
步驟405,修改當(dāng)前計(jì)數(shù)器i的值為i = i-Ι,表征后面還需要蝶形計(jì)算的級(jí)數(shù)。步驟406,判斷i的值是否為0,如果i = 0,表示當(dāng)前蝶形組計(jì)算完成,轉(zhuǎn)向步驟 407,否則返回到步驟402進(jìn)行計(jì)算。步驟407,將數(shù)據(jù)重排緩沖器中的數(shù)據(jù)寫入數(shù)據(jù)輸出緩沖器中,完成一個(gè)蝶形組計(jì)
笪弁。以8點(diǎn)輸入數(shù)據(jù)為例,圖5為本發(fā)明中8點(diǎn)蝶形組算法示意圖,如圖5所示,本發(fā)明8點(diǎn)蝶形組計(jì)算包括以下步驟步驟51,從輸入緩沖器501和旋轉(zhuǎn)因子緩沖器中分別讀取8點(diǎn)蝶形計(jì)算所需的數(shù)據(jù)和旋轉(zhuǎn)因子(旋轉(zhuǎn)因子緩沖器在圖5中沒有標(biāo)示出);步驟52,將讀取到的8點(diǎn)蝶形計(jì)算所需的數(shù)據(jù)和旋轉(zhuǎn)因子分成4組,構(gòu)成4個(gè)基本蝶形502,完成第一級(jí)蝶形504計(jì)算;步驟53,將經(jīng)第一級(jí)蝶形504計(jì)算后得到的結(jié)果寫入到數(shù)據(jù)重排緩沖器503中,以對(duì)第一級(jí)蝶形計(jì)算結(jié)果重新排序;步驟M,將重排后的數(shù)據(jù)從數(shù)據(jù)重排緩沖器503中取出,進(jìn)行第二級(jí)蝶形505計(jì)算;步驟55,將經(jīng)第二級(jí)蝶形505計(jì)算后得到的結(jié)果寫入數(shù)據(jù)重排緩沖器503中進(jìn)行重新排序;步驟56,將重排后的數(shù)據(jù)從數(shù)據(jù)重排緩沖器503中取出,進(jìn)行第三級(jí)蝶形506計(jì)算;步驟57,將經(jīng)第三級(jí)蝶形506計(jì)算后得到的結(jié)果寫入數(shù)據(jù)重排緩沖器503中進(jìn)行重新排序,數(shù)據(jù)重排緩沖器503將最終重排后的數(shù)據(jù)寫入到輸出緩沖器507。圖6為當(dāng)FFT蝶形計(jì)算工作在L = 3時(shí)的8點(diǎn)FFT蝶形組內(nèi)部硬件結(jié)構(gòu)圖,其中 8點(diǎn)輸入數(shù)據(jù)被分為4組并行進(jìn)行處理,如圖6所示,本發(fā)明所提出的多粒度并行FFT蝶形組計(jì)算裝置包括一數(shù)據(jù)輸入緩沖器601、一旋轉(zhuǎn)因子緩沖器603、一數(shù)據(jù)重排緩沖器604、 一計(jì)數(shù)器605、4個(gè)數(shù)據(jù)選通模塊602、4個(gè)蝶形計(jì)算模塊606、一寫回控制模塊607、一數(shù)據(jù)輸出緩沖器610,每一個(gè)數(shù)據(jù)選通模塊602和一個(gè)對(duì)應(yīng)的蝶形計(jì)算模塊606組合起來對(duì)一組輸入數(shù)據(jù)進(jìn)行處理。其中數(shù)據(jù)輸入緩沖器601用于存放蝶形組開始計(jì)算時(shí)所需要的數(shù)據(jù);旋轉(zhuǎn)因子緩沖器603用于存放蝶形組每級(jí)蝶形計(jì)算所需要的旋轉(zhuǎn)因子;計(jì)數(shù)器605用于標(biāo)識(shí)蝶形計(jì)算的級(jí)數(shù),該計(jì)數(shù)器為遞減計(jì)數(shù)器,其初始值為L-Rq, 當(dāng)一級(jí)蝶形計(jì)算完成后該計(jì)數(shù)器的值減1 ;數(shù)據(jù)選通模塊602用于根據(jù)計(jì)數(shù)器605的數(shù)值選擇讀入數(shù)據(jù)輸入緩沖器601中的數(shù)據(jù)或是數(shù)據(jù)重排緩沖器604中的數(shù)據(jù),也就是說,數(shù)據(jù)選通模塊602的選通信號(hào)來自計(jì)數(shù)器605。當(dāng)計(jì)數(shù)器605的值為L-Rq時(shí),數(shù)據(jù)選通模塊602選擇數(shù)據(jù)輸入緩沖器601中的8 點(diǎn)數(shù)據(jù)進(jìn)入蝶形計(jì)算模塊606,否則選擇數(shù)據(jù)重排緩沖器604中的8點(diǎn)數(shù)據(jù),每一個(gè)數(shù)據(jù)選通模塊602輸入2個(gè)數(shù)據(jù)。每一蝶形計(jì)算模塊606用于對(duì)于輸入數(shù)據(jù)進(jìn)行蝶形計(jì)算;蝶形計(jì)算模塊進(jìn)一步包括數(shù)據(jù)分解模塊608和蝶形計(jì)算單元609,其中
數(shù)據(jù)分解模塊608用于對(duì)參與蝶形計(jì)算的數(shù)據(jù)進(jìn)行實(shí)部和虛部的分解;蝶形計(jì)算單元609用于基于分解完成后的數(shù)據(jù)進(jìn)行多級(jí)蝶形計(jì)算,蝶形計(jì)算所需的旋轉(zhuǎn)因子來自旋轉(zhuǎn)因子緩沖器603,每一級(jí)蝶形計(jì)算完成后均把計(jì)算結(jié)果寫入數(shù)據(jù)重排緩沖器604中。數(shù)據(jù)重排緩沖器604用于存放當(dāng)前級(jí)蝶形計(jì)算的結(jié)果,并對(duì)當(dāng)前級(jí)的蝶形計(jì)算結(jié)果進(jìn)行重排,以滿足下一級(jí)蝶形計(jì)算的順序讀入要求。 寫回控制模塊607用于控制是否需要將數(shù)據(jù)重排緩沖器604中的數(shù)據(jù)寫入到數(shù)據(jù)輸出緩沖器610中,其控制信號(hào)來自計(jì)數(shù)器605,當(dāng)計(jì)數(shù)器605的值為0時(shí)表示當(dāng)前的蝶形組各級(jí)并行計(jì)算已完成,需要把數(shù)據(jù)重排緩沖器604中的數(shù)據(jù)寫入到數(shù)據(jù)輸出緩沖器610 中,以輸出該蝶形組的蝶形計(jì)算結(jié)果。如圖7所示,為本發(fā)明提供的8點(diǎn)數(shù)據(jù)重排緩沖器數(shù)據(jù)處理示意圖,其中,Y(i)表示當(dāng)前級(jí)的蝶形計(jì)算結(jié)果,x(i)為對(duì)Y(i)的重新排序,同時(shí)也是下一級(jí)蝶形計(jì)算的輸入數(shù)據(jù)。對(duì)于f點(diǎn)長的數(shù)據(jù)重排緩沖,滿足以下重排規(guī)律 Γ x(i) = Y(Ii)ix^-1 + ζ) = 7(2/ + l),0<i< 2"。如圖8所示,為該發(fā)明提供的一個(gè)基本蝶形計(jì)算模塊(如圖6中的蝶形計(jì)算模塊 606)內(nèi)部硬件結(jié)構(gòu)圖。設(shè)々=a+j*b,B = c+j*d,W = e+j*f ;那么一個(gè)基本的蝶形運(yùn)算結(jié)果可以表示為
權(quán)利要求
1.一種使用多個(gè)緩沖器裝置對(duì)輸入數(shù)據(jù)進(jìn)行多粒度并行FFT蝶形計(jì)算的方法,其中第一和第二緩沖器裝置用于緩存并行FFT蝶形組每級(jí)蝶形計(jì)算所需要的數(shù)據(jù),第三緩沖器裝置用于緩存并行FFT蝶形組每級(jí)蝶形計(jì)算所需要的旋轉(zhuǎn)因子,第四緩沖器裝置用于緩存經(jīng)過并行FFT蝶形組計(jì)算完成后的結(jié)果數(shù)據(jù),其特征在于,N點(diǎn)輸入數(shù)據(jù)分成「(log2A0/^H個(gè)計(jì)算節(jié),每個(gè)計(jì)算節(jié)中包含「#/2"1個(gè)蝶形組,蝶形組是并行蝶形計(jì)算的基本單位,其中,「 表示向上取整,L為并行粒度因子,其決定了并行讀取且可獨(dú)立進(jìn)行蝶形計(jì)算的數(shù)據(jù)個(gè)數(shù)為浐;所述蝶形組中的FFT蝶形計(jì)算方法包括以下步驟步驟1,設(shè)定計(jì)數(shù)器的初始值i = L-Rq,表示當(dāng)前FFT蝶形組計(jì)算所需要的蝶形計(jì)算級(jí)數(shù);步驟2,通過多路復(fù)用(MUX)選通器從所述第一或第二緩沖器裝置中讀入蝶形計(jì)算所需要的力個(gè)數(shù)據(jù),將f個(gè)數(shù)據(jù)分為組,并從所述第三緩沖器裝置中順序讀取個(gè)并行蝶形計(jì)算所需要的旋轉(zhuǎn)因子;步驟3,對(duì)所述組數(shù)據(jù)進(jìn)行一級(jí)并行蝶形計(jì)算;步驟4,將蝶形計(jì)算結(jié)果寫入所述第二緩沖器裝置中,對(duì)數(shù)據(jù)進(jìn)行重排;步驟5,修改當(dāng)前計(jì)數(shù)器i的值為i = i-Ι ;步驟6,判斷i的值是否為0,如果i = 0,表示當(dāng)前蝶形組計(jì)算完成,轉(zhuǎn)向步驟7,否則返回到步驟2;步驟7,將所述第二緩沖器裝置中的數(shù)據(jù)寫入所述第四緩沖器裝置中,完成一個(gè)蝶形組計(jì)算。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟2中,當(dāng)i=L-Rq時(shí)MUX選通器讀入所述第一緩沖器裝置中的數(shù)據(jù),否則讀入所述第二緩沖器裝置中的數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第三緩沖器裝置中存儲(chǔ)的旋轉(zhuǎn)因子滿足以下條件如果輸入數(shù)據(jù)為力個(gè),那么所述第三緩沖器裝置共存儲(chǔ)有(L-Rq) 個(gè)旋轉(zhuǎn)因子,這(L-Rq)Mw個(gè)旋轉(zhuǎn)因子被分為L-Rq組,每一組有個(gè)旋轉(zhuǎn)因子,其中,第L-Rq 組中的個(gè)旋轉(zhuǎn)因子各不相同;第L-Rq-I組中個(gè)旋轉(zhuǎn)因子每2個(gè)相同,即有個(gè)不同的旋轉(zhuǎn)因子;第L-Rq-2組中個(gè)旋轉(zhuǎn)因子每4個(gè)相同,即有個(gè)不同的旋轉(zhuǎn)因子,依次類推。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟4中,所述第二緩沖器裝置對(duì)數(shù)據(jù)進(jìn)行重排以滿足下一級(jí)蝶形計(jì)算的順序讀入要求,對(duì)于點(diǎn)的輸入數(shù)據(jù)Y(i),所述第二緩沖器裝置的輸出x(i)為f x(i) = Y(Ii){χ(2。1 + i) = 7(2/ + l),0<i< 2"
5.一種對(duì)輸入數(shù)據(jù)進(jìn)行多粒度并行FFT蝶形組計(jì)算的裝置,其特征在于,該裝置包括 多個(gè)緩沖器裝置、一計(jì)數(shù)器、多個(gè)數(shù)據(jù)選通模塊、多個(gè)蝶形計(jì)算模塊、一寫回控制模塊,其中,第一和第二緩沖器裝置用于緩存并行FFT蝶形組每級(jí)蝶形計(jì)算所需要的數(shù)據(jù); 第三緩沖器裝置用于緩存并行FFT蝶形組每級(jí)蝶形計(jì)算所需要的旋轉(zhuǎn)因子;第四緩沖器裝置用于緩存經(jīng)過并行FFT蝶形組計(jì)算完成后的結(jié)果數(shù)據(jù);所述計(jì)數(shù)器用于標(biāo)識(shí)蝶形組完成蝶形計(jì)算所需要的級(jí)數(shù),所述計(jì)數(shù)器為遞減計(jì)數(shù)器, 其初始值為L-Rq,表示當(dāng)前FFT蝶形組計(jì)算所需要的蝶形計(jì)算級(jí)數(shù),當(dāng)一級(jí)蝶形計(jì)算完成后該計(jì)數(shù)器的值i減1,L為并行粒度因子,其決定了并行讀取且可獨(dú)立進(jìn)行蝶形計(jì)算的數(shù)據(jù)個(gè)數(shù)為力;所述多個(gè)數(shù)據(jù)選通模塊用于根據(jù)所述計(jì)數(shù)器的數(shù)值選擇從所述第一或第二緩沖器裝置中讀入蝶形計(jì)算所需要的滬個(gè)數(shù)據(jù),每一個(gè)數(shù)據(jù)選通模塊輸入2個(gè)數(shù)據(jù);所述多個(gè)蝶形計(jì)算模塊中的每一個(gè)從與其相應(yīng)的數(shù)據(jù)選通模塊中讀取數(shù)據(jù),根據(jù)所述第三緩沖器裝置中緩存的旋轉(zhuǎn)因子對(duì)讀取的數(shù)據(jù)進(jìn)行蝶形計(jì)算,并將計(jì)算結(jié)果寫入所述第二緩沖器裝置中;所述寫回控制模塊根據(jù)計(jì)數(shù)器的值決定是否需要將所述第二緩沖器裝置中的數(shù)據(jù)寫入到所述第四緩沖器裝置中。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,當(dāng)計(jì)數(shù)器的值i= L-Rq時(shí),所述數(shù)據(jù)選通模塊讀入所述第一緩沖器裝置中的數(shù)據(jù),否則讀入所述第二緩沖器裝置中的數(shù)據(jù)。
7.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述蝶形計(jì)算模塊進(jìn)一步包括數(shù)據(jù)分解模塊和蝶形計(jì)算單元,其中,所述數(shù)據(jù)分解模塊用于對(duì)參與蝶形計(jì)算的數(shù)據(jù)進(jìn)行實(shí)部和虛部的分解;所述蝶形計(jì)算單元用于根據(jù)所述第三緩沖器裝置中緩存的旋轉(zhuǎn)因子對(duì)分解完成后的數(shù)據(jù)進(jìn)行多級(jí)蝶形計(jì)算,每一級(jí)蝶形計(jì)算完成后均把計(jì)算結(jié)果寫入所述第二緩沖器裝置中;所述第二緩沖器裝置對(duì)當(dāng)前級(jí)的蝶形計(jì)算結(jié)果進(jìn)行重排,以滿足下一級(jí)蝶形計(jì)算的順序讀入要求。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,對(duì)于f點(diǎn)的輸入數(shù)據(jù)Y(i),所述第二緩沖器裝置的輸出x(i)為f x(i) = Y(Ii){χ(2。1 + i) = 7(2/ + l),0<i< 2" °
9.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述第三緩沖器裝置中存儲(chǔ)的旋轉(zhuǎn)因子滿足以下條件如果輸入數(shù)據(jù)為力個(gè),那么所述第三緩沖器裝置共存儲(chǔ)有(L-Rq) 個(gè)旋轉(zhuǎn)因子,這(L-Rq)Mw個(gè)旋轉(zhuǎn)因子被分為L-Rq組,每一組有個(gè)旋轉(zhuǎn)因子,其中,第L-Rq 組中的個(gè)旋轉(zhuǎn)因子各不相同;第L-Rq-I組中個(gè)旋轉(zhuǎn)因子每2個(gè)相同,即有個(gè)不同的旋轉(zhuǎn)因子;第L-Rq-2組中個(gè)旋轉(zhuǎn)因子每4個(gè)相同,即有個(gè)不同的旋轉(zhuǎn)因子,依次類推。
10.根據(jù)權(quán)利要求5所述的裝置,其特征在于,當(dāng)所述計(jì)數(shù)器的值為0時(shí),所述寫回控制模塊決定將所述第二緩沖器裝置中的數(shù)據(jù)寫入到所述第四緩沖器裝置中。
全文摘要
本發(fā)明公開了一種多粒度并行FFT蝶形計(jì)算的方法及相應(yīng)的裝置。該方法及裝置中的蝶形計(jì)算為非原址計(jì)算,每次從輸入緩沖器和旋轉(zhuǎn)因子緩沖器中讀取蝶形計(jì)算所需的數(shù)據(jù)及旋轉(zhuǎn)因子,之后用統(tǒng)一的蝶形表達(dá)式并行地進(jìn)行多級(jí)蝶形計(jì)算,最后把計(jì)算結(jié)果寫回到輸出緩沖器。本發(fā)明最大限度地減少了訪問緩沖器的次數(shù),大大提高了蝶形計(jì)算的速度,并減少了功耗。本發(fā)明能高效、并行地執(zhí)行多粒度、多數(shù)據(jù)格式的蝶形計(jì)算,還可以根據(jù)具體實(shí)現(xiàn)指明蝶形計(jì)算的并行粒度和數(shù)據(jù)格式,對(duì)平衡組和非平衡組的FFT蝶形計(jì)算均適用。
文檔編號(hào)G06F17/14GK102541813SQ201110460520
公開日2012年7月4日 申請(qǐng)日期2011年12月31日 優(yōu)先權(quán)日2011年12月31日
發(fā)明者尹磊祖, 汪濤, 王東琳, 蒿杰, 謝少林 申請(qǐng)人:中國科學(xué)院自動(dòng)化研究所