色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于EP7312的嵌入式頻譜分析技術(shù)

          基于EP7312的嵌入式頻譜分析技術(shù)

          作者:■ 北京交通大學(xué) 李文鋒 高金山 李尚鋒 時(shí)間:2005-01-17 來源:電子設(shè)計(jì)應(yīng)用2004年第11期 收藏

          摘    要:本文以ARM 為核心設(shè)計(jì)了音頻信號(hào)采集系統(tǒng),研究了嵌入式Linux系統(tǒng)的驅(qū)動(dòng)程序設(shè)計(jì)和基于、模塊化的應(yīng)用程序設(shè)計(jì)問題。該系統(tǒng)能夠?qū)Σ杉男盘?hào)進(jìn)行FFT變換、存儲(chǔ)和顯示。
          關(guān)鍵詞:;;;

          本文引用地址:http://cafeforensic.com/article/4358.htm

          在工程應(yīng)用中,通過數(shù)字采集系統(tǒng)對信號(hào)進(jìn)行采集和顯示,可以獲取直觀的時(shí)域波形。但往往人們還需要從時(shí)域信息中提取出信號(hào)的其它特征,如信號(hào)的頻域信息。本設(shè)計(jì)通過數(shù)據(jù)采集電路對模擬信號(hào)進(jìn)行采集,采用512點(diǎn)的時(shí)間抽取基2 FFT算法對采集的數(shù)據(jù)進(jìn)行處理,然后在LCD上顯示其頻譜曲線。系統(tǒng)構(gòu)建于嵌入式Linux操作系統(tǒng)之上,具有嵌入式設(shè)備體積小、成本低、功耗低等特點(diǎn),可便捷地進(jìn)行語音采集、顯示、處理和聲音信號(hào)的,適用于環(huán)境監(jiān)測及故障診斷等場合。

          圖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)換芯片,其輸出為串行形式,采樣頻率從32kHz 到192kHz。它有主從兩種工作模式,由主從模式選擇開關(guān)進(jìn)行選擇。
          數(shù)據(jù)處理和控制模塊采用了ARM7系列的嵌入式32位處理器,主頻為74MHz。
          在該設(shè)計(jì)中,模擬信號(hào)經(jīng)過放大電路可放大為原來的1倍、2倍、4倍或10倍,具體可由放大倍數(shù)開關(guān)控制。放大倍數(shù)通過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è)備之間起到了橋梁作用。開發(fā)設(shè)備驅(qū)動(dòng)程序是開發(fā)嵌入式系統(tǒng)的重要工作之一。在該系統(tǒng)中,涉及兩個(gè)驅(qū)動(dòng)程序:CS5341驅(qū)動(dòng)和LCD驅(qū)動(dòng)。EP7312為LCD的控制提供了良好的支持,驅(qū)動(dòng)程序的具體設(shè)計(jì)可參照參考文獻(xiàn)3。
          下面介紹CS5341驅(qū)動(dòng)程序的設(shè)計(jì)。由于CS5341數(shù)據(jù)采集速度較快,最高達(dá)192kHz。為了與其相匹配,我們采用了快速中斷fiq。與普通中斷不同,快速中斷模式有專用的組合寄存器集,因而大大減少了中斷時(shí)間。而快速中斷的申請需要用到中斷處理函數(shù)的首地址和末地址,為了得到這兩個(gè)地址,中斷處理函數(shù)必須用匯編來編寫。因此,該驅(qū)動(dòng)有兩個(gè)文件構(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è)計(jì)
          該系統(tǒng)的應(yīng)用程序設(shè)計(jì)主要包括數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理(FFT)和波形顯示。
          數(shù)據(jù)存儲(chǔ)
          在該模塊中,申請兩塊緩沖區(qū)buf和buffer,buf用來存放采集的數(shù)據(jù),buffer為臨界資源。程序把數(shù)據(jù)從buf放入臨界資源buffer中,設(shè)置一個(gè)共享鎖,實(shí)現(xiàn)該模塊、數(shù)據(jù)的處理和顯示模塊的互斥訪問。
          數(shù)據(jù)處理模塊
          該模塊采用FFT算法對采集的數(shù)據(jù)進(jìn)行處理。
          FFT變換的具體實(shí)現(xiàn)如下:
          首先進(jìn)行碼位倒置,得到FFT運(yùn)算所需要的輸入序列。然后采用3層循環(huán)完成N點(diǎn)FFT(這里N=512)。
          第一層循環(huán):“級”作為第一層循環(huán),N點(diǎn)FFT運(yùn)算共有M級,這里,我們用m作循環(huán)變量,。
          第二層循環(huán):“組”作為第二層循環(huán),第m級的組數(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)過FFT處理后的數(shù)據(jù)同時(shí)顯示在LCD上,所以,把LCD的上半屏分配給未處理的數(shù)據(jù),用于顯示時(shí)域圖;下半屏用于顯示頻譜圖。為了把波形顯示在特定的區(qū)域,需要對數(shù)據(jù)進(jìn)行處理。所采集的數(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í)域圖的數(shù)據(jù)VAL與其在LCD上Y坐標(biāo)的關(guān)系式為:
          Y=120-VAL



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉