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