《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 聲碼器的DSP硬件接口設(shè)計(jì)及在VoIP媒體網(wǎng)關(guān)中的應(yīng)用
聲碼器的DSP硬件接口設(shè)計(jì)及在VoIP媒體網(wǎng)關(guān)中的應(yīng)用
電子發(fā)燒友
摘要: 在VoIP媒體網(wǎng)關(guān)設(shè)備中,語(yǔ)音壓縮編碼是其關(guān)鍵技術(shù)之一,。在ITU-T發(fā)布的應(yīng)用于VoIP的語(yǔ)音壓縮編解碼標(biāo)準(zhǔn)中,,G.729是應(yīng)用較為廣泛的一種。G.729采用“共軛結(jié)構(gòu)代數(shù)碼本激勵(lì)線性預(yù)測(cè)編碼”(CS-ACELP)算法,,算法幀長(zhǎng)為lOms,,編碼后速率為8Kb/s。G.729有兩個(gè)附件:附件A給出一種低復(fù)雜度的算法,,可應(yīng)用于多媒體同步語(yǔ)音和數(shù)據(jù);附件B在標(biāo)準(zhǔn)算法的基礎(chǔ)上增加了靜音檢測(cè)壓縮算法以降低平均傳輸率,,包括靜音檢測(cè)(VAD)和舒適噪音產(chǎn)生(CNG),。文獻(xiàn)對(duì)G.729語(yǔ)音壓縮編碼算法的具體原理中有詳盡的描述,本文的論述重點(diǎn)在算法的匯語(yǔ)言優(yōu)化,、聲碼器的DSP硬件接口設(shè)計(jì),,以及其在媒體網(wǎng)關(guān)中的應(yīng)用。1G.729ab編解碼核心算法優(yōu)化本文選擇TI公司的TMS320C6203芯片為核心,,實(shí)現(xiàn)G.729ab聲碼器設(shè)計(jì),。TMS320C62xx系列DSP的集成開發(fā)環(huán)境CodeComposerStudio(簡(jiǎn)稱CCS)支持標(biāo)準(zhǔn)C語(yǔ)言和匯編混合編程的方式編程,為了提高編解碼算法的效率,,本文對(duì)ITU_T的標(biāo)準(zhǔn)G.729ab的C語(yǔ)言原碼進(jìn)行匯編指令優(yōu)化設(shè)計(jì),。同時(shí),對(duì)于上層編解碼器控制函數(shù),,采用C語(yǔ)言開發(fā),,以提高聲碼器的可維護(hù)性。
Abstract:
Key words :

  在VoIP媒體網(wǎng)關(guān)設(shè)備中,,語(yǔ)音壓縮編碼是其關(guān)鍵技術(shù)之一,。在ITU-T發(fā)布的應(yīng)用于VoIP的語(yǔ)音壓縮編解碼標(biāo)準(zhǔn)中,G.729是應(yīng)用較為廣泛的一種,。G.729采用“共軛結(jié)構(gòu)代數(shù)碼本激勵(lì)線性預(yù)測(cè)編碼”(CS-ACELP)算法,,算法幀長(zhǎng)為lO ms,編碼后速率為8 Kb/s,。G.729有兩個(gè)附件:附件A給出一種低復(fù)雜度的算法,,可應(yīng)用于多媒體同步語(yǔ)音和數(shù)據(jù);附件B在標(biāo)準(zhǔn)算法的基礎(chǔ)上增加了靜音檢測(cè)壓縮算法以降低平均傳輸率,包括靜音檢測(cè)(VAD)和舒適噪音產(chǎn)生(CNG),。文獻(xiàn)對(duì)G.729語(yǔ)音壓縮編碼算法的具體原理中有詳盡的描述,,本文的論述重點(diǎn)在算法的匯語(yǔ)言優(yōu)化、聲碼器DSP硬件接口設(shè)計(jì),,以及其在媒體網(wǎng)關(guān)中的應(yīng)用,。

  1 G.729ab編解碼核心算法優(yōu)化

  本文選擇TI公司的TMS320C6203芯片為核心,實(shí)現(xiàn)G.729ab聲碼器設(shè)計(jì),。TMS320C62xx系列DSP的集成開發(fā)環(huán)境Code Composer Studio(簡(jiǎn)稱CCS)支持標(biāo)準(zhǔn)C語(yǔ)言和匯編混合編程的方式編程,,為了提高編解碼算法的效率,本文對(duì)ITU_T的標(biāo)準(zhǔn)G.729ab的C語(yǔ)言原碼進(jìn)行匯編指令優(yōu)化設(shè)計(jì),。同時(shí),,對(duì)于上層編解碼器控制函數(shù),采用C語(yǔ)言開發(fā),,以提高聲碼器的可維護(hù)性,。

  C62xx采用6級(jí)流水線結(jié)構(gòu),提供了A,,B兩組(共32個(gè))通用寄存器,,8個(gè)功能單元(.L1,,.L2,.S1,,.S2,.M1,,.M2,,.D1和.D2),最多同時(shí)可以有8條指令處在不同的執(zhí)行階段并行,。流水線結(jié)構(gòu)是DSP實(shí)現(xiàn)高速運(yùn)算的重要技術(shù),。由于不同指令的指令周期不同,需要在多周期指令后插入足夠的NOP(空操作)指令,,以避免流水線沖突,。

  在G.729ab的標(biāo)準(zhǔn)C代碼中,有大量的循環(huán)體,。循環(huán)控制的關(guān)鍵跳轉(zhuǎn)指令B,,需要等待5個(gè)指令周期,大量的NOP操作將降低代碼的效率,。為了提高循環(huán)效率,,可以合理安排指令順序,在一個(gè)匯編循環(huán)體內(nèi)完成多個(gè)C循環(huán)的運(yùn)算的流水線操作,。用匯編指令實(shí)現(xiàn)如下簡(jiǎn)單的for循環(huán)求信號(hào)能量的程序段為例:

  

 

  上述示例可使用如下匯編程序段實(shí)現(xiàn):

  

 

  如上優(yōu)化后,,循環(huán)體LOOP僅為一個(gè)周期,在這一個(gè)周期中有6條并行運(yùn)行的指令,。其中,,內(nèi)存讀取指令LDFI需4個(gè)周期,故乘法指令SMPY是將向前追溯4個(gè)循環(huán)周期的內(nèi)存讀取結(jié)果相乘,。同理,,SMPY指令需2個(gè)周期,故SADD指令是將2個(gè)循環(huán)周期之前的相乘結(jié)果相加,。B0和A1配合用于循環(huán)控制,,在等待跳轉(zhuǎn)指令B有效的5個(gè)延時(shí)周期內(nèi),依次進(jìn)行隨后的后一循環(huán)的取數(shù),,前第3個(gè)循環(huán)的相乘,,前一個(gè)循環(huán)的求和、循環(huán)控制和跳轉(zhuǎn)指令,,依次類推,。上述優(yōu)化實(shí)現(xiàn)了最優(yōu)循環(huán)效率。

  本設(shè)計(jì)優(yōu)化后核心編解碼算法代碼完全符合ITUT G.729ab標(biāo)準(zhǔn),,并通過了ITU-T的所有測(cè)試矢量,。使用300 MHz主頻的TMS320C6203實(shí)現(xiàn)聲碼器,,單片可支持31路G.729ab算法。

  2 聲碼器的DSP硬件接口設(shè)計(jì)

  在媒體網(wǎng)關(guān)中,,聲碼器的功能是實(shí)現(xiàn)PSTN的E1語(yǔ)音信號(hào)和數(shù)據(jù)網(wǎng)分組語(yǔ)音壓縮信號(hào)之間的編解碼轉(zhuǎn)化,。利用TMS320C6203片內(nèi)固化設(shè)置的McBSP接口(多通道緩存串行接口)與HPI接口(主處理器接口),可以實(shí)現(xiàn)DSP與E1總線,、以及數(shù)據(jù)網(wǎng)上層處理器的連接,。結(jié)構(gòu)示意圖如圖1所示。

  

聲碼器的DSP硬件接口設(shè)計(jì) www.elecfans.com

 

  TM320C6203通過內(nèi)置McBSP與EDMA(Enhanced Directory Memory Access,,增強(qiáng)型直接內(nèi)存訪問)控制器配合,,可實(shí)現(xiàn)與E1標(biāo)準(zhǔn)接口的鏈接。設(shè)置McBSP的接收/發(fā)送控制寄存器(R/XCR),,使串口按照標(biāo)準(zhǔn)E1數(shù)據(jù)格式進(jìn)行數(shù)據(jù)收發(fā);設(shè)置串口管腳控制寄存器(PCR),,控制串口采用外部E1總線的時(shí)鐘和幀同步信號(hào);設(shè)置串口控制寄存器(SPCR),控制串口的R/XINT(收/發(fā)中斷)由EDMA響應(yīng),。

  TMS320C6203支持16個(gè)EDMA通道,,其12~15通道可用于響應(yīng)串口收、發(fā)中斷,。以串口接收數(shù)據(jù)為例:本設(shè)計(jì)中設(shè)計(jì)了乒,、乓兩個(gè)串口數(shù)據(jù)接收緩存區(qū)。

  串口寄存器中的數(shù)據(jù)通過EDMA模式緩存到乒緩存區(qū),,當(dāng)乒緩存區(qū)滿時(shí),,EDMA參數(shù)重載,控制切換,,將數(shù)據(jù)緩存至乓緩存區(qū),,同時(shí)給出EDMA中斷,通知CPU讀取一幀數(shù)據(jù),。通過McBSP接口發(fā)送數(shù)據(jù)的過程完全類似,。

  聲碼器通過DSP的HPI接口與上層處理器連接,實(shí)現(xiàn)數(shù)據(jù)網(wǎng)分組語(yǔ)音壓縮信號(hào)的收發(fā),。在HPI接口中,,設(shè)計(jì)了以太網(wǎng)數(shù)據(jù)發(fā)送/接收緩存區(qū),并為每個(gè)緩存區(qū)設(shè)計(jì)了RP(Read Pointer,,讀指針)和WP(Write Pointer,,寫指針),用于控制上層處理器和DSP之間的編碼數(shù)據(jù)交互,。同時(shí)上層處理器通過HPI接口向聲碼器發(fā)送指令,,控制通道的打開或關(guān)閉。

  3 在媒體網(wǎng)關(guān)中的應(yīng)用設(shè)計(jì)

  聲碼器內(nèi)部的主控程序采用定時(shí)中斷方式訪問HPI接口,,根據(jù)上層處理器的指令打開或關(guān)閉通道,。同時(shí)主程序使用輪詢方式處理從E1接口來的PCM話音信號(hào);根據(jù)相應(yīng)的通道工作狀態(tài)設(shè)置編解碼算法參數(shù),,將話音信號(hào)壓縮編碼;編碼后的語(yǔ)音數(shù)據(jù),通過HPI接口輸出到上層處理器,,進(jìn)入數(shù)字網(wǎng)絡(luò),。使用完全類似的輪詢處理方式,逆向處理從來自數(shù)字網(wǎng)絡(luò)的編碼數(shù)據(jù),。

  由于數(shù)字網(wǎng)絡(luò)屬于分組通信,,必須有合適的多媒體實(shí)時(shí)流網(wǎng)絡(luò)傳輸協(xié)議以保證語(yǔ)音的連貫性。在聲碼器的HPI接口控制程序中,,設(shè)計(jì)了一個(gè)提供給上層處理器的RTP(Real-time Transport Protocol,實(shí)時(shí)傳輸協(xié)議)接口,,用于完成編碼和解碼數(shù)據(jù)包的輸出和輸入及相應(yīng)的RTP成幀,、解幀功能,具體功能設(shè)計(jì)如下:

  RTP打包和發(fā)送:RTP包由具有固定格式的包頭和數(shù)據(jù)部分組成,。將編碼后的語(yǔ)音數(shù)據(jù),,按照RTP打包參數(shù)的要求組織RTP頭和RTP凈荷。 RTP包頭中的關(guān)鍵字段為SN(Sequence Number,,序列號(hào))和TS(Time Stamp,,時(shí)間戳)。SN用于對(duì)RTP包進(jìn)行排序,。每發(fā)送一個(gè)RTP數(shù)據(jù)包,,SN加1。TS用于標(biāo)識(shí)RTP數(shù)據(jù)包中第一個(gè)字節(jié)采樣時(shí)的時(shí)刻,,以語(yǔ)音樣本為單位遞增;對(duì)于語(yǔ)音包和靜音壓縮包,,TS增值一致。另外,,RTP包頭中的PT(Payload Type,,負(fù)載類型)字段用于指示RTP凈荷的數(shù)據(jù)編碼格式。在RFC3550中規(guī)定了標(biāo)準(zhǔn)音頻載荷類型:G.729編碼對(duì)應(yīng)的PT為18,。

  由于RTP包頭中沒有長(zhǎng)度字段,,故對(duì)RTP包進(jìn)行了外部擴(kuò)展:將打好的RTP包作為凈荷,附加上RTP包數(shù)據(jù)長(zhǎng)度,、通道號(hào),,組成“以太網(wǎng)數(shù)據(jù)包”。針對(duì)C6203的32位尋址的HPI總線接口,,設(shè)計(jì)以太網(wǎng)數(shù)據(jù)包格式如圖2所示,。

  

 

  RTP包發(fā)送:即寫“以太網(wǎng)數(shù)據(jù)包”至“以太網(wǎng)數(shù)據(jù)發(fā)送緩存區(qū)”。首先根據(jù)該緩存區(qū)的讀寫指針判斷剩余空間;如寫空間不夠,,則放棄此次寫操作,,該數(shù)據(jù)包同時(shí)被丟棄,。如寫空間足夠,則將數(shù)據(jù)包寫入發(fā)送緩存區(qū),,并更新寫指針,。上層處理器根據(jù)該緩存區(qū)的讀寫指針判斷該緩存區(qū)內(nèi)是否有新數(shù)據(jù),并進(jìn)行讀操作,,以及更新讀指針,。

  RTP包接收、排序和緩存:分組通信需要考慮語(yǔ)音的防抖動(dòng)處理,。本文通過設(shè)置靜態(tài)抖動(dòng)緩沖區(qū)實(shí)現(xiàn)去抖動(dòng),。首先根據(jù)“以太網(wǎng)數(shù)據(jù)接收緩存區(qū)”的讀寫指針判斷是否有新的數(shù)據(jù)包到來,如果有,,則將該數(shù)據(jù)包根據(jù)RTP的SN和TS排列在相應(yīng)通道的RTP緩存隊(duì)列中,。重復(fù)上述過程直至將“以太網(wǎng)數(shù)據(jù)接收緩存區(qū)”中所有的數(shù)據(jù)包讀完,然后更新該緩存區(qū)的DSP讀指針,。對(duì)于每個(gè)通道的RTP緩存隊(duì)列,,當(dāng)緩存語(yǔ)音數(shù)據(jù)到達(dá)預(yù)先定義的閾值K時(shí),給出標(biāo)志允許該通道開始進(jìn)行語(yǔ)音數(shù)據(jù)解碼,。如果數(shù)據(jù)分組有抖動(dòng)延遲,,則解碼語(yǔ)音可繼續(xù)保持K時(shí)間單位不被打斷。

  4 結(jié)語(yǔ)

  在純匯編并行優(yōu)化的基礎(chǔ)上設(shè)計(jì)了高效的G.729ab聲碼器;利用TMS320C6203的在片外設(shè)McBSP實(shí)現(xiàn)了連接PSTN的標(biāo)準(zhǔn)E1接口;設(shè)計(jì)了用于分組數(shù)據(jù)收發(fā)的RTP協(xié)議接口,,利用TMS320C6203的HPI接口方式與上層處理器連接,,使聲碼器可靈活應(yīng)用于媒體網(wǎng)關(guān)。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。