段麗娜
(華中科技大學 武昌分校,湖北 武漢 430064)
本文設計了基于SONiX公司的ARM Cortex-M0 SN32F700的音頻頻譜顯示器,采用性價比較高的Cortex-M0 SN32F700實現對音頻頻譜的分析處理,取代了傳統使用純硬件濾波器或專用數字處理芯片DSP來實現的方法,具有較高的實用價值。本文采用ARM作為控制核心[1-3],充分發揮了其功耗超低、精度較高等優勢,其他各部分電路設計也充分考慮了簡單、可靠、經濟等因素,為實際應用提供了一定的參考價值。
本系統以SONiX公司的ARM Cortex-M0 SN32F700芯片為控制核心,SN32F700的主時鐘的速率為50 MHz,采用三級流水線結構且片上資源豐富,能夠很好地實現系統的控制和算法,甚至能簡化一些復雜的硬件電路。相比于普通的單片機,采用ARM作主控芯片的方案具有靈活性、可擴展性、通用性的優點,而且還可以根據市場的需求組合,價格上也有一定的優勢,本系統最終選擇ARM的芯片方案來構建音視頻處理平臺。
方案一 利用硬件濾波器和A/D轉換器,并用DDS芯片配合FIFO對信號進行采集,通過DDS集成芯片產生一個頻率穩定度和精度相當高的信號作為FIFO的時鐘,然后由FIFO對A/D轉換的結果進行采集和存儲,最后送入MCU進行處理。
方案二 直接由32位MCU的定時中斷進行信號的采集,然后對信號進行分析。因為32位MCU是50 MHz的單指令周期處理器,所以其定時精確度為20.0 ns,已經遠遠可以實現本文期望的采樣率,而且控制方成本較低,因此選擇由MCU直接采樣。
方案一實現簡單,但硬件成本高,方案二軟件和硬件實現都較簡單。而這里針對ARM資源多、運算速度快的特點,提出一種切實可行的快速傅里葉變換算法實現頻譜顯示。因此選取方案二作為音頻頻譜顯示計方案。
在整個音頻處理系統中,采用順序、循環掃描和定時輸出顯示的方式來對整個系統控制[4]。軟件系統中的各個子程序逐步實現,最后再將所需要的子程序合并,這樣就具有編寫代碼容易、易于移植、維護及開發周期短等特點。最重要的是實現了程序中數據的快速處理輸出,使得將來的擴展更加方便。因此選用的主控芯片是SN32F700。
本設計將整個硬件設計分為MCU、音頻采集電路、音頻預處理電路、音頻顯示電路及電源系統5大部分。系統設計框圖如圖1所示。

圖1 系統設計框圖
本設計采用了SONiX公司的Cortex-M0 SN32F700作為系統主控芯片。SN32F700是SONiX公司的首款ARM Cortex-M0芯片,其內部集成了豐富的硬件資源,高達 50 MHz的系統時鐘速度和 12 bit、250 kHz采樣速率的ADC,使SN32F700成為本設計的首選。SN32F700存儲器配置為:中斷源ARM Cortex-M0內置矢量中斷控制器(NVIC);大量的 I/O口;兩個 16 bit和兩個 32 bit的通用定時器;總共有4個捕獲輸入和 13個PWMS;10個12 bit的ADC轉換通道及用于通信的I2C和串行通信等接口;32 KB的片上閃存存儲器;8 KB的靜態存儲器(SARM)和 4 KB的引導ROM。
在日常生活中有很多地方用到了對聲音信號的采集,如咪頭、麥克風、對講機和傳聲器等。在本設計中所用到的采集器件是咪頭。咪頭是將聲音信號轉換為電信號的能量轉換器,是和喇叭正好相反的器件。
為使采集的信號不只局限于設備的音頻輸出信號,本文采用了咪頭作為音頻采集器件,并設計出其采集電路,如圖 2所示,其頻率范圍為 20 Hz~16 000 Hz。

圖2 音頻采集電路
在上述硬件電路設計中,主要著眼于音頻信號預處理電路的設計。在實際應用中,音頻信號主要來源是咪頭、麥克風輸入信號或者是播放器輸出信號,圖3所示是一段電腦播放音樂時聲卡輸出的音頻波形。

圖3 電腦聲卡播放的聲音信號
從圖3可以看到,電腦上的聲音信號的電壓有正、負兩種狀態,當直接從電腦上取聲音信號時,需要對其進行處理,使采集的電壓全為正。下面介紹如何對信號進行處理,可以直接從電腦上取出聲音信號,也可以通過采集電路采集外界的聲音信號。
由于在實際的音頻運用中,音頻信號會出現電壓為負值的現象,而單片機只能識別0和1,對負電平不能處理,因此要對音頻信號進行處理,使得音頻信號最后的輸入達到單片機的電壓變換范圍,即在AVREFH和AVREFL之間,以便于MCU進行ADC轉換。
由于是對聲音信號處理,因此選擇了對于音頻信號具有很低失真率的LM358運算放大器。根據以上分析,設計出的音頻預處理電路如圖4所示。

圖4 音頻預處理電路
圖4中電阻R5、R6更具運算放大器中虛短與虛斷的特性,即反相端2和同相端3兩個輸入口的電壓和電流相等,R5、R6組成的是一個運算放大電路,(1+R5/R6)是其放大倍數。將輸入的負電壓信號變成正的電壓信號,其原理是串聯電阻分壓和RC組成的低通濾波器根據輸入電壓的高低對輸入信號進行充放電,使輸入信號的電壓得到升高。
本設計所選用的顯示屏LCM是JDL12864G-04。JDL12864G-04模塊是點陣液晶顯示模塊,它主要由行驅動器、列驅動器以及128×64全點陣液晶顯示器組成,可以完成圖形和 8×4個漢字(16×16點陣)。
LCM向用戶提供一個標準的LCD顯示驅動接口(有4位、8位和VGA等不同類型),用戶按照接口要求進行操作來控制LCD正確顯示。相比玻璃LCM是一種更高集成度的LCD產品,對小尺寸LCD顯示,LCM可以比較方便地與各種微控制器 (比如單片機)連接。由于SN32F700的時鐘頻率是50 MHz,則每秒鐘對 LCM的可刷新次數為 50 M/(128×64×8)=762 次,完全滿足頻譜刷新的頻率。LCM12864顯示電路如圖5所示。

圖5 LCM12864顯示電路
系統的調試包括硬件平臺的調試與系統程序的調試。在每一個工程中,調試都是一個非常重要且十分復雜的環節。
本系統軟件程序設計中包含了初始化部分、音頻采集部分、FFT運算部分、幅值計算部分及頻譜顯示部分。每個部分可以清晰地了解程序的流程,使得程序的結構更加簡單,對于以后相應的開發可以很好地進行移植[5-6]。
系統的測試電路是將1 kHz的正弦波作為聲音信號輸入到電路中,圖6是聲音信號經過聲音采集電路后的顯示。其中,信號1是輸出,信號2是輸入。可以明顯看出,信號1與信號2的波形是相反的,相位相差180°。
1 kHz的正弦波輸入經過音頻采集電路和音頻預處理電路后的顯示如圖7所示。其中,信號線1為輸入,信號2為輸出,輸入與輸出方向相同,相位無差別。
本文介紹了基于ARM的音頻頻譜顯示器的設計方法,完成了音頻頻譜顯示器的設計和制作,并對其進行了性能測試。測試結果表明,整個系統能夠順利采集音頻信號并進行處理,最終在LCD上顯示所采集的頻譜圖,達到一個較好的性能,實現了預期的效果。

圖6 聲音采集1 kHz正弦波的顯示
[1]周林,殷俠.數據采集與分析技術[M].西安:西安電子科技大學出版社,2005.
[2]周立功,王祖麟,陳明計,等.ARM嵌入式系統基礎教程[M].北京:北京航空航天大學出版社,2008.
[3]田澤.嵌入式系統開發與應用教程[M].北京:北京航空航天大學出版社,2005.
[4]李明明,李宏,王晨波.基于FPGA與單片機的音頻頻譜分析系統設計[J].微型機與應用,2013(1):101-102.
[5]王春菊.數字式頻譜分析儀原理分析[J].標準、檢測與儀器,2001(12):95-96.
[6]吳明暉.基于 ARM的嵌入式系統開發與應用[M].北京:人民郵電出版社,2004.