FFT 在單片機(jī)C8051中的實(shí)現(xiàn)
3 FFT優(yōu)化
已經(jīng)出現(xiàn)了很多優(yōu)化FFT的方法。而這些優(yōu)化方法的目的都是為了使得計(jì)算速度增快且盡可能的減少存儲數(shù)據(jù)所需要的RAM。
我們都知道,計(jì)算FFT的一個重要方法是蝶式方法。但是蝶式計(jì)算的每一次迭代都需要一個復(fù)雜的乘法(總共是四次的長整數(shù)乘法)。長整數(shù)乘法需要很多處理內(nèi)存來完成。但是我們仔細(xì)觀察會發(fā)現(xiàn)其中一些乘法是不需要的,并且是可以省去的。特別是,當(dāng)乘數(shù)為零時,結(jié)果將為零和當(dāng)乘數(shù)為1時,相乘的結(jié)果將不變。對那些正弦和余弦函數(shù)是否為0或1進(jìn)行查詢的代碼可以利用這些優(yōu)點(diǎn)來減少計(jì)算量。這種優(yōu)化方法能節(jié)省的計(jì)算量為:其中N為FFT的點(diǎn)數(shù)。
4 程序總體設(shè)計(jì)
首長分成三個模塊集合而成。即數(shù)據(jù)采集模塊,A/D轉(zhuǎn)換模塊及FFT運(yùn)算模塊。數(shù)據(jù)采集模塊主要是通過定時器來控制A/D轉(zhuǎn)換器的采樣周期,將采集到的數(shù)據(jù)轉(zhuǎn)換成有符號數(shù),并且可以以復(fù)數(shù)形式存貯。FFT的運(yùn)算模塊是在8051單片機(jī)的數(shù)據(jù)存貯器上運(yùn)行256點(diǎn)的FFT,并經(jīng)一快速平方根或快速對數(shù)運(yùn)算,計(jì)算出對應(yīng)128個頻率點(diǎn)的幅值或分貝表示值。具體流程如圖3。
5 在電話視頻中的應(yīng)用
在一個會議中,當(dāng)說話人變換時。我們需要攝像頭能自動跟蹤并檢測出說話人的位置,這就需要用到FFT及其反變換來計(jì)算角度。
6 結(jié)論
本文主要介紹了一種在單片機(jī)中實(shí)現(xiàn)FFT算法的優(yōu)化方法,由于這可大大減少FFT的計(jì)算量及減少存儲數(shù)據(jù)所需要的RAM。因此其可應(yīng)用在電話視頻會議中。
評論