<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于DSP的G.729語音編解碼算法的優(yōu)化和實現(xiàn)

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

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

          2.3 內聯(lián)指令的應用和C程序中嵌入匯編語句

            由于的特點,編解碼函數(shù)都是由一些基本的加減乘除簡單函數(shù)組織而成,這些函數(shù)定義在BASIC OP.C和OPER_32B.C兩個文件中,如果能夠對這些簡單函數(shù)進行內聯(lián)指令(intrinsic)的優(yōu)化,就能達到事半功倍的效果。內聯(lián)指令是匯編指令的直接映射,具有很高的效率。例如:

             #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程序中實現(xiàn)用C語言無法實現(xiàn)的一些硬件控制功能,如修改中斷控制寄存器、中斷使能或屏蔽、讀取狀態(tài)寄存器和中斷標志寄存器等;另一方面,也可以用這種方法在C程序中的關鍵部分用匯編語句代替C語言以優(yōu)化程序。而采用這種方法的缺點是比較容易破壞C環(huán)境,因為C編譯器在編譯嵌入了匯編語句的C程序時并不檢查或分析所嵌入的匯編語句。采用這種方法需要注意以下幾點:

            (1)不要破壞C環(huán)境,因為C編譯器并不檢查和分析嵌入的匯編語句。

             (2)匯編語句不要改變C程序中變量的值,不要在匯編語句中加入匯編器而改變匯編環(huán)境。

             在簡化算法的基礎上,使用CCS提供的C優(yōu)化器進行C語言優(yōu)化,同時還使用內聯(lián)函數(shù)和匯編優(yōu)化。

            3 G.729在上的實現(xiàn)

            3.1 的體系結構和應用

             (以下簡稱C5416)是TI公司最近推出的一款高性價比的通用l6位定點DSP芯片,它的內核CPU基本組成與TMS320C54X系列一樣。C5416的單指令周期為6.25 RS,每秒執(zhí)行的指令數(shù)為160×106,指令系統(tǒng)豐富并具有很多多功能指令,使用了6級指令流水線結構,這些都很適合實現(xiàn)低時延的G.729聲碼器。采用一個40bit ALU、128K×16bit片內RAM(包括64KB的片內DARAM和64KB的片內SARAM)、3個獨立的l6bit數(shù)據內存總線、1個程序內存總線、3個MCBSP、6信道DMA控制器、1個8/l6位并行增強主機端口接口及2個l6bit計時器。

          在TMS320C5416中通過PCM3002進行語音信號的A/D和D/A轉換,PCM3002使用兩個串行通道,一個用于控制內部寄存器,另外一個用于數(shù)據傳輸。在系統(tǒng)板TMS320C5416中默認的語音信號的抽樣率是48kHz,通過修改PCM3002的內部控制寄存器,設定PCM3002信號的抽樣率。為了滿足G.729編碼的要求,PCM3002信號的抽樣率為8 000Hz。為了充分利用DSP進行信號處理,通過使用MCBSP和DMA把抽樣的數(shù)據送入DMA的緩沖區(qū)中,當緩沖區(qū)滿時產生一次中斷,DSP把DMA的緩沖區(qū)中的數(shù)據讀入DSP中進行處理,然后把處理過的數(shù)據送入DMA發(fā)送緩沖區(qū)。

            3.2 G.729在TMS320C5416的實現(xiàn)

            G.729的處理過程中采用塊處理技術如圖3所示。按照G.729標準,每塊(幀)由80個樣本組成,最初80個樣本被存起來,處理過程中有兩個操作是同時進行的。在處理塊L中數(shù)據的同時,存儲L+1塊的數(shù)據。

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

            在G.729軟件仿真時發(fā)現(xiàn)運算量較大的部分是LSP系數(shù)的矢量量化與激勵碼本(自適應碼本和固定碼本)的搜索,這兩個部分的運算量大約占全部編解碼運算量的60%以上。所以在優(yōu)化過程中,著重對固定碼本Acelp_Code_A()、分數(shù)基音分析pitch_fr3()、開環(huán)基音分析pitch_ol_fast()、增益量化Qua_gain()等占據絕大多數(shù)運算量的函數(shù)進行了優(yōu)化;僅僅簡化算法不能滿足實時要求,還使用了CCS提供的C優(yōu)化器進行C語言優(yōu)化,同時還可以使用內聯(lián)函數(shù)和匯編語句。經過以上處理后,輸出的信號滿足通信要求。通過分析優(yōu)化前后這些主要模塊的速度對照表(如表1所示),可以看出各個主要模塊的優(yōu)化效果是比較明顯的。一幀語音信號經過處理前后幅頻圖(如圖4所示),可以看出語音信號經過處理后保持良好的語音質量。

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

            

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

            系統(tǒng)運行主要分為四個過程:語音存儲,數(shù)據編碼壓縮,數(shù)據解壓縮,語音回放。將輸入的語音數(shù)據首先進行抗疊濾波,然后進行模數(shù)轉換,經DSP采集并存入RAM存儲器中,即是語音存儲過程;接著運行編碼程序,將前面存儲的信息進行壓縮并存儲,這是編碼過程;然后進行解碼,并將數(shù)據存回原來的位置;最后DSP執(zhí)行輸出指令,將解碼后的數(shù)據送到數(shù)模轉換器中,實現(xiàn)模擬輸出。

            用C5416最終實時實現(xiàn)了G.729聲碼器,用該聲碼器分別實時播放純語音文件、語音加背景音樂文件。對重建語音質量的主觀測試結果表明,恢復語音保留了很好的說話人特征,合成語音的清晰度和自然度均較好。該聲碼器性能測試數(shù)據如下:編解碼一幀平均時鐘周期數(shù)為1 010 350,CPU時鐘頻率為160MHz,所以編解碼一幀需要7.31ms時間;程序RAM容量為9.381KB;數(shù)據和常數(shù)RAM容量為7.146KB。以上數(shù)據表明,G.729編解碼器在C5416上實時實現(xiàn)的技術,可以很好地應用在電話會議、多媒體通信以及采用寬帶的通信系統(tǒng)中。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();