999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于XDAIS標準G.729A算法的VoIP語音網關設計

2014-09-10 11:19:21張云勇燕飛
移動通信 2014年14期
關鍵詞:程序優化

張云勇+燕飛

針對VoIP交換機語音網關的需求,實現了基于XDAIS標準的G.729A算法。結合TI DSP處理器C55x的特點對算法進行優化,實現單片TMS320VC5510中12路語音編解碼,在此基礎上完成了支持96路話音的VoIP語音網關的設計,并已成功應用到多種型號的軍用語音交換機中。

DSP XDAIS G.729A VoIP 語音網關

Design of VoIP Voice Gateway Based on G.729A Algorithm of XDAIS

ZHANG Yun-yong1, YAN Fei2

(1. China Electronics Technology Group Corporation No.7 Research Institute, Guangzhou 510310, China;

2. Sichuan Electric Vocational and Technical College, Chengdu 610072, China)

The G.729A algorithm based on XDAIS is realized to satisfy the demands for the voice gateway of VoIP switch. The algorithm is optimized combined with C55X platform of TI DSP processor to realize 12-channel voice encoding and decoding in a single TMS320VC5510. Based on this result, a VoIP voice gateway supporting 96-channel voice is completed, and it has applied to military voice switches with several types.

DSP XDAIS G.729A VoIP voice gateway

1 引言

隨著互聯網通信的發展,VoIP(Voice over Internet Protocol,互聯網協議的語音承載)技術發展到現在已經相當成熟,其實質是一種利用終端對語音數據進行采集及還原,由IP網絡傳輸分組語音數據包的語音通信技術。語音壓縮編碼是VoIP技術的重要組成部分,ITU-T(國際電信聯盟電信標準化部)定義的G.729、G.723是VoIP的主要編碼格式。然而傳統的電話交換網絡以其話音質量好、延時小等特點仍然不可替代,因此VoIP交換機需要與PSTN(Public Switched Telephone Network,公共交換電話網絡)互聯。故通常的VoIP交換機需要大容量的語音網關單元實現語音編解碼功能。相對于G.729,G.729A進一步降低了算法復雜度,實際應用較廣。本文討論基于TI(德州儀器)公司的DSP(Digital Signal Processor,數字信號處理器)C55x平臺上實現XDAIS(eXpressDSP Algorithm Interface Standard,eXpressDSP算法接口標準)架構的G.729A算法及其優化,在此基礎上給出了VoIP大容量交換機語音網關的設計方案。

2 XDAIS架構的G.729A算法實現

為了便于第三方廠商開發通用DSP算法程序,TI制定了XDAIS程序架構。該架構可解決算法模塊間資源共享及程序兼容性問題,使得在同一DSP上實現不同算法或相同算法的多通道應用更容易。為了實現G.729A算法在多通道語音網關上的應用,按照XDAIS程序架構對算法進行封裝是非常有效的方法。

2.1 XDAIS架構

XDAIS標準架構示意圖如圖1所示:

圖1 XDAIS標準架構示意圖[1]

XDAIS標準定義了三層規則:第一層是包含了所有DSP算法編程適用的通用編程規則,如C調用、可重入等;第二層規則使得所有算法可以在單一DSP系統上協調地運行,包括程序的封裝、標識、命名、內存管理等;第三層規則與使用的DSP系列硬件資源相關,包括中斷、內存、寄存器等。第三層以下是各廠商開發的算法,XDAIS對此不作規定[1]。

符合XDAIS標準的算法必須實現一個標準接口,即IALG接口。該接口提供的功能包括對系統存儲資源的管理、算法實例的建立、初始化和終止對象。這些功能體現在一個IALG_Fxns的結構體中,也稱V表,在這個結構體中定義了算法接口需要的標準函數,其中除了algAlloc()、a1gInit()和algFree()是必須的外,其它的函數是可選的。algAlloc()實現內存分配;algInit()用來初始化算法實例對象;algFree()在銷毀算法實例對象后釋放存儲空間。除了IALG,XDAIS還要定義一個算法實例接口,該接口包含了算法的實現,是算法接口的一個實例[2]。算法提供者需要在此實例的基礎上添加特定的算法代碼,完成算法的封裝。

2.2 G.729A算法封裝

IALG只是一個算法接口框架,具體的算法還要由IALG派生而來。針對G.729A算法,首先實例化以下結構:

typedef struct IG729A_Fxns {

IALG_Fxns ialg;/* IG729A extends IALG */

XDAS_Void (*apply)(IG729A_Handle handle,…);

} IG729A_Fxns;

結構體第一項即是對IALG的一個實例,第二項函數apply()是算法的應用程序入口。endprint

為了區分不同廠商的算法模塊,XDAIS規定了算法的命名規則,通常為“__”,其中“”為算法名,“”是實現廠商或個人所特有的標識符[2]。為了滿足標準要求,需對IG729A_Fxns再次例化如下:

#define IALGFXNS \

&G729A_CETC7_IALG, /* module ID*/ \

NULL, /* activate*/ \

G729A_CETC7_alloc, /* algAlloc*/ \

G729A_CETC7_control, /* control*/ \

NULL, /* deactivate*/ \

G729A_CETC7_free, /* free*/ \

G729A_CETC7_initObj, /* init*/ \

G729A_CETC7_moved, /* moved*/ \

NULL /* numAlloc*/ \

/* module_vendor_interface */

IG729A_Fxns G729A_CETC7_IG729A = {

IALGFXNS,

G729A_CETC7_apply,

};

其中,G729A_CETC7_IG729A即為基于XDAIS的G.729A算法程序框架的一個實例,修改實例中對應的G729A_CETC7_initObj()、G729A_CETC7_alloc()、G729A_CETC7_free()、G729A_CETC7_apply()等函數可以實現程序框架與目標算法代碼的連接。

2.3 G.729A算法實現

G.729是ITU-T制定的基于CS-ACELP算法的語音編碼標準[3],其編碼速率為8kbit/s,是對電話寬帶語音信號編碼的標準,也是目前應用廣泛的VoIP語音數字信號處理標準[4]。

ITU-T提供了基于PC平臺的G.729A算法C語言評估代碼。但由于評估代碼是PC通用的單任務程序,未考慮硬件實現平臺、程序效率、多通道應用等因素,因此不能直接使用,需要對程序進行移植。

通常程序移植首先要考慮基本數據類型的兼容。G.729A算法程序代碼中用到了三種基本數據類型Word32、Word16及Flag,針對DSP C55x平臺需要定義如下:

typedef long int Word32;

typedef short int Word16;

typedef int Flag.

此外,內存資源的使用也是算法移植的關鍵,這是實現算法多通道應用的必要條件。針對單任務的算法代碼,將其中的所有全局變量及靜態內存定義成一個結構G729_BUF,這個結構包含了G.729A算法需要的所有存儲資源,在算法例化時進行內存動態分配。XDAIS架構中的函數G729A_CETC7_alloc()、G729A_CETC7_free()完成G729_BUF結構的內存分配和釋放。

最后,算法移植的最重要內容是實現算法代碼和XDAIS架構的接口。這主要涉及函數G729A_CETC7_initObj()和G729A_CETC7_apply(),前者完成算法的初始化,后者完成XDAIS架構算法的接口。

初始化的實現方法是在函數G729A_CETC7_initObj()中添加以下代碼:

st=(G729_BUF *)G729A->G729_st_mem;

Init_Pre_Process();

Init_Coder_ld8a();

Init_Decod_ld8a();

Init_Post_Filter();

Init_Post_Process();

變量st是一個G729_BUF結構的全局指針,指向算法例化時在函數G729A_CETC7_alloc()中分配的內存空間;其余調用的函數是G.729A算法的初始化代碼。

算法的接口實現方法是在函數G729A_CETC7_apply()中調用G.729A算法的編碼及解碼函數,包括以下內容:

//編碼調用函數

Pre_Process(st->new_speech, L_FRAME);

Coder_ld8a(st->prm);

prm2bits_ld8k_rfc( st->prm, dataOut);

//解碼調用函數

bits2prm_ld8k_rfc( dataIn, &st->parm[1]);

Decod_ld8a(st->parm, st->synth, st->Az_dec, st->T2);

Post_Filter(st->synth, st->Az_dec, st->T2); Post_Process(st->synth, L_FRAME);

通過封裝的算法代碼可以鏈接成庫文件,應用程序調用算法時只需包含庫文件和相應的頭文件,目標代碼直接鏈接庫函數,算法代碼不用被再次編譯,這保證了模塊化設計及算法的一致性。以下是應用程序調用算法的代碼實例:

G729A_Handle handle[n];//定義n通道算法句柄

IG729A_Fxns fxns[n];

fxns[n]=G729A_CETC7_IG729A;//例化算法

handle[n]=G729A_create(&fxns[n], NULL);//創建算法

G729A_CETC7_apply(handle[n],…);//調用算法

G729A_delete(handle[n]);//釋放算法(如果需要)

3 G.729A算法優化

按以上方法封裝的算法仿真測試需要12.3ms才能完成一幀話音的編解碼,而G.729標準規定的話音幀為10ms/幀[3],顯然算法效率太低,無法滿足實時話音的要求,必須對算法進行優化。

采用匯編代碼對C進行替換是常用的程序優化方法,而G.729A算法包含了30多個文件,全部實現替換工作量很大,因此對算法代碼進行分析,找出算法中最底層的基本運算函數,由內而外,先從子函數開始優化。由于算法中很多基本算子函數被多次循環調用,是制約程序效率的主要因素,這些函數主要包含在文件BASIC_OP.C中,所以優化的主要內容就是對這個文件中的基本算子函數進行全匯編替換。

除了編程優化外,編譯選項的優化也是很重要的。以下編譯選項對程序效率有較大影響,需要在CCS程序工程中添加這些選項[5]:

-o3:最高的優化級別,能顯著提高程序效率;

-pm:程序級優化;

-op2:調用優化,此選項要避免在匯編程序中調用C中的函數和全局變量;

-oi100:編譯器自動內聯小于100行的函數。

通過以上優化措施,程序效率可達到0.83ms/幀,占用DSP動態存儲空間4.6kB/通道。TMS320VC5510工作主頻為200M,可以算出優化后的算法編解碼一幀需要CPU處理能力為16.7(mega cycles)/s。

4 VoIP語音網關設計

VoIP網絡通常采用G.729A話音編碼,為了實現VoIP終端和其它話音網絡(如PSTN、移動電話等)互通,需要在VoIP交換機中實現語音網關來完成G.729A話音到PCM(Pulse Code Modulation,脈沖編碼調制)話音的轉換。VoIP語音網關的實現原理如圖2所示。

網絡處理器為Freescale公司的MPC8280,完成IP網絡及話音控制功能;DSP為TMS320VC5510,實現G.729A算法;FPGA為Altera公司的EP1C3,完成DSP的McBSP接口到2M話音群的接入。

從VoIP網絡來的話音幀由網絡處理器通過MPC8280的Local Bus(本地總線)和DSP的HPI(Host Port Interface,主機接口)送給DSP進行解碼,解碼后的PCM話音通過McBSP給FPGA完成2M話音群的時隙插入,網絡處理器通過MPC8280的MCC從2M群提取話音。反之為編碼的信號流程。

根據以上原理設計的VoIP語音網關單元包含了16片DSP,完成了96通道的G.729A語音編解碼,話音清晰可懂。根據目前應用結果,證明了基于XDAIS標準G.729A算法的高效、可靠及易擴展性,達到了設計的預期效果。

5 結束語

本文基于XDAIS架構的G.729A算法解決了在同一DSP處理器上實現多路G.729A算法的問題,并對算法進行了優化,理論上可實現一片TMS320VC5510上12通道的G.729A編解碼。標準的XDAIS架構使得算法移植性強,很容易將算法應用到其它設備中,縮短產品的開發周期。VoIP語音網關的實現使得這一算法得到了實際應用,目前該語音網關已應用于多種型號的軍用交換機中,并且運行穩定。

參考文獻:

[1] Texas Instruments. TMS320 DSP Algorithm Standard Rules and Guidelines User's Guide[Z]. SPRU352G, 2007.

[2] 司群,臧英新,陶友傳,等. TMS320DSP算法標準(XDAIS)及參考構架RF5綜述[J]. 艦船電子工程, 2006,26(2): 27-31.

[3] ITU-T Recommendation G.729. Coding of Speech at 8kbit/s Using Conjugate-Structure Algebraic-Code-Excited Linear-Prediction(CS-ACELP)[S]. 2013.

[4] 肖玉梅. 淺談VoIP技術中的語音編碼技術及其在DSP上的實現[J]. 經營管理者, 2011(13): 298-300.

[5] Texas Instruments. TMS320C55x Optimizing C/C++ CompilerUser's Guide[Z]. SPRU281F, 2003.endprint

handle[n]=G729A_create(&fxns[n], NULL);//創建算法

G729A_CETC7_apply(handle[n],…);//調用算法

G729A_delete(handle[n]);//釋放算法(如果需要)

3 G.729A算法優化

按以上方法封裝的算法仿真測試需要12.3ms才能完成一幀話音的編解碼,而G.729標準規定的話音幀為10ms/幀[3],顯然算法效率太低,無法滿足實時話音的要求,必須對算法進行優化。

采用匯編代碼對C進行替換是常用的程序優化方法,而G.729A算法包含了30多個文件,全部實現替換工作量很大,因此對算法代碼進行分析,找出算法中最底層的基本運算函數,由內而外,先從子函數開始優化。由于算法中很多基本算子函數被多次循環調用,是制約程序效率的主要因素,這些函數主要包含在文件BASIC_OP.C中,所以優化的主要內容就是對這個文件中的基本算子函數進行全匯編替換。

除了編程優化外,編譯選項的優化也是很重要的。以下編譯選項對程序效率有較大影響,需要在CCS程序工程中添加這些選項[5]:

-o3:最高的優化級別,能顯著提高程序效率;

-pm:程序級優化;

-op2:調用優化,此選項要避免在匯編程序中調用C中的函數和全局變量;

-oi100:編譯器自動內聯小于100行的函數。

通過以上優化措施,程序效率可達到0.83ms/幀,占用DSP動態存儲空間4.6kB/通道。TMS320VC5510工作主頻為200M,可以算出優化后的算法編解碼一幀需要CPU處理能力為16.7(mega cycles)/s。

4 VoIP語音網關設計

VoIP網絡通常采用G.729A話音編碼,為了實現VoIP終端和其它話音網絡(如PSTN、移動電話等)互通,需要在VoIP交換機中實現語音網關來完成G.729A話音到PCM(Pulse Code Modulation,脈沖編碼調制)話音的轉換。VoIP語音網關的實現原理如圖2所示。

網絡處理器為Freescale公司的MPC8280,完成IP網絡及話音控制功能;DSP為TMS320VC5510,實現G.729A算法;FPGA為Altera公司的EP1C3,完成DSP的McBSP接口到2M話音群的接入。

從VoIP網絡來的話音幀由網絡處理器通過MPC8280的Local Bus(本地總線)和DSP的HPI(Host Port Interface,主機接口)送給DSP進行解碼,解碼后的PCM話音通過McBSP給FPGA完成2M話音群的時隙插入,網絡處理器通過MPC8280的MCC從2M群提取話音。反之為編碼的信號流程。

根據以上原理設計的VoIP語音網關單元包含了16片DSP,完成了96通道的G.729A語音編解碼,話音清晰可懂。根據目前應用結果,證明了基于XDAIS標準G.729A算法的高效、可靠及易擴展性,達到了設計的預期效果。

5 結束語

本文基于XDAIS架構的G.729A算法解決了在同一DSP處理器上實現多路G.729A算法的問題,并對算法進行了優化,理論上可實現一片TMS320VC5510上12通道的G.729A編解碼。標準的XDAIS架構使得算法移植性強,很容易將算法應用到其它設備中,縮短產品的開發周期。VoIP語音網關的實現使得這一算法得到了實際應用,目前該語音網關已應用于多種型號的軍用交換機中,并且運行穩定。

參考文獻:

[1] Texas Instruments. TMS320 DSP Algorithm Standard Rules and Guidelines User's Guide[Z]. SPRU352G, 2007.

[2] 司群,臧英新,陶友傳,等. TMS320DSP算法標準(XDAIS)及參考構架RF5綜述[J]. 艦船電子工程, 2006,26(2): 27-31.

[3] ITU-T Recommendation G.729. Coding of Speech at 8kbit/s Using Conjugate-Structure Algebraic-Code-Excited Linear-Prediction(CS-ACELP)[S]. 2013.

[4] 肖玉梅. 淺談VoIP技術中的語音編碼技術及其在DSP上的實現[J]. 經營管理者, 2011(13): 298-300.

[5] Texas Instruments. TMS320C55x Optimizing C/C++ CompilerUser's Guide[Z]. SPRU281F, 2003.endprint

handle[n]=G729A_create(&fxns[n], NULL);//創建算法

G729A_CETC7_apply(handle[n],…);//調用算法

G729A_delete(handle[n]);//釋放算法(如果需要)

3 G.729A算法優化

按以上方法封裝的算法仿真測試需要12.3ms才能完成一幀話音的編解碼,而G.729標準規定的話音幀為10ms/幀[3],顯然算法效率太低,無法滿足實時話音的要求,必須對算法進行優化。

采用匯編代碼對C進行替換是常用的程序優化方法,而G.729A算法包含了30多個文件,全部實現替換工作量很大,因此對算法代碼進行分析,找出算法中最底層的基本運算函數,由內而外,先從子函數開始優化。由于算法中很多基本算子函數被多次循環調用,是制約程序效率的主要因素,這些函數主要包含在文件BASIC_OP.C中,所以優化的主要內容就是對這個文件中的基本算子函數進行全匯編替換。

除了編程優化外,編譯選項的優化也是很重要的。以下編譯選項對程序效率有較大影響,需要在CCS程序工程中添加這些選項[5]:

-o3:最高的優化級別,能顯著提高程序效率;

-pm:程序級優化;

-op2:調用優化,此選項要避免在匯編程序中調用C中的函數和全局變量;

-oi100:編譯器自動內聯小于100行的函數。

通過以上優化措施,程序效率可達到0.83ms/幀,占用DSP動態存儲空間4.6kB/通道。TMS320VC5510工作主頻為200M,可以算出優化后的算法編解碼一幀需要CPU處理能力為16.7(mega cycles)/s。

4 VoIP語音網關設計

VoIP網絡通常采用G.729A話音編碼,為了實現VoIP終端和其它話音網絡(如PSTN、移動電話等)互通,需要在VoIP交換機中實現語音網關來完成G.729A話音到PCM(Pulse Code Modulation,脈沖編碼調制)話音的轉換。VoIP語音網關的實現原理如圖2所示。

網絡處理器為Freescale公司的MPC8280,完成IP網絡及話音控制功能;DSP為TMS320VC5510,實現G.729A算法;FPGA為Altera公司的EP1C3,完成DSP的McBSP接口到2M話音群的接入。

從VoIP網絡來的話音幀由網絡處理器通過MPC8280的Local Bus(本地總線)和DSP的HPI(Host Port Interface,主機接口)送給DSP進行解碼,解碼后的PCM話音通過McBSP給FPGA完成2M話音群的時隙插入,網絡處理器通過MPC8280的MCC從2M群提取話音。反之為編碼的信號流程。

根據以上原理設計的VoIP語音網關單元包含了16片DSP,完成了96通道的G.729A語音編解碼,話音清晰可懂。根據目前應用結果,證明了基于XDAIS標準G.729A算法的高效、可靠及易擴展性,達到了設計的預期效果。

5 結束語

本文基于XDAIS架構的G.729A算法解決了在同一DSP處理器上實現多路G.729A算法的問題,并對算法進行了優化,理論上可實現一片TMS320VC5510上12通道的G.729A編解碼。標準的XDAIS架構使得算法移植性強,很容易將算法應用到其它設備中,縮短產品的開發周期。VoIP語音網關的實現使得這一算法得到了實際應用,目前該語音網關已應用于多種型號的軍用交換機中,并且運行穩定。

參考文獻:

[1] Texas Instruments. TMS320 DSP Algorithm Standard Rules and Guidelines User's Guide[Z]. SPRU352G, 2007.

[2] 司群,臧英新,陶友傳,等. TMS320DSP算法標準(XDAIS)及參考構架RF5綜述[J]. 艦船電子工程, 2006,26(2): 27-31.

[3] ITU-T Recommendation G.729. Coding of Speech at 8kbit/s Using Conjugate-Structure Algebraic-Code-Excited Linear-Prediction(CS-ACELP)[S]. 2013.

[4] 肖玉梅. 淺談VoIP技術中的語音編碼技術及其在DSP上的實現[J]. 經營管理者, 2011(13): 298-300.

[5] Texas Instruments. TMS320C55x Optimizing C/C++ CompilerUser's Guide[Z]. SPRU281F, 2003.endprint

猜你喜歡
程序優化
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
由“形”啟“數”優化運算——以2021年解析幾何高考題為例
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
主站蜘蛛池模板: 久久99国产视频| 国产毛片基地| 亚洲无码高清视频在线观看| 亚洲无码日韩一区| 亚洲三级影院| 99视频精品在线观看| 美女被狂躁www在线观看| 在线高清亚洲精品二区| 毛片手机在线看| 538国产视频| 日本色综合网| 中文字幕伦视频| 内射人妻无码色AV天堂| 天堂成人在线视频| 国产麻豆91网在线看| 永久免费精品视频| 亚瑟天堂久久一区二区影院| 毛片在线看网站| 精品国产三级在线观看| 暴力调教一区二区三区| 国产亚洲欧美日韩在线一区二区三区| 国产91视频免费| 国产精品太粉嫩高中在线观看| 午夜无码一区二区三区| 青青久久91| 91丝袜乱伦| 国产精品免费电影| 国产精品无码久久久久AV| 亚洲综合二区| 亚洲综合九九| 亚国产欧美在线人成| 在线观看欧美国产| 婷婷六月天激情| 欧美日韩中文国产| 国产毛片高清一级国语| 欧美黄色网站在线看| 99re这里只有国产中文精品国产精品 | 免费国产福利| 97视频精品全国免费观看 | 亚洲一区二区三区麻豆| 在线观看免费AV网| 国产丰满大乳无码免费播放| 亚洲精品动漫| 91久久偷偷做嫩草影院| 国产精品无码一二三视频| 亚洲天堂精品在线观看| 拍国产真实乱人偷精品| 欧美www在线观看| 91精品国产丝袜| 激情在线网| 97在线观看视频免费| 中国国产A一级毛片| 亚洲国产高清精品线久久| 一级毛片免费观看不卡视频| 色悠久久综合| 超清人妻系列无码专区| 高清无码手机在线观看| 欧美黄网站免费观看| 亚洲天堂视频在线免费观看| 亚洲成a人片77777在线播放| 国产成人1024精品下载| 亚洲色图综合在线| 日韩成人免费网站| 中文字幕乱码二三区免费| 亚洲国产成人在线| 2022精品国偷自产免费观看| 亚洲男女在线| 四虎永久在线视频| 亚洲精品成人片在线观看| 一级香蕉视频在线观看| 国产靠逼视频| 日韩成人在线网站| 亚洲国产在一区二区三区| 国产成人做受免费视频| 欧美劲爆第一页| 综合人妻久久一区二区精品| 国产第一福利影院| 国产精品女熟高潮视频| 永久免费av网站可以直接看的| 久久久久久久97| 国产伦精品一区二区三区视频优播| 国产自在线播放|