新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > 高速G.729ab聲碼器設計及其在媒體網關中的應用

        高速G.729ab聲碼器設計及其在媒體網關中的應用

        作者: 時間:2010-10-08 來源:網絡 收藏

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

        1 G.729ab編解碼核心算法優化
        本文選擇TI公司的TMS320C6203芯片為核心,實現G.729ab聲碼器設計。TMS320C62xx系列DSP的集成開發環境Code Composer Studio(簡稱CCS)支持標準C語言和匯編混合編程的方式編程,為了提高編解碼算法的效率,本文對ITU_T的標準G.729ab的C語言原碼進行匯編指令優化設計。同時,對于上層控制函數,采用C語言開發,以提高聲碼器的可維護性。
        C62xx采用6級流水線結構,提供了A,B兩組(共32個)通用寄存器,8個功能單元(.L1,.L2,.S1,.S2,.M1,.M2,.D1和.D2),最多同時可以有8條指令處在不同的執行階段并行。流水線結構是DSP實現高速運算的重要技術。由于不同指令的指令周期不同,需要在多周期指令后插入足夠的NOP(空操作)指令,以避免流水線沖突。
        在G.729ab的標準C代碼中,有大量的循環體。循環控制的關鍵跳轉指令B,需要等待5個指令周期,大量的NOP操作將降低代碼的效率。為了提高循環效率,可以合理安排指令順序,在一個匯編循環體內完成多個C循環的運算的流水線操作。用匯編指令實現如下簡單的for循環求信號能量的程序段為例:

        上述示例可使用如下匯編程序段實現:

        如上優化后,循環體LOOP僅為一個周期,在這一個周期中有6條并行運行的指令。其中,內存讀取指令LDFI需4個周期,故乘法指令SMPY是將向前追溯4個循環周期的內存讀取結果相乘。同理,SMPY指令需2個周期,故SADD指令是將2個循環周期之前的相乘結果相加。B0和A1配合用于循環控制,在等待跳轉指令B有效的5個延時周期內,依次進行隨后的后一循環的取數,前第3個循環的相乘,前一個循環的求和、循環控制和跳轉指令,依次類推。上述優化實現了最優循環效率。
        本設計優化后核心編解碼算法代碼完全符合ITUT G.729ab標準,并通過了ITU-T的所有測試矢量。使用300 MHz主頻的TMS320C6203實現聲碼器,單片可支持31路G.729ab算法。

        2 聲碼器的DSP硬件接口設計
        在媒體網關中,聲碼器的功能是實現PSTN的E1語音信號和數據網分組語音壓縮信號之間的編解碼轉化。利用TMS320C6203片內固化設置的McBSP接口(多通道緩存串行接口)與HPI接口(主處理器接口),可以實現DSP與E1總線、以及數據網上層處理器的連接。結構示意圖如圖1所示。

        本文引用地址:http://www.104case.com/article/166506.htm


        TM320C6203通過內置McBSP與EDMA(Enhanced Directory Memory Access,增強型直接內存訪問)控制器配合,可實現與E1標準接口的鏈接。設置McBSP的接收/發送控制寄存器(R/XCR),使串口按照標準E1數據格式進行數據收發;設置串口管腳控制寄存器(PCR),控制串口采用外部E1總線的時鐘和幀同步信號;設置串口控制寄存器(SPCR),控制串口的R/XINT(收/發中斷)由EDMA響應。


        上一頁 1 2 下一頁

        關鍵詞: 編解碼器 音頻

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 崇阳县| 安新县| 蒲城县| 张家川| 来宾市| 彰武县| 澄城县| 凤阳县| 桐梓县| 平武县| 丘北县| 山阳县| 多伦县| 绥棱县| 巴林左旗| 丹阳市| 信丰县| 龙南县| 东方市| 岳西县| 辽源市| 临泽县| 巴塘县| 仪征市| 合阳县| 封丘县| 永宁县| 衡阳县| 和政县| 郯城县| 元朗区| 福安市| 开江县| 牙克石市| 营山县| 武功县| 甘德县| 芷江| 平安县| 花莲县| 思南县|