專利名稱::基于fpga實現并行結構fft處理器的方法
技術領域:
:本發(fā)明涉及一種FFT實現方法,尤其涉及一種基于FPGA實現并行結構FFT處理器的方法。
背景技術:
:快速傅里葉變換(FFT,即FastFourierTransform)在數字信號處理領域有著非常廣泛的應用,但長序列FFT運算量很大,實現比較困難。隨著高速器件的發(fā)展,關于如何快速實現長序列FFT這方面的研究很多,各種各樣的實現方法也相繼出現。例如文獻(AnanthGramam,AnshulGupta,GeorgeKarypis.IntroductiontoParaIlelComputing,SecondEdition[M],PearsonEducation,Harlow,England,2003:245—250)提到了使用多個專用芯片來構成并行結構以快速實現長序列FFT,但這種方法是基于專用芯片的,靈活性不足。近年來元件可編程邏輯門陣列(FPGA,即FieldProgrammableGateArray)器件發(fā)展迅速,其可編程重構特性使得它在許多領域得到了越來越廣泛的應用。Xilinx公司Virtex-II系列FPGA內部集成了大量專用乘法器(BlockMultiplier)、大量塊RAM(BlockRAM)以及豐富的邏輯門資源,這使得它非常適合實現FFT這種需要大量乘法器、大量塊RAM和寄存器的設計。
發(fā)明內容本發(fā)明所要解決的技術問題是提供一種基于FPGA實現并行結構FFT處理器的方法,它可以通過簡單的電路結構提高長序列FFT的處理速度和系統吞吐量(Throughput)。為了解決以上技術問題,本發(fā)明提供了一種基于FPGA實現并行結構FFT處理器的方法,用于進行N(N為2的k次冪,或不足k次冪,將序列補0使N變?yōu)?的k次冪,k為正整數)點的FFT運算,所述FPGA包含多個專用乘法器、多個大量塊RAM、以及多個邏輯門,包括如下步驟-(1)將所述N點等分為M段,每段具有N/M個點;(2)將所述N點的FFT運算,轉化為所述M段(每段N/M個點)FFT運算的表達式;(3)提取步驟(2)所得表達式中各M段FFT運算表達式的系數,用所述專用乘法器、大量塊RAM、及邏輯門通過所述FPGA內部電路實現所述系數與對應各M段FFT運算結果乘積,再將所述各段的乘積結果求和得到所述N點的FFT運算結果。因為本發(fā)明把長序列分裂成較短序列,并由多個FFT單元并行實現短序列的FFT,最后用FPGA內部一個特定結構的運算電路來處理各單元的計算結果,從而得到最終的結果,有效提高了長序列FFT的處理速度和系統吞吐量(Throughput)。下面結合附圖和具體實施方式對本發(fā)明作進一步詳細說明。圖1是N二16按時間抽取法(DIT)的基-2FFT的運算流程圖;圖2是本發(fā)明四路并行的基-2DITFFT實現框圖。具體實施方式本發(fā)明從理論上分析并設計一種基于FPGA實現的并行FFT處理器結構——把長序列分裂成較短序列,并由多個FFT單元并行實現短序列的FFT,最后用FPGA內部一個特定結構的運算電路來處理各單元的計算結果,從而得到最終的結果?;贔PGA實現并行結構FFT處理器的方法,用于進行N(N為2的k次冪,或不足k次冪,將序列補0使N變?yōu)?的k次冪,k為正整數)點的FFT運算,所述FPGA包含多個專用乘法器、多個大量塊RAM、以及多個邏輯門,包括如下步驟(1)將所述N點等分為M段,每段具有N/M個點;(2)將所述N點的FFT運算,轉化為所述M段(每段N/M個點)FFT運算的表達式;(3)提取步驟(2)所得表達式中各M段FFT運算表達式的系數,用所述專用乘法器、大量塊RAM、及邏輯門通過所述FPGA內部的電路實現所述系數與對應各M段FFT運算結果乘積,再將所述各段的乘積結果求和得到所述N點的FFT運算結果。如圖1顯示了一個標準的按時間抽取(DIT)的N=16點FFT運算流程圖,由圖1我們可觀察到最后兩級之前的數據流程在水平上明顯地分成四個獨立單元(如圖中虛線所示),每個單元獨立地實現點的FFT,從而構成一個四路并行的結構。因此,我們可以用四個點的FFT單元來并行計算N點的FFT,即所謂并行結構的FFT,然后設計一個特定結構的運算電路來處理最后兩級。下面將詳細描述如何設計這個的電路。本發(fā)明的重點是設計一個適合于FPGA實現的并行FFT處理器,其關鍵是設計前面提到的特定結構的運算電路,而標準的FFT單元設計將不在這里闡述。對于長度為N的序列x(n),其中N為2的k次冪,或不足k次冪,將序列補0使N變?yōu)?的k次冪,k為正整數(例如當N45時,將序列x(n)后補一個0,則原序列的長度N變?yōu)?6,即24)。設其對應的FFT結果為N點序列義(w),另P么有W-l=^>(")『;"(i)其中,『w=e-w,即所謂的旋轉因子UwVo7e-/a"o力為了便于理解,我們按庫利-圖基算法"把輸入序列x(n)按n分裂成奇偶兩組,即x!(r)^(2r)l(2)x2(r)=x(2r+l)j其中=0,1,2,...,]^/2-1,那么有W-lW/2-lW/2-lW/2-lW/2—1"=0r=0r=0r=0r=0一^,_■2;r又Ww力?=,^=^/2,則上式可表示成r=0r=0式中A(w)和Z2(w)分別是x,(r)和x2(r)的FFT(|點)。由式(3)看出,一個N點的FFT已分解成兩個^點的FFT,它們按式(3)來計算一個N點的FFT。2然而,Xl(r)、x2(r)、A(w)和X2(w)都是|點序列,即r,w滿足r,w^0,l,2…,N/2-l。但X(w)卻有N個點,而利用(3)式計算得到的只是X(w)的前半部分的值,要用《(mO和%2(m0來表達X(w)全部的值還需要用到系數的周期性,即『=『=+皿),這樣可以得到<formula>formulaseeoriginaldocumentpage8</formula>同理<formula>formulaseeoriginaldocumentpage8</formula>再考慮到『;的對稱性<formula>formulaseeoriginaldocumentpage8</formula>由式(3)和(6)可得到如下的關系式<formula>formulaseeoriginaldocumentpage8</formula>其中w-0,l,2,…,iV/2-l這樣,只需求出0到^-l)區(qū)間的所有A(w)和A(w)值,即可求得S到(N-1)區(qū)間內所有的X(w)值。同理,若把x,(r)和X2(r)也按奇偶各分成兩組,艮口<formula>formulaseeoriginaldocumentpage8</formula>其對應的FFT為<formula>formulaseeoriginaldocumentpage8</formula>其中r,H^0,l,2,…,JV/4-1,采用與前面相似的推導方法,可得到如下關系式<formula>formulaseeoriginaldocumentpage8</formula>其中r,w=0,l,2,...,iV/4-l,把式(10)和式(11)代入式(3)和式(7),可得到如下關系式,)=(w)+W:2X12(w)]+『;[Z21(w)+W"2(w)]+iW4)=[Z"(vtO—W:Z,2(m;)]+『r闊[&(w)—W:2X22(w)]火(w+2W/4)=[X+W^%12(mO]-『;[%21(+W^%22(12)其中,M^0,l,2,…,iV/4-i,這樣長度為N點的序列x(n)的FFT的值X(w)可由長度為N/4點的序列Xn(w)、x12(w)、^(w)和j^(w)通過式(12)計算出來先由4個相同的計算長度為;的FFT單元并行計算;^(w)、x12(w)、j^(w)和Z22(w),再用一個由三個旋轉因子表(WNw/2、WJ和Wf40、四個復數乘法器及一些加減法器組成特定結構的運算電路,計算最后兩級,其結果四路并行輸出,如圖2所示。當然,還可以按上面的方法繼續(xù)把N點序列等分下去以增加并行的路數,然而這不僅增加硬件資源的消耗,而且特定結構的運算電路也變得更圖2給出的是并行FFT處理器的核心電路框圖,而實際應用時還應把數據輸入輸出考慮進去。當四路并行時,四個FFT處理單元應當同步工作,這就需要把待處理的長序列先分裂成四個較短序列再并行送入四個輸入存儲單元中,然后四個獨立的FFT處理單元并行地讀走各自的數據;對于輸出,由圖2可知,把四路輸出數據分別存儲到四個輸出存儲器中,每個存儲器存儲的是最終結果的一部分,把它們首尾相連起來就是一個完整的序列。上面所述的并行FFT處理器已在我們自制的帶有Virtex-II序列FPGAXC2V3000實驗板DASQ—USB—VI上得到了驗證。長度為2048點的實序列分裂成四路輸入FPGA,四個并行FFT單元采用的是XilinxFPGA開發(fā)工具ISE6.1自帶的免費FFTIP核,它可實現流水輸入輸出。一個長度為N=2048序列的FFT驗證結果如表1所示,這里輸入輸出數據表示為定點數,字長為16位。需要說明的是FFTIP核實現的是按時間抽取的(DIT)順序輸入輸出的FFT,數據在等待時間(Latency)內充滿流水線,之后處理器并行流水輸出運算結果。另外,這里吞吐量表示為吞吐量二時鐘頻率X并行路數。表一<table>tableseeoriginaldocumentpage10</column></row><table>表1為在XC2V3000-6上實現N:2048序列的定點FFT的性能,分別列舉了在單路、雙路和四路并行的情況下,處理器所消耗的資源(Resources)、能達到的時鐘頻率(MaximumSpeed)、等待時間(Latency)、變換時間(TransformTime)及系統吞吐量。由表l可看出,2路并行時所用Slices資源比單路增加不到1倍但處理速度和吞吐量卻可以提高1倍;而4路并行時所用Slices資源比單路增加3倍左右但變換時間只有單路的四分之一,而系統吞吐量則達到單路的4倍。這說明了如果資源足夠就可以不斷地增加并行的路數以獲得更快的處理速度和更大的吞吐量。本發(fā)明從離散傅里葉變換公式出發(fā)詳細推導出可并行實現的FFT公式,設計了適合于FPGA實現的并行結構的FFT處理器,這種處理器把長序列分裂成幾個較短的序列,然后并行送入幾個可實現短序列FFT的處理單元并行地做FFT,各路FFT處理單元的計算結果并行送入一個特定結構的運算電路進行運算,然后并行輸出最終的結果。實驗結果表明,這種并行結構的FFT處理器可線性提高處理速度和系統吞吐量。由于資源所限本文只驗證了兩路并行和四路并行的情況,實際上如果處理速度要求更高時,還可以增加并行的路數,對系統進行擴展。權利要求1、一種基于FPGA實現并行結構FFT處理器的方法,用于進行N(N為2的k次冪,或不足k次冪,將序列補O使N變?yōu)?的k次冪,k為正整數)點的FFT運算,所述FPGA包含多個專用乘法器、多個大量塊RAM、以及多個邏輯門,其特征在于,包括如下步驟(1)將所述N點等分為M段,每段具有N/M個點;(2)將所述N點的FFT運算,轉化為所述M段(每段N/M個點)FFT運算的表達式;(3)提取步驟(2)所得表達式中各M段FFT運算表達式的系數,用所述專用乘法器、大量塊RAM、及邏輯門通過所述FPGA內部電路實現所述系數與對應各M段FFT運算結果乘積,再將所述各段的乘積結果求和得到所述N點的FFT運算結果。2、如權利要求1所述的基于FPGA實現并行結構FFT處理器的方法,其特征在于,所述的M為2,步驟(2)所述的表達式為j2ffZ(w+W/2):^(w)-e,臘j^0),其中,w二N/2,X(w)為第1段FFT運算的表達式,X(w+iW2)為第2段FFT運算表達式,a(w)和j^mO為N/2點的FFT運算。3、如權利要求1所述的基于FPGA實現并行結構FFT處理器的方法,其特征在于,所述的M為4,步驟(2)所述的表達式為<formula>formulaseeoriginaldocumentpage3</formula>z(w+3語)=w:2z12(w)]-C21(>v)-w;^22(w)]其中,X(w)為第1段FFT運算的表達式,X(w+N/4)為第2段FFT運算的表達式,X(w+2N/4)為第3段FFT運算的表達式,X(w+3N/4)為第4段FFT運算的表達式,Xu(w)、X2,(w)和j^(w)分別為N/4點的FFT運算,WNw/2、WNW和為三個旋轉因子表。全文摘要本發(fā)明公開了一種基于FPGA實現并行結構FFT處理器的方法,用于進行N點的FFT運算,FPGA包含多個專用乘法器、多個大量塊RAM、以及多個邏輯門,包括如下步驟(1)將N點等分為M段,每段具有N/M個點;(2)將N點的FFT運算,轉化為M段(每段N/M個點)FFT運算的表達式;(3)提取步驟(2)所得表達式中各M段FFT運算表達式的系數,用專用乘法器、大量塊RAM、及邏輯門通過所述FPGA內部電路實現系數與對應各M段FFT運算結果乘積,再將各段的乘積結果求和得到N點的FFT運算結果。本發(fā)明把長序列分裂成較短序列,有效提高了長序列FFT的處理速度和系統吞吐量。文檔編號G06F17/14GK101582059SQ200910054018公開日2009年11月18日申請日期2009年6月26日優(yōu)先權日2009年6月26日發(fā)明者仝芳軒,亮劉,周正仙,剛席,魏皋,正黃申請人:上海華魏光纖傳感技術有限公司