關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > FFT在低功率微程序控制器中的應用

        FFT在低功率微程序控制器中的應用

        作者: 時間:2010-08-17 來源:網絡 收藏

        2 執行要點
        寫代碼實現DFT不是一件容易的事,因為用低的微處理器實現DFT算法的實際情況是相當復雜的。例如,這些微處理器通常:
        (1)有限的內存。選擇的微處理器只有2 KB的RAM。從上面敘述可知實現至少需要2N×16 B變量。微處理器不能執行樣本點數N大于512的。這是不現實的,因為別的固件同樣需要一些字節的RAM。因此在實際執行的過程中,通常將樣本點數局限在256點。使用16 B的變量表示每一個值的實部與虛部,這種情況下對于的數據需要1024B的RAM。
        (2)有限的速度。盡管低的微處理器具有高達每秒百萬條指令的速度,仍然需要一些優化方法來減少在執行FFT過程中所用到的指令。所幸的是在過程中。C編譯器包括很多優化的級別設置。小心使用芯片的硬件乘法同樣可以使得代碼優化到一個可以接受的水平。
        (3)沒有浮點數功能。所選擇的微處理器特別是那些低的微處理器沒有浮點數功能。因此所有的計算都需要定點算法。為了表示分數,固件將使用有符號的Q8.7標記。因此固件將假設:O~6 B表示每一數字的分數部分;7~14 B表示每一數字的整數部分;第15字節是這個數字的符號位。
        這種形式對于加法和減法是沒有影響的,但是對于乘法則必須注意,使所有數據排成Q8.7的形式。例如對于Q8.7的乘法如下:

        為了獲得比較精確的FFT結果,Q8.7排列形式的一致性同樣適用于具有比較大樣本點數的FFT。例如,模/數轉換器以實部和虛部互補的形式提供8位的符號數。如果輸入的是直流電壓(+127為有符號的8位樣本數),從X(0)中將會完全獲得其頻譜,以Q8.7標記等于32512。這個值很適合于用16位的符號數表示。

        3 固件
        下面介紹計算基為2的FFT所需的固件。當從模/數轉換器中讀取樣本數后,存儲在數組x_n_re中。這個數組表示x(n)的實部。在執行FFT前,虛部的值初始化為零,存儲在數組x_n_im中。當執行完FFT時,頻域的幅值將代替原來的樣本值,且存儲在x_n_re和x_n_im中。
        3.1 采集樣本
        FFT算法假設以固定采樣率來采集樣本的。盡管這是在本文考慮范圍之外,但是如果認真對待采集樣本的代碼同樣會產生問題。例如,不穩定的采樣率將會產生錯誤的FFT結果,所以應該盡量使該情況最小化。對模/數轉換器采樣的原碼每一次循環以及輸出結果命令都有可能對采樣率產生不穩定性。例如,系統從摸/數轉換器中讀取8位的有符號數,然后存儲在16位的數組變量中。
        下面列出了關于從模/數轉換器中讀取及存儲數據的2個偽碼算法。第1個記為算法l,將會引起采樣率的不穩定。因為負數樣本比正的樣本需要更多的時間來讀取及存儲。中斷同樣不能保證采樣代碼的健全。
        模/數轉換器采樣(ADC)的偽碼:
        算法1:不一致的采樣率。

        3.2 三角法來查尋表格
        FFT利用查尋表的方法(LUTs)來代替直接計算正弦與余弦的值。下面敘述中給出了對正弦與余弦的LUTs的聲明。固件中的聲明包括在中自動產生這些表格的原始代碼。LUTs中的正弦與余弦都具有N/2樣本,因為旋轉因子的下標從0~(N/2)-1變化。
        正弦與余弦函數的LUTs:

        包括這些LUTs的聲明為常量,強迫編譯器將這些數據存儲在碼區而不是數據區。由于微處理器中的RAM的有限性這樣做是很重要的。由于LUTs的值必須以Q8.7方式排列,因此與正弦和余弦對應的值應該乘以27。
        3.3 位倒置
        位倒置(N是已知的)可以在運行中計算,利用1個查尋表格標記或者直接用一個打開的環來寫。每1種方法有其各自的大小與執行速度的平衡。本文利用開環直接寫的方法來執行位倒置。實際的固件由原碼來自動產生這個開環。


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 亳州市| 西乡县| 琼海市| 通渭县| 长泰县| 桑植县| 临城县| 红河县| 新乡县| 静乐县| 龙山县| 天峻县| 普陀区| 娄底市| 乐东| 泗阳县| 罗山县| 墨脱县| 昂仁县| 贵阳市| 阿坝县| 汝州市| 罗山县| 黄骅市| 赞皇县| 右玉县| 合作市| 武胜县| 邓州市| 禹城市| 泸西县| 辽源市| 嘉黎县| 化州市| 历史| 益阳市| 麦盖提县| 德惠市| 乐安县| 柞水县| 磴口县|