當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件

  引 言

  基于FFT的頻譜分析方法可以從含有噪聲的信號中提取有用的信息,在儀器儀表的數(shù)據(jù)處理中具有重要的應(yīng)用價(jià)值。為了保證頻譜分析的精度,往往進(jìn)行多點(diǎn)的FFT運(yùn)算,例如,1024點(diǎn)、2048點(diǎn)等,這樣運(yùn)算量大、所占內(nèi)存也大,只有采用DSP(數(shù)字信號處理器)才能實(shí)現(xiàn)實(shí)時的處理。目前,在工業(yè)現(xiàn)場普遍使用的兩線制、低功耗自動化儀表,由于儀表本身消耗電流必須控制在4 mA之內(nèi),所以無法采用DSP等運(yùn)算能力強(qiáng)的芯片,只能采用低功耗單片機(jī);而低功耗單片機(jī)的運(yùn)算速度和內(nèi)存容量都很有限,所以,至今未見用其進(jìn)行多點(diǎn)數(shù)FFT運(yùn)算的報(bào)道。為了能夠用低功耗單片機(jī)實(shí)時做FFT運(yùn)算,以提高自動化儀表信息處理的能力,我們用匯編語言編制FFT程序,在程序中用定點(diǎn)數(shù)運(yùn)算(以下簡稱定點(diǎn)FFT),采取措施防止數(shù)據(jù)溢出,保證計(jì)算精度,合理分配內(nèi)存。測試結(jié)果表明,我們編制的程序在MSP430F、1611單片機(jī)上,完成一次2048點(diǎn)的基于FFT的頻譜分析和校正只需要500 ms,精度也達(dá)到要求,可以用于以低功耗單片機(jī)為核心的儀表中,實(shí)時完成信號處理任務(wù)。

  1 定點(diǎn)運(yùn)算

  1.1 數(shù)據(jù)表示

  在MSP430中使用C語言實(shí)現(xiàn)FFT運(yùn)算,其乘法和加法運(yùn)算都是默認(rèn)使用浮點(diǎn)實(shí)現(xiàn)的。于MSP430屬于定點(diǎn)單片機(jī),因此浮點(diǎn)運(yùn)算必須由大量的定點(diǎn)指令模擬,這將耗費(fèi)大量的時間。因此我們針對MSP430的特點(diǎn),使用匯編語言編制FFT程序,在程序中用定點(diǎn)數(shù)運(yùn)算,并將數(shù)據(jù)統(tǒng)一使用16位定點(diǎn)數(shù)表示。16位定點(diǎn)數(shù)中最高位(左邊的第1位)作為符號位,剩下的15位用于存放數(shù)值。數(shù)據(jù)格式如圖1所示。

  1.2 數(shù)據(jù)定標(biāo)

  定點(diǎn)單片機(jī)參與數(shù)值運(yùn)算的數(shù)都是16位的整型數(shù),但是運(yùn)算過程中的數(shù)不一定都是整數(shù)。那么,定點(diǎn)計(jì)算過程中如何處理小數(shù)呢?這其中的關(guān)鍵就是由程序員來確定一個數(shù)的小數(shù)點(diǎn)處于16位中的哪一位。這就是數(shù)的定標(biāo)。

  通過設(shè)定小數(shù)點(diǎn)在16位數(shù)中的不同位置,就可以表示不同大小和不同精度的小數(shù)了。數(shù)的定標(biāo)有Q表示法和S表示法兩種。表1列出了一個16位數(shù)的16種Q表示、S表示及它們所能表示的十進(jìn)制數(shù)值范圍。

  從表1中可以看出,同樣一個16位數(shù),若小數(shù)點(diǎn)設(shè)定的位置不同,它所表示的數(shù)也就不同。例如,十六進(jìn)制數(shù)2000H=8192,用Q0表示;十六進(jìn)制數(shù)2000H=O.25,用Q15表示;但對于定點(diǎn)運(yùn)算來說,處理方法是完全相同的。下面簡要介紹如何使用定點(diǎn)數(shù)乘法運(yùn)算模擬浮點(diǎn)數(shù)乘法。

  設(shè)浮點(diǎn)乘法運(yùn)算的表達(dá)式為:float x,y,z;z=xy。假設(shè)經(jīng)過統(tǒng)計(jì)(這里“統(tǒng)計(jì)”的意思是所有計(jì)算中數(shù)據(jù)范圍都在定標(biāo)范圍內(nèi))后x的定標(biāo)值為Qx,y的定標(biāo)值為Qy,乘積z的定標(biāo)值為Qz,則z=xy;zq×2-Qz=xq×yq×2-(Qx+Qy);zq=(xqyq)2Qz-(Qx+Qy)。所以,定點(diǎn)表示的乘法為:

  1.3 FFT計(jì)算過程中的數(shù)據(jù)定標(biāo)

  為了在以MSP43F1611為處理器的儀表系統(tǒng)上進(jìn)行基于FFT的功率譜估計(jì),必須先由MSP430F1611的ADC進(jìn)行采樣,而ADC采樣得到的數(shù)據(jù)需要經(jīng)過定標(biāo)后才能進(jìn)行定點(diǎn)計(jì)算。定標(biāo)過程為:ADC的采樣電壓范圍為0~2.5 V,因此,采樣過程實(shí)際上就是將信號電壓除以2.5進(jìn)行歸一化,使得采樣得到的數(shù)據(jù)范圍為O~1 V,此時數(shù)據(jù)就可用Q15表示,即將ADC的12位采樣結(jié)果寄存器中的數(shù)據(jù)右移4位保存起來,維持12位精度,轉(zhuǎn)換為Q15定點(diǎn)數(shù)表示。由于FFT運(yùn)算過程中,蝶形輸出相對蝶形輸入數(shù)據(jù)被放大了3倍,因此蝶形輸出數(shù)據(jù)范圍為一3~+3 V。此時數(shù)據(jù)如果仍然使用Q15表示,就會發(fā)生溢出,故改用Q13表示數(shù)據(jù),即將12位ADC數(shù)據(jù)右移1位。實(shí)際上經(jīng)過處理后,ADC數(shù)據(jù)精度沒有變化,但使用Q13表示數(shù)據(jù)比用Q12表示數(shù)據(jù),其蝶形輸出的數(shù)據(jù)精度高。這是由于定點(diǎn)計(jì)算時需要對蝶形輸出右移以防止溢出,而使用Q13表示數(shù)據(jù)比使用Q12表示數(shù)據(jù)少右移了1位,因此多了1位有效數(shù)據(jù)。FFT運(yùn)算過程中使用Q13表示數(shù)據(jù),就使得加法乘法運(yùn)算都可以直接使用定點(diǎn)指令實(shí)現(xiàn),減少了很多判斷處理,提高了運(yùn)算速度。使用Q13表示數(shù)據(jù),即最高位(左邊的第1位)是符號位,剩下的15位表示數(shù)據(jù)的大小。表示數(shù)據(jù)大小的15位中,高2位(左邊的第2位和第3位)用來表示數(shù)據(jù)中的整數(shù)部分,在計(jì)算中作為保護(hù)位;最低的13位(右邊的13位)表示數(shù)據(jù)中的小數(shù)部分,如果經(jīng)過某次蝶形單元運(yùn)算后,最大值正好被放大3倍,此時數(shù)據(jù)就由13位擴(kuò)大到15位,保證數(shù)據(jù)不會增大到16位,沖走符號位,發(fā)生溢出。運(yùn)算完成后將FFT計(jì)算過程中的這一級所有結(jié)果都右移2位,就能夠使得這一級計(jì)算結(jié)果的最大值仍然可用13位表示,同時也可將這一級所有蝶形運(yùn)算輸出的數(shù)據(jù)同時縮小,保證下級計(jì)算。表示數(shù)值大小的15位數(shù)據(jù)的數(shù)據(jù)格式如圖2所示。

  1.4 旋轉(zhuǎn)因子數(shù)據(jù)定標(biāo)

  FFT運(yùn)算過程使用定點(diǎn)計(jì)算,且使用有符號乘法,必須始終保留1位作為符號位;而旋轉(zhuǎn)因子范圍為-1~1,因此可定標(biāo)為Q14,轉(zhuǎn)換為16位定點(diǎn)數(shù)。其轉(zhuǎn)換過程為:根據(jù)參與FFT運(yùn)算的數(shù)據(jù)點(diǎn)數(shù)計(jì)算出旋轉(zhuǎn)因子的正余弦表,然后將正余弦表乘以16384,即左移14位,最后四舍五人取整。如果使用Q15表示數(shù)據(jù),即需要左移15位,那么正余弦表中最大值1,經(jīng)過上述處理后成為-1,發(fā)生溢出。

  2 防止溢出,保證精度

  FFT中的蝶形運(yùn)算如圖3所示。設(shè)蝶形輸入為:X1(k),實(shí)部為X1(k)r,虛部為X1(k)i;X2(k),實(shí)部為X2(k)r,虛部為X2(k)i。設(shè)蝶形輸出為:X(k),實(shí)部為X(k),,虛部為X(k)i;X(k+N/2),實(shí)部為X(k+N/2)r,虛部為X(k+N/2)i。則有:

  由式(1)和式(2)可以看出,蝶形輸出的實(shí)部和虛部是由3個數(shù)相加得到的,因此數(shù)據(jù)可能會放大3倍。如果計(jì)算過程中的數(shù)據(jù)始終使用定點(diǎn)數(shù)表示,隨著級數(shù)的增加,就會發(fā)生溢出。例如,使用16位定點(diǎn)數(shù)表示,其最高位(從左數(shù)第1位)為符號位,其表示的數(shù)據(jù)范圍為-32 768~32 767。如果采樣得到的數(shù)據(jù)最大值為4 096,經(jīng)過兩級計(jì)算后蝶形最大輸出就可能為4096×3×3=36 864,超出了16位定點(diǎn)數(shù)的表示范圍。

  下面介紹保證數(shù)據(jù)計(jì)算精度的方法。

  為了提高計(jì)算速度,系統(tǒng)中使用定點(diǎn)數(shù)法運(yùn)算FFT,且使用Q13表示數(shù)據(jù)。蝶形運(yùn)算中,其蝶形輸出的數(shù)據(jù)的實(shí)部和虛部都使用3次加法運(yùn)算,即每級蝶形運(yùn)算都可能使數(shù)據(jù)擴(kuò)大3倍,因此,蝶形輸出的實(shí)部和虛部結(jié)果都需要右移2位(縮小4倍)以防止溢出。但隨著計(jì)算級數(shù)的增加,移位將會使數(shù)據(jù)變得越來越小。例如,128點(diǎn)FFT,總共需要7級運(yùn)算,數(shù)據(jù)最終將移位2×7=14位(縮小47=16 384倍),因此當(dāng)信號幅值不夠大時,經(jīng)過多級運(yùn)算可能會無法分辨出主信號頻率。

  設(shè)FFT運(yùn)算結(jié)果的主信號頻率點(diǎn)的對應(yīng)實(shí)部為r,虛部為i,其幅值為A(ADC的量化值),參與運(yùn)算的數(shù)據(jù)點(diǎn)數(shù)為N,由FFT功率譜計(jì)算的性質(zhì)可得:

  設(shè)經(jīng)過定點(diǎn)FFT運(yùn)算,也就是運(yùn)算過程中有移位,則該主信號頻率點(diǎn)的模為K,即:

  聯(lián)立式(3)和式(4),得

  由于功率譜估計(jì)是找出功率譜中的最大值,確定主信號的頻率,根據(jù)經(jīng)驗(yàn),使用定點(diǎn)數(shù)運(yùn)算FFT,當(dāng)實(shí)部和虛部的模的平方K2為2時,就無法由功率譜分辨出主信號頻率。由式(5)可得:

  因此,當(dāng)K2為2,N為128時,A=128×1.414=180.992=181,即當(dāng)信號的幅值為18l/4 096×2.538=112 mV,就分辨不出主信號頻率??紤]K2為2的極限情況,當(dāng)A為724,N為512時,即給定信號幅值為724/4 096×2.538=449 mV時,就分辨不出主信號頻率。

  為了防止計(jì)算結(jié)果經(jīng)過多次移位后,數(shù)據(jù)太小無法分辨主信號,系統(tǒng)針對定點(diǎn)FFT運(yùn)算采取如下處理:由于FFT定點(diǎn)運(yùn)算中,一般情況下,為了處理方便,每級蝶形運(yùn)算中乘法結(jié)果都限制在-1~1范圍內(nèi),即乘法運(yùn)算的結(jié)果始終為小數(shù)(只有經(jīng)過加法運(yùn)算,數(shù)據(jù)才有可能超出-1~1范圍),因此,通過判斷蝶形輸出的結(jié)果,決定是否移位。當(dāng)發(fā)現(xiàn)超出-1~1范圍,就將本級的所有蝶形運(yùn)算的輸出結(jié)果右移2位,沒有超出就不進(jìn)行移位。

  3 內(nèi)存分配

  由式(3)可知,功率譜估算時需要另外開辟一段內(nèi)存空間存儲功率譜結(jié)果。例如,當(dāng)進(jìn)行2048點(diǎn)基于FFT的功率譜分析時,需用1024個浮點(diǎn)數(shù)存放功率譜計(jì)算結(jié)果,這將占有很大一段內(nèi)存。但實(shí)際運(yùn)算中,每個頻率點(diǎn)功率,只與其FFT運(yùn)算結(jié)果中的對應(yīng)頻率點(diǎn)的實(shí)部、虛部有關(guān),而與其他頻率點(diǎn)無關(guān)。因此功率譜運(yùn)算中,可采取以下步驟將存放實(shí)部的空間存放功率譜:

 ?、賹?shí)部、虛部數(shù)據(jù)平方計(jì)算。由于MSP430F1611內(nèi)部集成了硬件乘法器,因此可將乘法器的第一操作數(shù)寄存器(OP1)、第二操作數(shù)寄存器(OP2)寫入相同的數(shù)據(jù)實(shí)現(xiàn)平方運(yùn)算。

 ?、谄椒浇Y(jié)果移位。平方結(jié)果需要右移13位,使用Q13表示,同時使用16位的臨時變量將平方結(jié)果保存。

 ?、酃β首V計(jì)算結(jié)果保存。實(shí)部平方結(jié)果、虛部平方結(jié)果相加后再存人原來的實(shí)部單元。

  經(jīng)過上述步驟后,就可將原來存放實(shí)部、虛部數(shù)據(jù)的內(nèi)存單元再次利用。

  定點(diǎn)FFT運(yùn)算過程中,還可將用來存放采集數(shù)據(jù)的內(nèi)存空間,再次用作存放FFT運(yùn)算過程中的實(shí)部數(shù)據(jù),另外再開辟同等大小的內(nèi)存空間,存放虛部數(shù)據(jù)。例如,對于RAM空間為10 KB的MSP430F16ll來說,使用16位定點(diǎn)數(shù)運(yùn)算FFT,最多能夠運(yùn)算2 048點(diǎn)。因?yàn)閷?shí)部、虛部結(jié)果都需4 096 KB,故共需8.192 KB,正好小于10KB;而運(yùn)算4 096點(diǎn)FFT時,共需16.384 KB,超出10 KB。

  4 程序?qū)崿F(xiàn)

  算法實(shí)現(xiàn)時使用如下方法簡化了程序運(yùn)算過程:

 ?、貱程序調(diào)用匯編FFT程序,同時為了處理方便將功率譜運(yùn)算過程也用C語言實(shí)現(xiàn)。為了使匯編程序中使用的內(nèi)存空間與C程序中的內(nèi)存空間地址不發(fā)生沖突,匯編程序中所需的變量都在C文件中定義。

 ?、谟捎趯?shí)部、虛部都使用C語音數(shù)組來存儲,當(dāng)計(jì)算點(diǎn)數(shù)很多時,數(shù)組將很大。例如,當(dāng)運(yùn)算2 048點(diǎn)FFT時,就需定義兩個長度為2 048的整形數(shù)組,這兩段數(shù)組不能用堆棧局部空間存儲,只能用全局?jǐn)?shù)組,由于C語言規(guī)定全局變量默認(rèn)初始化為0,MSP430的IAR編譯環(huán)境,進(jìn)入main函數(shù)之前的cstart函數(shù)中就用cstar_inh_zero函數(shù)對全局變量進(jìn)行初始化,由于定義的數(shù)組太長,初始化需要很長時間,導(dǎo)致程序還沒有進(jìn)入main函數(shù),看門狗就已經(jīng)復(fù)位。因此定義全局?jǐn)?shù)組時,加上_no_init關(guān)鍵字。例如,定義一個數(shù)據(jù)長度為2 048的不需要初始化的整型數(shù)組,使用語句no_init int fft[2048]。

 ?、蹫楣?jié)約RAM內(nèi)存空間,將旋轉(zhuǎn)因子對應(yīng)的正余弦表制作成表格存放在ROM空間中,而蝶形運(yùn)算時可通過查表得到旋轉(zhuǎn)因子后再進(jìn)行FFT運(yùn)算。

  ④由于FFT運(yùn)算過程中的旋轉(zhuǎn)因子是通過左移14位取整得到的,因此蝶形運(yùn)算過程中需要乘法運(yùn)算結(jié)果右移14位。MSP430F1611單片機(jī)乘法器的結(jié)果寄存器,由高16位乘法結(jié)果寄存器RESFII、低16位乘法結(jié)果寄存器RESLO組成,右移14位操作就是保留高位結(jié)果寄存器所有內(nèi)容和低位結(jié)果寄存器中的高兩位,因此RESHI、RESLO一起向左移2位,然后保留高位結(jié)果寄存器作為乘法結(jié)果就可實(shí)現(xiàn)右移14位過程。

  5 算法測試

  為了驗(yàn)證算法的實(shí)時性和正確性,通過信號發(fā)生器產(chǎn)生標(biāo)準(zhǔn)信號送入所研制的基于MSP430f1611為核心的處理系統(tǒng),對算法進(jìn)行了全面的測試。

  (1)測試算法運(yùn)行時間

  測試對2 048點(diǎn)數(shù)據(jù)進(jìn)行功率譜估計(jì)所需要的總時間。預(yù)先設(shè)置MSP430F1611單片機(jī)的P5.4引腳為普通I/O,且為輸出方式,接著,循環(huán)執(zhí)行FFT運(yùn)算和功率譜估計(jì)程序,且每次開始FFT計(jì)算和功率譜估算前,將P5.4輸出電平翻轉(zhuǎn),因此P5.4輸出的相鄰兩次翻轉(zhuǎn)電平的時間間隔就是FFT運(yùn)算和功率譜估計(jì)的總時間。通過數(shù)字存儲示波器觀測P5.4引腳輸出的信號波形,如圖4所示。

  每次高低電平翻轉(zhuǎn)的時間間隔約為500 ms,即對2 048點(diǎn)數(shù)據(jù)進(jìn)行功率譜估計(jì)總共需要500 ms。

  (2)測試算法計(jì)算精度

  由于FFT運(yùn)算的最大誤差發(fā)生在非整周期采樣時,所以,選擇這些最大誤差點(diǎn)來進(jìn)行測試。由于泄漏誤差,信號基頻表示為

f0=(k+d)fs/N (7)

  式(7)中,k為整數(shù),d為小數(shù)(定義d為泄漏誤差系數(shù))。由于泄漏誤差不超過頻率分辨率的二分之一,所以|d|≤O.5。當(dāng)d=O時,即為整周期采樣情況;當(dāng)d=O.5時,就是最大非整周期采樣的地方。因?yàn)樗兄频幕贔FT的頻譜分析方法將應(yīng)用于數(shù)字渦街流量計(jì),在此,針對氣體40口徑頻率范圍為69~1 380 Hz,設(shè)定采樣頻率為3 717.472 199 Hz,數(shù)據(jù)點(diǎn)數(shù)為2 048,選擇不同的k值得到不同的頻率信號,由信號發(fā)生器產(chǎn)生幅值為60 mV的這些信號,送入兩線制渦街流量計(jì)信號處理系統(tǒng)低通濾波器前端,然后經(jīng)過預(yù)放大電路和低通濾波電路后,送入MSP430F1611進(jìn)行頻率估計(jì)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉