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

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

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

圖3 系統設計流程
嵌入式UCOSIII操作系統的移植就是指能使UCOSIII在微控制器或者某個微處理器上運行。UCOSIII的移植[16]步驟如圖4所示。

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

圖5 頻譜顯示
采用了多任務內核的實時嵌入式UCOSIII系統,由于該系統對多任務進行調度使得系統代碼量有效減少,系統的實時性也有很大提高,實現了CPU資源利用的最大化。在這個過程中,增強了應用程序開發系統的模塊化,實現了復雜的實時應用。同時,UCOSIII嵌入式多任務系統運行穩定,實現多任務在同一優先級下發生。當然該設計還有不足之處,在后續的研究中將進一步完善。