天水師范學院電子信息與電氣工程學院 王睿庭
設計了一種以STM32單片機為核心的信號分析研究裝置,能夠分析測量信號的頻率及幅度,可測量信號各諧波分量的幅值,進而測量計算信號的失真度,還可實現常見波形信號如正弦波、方波、三角波和鋸齒波的頻譜顯示,具有成本較低,顯示直觀,測量精度較高等優點,達到設計要求。
信號分析在各個領域有著廣泛的應用,比如頻譜分析、失真度測量,專用儀器往往價格昂貴而且功能單一,傳統的模擬頻譜分析儀由于體積龐大、成本高、反應速度慢已不適應時代需求,而快速傅里葉變換(FFT)可以將時域信號變換到頻域來分析、處理,運算速度大大提高。本文設計了一種信號分析研究裝置,不僅能測量信號的頻率和幅值,還能進行頻譜分析,測量信號的失真度。該裝置實用性較強,具有一定的應用價值。
離散傅里葉變換(DFT)是數字信號分析與處理中的一種重要且非常有用的變換,它將信號在時域和頻域都離散化了,非常適于對離散信號的分析與處理。但是直接計算DFT的運算量與變換區間長度N的平方成正比,當N較大時,運算量會急速增大,從而影響運算速度。而DFT的快速算法即快速傅里葉變換(FFT)的出現,大大提高了離散傅里葉變換的運算速度,如基2FFT算法的運算量減少為(N/2)*log2(N)。更重要的是,通過快速傅里葉變換可以將信號從時域變換到頻域,進而進行頻譜分析,這就是很多測量儀器采用FFT的原因。利用FFT可得到一個信號的頻率、幅值及相位信息,亦可得到各次諧波分量的幅值、相位信息。
假設采樣頻率為Fs,信號頻率為F,采樣點數為N。則FFT運算之后結果是N點的復數,每個點對應原來信號的一個頻率點。若某點n用復數a+bi表示,那么這個復數的模為,相位為Pn=atan2(b,a),頻率就是:

其中,N表示FFT要做的點數,n表示排序的點,Fs為采樣頻率。
對于n=1點的信號,對應信號的直流分量,幅度為A1/N。
由信號失真度的定義可知,全部諧波能量之和與基波能量之比的平方根值即為信號的失真度,即:

式中,P為信號總能量,P1為信號的基波能量。
當負載為純電阻負載時,信號的失真度也可用下式來表示:

式中:u1為基波電壓的有效值,u2,u3,…,un為各次諧波分量的有效值。本設計中為了方便設計,諧波只取到5次。
系統總體設計框圖如圖1所示。

圖1 系統總體設計框圖
待測信號由信號發生器提供或經過放大電路放大后輸入,信號調理電路主要包括信號抬升電路及濾波電路等,作用是將待測信號加入直流偏移以適合作為STM32的ADC輸入電壓范圍(在0-3.3V之間),同時濾除干擾雜波信號,保證測量的準確性,之后信號經過AD轉換后在STM32內部實現FFT運算變換,進行頻譜分析、數據處理后顯示在4.3寸液晶屏上,可顯示信號頻率、幅度、各諧波分量的幅值及失真度等。
STM32單片機采用意法半導體(ST)公司的增強型STM32F103系列,嵌入Cortex-M3內核,主頻可達72MHz,具有512KB的片上Flash存儲器和64KB的SRAM存儲器,內部包含2個12位的逐次逼近型A/D轉換器,多達18個通道,轉換時間接近1us。
主程序流程圖如圖2所示。主程序總體設計思路是:系統上電后單片機內部進行復位,對TIM1、ADC、DMA、液晶屏等外設進行初始化,對待測信號進行AD轉換后通過DMA將數據搬運至內存,等待DMA產生中斷后再進行FFT運算,完成頻譜分析后將結果顯示在4.3寸液晶屏上。

圖2 主程序流程圖
使用TIM定時器觸發AD采集,此處通過TIM1的通道1產生PWM信號來觸發AD采集,PWM的頻率也就是ADC的采樣頻率。根據奈奎斯特采樣定理可知,被測信號頻率最大值要小于或等于采樣頻率的二分之一。由于STM32芯片內部ADC的采樣率最高為1Mhz/s,采樣位數為12位,所以待測輸入信號頻率最高可以到500Khz,能夠用在一些頻率不高的場合。
AD采集一定數量的點數之后產生DMA中斷,然后通過DMA將數據搬運至內存。因為采用中斷方式,且DMA傳輸過程不需要CPU干預,可以有效地降低CPU負荷,提高系統運行速度。本設計使用DMA1的通道1,傳輸數據量為1024。
通過單片機內部的DSP進行運算處理,由于Cortex M3內核的CPU沒有FPU及DSP指令,這里使用ST官方的匯編FFT庫,因為這個庫是匯編的,而且是基4算法,所以執行效率非常高效,運算速度較快。
進行1024點的FFT,只需要調用DSP庫函數中的cr4_fft_1024_stm32()函數即可。該函數調用的格式為:

其中,OutBufArray表示FFT運算的輸出數組,InBufArray表示要進行FFT運算的輸入數組,也就是ADC采集的數據,NPT表示采樣點數。
按照ST官方庫的說明,OutBufArray和InBufArray都必須是32位的數據類型,其中高16位存儲實部,低16位存儲虛部。
FFT的分辨率為Fs/N,要減小誤差可增大N,本設計用到的采樣點數N為1024,采樣頻率Fs越大分辨率就越低,誤差就越大,因此在測量低頻信號時應該降低采樣頻率,最低需大于信號頻率的兩倍。
從信號發生器輸入不同頻率、幅值的正弦波,測試結果如表1所示。

表1 不同頻率、幅值的正弦波測試結果
分別從信號發生器輸入2Vpp、1KHz的正弦波、方波和三角波,測試結果如表2所示。

表2 不同類型信號失真度測試結果
通過測試,該裝置測量信號頻率的精度很高,測量信號失真度的精度較高,對信號幅值的測量存在一定的誤差,但對微弱信號也可以測量,精度較高,能夠滿足設計精度要求。
結語:本文設計并實現了一種基于STM32的信號分析研究裝置,能夠分析測量信號的頻率及幅度,可測量各諧波分量的幅值,進而測量計算信號的失真度,還可實現常見波形信號如正弦波、方波、三角波和鋸齒波的頻譜顯示,測試結果表明,本裝置所測數據精度較高,各項指標均達到了設計要求。