LTE系統中FFT的實現
FFT算法具體實現流程如下:
(1)時間抽取法的FFT中,每個蝶形的輸入、輸出數據節點在一條水平線上,所以每個蝶形的輸出數據可以立即存入原輸入數據所占用的存儲單元。這種原位計算可節省大量的內存,并且理論上減少不同寄存器之間存取數據的時間。

使用C語言編寫主函數,匯編語言編寫FFT算法的實現函數。程序中假設輸入數據最大長度為1024,由于DSP C6455可以直接存取處理32bit,所以在內存中定義了長度為8192bit作為存放輸出序列的內存空間。為了提高運算精確度,輸入數的實部和虛部分別占用一個字,在程序中進行復數相乘操作是采用匯編指令MPYHI。內存定義了長度為2048bit的Tempsequence作為存放倒序序列,并且建立了2張旋轉因子查找表,分別為Wr和Wi。
外循環中,在每次內循環之前從輸入比特序列中取出32bit放入一個寄存器,作為一個內循環的輸入,內循環結束后,取下一個32bit輸入比特更新這個寄存器。
內循環中,計算蝶形過程采用查表的方式。對于每一級,計算出需要的旋轉因子個數以及相同旋轉因子相距的間隔。計算蝶形過程時,首先提取出X(k),根據相同旋轉因子間隔找到X(k+B)完成蝶形計算??紤]到旋轉因子的對稱性,在內存中存放旋轉因子時只存放一半,剩余的數據根據對稱性進行處理。圖2給出了FFT算法實現計算流程圖。

按時間抽取法的FFT輸入序列是倒序,輸出序列是自然順序;按頻率抽取法的FFT輸入序列是自然順序,輸出序列是倒序的。不管采用哪種方法進行FFT計算,都需要倒序處理。倒序是整個FFT計算的重要部分,進行匯編程序時,按自然順序將輸入數據存入到存儲單元內,通過變址運算,將自然順序的序列按時間抽取法要求進行倒位。
重新排序之前,存儲單元Y中依次存放輸入數據,I表示當前輸入數據比特的順序數的十進制數值,I的取值從0到N-I;J表示當前倒序數的十進制數值。輸入序列的第一個和最后一個數的位置不需要倒序處理,完成倒序的外循環的次數為N-2。為了保證調換數據的正確性,需要檢測一下是否I

c語言相關文章:c語言教程
評論