<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > FFT在低功率微程序控制器中的應用

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

作者: 時(shí)間:2010-08-17 來(lái)源:網(wǎng)絡(luò ) 收藏

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

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

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

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

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


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>