《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 业界动态 > 基于Linux系统的VoIP语音接入网关设计与实现

基于Linux系统的VoIP语音接入网关设计与实现

2009-04-10
作者:赵婉芳1,2, 于 京2, 田

??? 摘??要: 提出一種基于Linux操作系統(tǒng)的VoIP語音接入網(wǎng)關(guān)設(shè)計(jì),并給出了具體實(shí)現(xiàn)過程,其中重點(diǎn)闡述了硬件實(shí)現(xiàn)過程。該方案具有很強(qiáng)的擴(kuò)展性,并且將終端和網(wǎng)關(guān)的功能整合為一,適用于改造中小企業(yè)內(nèi)部電話網(wǎng),以較低的價(jià)格從傳統(tǒng)電話網(wǎng)過渡到VoIP電話。?

??? 關(guān)鍵詞: VoIP;? EHPI; Linux

?

??? VoIP(Voice over Internet Protocol)是一種以IP電話為主,在使用了TCP/IP協(xié)議的網(wǎng)絡(luò)上進(jìn)行語音傳輸并推出相應(yīng)的增值業(yè)務(wù)的技術(shù)。VoIP可以在IP網(wǎng)絡(luò)上低成本地傳送語音、傳真、視頻和數(shù)據(jù)等業(yè)務(wù),如統(tǒng)一消息、虛擬電話、虛擬語音/傳真郵箱、查號業(yè)務(wù)、Internet呼叫中心、Internet呼叫管理、電視會議、電子商務(wù)、傳真存儲轉(zhuǎn)發(fā)等。隨著IP網(wǎng)絡(luò)電話技術(shù)的發(fā)展,由最初的只是計(jì)算機(jī)對計(jì)算機(jī)的語音傳輸通信,到后來從普通電話機(jī)到普通電話機(jī)的VoIP網(wǎng)絡(luò)電話實(shí)現(xiàn),使得IP電話使用范圍擴(kuò)大。目前,IP網(wǎng)絡(luò)電話已經(jīng)通過網(wǎng)關(guān)把因特網(wǎng)與傳統(tǒng)電話網(wǎng)聯(lián)系起來,廣泛地采用Internet和全球IP互聯(lián)的環(huán)境,提供比傳統(tǒng)業(yè)務(wù)更多、更好的服務(wù)。用戶可以像使用普通電話一樣,只要有網(wǎng)絡(luò)電話機(jī)就能打因特網(wǎng)的國際長途電話,而通話費(fèi)用遠(yuǎn)遠(yuǎn)低于國際長途電話的費(fèi)用,大大降低了通信成本。隨著VoIP技術(shù)的成熟,IP電話將逐漸取代傳統(tǒng)電話,成為未來電話的發(fā)展趨勢。?

??? 本文設(shè)計(jì)并實(shí)現(xiàn)一種基于Linux操作系統(tǒng)的VoIP網(wǎng)關(guān)設(shè)備。該設(shè)備以AudioCodes AC49012為核心,支持12路壓縮語音通道,擴(kuò)展性強(qiáng),將終端和網(wǎng)關(guān)的功能整合為一個設(shè)備,具有很好的應(yīng)用前景。?

1 基本原理?

1.1系統(tǒng)原理?

??? 該系統(tǒng)主要由CPU、DSP、SLIC及一些外圍設(shè)備組成。CPU的主要功能是對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行處理并將數(shù)據(jù)傳送到以太網(wǎng)。DSP負(fù)責(zé)對語音數(shù)據(jù)進(jìn)行壓縮編碼處理,再將語音數(shù)據(jù)組合成幀傳送給CPU。SLIC負(fù)責(zé)提供DSP與電話線的接口,對數(shù)據(jù)進(jìn)行數(shù)模/模數(shù)轉(zhuǎn)換。另外SLIC芯片給電話線提供驅(qū)動電壓,產(chǎn)生電話機(jī)所需的信號,如振鈴等。系統(tǒng)結(jié)構(gòu)示意圖如圖 1所示。?

?

?

??? 當(dāng)兩個VoIP終端建立語音通道后,語音的處理過程如下:?

??? (1)用戶的聲音被SLIC數(shù)字化后,產(chǎn)生64kb/s PCM數(shù)據(jù)流。PCM數(shù)據(jù)流進(jìn)入DSP后,DSP按編碼要求通過語音壓縮算法對語音信號進(jìn)行壓縮編碼處理,再將語音數(shù)據(jù)按時間分段組合成幀,一般20ms語音數(shù)據(jù)構(gòu)成一個幀。?

??? (2)DSP將壓縮語音數(shù)據(jù)幀傳給CPU,CPU再對語音數(shù)據(jù)幀進(jìn)行處理。CPU將語音數(shù)據(jù)幀加上RTP頭構(gòu)成RTP包,再使用UDP協(xié)議將RTP包傳到以太網(wǎng)上。?

??? (3)對端收到UDP包后,從中取出RTP數(shù)據(jù)包,再將RTP頭部去除得到壓縮語音數(shù)據(jù)幀。CPU將語音數(shù)據(jù)幀傳給DSP解壓。DSP將語音數(shù)據(jù)幀還原為64kb/s的PCM流,通過TDM總線送至SLIC,SLIC將數(shù)字信號轉(zhuǎn)變?yōu)槟M信號發(fā)送到電話機(jī)。?

1.2 AC49012簡介?

??? 語音處理DSP芯片是該VoIP設(shè)備的核心部件,它的選擇至關(guān)重要,在本方案中選擇的是AC49012。該芯片是一款新型的功能強(qiáng)大的語音/傳真/數(shù)據(jù)處理芯片。它最多能處理24個無壓縮通道或12個壓縮通道。該芯片很適合中低密度VoIP設(shè)備,具有擴(kuò)展性強(qiáng)、功耗低、外形尺寸小等優(yōu)點(diǎn)。AC49012對外提供了EHPI、TDM等接口,通過這些接口,AC49012很容易與其他芯片相連。在設(shè)計(jì)產(chǎn)品時,將AC49012與控制處理器和SLIC芯片相連,就可實(shí)現(xiàn)各種語音產(chǎn)品,如IP電話、VoIP網(wǎng)關(guān)、無線和有線網(wǎng)關(guān)、IP PBX等。這樣的結(jié)構(gòu)提高了產(chǎn)品設(shè)計(jì)的靈活性。AC49012的主要功能包括:支持多種碼率的壓縮編碼,如G.711(64kb/s)、G.726(16~40kb/s)、G.727(16kb/s~40kb/s)、G.729AB(8kb/s)、G.723.1(6.3kb/s);支持回聲消除,符合G.168-2002標(biāo)準(zhǔn);自動檢測和切換語音、傳真或數(shù)據(jù)等業(yè)務(wù);支持傳真轉(zhuǎn)發(fā)功能,符合標(biāo)準(zhǔn)T.38;支持加密功能,能對數(shù)據(jù)包進(jìn)行加密;能生成RTP/RTCP包,減輕外部處理器負(fù)荷。?

??? 在該DSP芯片中每一個通道都有如圖2所示的結(jié)構(gòu)。PCM數(shù)據(jù)進(jìn)入DSP后,為了提高語音質(zhì)量,先經(jīng)回聲消除器處理,將其中的回聲衰減。DSP能自動檢測出PCM中的數(shù)據(jù)類型是語音數(shù)據(jù)、帶內(nèi)信令還是傳真數(shù)據(jù)。每一類數(shù)據(jù)都有相應(yīng)的處理模塊。語音數(shù)據(jù)經(jīng)編碼器(Speech Encoder)壓縮成低碼率的數(shù)據(jù)流(該DSP支持多種壓縮編碼,如G.726、G.729等)。傳真數(shù)據(jù)在本地被解析出來后,放在數(shù)據(jù)包中傳輸。最后這些數(shù)據(jù)由CPU打包后發(fā)到網(wǎng)絡(luò)上。相反地,CPU將從網(wǎng)絡(luò)上收到的數(shù)據(jù)包解開后,通過EHPI傳給DSP處理。這些數(shù)據(jù)進(jìn)入DSP后,也會被分類,根據(jù)數(shù)據(jù)包的協(xié)議分類。語音數(shù)據(jù)包經(jīng)解碼器(Decoder)解碼成PCM流,發(fā)送到外部D/A轉(zhuǎn)換器轉(zhuǎn)換成電話信號。傳真數(shù)據(jù)調(diào)制產(chǎn)生PCM流輸出。?

?

?

2 系統(tǒng)硬件設(shè)計(jì)?

??? 系統(tǒng)硬件結(jié)構(gòu)設(shè)計(jì)如圖3所示。系統(tǒng)中主處理器CPU選用Cirrus Logic EP9302芯片。它是一顆SoC芯片,內(nèi)部集成ARM920T的核,帶有16KB指令緩存和16KB數(shù)據(jù)緩存。ARM9核的工作頻率為200MHz,系統(tǒng)總線頻率為100MHz。處理能力完全滿足該系統(tǒng)的需要。該芯片集成了多種硬件模塊,如USB、UART、SPI、SDRAM控制器、10/100Mb/s以太網(wǎng)MAC等。外部數(shù)據(jù)總線上可掛接多種存儲器,如Flash、SDRAM等。系統(tǒng)DSP選用AC49012。SLIC芯片選用LE88221,每片芯片提供兩個通道。該系統(tǒng)有12個通道,所以需要使用6片LE88221芯片,另外,該系統(tǒng)使用4MB NOR Flash存放Bootloader和程序映像(包括Linux內(nèi)核和文件系統(tǒng))。內(nèi)存使用32MB SDRAM。?

?

?

??? CPU和AC49012之間的通信通過EHPI(即Enhanced Host-Port Interface,16位并行接口)來實(shí)現(xiàn)。通過該接口DSP能與Cirrus Logic EP9302芯片直接相連,中間不需要任何邏輯電路轉(zhuǎn)換信號。DSP通過EHPI接口連接到CPU的外部總線上,占用CPU的一段地址空間。這種連接方式可以使一片CPU連接多片DSP芯片。EHPI并行接口的信號如表1所示。?

?

?

??? 其中,當(dāng)CPU訪問DSP所在地址時,連接到DSP的片選信號HCS必須有效。HCNTL0連接到地址線,通過地址來區(qū)分HPIC(控制寄存器)和HPID(數(shù)據(jù)寄存器)。CPU通過寫HPIC控制寄存器給DSP發(fā)中斷信號,同樣,DSP也能給CPU發(fā)送HINT中斷信號,CPU響應(yīng)中斷后清除中斷標(biāo)志位。?

??? SLIC與DSP連接使用TDM(Time Division Multiplex)總線。該總線是時分復(fù)用總線,6片SLIC可以連接到同一條TDM總線上。不同的語音通道使用不同的時隙(Time Slot)。每個時隙的帶寬是64kb/s,就是一個語音通道的帶寬。TDM總線的工作頻率可調(diào),工作頻率越高時隙就越多,支持的語音通道也就越多。?

??? 要使LE88221芯片正常工作,必須初始化內(nèi)部寄存器。LE88221有一個SPI接口用于CPU訪問其內(nèi)部寄存器。通過SPI串行接口CPU可以讀寫SLIC芯片內(nèi)部寄存器來初始化和控制SLIC。SPI接口由DIN(串行數(shù)據(jù)輸入)、DOUT(串行數(shù)據(jù)輸出)、DCLK(數(shù)據(jù)時鐘)和CS(片選信號)組成。CPU發(fā)給SLIC的數(shù)據(jù)有固定的格式,先發(fā)8bit地址,后面緊跟多字節(jié)輸入數(shù)據(jù)或多字節(jié)輸出數(shù)據(jù)(由LE88221輸出)。讀寫操作由地址的最低有效位區(qū)分,即奇地址表示讀出操作,偶地址表示寫入操作。CPU只有一個SPI接口,而該系統(tǒng)中有6片SLIC芯片需要連接,所以需要使用外部CPLD芯片來切換,同一時刻CPU的SPI只連接到一片SLIC芯片。6片SLIC芯片可以共用DIN、DOUT、DCLK這些信號,但它的片選CS信號必須由CPLD切換來確定是否與CPU的SPI片選連接。通過這種機(jī)制,驅(qū)動程序通過控制CPLD來選擇要控制哪片SLIC芯片。?

3 驅(qū)動程序設(shè)計(jì)?

??? 本系統(tǒng)采用的是實(shí)時Linux操作系統(tǒng)。實(shí)時Linux 操作系統(tǒng)源代碼開放,軟件成本較低,具有實(shí)時響應(yīng)能力。此外Linux系統(tǒng)有大量開源的應(yīng)用程序可使用,開發(fā)人員可以通過修改源代碼來進(jìn)行功能的擴(kuò)展,Linux還可以在廣泛的硬件平臺上運(yùn)行,具有很好的可移植性,用戶很容易把應(yīng)用程序從一個Linux平臺移植到另外一個Linux平臺。?

??? 本系統(tǒng)的Linux是在Linux 2.6.10上打?qū)崟r補(bǔ)丁得到的。Linux內(nèi)核和文件系統(tǒng)存放在Flash中。在Linux中使用設(shè)備文件表示設(shè)備,設(shè)備文件放在/dev目錄下。設(shè)備文件與設(shè)備驅(qū)動關(guān)聯(lián),當(dāng)應(yīng)用程序讀寫設(shè)備文件時,系統(tǒng)會將讀寫請求發(fā)給相應(yīng)的設(shè)備驅(qū)動,由驅(qū)動程序去控制芯片完成任務(wù)。該系統(tǒng)中有兩個主要的驅(qū)動程序,DSP驅(qū)動和SLIC驅(qū)動。它們分別對應(yīng)設(shè)備文件“/dev/dsp”和“/dev/slic”。?

??? SLIC驅(qū)動的主要功能是初始化SLIC芯片并提供事件查詢接口。初始化過程是通過寫SLIC芯片的寄存器來配置工作參數(shù),主要包括配置TDM總線工作頻率、每個通道占用的TDM時隙、配置濾波器參數(shù)等。初始化完成后,芯片進(jìn)入正常工作狀態(tài)。應(yīng)用程序通過驅(qū)動提供的接口查詢各種事件,如摘機(jī)、掛機(jī)、告警等事件。通過查詢,應(yīng)用程序能及時了解電話機(jī)狀態(tài)。?

??? DSP驅(qū)動是系統(tǒng)中最重要的驅(qū)動程序,它的主要功能是初始化DSP芯片并提供應(yīng)用程序與DSP通信的接口。在初始化過程中,首先將DSP的固件下載到DSP中,然后配置DSP的工作參數(shù),如選擇編解碼器、語音處理參數(shù)、傳真轉(zhuǎn)發(fā)參數(shù)、信號音參數(shù)等。DSP驅(qū)動可簡單分為兩層:上層實(shí)現(xiàn)與DSP固件的通信,驅(qū)動與DSP固件使用私有數(shù)據(jù)包通信,這層實(shí)現(xiàn)這些私有數(shù)據(jù)包的構(gòu)造和解析;下層實(shí)現(xiàn)EHPI總線的訪問,讀寫DSP中的數(shù)據(jù)。上層生成的數(shù)據(jù)包由下層寫入到DSP中;反之,下層從DSP讀出的數(shù)據(jù)包會傳給上層解析。?

??? 該系統(tǒng)使用ARM核CPU運(yùn)行Linux系統(tǒng),所以要使用針對ARM的GNU交叉編譯工具來編譯驅(qū)動程序。首先,要在一臺運(yùn)行Linux的開發(fā)機(jī)上安裝開發(fā)軟件包,其中包含GNU交叉編譯器、映像工具、調(diào)試工具等;然后配置好開發(fā)機(jī);編譯驅(qū)動程序使用make工具,將生成的驅(qū)動程序拷貝到設(shè)備文件系統(tǒng)中;使用映像工具將設(shè)備文件系統(tǒng)做成映像,再用JTAG調(diào)試器將Linux內(nèi)核和文件系統(tǒng)映像寫入設(shè)備的Flash中;之后就可以啟動設(shè)備,進(jìn)行程序調(diào)試了。另外,為了調(diào)試方便也可以使用NFS文件系統(tǒng),設(shè)備通過網(wǎng)絡(luò)使用開發(fā)機(jī)上存放的設(shè)備文件系統(tǒng)。?

??? 在驅(qū)動程序調(diào)試過程中需要注意以下問題:?

??? (1) TDM時隙設(shè)置。在DSP驅(qū)動和SLIC驅(qū)動中同一通道必須設(shè)置相同的TDM時隙,包括收發(fā)兩個方向(SLIC到DSP、DSP到SLIC),否則SLIC和DSP無法交換數(shù)據(jù)。?

??? (2) CPU訪問EHPI總線的時序。在CPU中設(shè)置EHPI總線時序時,要根據(jù)EHPI總線的時序要求設(shè)置。該方案中CPU的總線頻率較高,設(shè)置EHPI訪問時序時需加入足夠的延時,否則EHPI訪問會出錯。?

??? 該系統(tǒng)采用CPU和DSP分離的結(jié)構(gòu),有較好的擴(kuò)展性。當(dāng)需要增加通道數(shù)量時,只需增加DSP的數(shù)量就可以實(shí)現(xiàn)。CPU主頻較高,有足夠的數(shù)據(jù)處理能力。該設(shè)備試用后證明,設(shè)備成本低,通話效果良好,可取代現(xiàn)在使用的傳統(tǒng)PBX設(shè)備,非常適合改造中小企業(yè)內(nèi)部電話網(wǎng)。?

參考文獻(xiàn)?

[1] 糜正琨.IP網(wǎng)絡(luò)電話技術(shù)[M].北京:人民郵電出版社,?2000.?

[2] 張登銀,張精科.VoIP技術(shù)分析與系統(tǒng)設(shè)計(jì)[M]. 北京:人民郵電出版社,2003.?

[3] 張磊.VoIP 語音技術(shù)及應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2000.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容