摘 要:本文以ARM EP7312和CS5341為核心設(shè)計(jì)了音頻信號(hào)采集系統(tǒng),研究了嵌入式Linux系統(tǒng)的驅(qū)動(dòng)程序設(shè)計(jì)和基于多線(xiàn)程、模塊化的應(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上顯示其頻譜曲線(xiàn)。系統(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 多線(xiàn)程程序流程圖

圖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è)備的正常工作,在用戶(hù)與設(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。與普通中斷不同,快速中斷模式有專(zhuān)用的組合寄存器集,因而大大減少了中斷時(shí)間。而快速中斷的申請(qǐng)需要用到中斷處理函數(shù)的首地址和末地址,為了得到這兩個(gè)地址,中斷處理函數(shù)必須用匯編來(lái)編寫(xiě)。因此,該驅(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)之間用矢量法直線(xià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í)采用了多線(xiàn)程的編程方式,從而克服了多進(jìn)程編程中資源占用量多和響應(yīng)時(shí)間慢等缺點(diǎn)。該程序包括三個(gè)線(xiàn)程,流程圖如圖2所示。主線(xiàn)程負(fù)責(zé)數(shù)據(jù)的采集和傳輸,另外兩個(gè)輔助線(xiàn)程是在主線(xiàn)程的運(yùn)行過(guò)程中產(chǎn)生的,分別完成數(shù)據(jù)的處理和波形的顯示。
當(dāng)輸入信號(hào)的頻率為0.377kHz (周期為2.65ms)時(shí),該信號(hào)的時(shí)域波形及頻譜曲線(xiàn)如圖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ù)(7080)
基于EP9312的金融嵌入式系統(tǒng)實(shí)現(xiàn)方案
1569
基于FPGA平臺(tái)的手持式頻譜分析儀的設(shè)計(jì)原理
5226
基于EP7312的新型嵌入式系統(tǒng)的實(shí)現(xiàn)
1542
分析嵌入式系統(tǒng)的技術(shù)特點(diǎn)
嵌入式技術(shù)具有哪些特性應(yīng)用?
嵌入式技術(shù)究竟是什么?
嵌入式移動(dòng)通信技術(shù)的研究與發(fā)展分析,不看肯定后悔
嵌入式視覺(jué)技術(shù)是什么?
嵌入式軟PLC技術(shù)具有哪些優(yōu)點(diǎn)呢
頻譜分析儀技術(shù)基礎(chǔ)-R&S
頻譜分析儀使用意義
頻譜分析儀原理結(jié)構(gòu)框圖
什么是頻譜分析儀
使用頻譜分析儀應(yīng)該注意些什么
光頻譜分析儀的技術(shù)原理和應(yīng)用場(chǎng)景
幾種嵌入式軟件代碼壓縮技術(shù)的比較分析
基于DDS實(shí)現(xiàn)信號(hào)的頻譜分析
如何學(xué)習(xí)嵌入式linux?學(xué)習(xí)嵌入式linux有什么技術(shù)門(mén)檻嗎?
如何實(shí)現(xiàn)基于FPGA平臺(tái)的手持式頻譜分析儀的應(yīng)用?
如何選擇無(wú)線(xiàn)頻譜分析儀?
實(shí)時(shí)頻譜分析儀與傳統(tǒng)掃描式頻譜分析儀有什么區(qū)別?
帶你走進(jìn)頻譜分析儀“世界”,了解頻譜分析儀!
怎樣去實(shí)現(xiàn)基于EP7312的新型嵌入式系統(tǒng)?
我國(guó)嵌入式技術(shù)及應(yīng)用現(xiàn)狀分析
手持式頻譜分析儀實(shí)現(xiàn)
掃頻式頻譜分析儀的技術(shù)原理和應(yīng)用場(chǎng)景
有關(guān)頻譜分析問(wèn)題
直接數(shù)字式頻譜分析儀的技術(shù)原理和應(yīng)用場(chǎng)景
頻譜分析儀介紹
0Linux中基于EP7312的LCD驅(qū)動(dòng)程序設(shè)計(jì)
28EP72 7312 嵌入式系統(tǒng)中SoftModem 的實(shí)現(xiàn)
12基于EP7312 的新型嵌入式系統(tǒng)的實(shí)現(xiàn)
10基于DSP技術(shù)的虛擬式FFT頻譜分析儀
62頻譜分析的8項(xiàng)提示應(yīng)用指南
17Agilent N9340B手持式頻譜分析儀技術(shù)資料
68嵌入式系統(tǒng)關(guān)鍵技術(shù)分析與開(kāi)發(fā)應(yīng)用
21什么是頻譜分析儀
5146頻譜分析儀的使用
1291μC/OS-II在EP7312上的移植
1340
信號(hào)頻譜分析和測(cè)試
6547
基于EP7312的嵌入式系統(tǒng)軟硬件開(kāi)發(fā)
1290
基于EP7312的嵌入式系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
953
接收機(jī)與頻譜分析儀的差異
0頻譜分析儀的種類(lèi)與應(yīng)用
3878
頻譜分析儀原理與使用說(shuō)明

基于EP7312的新型嵌入式瀏覽器的ARM Linux系統(tǒng)簡(jiǎn)介
0頻譜分析儀原理結(jié)構(gòu)框圖
3008
TI的嵌入式分析技術(shù)使設(shè)備更加智能
13頻譜分析入門(mén)教程之頻譜分析基礎(chǔ)知識(shí)的詳細(xì)資料概述
0頻譜分析儀的技術(shù)基礎(chǔ)教程免費(fèi)下載
14頻譜分析儀的原理結(jié)構(gòu)和框圖詳細(xì)說(shuō)明
17如何選擇頻譜分析儀和維修頻譜分析儀的故障分析
4870
Bird微波射頻頻譜分析儀分析
1346怎么分析頻譜分析儀失鎖維修故障?
1783掃頻頻譜分析儀的結(jié)構(gòu)框圖
3283
掃頻式頻譜分析儀是什么?它的工作原理是怎樣的?
3039
頻譜分析儀和示波器有什么區(qū)別?頻譜分析儀軟件和示波器軟件分享
3002
“拆解”頻譜分析儀,徹底“看透”頻譜分析儀內(nèi)部結(jié)構(gòu)!
1951
Agilent安捷倫8565EC頻譜分析儀
1182
Agilent8563EC頻譜分析儀
1297
Agilent8563E頻譜分析儀介紹
1頻譜分析儀的使用方法
3770基于EP9315的嵌入式實(shí)驗(yàn)系統(tǒng)
0手持式頻譜分析儀和臺(tái)式頻譜分析儀的優(yōu)劣對(duì)比
1623頻譜分析儀的常見(jiàn)誤差來(lái)源 頻譜分析儀的校準(zhǔn)方法
2919頻譜分析儀的功能和特點(diǎn)
3650掃頻頻譜分析儀與實(shí)時(shí)頻譜分析儀的區(qū)別
4312頻譜分析儀的分類(lèi)和技術(shù)指標(biāo)
1697頻譜分析儀怎么測(cè)量頻率
3359實(shí)時(shí)頻譜分析儀的關(guān)鍵技術(shù)淺析
2100便攜式頻譜分析儀與手持式頻譜分析儀的區(qū)別
1744頻譜分析儀是干什么用的 頻譜分析儀和示波器的區(qū)別
2319頻譜分析儀使用方法 頻譜分析儀的作用
3332Keysight 頻譜分析儀(信號(hào)分析儀)
1885
便攜式頻譜分析儀的優(yōu)勢(shì)
1134頻譜分析儀的主要技術(shù)參數(shù)
2872如何挑選一款合適的便攜式實(shí)時(shí)頻譜分析儀?
371如何合理選擇頻譜分析儀,便攜式頻譜分析儀,手持式頻譜分析儀
456
電子發(fā)燒友App



評(píng)論