新聞中心

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

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

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

        TMS320C6203支持16個EDMA通道,其12~15通道可用于響應串口收、發中斷。以串口接收數據為例:本設計中設計了乒、乓兩個串口數據接收緩存區。
        串口寄存器中的數據通過EDMA模式緩存到乒緩存區,當乒緩存區滿時,EDMA參數重載,控制切換,將數據緩存至乓緩存區,同時給出EDMA中斷,通知CPU讀取一幀數據。通過McBSP接口發送數據的過程完全類似。
        聲碼器通過DSP的HPI接口與上層處理器連接,實現數據網分組語音壓縮信號的收發。在HPI接口中,設計了以太網數據發送/接收緩存區,并為每個緩存區設計了RP(Read Pointer,讀指針)和WP(Write Pointer,寫指針),用于控制上層處理器和DSP之間的編碼數據交互。同時上層處理器通過HPI接口向聲碼器發送指令,控制通道的打開或關閉。

        3 在媒體網關中的應用設計
        聲碼器內部的主控程序采用定時中斷方式訪問HPI接口,根據上層處理器的指令打開或關閉通道。同時主程序使用輪詢方式處理從E1接口來的PCM話音信號;根據相應的通道工作狀態設置編解碼算法參數,將話音信號壓縮編碼;編碼后的語音數據,通過HPI接口輸出到上層處理器,進入數字網絡。使用完全類似的輪詢處理方式,逆向處理從來自數字網絡的編碼數據。
        由于數字網絡屬于分組通信,必須有合適的多媒體實時流網絡傳輸協議以保證語音的連貫性。在聲碼器的HPI接口控制程序中,設計了一個提供給上層處理器的RTP(Real-time Transport Protocol,實時傳輸協議)接口,用于完成編碼和解碼數據包的輸出和輸入及相應的RTP成幀、解幀功能,具體功能設計如下:
        RTP打包和發送:RTP包由具有固定格式的包頭和數據部分組成。將編碼后的語音數據,按照RTP打包參數的要求組織RTP頭和RTP凈荷。 RTP包頭中的關鍵字段為SN(Sequence Number,序列號)和TS(Time Stamp,時間戳)。SN用于對RTP包進行排序。每發送一個RTP數據包,SN加1。TS用于標識RTP數據包中第一個字節采樣時的時刻,以語音樣本為單位遞增;對于語音包和靜音壓縮包,TS增值一致。另外,RTP包頭中的PT(Payload Type,負載類型)字段用于指示RTP凈荷的數據編碼格式。在RFC3550中規定了標準載荷類型:G.729編碼對應的PT為18。
        由于RTP包頭中沒有長度字段,故對RTP包進行了外部擴展:將打好的RTP包作為凈荷,附加上RTP包數據長度、通道號,組成“以太網數據包”。針對C6203的32位尋址的HPI總線接口,設計以太網數據包格式如圖2所示。

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


        RTP包發送:即寫“以太網數據包”至“以太網數據發送緩存區”。首先根據該緩存區的讀寫指針判斷剩余空間;如寫空間不夠,則放棄此次寫操作,該數據包同時被丟棄。如寫空間足夠,則將數據包寫入發送緩存區,并更新寫指針。上層處理器根據該緩存區的讀寫指針判斷該緩存區內是否有新數據,并進行讀操作,以及更新讀指針。
        RTP包接收、排序和緩存:分組通信需要考慮語音的防抖動處理。本文通過設置靜態抖動緩沖區實現去抖動。首先根據“以太網數據接收緩存區”的讀寫指針判斷是否有新的數據包到來,如果有,則將該數據包根據RTP的SN和TS排列在相應通道的RTP緩存隊列中。重復上述過程直至將“以太網數據接收緩存區”中所有的數據包讀完,然后更新該緩存區的DSP讀指針。對于每個通道的RTP緩存隊列,當緩存語音數據到達預先定義的閾值K時,給出標志允許該通道開始進行語音數據解碼。如果數據分組有抖動延遲,則解碼語音可繼續保持K時間單位不被打斷。

        4 結語
        在純匯編并行優化的基礎上設計了高效的G.729ab聲碼器;利用TMS320C6203的在片外設McBSP實現了連接PSTN的標準E1接口;設計了用于分組數據收發的RTP協議接口,利用TMS320C6203的HPI接口方式與上層處理器連接,使聲碼器可靈活應用于媒體網關。


        上一頁 1 2 下一頁

        關鍵詞: 編解碼器 音頻

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 湟源县| 繁昌县| 洪雅县| 阿拉善右旗| 衢州市| 古蔺县| 成武县| 永善县| 屏山县| 灵宝市| 钟山县| 叙永县| 遂昌县| 靖州| 桂林市| 宁德市| 玉屏| 阿坝县| 贡山| 洪雅县| 盖州市| 恩施市| 左贡县| 锡林郭勒盟| 深水埗区| 宁夏| 东乡县| 门源| 沽源县| 七台河市| 永城市| 桂东县| 双峰县| 湖南省| 邵武市| 诸城市| 林甸县| 阿荣旗| 金昌市| 潢川县| 社会|