新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > 在MSP430F1611上 實現周期圖譜分析及校正

        在MSP430F1611上 實現周期圖譜分析及校正

        作者: 時間:2009-06-30 來源:網絡 收藏

        由式(1)和式(2)可以看出,蝶形輸出的實部和虛部是由3個數相加得到的,因此數據可能會放大3倍。如果計算過程中的數據始終使用定點數表示,隨著級數的增加,就會發生溢出。例如,使用16位定點數表示,其最高位(從左數第1位)為符號位,其表示的數據范圍為-32 768~32 767。如果采樣得到的數據最大值為4 096,經過兩級計算后蝶形最大輸出就可能為4096×3×3=36 864,超出了16位定點數的表示范圍。
        下面介紹保證數據計算精度的方法。
        為了提高計算速度,系統中使用定點數法運算FFT,且使用Q13表示數據。蝶形運算中,其蝶形輸出的數據的實部和虛部都使用3次加法運算,即每級蝶形運算都可能使數據擴大3倍,因此,蝶形輸出的實部和虛部結果都需要右移2位(縮小4倍)以防止溢出。但隨著計算級數的增加,移位將會使數據變得越來越小。例如,128點FFT,總共需要7級運算,數據最終將移位2×7=14位(縮小47=16 384倍),因此當信號幅值不夠大時,經過多級運算可能會無法分辨出主信號頻率。
        設FFT運算結果的主信號頻率點的對應實部為r,虛部為i,其幅值為A(ADC的量化值),參與運算的數據點數為N,由FFT功率譜計算的性質可得:

        本文引用地址:http://www.104case.com/article/195825.htm


        設經過定點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運算結果中的對應頻率點的實部、虛部有關,而與其他頻率點無關。因此功率譜運算中,可采取以下步驟將存放實部的空間存放功率譜:
        ①實部、虛部數據平方計算。由于430內部集成了硬件乘法器,因此可將乘法器的第一操作數寄存器(OP1)、第二操作數寄存器(OP2)寫入相同的數據實現平方運算。
        ②平方結果移位。平方結果需要右移13位,使用Q13表示,同時使用16位的臨時變量將平方結果保存。
        ③功率譜計算結果保存。實部平方結果、虛部平方結果相加后再存人原來的實部單元。
        經過上述步驟后,就可將原來存放實部、虛部數據的內存單元再次利用。
        定點FFT運算過程中,還可將用來存放采集數據的內存空間,再次用作存放FFT運算過程中的實部數據,另外再開辟同等大小的內存空間,存放虛部數據。例如,對于RAM空間為10 KB的16ll來說,使用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,430的IAR編譯環境,進入main函數之前的cstart函數中就用cstar_inh_zero函數對全局變量進行初始化,由于定義的數組太長,初始化需要很長時間,導致程序還沒有進入main函數,看門狗就已經復位。因此定義全局數組時,加上_no_init關鍵字。例如,定義一個數據長度為2 048的不需要初始化的整型數組,使用語句no_init int fft[2048]。

        熱式質量流量計相關文章:熱式質量流量計原理
        流量計相關文章:流量計原理


        關鍵詞: F1611 1611 430F MSP

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宕昌县| 邢台县| 大渡口区| 新干县| 舟曲县| 册亨县| 文成县| 家居| 宜黄县| 镇原县| 南涧| 旌德县| 青神县| 米林县| 竹山县| 岳阳市| 寿光市| 成武县| 佛山市| 鲁甸县| 大竹县| 安丘市| 绥化市| 嫩江县| 都兰县| 泸西县| 金川县| 周宁县| 苏尼特右旗| 富平县| 肥西县| 敦化市| 张家港市| 宁蒗| 宁国市| 龙州县| 广南县| 怀安县| 建平县| 宁化县| 霞浦县|