基于dsp芯片的可變長度fft計算方法
【專利摘要】本發(fā)明公開一種基于DSP芯片的可變長FFT計算方法,步驟為:1)判斷待運算數(shù)據(jù)的長度N,若N<N1,執(zhí)行步驟2);若N1<N<TH1,執(zhí)行步驟3);若TH1<N<TH2,執(zhí)行步驟4);其中N1為DSP芯片內(nèi)FFT執(zhí)行裝置能夠直接支持的最大點數(shù),TH1為片上存儲器能夠存儲的最大點數(shù),TH2=N1*N1;2)直接執(zhí)行一維FFT并以DMA方式從片外存儲器讀寫數(shù)據(jù);3)執(zhí)行二維FFT且由片上存儲器存儲中間數(shù)據(jù)并進行矩陣轉(zhuǎn)置;4)分成多個數(shù)據(jù)塊進行變換,由片上存儲器存儲每個數(shù)據(jù)塊。本發(fā)明具有實現(xiàn)方法簡單、能夠?qū)崿F(xiàn)可變長度的FFT計算且計算長度范圍大、存儲帶寬利用率高、執(zhí)行效率高的優(yōu)點。
【專利說明】基于DSP芯片的可變長度FFT計算方法
【技術領域】
[0001]本發(fā)明涉及數(shù)字信號處理領域,尤其涉及一種基于SRAM的可變長度FFT計算方法。
【背景技術】
[0002]DFT (Discrete Fourier Transformation,離散傅里葉變換)是數(shù)字信號處理領域不可缺少的工具之一,它將一種信號從時域變換到頻域,廣泛應用于聲學、圖像、雷達、電信和無線信號處理等領域。FFT (Fast Fourier Transformation,快速傅立葉變換)是DFT的一種快速實現(xiàn)方法,F(xiàn)FT的出現(xiàn)使得DFT在實際應用中得到了更廣泛的應用。FFT算法是利
用復指數(shù)常數(shù)Wn =e ITl的特性將信號序列X(η)或X(k)的排列次序進行重排并分解成
短序列運算,將DFT運算復雜度由0(n2)降低到O(nlogn)。在實時信號處理領域,F(xiàn)FT算法對嵌入式處理器的性能和效率都提出更高要求,對于不同的應用,F(xiàn)FT的運算規(guī)模變化非常大,可能由數(shù)十點到數(shù)十萬點。
[0003]目前,大部分FFT算法采用DSP芯片上的運算單元實現(xiàn),然而FFT計算過程需要交叉訪問信號序列X (η),無法充分發(fā)揮DSP芯片的計算和存儲效率,尤其對于大規(guī)模FFT計算,不能將整行變換數(shù)據(jù)存儲到Cache或者片上存儲器中,導致需要頻繁訪問片外存儲器,從而存儲帶寬利用率 非常低,而且無法發(fā)揮DSP芯片提供的流水線計算效率。
[0004]部分DSP芯片中雖然提供了 FFT加速器方案,例如TI C55X系列的DSP芯片中的緊耦合FFT加速器,支持的最大運算規(guī)模僅為1K,限制FFT加速器的應用范圍。由于執(zhí)行大規(guī)模FFT時至少需要將一行數(shù)據(jù)存儲到FFT加速器內(nèi)部數(shù)據(jù)寄存器中,因此FFT加速器所需存儲容量隨FFT規(guī)模的增大而線性增加,存儲容量將成為大規(guī)模FFT加速器設計的主要限制。
[0005]DDR和SRAM是兩類最常用的數(shù)據(jù)存儲器,其中DDR存儲器具有存儲容量大(通常為G量級)、價格低的特點,通常用于大規(guī)模原始數(shù)據(jù)和計算結(jié)果的存儲。DDR存儲器的行緩沖組織結(jié)構決定了 DDR存儲器的訪問特征,若數(shù)據(jù)順序存儲且按照順序進行訪問,則能夠充分發(fā)揮DDR存儲器存儲帶寬,獲得較大實際訪問帶寬;但若以不規(guī)則方式訪問DDR存儲器時,DDR存儲器存儲帶寬利用率將急劇下降。片上SRAM存儲器是一種隨機訪問存儲器,具有訪問靈活、速度快的特點,但是相對于DDR存儲器來說,SRAM存儲器的存儲容量較小,通常僅為M量級,無法存儲大規(guī)模原始數(shù)據(jù)和計算結(jié)果。在DSP芯片中,通常將SRAM設計成多核之間的高速共享存儲器。隨著工藝的提升,DSP芯片內(nèi)部集成的SRAM容量越來越大,如TI C66XX系列DSP芯片的SRAM存儲容量達到4MB。
[0006]對于大規(guī)模的FFT計算,可以通過二維FFT計算的方式模式實現(xiàn)。N = N1^N2點的FFT可以通過N2個N1點和N1個N2點的FFT算法來實現(xiàn),迭代公式如下式所示:
[0007]
【權利要求】
1.一種基于DSP芯片的可變長度的FFT計算方法,其特征在于步驟為: (1) 判斷存儲在片外存儲器中待運算數(shù)據(jù)的長度N,若MN1,轉(zhuǎn)入執(zhí)行步驟(2);若N^NGH1,轉(zhuǎn)入執(zhí)行步驟(3);若TH^NGH2,轉(zhuǎn)入執(zhí)行步驟(4);其中N = 2k,N1為DSP芯片內(nèi)FFT執(zhí)行裝置能夠直接支持的最大點數(shù),TH1為片上存儲器能夠存儲的最大點數(shù),TH2 =N1^N1 ; (2)直接以DMA方式從片外存儲器中讀取初始數(shù)據(jù),所述FFT執(zhí)行裝置執(zhí)行N點一維FFT運算后將運算結(jié)果以DMA方式寫回片外存儲器中,退出計算; (3)將所述待運算數(shù)據(jù)視為NfN2的二維數(shù)據(jù)矩陣并按行順序讀取到片上存儲器,其中N = N1^N2 ;所述FFT執(zhí)行裝置對片上存儲器中數(shù)據(jù)矩陣執(zhí)行二維FFT運算后得到最終結(jié)果矩陣,按列順序讀取所述最終結(jié)果矩陣并按行順序?qū)懟仄獯鎯ζ?,退出計算? (4)將所述待運算數(shù)據(jù)視為NfN2的二維矩陣并按列分為多個列數(shù)據(jù)塊,每個列數(shù)據(jù)塊包含TH1個數(shù)據(jù)點,依次讀取每個列數(shù)據(jù)塊到片上存儲器中并由所述FFT執(zhí)行裝置進行列方向的FFT計算,將計算結(jié)果順序?qū)懟仄獯鎯ζ鳎粚⑺鲇嬎憬Y(jié)果按行分為多個行數(shù)據(jù)塊,每個行數(shù)據(jù)塊包含TH1個數(shù)據(jù)點,依次讀取每個行數(shù)據(jù)塊到片上存儲器中,由所述FFT執(zhí)行裝置進行行方向的FFT計算,按列順序讀取計算結(jié)果并按行順序?qū)懟仄獯鎯ζ?,退出計算?br>
2.根據(jù)權利要求1所述的基于DSP芯片的可變長度的FFT計算方法,其特征在于,所述步驟(3)的具體步驟為: (3.1)將片外存儲器中N點所述待運算數(shù)據(jù)視為NfN2的二維數(shù)據(jù)矩陣,按行順序讀取所述二維數(shù)據(jù)矩陣并以相同順序存儲到片上存儲器中,得到初始數(shù)據(jù)矩陣; (3.2)所述FFT執(zhí)行裝置讀取片上存儲器中的所述初始數(shù)據(jù)矩陣并執(zhí)行列方向上的N2次&點FFT運算,進行旋轉(zhuǎn)因子補償后得到列方向運算結(jié)果矩陣,并寫入片上存儲器中對應位置; (3.3)所述FFT執(zhí)行裝置從片上存儲器中順序讀取所述列方向運算結(jié)果矩陣并執(zhí)行行方向上的N1次N2點FFT運算,得到最終運算結(jié)果矩陣并順序?qū)懭氲狡洗鎯ζ髦袑恢茫? (3.4)按列順序從片上存儲器中讀取所述最終結(jié)果矩陣并以行順序?qū)懟仄獯鎯ζ髦?,得到最終結(jié)果矩陣,退出計算。
3.根據(jù)權利要求2所述的基于DSP芯片的可變長度的FFT計算方法,其特征在于,所述步驟(3.2)的具體步驟為: (3.2.1)以間隔尋址的方式從片上存儲器中讀取所述初始數(shù)據(jù)矩陣的一列數(shù)據(jù)至所述FFT執(zhí)行裝置中; (3.2.2)由所述FFT執(zhí)行裝置進行N1點FFT運算,得到當前列數(shù)據(jù)的蝶形運算結(jié)果;對所述蝶形運算結(jié)果進行一級補償旋轉(zhuǎn)因子計算,得到當前列數(shù)據(jù)的計算結(jié)果;以間隔尋址的方式讀取下一列數(shù)據(jù)至所述FFT執(zhí)行裝置中,返回執(zhí)行步驟(3.2.2),總計執(zhí)行N2次后得到列方向運算結(jié)果矩陣; (3.2.3)將所述列方向運算結(jié)果矩陣的每列數(shù)據(jù)以間隔尋址的方式寫入片上存儲器的對應位置中,轉(zhuǎn)入執(zhí)行步驟(3.3)。
4.根據(jù)權利要求3所述的基于DSP芯片的可變長度的FFT計算方法,其特征在于,所述步驟(3.3)的具體步驟為: (3.3.1)從片上存儲器中順序讀取所述列方向運算結(jié)果矩陣的一行數(shù)據(jù)至所述FFT執(zhí)行裝置中; (3.3.2)由所述FFT執(zhí)行裝置進行N2點FFT運算,得到當前行數(shù)據(jù)的運算結(jié)果;順序讀取下一行數(shù)據(jù)至所述FFT執(zhí)行裝置中,返回執(zhí)行步驟(3.3.2),總計執(zhí)行N1次后得到最終運算結(jié)果矩陣; (3.3.3)將所述最終運算結(jié)果矩陣的每行數(shù)據(jù)順序?qū)懭肫洗鎯ζ鞯膶恢弥?,轉(zhuǎn)入執(zhí)行步驟(3.4)。
5.根據(jù)權利要求1所述的基于DSP芯片的可變長度的FFT計算方法,其特征在于,所述步驟(4)的具體步驟為: (4.1)將片外存儲器中所述待運算數(shù)據(jù)視為NfN2的二維數(shù)據(jù)矩陣,并將二維數(shù)據(jù)矩陣按列分為m個列數(shù)據(jù)塊,每個列數(shù)據(jù)塊包含TH1個數(shù)據(jù)點,其中w ;按行順序讀取一個列數(shù)據(jù)塊,轉(zhuǎn)入執(zhí)行步驟(4.2); (4.2)將當前列數(shù)據(jù)塊按順序讀取到片上存儲器中,由所述FFT執(zhí)行裝置執(zhí)行列方向的FFT計算,進行旋轉(zhuǎn)因子補償后得到當前列數(shù)據(jù)塊的計算結(jié)果,并將所述當前列數(shù)據(jù)塊的計算結(jié)果順序?qū)懟仄獯鎯ζ?;按行順序讀取下一個列數(shù)據(jù)塊,返回執(zhí)行步驟(4.2),直至完成所有列數(shù)據(jù)塊的運算,得到列方向計算結(jié)果矩陣; (4.3)按行順序?qū)⑵獯鎯ζ髦兴霾襟E(4.2)得到的列方向計算結(jié)果矩陣分為m個大行數(shù)據(jù)塊,每個行數(shù)據(jù)塊包含TH1個數(shù)據(jù)點,按行順序讀取一個行數(shù)據(jù)塊,轉(zhuǎn)入執(zhí)行步驟(4.4); (4.4)將當前行數(shù)據(jù)塊按順序讀取到片上存儲器中,由所述FFT執(zhí)行裝置執(zhí)行行方向的FFT計算,得到當前行數(shù)據(jù)塊的計算結(jié)果,按列讀取所述當前行數(shù)據(jù)塊的計算結(jié)果并按行寫回片外存儲器;按行順序讀取下一個行數(shù)據(jù)塊,返回執(zhí)行步驟(4.4);直至完成所有行數(shù)據(jù)塊的運算,得到最終結(jié)果矩陣,退出計算。
6.根據(jù)權利要求5所述的基于DSP芯片的可變長度的FFT計算方法,其特征在于,所述步驟(4.2)中得到當前列數(shù)據(jù)塊的計算結(jié)果的具體步驟為: (4.2.1)以間隔尋址的方式從片上存儲器中讀取當前列數(shù)據(jù)塊的一列數(shù)據(jù)至所述FFT執(zhí)行裝置中; (4.2.2)由所述FFT執(zhí)行裝置進行N1點FFT運算,得到當前列數(shù)據(jù)的蝶形運算結(jié)果;對蝶形運算結(jié)果進行一級補償旋轉(zhuǎn)因子計算,得到當前列的運算結(jié)果;以間隔尋址的方式讀取下一列數(shù)據(jù)至所述FFT執(zhí)行裝置中,返回執(zhí)行步驟(4.2.2),總計執(zhí)行完h次后得到當前
列數(shù)據(jù)塊的列方向計算結(jié)果矩陣,其中 (4.2.3)將所述當前列數(shù)據(jù)塊的列方向計算結(jié)果矩陣以間隔尋址的方式寫入片上存儲器的對應位置中,得到當前列數(shù)據(jù)塊的計算結(jié)果。
7.根據(jù)權利要求5所述的基于DSP芯片的可變長度的FFT計算方法,其特征在于,所述步驟(4.4)中得到當前行數(shù)據(jù)塊的計算結(jié)果的具體步驟為: (4.4.1)以順序?qū)ぶ返姆绞綇漠斍靶袛?shù)據(jù)塊中取出一行數(shù)據(jù)至所述FFT執(zhí)行裝置中;(4.4.2)由所述FFT執(zhí)行裝置進行N3點FFT計算,其中#3=$,得到當前行數(shù)據(jù)的運算結(jié)果;以順序?qū)ぶ返姆绞阶x取下一行數(shù)據(jù)至所述FFT執(zhí)行裝置中,返回執(zhí)行步驟
(4.4.2),總計執(zhí)行t2次后得到當前行數(shù)據(jù)塊的行方向計算結(jié)果矩陣,其中?2;
(4.4.3)將所述當前行數(shù)據(jù)塊的行方向計算結(jié)果矩陣的每行數(shù)據(jù)順序?qū)懭肫洗鎯ζ鞯膶恢弥?,得到當前行?shù)據(jù)塊的計算結(jié)果。
8.根據(jù)權利要求1~7中任意一項所述的基于DSP芯片的可變長度的FFT計算方法,其特征在于:所述片上存 儲器為DDR存儲器,所述片外存儲器為SRAM存儲器。
【文檔編號】G06F17/14GK103955446SQ201410174461
【公開日】2014年7月30日 申請日期:2014年4月28日 優(yōu)先權日:2014年4月28日
【發(fā)明者】雷元武, 彭元喜, 陳書明, 郭陽, 劉宗林, 萬江華, 孫書為, 陳小文, 余再祥, 孫永節(jié), 陳躍躍, 屈曉陽 申請人:中國人民解放軍國防科學技術大學