摘 要:本文以ARM EP7312和CS5341為核心設(shè)計(jì)了音頻信號(hào)采集系統(tǒng),研究了嵌入式Linux系統(tǒng)的驅(qū)動(dòng)程序設(shè)計(jì)和基于多線程、模塊化的應(yīng)用程序設(shè)計(jì)問(wèn)題。該系統(tǒng)能夠?qū)Σ杉男盘?hào)進(jìn)行FFT變換、存儲(chǔ)和顯示。
在工程應(yīng)用中,通過(guò)數(shù)字采集系統(tǒng)對(duì)信號(hào)進(jìn)行采集和顯示,可以獲取直觀的時(shí)域波形。但往往人們還需要從時(shí)域信息中提取出信號(hào)的其它特征,如信號(hào)的頻域信息。本設(shè)計(jì)通過(guò)數(shù)據(jù)采集電路對(duì)模擬信號(hào)進(jìn)行采集,采用512點(diǎn)的時(shí)間抽取基2 FFT算法對(duì)采集的數(shù)據(jù)進(jìn)行處理,然后在LCD上顯示其頻譜曲線。系統(tǒng)構(gòu)建于嵌入式Linux操作系統(tǒng)之上,具有嵌入式設(shè)備體積小、成本低、功耗低等特點(diǎn),可便捷地進(jìn)行語(yǔ)音采集、顯示、處理和聲音信號(hào)的頻譜分析,適用于環(huán)境監(jiān)測(cè)及故障診斷等場(chǎng)合。

圖1 系統(tǒng)構(gòu)成圖

圖2 多線程程序流程圖

圖3 信號(hào)的時(shí)域圖和頻譜圖

數(shù)據(jù)采集電路設(shè)計(jì)
本系統(tǒng)由模數(shù)轉(zhuǎn)換模塊、數(shù)據(jù)處理和控制模塊、顯示模塊這三部分組成,如圖1所示。
模數(shù)轉(zhuǎn)換芯片采用的是Cirrus Logic公司推出的24位兩通道立體聲模數(shù)轉(zhuǎn)換芯片CS5341,其輸出為串行形式,采樣頻率從32kHz 到192kHz。它有主從兩種工作模式,由主從模式選擇開(kāi)關(guān)進(jìn)行選擇。
數(shù)據(jù)處理和控制模塊采用了ARM7系列的嵌入式32位EP7312處理器,主頻為74MHz。
在該設(shè)計(jì)中,模擬信號(hào)經(jīng)過(guò)放大電路可放大為原來(lái)的1倍、2倍、4倍或10倍,具體可由放大倍數(shù)開(kāi)關(guān)控制。放大倍數(shù)通過(guò)EP7312的通用端口控制LCD上每個(gè)刻度代表的電壓值。CS5341的工作模式為從模式,在該模式下主時(shí)鐘、串行數(shù)據(jù)時(shí)鐘和通道選擇時(shí)鐘都由EP7312提供,串行數(shù)據(jù)時(shí)鐘的頻率為通道選擇時(shí)鐘的64倍,主時(shí)鐘頻率為通道選擇時(shí)鐘的256倍。當(dāng)串行數(shù)據(jù)時(shí)鐘處于上升沿時(shí),CS5341輸出一位數(shù)據(jù)。通道選擇時(shí)鐘高電平時(shí)左通道有效,低電平時(shí)右通道有效。
系統(tǒng)的軟件設(shè)計(jì)
系統(tǒng)的軟件設(shè)計(jì)包括驅(qū)動(dòng)設(shè)計(jì)和應(yīng)用設(shè)計(jì)兩部分。
驅(qū)動(dòng)設(shè)計(jì)
在嵌入式Linux系統(tǒng)中,設(shè)備驅(qū)動(dòng)程序隱藏了各種設(shè)備的具體細(xì)節(jié),維護(hù)著設(shè)備的正常工作,在用戶與設(shè)備之間起到了橋梁作用。開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序是開(kāi)發(fā)嵌入式系統(tǒng)的重要工作之一。在該系統(tǒng)中,涉及兩個(gè)驅(qū)動(dòng)程序:CS5341驅(qū)動(dòng)和LCD驅(qū)動(dòng)。EP7312為L(zhǎng)CD的控制提供了良好的支持,驅(qū)動(dòng)程序的具體設(shè)計(jì)可參照參考文獻(xiàn)3。
下面介紹CS5341驅(qū)動(dòng)程序的設(shè)計(jì)。由于CS5341數(shù)據(jù)采集速度較快,最高達(dá)192kHz。為了與其相匹配,我們采用了快速中斷fiq。與普通中斷不同,快速中斷模式有專用的組合寄存器集,因而大大減少了中斷時(shí)間。而快速中斷的申請(qǐng)需要用到中斷處理函數(shù)的首地址和末地址,為了得到這兩個(gè)地址,中斷處理函數(shù)必須用匯編來(lái)編寫。因此,該驅(qū)動(dòng)有兩個(gè)文件構(gòu)成:主文件cs5341.c和中斷文件fiq.s。在此著重說(shuō)明主文件中的設(shè)備初始化函數(shù)cs5341init()和中斷函數(shù)。
int CS5341Init(void)
{
..................................
//禁止中斷
INTMR3 = 0x0;
//設(shè)置相關(guān)寄存器
SYSCON3 |= 0x00000008;
DAI64FS = 0x60B;
DAIR =0x00220404;
DAISR =0xFFFFFFFF;
DAIR |=0x10000;
...................................
//注冊(cè)設(shè)備
rc= register_chrdev (cs5341_major, "CS5341", &CS5341_fops);
...................................
//申請(qǐng)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è)計(jì)
該系統(tǒng)的應(yīng)用程序設(shè)計(jì)主要包括數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理(FFT)和波形顯示。
數(shù)據(jù)存儲(chǔ)
在該模塊中,申請(qǐng)兩塊緩沖區(qū)buf和buffer,buf用來(lái)存放采集的數(shù)據(jù),buffer為臨界資源。程序把數(shù)據(jù)從buf放入臨界資源buffer中,設(shè)置一個(gè)共享鎖,實(shí)現(xiàn)該模塊、數(shù)據(jù)的處理和顯示模塊的互斥訪問(wèn)。
數(shù)據(jù)處理模塊
該模塊采用FFT算法對(duì)采集的數(shù)據(jù)進(jìn)行處理。
FFT變換的具體實(shí)現(xiàn)如下:
首先進(jìn)行碼位倒置,得到FFT運(yùn)算所需要的輸入序列。然后采用3層循環(huán)完成N點(diǎn)FFT(這里N=512)。
第一層循環(huán):“級(jí)”作為第一層循環(huán),N點(diǎn)FFT運(yùn)算共有M級(jí),這里,我們用m作循環(huán)變量,。
第二層循環(huán):“組”作為第二層循環(huán),第m級(jí)的組數(shù)為,用j作循環(huán)變量,。
第三層循環(huán):每組里的蝶形單元作為第三層循環(huán),每一組里共有蝶型單元2m個(gè),用i作循環(huán)變量,。
分析上面循環(huán)可以得出:第三層循環(huán)完成2m個(gè)蝶形單元計(jì)算;第二層循環(huán)使第三層循環(huán)進(jìn)行次,因此,當(dāng)?shù)诙友h(huán)完成時(shí),共進(jìn)行次蝶形單元計(jì)算;第一層循環(huán)又使第二層循環(huán)進(jìn)行了M次,因此,當(dāng)?shù)谝粚友h(huán)完成時(shí),共進(jìn)行了次蝶型單元計(jì)算。
波形顯示模塊
因?yàn)橐烟幚砬暗臄?shù)據(jù)和經(jīng)過(guò)FFT處理后的數(shù)據(jù)同時(shí)顯示在LCD上,所以,把LCD的上半屏分配給未處理的數(shù)據(jù),用于顯示時(shí)域圖;下半屏用于顯示頻譜圖。為了把波形顯示在特定的區(qū)域,需要對(duì)數(shù)據(jù)進(jìn)行處理。所采集的數(shù)據(jù)和FFT變換過(guò)的數(shù)據(jù)的范圍均為0~0XFF,0對(duì)應(yīng)于LCD上Y軸坐標(biāo)的120和210,0XFF對(duì)應(yīng)于LCD上Y軸坐標(biāo)的30和120。因此,用于顯示時(shí)域圖的數(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個(gè)數(shù)據(jù)點(diǎn),點(diǎn)與點(diǎn)之間用矢量法直線相連。
多任務(wù)操作系統(tǒng)下的編程
與傳統(tǒng)的單片機(jī)系統(tǒng)不同,Linux是一個(gè)多任務(wù)的嵌入式操作系統(tǒng)。內(nèi)核允許將一項(xiàng)工作劃分為幾個(gè)相互獨(dú)立的任務(wù),這樣就縮短了整個(gè)系統(tǒng)的響應(yīng)時(shí)間,提高了系統(tǒng)性能。
在設(shè)計(jì)時(shí)采用了多線程的編程方式,從而克服了多進(jìn)程編程中資源占用量多和響應(yīng)時(shí)間慢等缺點(diǎn)。該程序包括三個(gè)線程,流程圖如圖2所示。主線程負(fù)責(zé)數(shù)據(jù)的采集和傳輸,另外兩個(gè)輔助線程是在主線程的運(yùn)行過(guò)程中產(chǎn)生的,分別完成數(shù)據(jù)的處理和波形的顯示。
當(dāng)輸入信號(hào)的頻率為0.377kHz (周期為2.65ms)時(shí),該信號(hào)的時(shí)域波形及頻譜曲線如圖3所示。從圖中可以看出,通過(guò)FFT變換,輸入信號(hào)的頻率特性可以較準(zhǔn)確地反映出來(lái)。
結(jié)語(yǔ)
以EP7312處理器和模數(shù)轉(zhuǎn)換芯片CS5341為核心構(gòu)成的數(shù)據(jù)采集系統(tǒng),充分運(yùn)用了它們?cè)谝纛l采集和處理方面的優(yōu)勢(shì),可以對(duì)音頻數(shù)據(jù)流進(jìn)行實(shí)時(shí)性的采集、變換、存儲(chǔ)和顯示,具有速度快、采樣頻率高、體積小和低功耗等特點(diǎn)。以該系統(tǒng)為核心技術(shù)開(kāi)發(fā)的產(chǎn)品可應(yīng)用于醫(yī)療、運(yùn)輸、娛樂(lè)等行業(yè),具有廣泛的應(yīng)用前景。
- 分析技術(shù)(6953)
相關(guān)推薦
頻譜分析儀的技術(shù)指標(biāo)
1324基于EP7312的新型嵌入式系統(tǒng)的實(shí)現(xiàn)
1123
什么是頻譜分析儀?頻譜分析儀的工作原理
11645
分析嵌入式系統(tǒng)的技術(shù)特點(diǎn)
嵌入式技術(shù)分析
嵌入式技術(shù)具有哪些特性應(yīng)用?
嵌入式技術(shù)究竟是什么?
嵌入式移動(dòng)通信技術(shù)的研究與發(fā)展分析,不看肯定后悔
嵌入式視覺(jué)技術(shù)是什么?
嵌入式軟PLC技術(shù)具有哪些優(yōu)點(diǎn)呢
頻譜分析儀技術(shù)基礎(chǔ)-R&S
頻譜分析儀使用意義
頻譜分析儀原理結(jié)構(gòu)框圖
頻譜分析儀原理結(jié)構(gòu)框圖
頻譜分析儀配置技巧
什么是嵌入式系統(tǒng)技術(shù)的核心?
什么是頻譜分析儀
什么是中端實(shí)時(shí)頻譜分析儀?
使用頻譜分析儀應(yīng)該注意些什么
便攜式頻譜分析儀的介紹
關(guān)于RIGOL DSA815-TG頻譜分析儀的分析
幾種嵌入式軟件代碼壓縮技術(shù)的比較分析
基于DDS實(shí)現(xiàn)信號(hào)的頻譜分析
如何在嵌入式系統(tǒng)設(shè)計(jì)中使用UML技術(shù)?
如何學(xué)習(xí)嵌入式linux?學(xué)習(xí)嵌入式linux有什么技術(shù)門檻嗎?
如何實(shí)現(xiàn)基于Agent技術(shù)的嵌入式智能設(shè)備測(cè)試?
如何實(shí)現(xiàn)基于FPGA平臺(tái)的手持式頻譜分析儀的應(yīng)用?
如何對(duì)采集到的信號(hào)實(shí)時(shí)就行頻譜分析?
如何選擇頻譜分析儀和示波器?
如何選擇無(wú)線頻譜分析儀?
實(shí)時(shí)頻譜分析儀與傳統(tǒng)掃描式頻譜分析儀有什么區(qū)別?
帶你走進(jìn)頻譜分析儀“世界”,了解頻譜分析儀!
怎樣去實(shí)現(xiàn)基于EP7312的新型嵌入式系統(tǒng)?
我國(guó)嵌入式技術(shù)及應(yīng)用現(xiàn)狀分析
手持式頻譜分析儀實(shí)現(xiàn)
無(wú)線頻譜分析儀有哪些特性?
有關(guān)頻譜分析問(wèn)題
頻譜分析儀介紹
0性能頻譜分析儀的時(shí)域測(cè)量技術(shù)及其應(yīng)用
33Linux中基于EP7312的LCD驅(qū)動(dòng)程序設(shè)計(jì)
25EP72 7312 嵌入式系統(tǒng)中SoftModem 的實(shí)現(xiàn)
12基于EP7312 的新型嵌入式系統(tǒng)的實(shí)現(xiàn)
10頻譜分析的8項(xiàng)提示應(yīng)用指南
17如何使用頻譜分析儀
3570
二手頻譜分析儀
1571什么是頻譜分析儀
3386頻譜分析儀的使用
1030μC/OS-II在EP7312上的移植
1015
信號(hào)頻譜分析和測(cè)試
5734
頻譜分析儀的正確使用
1320基于EP7312的嵌入式系統(tǒng)軟硬件開(kāi)發(fā)
965
基于EP7312的嵌入式系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
715
接收機(jī)與頻譜分析儀的差異
0頻譜分析儀的種類與應(yīng)用
3194
頻譜分析儀原理與使用說(shuō)明

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




評(píng)論