《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > MSP430F1611周期圖譜校正FFT
MSP430F1611周期圖譜校正FFT
摘要: 基于FFT的周期圖譜分析方法可以有效地從含有噪聲的信號中提取有用信息;但是,由于低功耗單片機的速度和內存有限,所以無法實時地完成FFT運算。為此,我們采用匯編語言編制FFT程序。采用定點運算來減少運算量和存儲量;采用先判斷再移位的方式,既防止了數據溢出,又保證了足夠的計算精度,從而在MSP430F1611上實現了2048點FFT。其精度和實時性滿足儀表的要求,并成功應用于低功耗、兩線制數字渦街流量計。
Abstract:
Key words :

  引 言

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

  1 定點運算

  1.1 數據表示

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

數據格式

  1.2 數據定標

  定點單片機參與數值運算的數都是16位的整型數,但是運算過程中的數不一定都是整數。那么,定點計算過程中如何處理小數呢?這其中的關鍵就是由程序員來確定一個數的小數點處于16位中的哪一位。這就是數的定標。

  通過設定小數點在16位數中的不同位置,就可以表示不同大小和不同精度的小數了。數的定標有Q表示法和S表示法兩種。表1列出了一個16位數的16種Q表示、S表示及它們所能表示的十進制數值范圍。

16位數的16種Q表示

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

  設浮點乘法運算的表達式為:float x,y,z;z=xy。假設經過統計(這里“統計”的意思是所有計算中數據范圍都在定標范圍內)后x的定標值為Qx,y的定標值為Qy,乘積z的定標值為Qz,則z=xy;zq×2-Qz=xq×yq×2-(Qx+Qy);zq=(xqyq)2Qz-(Qx+Qy)。所以,定點表示的乘法為:

程序

  1.3 FFT計算過程中的數據定標

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

 

數值大小的15位數據的數據格式

  1.4 旋轉因子數據定標

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

  2 防止溢出,保證精度

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

公式

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

FFT中的蝶形運算

  下面介紹保證數據計算精度的方法。

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

  設FFT運算結果的主信號頻率點的對應實部為r,虛部為i,其幅值為A(ADC的量化值),參與運算的數據點數為N,由FFT功率譜計算的性質可得:

公式

  設經過定點FFT運算,也就是運算過程中有移位,則該主信號頻率點的模為K,即:

公式

  聯立式(3)和式(4),得

公式

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

公式

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

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

  3 內存分配

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

  ①實部、虛部數據平方計算。由于MSP430F1611內部集成了硬件乘法器,因此可將乘法器的第一操作數寄存器(OP1)、第二操作數寄存器(OP2)寫入相同的數據實現平方運算。

  ②平方結果移位。平方結果需要右移13位,使用Q13表示,同時使用16位的臨時變量將平方結果保存。

  ③功率譜計算結果保存。實部平方結果、虛部平方結果相加后再存人原來的實部單元。

  經過上述步驟后,就可將原來存放實部、虛部數據的內存單元再次利用。

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

 

  4 程序實現

  算法實現時使用如下方法簡化了程序運算過程:

  ①C程序調用匯編FFT程序,同時為了處理方便將功率譜運算過程也用C語言實現。為了使匯編程序中使用的內存空間與C程序中的內存空間地址不發生沖突,匯編程序中所需的變量都在C文件中定義。

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

  ③為節約RAM內存空間,將旋轉因子對應的正余弦表制作成表格存放在ROM空間中,而蝶形運算時可通過查表得到旋轉因子后再進行FFT運算。

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

  5 算法測試

  為了驗證算法的實時性和正確性,通過信號發生器產生標準信號送入所研制的基于MSP430f1611為核心的處理系統,對算法進行了全面的測試。

  (1)測試算法運行時間

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

時間測試結果

  每次高低電平翻轉的時間間隔約為500 ms,即對2 048點數據進行功率譜估計總共需要500 ms。

  (2)測試算法計算精度

  由于FFT運算的最大誤差發生在非整周期采樣時,所以,選擇這些最大誤差點來進行測試。由于泄漏誤差,信號基頻表示為

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

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

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲区一区二区三区| 欧美一级理论片| 国产一区二区观看| 国产精品视频网站| 国产精品蜜臀在线观看| 国产精品二区三区四区| 国产精品国产亚洲精品看不卡15| 欧美日本国产精品| 欧美精品一区二区三区高清aⅴ| 欧美大秀在线观看 | 久久久国产精品亚洲一区| 欧美专区亚洲专区| 久久久www免费人成黑人精品| 久久久久五月天| 欧美一区二区高清在线观看| 欧美在线观看视频一区二区三区 | 小黄鸭精品密入口导航| 欧美专区在线观看| 91久久精品久久国产性色也91| 亚洲欧洲精品一区二区三区| 亚洲乱码精品一二三四区日韩在线| 亚洲人成人99网站| 一区二区三区欧美在线| 亚洲综合三区| 久久激情一区| 麻豆国产精品777777在线| 欧美—级高清免费播放| 欧美日韩亚洲一区| 国产精品区一区二区三区| 国产欧美一区二区视频| 永久555www成人免费| 亚洲精品乱码久久久久久久久| 日韩香蕉视频| 亚洲欧美激情精品一区二区| 久久精品天堂| 夜夜爽av福利精品导航| 小黄鸭精品密入口导航| 久久久蜜桃一区二区人| 欧美成人精品高清在线播放| 欧美日韩在线精品| 国产精品一区在线播放| 在线播放中文一区| 一本色道久久88亚洲综合88| 西西裸体人体做爰大胆久久久| 亚洲国产日韩欧美在线动漫| 中文亚洲视频在线| 欧美在线亚洲| 欧美精品在线观看播放| 国产欧美亚洲视频| 亚洲激情不卡| 亚洲欧美另类中文字幕| 亚洲国产精品久久| 亚洲女人av| 美日韩免费视频| 国产精品v欧美精品v日韩精品 | 久久精品国内一区二区三区| 一二三区精品福利视频| 欧美一区二区三区四区在线| 男人的天堂亚洲在线| 国产精品久久久久久久午夜| 一区二区三区中文在线观看 | 香蕉久久夜色精品| 99亚洲伊人久久精品影院红桃| 午夜精品久久久久久久蜜桃app| 老司机免费视频一区二区三区| 欧美偷拍另类| 在线欧美日韩国产| 午夜精品福利在线| 一区二区黄色| 麻豆精品传媒视频| 国产精品青草久久| 亚洲精品久久久久久久久久久久| 香蕉久久夜色精品国产使用方法| 一本色道久久综合亚洲精品不卡| 久久免费国产| 国产精品入口尤物| 亚洲国内自拍| 欧美伊人久久久久久午夜久久久久| 一本到高清视频免费精品| 久久久久成人精品| 国产精品欧美激情| 亚洲麻豆国产自偷在线| 亚洲国产cao| 久久精品二区| 国产精品毛片高清在线完整版| 亚洲韩国日本中文字幕| 久久av老司机精品网站导航| 午夜精品久久久久99热蜜桃导演| 欧美激情片在线观看| 一色屋精品视频在线看| 香蕉av777xxx色综合一区| 亚洲综合色噜噜狠狠| 欧美日韩美女| 亚洲人人精品| 亚洲欧洲一区二区三区在线观看| 久久精品国产清自在天天线| 国产精品成人观看视频免费| 亚洲精品之草原avav久久| 亚洲激情一区| 美女诱惑一区| 精品福利免费观看| 久久av一区二区三区漫画| 欧美一区二区三区视频在线| 国产精品ⅴa在线观看h| 一区二区高清在线观看| 一区二区三区视频在线看| 欧美精品导航| 最新国产成人在线观看| 亚洲国产日韩在线| 蜜桃久久av一区| 亚洲电影下载| 亚洲三级毛片| 欧美激情精品| 亚洲人精品午夜| 99ri日韩精品视频| 欧美日本一区二区视频在线观看| 亚洲国产成人一区| 日韩视频免费观看高清在线视频 | 国产老女人精品毛片久久| 亚洲一区二区三区国产| 亚洲欧美综合一区| 国产精品视频专区| 午夜日韩视频| 久久精品国产亚洲高清剧情介绍| 国产模特精品视频久久久久| 校园春色国产精品| 久久久免费精品视频| 伊人精品成人久久综合软件| 亚洲第一毛片| 欧美国产乱视频| 亚洲精品视频一区二区三区| 一道本一区二区| 欧美午夜精品久久久久免费视| 中文在线不卡| 欧美在线观看视频在线| 国产一区二区三区在线免费观看| 欧美影视一区| 美日韩丰满少妇在线观看| 91久久黄色| 亚洲综合另类| 国产日韩免费| 亚洲国产成人久久综合一区| 欧美肥婆在线| 日韩一级大片在线| 欧美一区二区三区另类| 国产又爽又黄的激情精品视频| 久久精品免费播放| 欧美精品在线免费| 亚洲神马久久| 久久久久久9999| 亚洲国产日日夜夜| 亚洲午夜久久久久久久久电影院| 国产精品视频男人的天堂| 久久精品成人一区二区三区蜜臀| 免费久久精品视频| 一区二区久久久久| 久久国产精品久久w女人spa| 在线欧美影院| 亚洲一区美女视频在线观看免费| 国产毛片久久| 亚洲人成啪啪网站| 国产精品久久久久一区二区三区共| 久久av免费一区| 欧美日韩高清在线| 亚洲欧美久久久| 欧美成年人网站| 亚洲综合久久久久| 免费日韩av片| 亚洲愉拍自拍另类高清精品| 久久一区国产| 99精品99久久久久久宅男| 久久久久久久999精品视频| 亚洲精品123区| 欧美在线日韩| 日韩视频欧美视频| 久久人人爽人人爽爽久久| 99riav1国产精品视频| 久久五月婷婷丁香社区| 一区电影在线观看| 暖暖成人免费视频| 午夜精品久久久久久久99樱桃| 欧美激情一区二区三区成人| 午夜精品剧场| 欧美麻豆久久久久久中文| 翔田千里一区二区| 欧美体内谢she精2性欧美| 亚洲国产成人av| 国产伦精品一区| 在线视频你懂得一区| 伊人夜夜躁av伊人久久| 午夜视频久久久| 亚洲免费观看高清完整版在线观看| 久久成人免费电影| 在线视频精品一区| 欧美高清在线一区| 欧美一区二区三区四区在线| 国产精品v欧美精品v日韩精品| 亚洲精品一区二| 一区二区三区中文在线观看| 欧美在线播放视频|