LTE系統(tǒng)中FFT的實現(xiàn)
FFT算法具體實現(xiàn)流程如下:
(1)時間抽取法的FFT中,每個蝶形的輸入、輸出數(shù)據(jù)節(jié)點在一條水平線上,所以每個蝶形的輸出數(shù)據(jù)可以立即存入原輸入數(shù)據(jù)所占用的存儲單元。這種原位計算可節(jié)省大量的內(nèi)存,并且理論上減少不同寄存器之間存取數(shù)據(jù)的時間。
使用C語言編寫主函數(shù),匯編語言編寫FFT算法的實現(xiàn)函數(shù)。程序中假設輸入數(shù)據(jù)最大長度為1024,由于DSP C6455可以直接存取處理32bit,所以在內(nèi)存中定義了長度為8192bit作為存放輸出序列的內(nèi)存空間。為了提高運算精確度,輸入數(shù)的實部和虛部分別占用一個字,在程序中進行復數(shù)相乘操作是采用匯編指令MPYHI。內(nèi)存定義了長度為2048bit的Tempsequence作為存放倒序序列,并且建立了2張旋轉(zhuǎn)因子查找表,分別為Wr和Wi。
外循環(huán)中,在每次內(nèi)循環(huán)之前從輸入比特序列中取出32bit放入一個寄存器,作為一個內(nèi)循環(huán)的輸入,內(nèi)循環(huán)結(jié)束后,取下一個32bit輸入比特更新這個寄存器。
內(nèi)循環(huán)中,計算蝶形過程采用查表的方式。對于每一級,計算出需要的旋轉(zhuǎn)因子個數(shù)以及相同旋轉(zhuǎn)因子相距的間隔。計算蝶形過程時,首先提取出X(k),根據(jù)相同旋轉(zhuǎn)因子間隔找到X(k+B)完成蝶形計算??紤]到旋轉(zhuǎn)因子的對稱性,在內(nèi)存中存放旋轉(zhuǎn)因子時只存放一半,剩余的數(shù)據(jù)根據(jù)對稱性進行處理。圖2給出了FFT算法實現(xiàn)計算流程圖。
按時間抽取法的FFT輸入序列是倒序,輸出序列是自然順序;按頻率抽取法的FFT輸入序列是自然順序,輸出序列是倒序的。不管采用哪種方法進行FFT計算,都需要倒序處理。倒序是整個FFT計算的重要部分,進行匯編程序時,按自然順序?qū)⑤斎霐?shù)據(jù)存入到存儲單元內(nèi),通過變址運算,將自然順序的序列按時間抽取法要求進行倒位。
重新排序之前,存儲單元Y中依次存放輸入數(shù)據(jù),I表示當前輸入數(shù)據(jù)比特的順序數(shù)的十進制數(shù)值,I的取值從0到N-I;J表示當前倒序數(shù)的十進制數(shù)值。輸入序列的第一個和最后一個數(shù)的位置不需要倒序處理,完成倒序的外循環(huán)的次數(shù)為N-2。為了保證調(diào)換數(shù)據(jù)的正確性,需要檢測一下是否I
c語言相關(guān)文章:c語言教程
評論