在MSP430F1611上實(shí)現周期圖譜分析及校正
基于FFT的頻譜分析方法可以從含有噪聲的信號中提取有用的信息,在儀器儀表的數據處理中具有重要的應用價(jià)值。為了保證頻譜分析的精度,往往進(jìn)行多點(diǎn)的FFT運算,例如,1024點(diǎn)、2048點(diǎn)等,這樣運算量大、所占內存也大,只有采用DSP(數字信號處理器)才能實(shí)現實(shí)時(shí)的處理。目前,在工業(yè)現場(chǎng)普遍使用的兩線(xiàn)制、低功耗自動(dòng)化儀表,由于儀表本身消耗電流必須控制在4 mA之內,所以無(wú)法采用DSP等運算能力強的芯片,只能采用低功耗單片機;而低功耗單片機的運算速度和內存容量都很有限,所以,至今未見(jiàn)用其進(jìn)行多點(diǎn)數FFT運算的報道。為了能夠用低功耗單片機實(shí)時(shí)做FFT運算,以提高自動(dòng)化儀表信息處理的能力,我們用匯編語(yǔ)言編制FFT程序,在程序中用定點(diǎn)數運算(以下簡(jiǎn)稱(chēng)定點(diǎn)FFT),采取措施防止數據溢出,保證計算精度,合理分配內存。測試結果表明,我們編制的程序在MSP430F、1611單片機上,完成一次2048點(diǎn)的基于FFT的頻譜分析和校正只需要500 ms,精度也達到要求,可以用于以低功耗單片機為核心的儀表中,實(shí)時(shí)完成信號處理任務(wù)。
1 定點(diǎn)運算
1.1 數據表示
在MSP430中使用C語(yǔ)言實(shí)現FFT運算,其乘法和加法運算都是默認使用浮點(diǎn)實(shí)現的。于MSP430屬于定點(diǎn)單片機,因此浮點(diǎn)運算必須由大量的定點(diǎn)指令模擬,這將耗費大量的時(shí)間。因此我們針對MSP430的特點(diǎn),使用匯編語(yǔ)言編制FFT程序,在程序中用定點(diǎn)數運算,并將數據統一使用16位定點(diǎn)數表示。16位定點(diǎn)數中最高位(左邊的第1位)作為符號位,剩下的15位用于存放數值。數據格式如圖1所示.
1.2 數據定標
定點(diǎn)單片機參與數值運算的數都是16位的整型數,但是運算過(guò)程中的數不一定都是整數。那么,定點(diǎn)計算過(guò)程中如何處理小數呢?這其中的關(guān)鍵就是由程序員來(lái)確定一個(gè)數的小數點(diǎn)處于16位中的哪一位。這就是數的定標。
通過(guò)設定小數點(diǎn)在16位數中的不同位置,就可以表示不同大小和不同精度的小數了。數的定標有Q表示法和S表示法兩種。表1列出了一個(gè)16位數的16種Q表示、S表示及它們所能表示的十進(jìn)制數值范圍。
從表1中可以看出,同樣一個(gè)16位數,若小數點(diǎn)設定的位置不同,它所表示的數也就不同。例如,十六進(jìn)制數2000H=8192,用Q0表示;十六進(jìn)制數2000H=O.25,用Q15表示;但對于定點(diǎn)運算來(lái)說(shuō),處理方法是完全相同的。下面簡(jiǎn)要介紹如何使用定點(diǎn)數乘法運算模擬浮點(diǎn)數乘法。
評論