新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于TMS320C6201的G.723.1多通道語音編解碼的實現

        基于TMS320C6201的G.723.1多通道語音編解碼的實現

        作者: 時間:2008-06-02 來源:嵌入式開發網 收藏

          3.1.2 提高寄存器的利用率

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

          芯片內部的運算單元運行效率非常高,但如果寄存器和數據總線之間的數據交換頻繁,將使的執行效率大打折扣。因為在進行內存操作時,往往需要若干周期的延遲,如Load指令要有4個周期的延遲,Store指令需要2個周期的延遲。為了減少耗時的內存操作,可以在程序進入循環體之前,將要頻繁使用的數據預先放入寄存器,然后反復調用,實踐證明這種方法可以提高一部分效率。

          3.1.3 使用內在函數(Intrinsic)

          內在函數是在某些C6201DSP的匯編指令前加上“_”構成它可以方便地實現某些需若干C語句才能實現的功能。它是一種非常簡便高效的優化方法,它的調用格式和普通C函數一樣,但在編譯時編譯器會自動將Intrinsic用對應的匯編指令替代。C6201指令集中絕大多數的運算邏輯指令都可以這樣使用,比如飽和絕對值、飽和加、飽和減、飽和乘、兩個字中的對應半字同時加或同時減、兩個字中的對應半字同時乘或交叉乘、歸一化及位操作等。經過此步優化后,大部分循環體都可以生成較為有效的流水內核(piplinedkernel)。用Intrinsic替代G.723.1原先的C代碼,運算量下降為原來的1/10。

          3.1.4 對算法的冗余部分合理精簡

          經過檢查,發現ITU-T G.723.1的C代碼存在冗余部分。象6.3k碼率的MP-MLQ搜索模塊中,只需要用到偶數位置的脈沖響應的自相關,所以對奇數位置的脈沖響應自相關計算可以省略。

          另外,在G.723.1標準中存在大量的10階FIR和10階IIR濾波器運算,如編碼部分的感知加權、零輸入響應、解碼部分綜合濾波器和后濾波等,FIR和IIR的通用形式可以表示為:

          每次循環,FIR濾波器內存要用新的輸入值更新,IIR濾波器內存要用新的輸出值更新,使用按標準提供的算法,要專門用一個10階循環更新內存。如果用一個10單位大小的循環緩存區,每次用新值覆蓋最老的樣值,動態調整循環緩存區的頭指針,可以節省原先用于內存更新的cycle。

          3.2 匯編級優化

          由于C編譯器只能完成70%的工作且對于復雜的循環,C編譯器無法生成高效率的代碼,所以對運算量大的模塊只能用手寫匯編。

          3.2.1 字長優化

          C6201的字長為32位,它支持按字節、半字、字存取。對于16位的數組,當它在內存中連續排列時,用32位讀寫指令LDW或STW替代16位讀寫指令LDH或STH,循環次數可減少一半。另外,C6201的匯編指令支持兩個32位寄存器的高16位和低16位之間互乘,結果分別放到不同的寄存器中,互不影響。具體指令為SMPY(L×L)、SMPYH(H×H)、SMPYHL(H×L)和SMPYLH(L×H)。通過字長優化,可以大大提高程序的運行效率。必須注意的是,在使用字長優化時,數組在內存中的位置必須對齊32位邊界。

          3.2.2 對外循環的優化

          C6201的C編譯器對多重循環的最內層一般能較好地優化到一句到兩句,但對外循環的優化效率則差很多。手寫匯編時,可以先將內循環展開,再把外循環的指令并入其中,可以減少所耗費的cycle數。

          C6201的循環一般分前導(Prolog)、內核(Kernel)及排空(Epilog)三部分。代碼的并行程度從Prolog開始不斷提高,Kernel內的并行程度最高,Epilog與Prolog相反,并行性逐漸降低。在多重循環中,如果盡量把內循環前導部分的指令與填入排空部分未用的單元,一起執行,可以在執行本次循環的排空語句的同時執行下次循環的前導語句。這樣可不多花cycle而提高整個循環的效率。

          4 實現結果

          經過C語言級和匯編級的多種優化,最后實現了一路G.723.1的編解碼需要花費10.6MCPS,整個代碼的程序空間為208K byte(程序中包括了部分c6201的庫函數),數據空間為8K byte,碼本大小20k byte,多通道的上下文數據為1.48K byte。200MHz的C6201每秒可以實時編解碼16路語音信號。所有代碼全部通過了ITU-T測試矢量的測試。表1是各主要模塊的運算量。

        表1 G.723.1各主要模塊運算量

          本文提出的利用C6201 DSP進行ITU-T G.723.1全雙工實時多通道語音編解碼的實現。該實現可以在IP電話、視頻會議中得到廣泛應用。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 湖口县| 双江| 河津市| 铁岭市| 武汉市| 巴塘县| 辽阳市| 龙泉市| 樟树市| 涡阳县| 建宁县| 阿尔山市| 常州市| 西和县| 平昌县| 漳州市| 彩票| 繁昌县| 米易县| 满城县| 万州区| 静海县| 浠水县| 酒泉市| 麻城市| 正安县| 麻栗坡县| 宜春市| 上高县| 远安县| 苍梧县| 广东省| 神农架林区| 云南省| 肃宁县| 孟村| 米林县| 黄冈市| 石柱| 巴南区| 双辽市|