<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設(shè)計應(yīng)用 > 基于CMX638的語音通信模塊設(shè)計與實現(xiàn)

          基于CMX638的語音通信模塊設(shè)計與實現(xiàn)

          作者: 時間:2016-10-10 來源:網(wǎng)絡(luò) 收藏

          摘要:638是一款專用于通信系統(tǒng)中語音編解碼芯片,講解了638的基本結(jié)構(gòu)、功能,并給出了基于638的語音系統(tǒng)的外圍電路設(shè)計以及與其通信控制器的軟件設(shè)計與實現(xiàn)。實際應(yīng)用表明,該系統(tǒng)可適用許多需要語音處理的通信場合。
          關(guān)鍵詞:CMX638;基帶;聲碼器;

          系統(tǒng)是通信中非常重要的一個部分。如何在有限的頻段下,傳輸更多高質(zhì)量的語音信息,是人們研究的一個重點課題?,F(xiàn)在,對于語音處理芯片有很多,包括CMX618/638和AMBE2000等。和AMBE2000相比,CMX638雖然壓縮的語音速率的選擇沒有AMBE2000多,但是它內(nèi)部包含了語音CODEC模塊,它可以靈活選擇使用內(nèi)部的CODEC或者外部的CODEC,從而在實際的運用中有較大的吸引力,本文以CMX638為基礎(chǔ),設(shè)計和實現(xiàn)了一個語音處理模塊。

          1 CMX638介紹
          如圖1所示,CMX638是一款高性能的全雙工語音編解碼器,CMX638內(nèi)部結(jié)構(gòu)包含3個部分,一個是語音CODEC模塊,主要完成輸入語音和輸出語音的放大、16位的PCM A/D和D/A轉(zhuǎn)換;音碼器主要是將數(shù)字語音信號壓縮成低速率的數(shù)碼語音信號,或者將數(shù)碼語音信號解壓縮成數(shù)字語音信號。CMX638通過C-BUS總線完成和其它模塊數(shù)據(jù)通信和控制。FEC開關(guān)選擇前向糾錯編碼器和解碼器。

          本文引用地址:http://www.ex-cimer.com/article/201610/306540.htm

          a.JPG



          2 語音系統(tǒng)介紹
          圖2為CMX638語音系統(tǒng)的結(jié)構(gòu)圖。在該系統(tǒng)中,采用了該芯片內(nèi)部的CODEC完成16位的PCM A/D和D/A轉(zhuǎn)化,因此不需要外部的CODEC模塊。其輸入輸出通過C-BUS接口和其他模塊進(jìn)行通信。

          b.JPG



          3 硬件設(shè)計
          3.1 電源供電
          由于CMX638包含了模擬電路和數(shù)字電路,其供電也要求有模擬供電AVDD、數(shù)字端口供電IOVDD及數(shù)字供電VDD,其中AVDD電壓為3.3 V,IOVDD的電壓為3.3 V,VDD的電壓為1.8 V。如圖3所示為其供電電路,采用芯片LM1117-3.3,輸入電壓為5 V,輸出.電壓為3.3 V工IOVDD使用。采用同樣的電路,只是將芯片換為LM1117-1.8,就可以實現(xiàn)1.8 V的數(shù)字電路供電。而3.3 V的模擬電路供電可采用L1、C20、C18進(jìn)行濾波,減小數(shù)字電路供電和模擬電路供電之間的干擾。同時,數(shù)字地DGND和模擬地AGND可采用0歐電阻來連接。在實際的電路設(shè)計以及PCB板的制作中,為了防止電磁干擾,在盡量靠近CMX638芯片的每個電源引腳附近加一個0.1μF的電容進(jìn)行濾波。

          c.JPG


          3.2 語音電路
          語音輸入電路采用LM358進(jìn)行放大,如圖4所示。

          d.JPG


          由于采用CMX638內(nèi)部CODEC,其23腳CSCEL需要連接到IOVDD上,CODEC PORT接口中的15腳SDI、17腳SCLK、18腳STRB需要連接到DGND。在此狀態(tài)下,由于CMX638內(nèi)部模擬電路自帶了輸入語音和輸出語音放大電路,因此可以直接將話筒語音采用差分方式接入CMX638的5腳(INPUTP)和6腳(INPUTN),而將其10腳(OUTP)和11腳(OUTN)的輸出語音直接送給揚聲器。在實際的應(yīng)用中,不能將語音輸出兩腳短路。
          3.3 時鐘電路
          對于CMX638,其時鐘類型必須由31腳(XTALSEL1)、32腳(XTALSEL2)、33腳(XTALSEL3)來選擇,而且,31、32、33腳不能由單片機(jī)輸出的邏輯電平來控制,而應(yīng)該直接連接到IOVDD或者DGND。若采用12 MHz時鐘中晶體,則需要將31和33腳接DGND,32腳接IOVDD,27腳(XTAL IN)和28腳(XTALOUT)分別接12 MHz的晶體。同時需要將34腳(ENABXTAL)接高電平,使時鐘電路工作。
          3.4 CBUS接口
          CBUS接口包括42腳(CLK)、43腳(CDATA)、44腳(RDATA)、45腳(CSN)。該接口提供CMX638的控制信息數(shù)據(jù)和傳輸?shù)臄?shù)碼數(shù)據(jù),其操作格式如圖5所示。

          e.JPG


          從控制器寫CMX638寄存器是通過CDATA(Command Data)線寫入,第1個字節(jié)為寄存器地址,后面沒有數(shù)據(jù),或者接一個數(shù)據(jù)字節(jié);讀CMX 638寄存器,首先在CDATA上傳對應(yīng)的寄存器地址,然后從RDATA讀一個數(shù)據(jù)字節(jié)。而進(jìn)行數(shù)碼語音數(shù)據(jù)交換時,其數(shù)據(jù)根式和讀寫寄存器一樣,只是地址位后面有多位數(shù)據(jù)字節(jié)而已。

          4 軟件設(shè)計
          4.1 信號處理流程
          如圖6所示是CMX主要信號處理流程,在(a)中是系統(tǒng)剛啟動時的初始化過程,(b)是系統(tǒng)進(jìn)行編碼過程,(c)是系統(tǒng)進(jìn)行解碼過程。其中休眠狀態(tài)時,要求關(guān)閉解碼和編碼,并將芯片的34腳(ENABXTAL)設(shè)置為低電平,關(guān)閉時鐘電路。需要啟動芯片工作時,需要將芯片的34腳
          (ENABXTAL)設(shè)置為高電平,并至少等27 ms后,在進(jìn)行編碼或者解碼操作。

          f.JPG


          4.2 部分軟件代碼
          CMX638的初始化如下,包含開中斷,設(shè)置工作模式,打開A/D、D/A轉(zhuǎn)換以及配置聲碼器等。
          在控制器中對CMX638工作狀態(tài)處理函數(shù)如下,包含有休眠、激活、編碼、解碼等等。
          g.JPG
          h.JPG
          i.JPG
          j.JPG
          k.JPG
          l.JPG

          5 結(jié)論
          CMX638能夠運用到很多通信的環(huán)境,而且其內(nèi)部包內(nèi)涵了16位A/D、D/A轉(zhuǎn)換,因此不需要外加單獨的codec模塊,并且能夠?qū)崿F(xiàn)多種傳輸速率,全雙工數(shù)據(jù)處理。經(jīng)過實際的測試,該系統(tǒng)能夠適用于需要進(jìn)行語音處理的許多通信系統(tǒng)中。



          關(guān)鍵詞: CMX 語音通信 模塊設(shè)計

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();