專利名稱:一種fft/ifft處理方法及一種fft/ifft處理器的制作方法
技術領域:
本發明涉及信號處理技術領域,特別是涉及一種FFT (Fast FourierTransform,快 速傅里葉變換)/IFFT (Inverse Fast-Fourier-Transformation,快速傅立葉反變換)處理 方法及一種FFT/IFFT處理器。
背景技術:
為了在未來的移動通信技術競爭激烈的環境中處于有利位置,滿足日益增長 的用戶多元化需求,3GPP組織于2004年底通過了關于3GPP長期演進LTE (Long Term Evolution)的立項工作,加速制定新的空中接口和無線接入網絡標準。3G LTE的目標是 更高的數據速率、更低的時延、改進的系統容量和覆蓋范圍,以及較低的成本。基于上述目 標,LTE 系統采用 OFDM (Orthogonal Frequency Division Multiplexing,正交頻分復用)、 ΜΙΜΟ (Multiple-Input Multiple-Out-put,多輸入多輸出)等關鍵技術減小多徑衰落的影 響,以及提高系統的傳輸速率,目前,LTE系統在20M的信道帶寬下能夠提供下行IOOMbps和 上行50Mbps的峰值速率,甚至更高。LTE系統下行數據鏈路采用OFDM調制,OFDM調制中最關鍵的運算就是IFFT,相類 似,OFDM解調的核心為FFT。FFT/IFFT處理過程中涉及蝶形運算,傳統的FFT/IFFT處理器 在實現蝶形運算時,由于每一級蝶形運算都要輸出中間數據,因此需要占用兩塊大小相同 的內存空間,一塊用于存儲進行蝶形運算的數據,另一塊用于存儲蝶形運算的中間數據。但是,這種實現方法會占用較大的內存,因為為了蝶形運算數據讀寫方便,這兩塊 內存是分別按照奇數地址和偶數地址來存儲數據的。例如,參照圖1所示,長度是1024字 節的數據進行蝶形運算時,一塊內存在偶數地址中存儲該數據,另一塊內存在奇數地址中 存儲蝶形運算的每一級運算結果。這樣,每塊內存的大小都是2048字節,但每塊內存都只 使用了一半,造成很大的浪費。特別的,如果蝶形運算數據的點位越多,就需要更多級的蝶形運算,而每一級的運 算結果都需要存儲,就需要占用更多的空間。尤其是當運算數據量很大時,會占用更大的內 存,影響整個處理器的處理速度。
發明內容
本發明所要解決的技術問題是提供一種FFT/IFFT處理方法及一種FFT/IFFT處理 器,以解決現有的FFT/IFFT計算占用存儲空間的問題。為了解決上述問題,本發明公開了一種FFT/IFFT處理方法,包括將存儲空間按照奇偶地址劃分為兩部分,并在其中一部分奇數/偶數地址中寫入 FFT/IFFT蝶形運算數據;在每一級FFT/IFFT蝶形運算中,從所述奇數/偶數地址中讀取FFT/IFFT蝶形運 算數據,并進行FFT/IFFT蝶形運算,然后再將FFT/IFFT蝶形運算的結果數據寫入另一部分 偶數/奇數地址中;
其中,所述存儲空間的大小至少為所述FFT/IFFT蝶形運算數據的兩倍。優選的,所述存儲空間的大小為所有長度的FFT/IFFT蝶形運算數據最大值的兩倍。優選的,在每一級FFT/IFFT蝶形運算中,從所述奇數/偶數地址中讀取FFT/IFFT 蝶形運算數據之后,進行FFT/IFFT蝶形運算之前,還包括對每一級FFT/IFFT蝶形運算數 據取最大值;將所述最大值與預定義的最大值進行比較,得到當前級的移位值;利用所述 移位值對FFT/IFFT蝶形運算數據進行移位判斷。其中,將所述最大值與預定義的最大值進行比較,得到當前級的移位值包括如果 比較結果符合溢出條件,則將上一級的移位值減一,否則,將上一級的移位值加一,得到當 前級的移位值。其中,利用所述移位值對FFT/IFFT蝶形運算數據進行移位包括當所述移位值大 于0時,將FFT/IFFT蝶形運算數據右移;當所述移位值小于0時,將FFT/IFFT蝶形運算數 據左移。本發明還提供了一種FFT/IFFT處理器,包括存儲模塊,用于將存儲空間按照奇偶地址劃分為兩部分,并在其中一部分奇數/ 偶數地址中寫入FFT/IFFT蝶形運算數據;其中,所述存儲空間的大小至少為所述FFT/IFFT 蝶形運算數據的兩倍;蝶形運算模塊,用于在每一級FFT/IFFT蝶形運算中,從所述存儲模塊的奇數/偶 數地址中讀取FFT/IFFT蝶形運算數據,并進行FFT/IFFT蝶形運算,然后再將FFT/IFFT蝶 形運算的結果數據寫入所述存儲模塊的另一部分偶數/奇數地址中。優選的,所述存儲空間的大小為所有長度的FFT/IFFT蝶形運算數據最大值的兩倍。優選的,所述蝶形運算模塊采用基4或基2的混合基運算。優選的,所述FFT/IFFT處理器還包括移位模塊,用于對每一級從存儲模塊讀取 出的FFT/IFFT蝶形運算數據取最大值,將所述最大值與預定義的最大值進行比較,得到當 前級的移位值,然后利用所述移位值對FFT/IFFT蝶形運算數據進行移位判斷,輸出移位結 果到蝶形運算模塊。其中,所述移位模塊包括移位計算子模塊,用于對每一級從存儲模塊讀取出的 FFT/IFFT蝶形運算數據取最大值,將所述最大值與預定義的最大值進行比較,如果比較結 果符合溢出條件,則將上一級的移位值減一,否則,將上一級的移位值加一,得到當前級的 移位值;移位子模塊,用于當所述移位值大于0時,將FFT/IFFT蝶形運算數據右移;當所述 移位值小于0時,將FFT/IFFT蝶形運算數據左移。與現有技術相比,本發明具有以下優點首先,本發明對現有的FFT/IFFT處理器進行了改進,將存儲空間按照奇偶地址劃 分為兩部分,其中一部分(如奇數地址中)存儲FFT/IFFT蝶形運算數據,另一部分(如偶 數地址中)存儲蝶形運算的每一級運算結果。這樣,蝶形運算總共占用的存儲空間為蝶形 運算數據的兩倍。而現有技術中需要兩塊存儲空間,每塊的大小都是蝶形運算數據的兩倍。 相比可知,本發明占用的存儲空間遠遠小于現有技術,大大節省了內存。其次,本發明還實現了混合基的FFT/IFFT計算。目前進行FFT/IFFT計算的數據長度有4096/2048/512等各種長度,現有技術中一個FFT/IFFT處理器只設計成適用于一種 長度的計算,而本發明將所述存儲空間設為最大長度的兩倍,就可以在同一個FFT/IFFT處 理器中完成各種長度的FFT/IFFT計算。由于不同長度的數據又分別采用不同基的計算,如 基2或基4運算,因此本發明可以完成混合基的FFT/IFFT變換。再次,本發明在FFT/IFFT變換過程中,通過移位的方法可以將運算數據限制到一 定范圍之內,一方面可以防止數據過大而造成系統溢出,另一方面還可以防止數據過小而 造成處理精度不夠。因此本發明可以防止溢出并提高處理精度。
圖1是現有技術中蝶形運算占用內存的示意圖;圖2是本發明中蝶形運算占用內存的示意圖;圖3是本發明實施例一所述一種FFT/IFFT處理方法的流程圖;圖4是本發明實施例二所述一種FFT/IFFT處理過程示意圖;圖5是本發明實施例二所述一種FFT/IFFT處理方法的流程圖;圖6是本發明實施例三所述一種FFT/IFFT處理器的結構圖。
具體實施例方式為使本發明的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和具體實 施方式對本發明作進一步詳細的說明。實施例一在FFT/IFFT蝶形運算過程中,為了節省內存,同時為了蝶形運算數據讀寫方便, 本發明將存儲空間按照奇偶地址劃分為兩部分,其中一部分存儲FFT/IFFT蝶形運算數據, 另一部分存儲FFT/IFFT蝶形運算的每一級運算結果。參照圖2,是本發明中蝶形運算占用內存的示意圖。以1024長度的數據為例,進行FFT/IFFT變換時,占用一塊2048大小的內存。如 圖所示,根據存儲器讀寫地址的奇偶性,為避免讀寫沖突,其中的偶數地址部分(RAMO)存 儲進行FFT/IFFT蝶形運算的數據,奇數地址部分(RAMI)存儲FFT/IFFT蝶形運算的每一級 運算結果。當然,也可以在奇數地址中存儲進行FFT/IFFT蝶形運算的數據,在偶數地址中存 儲FFT/IFFT蝶形運算的每一級運算結果。1024點(即長度是1024的數據)FFT/IFFT變換過程如下參照圖3,是本發明實施例一所述一種FFT/IFFT處理方法的流程圖。步驟301,將存儲空間按照奇偶地址劃分為兩部分,并在其中一部分奇數/偶數地 址中寫入FFT/IFFT蝶形運算數據;圖2中,在偶數地址中寫入1024點FFT/IFFT蝶形運算數據。通常,FFT/IFFT變換需要進行多級蝶形運算,例如2048/512/128點的FFT/IFFT變 換需要6/5/4級的蝶形運算,而1024點的FFT/IFFT變換需要5級的蝶形運算,每一級的蝶 形運算過程如下步驟302,在每一級FFT/IFFT蝶形運算中,從所述奇數/偶數地址中讀取FFT/IFFT蝶形運算數據;通常,用基2算法來處理長度是2n的數據的FFT/IFFT變換,如256、512、1024、2048 等;用基4算法來處理長度是4n的數據的FFT/IFFT變換,如256、1024等。基2算法和基 4算法相比,運算速度較慢,但是,基4算法不能處理長度為512、2048等非4n的數據。圖2中,采用基4算法處理1024點數據,即將每4個數據作為一組,每一級總共需 要進行256次(1024/4 = 256)步驟302-304的循環處理,每次從偶數地址中讀取4個數據 進行蝶形計算。具體實現可以采用時間抽取和頻率抽取,本實施例選擇頻率抽取。步驟303,進行FFT/IFFT蝶形運算;圖2中,是將讀取出的4個數據送入蝶形運算器。FFT/IFFT算法分為時間抽取和 頻率抽取,1024點的FFT/IFFT采用基4的方法實現,實現方法可以采用時間抽取,也可以采 用頻率抽取。步驟304,將FFT/IFFT蝶形運算的結果數據寫入另一部分偶數/奇數地址中。圖2中,是將蝶形運算器輸出的4個數據寫入奇數地址中。每一級的蝶形運算都重復步驟302-304。由上可知,本發明在進行FFT/IFFT變換時,只占用一塊大小相當于運算數據兩倍 的存儲空間即可,而現有技術需要兩塊大小都是運算數據兩倍的存儲空間。對比可知,本發 明節省了空間。此外,現有技術中,通常一個FFT/IFFT處理器只設計成適用于一種長度的計算, 例如A處理器用于2048點的FFT/IFFT變換,B處理器用于1024點的FFT/IFFT變換。但 是在實際應用中,例如LTE系統中,下行數據鏈路有長度為2048和4096兩種長度FFT/IFFT 變換,另外,在小區搜索(cell-search)中還會用到128長度的FFT變換,再者考慮到適應 其他數據速率,可能還會有長度為1024/512的FFT/IFFT變換,為此本發明設計了基2和基 4的混合基FFT/IFFT變換。具體實現方式是將處理器的存儲空間設為所有數據長度最大值的兩倍。例如,目 前可能處理的數據長度有128、256、512、1024、2048、4096幾種,選取最大值4096,則將處理 器的內存設為4096X2 = 8192大小,其中奇數/偶數地址存儲運算數據,偶數/奇數地址 存儲運算結果。這樣,同一個處理器就可以完成128/256/512/1024/2048/4096點的混合基 FFT/IFFT 變換,其中 128/256/512/1024/2048/4096 點可采用基 2 算法,256/1024/4096 點 可采用基4算法,可以適用于各種帶寬要求,既節省了空間又節省了硬件開銷。需要說明的是,本發明所述的FFT/IFFT處理方法不僅適用于OFDM調制解調,還可 以用于其它需要進行FFT/IFFT變換的處理過程中。實施例二 下面將以一個具體的實現例子進行說明。參照圖4,是本發明實施例二所述一種FFT/IFFT處理過程示意圖。所述FFT/IFFT處理過程主要包括RAM操作、防溢出判斷(Scaling)、基2/基4運 算(FFT4/IFFT4,FFT2/IFFT2)和乘以旋轉因子(Cordic)幾個處理步驟,其中基2/基4運 算和乘以旋轉因子合稱為蝶形運算。FFT/IFFT處理過程是進行FFT/IFFT變換的數據輸入到RAM存儲,進行每一級的蝶形運算時,從RAM讀取數據,然后進行Scaling防溢出判斷,(其中需要計算出移位值 (Get_Shift)),然后進行基2或基4計算,計算完成后再進行Cordic乘以一個旋轉因子, Cordic的輸出將寫入RAM,然后進行下一級蝶形運算,多級循環之后,RAM進行一系列操作 (如排序)后將FFT/IFFT變換結果輸出。
更詳細的FFT/IFFT處理過程如下參照圖5,是本發明實施例二所述一種FFT/IFFT處理方法的流程圖。步驟501,將所有進行FFT/IFFT變換的數據輸入RAM ;如圖2中,將1024點數據全部寫入RAM的偶數地址中。FFT/IFFT變換中主要進行的是蝶形運算,每一級蝶形運算重復執行步驟 502-505 步驟502,每一級FFT/IFFT蝶形運算中,從RAM讀取數據進行Scaling防溢出判 斷;通常,處理器硬件對數據大小有要求,如果數據過大就會造成系統溢出,因此本實 施例在進行蝶形運算之前都會判斷數據是否溢出,從而保證處理器的正常運行。本實施例采用移位的方法來防止溢出,具體如下1)對每一級FFT/IFFT蝶形運算數據取最大值(maX_abs);具體的,如果采用基4算法,每次讀出4個數據,則比較這4個數據取最大值;如果 采用基2算法,每次讀出2個數據,則從這2個數據中選出最大值。2)將所述最大值(maX_abs)與預定義的最大值(MAX)進行比較,得到當前級的移 位值;所述預定義的最大值(MAX)為處理器硬件要求的最大值,如果比較結果符合溢出 條件,則將上一級的移位值減一,否則,將上一級的移位值加一,得到當前級的移位值。例如,用shift表示移位值,如果maX_abS X 2 > MAX,表示符合溢出條件,則 shift-Ι ;如果 max_absX2 < MAX,則 shift+1 ;如果 max_absX 2 = MAX,則 shift 不變。其 中,所述shift為上一級的移位值。3)利用所述移位值對FFT/IFFT蝶形運算數據進行移位。輸出當前shift值給Scaling,進行移位當移位值(shift)大于0時,將運算數據右移,即減小該數,防止數據溢出;當移位值(shift)小于0時,將運算數據左移,即增大該數,提高數據精度。上述移位的方法可以將運算數據限制到一定范圍之內,一方面可以防止數據過大 而造成系統溢出,另一方面還可以防止數據過小而造成處理精度不夠。因此本發明可以防 止溢出并提高處理精度。此外,每一級蝶形運算中還包括多次子循環運算,例如1024點的FFT/IFFT采用基 4運算,將每4個數據作為一組,每一級總共需要進行256次(1024/4 = 256)步驟502-505 的子循環處理。上述移位值在每一級蝶形運算的第一個子循環中計算得出,并延續使用到 后續的子循環中。也即每一級蝶形運算都使用固定的移位值,移位值只在下一級蝶形運算 的開始重新計算。步驟503,Scaling輸出的數據進行基2或基4計算;步驟504,基2或基4計算的輸出進行Cordic乘以一個旋轉因子;
步驟505,將Cordic輸出寫入RAM ;每一級蝶形運算都需要乘以一個旋轉因子,這是FFT/IFFT變換公式的要求,但最 后一級蝶形運算的結果不需要乘以旋轉因子,而是直接寫入RAM。圖2中,將蝶形運算結果 寫入奇數地址中。步驟506,循環執行步驟502-505,直到多級蝶形運算全部完成,最后將FFT/IFFT 變換結果輸出。上述FFT/IFFT處理過程不僅節省了 RAM空間,還采用混合基實現,同時可以很好 地防止數據溢出并提高了處理精度。實施例三參照圖6,是本發明實施例三所述一種FFT/IFFT處理器的結構圖。所述處理器主要包括存儲模塊61,用于將存儲空間按照奇偶地址劃分為兩部分,并在其中一部分奇數 /偶數地址中寫入FFT/IFFT蝶形運算數據;其中,所述存儲空間的大小至少為所述FFT/ IFFT蝶形運算數據的兩倍;蝶形運算模塊62,用于在每一級FFT/IFFT蝶形運算中,從所述奇數/偶數地址中 讀取FFT/IFFT蝶形運算數據,并進行FFT/IFFT蝶形運算,然后再將FFT/IFFT蝶形運算的 結果數據寫入另一部分偶數/奇數地址中。 與現有技術相比,上述處理器可以節省存儲空間。優選的,所述存儲空間的大小可以為所有長度的FFT/IFFT蝶形運算數據最大值 的兩倍。這樣,該處理器就可以實現混合基計算,完成各種點位的FFT/IFFT計算,滿足不同 帶寬的要求。例如,所述蝶形運算模塊62可采用基4或基2的混合基運算。優選的,所述處理器還可以包括移位模塊63,用于對每一級讀取出的FFT/IFFT蝶形運算數據取最大值,將所述最 大值與預定義的最大值進行比較,得到當前級的移位值,然后利用所述移位值對FFT/IFFT 蝶形運算數據進行移位判斷,并輸出移位結果到蝶形運算模塊62。優選的,所述移位模塊63具體可以包括移位計算子模塊631,用于對每一級讀取出的FFT/IFFT蝶形運算數據取最大值, 將所述最大值與預定義的最大值進行比較,如果比較結果符合溢出條件,則將上一級的移 位值減一,否則,將上一級的移位值加一,得到當前級的移位值;移位子模塊632,用于當所述移位值大于0時,將FFT/IFFT蝶形運算數據右移;當 所述移位值小于0時,將FFT/IFFT蝶形運算數據左移。上述FFT/IFFT處理器不僅節省了 RAM空間,還采用混合基實現,同時可以很好地 防止數據溢出并提高了處理精度。而且,不僅適用于OFDM調制解調,還可以用于其它需要 進行FFT/IFFT變換的系統中。本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與 其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于系統實施例 而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部 分說明即可。以上對本發明所提供的一種FFT/IFFT處理方法及一種FFT/IFFT處理器,進行了詳細介紹,本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的 說明只是用于幫助理解本發明的方法及其核心思想;同時,對于本領域的一般技術人員,依 據本發明的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內容 不應理解為對本發明的限制。
權利要求
一種FFT/IFFT處理方法,其特征在于,包括將存儲空間按照奇偶地址劃分為兩部分,并在其中一部分奇數/偶數地址中寫入FFT/IFFT蝶形運算數據;在每一級FFT/IFFT蝶形運算中,從所述奇數/偶數地址中讀取FFT/IFFT蝶形運算數據,并進行FFT/IFFT蝶形運算,然后再將FFT/IFFT蝶形運算的結果數據寫入另一部分偶數/奇數地址中;其中,所述存儲空間的大小至少為所述FFT/IFFT蝶形運算數據的兩倍。
2.根據權利要求1所述的方法,其特征在于所述存儲空間的大小為所有長度的FFT/IFFT蝶形運算數據最大值的兩倍。
3.根據權利要求1所述的方法,其特征在于,在每一級FFT/IFFT蝶形運算中,從所述奇 數/偶數地址中讀取FFT/IFFT蝶形運算數據之后,進行FFT/IFFT蝶形運算之前,還包括對每一級FFT/IFFT蝶形運算數據取最大值;將所述最大值與預定義的最大值進行比較,得到當前級的移位值;利用所述移位值對FFT/IFFT蝶形運算數據進行移位判斷。
4.根據權利要求3所述的方法,其特征在于,將所述最大值與預定義的最大值進行比 較,得到當前級的移位值包括如果比較結果符合溢出條件,則將上一級的移位值減一,否則,將上一級的移位值加 一,得到當前級的移位值。
5.根據權利要求3或4所述的方法,其特征在于,利用所述移位值對FFT/IFFT蝶形運 算數據進行移位包括當所述移位值大于0時,將FFT/IFFT蝶形運算數據右移;當所述移位值小于0時,將FFT/IFFT蝶形運算數據左移。
6.一種FFT/IFFT處理器,其特征在于,包括存儲模塊,用于將存儲空間按照奇偶地址劃分為兩部分,并在其中一部分奇數/偶數 地址中寫入FFT/IFFT蝶形運算數據;其中,所述存儲空間的大小至少為所述FFT/IFFT蝶形 運算數據的兩倍;蝶形運算模塊,用于在每一級FFT/IFFT蝶形運算中,從所述存儲模塊的奇數/偶數地 址中讀取FFT/IFFT蝶形運算數據,并進行FFT/IFFT蝶形運算,然后再將FFT/IFFT蝶形運 算的結果數據寫入所述存儲模塊的另一部分偶數/奇數地址中。
7.根據權利要求6所述的FFT/IFFT處理器,其特征在于所述存儲空間的大小為所有長度的FFT/IFFT蝶形運算數據最大值的兩倍。
8.根據權利要求7所述的FFT/IFFT處理器,其特征在于所述蝶形運算模塊采用基4或基2的混合基運算。
9.根據權利要求6所述的FFT/IFFT處理器,其特征在于,還包括移位模塊,用于對每一級從存儲模塊讀取出的FFT/IFFT蝶形運算數據取最大值,將所 述最大值與預定義的最大值進行比較,得到當前級的移位值,然后利用所述移位值對FFT/ IFFT蝶形運算數據進行移位判斷,輸出移位結果到蝶形運算模塊。
10.根據權利要求9所述的FFT/IFFT處理器,其特征在于,所述移位模塊包括移位計算子模塊,用于對每一級從存儲模塊讀取出的FFT/IFFT蝶形運算數據取最大值,將所述最大值與預定義的最大值進行比較,如果比較結果符合溢出條件,則將上一級的 移位值減一,否則,將上一級的移位值加一,得到當前級的移位值;移位子模塊,用于當所述移位值大于0時,將FFT/IFFT蝶形運算數據右移;當所述移位 值小于0時,將FFT/IFFT蝶形運算數據左移。
全文摘要
本發明提供了一種FFT/IFFT處理方法及一種FFT/IFFT處理器,以解決現有的FFT/IFFT計算占用存儲空間的問題。所述方法包括將存儲空間按照奇偶地址劃分為兩部分,并在其中一部分奇數/偶數地址中寫入FFT/IFFT蝶形運算數據;在每一級FFT/IFFT蝶形運算中,從所述奇數/偶數地址中讀取FFT/IFFT蝶形運算數據,并進行FFT/IFFT蝶形運算,然后再將FFT/IFFT蝶形運算的結果數據寫入另一部分偶數/奇數地址中;其中,所述存儲空間的大小至少為所述FFT/IFFT蝶形運算數據的兩倍。本發明不僅節省了存儲空間,還采用混合基實現,同時可以很好地防止數據溢出并提高了處理精度。
文檔編號G06F17/14GK101887406SQ20101020340
公開日2010年11月17日 申請日期2010年6月10日 優先權日2010年6月10日
發明者宋磊, 張輝, 王西強, 王颯爽 申請人:北京創毅視通科技有限公司