李 慧,胡永兵,姚夢(mèng)茹
(安徽大學(xué) 計(jì)算智能與信號(hào)處理教育部重點(diǎn)實(shí)驗(yàn)室,安徽 合肥 230601)
數(shù)字電視、多媒體通信、數(shù)字音頻廣播等對(duì)科技的發(fā)展產(chǎn)生了深遠(yuǎn)的影響,并且已經(jīng)廣泛地滲透到社會(huì)生活的各個(gè)方面。早期的音頻分析儀器設(shè)備不但體積大、反應(yīng)速度慢、結(jié)構(gòu)復(fù)雜,而且造價(jià)非常昂貴,在某種程度上難以普及使用[1-4]。隨著電子技術(shù)的發(fā)展,嵌入式技術(shù)和超大規(guī)模集成芯片技術(shù)越來越成熟,同時(shí)對(duì)音頻信號(hào)的分析也越來越精確。
針對(duì)傳統(tǒng)方法在音頻信號(hào)處理中的缺點(diǎn),文中提出了一種對(duì)音頻信號(hào)分析設(shè)計(jì)的方案。在硬件設(shè)計(jì)上,以STM32F103ZET6低功耗的32位單片機(jī)作為運(yùn)算核心,結(jié)合A/D轉(zhuǎn)換器、外部電路LCD顯示模塊和其他必需的外部電路。在軟件設(shè)計(jì)上,使用了UCOSIII嵌入式多任務(wù)系統(tǒng),實(shí)現(xiàn)多任務(wù)運(yùn)行。其基本工作原理是對(duì)音頻信號(hào)進(jìn)行快速傅里葉變換,把時(shí)域信號(hào)轉(zhuǎn)化為頻域信號(hào),通過UCOSIII系統(tǒng),在錄音播放的同時(shí)顯示頻譜變化。其中模擬音頻信號(hào)經(jīng)過A/D轉(zhuǎn)換前需要先放大然后再濾波,這樣能保證音頻信號(hào)不失真、降低噪聲干擾。
模擬信號(hào)通過放大和濾波前級(jí)電路,經(jīng)A/D轉(zhuǎn)換、錄音到SD卡,再經(jīng)STM32進(jìn)行FFT運(yùn)算后播放信號(hào),同時(shí)在液晶屏上顯示頻譜。單片機(jī)使用的是32位低功耗STM32F103ZET6,該芯片具有64 KB SRAM、2個(gè)基本定時(shí)器、4個(gè)通用定時(shí)器、3個(gè)12位ADC、1個(gè)12位DAC等[5-7]。系統(tǒng)框圖如圖1所示。

圖1 系統(tǒng)框圖
為了增加AD位數(shù)并使A/D量化范圍內(nèi)的量化精度最高而獲得動(dòng)態(tài)范圍較大的輸入信號(hào),在A/D轉(zhuǎn)換前需要處理輸入的音頻模擬信號(hào)。設(shè)計(jì)上要求100 dB的輸入信號(hào)動(dòng)態(tài)范圍,幅度范圍為0.01 mV~10 V。設(shè)定ADC,500 mV為芯片的最小輸入信號(hào)峰值。由于輸入信號(hào)的幅度最大為10 V,設(shè)定ADC 20lg(10
V/500 mV)的動(dòng)態(tài)輸入范圍,即為26 dB,所以需要62 400,8 000,400,200,1這5路放大倍數(shù)固定的放大電路,使得輸出信號(hào)的電壓不超過3.3 V。STM32103常用電壓為3.3 V,其中內(nèi)部ADC的電壓也為3.3 V,因此選擇了AD公司生產(chǎn)的運(yùn)放AD8656芯片,選擇該芯片是因?yàn)榉糯笮⌒盘?hào)的增益和放大器輸出主要參數(shù)的影響。該芯片的低壓提供低噪聲10 KHz時(shí)為2.7 nV/Hz1/2,280 MHz的運(yùn)放增益帶寬,10 pA的輸入偏置電流,低失調(diào)電壓最大為250μV。
當(dāng)采樣頻率滿足大于等于最高頻率的2倍時(shí),可以不失真地恢復(fù)出原模擬信號(hào)。如果不滿足上述采樣定理的條件,即采樣頻率小于信號(hào)最高頻率的2倍,或信號(hào)的實(shí)際最高頻率超過了二分之一的采樣頻率,則在采樣后的信號(hào)頻譜上會(huì)發(fā)生頻譜混疊現(xiàn)象。這時(shí),即使使用理想的矩形低通濾波器也無法不失真地恢復(fù)出原模擬信號(hào),因此這種失真現(xiàn)象稱為頻譜混疊失真。當(dāng)確定采樣頻率后,就必須限制原模擬信號(hào)的上限頻率,這樣是為了防止產(chǎn)生頻譜混疊失真。通常設(shè)計(jì)的音頻信號(hào)的頻率在20 KHz以下,因此,設(shè)置一個(gè)上限頻率合適的低通濾波器在把信號(hào)送到A/D轉(zhuǎn)換之前是為了進(jìn)行抗混疊處理,防止采樣的頻率是高頻信號(hào)的分量而產(chǎn)生頻譜混疊從而影響給定的較低頻率信號(hào)的幅值分析[8-10]。由于巴特沃斯濾波器在性能方面沒有明顯的缺點(diǎn),而且設(shè)計(jì)簡(jiǎn)單,對(duì)構(gòu)成濾波器的元件的Q值沒有明顯的要求,為此設(shè)計(jì)了一個(gè)四階巴特沃斯低通濾波器,截止頻率為20 KHz的抗混疊濾波器。通常高階濾波器可由多個(gè)低階濾波器構(gòu)成,所以在設(shè)計(jì)中,四階的低通濾波器由兩個(gè)二階巴特沃斯低通濾波器構(gòu)成,如圖2所示。

圖2 抗混疊濾波器的設(shè)計(jì)
采用VS1053解碼芯片,該芯片有一個(gè)高性能的DSP處理核VS_DSP、16 KB的指令RAM、0.5 KB的數(shù)據(jù)RAM,通過SPI控制,具有8個(gè)可用的I/O口和1個(gè)串口,芯片內(nèi)部還帶了一個(gè)可變采樣的立體聲ADC,一個(gè)高性能立體聲DAC及音頻耳機(jī)放大器。模擬音頻信號(hào)通過前級(jí)信號(hào)調(diào)理電路后,通過SPI口,芯片VS1053接收輸入進(jìn)來的音頻模擬信號(hào)流,經(jīng)過A/D轉(zhuǎn)換將其編碼成數(shù)字信號(hào)存儲(chǔ)到SD卡。接著,經(jīng)D/A轉(zhuǎn)換解碼后從左右通道輸出音樂之前,SPI口不停地向VS1053輸入音頻數(shù)據(jù),再經(jīng)過功放后被人們聽到。其中需要系統(tǒng)配置來控制播放音頻信號(hào)。首先,VS1053需要恢復(fù)成原始狀態(tài),需要硬復(fù)位和軟復(fù)位配置。接著,需要配置模式寄存器,時(shí)鐘寄存器,音調(diào)、音量寄存器等相關(guān)寄存器,最后發(fā)送音頻數(shù)據(jù),播放音樂[3]。
嚴(yán)格要求正確的處理結(jié)果和及時(shí)處理過程的系統(tǒng)就稱為實(shí)時(shí)系統(tǒng)。其中,硬實(shí)時(shí)和軟實(shí)時(shí)是實(shí)時(shí)系統(tǒng)的兩大類,大多數(shù)的實(shí)時(shí)系統(tǒng)是嵌入式的。這類系統(tǒng)是針對(duì)航空航天、工控等對(duì)響應(yīng)時(shí)間有嚴(yán)格要求的應(yīng)用場(chǎng)合而產(chǎn)生的,在這些場(chǎng)合中,傳統(tǒng)的PC及其相應(yīng)的操作系統(tǒng)是無法勝任的。
由Micrium公司開發(fā)的UCOSIII系統(tǒng)是一種可裁剪、可固化、可剝奪的第三代微型實(shí)時(shí)操作系統(tǒng),其中任務(wù)調(diào)度、任務(wù)通信、內(nèi)存管理、中斷管理、定時(shí)管理等是該系統(tǒng)的特性。在運(yùn)行系統(tǒng)設(shè)備上,當(dāng)程序執(zhí)行時(shí),首先會(huì)初始化系統(tǒng)任務(wù)管理所需要的各種鏈表等數(shù)據(jù)結(jié)構(gòu),其次,根據(jù)需要設(shè)計(jì)的應(yīng)用程序來創(chuàng)建任務(wù),最后由調(diào)度器管理各個(gè)任務(wù),而中斷可由操作系統(tǒng)使能和除能,若使能中斷,則可以在其他任務(wù)運(yùn)行時(shí)跳轉(zhuǎn)到中斷服務(wù)程序[11-15]。由于UCOSII系統(tǒng)每個(gè)任務(wù)優(yōu)先級(jí)的任務(wù)個(gè)數(shù)只能是一個(gè)而且不支持時(shí)間片輪轉(zhuǎn)調(diào)度,所以該設(shè)計(jì)采用了UCOSIII系統(tǒng)。
在軟件設(shè)計(jì)上,使用了嵌入式UCOSIII實(shí)時(shí)操作的多任務(wù)系統(tǒng)。任務(wù)就是死循環(huán)。該系統(tǒng)支持多任務(wù)操作,最大不超過255個(gè)任務(wù),操作系統(tǒng)對(duì)這些任務(wù)進(jìn)行調(diào)度管理。在任務(wù)根據(jù)優(yōu)先級(jí)不斷執(zhí)行的過程中,CPU的使用權(quán)在多個(gè)任務(wù)中不停變換,多任務(wù)管理實(shí)際上就是最大化利用了CPU。軟件設(shè)計(jì)編寫了四個(gè)任務(wù),即頻譜顯示任務(wù),音頻錄音播放任務(wù),LED0、LED1任務(wù),這些任務(wù)每一個(gè)都有自己的任務(wù)堆棧和優(yōu)先級(jí),其中頻譜顯示任務(wù)和音頻播放任務(wù)的優(yōu)先級(jí)是一樣的。按照任務(wù)優(yōu)先級(jí),操作系統(tǒng)調(diào)度這四個(gè)任務(wù)。然后通過開始任務(wù)創(chuàng)建自己的任務(wù),接著掛起開始任務(wù)。系統(tǒng)設(shè)計(jì)流程如圖3所示。

圖3 系統(tǒng)設(shè)計(jì)流程
嵌入式UCOSIII操作系統(tǒng)的移植就是指能使UCOSIII在微控制器或者某個(gè)微處理器上運(yùn)行。UCOSIII的移植[16]步驟如圖4所示。

圖4 移植步驟
將編譯后的代碼下載到STM32103開發(fā)板中,結(jié)果顯示LED0開始閃爍,滅的時(shí)間比亮的時(shí)間長(zhǎng),設(shè)置滅500 ms、亮200 ms;LED1均勻閃爍。接著,打開串口調(diào)試,接收到操作系統(tǒng)發(fā)送的數(shù)據(jù),float_num的值在增加,每次增加0.01,這和在程序中設(shè)置的每次增加0.01相符,說明UCOSIII移植成功。通過軟件編寫,程序調(diào)試下載的結(jié)果:LED0與LED1任務(wù)中每間隔200 ms DS0亮一次,間隔500 ms DS1亮一次,接著DS0和DS1同時(shí)亮,依次循環(huán)。
音頻模擬信號(hào)先經(jīng)過放大與濾波前級(jí)電路,之后通過A/D轉(zhuǎn)換,經(jīng)STM32使用FFT算法,錄音到SD卡中,利用UCOSIII嵌入式多任務(wù)操作系統(tǒng),在同一優(yōu)先級(jí)音頻播放與頻譜顯示同時(shí)發(fā)生,其實(shí)驗(yàn)結(jié)果如圖5所示。

圖5 頻譜顯示
采用了多任務(wù)內(nèi)核的實(shí)時(shí)嵌入式UCOSIII系統(tǒng),由于該系統(tǒng)對(duì)多任務(wù)進(jìn)行調(diào)度使得系統(tǒng)代碼量有效減少,系統(tǒng)的實(shí)時(shí)性也有很大提高,實(shí)現(xiàn)了CPU資源利用的最大化。在這個(gè)過程中,增強(qiáng)了應(yīng)用程序開發(fā)系統(tǒng)的模塊化,實(shí)現(xiàn)了復(fù)雜的實(shí)時(shí)應(yīng)用。同時(shí),UCOSIII嵌入式多任務(wù)系統(tǒng)運(yùn)行穩(wěn)定,實(shí)現(xiàn)多任務(wù)在同一優(yōu)先級(jí)下發(fā)生。當(dāng)然該設(shè)計(jì)還有不足之處,在后續(xù)的研究中將進(jìn)一步完善。