基于TMS32OLF24O7的FFT算法的實(shí)現(xiàn)及應(yīng)用
傅立葉變換是一種將信號(hào)從時(shí)域轉(zhuǎn)變?yōu)轭l域表示的變換形式,它是數(shù)字信號(hào)處理中對(duì)信號(hào)進(jìn)行分析時(shí)經(jīng)常采用的一種方法。信號(hào)的一些特性在時(shí)域總是表現(xiàn)得不明顯,通過(guò)傅里葉算法,將其變換到頻域,其特性就一目了然。例如,來(lái)自供電系統(tǒng)的干擾在時(shí)域上總是不易識(shí)別,但是在頻域上就可以很清晰地看到50~60 Hz的離散諧波。
在計(jì)算機(jī)系統(tǒng)中,實(shí)際上是以離散傅立葉變換(DFT)的方式處理數(shù)據(jù)。由于DFT的運(yùn)算量比較大,并不適用于嵌入式控制系統(tǒng),所以實(shí)際應(yīng)用中常使用DFT 的快速算法一快速傅立葉變換(FFT)。雖然FFT 比DFT的計(jì)算量減少了很多,但用普通單片機(jī)來(lái)實(shí)現(xiàn)FFT多點(diǎn)、實(shí)時(shí)運(yùn)算還是比較困難的。DSP(數(shù)字信號(hào)處理器)具有運(yùn)算速度快和精度高的特點(diǎn),恰好滿(mǎn)足FFT的要求,能較好地解決這個(gè)問(wèn)題。
1 快速傅里葉變換的原理
非周期性連續(xù)時(shí)間信號(hào)x(t)的傅里葉變換可以表示為
式中計(jì)算出來(lái)的是信號(hào)x(t)的連續(xù)頻譜。但是,在實(shí)際的控制系統(tǒng)中能夠得到的是連續(xù)信號(hào)x(t)的離散采樣值x(nT)。因此需要利用離散信號(hào)x(nT)來(lái)計(jì)算信號(hào)x(t)的頻譜。
有限長(zhǎng)離散信號(hào)x(n),n=0,1,…,N-1的DFT定義為:
可以看出,DFT需要計(jì)算大約N2次乘法和N2次加法。當(dāng)N較大時(shí),這個(gè)計(jì)算量是很大的。利用WN的對(duì)稱(chēng)性和周期性,將N點(diǎn)DFT分解為兩個(gè)N/2點(diǎn)的 DFT,這樣兩個(gè)N/2點(diǎn)DFT總的計(jì)算量只是原來(lái)的一半,即(N/2)2+(N/2)2=N2/2,這樣可以繼續(xù)分解下去,將N/2再分解為N/4點(diǎn) DFT等。對(duì)于N=2m 點(diǎn)的DFT都可以分解為2點(diǎn)的DFT,這樣其計(jì)算量可以減少為(N/2)log2N次乘法和Nlog2N次加法。圖1為FFT與DFT-所需運(yùn)算量與計(jì)算點(diǎn)數(shù)的關(guān)系曲線。由圖可以明顯看出FFT算法的優(yōu)越性。
將x(n)分解為偶數(shù)與奇數(shù)的兩個(gè)序列之和,即
x1(n)和x2(n)的長(zhǎng)度都是N/2,x1(n)是偶數(shù)序列,x2(n)是奇數(shù)序列,則
其中X1(k)和X2(k)分別為x1(n)和x2(n)的N/2點(diǎn)DFT。由于X1(k)和X2(k)均以N/2為周期,且WN k+N/2=-WN k,所以X(k)又可表示為:
上式的運(yùn)算可以用圖2表示,根據(jù)其形狀稱(chēng)之為蝶形運(yùn)算。依此類(lèi)推,經(jīng)過(guò)m-1次分解,最后將N點(diǎn)DFT分解為N/2個(gè)兩點(diǎn)DFT。圖3為8點(diǎn)FFT的分解流程。
FFT算法的原理是通過(guò)許多小的更加容易進(jìn)行的變換去實(shí)現(xiàn)大規(guī)模的變換,降低了運(yùn)算要求,提高了與運(yùn)算速度。FFT不是DFT的近似運(yùn)算,它們完全是等效的。
評(píng)論