新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式Linux的網絡語音平臺的設計與構建

        基于嵌入式Linux的網絡語音平臺的設計與構建

        作者: 時間:2009-04-09 來源:網絡 收藏

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

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

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

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

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

        linux相關文章:linux教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 蓝田县| 玛多县| 名山县| 靖江市| 潜江市| 棋牌| 绥化市| 梁平县| 都兰县| 酉阳| 乌兰察布市| 嘉兴市| 辉县市| 江门市| 钟祥市| 双峰县| 南雄市| 绩溪县| 鄂伦春自治旗| 新邵县| 宣城市| 荃湾区| 汝阳县| 拜泉县| 泸水县| 东台市| 耿马| 德庆县| 乌兰县| 友谊县| 百色市| 衡水市| 龙岩市| 元阳县| 临城县| 连城县| 濮阳县| 郎溪县| 东台市| 休宁县| 通州市|