FFT在低功率微程序控制器中的應用
利用開環(huán)來獲得位倒置(其中N=256):
3.4 基為2的FFT算法
在對樣本執(zhí)行位倒置后,即可以計算FFT了。利用蝶形方法(見圖1)計算基為2的FFT的固件包括3個主要的循環(huán)。在循環(huán)之外包括log2N的FFT計算階段。在每一階段循環(huán)內部執(zhí)行單獨的蝶形運算。FFT算法的核心是執(zhí)行每一蝶形運算的塊碼。不幸的是,這一塊碼的計算是不輕便的。MUL_1與MUL_2利用微處理器的硬件乘法來執(zhí)行乘法。
3.5 復數(shù)轉化為極坐標表示
為了計算輸入信號的幅值,必須將復數(shù)X(k)轉換為極坐標來表示。幅值將代替在固件中不再需要的FFT中的原來的值。
式(4)中決定了二維的LUT其幅值而不是其計算。第1個值是頻譜實部4個最重要的位,而第2個值是頻譜虛部4個最重要的位。為了獲得這些最重要的位,16位有符號數(shù)右移11次。頻譜的實部與虛部都可以被用作下標時,它們被其絕對值代替了(因此符號位將是零)。
從式(6)中,可以知道頻譜是以X(N/2)對稱的,只有前N/2+1個幅值被轉化為極坐標表示。同樣,對于輸入樣本為實數(shù)的頻譜虛部中的X(0)與X(N/2)通常為零。因此這兩個幅值通常分別是單獨計算的。固件中用來自動計算X(k)的包括原碼。
3.6 海明窗或漢寧窗
為了實現(xiàn)此任務的固件包括LUTs(Q8.7形式)將海明窗或漢寧窗應用到輸入樣本中。加窗對于防止泄漏是有用的。加窗可以在時域上對輸入樣本截短。海明窗的方程如方式(8)所示,而漢寧窗則如式(9)所示。
同樣,這些實際固件的注釋包括自動為這些窗函數(shù)產生LUTs的原碼。
4 測試結果
為了對FFT結果測試,利用微處理器中的通用異步收發(fā)報機端口。固件將幅值X(k)上傳到PC上。這個程序包括FFT圖表,即利用一個窗口應用程序從PC中的串行端口中讀取這些幅值,實時地將計算得到的幅值利用圖表畫出來。利用微處理器對4個不同輸入電壓信號進行200Kb/s采樣,并在圖2中輸出其FFT圖像。本文引用地址:http://butianyuan.cn/article/162918.htm
5 結語
當然你可以利用無限的時間來優(yōu)化及計算FFT。但是本文采取了基為2的FFT,這種方法可以很大限度地減少計算FFT所需要的加法與乘法。由于篇幅問題,有很多提高執(zhí)行FFT速度的優(yōu)化方法并沒有在本文中給出。例如,對于實數(shù)的輸入樣本信號,輸入樣本的虛部通常為零,而且只有開始的一半頻譜是重要的。利用這個信息,第一和最后一個FFT階段就可以更快速的執(zhí)行(但可能將需要編寫更多的代碼)。對于低功率的微處理器,在本文中所提到的關于FFT的算法是一個好的開始。
評論