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

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


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


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

性能頻譜分析儀的時域測量技術(shù)及其應(yīng)用

Linux中基于EP7312的LCD驅(qū)動程序設(shè)計

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

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

頻譜分析的8項提示應(yīng)用指南

如何使用頻譜分析儀


二手頻譜分析儀

什么是頻譜分析儀

頻譜分析儀的使用

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


信號頻譜分析和測試


頻譜分析儀的正確使用

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


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


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

頻譜分析儀的種類與應(yīng)用


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

頻譜分析原理

頻譜分析儀原理結(jié)構(gòu)框圖


概述頻譜分析儀的功能及應(yīng)用領(lǐng)域 頻譜分析儀具有哪些測量功能?

簡介AT5010頻譜分析儀

頻譜分析儀的技術(shù)基礎(chǔ)教程免費下載

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


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

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

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

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

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


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


Agilent8563E頻譜分析儀介紹

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

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

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

評論