天水師范學(xué)院電子信息與電氣工程學(xué)院 王睿庭
設(shè)計了一種以STM32單片機為核心的信號分析研究裝置,能夠分析測量信號的頻率及幅度,可測量信號各諧波分量的幅值,進而測量計算信號的失真度,還可實現(xiàn)常見波形信號如正弦波、方波、三角波和鋸齒波的頻譜顯示,具有成本較低,顯示直觀,測量精度較高等優(yōu)點,達到設(shè)計要求。
信號分析在各個領(lǐng)域有著廣泛的應(yīng)用,比如頻譜分析、失真度測量,專用儀器往往價格昂貴而且功能單一,傳統(tǒng)的模擬頻譜分析儀由于體積龐大、成本高、反應(yīng)速度慢已不適應(yīng)時代需求,而快速傅里葉變換(FFT)可以將時域信號變換到頻域來分析、處理,運算速度大大提高。本文設(shè)計了一種信號分析研究裝置,不僅能測量信號的頻率和幅值,還能進行頻譜分析,測量信號的失真度。該裝置實用性較強,具有一定的應(yīng)用價值。
離散傅里葉變換(DFT)是數(shù)字信號分析與處理中的一種重要且非常有用的變換,它將信號在時域和頻域都離散化了,非常適于對離散信號的分析與處理。但是直接計算DFT的運算量與變換區(qū)間長度N的平方成正比,當N較大時,運算量會急速增大,從而影響運算速度。而DFT的快速算法即快速傅里葉變換(FFT)的出現(xiàn),大大提高了離散傅里葉變換的運算速度,如基2FFT算法的運算量減少為(N/2)*log2(N)。更重要的是,通過快速傅里葉變換可以將信號從時域變換到頻域,進而進行頻譜分析,這就是很多測量儀器采用FFT的原因。利用FFT可得到一個信號的頻率、幅值及相位信息,亦可得到各次諧波分量的幅值、相位信息。
假設(shè)采樣頻率為Fs,信號頻率為F,采樣點數(shù)為N。則FFT運算之后結(jié)果是N點的復(fù)數(shù),每個點對應(yīng)原來信號的一個頻率點。若某點n用復(fù)數(shù)a+bi表示,那么這個復(fù)數(shù)的模為,相位為Pn=atan2(b,a),頻率就是:
其中,N表示FFT要做的點數(shù),n表示排序的點,F(xiàn)s為采樣頻率。
對于n=1點的信號,對應(yīng)信號的直流分量,幅度為A1/N。
由信號失真度的定義可知,全部諧波能量之和與基波能量之比的平方根值即為信號的失真度,即:
式中,P為信號總能量,P1為信號的基波能量。
當負載為純電阻負載時,信號的失真度也可用下式來表示:
式中:u1為基波電壓的有效值,u2,u3,…,un為各次諧波分量的有效值。本設(shè)計中為了方便設(shè)計,諧波只取到5次。
系統(tǒng)總體設(shè)計框圖如圖1所示。
圖1 系統(tǒng)總體設(shè)計框圖
待測信號由信號發(fā)生器提供或經(jīng)過放大電路放大后輸入,信號調(diào)理電路主要包括信號抬升電路及濾波電路等,作用是將待測信號加入直流偏移以適合作為STM32的ADC輸入電壓范圍(在0-3.3V之間),同時濾除干擾雜波信號,保證測量的準確性,之后信號經(jīng)過AD轉(zhuǎn)換后在STM32內(nèi)部實現(xiàn)FFT運算變換,進行頻譜分析、數(shù)據(jù)處理后顯示在4.3寸液晶屏上,可顯示信號頻率、幅度、各諧波分量的幅值及失真度等。
STM32單片機采用意法半導(dǎo)體(ST)公司的增強型STM32F103系列,嵌入Cortex-M3內(nèi)核,主頻可達72MHz,具有512KB的片上Flash存儲器和64KB的SRAM存儲器,內(nèi)部包含2個12位的逐次逼近型A/D轉(zhuǎn)換器,多達18個通道,轉(zhuǎn)換時間接近1us。
主程序流程圖如圖2所示。主程序總體設(shè)計思路是:系統(tǒng)上電后單片機內(nèi)部進行復(fù)位,對TIM1、ADC、DMA、液晶屏等外設(shè)進行初始化,對待測信號進行AD轉(zhuǎn)換后通過DMA將數(shù)據(jù)搬運至內(nèi)存,等待DMA產(chǎn)生中斷后再進行FFT運算,完成頻譜分析后將結(jié)果顯示在4.3寸液晶屏上。
圖2 主程序流程圖
使用TIM定時器觸發(fā)AD采集,此處通過TIM1的通道1產(chǎn)生PWM信號來觸發(fā)AD采集,PWM的頻率也就是ADC的采樣頻率。根據(jù)奈奎斯特采樣定理可知,被測信號頻率最大值要小于或等于采樣頻率的二分之一。由于STM32芯片內(nèi)部ADC的采樣率最高為1Mhz/s,采樣位數(shù)為12位,所以待測輸入信號頻率最高可以到500Khz,能夠用在一些頻率不高的場合。
AD采集一定數(shù)量的點數(shù)之后產(chǎn)生DMA中斷,然后通過DMA將數(shù)據(jù)搬運至內(nèi)存。因為采用中斷方式,且DMA傳輸過程不需要CPU干預(yù),可以有效地降低CPU負荷,提高系統(tǒng)運行速度。本設(shè)計使用DMA1的通道1,傳輸數(shù)據(jù)量為1024。
通過單片機內(nèi)部的DSP進行運算處理,由于Cortex M3內(nèi)核的CPU沒有FPU及DSP指令,這里使用ST官方的匯編FFT庫,因為這個庫是匯編的,而且是基4算法,所以執(zhí)行效率非常高效,運算速度較快。
進行1024點的FFT,只需要調(diào)用DSP庫函數(shù)中的cr4_fft_1024_stm32()函數(shù)即可。該函數(shù)調(diào)用的格式為:
其中,OutBufArray表示FFT運算的輸出數(shù)組,InBufArray表示要進行FFT運算的輸入數(shù)組,也就是ADC采集的數(shù)據(jù),NPT表示采樣點數(shù)。
按照ST官方庫的說明,OutBufArray和InBufArray都必須是32位的數(shù)據(jù)類型,其中高16位存儲實部,低16位存儲虛部。
FFT的分辨率為Fs/N,要減小誤差可增大N,本設(shè)計用到的采樣點數(shù)N為1024,采樣頻率Fs越大分辨率就越低,誤差就越大,因此在測量低頻信號時應(yīng)該降低采樣頻率,最低需大于信號頻率的兩倍。
從信號發(fā)生器輸入不同頻率、幅值的正弦波,測試結(jié)果如表1所示。
表1 不同頻率、幅值的正弦波測試結(jié)果
分別從信號發(fā)生器輸入2Vpp、1KHz的正弦波、方波和三角波,測試結(jié)果如表2所示。
表2 不同類型信號失真度測試結(jié)果
通過測試,該裝置測量信號頻率的精度很高,測量信號失真度的精度較高,對信號幅值的測量存在一定的誤差,但對微弱信號也可以測量,精度較高,能夠滿足設(shè)計精度要求。
結(jié)語:本文設(shè)計并實現(xiàn)了一種基于STM32的信號分析研究裝置,能夠分析測量信號的頻率及幅度,可測量各諧波分量的幅值,進而測量計算信號的失真度,還可實現(xiàn)常見波形信號如正弦波、方波、三角波和鋸齒波的頻譜顯示,測試結(jié)果表明,本裝置所測數(shù)據(jù)精度較高,各項指標均達到了設(shè)計要求。