色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 消費電子 > 設計應用 > 基于TMS320C5416的G.729語音編解碼算法的優(yōu)化和實現

          基于TMS320C5416的G.729語音編解碼算法的優(yōu)化和實現

          作者: 時間:2009-02-06 來源:網絡 收藏

          本文引用地址:http://cafeforensic.com/article/167073.htm

          2.2 進行C語言
          標準的聲碼器最終在定點上實時。在定點內,浮點數是通過將小數點固定在特定位置來表示的,這是定點的局限之一。為了區(qū)分小數的不同值域,使用了Q-格式。不同的Q-格式在于小數點的位置不同,因此整數域也不同。當兩個數相乘時,會產生一個特殊的符號位。如:兩個Q4數相乘, 需要附加一個左移的操作以去除這個多余的符號位,乘積應該是一個Q9格式的。如果DSP中的FRST位被置位,這個去除多余符號位的移位操作能夠自動完成。對于16位數的乘法運算,應該得到32 位的乘積。但是,由于只需要16位的積,該32位乘積中只有高16位被存儲下來,積的低16位被丟棄。為了達到高準確性,在連續(xù)的乘法運算過程中(如卷積),應該一直保持32位的計算結果,只對最終的計算結果進行丟棄低16位的截短操作。為了達到更高的準確性,在這一操作過程中會使用到一種雙重精度格式, 這種格式僅僅出現在使用單精度不夠,而又不必要使用32位精度的時候。兩個32位數相乘,只需要32位的乘積,而不是64位,不過注意到TMS320C5416是16位的,所以在雙重精度格式中,32位整數分為高位字和低位字。高、低位字中都含有符號位,以進行快乘運算。其格式如下:
          L_32=hi_word16+lo_word1
          Hi_word=L_32>>16
          Lo_word=L_32-hi_word>>1
          當累加器中的數值超過一定范圍時將會產生溢出。在標準中, 累加器的值被限定在80000000~7FFFFFFF之內――即最小負數和最大正數。不過在TMS320C5416中,如果將PMST寄存器中的OVM置位,則溢出會得到自動處理。
          2.3 內聯指令的應用和C程序中嵌入匯編語句
          由于編碼的特點,編函數都是由一些基本的加減乘除簡單函數組織而成,這些函數定義在BASIC OP.C和OPER_32B.C兩個文件中,如果能夠對這些簡單函數進行內聯指令(intrinsic)的,就能達到事半功倍的效果。內聯指令是匯編指令的直接映射,具有很高的效率。例如:
          #define muh_ r(varl,var2) _mpylir(varl,var2)
          #define L_ add(L_var1,L_var2) _sadd(L_var1,L_var2)
          #define L_ muh(var1,var2) _smpy(var1,var2)
          在C程序中嵌入匯編語句的方法比較簡單,只需在匯編語句的左右加上一個引號,然后用小括弧將匯編語句括住,并在括弧前加上ASM標識符,例如ASM(“匯編語句”)。采用這種方法一方面可以在C程序中用C語言無法的一些硬件控制功能,如修改中斷控制寄存器、中斷使能或屏蔽、讀取狀態(tài)寄存器和中斷標志寄存器等;另一方面,也可以用這種方法在C程序中的關鍵部分用匯編語句代替C語言以程序。而采用這種方法的缺點是比較容易破壞C環(huán)境,因為C編譯器在編譯嵌入了匯編語句的C程序時并不檢查或分析所嵌入的匯編語句。采用這種方法需要注意以下幾點:
          (1)不要破壞C環(huán)境,因為C編譯器并不檢查和分析嵌入的匯編語句。
          (2)匯編語句不要改變C程序中變量的值,不要在匯編語句中加入匯編器而改變匯編環(huán)境。
          在簡化的基礎上,使用CCS提供的C優(yōu)化器進行C語言優(yōu)化,同時還使用內聯函數和匯編優(yōu)化。
          3 在TMS320C5416上的實現
          3.1 TMS320C5416的體系結構和應用
          TMS320C5416(以下簡稱C5416)是TI公司最近推出的一款高性價比的通用l6位定點DSP芯片,它的內核CPU基本組成與TMS320C54X系列一樣。C5416的單指令周期為6.25 RS,每秒執(zhí)行的指令數為160×106,指令系統豐富并具有很多多功能指令,使用了6級指令流水線結構,這些都很適合實現低時延的G.729聲碼器。采用一個40bit ALU、128K×16bit片內RAM(包括64KB的片內DARAM和64KB的片內SARAM)、3個獨立的l6bit數據內存總線、1個程序內存總線、3個MCBSP、6信道DMA控制器、1個8/l6位并行增強主機端口接口及2個l6bit計時器。
          在TMS320C5416中通過PCM3002進行信號的A/D和D/A轉換,PCM3002使用兩個串行通道,一個用于控制內部寄存器,另外一個用于數據傳輸。在系統板TMS320C5416中默認的信號的抽樣率是48kHz,通過修改PCM3002的內部控制寄存器,設定PCM3002信號的抽樣率。為了滿足G.729編碼的要求,PCM3002信號的抽樣率為8 000Hz。為了充分利用DSP進行信號處理,通過使用MCBSP和DMA把抽樣的數據送入DMA的緩沖區(qū)中,當緩沖區(qū)滿時產生一次中斷,DSP把DMA的緩沖區(qū)中的數據讀入DSP中進行處理,然后把處理過的數據送入DMA發(fā)送緩沖區(qū)。
          3.2 G.729在TMS320C5416的實現
          G.729的處理過程中采用塊處理技術如圖3所示。按照G.729標準,每塊(幀)由80個樣本組成,最初80個樣本被存起來,處理過程中有兩個操作是同時進行的。在處理塊L中數據的同時,存儲L+1塊的數據。



          評論


          相關推薦

          技術專區(qū)

          關閉