摘 要:本文以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倍。當(dāng)串行數(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)進行次,因此,當(dāng)?shù)诙友h(huán)完成時,共進行次蝶形單元計算;第一層循環(huán)又使第二層循環(huán)進行了M次,因此,當(dāng)?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軸坐標(biāo)的120和210,0XFF對應(yīng)于LCD上Y軸坐標(biāo)的30和120。因此,用于顯示時域圖的數(shù)據(jù)VAL與其在LCD上Y坐標(biāo)的關(guān)系式為:
Y=120-VAL×90/0XFF
用于顯示頻譜圖的數(shù)據(jù)NUM與其在LCD上Y坐標(biāo)的關(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所示。主線程負責(zé)數(shù)據(jù)的采集和傳輸,另外兩個輔助線程是在主線程的運行過程中產(chǎn)生的,分別完成數(shù)據(jù)的處理和波形的顯示。
當(dāng)輸入信號的頻率為0.377kHz (周期為2.65ms)時,該信號的時域波形及頻譜曲線如圖3所示。從圖中可以看出,通過FFT變換,輸入信號的頻率特性可以較準(zhǔn)確地反映出來。
結(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ù)指標(biāo)
1324基于EP7312的新型嵌入式系統(tǒng)的實現(xiàn)
1123
什么是頻譜分析儀?頻譜分析儀的工作原理
11645
分析嵌入式系統(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ù)?
如何學(xué)習(xí)嵌入式linux?學(xué)習(xí)嵌入式linux有什么技術(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)頻譜分析問題
頻譜分析儀介紹
0性能頻譜分析儀的時域測量技術(shù)及其應(yīng)用
33Linux中基于EP7312的LCD驅(qū)動程序設(shè)計
25EP72 7312 嵌入式系統(tǒng)中SoftModem 的實現(xiàn)
12基于EP7312 的新型嵌入式系統(tǒng)的實現(xiàn)
10頻譜分析的8項提示應(yīng)用指南
17如何使用頻譜分析儀
3570
二手頻譜分析儀
1571什么是頻譜分析儀
3386頻譜分析儀的使用
1030μC/OS-II在EP7312上的移植
1015
信號頻譜分析和測試
5734
頻譜分析儀的正確使用
1320基于EP7312的嵌入式系統(tǒng)軟硬件開發(fā)
965
基于EP7312的嵌入式系統(tǒng)設(shè)計實現(xiàn)
715
接收機與頻譜分析儀的差異
0頻譜分析儀的種類與應(yīng)用
3194
頻譜分析儀原理與使用說明

頻譜分析儀原理結(jié)構(gòu)框圖
1845
概述頻譜分析儀的功能及應(yīng)用領(lǐng)域 頻譜分析儀具有哪些測量功能?
11442簡介AT5010頻譜分析儀
3189頻譜分析儀的技術(shù)基礎(chǔ)教程免費下載
12如何選擇頻譜分析儀和維修頻譜分析儀的故障分析
3916
頻譜分析儀維修故障如何分析?
1807頻譜分析儀都是測量什么的
2怎么分析頻譜分析儀失鎖維修故障?
913頻譜分析儀的使用注意事項
1513頻譜分析儀和示波器有什么區(qū)別?頻譜分析儀軟件和示波器軟件分享
1214
頻譜分析儀如何看雜散信號?
921
Agilent8563E頻譜分析儀介紹
0手持式頻譜分析儀和臺式頻譜分析儀的優(yōu)劣對比
428頻譜分析儀的常見誤差來源 頻譜分析儀的校準(zhǔn)方法
465如何使用頻譜分析儀來觀察和分析雜散信號?
592
電子發(fā)燒友App





評論