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