新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于EP7312的嵌入式頻譜分析技術

        基于EP7312的嵌入式頻譜分析技術

        作者:■ 北京交通大學 李文鋒 高金山 李尚鋒 時間:2005-01-17 來源:電子設計應用2004年第11期 收藏

        摘    要:本文以ARM 為核心設計了音頻信號采集系統,研究了嵌入式Linux系統的驅動程序設計和基于、模塊化的應用程序設計問題。該系統能夠對采集的信號進行FFT變換、存儲和顯示。
        關鍵詞:

        本文引用地址:http://www.104case.com/article/4358.htm

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

        圖1  系統構成圖

         圖2  程序流程圖

        圖3  信號的時域圖和頻譜圖

        數據采集電路設計
        本系統由模數轉換模塊、數據處理和控制模塊、顯示模塊這三部分組成,如圖1所示。
        模數轉換芯片采用的是Cirrus Logic公司推出的24位兩通道立體聲模數轉換芯片,其輸出為串行形式,采樣頻率從32kHz 到192kHz。它有主從兩種工作模式,由主從模式選擇開關進行選擇。
        數據處理和控制模塊采用了ARM7系列的嵌入式32位處理器,主頻為74MHz。
        在該設計中,模擬信號經過放大電路可放大為原來的1倍、2倍、4倍或10倍,具體可由放大倍數開關控制。放大倍數通過EP7312的通用端口控制LCD上每個刻度代表的電壓值。CS5341的工作模式為從模式,在該模式下主時鐘、串行數據時鐘和通道選擇時鐘都由EP7312提供,串行數據時鐘的頻率為通道選擇時鐘的64倍,主時鐘頻率為通道選擇時鐘的256倍。當串行數據時鐘處于上升沿時,CS5341輸出一位數據。通道選擇時鐘高電平時左通道有效,低電平時右通道有效。

        系統的軟件設計
        系統的軟件設計包括驅動設計和應用設計兩部分。
        驅動設計
        在嵌入式Linux系統中,設備驅動程序隱藏了各種設備的具體細節,維護著設備的正常工作,在用戶與設備之間起到了橋梁作用。開發設備驅動程序是開發嵌入式系統的重要工作之一。在該系統中,涉及兩個驅動程序:CS5341驅動和LCD驅動。EP7312為LCD的控制提供了良好的支持,驅動程序的具體設計可參照參考文獻3。
        下面介紹CS5341驅動程序的設計。由于CS5341數據采集速度較快,最高達192kHz。為了與其相匹配,我們采用了快速中斷fiq。與普通中斷不同,快速中斷模式有專用的組合寄存器集,因而大大減少了中斷時間。而快速中斷的申請需要用到中斷處理函數的首地址和末地址,為了得到這兩個地址,中斷處理函數必須用匯編來編寫。因此,該驅動有兩個文件構成:主文件cs5341.c和中斷文件fiq.s。在此著重說明主文件中的設備初始化函數cs5341init()和中斷函數。
        int CS5341Init(void)
        {
         ..................................
        //禁止中斷
          INTMR3 = 0x0;
          //設置相關寄存器
          SYSCON3 |= 0x00000008;
          DAI64FS = 0x60B;
          DAIR =0x00220404;
          DAISR =0xFFFFFFFF;
          DAIR |=0x10000;
         ...................................
         //注冊設備
        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:
        //程序末地址
        應用程序設計
        該系統的應用程序設計主要包括數據存儲、數據處理(FFT)和波形顯示。
        數據存儲
        在該模塊中,申請兩塊緩沖區buf和buffer,buf用來存放采集的數據,buffer為臨界資源。程序把數據從buf放入臨界資源buffer中,設置一個共享鎖,實現該模塊、數據的處理和顯示模塊的互斥訪問。
        數據處理模塊
        該模塊采用FFT算法對采集的數據進行處理。
        FFT變換的具體實現如下:
        首先進行碼位倒置,得到FFT運算所需要的輸入序列。然后采用3層循環完成N點FFT(這里N=512)。
        第一層循環:“級”作為第一層循環,N點FFT運算共有M級,這里,我們用m作循環變量,。
        第二層循環:“組”作為第二層循環,第m級的組數為,用j作循環變量,。
        第三層循環:每組里的蝶形單元作為第三層循環,每一組里共有蝶型單元2m個,用i作循環變量,。
        分析上面循環可以得出:第三層循環完成2m個蝶形單元計算;第二層循環使第三層循環進行次,因此,當第二層循環完成時,共進行次蝶形單元計算;第一層循環又使第二層循環進行了M次,因此,當第一層循環完成時,共進行了次蝶型單元計算。
        波形顯示模塊
        因為要把處理前的數據和經過FFT處理后的數據同時顯示在LCD上,所以,把LCD的上半屏分配給未處理的數據,用于顯示時域圖;下半屏用于顯示頻譜圖。為了把波形顯示在特定的區域,需要對數據進行處理。所采集的數據和FFT變換過的數據的范圍均為0~0XFF,0對應于LCD上Y軸坐標的120和210,0XFF對應于LCD上Y軸坐標的30和120。因此,用于顯示時域圖的數據VAL與其在LCD上Y坐標的關系式為:
        Y=120-VAL



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石门县| 德令哈市| 尼玛县| 莫力| 凤庆县| 青海省| 宣化县| 吕梁市| 南通市| 肇庆市| 临江市| 疏附县| 政和县| 吉木萨尔县| 鄱阳县| 温泉县| 松阳县| 滨州市| 绵阳市| 建水县| 威信县| 阿克苏市| 葵青区| 阿合奇县| 山阳县| 临夏市| 聂荣县| 唐河县| 金山区| 黄浦区| 安泽县| 民和| 辛集市| 中卫市| 思南县| 沂水县| 黔西| 福鼎市| 吴堡县| 鞍山市| 小金县|