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