<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > IP電話(huà)網(wǎng)關(guān)的語(yǔ)音數據處理

IP電話(huà)網(wǎng)關(guān)的語(yǔ)音數據處理

作者: 時(shí)間:2006-05-07 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:提出了一種集成式IP電話(huà)網(wǎng)關(guān)的實(shí)現方法,分析了語(yǔ)音信號在該網(wǎng)關(guān)中的處理過(guò)程,詳細介紹了語(yǔ)音采樣、播放、壓縮與解壓縮、RTP包的封裝與解包以及IP包的接受和發(fā)送的實(shí)現方法。

本文引用地址:http://dyxdggzs.com/article/242245.htm

關(guān)鍵詞:IP電話(huà)網(wǎng)關(guān) 語(yǔ)音壓縮 RTP協(xié)議

隨著(zhù)IP電話(huà)技術(shù)的飛速發(fā)展,IP電話(huà)的實(shí)現方式正在由PC To PC過(guò)渡到Phone to Phone,在Phone to Phone的實(shí)現方式中,需要所謂的IP電話(huà)網(wǎng)關(guān)來(lái)連接PSTN和因特網(wǎng)。因此IP電話(huà)網(wǎng)關(guān)成為目前計算機和通信領(lǐng)域研究的熱點(diǎn)之一。雖然國內外許多廠(chǎng)商都在以不同的方式開(kāi)發(fā)IP電話(huà)網(wǎng)關(guān),但他們有一個(gè)共同的特點(diǎn),即:幾乎所有IP電話(huà)網(wǎng)關(guān)都采用了自己的專(zhuān)用硬件設備。本文提出了一種采用市場(chǎng)上通用的板卡來(lái)構造一種硬件集成式的IP電話(huà)網(wǎng)關(guān)的方法,并研究了語(yǔ)音數據在該網(wǎng)關(guān)的處理過(guò)程和實(shí)現方法。集成式IP電話(huà)網(wǎng)關(guān)的硬件構成如圖1所示,它是在Pentium Ⅱ PC機基礎上,插入Dialogic公司的D/41E型語(yǔ)音卡、LSI公司的C6200資源卡和D_Link網(wǎng)卡所組成。其中D/41E語(yǔ)音卡用來(lái)完成語(yǔ)音的采樣和播放。C6200資源卡有一塊TI公司的TMS320C6201芯片,用來(lái)完成語(yǔ)音的壓縮和解壓縮以及回聲抵消。Pentium Ⅱ PC用來(lái)實(shí)現H.323協(xié)議棧的主要功能,網(wǎng)卡用來(lái)發(fā)送和接受IP包。下面具體分析語(yǔ)音數據在IP電話(huà)網(wǎng)關(guān)的處理過(guò)程和實(shí)現方法。

1 語(yǔ)音采樣和播放

在該IP電話(huà)網(wǎng)關(guān)中,語(yǔ)音的采樣和播放是由Dialogic公司的D/41E型語(yǔ)音卡來(lái)完成,其中,語(yǔ)音采樣是利用語(yǔ)音卡所提供的錄音函數來(lái)完成的。在實(shí)時(shí)語(yǔ)音通信時(shí),語(yǔ)音數據存入語(yǔ)音采樣緩沖區中,等待語(yǔ)音壓縮線(xiàn)程取出并處理。錄音函數形式如下:

dx_reciottdata (activeChdev,chinfo [activeChdev].iott,tptrec[0],xpbVox,mode);

該函數的輸入參數的含義如下:

int chdev 語(yǔ)音通道的設備句柄

DX_IOTT *iott 指向語(yǔ)音數據目的地的指針

DV_TPT *tptp 指向終止參數塊的指針

DX_XPB *xpbp 指向I/O傳輸塊的指針

unsigned short mode 錄音所采取的方式

iott是一種DX_IOTT類(lèi)型的數據結構,該數據結構中的io_type可取值IO_DEV和IO_MEM,分別用于指定語(yǔ)音數據存入文件還是存入緩沖區中。Io_type的另一類(lèi)取值可為IO_CONT,IO_LINK或DX_IOTT,用于指定語(yǔ)音數據目的地的結構。如果io_type取值IO_DEV,則io_fhandle的值應為一個(gè)文件的句柄;如果io_type取值IO_MEM,則io_fhandle的值應為0,此時(shí),io_bufp指向存放語(yǔ)音數據的緩沖區的起始地址。io_offset為地址偏移量。io_length用于指定文件或緩沖區的大小。如果io_type取值IO_LINK,則io_nextp指向下一個(gè)存放語(yǔ)音數據的DX_IOTT數據結構,而io_pre vp指向上一個(gè)存放語(yǔ)音數據的DX_IOTT數據結構。DX_IOTT的數據結構定義如下:

typedef struct dx_iott {

unsigned short io_type; /*Transfer type*/

unsigned short rfu; /*Reserved*/

int io_fhandle; /*File descriptor*/

char* io_bufp; /*Pointer to base memory*/

unsigned long io_offset; /*File/Buffer offset*/

long int io_length; /*Length of data*/

DX_IOTT io_nextp; /*Ptr to next DX_IOTT if IO_LINK set*/

DX_IOTT io_prevp; /*(Optional) Ptr to previous DX_IOTT*/

}DX_IOTT;

DV_TPT數據結構用于指定終止某語(yǔ)音通道上函數的條件。具體如下:

typedef struct DV_TPT {

unsigned short tp_type; /*Flags describing this structure*/

unsigned short tp_termno; /*Termination parameter number */

unsigned short tp_length; /*Length of terminator*/

unsigned short tp_flags; /*Term.parameter attributes flag*/

unsigned short tp_data; /*Optional additional data*/

unsigned short rfu; /*Reserved for future use*/

struct DV_TPT tp_nextp; /Pointer to next term.parameter if*/

/*IO_LINK is set*/

} DV_TPT;

DX_XPB數據結構用于指定用何種算法進(jìn)行錄音等。WfileFormat可取值FILE_FORMAT_VOX和FILE_FORMAT_WAVE,分別代表用VOX文件格式和WAV文件格式存放語(yǔ)音數據。WDataFormat可取值DATA_FORMAT_DIALOGIC_ADPCM、DATA_FORMAT_MULAW、DATA_FORMAT_ALAW、DATA_FORMAT_PCM,分別代表用ADPCM、μ率、A率或線(xiàn)性PCM的算法對聲音進(jìn)行采樣。NSamplesPerSec可取值DRT_6kHz、DRT_8kHz、DRT_11kHz,用于指定采樣頻率分別為6kHz、8kHz或11kHz。NBitsPerSample可取值4和8,為每個(gè)樣本點(diǎn)的位數。如果wDataFormat采用ADPCM算法,則nBitsPerSample只能取4。DX_XPB的數據結構定義如下:

Typedef struct {

USHORT wFileFormat; //file format

USHORT wDataFormat; //audio data format

ULONG nSamplesPerSec; //sampling rate

ULONG nBitsPerSample; //bits per sample

} DX_XPB;

mode用于指定錄音的方式,可取值PM_TONE、EV_SYNCH或EV_ASYNCH。取值PM_TONE代表在錄制前先播放一個(gè)200ms的提示音。取值為EV_SYNCH時(shí),代表用同步的方式執行語(yǔ)音采樣,在同一線(xiàn)程中的其它功能將被暫掛起,直到該同步函數執行完后才被釋放。取值為EV_ASYNCH代表是用異步的方式執行語(yǔ)音采樣,在同一線(xiàn)程中的其它功能仍可照常進(jìn)行。

語(yǔ)音播放是利用語(yǔ)音卡播放函數來(lái)完成的。該函數所用的參數與錄音函數的參數類(lèi)似。播放函數的形式如下:

dx_playiottdata (activeChdev,chinfo [activeChdev]iott,tptplay[0],xpbVox,mode)

2 電話(huà)狀況偵測

電話(huà)狀總值偵測功能主要是判斷電話(huà)線(xiàn)狀況,如判斷現在電話(huà)機話(huà)筒是拿起或放下,有沒(méi)有撥號音,是否電話(huà)正忙或沒(méi)有人接電話(huà)。在異步方式下,采用語(yǔ)音卡的ATDX_CPTERM()來(lái)檢測某語(yǔ)音通道上電話(huà)呼叫的返回值。在同步方式下無(wú)需該步驟。當返回值為CR_CEPT時(shí),表示特殊通知音,即撥了無(wú)效的電話(huà)號碼或遇到了其它特殊問(wèn)題。當返回值為CR_NORB時(shí),表示無(wú)回鈴音,即檢測不到可識別的信號模式。當返回值為CR_NOANS時(shí),表示無(wú)應答,即線(xiàn)已撥通,但無(wú)應答。當返回值為CR_NOANS時(shí),表示忙音。當返回值為CR_CNCT時(shí),還可利用ATDX_CONNTYPE(chdev)函數檢測連接音的類(lèi)型。返回值可能是CON_CAD,CON_LPC,CON_PVD或CON_PAMD,分別代表韻律連接音,循環(huán)流連接音,陽(yáng)機音連接或陽(yáng)極應答機連接音。

進(jìn)行呼叫時(shí),先用ATDX_HOOKST(activeChdev)函數獲取電話(huà)機的狀態(tài)。如果是掛機狀態(tài),則用dx_sethook(activeChdev,DX_OFFHOOK,EV_SYNC)將電話(huà)機置為摘機狀態(tài)。然后給呼叫函數傳遞所需的參數。參數是通過(guò)DX_CAP這個(gè)數據結構來(lái)傳遞的,其定義為:

typedef struct DX_CAP {

unsigned short ca_nbrdna; //# of rings before no answer.

unsigned short ca_stdely; //Delay after dial before analysis

unsigned short ca_cnosig; //Duration if no signal time out delay

unsigned short ca_lcdly; //Delay after dial before lc drop connect

unsigned short ca_lcdly 1; //Delay after lc drop con. Before msg.

unsigned short ca_hedge; //Edge of answer to send connect message

unsigned short ca_cnosil; //Initial continuous noise timeout delay

unsigned short ca_loltola; //% acceptable pos.dev of short low sig.

unsigned short ca_lo l tolb; //% acceptable neg.dev of short low sig.

unsigned short ca_lo2tola; //% acceptable pos.dev of long low sig.

unsigned short ca_lo2tolb; //% acceptable neg.dev of long low sig.

unsigned short ca_hiltola; //% acceptable pos.dev of high signal.

unsigned short ca_hiltolb; //% acceptable neg.dev of high signal

unsigned short ca_lo 1 bmax; //Maximum interval for shrt low for busy.

unsigned short ca_lo 2 bmax; //Maximum interval for long low for busy.

unsigned short ca_hi 1 bmax; //Maximum interval for lst high for busy

unsigned short ca_nsbusy; //Num.of highs after nbrdna busy check.

unsigned short ca_logltch; //Silence deglitch duration.

unsigned short ca_higltch; //Non-shlence deglitch duration.

unsigned short ca_lo 1 rmax; //Max.short low dur.of double ring

} DX_CAP;

該數據結構中有大量的參數項,一般使用缺省值即可。需要修改時(shí),可通過(guò)程序提供的呼叫對話(huà)框來(lái)修改。呼叫的電話(huà)號碼也在該對話(huà)框中指定。

3 語(yǔ)音數據壓縮與解壓縮

G.723.1、G.729均為ITU H.323所推薦的語(yǔ)音編碼標準。其G.723.1采用ACELP和MP_MLQ算法,比特率為6.3kbps和5.3kbps。G.729采用CS_ACELP算法,比特率為8kbps。由于G.723.1無(wú)論是在帶寬還是語(yǔ)音質(zhì)量都優(yōu)于G.729,因此,一般在IP電話(huà)中普遍使用G.723.1語(yǔ)音壓縮標準。

在集成式IP電話(huà)網(wǎng)關(guān)中,語(yǔ)音的壓縮是由C6200資源卡上的TMS320C6201 來(lái)完成。G.723.1編碼器的輸入信號是8kHz的16位線(xiàn)性PCM碼,由語(yǔ)音卡采樣的語(yǔ)音信號包括8kHz的8位線(xiàn)性PCM碼在內的多種形式,在輸入到G.723.1編碼器之前,需要進(jìn)行轉換。相應地,解碼器的輸出語(yǔ)音信號也應轉化為語(yǔ)音卡能識別的格式數據流。Dialog D/4E語(yǔ)音卡只識別ADPCM碼,其它高級一線(xiàn)的語(yǔ)音卡如D/41ESC語(yǔ)音卡既可識別ADPCM碼,也能識別線(xiàn)性PCM碼。編碼器每30ms處理一幀數據,每幀包含240個(gè)樣本點(diǎn),每個(gè)樣本點(diǎn)占16位。G.723.1編碼/解碼器的處理流程大致過(guò)程如下:

每一幀首先通過(guò)高通濾波器,去除直流成分,然后被分為4個(gè)子幀,每個(gè)子幀包括60個(gè)采樣點(diǎn)。每個(gè)子幀被送入一個(gè)10階線(xiàn)性預測編碼器,計算LPC系數。最后一個(gè)子幀的LPC系數采用預測分裂矢量量化器(PSVQ)量化。量化前的LPC系數用來(lái)建立短時(shí)感覺(jué)加權濾波器,整幀信號通過(guò)它得到感覺(jué)加權語(yǔ)音信號。對于每?jì)蓚€(gè)子幀,用感覺(jué)加權后的語(yǔ)音信號來(lái)計算開(kāi)環(huán)基音周期,基音周期的搜索范圍在18和145之間。對于每一個(gè)子幀,運用估計的基音周期建立諧波噪聲成形濾波器(Harmonic Noise Shaping filter)。LPC合成濾波器、共振峰感覺(jué)加權濾波器和諧波噪聲成形濾波組成一個(gè)聯(lián)合濾波器,然后可以得到該濾波器的沖激響應。運用基音周期估計和沖激響應計算閉環(huán)基音周期。采用五階基音預測器,以開(kāi)環(huán)基音周期為中心,作小范圍內閉環(huán)搜索,得到精確的基音周期,然后將基音預測器的貢獻從初始的目標矢量中扣除。最后,進(jìn)行非周期性的激勵信號的估計。對于高碼率6.3kbps,采用多脈沖最大似然量化激勵(MP_MLQ);對于低碼率5.3kbps,采用代數碼本激勵(ACELP)。

4 RTP包的形成與解包

RTP包的形成與解包是由網(wǎng)關(guān)中的主CPU(Pentiun Ⅱ)來(lái)完成。RTP是IEFT的提議標準RFC1890。它是一個(gè)獨立于應用程序的協(xié)議規范,在具體應用中可有不同的獨立框架。每個(gè)RTP數據包都由一個(gè)頭部和一個(gè)有效數據部組成。有效數據部中放置壓縮后的語(yǔ)音數據。RTP包頭的前12個(gè)字節是固定的,其格式如圖2所示。

在RTP包頭中,標記M占用1比特位,用來(lái)指明語(yǔ)音數據的邊界。PT占7比特位,指明語(yǔ)音數據的壓縮類(lèi)型。Sequence number占16比特位,是一個(gè)正整數的序列號。每發(fā)送一個(gè)RTP數據包,序列號就加1。接收端可通過(guò)序列號監測數據包傳輸過(guò)程中的丟包情況以及失序情況。序列號的初始值是隨機分配的。Timestamp是時(shí)間戳,占32比特位,描述RTP包中語(yǔ)音數據的采樣時(shí)刻,主要用于同步和計算時(shí)延。Synchronization source identifier是同步資源標識符SSRC,占32比特位,用于標識同步資源。RTP打包過(guò)程如圖3所示。

如果是第一次生成RTP包,則序列號的初值為一隨機數而不是0。這樣做的目的是為了通信過(guò)程中的安全性。SSRC標識符是一個(gè)32位的隨機數。在一個(gè)RTP會(huì )話(huà),不允許兩個(gè)SSRC有相同的值。RTP解包過(guò)程是RTP打包過(guò)程的逆過(guò)程,在此不再贅述。

5 IP包的發(fā)送與接收

利用H.323協(xié)議棧軟件包可以生成符合H.323協(xié)議的API函數。在程序中,先執行mcInitialize()和mcSetEventHandler()建立H.245控制信道,然后執行mcOpenCall()函數以建立H.225.0呼叫信令信道。在mcOpenCall()函數的參數中可以設置所選的音頻編解碼協(xié)議。所選的音頻編解碼協(xié)議包括G.711協(xié)議(必選)、G.722、G.723.1、G.728或G.729協(xié)議。當H.245控制信道和H.225.1呼叫信令信道成功建立后,使用mcSendAudio()函數發(fā)送包含壓縮語(yǔ)音數據的IP包。當通話(huà)結束后,使用mcCloseCall()函數關(guān)閉H.225.0呼叫信令信道和H.245控制信道。

本文提出的集成式IP電話(huà)網(wǎng)關(guān)具有硬件結構簡(jiǎn)單、維護方便、升級容易等優(yōu)點(diǎn),并具有很高的性能價(jià)格比,更有價(jià)值的是拓寬了設計IP電話(huà)網(wǎng)關(guān)的設計思想。另外,本文還詳細地給出了語(yǔ)音在網(wǎng)關(guān)中的各個(gè)階段的處理過(guò)程和實(shí)現方法,其中有關(guān)語(yǔ)音壓縮和回聲抵消的處理,是網(wǎng)關(guān)中語(yǔ)音的關(guān)鍵技術(shù),涉及到網(wǎng)關(guān)的的運行效率、壓縮算法的優(yōu)化、語(yǔ)音質(zhì)量的提高和噪聲的消除等技術(shù)問(wèn)題。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>