張?jiān)朴?燕飛
針對(duì)VoIP交換機(jī)語(yǔ)音網(wǎng)關(guān)的需求,實(shí)現(xiàn)了基于XDAIS標(biāo)準(zhǔn)的G.729A算法。結(jié)合TI DSP處理器C55x的特點(diǎn)對(duì)算法進(jìn)行優(yōu)化,實(shí)現(xiàn)單片TMS320VC5510中12路語(yǔ)音編解碼,在此基礎(chǔ)上完成了支持96路話音的VoIP語(yǔ)音網(wǎng)關(guān)的設(shè)計(jì),并已成功應(yīng)用到多種型號(hào)的軍用語(yǔ)音交換機(jī)中。
DSP XDAIS G.729A VoIP 語(yǔ)音網(wǎng)關(guān)
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 引言
隨著互聯(lián)網(wǎng)通信的發(fā)展,VoIP(Voice over Internet Protocol,互聯(lián)網(wǎng)協(xié)議的語(yǔ)音承載)技術(shù)發(fā)展到現(xiàn)在已經(jīng)相當(dāng)成熟,其實(shí)質(zhì)是一種利用終端對(duì)語(yǔ)音數(shù)據(jù)進(jìn)行采集及還原,由IP網(wǎng)絡(luò)傳輸分組語(yǔ)音數(shù)據(jù)包的語(yǔ)音通信技術(shù)。語(yǔ)音壓縮編碼是VoIP技術(shù)的重要組成部分,ITU-T(國(guó)際電信聯(lián)盟電信標(biāo)準(zhǔn)化部)定義的G.729、G.723是VoIP的主要編碼格式。然而傳統(tǒng)的電話交換網(wǎng)絡(luò)以其話音質(zhì)量好、延時(shí)小等特點(diǎn)仍然不可替代,因此VoIP交換機(jī)需要與PSTN(Public Switched Telephone Network,公共交換電話網(wǎng)絡(luò))互聯(lián)。故通常的VoIP交換機(jī)需要大容量的語(yǔ)音網(wǎng)關(guān)單元實(shí)現(xiàn)語(yǔ)音編解碼功能。相對(duì)于G.729,G.729A進(jìn)一步降低了算法復(fù)雜度,實(shí)際應(yīng)用較廣。本文討論基于TI(德州儀器)公司的DSP(Digital Signal Processor,數(shù)字信號(hào)處理器)C55x平臺(tái)上實(shí)現(xiàn)XDAIS(eXpressDSP Algorithm Interface Standard,eXpressDSP算法接口標(biāo)準(zhǔn))架構(gòu)的G.729A算法及其優(yōu)化,在此基礎(chǔ)上給出了VoIP大容量交換機(jī)語(yǔ)音網(wǎng)關(guān)的設(shè)計(jì)方案。
2 XDAIS架構(gòu)的G.729A算法實(shí)現(xiàn)
為了便于第三方廠商開(kāi)發(fā)通用DSP算法程序,TI制定了XDAIS程序架構(gòu)。該架構(gòu)可解決算法模塊間資源共享及程序兼容性問(wèn)題,使得在同一DSP上實(shí)現(xiàn)不同算法或相同算法的多通道應(yīng)用更容易。為了實(shí)現(xiàn)G.729A算法在多通道語(yǔ)音網(wǎng)關(guān)上的應(yīng)用,按照XDAIS程序架構(gòu)對(duì)算法進(jìn)行封裝是非常有效的方法。
2.1 XDAIS架構(gòu)
XDAIS標(biāo)準(zhǔn)架構(gòu)示意圖如圖1所示:
圖1 XDAIS標(biāo)準(zhǔn)架構(gòu)示意圖[1]
XDAIS標(biāo)準(zhǔn)定義了三層規(guī)則:第一層是包含了所有DSP算法編程適用的通用編程規(guī)則,如C調(diào)用、可重入等;第二層規(guī)則使得所有算法可以在單一DSP系統(tǒng)上協(xié)調(diào)地運(yùn)行,包括程序的封裝、標(biāo)識(shí)、命名、內(nèi)存管理等;第三層規(guī)則與使用的DSP系列硬件資源相關(guān),包括中斷、內(nèi)存、寄存器等。第三層以下是各廠商開(kāi)發(fā)的算法,XDAIS對(duì)此不作規(guī)定[1]。
符合XDAIS標(biāo)準(zhǔn)的算法必須實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)接口,即IALG接口。該接口提供的功能包括對(duì)系統(tǒng)存儲(chǔ)資源的管理、算法實(shí)例的建立、初始化和終止對(duì)象。這些功能體現(xiàn)在一個(gè)IALG_Fxns的結(jié)構(gòu)體中,也稱(chēng)V表,在這個(gè)結(jié)構(gòu)體中定義了算法接口需要的標(biāo)準(zhǔn)函數(shù),其中除了algAlloc()、a1gInit()和algFree()是必須的外,其它的函數(shù)是可選的。algAlloc()實(shí)現(xiàn)內(nèi)存分配;algInit()用來(lái)初始化算法實(shí)例對(duì)象;algFree()在銷(xiāo)毀算法實(shí)例對(duì)象后釋放存儲(chǔ)空間。除了IALG,XDAIS還要定義一個(gè)算法實(shí)例接口,該接口包含了算法的實(shí)現(xiàn),是算法接口的一個(gè)實(shí)例[2]。算法提供者需要在此實(shí)例的基礎(chǔ)上添加特定的算法代碼,完成算法的封裝。
2.2 G.729A算法封裝
IALG只是一個(gè)算法接口框架,具體的算法還要由IALG派生而來(lái)。針對(duì)G.729A算法,首先實(shí)例化以下結(jié)構(gòu):
typedef struct IG729A_Fxns {
IALG_Fxns ialg;/* IG729A extends IALG */
XDAS_Void (*apply)(IG729A_Handle handle,…);
} IG729A_Fxns;
結(jié)構(gòu)體第一項(xiàng)即是對(duì)IALG的一個(gè)實(shí)例,第二項(xiàng)函數(shù)apply()是算法的應(yīng)用程序入口。endprint
為了區(qū)分不同廠商的算法模塊,XDAIS規(guī)定了算法的命名規(guī)則,通常為“
#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算法程序框架的一個(gè)實(shí)例,修改實(shí)例中對(duì)應(yīng)的G729A_CETC7_initObj()、G729A_CETC7_alloc()、G729A_CETC7_free()、G729A_CETC7_apply()等函數(shù)可以實(shí)現(xiàn)程序框架與目標(biāo)算法代碼的連接。
2.3 G.729A算法實(shí)現(xiàn)
G.729是ITU-T制定的基于CS-ACELP算法的語(yǔ)音編碼標(biāo)準(zhǔn)[3],其編碼速率為8kbit/s,是對(duì)電話寬帶語(yǔ)音信號(hào)編碼的標(biāo)準(zhǔn),也是目前應(yīng)用廣泛的VoIP語(yǔ)音數(shù)字信號(hào)處理標(biāo)準(zhǔn)[4]。
ITU-T提供了基于PC平臺(tái)的G.729A算法C語(yǔ)言評(píng)估代碼。但由于評(píng)估代碼是PC通用的單任務(wù)程序,未考慮硬件實(shí)現(xiàn)平臺(tái)、程序效率、多通道應(yīng)用等因素,因此不能直接使用,需要對(duì)程序進(jìn)行移植。
通常程序移植首先要考慮基本數(shù)據(jù)類(lèi)型的兼容。G.729A算法程序代碼中用到了三種基本數(shù)據(jù)類(lèi)型Word32、Word16及Flag,針對(duì)DSP C55x平臺(tái)需要定義如下:
typedef long int Word32;
typedef short int Word16;
typedef int Flag.
此外,內(nèi)存資源的使用也是算法移植的關(guān)鍵,這是實(shí)現(xiàn)算法多通道應(yīng)用的必要條件。針對(duì)單任務(wù)的算法代碼,將其中的所有全局變量及靜態(tài)內(nèi)存定義成一個(gè)結(jié)構(gòu)G729_BUF,這個(gè)結(jié)構(gòu)包含了G.729A算法需要的所有存儲(chǔ)資源,在算法例化時(shí)進(jìn)行內(nèi)存動(dòng)態(tài)分配。XDAIS架構(gòu)中的函數(shù)G729A_CETC7_alloc()、G729A_CETC7_free()完成G729_BUF結(jié)構(gòu)的內(nèi)存分配和釋放。
最后,算法移植的最重要內(nèi)容是實(shí)現(xiàn)算法代碼和XDAIS架構(gòu)的接口。這主要涉及函數(shù)G729A_CETC7_initObj()和G729A_CETC7_apply(),前者完成算法的初始化,后者完成XDAIS架構(gòu)算法的接口。
初始化的實(shí)現(xiàn)方法是在函數(shù)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是一個(gè)G729_BUF結(jié)構(gòu)的全局指針,指向算法例化時(shí)在函數(shù)G729A_CETC7_alloc()中分配的內(nèi)存空間;其余調(diào)用的函數(shù)是G.729A算法的初始化代碼。
算法的接口實(shí)現(xiàn)方法是在函數(shù)G729A_CETC7_apply()中調(diào)用G.729A算法的編碼及解碼函數(shù),包括以下內(nèi)容:
//編碼調(diào)用函數(shù)
Pre_Process(st->new_speech, L_FRAME);
Coder_ld8a(st->prm);
prm2bits_ld8k_rfc( st->prm, dataOut);
//解碼調(diào)用函數(shù)
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);
通過(guò)封裝的算法代碼可以鏈接成庫(kù)文件,應(yīng)用程序調(diào)用算法時(shí)只需包含庫(kù)文件和相應(yīng)的頭文件,目標(biāo)代碼直接鏈接庫(kù)函數(shù),算法代碼不用被再次編譯,這保證了模塊化設(shè)計(jì)及算法的一致性。以下是應(yīng)用程序調(diào)用算法的代碼實(shí)例:
G729A_Handle handle[n];//定義n通道算法句柄
IG729A_Fxns fxns[n];
fxns[n]=G729A_CETC7_IG729A;//例化算法
handle[n]=G729A_create(&fxns[n], NULL);//創(chuàng)建算法
…
G729A_CETC7_apply(handle[n],…);//調(diào)用算法
…
G729A_delete(handle[n]);//釋放算法(如果需要)
3 G.729A算法優(yōu)化
按以上方法封裝的算法仿真測(cè)試需要12.3ms才能完成一幀話音的編解碼,而G.729標(biāo)準(zhǔn)規(guī)定的話音幀為10ms/幀[3],顯然算法效率太低,無(wú)法滿(mǎn)足實(shí)時(shí)話音的要求,必須對(duì)算法進(jìn)行優(yōu)化。
采用匯編代碼對(duì)C進(jìn)行替換是常用的程序優(yōu)化方法,而G.729A算法包含了30多個(gè)文件,全部實(shí)現(xiàn)替換工作量很大,因此對(duì)算法代碼進(jìn)行分析,找出算法中最底層的基本運(yùn)算函數(shù),由內(nèi)而外,先從子函數(shù)開(kāi)始優(yōu)化。由于算法中很多基本算子函數(shù)被多次循環(huán)調(diào)用,是制約程序效率的主要因素,這些函數(shù)主要包含在文件BASIC_OP.C中,所以?xún)?yōu)化的主要內(nèi)容就是對(duì)這個(gè)文件中的基本算子函數(shù)進(jìn)行全匯編替換。
除了編程優(yōu)化外,編譯選項(xiàng)的優(yōu)化也是很重要的。以下編譯選項(xiàng)對(duì)程序效率有較大影響,需要在CCS程序工程中添加這些選項(xiàng)[5]:
-o3:最高的優(yōu)化級(jí)別,能顯著提高程序效率;
-pm:程序級(jí)優(yōu)化;
-op2:調(diào)用優(yōu)化,此選項(xiàng)要避免在匯編程序中調(diào)用C中的函數(shù)和全局變量;
-oi100:編譯器自動(dòng)內(nèi)聯(lián)小于100行的函數(shù)。
通過(guò)以上優(yōu)化措施,程序效率可達(dá)到0.83ms/幀,占用DSP動(dòng)態(tài)存儲(chǔ)空間4.6kB/通道。TMS320VC5510工作主頻為200M,可以算出優(yōu)化后的算法編解碼一幀需要CPU處理能力為16.7(mega cycles)/s。
4 VoIP語(yǔ)音網(wǎng)關(guān)設(shè)計(jì)
VoIP網(wǎng)絡(luò)通常采用G.729A話音編碼,為了實(shí)現(xiàn)VoIP終端和其它話音網(wǎng)絡(luò)(如PSTN、移動(dòng)電話等)互通,需要在VoIP交換機(jī)中實(shí)現(xiàn)語(yǔ)音網(wǎng)關(guān)來(lái)完成G.729A話音到PCM(Pulse Code Modulation,脈沖編碼調(diào)制)話音的轉(zhuǎn)換。VoIP語(yǔ)音網(wǎng)關(guān)的實(shí)現(xiàn)原理如圖2所示。
網(wǎng)絡(luò)處理器為Freescale公司的MPC8280,完成IP網(wǎng)絡(luò)及話音控制功能;DSP為T(mén)MS320VC5510,實(shí)現(xiàn)G.729A算法;FPGA為Altera公司的EP1C3,完成DSP的McBSP接口到2M話音群的接入。
從VoIP網(wǎng)絡(luò)來(lái)的話音幀由網(wǎng)絡(luò)處理器通過(guò)MPC8280的Local Bus(本地總線)和DSP的HPI(Host Port Interface,主機(jī)接口)送給DSP進(jìn)行解碼,解碼后的PCM話音通過(guò)McBSP給FPGA完成2M話音群的時(shí)隙插入,網(wǎng)絡(luò)處理器通過(guò)MPC8280的MCC從2M群提取話音。反之為編碼的信號(hào)流程。
根據(jù)以上原理設(shè)計(jì)的VoIP語(yǔ)音網(wǎng)關(guān)單元包含了16片DSP,完成了96通道的G.729A語(yǔ)音編解碼,話音清晰可懂。根據(jù)目前應(yīng)用結(jié)果,證明了基于XDAIS標(biāo)準(zhǔn)G.729A算法的高效、可靠及易擴(kuò)展性,達(dá)到了設(shè)計(jì)的預(yù)期效果。
5 結(jié)束語(yǔ)
本文基于XDAIS架構(gòu)的G.729A算法解決了在同一DSP處理器上實(shí)現(xiàn)多路G.729A算法的問(wèn)題,并對(duì)算法進(jìn)行了優(yōu)化,理論上可實(shí)現(xiàn)一片TMS320VC5510上12通道的G.729A編解碼。標(biāo)準(zhǔn)的XDAIS架構(gòu)使得算法移植性強(qiáng),很容易將算法應(yīng)用到其它設(shè)備中,縮短產(chǎn)品的開(kāi)發(fā)周期。VoIP語(yǔ)音網(wǎng)關(guān)的實(shí)現(xiàn)使得這一算法得到了實(shí)際應(yīng)用,目前該語(yǔ)音網(wǎng)關(guān)已應(yīng)用于多種型號(hào)的軍用交換機(jī)中,并且運(yùn)行穩(wěn)定。
參考文獻(xiàn):
[1] Texas Instruments. TMS320 DSP Algorithm Standard Rules and Guidelines User's Guide[Z]. SPRU352G, 2007.
[2] 司群,臧英新,陶友傳,等. TMS320DSP算法標(biāo)準(zhǔn)(XDAIS)及參考構(gòu)架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技術(shù)中的語(yǔ)音編碼技術(shù)及其在DSP上的實(shí)現(xiàn)[J]. 經(jīng)營(yíng)管理者, 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);//創(chuàng)建算法
…
G729A_CETC7_apply(handle[n],…);//調(diào)用算法
…
G729A_delete(handle[n]);//釋放算法(如果需要)
3 G.729A算法優(yōu)化
按以上方法封裝的算法仿真測(cè)試需要12.3ms才能完成一幀話音的編解碼,而G.729標(biāo)準(zhǔn)規(guī)定的話音幀為10ms/幀[3],顯然算法效率太低,無(wú)法滿(mǎn)足實(shí)時(shí)話音的要求,必須對(duì)算法進(jìn)行優(yōu)化。
采用匯編代碼對(duì)C進(jìn)行替換是常用的程序優(yōu)化方法,而G.729A算法包含了30多個(gè)文件,全部實(shí)現(xiàn)替換工作量很大,因此對(duì)算法代碼進(jìn)行分析,找出算法中最底層的基本運(yùn)算函數(shù),由內(nèi)而外,先從子函數(shù)開(kāi)始優(yōu)化。由于算法中很多基本算子函數(shù)被多次循環(huán)調(diào)用,是制約程序效率的主要因素,這些函數(shù)主要包含在文件BASIC_OP.C中,所以?xún)?yōu)化的主要內(nèi)容就是對(duì)這個(gè)文件中的基本算子函數(shù)進(jìn)行全匯編替換。
除了編程優(yōu)化外,編譯選項(xiàng)的優(yōu)化也是很重要的。以下編譯選項(xiàng)對(duì)程序效率有較大影響,需要在CCS程序工程中添加這些選項(xiàng)[5]:
-o3:最高的優(yōu)化級(jí)別,能顯著提高程序效率;
-pm:程序級(jí)優(yōu)化;
-op2:調(diào)用優(yōu)化,此選項(xiàng)要避免在匯編程序中調(diào)用C中的函數(shù)和全局變量;
-oi100:編譯器自動(dòng)內(nèi)聯(lián)小于100行的函數(shù)。
通過(guò)以上優(yōu)化措施,程序效率可達(dá)到0.83ms/幀,占用DSP動(dòng)態(tài)存儲(chǔ)空間4.6kB/通道。TMS320VC5510工作主頻為200M,可以算出優(yōu)化后的算法編解碼一幀需要CPU處理能力為16.7(mega cycles)/s。
4 VoIP語(yǔ)音網(wǎng)關(guān)設(shè)計(jì)
VoIP網(wǎng)絡(luò)通常采用G.729A話音編碼,為了實(shí)現(xiàn)VoIP終端和其它話音網(wǎng)絡(luò)(如PSTN、移動(dòng)電話等)互通,需要在VoIP交換機(jī)中實(shí)現(xiàn)語(yǔ)音網(wǎng)關(guān)來(lái)完成G.729A話音到PCM(Pulse Code Modulation,脈沖編碼調(diào)制)話音的轉(zhuǎn)換。VoIP語(yǔ)音網(wǎng)關(guān)的實(shí)現(xiàn)原理如圖2所示。
網(wǎng)絡(luò)處理器為Freescale公司的MPC8280,完成IP網(wǎng)絡(luò)及話音控制功能;DSP為T(mén)MS320VC5510,實(shí)現(xiàn)G.729A算法;FPGA為Altera公司的EP1C3,完成DSP的McBSP接口到2M話音群的接入。
從VoIP網(wǎng)絡(luò)來(lái)的話音幀由網(wǎng)絡(luò)處理器通過(guò)MPC8280的Local Bus(本地總線)和DSP的HPI(Host Port Interface,主機(jī)接口)送給DSP進(jìn)行解碼,解碼后的PCM話音通過(guò)McBSP給FPGA完成2M話音群的時(shí)隙插入,網(wǎng)絡(luò)處理器通過(guò)MPC8280的MCC從2M群提取話音。反之為編碼的信號(hào)流程。
根據(jù)以上原理設(shè)計(jì)的VoIP語(yǔ)音網(wǎng)關(guān)單元包含了16片DSP,完成了96通道的G.729A語(yǔ)音編解碼,話音清晰可懂。根據(jù)目前應(yīng)用結(jié)果,證明了基于XDAIS標(biāo)準(zhǔn)G.729A算法的高效、可靠及易擴(kuò)展性,達(dá)到了設(shè)計(jì)的預(yù)期效果。
5 結(jié)束語(yǔ)
本文基于XDAIS架構(gòu)的G.729A算法解決了在同一DSP處理器上實(shí)現(xiàn)多路G.729A算法的問(wèn)題,并對(duì)算法進(jìn)行了優(yōu)化,理論上可實(shí)現(xiàn)一片TMS320VC5510上12通道的G.729A編解碼。標(biāo)準(zhǔn)的XDAIS架構(gòu)使得算法移植性強(qiáng),很容易將算法應(yīng)用到其它設(shè)備中,縮短產(chǎn)品的開(kāi)發(fā)周期。VoIP語(yǔ)音網(wǎng)關(guān)的實(shí)現(xiàn)使得這一算法得到了實(shí)際應(yīng)用,目前該語(yǔ)音網(wǎng)關(guān)已應(yīng)用于多種型號(hào)的軍用交換機(jī)中,并且運(yùn)行穩(wěn)定。
參考文獻(xiàn):
[1] Texas Instruments. TMS320 DSP Algorithm Standard Rules and Guidelines User's Guide[Z]. SPRU352G, 2007.
[2] 司群,臧英新,陶友傳,等. TMS320DSP算法標(biāo)準(zhǔn)(XDAIS)及參考構(gòu)架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技術(shù)中的語(yǔ)音編碼技術(shù)及其在DSP上的實(shí)現(xiàn)[J]. 經(jīng)營(yíng)管理者, 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);//創(chuàng)建算法
…
G729A_CETC7_apply(handle[n],…);//調(diào)用算法
…
G729A_delete(handle[n]);//釋放算法(如果需要)
3 G.729A算法優(yōu)化
按以上方法封裝的算法仿真測(cè)試需要12.3ms才能完成一幀話音的編解碼,而G.729標(biāo)準(zhǔn)規(guī)定的話音幀為10ms/幀[3],顯然算法效率太低,無(wú)法滿(mǎn)足實(shí)時(shí)話音的要求,必須對(duì)算法進(jìn)行優(yōu)化。
采用匯編代碼對(duì)C進(jìn)行替換是常用的程序優(yōu)化方法,而G.729A算法包含了30多個(gè)文件,全部實(shí)現(xiàn)替換工作量很大,因此對(duì)算法代碼進(jìn)行分析,找出算法中最底層的基本運(yùn)算函數(shù),由內(nèi)而外,先從子函數(shù)開(kāi)始優(yōu)化。由于算法中很多基本算子函數(shù)被多次循環(huán)調(diào)用,是制約程序效率的主要因素,這些函數(shù)主要包含在文件BASIC_OP.C中,所以?xún)?yōu)化的主要內(nèi)容就是對(duì)這個(gè)文件中的基本算子函數(shù)進(jìn)行全匯編替換。
除了編程優(yōu)化外,編譯選項(xiàng)的優(yōu)化也是很重要的。以下編譯選項(xiàng)對(duì)程序效率有較大影響,需要在CCS程序工程中添加這些選項(xiàng)[5]:
-o3:最高的優(yōu)化級(jí)別,能顯著提高程序效率;
-pm:程序級(jí)優(yōu)化;
-op2:調(diào)用優(yōu)化,此選項(xiàng)要避免在匯編程序中調(diào)用C中的函數(shù)和全局變量;
-oi100:編譯器自動(dòng)內(nèi)聯(lián)小于100行的函數(shù)。
通過(guò)以上優(yōu)化措施,程序效率可達(dá)到0.83ms/幀,占用DSP動(dòng)態(tài)存儲(chǔ)空間4.6kB/通道。TMS320VC5510工作主頻為200M,可以算出優(yōu)化后的算法編解碼一幀需要CPU處理能力為16.7(mega cycles)/s。
4 VoIP語(yǔ)音網(wǎng)關(guān)設(shè)計(jì)
VoIP網(wǎng)絡(luò)通常采用G.729A話音編碼,為了實(shí)現(xiàn)VoIP終端和其它話音網(wǎng)絡(luò)(如PSTN、移動(dòng)電話等)互通,需要在VoIP交換機(jī)中實(shí)現(xiàn)語(yǔ)音網(wǎng)關(guān)來(lái)完成G.729A話音到PCM(Pulse Code Modulation,脈沖編碼調(diào)制)話音的轉(zhuǎn)換。VoIP語(yǔ)音網(wǎng)關(guān)的實(shí)現(xiàn)原理如圖2所示。
網(wǎng)絡(luò)處理器為Freescale公司的MPC8280,完成IP網(wǎng)絡(luò)及話音控制功能;DSP為T(mén)MS320VC5510,實(shí)現(xiàn)G.729A算法;FPGA為Altera公司的EP1C3,完成DSP的McBSP接口到2M話音群的接入。
從VoIP網(wǎng)絡(luò)來(lái)的話音幀由網(wǎng)絡(luò)處理器通過(guò)MPC8280的Local Bus(本地總線)和DSP的HPI(Host Port Interface,主機(jī)接口)送給DSP進(jìn)行解碼,解碼后的PCM話音通過(guò)McBSP給FPGA完成2M話音群的時(shí)隙插入,網(wǎng)絡(luò)處理器通過(guò)MPC8280的MCC從2M群提取話音。反之為編碼的信號(hào)流程。
根據(jù)以上原理設(shè)計(jì)的VoIP語(yǔ)音網(wǎng)關(guān)單元包含了16片DSP,完成了96通道的G.729A語(yǔ)音編解碼,話音清晰可懂。根據(jù)目前應(yīng)用結(jié)果,證明了基于XDAIS標(biāo)準(zhǔn)G.729A算法的高效、可靠及易擴(kuò)展性,達(dá)到了設(shè)計(jì)的預(yù)期效果。
5 結(jié)束語(yǔ)
本文基于XDAIS架構(gòu)的G.729A算法解決了在同一DSP處理器上實(shí)現(xiàn)多路G.729A算法的問(wèn)題,并對(duì)算法進(jìn)行了優(yōu)化,理論上可實(shí)現(xiàn)一片TMS320VC5510上12通道的G.729A編解碼。標(biāo)準(zhǔn)的XDAIS架構(gòu)使得算法移植性強(qiáng),很容易將算法應(yīng)用到其它設(shè)備中,縮短產(chǎn)品的開(kāi)發(fā)周期。VoIP語(yǔ)音網(wǎng)關(guān)的實(shí)現(xiàn)使得這一算法得到了實(shí)際應(yīng)用,目前該語(yǔ)音網(wǎng)關(guān)已應(yīng)用于多種型號(hào)的軍用交換機(jī)中,并且運(yùn)行穩(wěn)定。
參考文獻(xiàn):
[1] Texas Instruments. TMS320 DSP Algorithm Standard Rules and Guidelines User's Guide[Z]. SPRU352G, 2007.
[2] 司群,臧英新,陶友傳,等. TMS320DSP算法標(biāo)準(zhǔn)(XDAIS)及參考構(gòu)架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技術(shù)中的語(yǔ)音編碼技術(shù)及其在DSP上的實(shí)現(xiàn)[J]. 經(jīng)營(yíng)管理者, 2011(13): 298-300.
[5] Texas Instruments. TMS320C55x Optimizing C/C++ CompilerUser's Guide[Z]. SPRU281F, 2003.endprint