摘 要: 利用32位STM32F103 ARM和快速傅里葉變換(FFT)算法,實現(xiàn)了音樂頻率幅度彩燈指示器的設(shè)計,該彩燈指示器可以指示不同的頻率等級和音量等級。整個系統(tǒng)采用模塊化設(shè)計,電路功能實現(xiàn)較好,只要接入信號就能測量,無需過多的人為操作。測試結(jié)果驗證了FFT算法的準(zhǔn)確性, 進(jìn)一步證實了所設(shè)計的系統(tǒng)對音頻信號不同的頻段等級和音量等級具有較好的指示效果,具有較好的實用性。
關(guān)鍵詞: STM32F103單片機(jī);FFT算法;音樂信號;幅度;頻率;LED燈
本文主要討論了音樂頻率幅度彩燈指示器的設(shè)計與制作,設(shè)定音量等級為32級,頻率等級為15級,每一頻率等級下的音量等級又分為31級;以嵌入式單片機(jī)STM32F103作為主控制核心,以音樂信號自動增益、電壓抬高、真有效值測量、LCD顯示、按鍵等作為輔助硬件電路;采用快速傅里葉變換FFT(Fast Fourier Transform)理論對音樂信號進(jìn)行詳細(xì)的頻域分析和處理。在此方案下完成音樂頻率幅度彩燈指示器的設(shè)計后,以信號發(fā)生器產(chǎn)生的標(biāo)準(zhǔn)正弦波、方波以及手機(jī)播放的任意MP3音樂(即音頻信號)作為輸入信號進(jìn)行現(xiàn)場測試,實驗結(jié)果驗證了設(shè)計題目的全部基礎(chǔ)和提高要求,具有較好的音樂信號頻率等級和幅度等級指示效果。
1 理論分析和計算
1.1 快速傅里葉變換原理
快速傅里葉變換(FFT)是1965年由J.W.庫利和T.W.圖基提出的[1-3]計算離散傅里葉變換(DFT)的一種快速算法,其實質(zhì)是根據(jù)離散傅氏變換的奇、偶、虛、實等特性進(jìn)行改進(jìn)的一種DFT算法。計算有限長信號序列x(n)的離散傅里葉變換時,其正變換式如下所示:
2 系統(tǒng)硬件設(shè)計
2.1 總體設(shè)計
所設(shè)計系統(tǒng)的總體原理圖如圖1所示。其中,ARM控制器采用ST公司生產(chǎn)的STM32F103芯片,內(nèi)有2個12 bit的A/D轉(zhuǎn)換器、7個定時器、9個通信接口,最高工作頻率72 MHz,足以滿足設(shè)計需求;音頻信號的峰-峰值范圍為0~Vmax,Vmax的大小根據(jù)需要設(shè)定,頻率范圍為50 Hz~10 kHz。為了避免輸入信號過小和保證輸入信號的幅值為正,需要對其進(jìn)行自動增益和抬高電壓預(yù)處理,預(yù)處理后的音頻信號的峰-峰值范圍約為0~3 V,然后經(jīng)過A/D采樣,快速傅里葉(FFT)變換,得到不同的等級的頻率和音量,經(jīng)過串口輸出;點陣電路大小為32×64,采用AT89S51單片機(jī)對其控制[4-6]。在LED陣列中,其中前15列表示15個頻率等級,第16列表示總音量等級;另采用一行16個LED燈,用其亮度指示每個頻段下音量的強(qiáng)弱。整體電路采用模塊化設(shè)計,簡單易懂,易于調(diào)試和實現(xiàn)系統(tǒng)要求。
2.2 主要單元電路
采用STM32F103 ARM芯片,配置外部5 V的直流電源和晶振電路就可以構(gòu)成單片機(jī)最小控制系統(tǒng)電路,限于篇幅,其最小系統(tǒng)電路圖忽略,文中主要介紹關(guān)鍵的硬件單元電路,即音頻信號預(yù)處理電路和電壓真有效測量電路,限于篇幅,僅介紹電路組成及功能,硬件單元電路圖忽略。
2.2.1 音頻信號預(yù)處理電路
音頻信號預(yù)處理電路主要包含兩個部分:電壓自動增益電路、電壓抬高電路。由于輸入音頻信號的電壓范圍(峰-峰值)為0~5 V,當(dāng)音頻信號電壓的峰-峰值比較小時,信號的幅值較小,受外界信號干擾大,容易引起測量不準(zhǔn),所以要采用放大電路。設(shè)計中選用OP2365組成三級增益可調(diào)的放大電路,電壓增益可調(diào)范圍分為四檔:10 mV~200 mV,70 mV~750 mV,200 mV~2 V和300 mV~5 V。當(dāng)輸入音頻信號電壓值較小時,就選擇增益較大的一檔進(jìn)行調(diào)節(jié);當(dāng)輸入音頻信號電壓值較大時,就不需要再對信號放大。另外,音頻信號采樣時,要求輸入信號的電壓范圍不能有負(fù)值,并保證被轉(zhuǎn)換電壓的幅值范圍在STM32F103芯片自帶的A/D轉(zhuǎn)換器的處理范圍內(nèi),這就需要對輸入信號電壓負(fù)值進(jìn)行抬高處理,保證信號電壓為正值。經(jīng)過抬高處理后,正弦信號的負(fù)峰值點剛好和橫軸相交,抬高電壓值vtg=3.3 V。
2.2.2 真有效值電壓檢測電路
交流電壓的真有效值是通過電路對輸入交流電壓進(jìn)行“平方—求平均值—開平方”的運(yùn)算而得到的。設(shè)計中采用AD736和OP07組成真有效值電壓檢測電路。AD736是經(jīng)過激光修正的單片精密真有效值A(chǔ)C/DC轉(zhuǎn)換器,準(zhǔn)確度較高、頻率特性較好。OP07芯片是一種低噪聲、非斬波穩(wěn)零的雙極性運(yùn)算放大器集成電路,具有低失調(diào)、高開環(huán)增益的特性。實際測試中,該電路測量正弦波電壓的綜合誤差不超過±3%。假設(shè)輸入信號的峰值為vmax,則有效值,檢測出峰值后,按照比例進(jìn)行放大。
3 系統(tǒng)軟件設(shè)計
系統(tǒng)軟件采用模塊化設(shè)計,分為主程序和子程序兩大部分。主控制芯片采用STM32F103,由于處理器速度較快,所以采用C語言編程,方便簡單。子程序包括A/D采樣、周期性判斷、FFT變換、延時、LED驅(qū)動、LCD顯示等。系統(tǒng)程序流程圖如圖2所示,限于篇幅,文中僅介紹FFT變換子程序。系統(tǒng)通過模式選擇按鍵進(jìn)入不同的功能。對頻率的指示采用兩種頻率等級計算方法:線性方法和對數(shù)方法。線性方法是在最低頻率點和最大頻率點之間進(jìn)行15等分,得到各個頻率點及其對應(yīng)的幅度,然后根據(jù)這些頻點計算出中心頻率點及其對應(yīng)的幅度;對數(shù)方式是在最低頻率點和最大頻率點之間采用對數(shù)函數(shù)計算15個頻率等級點及其對應(yīng)的幅度。同時,系統(tǒng)也采用了按鍵模式來控制各個頻段對應(yīng)的音量強(qiáng)弱。系統(tǒng)輸入信號自動增益的檔位、按鍵模式、對各個頻點下的幅度及總的幅度會顯示在LCD液晶屏上。
4 測試方法與結(jié)果分析
測試中,輸入信號經(jīng)過音頻輸入預(yù)處理電路,系統(tǒng)處理的電壓在0~3.3 V范圍內(nèi)。同時,在硬件系統(tǒng)測試之前,要驗證自編的FFT算法對信號處理的準(zhǔn)確性。
首先任意選擇一個WAV音頻信號進(jìn)行自編FFT程序的測試。測試中借助了MATLAB軟件中自帶的FFT子程序,設(shè)定一個采用頻率,選取不同的采樣點128和1 024,應(yīng)用MATLAB進(jìn)行頻譜分析,觀察采樣點選擇不同信號對頻域分析的影響,得到的仿真結(jié)果如圖3所示。對其進(jìn)行信號頻譜分析的結(jié)果與自編FFT程序在STM32F103單片機(jī)上運(yùn)行的結(jié)果進(jìn)行數(shù)據(jù)對比分析,測試數(shù)據(jù)誤差小于0.1%,頻譜圖形狀幾乎與MATLAB仿真波形一致,證實了自編FFT算法的正確性。
結(jié)合仿真分析結(jié)果,對系統(tǒng)選定的采樣頻率為fs=23.81 kHz,采樣點數(shù)為1 024,又知輸入信號的最大頻率為10 kHz,則測定的采樣頻率fs>20 kHz,滿足香農(nóng)采樣定理,故fs選定符合理論分析結(jié)果。在此采樣頻率下,最小采樣頻點為23.25 Hz,最大采樣頻點為10.74 kHz,分別采用線性方法和對數(shù)方法實現(xiàn)頻率分析和處理。
然后采用方波和不同頻率的正弦波作為輸入信號,對FFT變換結(jié)果進(jìn)行量化,根據(jù)能量定理,檢驗各頻率點對應(yīng)的功率值;同時觀察最大幅值在數(shù)組的位置P,以及被測信號頻率f、采樣頻率fs、采樣點數(shù)N(測試中取N=1 024)之間的關(guān)系是否滿足公式f=(fs/N)×P。對系統(tǒng)運(yùn)行得到的頻譜分析數(shù)據(jù)與采用MATLAB軟件進(jìn)行FFT分析的結(jié)果進(jìn)行對比,觀測到兩種方法在相同頻點處信號的幅度和功率數(shù)據(jù)變化不大,由此驗證了所設(shè)計的STM32F103單片機(jī)系統(tǒng)進(jìn)行信號頻域分析的準(zhǔn)確性。
最后,任意選擇手機(jī)播放的男聲、女聲演唱的MP3歌曲作為輸入信號進(jìn)行測試,觀測播放時15個頻率等級、每一個頻率等級下31個等級的音量強(qiáng)弱的LED指示情況以及32個總音量等級的LED指示情況,觀察音樂幅度、頻率的LED指示效果,根據(jù)運(yùn)行情況進(jìn)行程序調(diào)試,同時觀測LCD顯示的最大4個功率(即幅度值)所在的頻率點以及總功率并記錄數(shù)據(jù)。
以正弦信號作為輸入信號的總功率測量和單個頻率分量測量得到的結(jié)果分別如表1和表2所示,測試結(jié)果表明測試數(shù)據(jù)和用電腦模擬的結(jié)果很接近。
應(yīng)用STM32F103 ARM最小控制系統(tǒng)和快速傅里葉變換(FFT)算法,并結(jié)合LED點陣技術(shù),本文設(shè)計并實現(xiàn)了一個音樂頻率幅度彩燈指示器。系統(tǒng)的硬件電路采用模塊化設(shè)計,各模塊之間串口少,調(diào)試方便;音頻輸入信號預(yù)處理電路具有自動增益和電壓抬高功能,頻率等級分析方法分為線性均分和對數(shù)處理兩種,可以通過按鍵進(jìn)行方法選擇,同時頻率等級的大小由LED燈的個數(shù)指示,且指示結(jié)果較準(zhǔn)確;每一頻段的大小及該頻段下音量的強(qiáng)弱和所有頻段下的總音量強(qiáng)弱都能由LED燈的亮度變化進(jìn)行指示。分別采用標(biāo)準(zhǔn)方波信號和正弦信號進(jìn)行測試,同時借助MATLAB的FFT分析結(jié)果,驗證了自編FFT算法在STM32F103單片機(jī)系統(tǒng)中運(yùn)行的準(zhǔn)確性,然后應(yīng)用任意音頻輸入信號進(jìn)行測試,測試結(jié)果實現(xiàn)了比賽題目的基礎(chǔ)要求和提高要求,證實了所設(shè)計的音樂頻率幅度指示器具有較好的頻率等級和音量等級指示效果,而且整個系統(tǒng)的設(shè)計方案與實現(xiàn)都具有重要的理論研究意義和實用意義。
參考文獻(xiàn)
[1] 周圍,姚麗娜.基于FFT變換的快速信道估計算法[J].重慶郵電大學(xué)學(xué)報,2010,22(5):551-554.
[2] 鄧小平,張賢,譚書偉,等.基于FFT算法的音頻信號分析儀[EB/OL].(2011-03-15).[2011-06-05].http://www.paper.edu.cn.
[3] 王平,江華麗,鄭孔華,等.基于單片機(jī)的音頻信號分析儀的設(shè)計[J].現(xiàn)代電子技術(shù),2009(19):122-124.
[4] 周杰英,陳曉帆,王濤,等.點陣LED多功能動態(tài)顯示實驗系統(tǒng)設(shè)計[J].實驗室研究與探索,2010,29(9):36-40.
[5] 張立科.單片機(jī)典型外圍器件及應(yīng)用實例[M].北京:人民郵電出版社,2006.
[6] 吳國偉.嵌入式操作系統(tǒng)原理及應(yīng)用開發(fā)[M].北京:北京航空航天大學(xué)出版社,2007.