<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 在MSP430F1611上實(shí)現周期圖譜分析及校正

在MSP430F1611上實(shí)現周期圖譜分析及校正

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


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


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


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


因此,當K2為2,N為128時(shí),A=128×1.414=180.992=181,即當信號的幅值為18l/4 096×2.538=112 mV,就分辨不出主信號頻率??紤]K2為2的極限情況,當A為724,N為512時(shí),即給定信號幅值為724/4 096×2.538=449 mV時(shí),就分辨不出主信號頻率。
為了防止計算結果經(jīng)過(guò)多次移位后,數據太小無(wú)法分辨主信號,系統針對定點(diǎn)FFT運算采取如下處理:由于FFT定點(diǎn)運算中,一般情況下,為了處理方便,每級蝶形運算中乘法結果都限制在-1~1范圍內,即乘法運算的結果始終為小數(只有經(jīng)過(guò)加法運算,數據才有可能超出-1~1范圍),因此,通過(guò)判斷蝶形輸出的結果,決定是否移位。當發(fā)現超出-1~1范圍,就將本級的所有蝶形運算的輸出結果右移2位,沒(méi)有超出就不進(jìn)行移位。


3 內存分配
由式(3)可知,功率譜估算時(shí)需要另外開(kāi)辟一段內存空間存儲功率譜結果。例如,當進(jìn)行2048點(diǎn)基于FFT的功率譜分析時(shí),需用1024個(gè)浮點(diǎn)數存放功率譜計算結果,這將占有很大一段內存。但實(shí)際運算中,每個(gè)頻率點(diǎn)功率,只與其FFT運算結果中的對應頻率點(diǎn)的實(shí)部、虛部有關(guān),而與其他頻率點(diǎn)無(wú)關(guān)。因此功率譜運算中,可采取以下步驟將存放實(shí)部的空間存放功率譜:
①實(shí)部、虛部數據平方計算。由于內部集成了硬件乘法器,因此可將乘法器的第一操作數寄存器(OP1)、第二操作數寄存器(OP2)寫(xiě)入相同的數據實(shí)現平方運算。
②平方結果移位。平方結果需要右移13位,使用Q13表示,同時(shí)使用16位的臨時(shí)變量將平方結果保存。
③功率譜計算結果保存。實(shí)部平方結果、虛部平方結果相加后再存人原來(lái)的實(shí)部單元。
經(jīng)過(guò)上述步驟后,就可將原來(lái)存放實(shí)部、虛部數據的內存單元再次利用。
定點(diǎn)FFT運算過(guò)程中,還可將用來(lái)存放采集數據的內存空間,再次用作存放FFT運算過(guò)程中的實(shí)部數據,另外再開(kāi)辟同等大小的內存空間,存放虛部數據。例如,對于RAM空間為10 KB的MSP430F16ll來(lái)說(shuō),使用16位定點(diǎn)數運算FFT,最多能夠運算2 048點(diǎn)。因為實(shí)部、虛部結果都需4 096 KB,故共需8.192 KB,正好小于10KB;而運算4 096點(diǎn)FFT時(shí),共需16.384 KB,超出10 KB。


4 程序實(shí)現
算法實(shí)現時(shí)使用如下方法簡(jiǎn)化了程序運算過(guò)程:
①C程序調用匯編FFT程序,同時(shí)為了處理方便將功率譜運算過(guò)程也用C語(yǔ)言實(shí)現。為了使匯編程序中使用的內存空間與C程序中的內存空間地址不發(fā)生沖突,匯編程序中所需的變量都在C文件中定義。
②由于實(shí)部、虛部都使用C語(yǔ)音數組來(lái)存儲,當計算點(diǎn)數很多時(shí),數組將很大。例如,當運算2 048點(diǎn)FFT時(shí),就需定義兩個(gè)長(cháng)度為2 048的整形數組,這兩段數組不能用堆棧局部空間存儲,只能用全局數組,由于C語(yǔ)言規定全局變量默認初始化為0,MSP430的IAR編譯環(huán)境,進(jìn)入main函數之前的cstart函數中就用cstar_inh_zero函數對全局變量進(jìn)行初始化,由于定義的數組太長(cháng),初始化需要很長(cháng)時(shí)間,導致程序還沒(méi)有進(jìn)入main函數,看門(mén)狗就已經(jīng)復位。因此定義全局數組時(shí),加上_no_init關(guān)鍵字。例如,定義一個(gè)數據長(cháng)度為2 048的不需要初始化的整型數組,使用語(yǔ)句no_init int fft[2048]。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>