摘 要:本文以ARM EP7312和CS5341為核心設計了音頻信號采集系統(tǒng),研究了嵌入式Linux系統(tǒng)的驅動程序設計和基于多線程、模塊化的應用程序設計問題。該系統(tǒng)能夠對采集的信號進行FFT變換、存儲和顯示。
在工程應用中,通過數(shù)字采集系統(tǒng)對信號進行采集和顯示,可以獲取直觀的時域波形。但往往人們還需要從時域信息中提取出信號的其它特征,如信號的頻域信息。本設計通過數(shù)據(jù)采集電路對模擬信號進行采集,采用512點的時間抽取基2 FFT算法對采集的數(shù)據(jù)進行處理,然后在LCD上顯示其頻譜曲線。系統(tǒng)構建于嵌入式Linux操作系統(tǒng)之上,具有嵌入式設備體積小、成本低、功耗低等特點,可便捷地進行語音采集、顯示、處理和聲音信號的頻譜分析,適用于環(huán)境監(jiān)測及故障診斷等場合。
圖1 系統(tǒng)構成圖
圖2 多線程程序流程圖
圖3 信號的時域圖和頻譜圖
數(shù)據(jù)采集電路設計
本系統(tǒng)由模數(shù)轉換模塊、數(shù)據(jù)處理和控制模塊、顯示模塊這三部分組成,如圖1所示。
模數(shù)轉換芯片采用的是Cirrus Logic公司推出的24位兩通道立體聲模數(shù)轉換芯片CS5341,其輸出為串行形式,采樣頻率從32kHz 到192kHz。它有主從兩種工作模式,由主從模式選擇開關進行選擇。
數(shù)據(jù)處理和控制模塊采用了ARM7系列的嵌入式32位EP7312處理器,主頻為74MHz。
在該設計中,模擬信號經(jīng)過放大電路可放大為原來的1倍、2倍、4倍或10倍,具體可由放大倍數(shù)開關控制。放大倍數(shù)通過EP7312的通用端口控制LCD上每個刻度代表的電壓值。CS5341的工作模式為從模式,在該模式下主時鐘、串行數(shù)據(jù)時鐘和通道選擇時鐘都由EP7312提供,串行數(shù)據(jù)時鐘的頻率為通道選擇時鐘的64倍,主時鐘頻率為通道選擇時鐘的256倍。當串行數(shù)據(jù)時鐘處于上升沿時,CS5341輸出一位數(shù)據(jù)。通道選擇時鐘高電平時左通道有效,低電平時右通道有效。
系統(tǒng)的軟件設計
系統(tǒng)的軟件設計包括驅動設計和應用設計兩部分。
驅動設計
在嵌入式Linux系統(tǒng)中,設備驅動程序隱藏了各種設備的具體細節(jié),維護著設備的正常工作,在用戶與設備之間起到了橋梁作用。開發(fā)設備驅動程序是開發(fā)嵌入式系統(tǒng)的重要工作之一。在該系統(tǒng)中,涉及兩個驅動程序:CS5341驅動和LCD驅動。EP7312為LCD的控制提供了良好的支持,驅動程序的具體設計可參照參考文獻3。
下面介紹CS5341驅動程序的設計。由于CS5341數(shù)據(jù)采集速度較快,最高達192kHz。為了與其相匹配,我們采用了快速中斷fiq。與普通中斷不同,快速中斷模式有專用的組合寄存器集,因而大大減少了中斷時間。而快速中斷的申請需要用到中斷處理函數(shù)的首地址和末地址,為了得到這兩個地址,中斷處理函數(shù)必須用匯編來編寫。因此,該驅動有兩個文件構成:主文件cs5341.c和中斷文件fiq.s。在此著重說明主文件中的設備初始化函數(shù)cs5341init()和中斷函數(shù)。
int CS5341Init(void)
{
..................................
//禁止中斷
INTMR3 = 0x0;
//設置相關寄存器
SYSCON3 |= 0x00000008;
DAI64FS = 0x60B;
DAIR =0x00220404;
DAISR =0xFFFFFFFF;
DAIR |=0x10000;
...................................
//注冊設備
rc= register_chrdev (cs5341_major, "CS5341", &CS5341_fops);
...................................
//申請fiq
fiqhandler_start = &dai_fiq_handler_start;
fiqhandler_length = &dai_fiq_handler_end - &dai_fiq_handler_start;
if (claim_fiq(&cs5341_fh))
{
printk("cs5341_fh: couldn't claim FIQ.\n");
return;
}
set_fiq_hander(fiqhander_start, fiqhander_length);
set_fiq_regs(regs);
..................................
return 0;
}
中斷處理程序:
.....................................
.text
.align 2
.global dai_fiq_handler_start
.global dai_fiq_handler_end
dai_fiq_handler_start:
//程序首地址
........................................
........................................
dai_fiq_handler_end:
//程序末地址
應用程序設計
該系統(tǒng)的應用程序設計主要包括數(shù)據(jù)存儲、數(shù)據(jù)處理(FFT)和波形顯示。
數(shù)據(jù)存儲
在該模塊中,申請兩塊緩沖區(qū)buf和buffer,buf用來存放采集的數(shù)據(jù),buffer為臨界資源。程序把數(shù)據(jù)從buf放入臨界資源buffer中,設置一個共享鎖,實現(xiàn)該模塊、數(shù)據(jù)的處理和顯示模塊的互斥訪問。
數(shù)據(jù)處理模塊
該模塊采用FFT算法對采集的數(shù)據(jù)進行處理。
FFT變換的具體實現(xiàn)如下:
首先進行碼位倒置,得到FFT運算所需要的輸入序列。然后采用3層循環(huán)完成N點FFT(這里N=512)。
第一層循環(huán):“級”作為第一層循環(huán),N點FFT運算共有M級,這里,我們用m作循環(huán)變量,。
第二層循環(huán):“組”作為第二層循環(huán),第m級的組數(shù)為,用j作循環(huán)變量,。
第三層循環(huán):每組里的蝶形單元作為第三層循環(huán),每一組里共有蝶型單元2m個,用i作循環(huán)變量,。
分析上面循環(huán)可以得出:第三層循環(huán)完成2m個蝶形單元計算;第二層循環(huán)使第三層循環(huán)進行次,因此,當?shù)诙友h(huán)完成時,共進行次蝶形單元計算;第一層循環(huán)又使第二層循環(huán)進行了M次,因此,當?shù)谝粚友h(huán)完成時,共進行了次蝶型單元計算。
波形顯示模塊
因為要把處理前的數(shù)據(jù)和經(jīng)過FFT處理后的數(shù)據(jù)同時顯示在LCD上,所以,把LCD的上半屏分配給未處理的數(shù)據(jù),用于顯示時域圖;下半屏用于顯示頻譜圖。為了把波形顯示在特定的區(qū)域,需要對數(shù)據(jù)進行處理。所采集的數(shù)據(jù)和FFT變換過的數(shù)據(jù)的范圍均為0~0XFF,0對應于LCD上Y軸坐標的120和210,0XFF對應于LCD上Y軸坐標的30和120。因此,用于顯示時域圖的數(shù)據(jù)VAL與其在LCD上Y坐標的關系式為:
Y=120-VAL×90/0XFF
用于顯示頻譜圖的數(shù)據(jù)NUM與其在LCD上Y坐標的關系式為:
Y=210-NUM×90/0XFF
LCD一屏可顯示310個數(shù)據(jù)點,點與點之間用矢量法直線相連。
多任務操作系統(tǒng)下的編程
與傳統(tǒng)的單片機系統(tǒng)不同,Linux是一個多任務的嵌入式操作系統(tǒng)。內核允許將一項工作劃分為幾個相互獨立的任務,這樣就縮短了整個系統(tǒng)的響應時間,提高了系統(tǒng)性能。
在設計時采用了多線程的編程方式,從而克服了多進程編程中資源占用量多和響應時間慢等缺點。該程序包括三個線程,流程圖如圖2所示。主線程負責數(shù)據(jù)的采集和傳輸,另外兩個輔助線程是在主線程的運行過程中產(chǎn)生的,分別完成數(shù)據(jù)的處理和波形的顯示。
當輸入信號的頻率為0.377kHz (周期為2.65ms)時,該信號的時域波形及頻譜曲線如圖3所示。從圖中可以看出,通過FFT變換,輸入信號的頻率特性可以較準確地反映出來。
結語
以EP7312處理器和模數(shù)轉換芯片CS5341為核心構成的數(shù)據(jù)采集系統(tǒng),充分運用了它們在音頻采集和處理方面的優(yōu)勢,可以對音頻數(shù)據(jù)流進行實時性的采集、變換、存儲和顯示,具有速度快、采樣頻率高、體積小和低功耗等特點。以該系統(tǒng)為核心技術開發(fā)的產(chǎn)品可應用于醫(yī)療、運輸、娛樂等行業(yè),具有廣泛的應用前景。
- 分析技術(6953)
相關推薦
頻譜分析儀的技術指標

基于EP7312的新型嵌入式系統(tǒng)的實現(xiàn)


什么是頻譜分析儀?頻譜分析儀的工作原理


分析嵌入式系統(tǒng)的技術特點
嵌入式技術分析
嵌入式技術究竟是什么?
嵌入式移動通信技術的研究與發(fā)展分析,不看肯定后悔
嵌入式視覺技術是什么?
頻譜分析儀技術基礎-R&S
頻譜分析儀使用意義
頻譜分析儀原理結構框圖
頻譜分析儀原理結構框圖
頻譜分析儀配置技巧
什么是嵌入式系統(tǒng)技術的核心?
什么是頻譜分析儀
什么是中端實時頻譜分析儀?
使用頻譜分析儀應該注意些什么
便攜式頻譜分析儀的介紹
關于RIGOL DSA815-TG頻譜分析儀的分析
幾種嵌入式軟件代碼壓縮技術的比較分析
基于DDS實現(xiàn)信號的頻譜分析
如何實現(xiàn)基于Agent技術的嵌入式智能設備測試?
如何實現(xiàn)基于FPGA平臺的手持式頻譜分析儀的應用?
如何選擇頻譜分析儀和示波器?
實時頻譜分析儀與傳統(tǒng)掃描式頻譜分析儀有什么區(qū)別?
帶你走進頻譜分析儀“世界”,了解頻譜分析儀!
我國嵌入式技術及應用現(xiàn)狀分析
手持式頻譜分析儀實現(xiàn)
無線頻譜分析儀有哪些特性?
有關頻譜分析問題
頻譜分析儀介紹

性能頻譜分析儀的時域測量技術及其應用

Linux中基于EP7312的LCD驅動程序設計

EP72 7312 嵌入式系統(tǒng)中SoftModem 的實現(xiàn)

基于EP7312 的新型嵌入式系統(tǒng)的實現(xiàn)

頻譜分析的8項提示應用指南

如何使用頻譜分析儀


二手頻譜分析儀

什么是頻譜分析儀

頻譜分析儀的使用

μC/OS-II在EP7312上的移植


信號頻譜分析和測試


頻譜分析儀的正確使用

基于EP7312的嵌入式系統(tǒng)軟硬件開發(fā)


基于EP7312的嵌入式系統(tǒng)設計實現(xiàn)


接收機與頻譜分析儀的差異

頻譜分析儀的種類與應用


頻譜分析儀原理與使用說明

頻譜分析儀原理結構框圖


概述頻譜分析儀的功能及應用領域 頻譜分析儀具有哪些測量功能?

簡介AT5010頻譜分析儀

頻譜分析儀的技術基礎教程免費下載

如何選擇頻譜分析儀和維修頻譜分析儀的故障分析


頻譜分析儀維修故障如何分析?

頻譜分析儀都是測量什么的

怎么分析頻譜分析儀失鎖維修故障?

頻譜分析儀的使用注意事項

頻譜分析儀和示波器有什么區(qū)別?頻譜分析儀軟件和示波器軟件分享


頻譜分析儀如何看雜散信號?


Agilent8563E頻譜分析儀介紹

手持式頻譜分析儀和臺式頻譜分析儀的優(yōu)劣對比

頻譜分析儀的常見誤差來源 頻譜分析儀的校準方法

如何使用頻譜分析儀來觀察和分析雜散信號?

評論