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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于嵌入式Linux的網(wǎng)絡(luò)語音平臺的設(shè)計與構(gòu)建

          基于嵌入式Linux的網(wǎng)絡(luò)語音平臺的設(shè)計與構(gòu)建

          作者: 時間:2009-04-09 來源:網(wǎng)絡(luò) 收藏

            FXO部分電路主要采用SILICON LABS公司的SI3016和SI3021。SI3016為一個DAA電路,能為線路上的信號提供光電隔離和2/4線轉(zhuǎn)換功能,以滿足編解碼與數(shù)字交換對四線傳輸?shù)囊?。并且能夠?qū)崿F(xiàn)對線路上的振鈴信號、呼叫方ID和極性反轉(zhuǎn)檢測等功能。SI3021一方面提供直接連接DSP的通信接口,另一方面也提供控制接口。電路可工作于On-Hook(電話線可供使用)和Off-Hook(電話線忙碌)這兩種狀態(tài)下,通過設(shè)定SI3021的引腳電平的高低來控制:為高表示處于On-Hook狀態(tài),可以接收或發(fā)起一個呼叫;為低表示處于Off-Hook狀態(tài),電話線忙碌。當(dāng)線路上有振鈴信號時通過引腳表示。并可以通過配置M1和M0腳來選定串行數(shù)據(jù)接口的工作模式。整個還配有CPLD電路,是為了控制各個電話接口,并協(xié)調(diào)各端口間的通信。
            主處理器IXP421是INTEL公司IXP42x系列的處理器,它在VoIP應(yīng)用方面具有自己的特點。如提供了兩個高速同步串口HSS, 同時含有高速處理引擎NPE,在Xscale的配合下它可以實現(xiàn)DSP等高級數(shù)據(jù)處理的應(yīng)用。并配有Xscale的DSP軟件庫,支持2~4路信號的處理。在處理方面,IXP421集成有10~100兆MAC,通過MII/RMII接口連接通用PHY芯片,并連至IP網(wǎng)絡(luò)。
          1.2 軟件部分
            軟件可從功能上或驅(qū)動模塊上劃分,下面將從以上兩個方面進(jìn)行分析。
          1.2.1 軟件功能模塊
            從功能上可劃分如圖2所示的模塊結(jié)構(gòu)。

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

          其中DSR模塊是IXP421進(jìn)行底層數(shù)據(jù)處理的模塊,它主要采用由INTEL提供的DSR(DSP software release)軟件庫。一方面,它與上層應(yīng)用程序進(jìn)行通信,傳遞數(shù)據(jù)或響應(yīng)來自上層的控制消息。另一方面,它與底層接口進(jìn)行通信與控制。
            編碼部分負(fù)責(zé)進(jìn)行編碼和對從HSS到IP接口的數(shù)據(jù)分組打包,提供對G.711等音頻標(biāo)準(zhǔn)的支持,并提供有增益控制功能的自動等級控制ALC單元和區(qū)分背景噪聲的VAD功能。并將多個幀合并成一個IP分組包。對語音包以特定的幀長進(jìn)行壓縮編碼,壓縮后的語音包送入網(wǎng)絡(luò)處理單元。網(wǎng)絡(luò)處理單元為語音添加包頭、時標(biāo)和其他信息后,把數(shù)據(jù)放在可變長的數(shù)據(jù)報或分組中,然后給每個數(shù)據(jù)報附帶尋址和控制信息,并通過網(wǎng)絡(luò)發(fā)送到目的地。
            相對于解碼部分負(fù)責(zé)把從IP網(wǎng)絡(luò)接收的語音分組包進(jìn)行打包并轉(zhuǎn)成語音數(shù)據(jù)流發(fā)送至HSS接口。類似于編碼部分,解碼部分也包含G.711和G.729數(shù)據(jù)處理和ALC處理單元。不同的是其包含產(chǎn)生適當(dāng)背景噪聲的CNG單元、消除由于網(wǎng)絡(luò)丟包而造成語音信息不完整問題的PLC單元和控制從IP網(wǎng)絡(luò)到HSS接口數(shù)據(jù)傳輸節(jié)奏的JitterBuffer單元。
            電話信號音監(jiān)測模塊負(fù)責(zé)監(jiān)控300~3500Hz的電話信號音,如DTMF信號等。主要是采用快速傅立葉算法FFT來進(jìn)行分析和判斷。電話信號音產(chǎn)生模塊則負(fù)責(zé)產(chǎn)生相應(yīng)的電話信號音。而網(wǎng)絡(luò)節(jié)點是連接HSS端口與編解碼等部分的程序模塊,它把需要從HSS端口發(fā)送的數(shù)據(jù)放入HSS發(fā)送緩沖區(qū),或把需要從HSS端口接收的數(shù)據(jù)放入HSS接收緩沖區(qū)內(nèi)。
          1.2.2 狀態(tài)機的結(jié)構(gòu)
            為了模擬通常狀態(tài)下的電話機工作流程,需要相應(yīng)地建立幾種不同的狀態(tài),并實現(xiàn)不同狀態(tài)的轉(zhuǎn)換。一般通話雙方有空閑、撥號、發(fā)送信令、回應(yīng)、建立連接和斷開連接等狀態(tài),故可以定義如下幾個狀態(tài)值:call_idel、call_dial、call_cancel、call_invite、call_ack、call_connect、call_bye等。例如用戶摘機事件發(fā)生后會有中斷產(chǎn)生,若該路終端目前的狀態(tài)為call_ack時,表明該終端用戶為被動接收者,且已接收到invite信令并等待用戶摘機。故此時狀態(tài)轉(zhuǎn)為call_connect并進(jìn)行相關(guān)處理。而當(dāng)該路終端目前的狀態(tài)不為call_ack時,表明該終端用戶為主動呼叫者,準(zhǔn)備撥號撥打電話。此時狀態(tài)轉(zhuǎn)為call_dial,話筒中產(chǎn)生等待音,DSR模塊開始等待用戶撥號。當(dāng)用戶結(jié)束撥號后狀態(tài)轉(zhuǎn)為call_invite并進(jìn)行相關(guān)處理。大致流程如圖3所示。

          為了保證狀態(tài)機能在不同的狀態(tài)之間轉(zhuǎn)換和方便控制管理各路話音通話的信息。還需要建立一些全局?jǐn)?shù)據(jù)結(jié)構(gòu):
            struct call_params{
             unsigned char local_num;
             unsigned char remote_num;
             unsigned char local_addr;
             unsigned char remote_addr;
             unsigned char status;
            };
            用于保存當(dāng)前網(wǎng)關(guān)中各路話音的配置參數(shù),num表示該路通話的本地號碼和對端號碼,addr表示該路通話對應(yīng)在DSR內(nèi)所使用的本地和遠(yuǎn)端網(wǎng)絡(luò)地址,status記錄本地終端在該通話中處于狀態(tài)機中的狀態(tài)。設(shè)備在加電啟動后,需要按步驟進(jìn)行一系列的初始化工作。包括一些記錄狀態(tài)信息的全局變量,初始化SLIC接口、DSR模塊、網(wǎng)絡(luò)接口、信令處理模塊并開啟所需的監(jiān)控線程,等待控制狀態(tài)的變化。
          1.2.3 軟件驅(qū)動模塊
            因為網(wǎng)絡(luò)語音底層使用LINUX做為其操作系統(tǒng),故需要劃分如圖4所示的幾個模塊并寫出相應(yīng)的驅(qū)動。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程




          評論


          相關(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); })();