基于嵌入式Linux的網絡語音平臺的設計與構建
FXO部分電路主要采用SILICON LABS公司的SI3016和SI3021。SI3016為一個DAA電路,能為線路上的信號提供光電隔離和2/4線轉換功能,以滿足編解碼與數字交換對四線傳輸的要求。并且能夠實現對線路上的振鈴信號、呼叫方ID和極性反轉檢測等功能。SI3021一方面提供直接連接DSP的通信接口,另一方面也提供控制接口。電路可工作于On-Hook(電話線可供使用)和Off-Hook(電話線忙碌)這兩種狀態下,通過設定SI3021的




主處理器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所示的模塊結構。

其中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教程
評論