采用IP網絡進行語音通信是一種廉價且方便的通信方式。其目前的技術已經為用戶間的通信提供清晰、穩定、低延時的話音質量,同時支持語音、數據、圖像的傳輸和其他多媒體業務。特別對于許多大中型企業來說,由于在各省或不同國家設有機構,每月都會產生巨額的國際、國內長話通信費用,同時由于信息保密的要求,企業往往需要自己構建類似VPN這樣的IP通話網絡以降低通信成本。這樣機構內部會先建立一個自己的電話網絡,同時以VPN或其他方式通過IP網連接出去。整個系統可以有效降低企業的運營成本,提高工作的效率。本文所述的網絡語音處理平臺就是建立在此種方案上,主要通過VoIP網關+模擬話機的方式來實現。其中VoIP網關的主要功能是進行信令處理、以ITU-T提出的H.323協議或IETF提出的SIP協議通信、語音編解碼處理等。
1 結構體系介紹
網絡語音處理平臺的基本工作原理是先將模擬語音信號轉為數字信號,再對輸入的語音數據編碼進行壓縮處理,然后在H.323或SIP協議框架的基礎上,把這些語音數據分組打包,經過IP網絡把數據包送至接收端,接收端再把這些語音數據包串起來,經過解壓處理后,恢復成原來的語音信號,從而達到由互聯網傳送語音的目的。本文將分硬件和軟件兩部分來講述網絡語音平臺的構建。
1.1 硬件部分
整個硬件部分如圖1所示。
整個系統包括語音處理部分和網絡數據處理兩部分,其中語音處理部分又分為FXO和FXS接口電路。FXO接口用于連接PSTN,可模擬電話功能,提供環路關閉功能并檢測來話振鈴。FXS用于連接POT普通電話機,模擬電話局端交換的功能。
在VoIP網關中,FXS電路是在分組網絡上建立去話呼叫與接收來話呼叫的基本接口。在用戶端(CPE)應用中,FXS電路存在于網關中,可提供撥號音、電池電流與振鈴電壓的功能,并檢測來自電話的環路關閉。由于該交換功能處于CPE級,因此不必與PSTN建立直接連接。FXS電路包括CODEC與SLIC(用戶線路接口電路)兩部分。CODEC由ADC與DAC構成。ADC將來自模擬電話的模擬信號轉換為可通過VoIP網絡傳輸的數字信號。DAC將數字信號轉換為模擬電平,以驅動模擬電話。為了實現4kHz的音頻帶寬,ADC的采樣速率通常約為8kHz。SLIC部分則模擬PSTN電壓電平,通過用戶線向共電式話機直流饋電,檢測電話掛機還是摘機,并生成高達120V的振鈴電壓,同時提供過壓保護(Overvoltage Protection)功能,以防止用戶線上的電壓沖擊或過壓而損壞設備。
SLIC芯片采用LEGERITY的LE7947C,在控制器的控制下能模仿電話局局端功能,能對饋電電流進行控制,并提供掛機傳輸功能,如在電話線路處在On-Hook狀態(被呼叫方沒摘機時)提供振鈴信號。監視用戶線通斷狀態,以檢測話機的摘機、掛機、撥號脈沖等用戶線信號,轉送給控制設備,以表示用戶的忙閑狀態和接續要求。SLIC芯片控制的方式如表1所示。這些控制信號接到了IXP421的GPIO上,這樣由IXP421發出控制信號??刂平Y果通過引腳的電平值來表示。
其中開路是指當線路出現故障時,模塊在內部將TIP和RING線斷開。激活是指模塊收到摘機信號后(無論作為主叫還是振鈴時),首先使模塊重新激活,然后開始通話。通話結束后又設為待機狀態。如需掛機傳輸功能,需在振鈴1秒(狀態值為1)后,將狀態值設為3(即011),持續時間為4秒,在此期間模塊可向話機傳送呼叫方ID等信號。待機是指模塊等待主叫摘機或作為被叫振鈴等事件發生。
CODEC芯片采用LEGERITY的T8503。它是A-律/μ-律的PCM編碼器,含有A/D和D/A單元,實現聲音的數字化和重組,并能實現增益控制。CODEC芯片具有兩個通道,每個通道均含有一個針對語音編碼或解碼的濾波器。兩個通道的PCM數據通過PCM同步接口進行接收和發送,并由一對FSXn和FSRn控制兩個通道的幀同步,確保在每個通話時隙進行數據傳輸。
FXO電路部分包括CODEC與數據存取裝置(DAA)。將模擬語音轉換為數字信號,隨后再轉換回來,同時負責數據的傳輸。DAA模擬(POTS)電話功能,其重要作用是去除高電壓直流偏置,將PSTN環路關閉,從而僅傳送來自PSTN的模擬交流信號。并具有極性保護電路,保證電話機與外線連接時能取得極性正確的直流工作電壓。
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所示的模塊結構。
其中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所示。
為了保證狀態機能在不同的狀態之間轉換和方便控制管理各路話音通話的信息。還需要建立一些全局數據結構:
用于保存當前網關中各路話音的配置參數,num表示該路通話的本地號碼和對端號碼,addr表示該路通話對應在DSR內所使用的本地和遠端網絡地址,status記錄本地終端在該通話中處于狀態機中的狀態。設備在加電啟動后,需要按步驟進行一系列的初始化工作。包括一些記錄狀態信息的全局變量,初始化SLIC接口、DSR模塊、網絡接口、信令處理模塊并開啟所需的監控線程,等待控制狀態的變化。
1.2.3 軟件驅動模塊
因為網絡語音底層平臺使用嵌入式Linux做為其操作系統,故需要劃分如圖4所示的幾個模塊并寫出相應的驅動。
以內核態運行的程序主要包括SLIC控制模塊、DSR控制模塊及接口和DSR數據模塊這三部分,它們基本完成了底層所需的功能要求。用戶態的程序都是運行在其上,對其進行管理控制,以實現上層的應用。
(1)SLIC控制模塊
由于整個平臺包含有FXS和FXO接口,故SLIC控制模塊也可以相應地分為兩部分。
對于FXS接口程序部分,其主要是模擬PSTN局端功能,對提供撥號音、電池電流與振鈴電壓和檢測來自電話的環路關閉進行相應地控制。當有控制信息需要輸出時,驅動程序通過向SLIC芯片的C1、C2和C3管腳寫入相應的電平,實現對SLIC的控制(具體數值可參看表1)??梢愿鶕LIC所處的狀態進行劃分,設置如下四種狀態:fxs_ring,fxs_take,fxs_onhook,fxs_offhook。當其處在fxs_ring狀態下就可以為FXS接口提供撥號音、振鈴等信號;當其處在fxs_take狀態下表明用戶剛剛摘機;當其處在fxs_offhook狀態下表明該終端用戶為主動呼叫者,需要處理摘機以后的操作;當其處在fxs_onhook狀態下表明用戶掛機。
相應的,當SLIC有中斷輸入時,中斷處理程序會根據當前的狀態來判斷。如果確定是用戶進行了摘機或掛機操作后,查詢最后一次硬中斷后該路SLIC的
電平,為0則處于摘機狀態,否則處于掛機狀態。這里中斷的處理較為重要。其內容包括:中斷源是由哪個FXS端口發出的,并根據所處的狀態來開啟相應狀態下的定時器,以保證狀態變化間的時間間隔。
對于FXO接口程序部分,其主要是模擬電話機的功能,所以功能相對要簡單些。在程序中主要設定有fxo_ring、fxo_onhook和fxo_offhook這三個狀態。當其處在fxo_offhook狀態下表明用戶摘機。當其處在fxo_onhook狀態下驅動程序就把DAA芯片的
引腳拉高,表明用戶掛機。相應的,當有控制信息需要輸入時,其檢測DAA芯片的
引腳來進行判斷,這里同樣要啟動相應的定時器,來判斷回路上是否有振鈴電平或何時回路上振鈴信號結束等信息。當程序判斷處在fxo_ring狀態下,則表明線路上有振鈴信號并做相關處理。
(2)DSR控制模塊及接口
DSR控制模塊及接口主要實現用戶對串行語音數據通信接口HSS以及底層引擎NPE的控制。既與來自上層應用程序進行信息交互,又為上層應用程序和SLIC硬件之間提供控制接口。與一般的設備驅動一樣,主要包括DSR_open()、DSR_close()、DSR_read()、DSR_write()和DSR_ioctl()這些函數。其中DSR_read()和DSR_write()主要負責從DSR讀取消息和向DSR寫入消息。DSR_ioctl()主要負責控制DSR的相關配置參數讀入與讀出和傳遞SLIC控制信息給底層的SLIC控制模塊。參數包括根據當前所處狀態判斷后所得出的C1、C2和C3管腳寫入相應的電平值、查詢當前SLIC的工作狀態信息、SLIC振鈴信號的產生和停止等。DSR的相關配置參數包括DSR中DSP通道數目、通道編碼器的類型、編解碼器輸出語音數據幀的大小等。
(3)DSR數據模塊
DSR數據模塊主要實現話音數據在內核與用戶態之間的交互。包括從內核中讀取數據,向內核中發送數據。為了有效把握數據傳輸節奏,需要建立一種內部緩存機制。包括從DSR讀取到數據緩存后發送給用戶態的應用程序和用戶態的應用程序向DSR發送數據的緩存。緩存內的數據查詢也是每隔一段時間后再進行的。但注意緩存不應開的過大,以免通話延時的加大。為了消除由于網絡丟包而造成語音信息不完整的問題,DSR數據模塊也建立了相應的機制來控制。
用戶的應用程序主要運行在用戶態,針對DSR模塊和網絡上收發的語音數據和控制信令進行處理操作。以編程實現直接內向呼叫、呼叫轉移網絡、呼叫等待和三方呼叫等功能。對于底層通話平臺來說,主要關心的是處理電話和IP網絡間的銜接問題,這需要做好如下幾個接口:DSR控制接口、DSR數據接口和網絡接口,以實現語音數據收發、通話信令收發和DSR控制消息收發的管理。
網絡接口模塊用來接受網絡上傳遞進來的數據,做出相關處理后將壓縮的語音數據通過DSR數據接口傳遞給內核處理,同時也負責將從DSR數據接口傳遞來的壓縮后的語音數據發送到網絡上。如果從網絡上傳遞進來的數據是通話信令,則在做出相關處理后將具體的控制信息通過DSR控制接口發送給內核,或者根據底層操作的內容把相應的信令信息通過網絡接口發送到網絡上。例如,對DSR的相關控制消息包括打開與關閉DSR編解碼功能、打開與關閉在向電話輸出的電話信令音和開啟與關閉檢測用戶鍵盤撥號等功能。
2 測試
為了保證當前系統能正確工作,需要對其底層功能進行測試。因為編碼壓縮的語音數據由實時傳送協議RTP負責傳遞,故主要采用用戶數據UDP包的形式接收與發送。出于這個角度考慮,可以實現將電話手柄的MIC采集的聲音返回至同一電話手柄的聽筒內。首先編寫一個小程序來實現將話筒收集的語音數據發送至網絡上,同時接受來自網絡的數據并還原成模擬話音。假設網絡上有一臺IP地址為192.168.0.1的主機。其運行一個UDP數據包環回程序負責將網上接收到的UDP數據包轉發回源發送端。開始測試前,先設定一些必要的控制信息,如對方IP地址和語音編解碼方式等。將網線和話筒線連至網口和RJ11接口,撥通IP地址為192.168.0.1主機的電話,看看電話手柄的聽筒內將能夠聽到話筒MIC所收集的話音。如果話音正確,則表明底層的功能已實現。
基于IXP421的網絡語音平臺方案實現了底層的相關功能,而上層的應用較為靈活,且有很強的擴展性,例如實現VPN功能及多媒體業務,還需要開發相應的軟件,本文并未涉及到。隨著網絡語音相關技術的逐步走向成熟,相信會有越來越多的人因之受益。
責任編輯:gt
-
芯片
+關注
關注
456文章
51188瀏覽量
427286 -
控制器
+關注
關注
112文章
16447瀏覽量
179462 -
嵌入式
+關注
關注
5092文章
19178瀏覽量
307696
發布評論請先 登錄
相關推薦
評論