日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
數(shù)字信號(hào)處理器第五講(下)
數(shù)字信號(hào)處理器第五講(下)
 更新時(shí)間:2008-8-4 4:12:08  點(diǎn)擊數(shù):12
【字體: 字體顏色


    

第五講 G.729A語(yǔ)音編碼 TMS320VC5416 DSP實(shí)時(shí)實(shí)現(xiàn)(下)


Lesson 5 Realization of G.729A Voice Coding Arithmetic by TMS320VC5416 DSP

清華大學(xué)電子工程系、微波與數(shù)字通信國(guó)家重點(diǎn)實(shí)驗(yàn)室 崔慧娟

ITU-T G.729 8kb/s CS—ACELP簡(jiǎn)介

國(guó)際電信聯(lián)盟(ITU-T)于1995年11月正式通過(guò)了G.729。 ITU-T建議G.729也被稱作“共軛結(jié)構(gòu)代數(shù)碼本激勵(lì)線性預(yù)測(cè)編碼方案”(CS-ACELP),它是當(dāng)前較新的一種語(yǔ)音壓縮標(biāo)準(zhǔn)。96年ITU-T又制定了G.729的簡(jiǎn)化方案G.729A,主要降低了計(jì)算的復(fù)雜度以便于實(shí)時(shí)實(shí)現(xiàn),因此目前使用的都是G.729A。

G.729是由美國(guó)、法國(guó)、日本和加拿大的幾家著名國(guó)際電信實(shí)體聯(lián)合開(kāi)發(fā)的。它需要符合一些嚴(yán)格的要求,比如在良好的信道條件下要達(dá)到長(zhǎng)話質(zhì)量,在有隨機(jī)比特誤碼、發(fā)生幀丟失和多次轉(zhuǎn)接等情況下要有很好的穩(wěn)健性等。這種語(yǔ)音壓縮算法可以應(yīng)用在很廣泛的領(lǐng)域中,包括IP電話、無(wú)線通信、數(shù)字衛(wèi)星系統(tǒng)和數(shù)字專用線路。

G.729算法采用“共軛結(jié)構(gòu)代數(shù)碼本激勵(lì)線性預(yù)測(cè)編碼方案”(CS-ACELP)算法。這種算法綜合了波形編碼和參數(shù)編碼的優(yōu)點(diǎn),以自適應(yīng)預(yù)測(cè)編碼技術(shù)為基礎(chǔ),采用了矢量量化、合成分析和感覺(jué)加權(quán)等技術(shù)。

圖1 G.729A編碼器原理圖

編碼器(圖1)對(duì)10ms長(zhǎng)的語(yǔ)音幀進(jìn)行處理,每幀分為兩個(gè)子幀。輸入語(yǔ)音首先要在預(yù)處理模塊中經(jīng)過(guò)高通濾波和幅度壓縮變換,以去除低頻干擾及防止在后面運(yùn)算中出現(xiàn)溢出。每幀進(jìn)行一次線性預(yù)測(cè)(LP)分析,并將LPC參數(shù)轉(zhuǎn)換到線譜,對(duì)(LSP)形式進(jìn)行預(yù)測(cè)式二階段矢量量化(VQ)。然后使用分析合成法,按照合成信號(hào)和原始信號(hào)間感覺(jué)加權(quán)失真最小的準(zhǔn)則來(lái)提取激勵(lì)參數(shù)。激勵(lì)參數(shù)(包括固定碼本和自適應(yīng)碼本參數(shù))要每子幀(5ms)計(jì)算一次。每幀要利用感覺(jué)加權(quán)語(yǔ)音進(jìn)行一次開(kāi)環(huán)整數(shù)基值基音延時(shí)估計(jì),然后進(jìn)行閉環(huán)的分?jǐn)?shù)值基音分析,確定自適應(yīng)碼本的延時(shí)和增益,下面再進(jìn)行固定碼本的搜索。固定碼本是使用交織單脈沖排列設(shè)計(jì)的代數(shù)碼本。在搜索時(shí)使用迭代式深度優(yōu)先樹(shù)型搜索算法。這種算法的運(yùn)算量比較小,并且具有固定的運(yùn)算復(fù)雜度,比較有利于使用硬件實(shí)現(xiàn)。自適應(yīng)碼本和固定碼本的增益使用預(yù)測(cè)式二階段共軛結(jié)構(gòu)碼本進(jìn)行矢量量化。

圖2 G.729A解碼器原理圖

圖2給出了解碼算法的框圖。首先要從接收到的碼流中提取LSP系數(shù)和兩個(gè)分?jǐn)?shù)基音延時(shí)、兩個(gè)固定碼本矢量以及兩套自適應(yīng)碼本和固定碼本增益等參數(shù)。然后,對(duì)LSP參數(shù)進(jìn)行插值,并轉(zhuǎn)換到線性預(yù)測(cè)濾波器系數(shù)的形式。接下來(lái),將自適應(yīng)碼本和固定碼本矢量分別乘以各自的增益再相加,得到激勵(lì)信號(hào)。激勵(lì)信號(hào)通過(guò)LPC綜合濾波器后,就得到了合成語(yǔ)音信號(hào)。最后還要對(duì)合成語(yǔ)音信號(hào)進(jìn)行后處理,以提高合成語(yǔ)音的質(zhì)量。


程序的編制及調(diào)試

程序編制

DSP開(kāi)發(fā)工具一般都提供C編譯器,可以直接將寫(xiě)好的C語(yǔ)言程序轉(zhuǎn)換成DSP匯編語(yǔ)言程序,但效率非常低。G.729A算法C語(yǔ)言程序用編譯器轉(zhuǎn)成匯編語(yǔ)言程序運(yùn)行所需要的運(yùn)算量超過(guò)2000個(gè)MIPS(每秒百萬(wàn)條指令),根本無(wú)法實(shí)時(shí)運(yùn)行,因此必須手工編寫(xiě)匯編程序。

由于編解碼的程序規(guī)模很大,又是在DSP的匯編語(yǔ)言級(jí)別上實(shí)現(xiàn),因此保持原定點(diǎn)C語(yǔ)言程序所具有的模塊化、結(jié)構(gòu)化的特點(diǎn)對(duì)于匯編程序的編寫(xiě)、檢查、調(diào)試和閱讀都是非常有利的。所以在編程時(shí)盡量保持DSP程序與C語(yǔ)言程序在流程上的一致,具體是使DSP程序與C程序之間保持函數(shù)一一對(duì)應(yīng)關(guān)系,保持循環(huán)、分支等結(jié)構(gòu)的一一對(duì)應(yīng)。只有為了避免使DSP程序產(chǎn)生過(guò)大的不必要開(kāi)銷時(shí),才對(duì)結(jié)構(gòu)進(jìn)行一定的修改,但仍然要保持程序的模塊化和結(jié)構(gòu)化。由于C程序的結(jié)構(gòu)清晰,所以要想作到這一點(diǎn)并不困難,只要為C程序中的if、else、for、while等結(jié)構(gòu)設(shè)計(jì)出相應(yīng)的結(jié)構(gòu)化的DSP匯編程序結(jié)構(gòu),在編程時(shí)按照這種固定對(duì)應(yīng)關(guān)系對(duì)C語(yǔ)言程序進(jìn)行轉(zhuǎn)換就可以了。

程序的調(diào)試

程序的調(diào)試也是一項(xiàng)很費(fèi)時(shí)的工作。ITU-T針對(duì)G.729A提供了8組測(cè)試碼,只要通過(guò)了這8組測(cè)試碼,就可以認(rèn)為程序基本正確了,這8組測(cè)試碼分別針對(duì)程序中的不同位置而設(shè)定如下:

algthm - 算法中的條件部分
erasure - 幀刪除恢復(fù)
fixed -固定碼本搜索
lsp -LSP系數(shù)量化
overflow -合成器中的溢出檢查
parity -奇偶校驗(yàn)
pitch -基音周期搜索
speech -一般語(yǔ)音文件
tame -訓(xùn)練過(guò)程

采用的調(diào)試步驟是首先針對(duì)測(cè)試碼中最短的algthm.in的第一幀邊編程邊調(diào)試,也就是每編好一個(gè)函數(shù),就將algthm.in的第一幀通過(guò)該函數(shù)后的輸出數(shù)據(jù)和C語(yǔ)言的相應(yīng)輸出數(shù)據(jù)相比較,并針對(duì)出現(xiàn)的錯(cuò)誤修改函數(shù)內(nèi)容,由于對(duì)剛編完的函數(shù)進(jìn)行調(diào)試,對(duì)函數(shù)結(jié)構(gòu)和指令記憶會(huì)比較清晰。這樣,當(dāng)編碼器完成后,algthm.in的第一幀也就基本通過(guò)了。然后再繼續(xù)調(diào)試第二幀,當(dāng)?shù)诙䦷餐ㄟ^(guò)后,程序中所剩的錯(cuò)誤也就不多了。等到通過(guò)了第10幀,就可以開(kāi)始大規(guī)模地進(jìn)行仿真了。對(duì)于解碼部分,由于程序比較短,就采用了先把全部程序編完,再進(jìn)行調(diào)試的方法。

程序的優(yōu)化

編碼模塊與解碼模塊是按照G.729編解碼器的C語(yǔ)言定點(diǎn)源程序改寫(xiě)的,雖然定點(diǎn)的C語(yǔ)言程序已經(jīng)為DSP的實(shí)現(xiàn)作了一定的優(yōu)化,但為在一個(gè)DSP芯片上實(shí)現(xiàn)盡量多路的編解碼,必須根據(jù)C54x芯片的功能和特點(diǎn)對(duì)程序進(jìn)行一定的優(yōu)化。在編寫(xiě)DSP程序時(shí),要想提高運(yùn)行效率,就要充分利用C54x DSP芯片具有的各種硬件資源,并適當(dāng)?shù)貙?duì)程序結(jié)構(gòu)進(jìn)行一定調(diào)整,采用的主要方法有以下幾種:

充分利用各種延時(shí)

C54x芯片指令中的跳轉(zhuǎn)、循環(huán)、調(diào)用子函數(shù)等指令都有延時(shí)的格式如B[D],BC[D],RPT[D],RPTB[D],CALL[D],CC[D],RET[D],RC[D]等,這些指令允許利用他們執(zhí)行過(guò)程中的等待周期預(yù)先執(zhí)行一兩條其他指令,適當(dāng)調(diào)整程序結(jié)構(gòu)就可以充分利用這些等待周期,從而提高程序執(zhí)行速度。

充分利用塊指令循環(huán)功能

C54x DSP芯片還提供了塊指令循環(huán)功能,此功能可以大大地提高執(zhí)行循環(huán)的速度,但是此功能只能在一重循環(huán)中使用,因?yàn)樗惶峁┝艘粋(gè)循環(huán)記數(shù)寄存器BRC,所以在遇到多重循環(huán)時(shí)就要盡量把這個(gè)功能用在最里層的循環(huán)中,最里層循環(huán)是執(zhí)行次數(shù)最多的循環(huán)。

利用DSP芯片提供的各種寄存器

適當(dāng)?shù)乩酶鞣N寄存器也能顯著地提高程序的執(zhí)行速度。特別是當(dāng)一個(gè)函數(shù)在程序中被頻繁地調(diào)用,它的賦值可以減少執(zhí)行時(shí)鐘周期。

利用指令中的移位功能

C54x DSP在做賦值和數(shù)值運(yùn)算之前可以自動(dòng)對(duì)操作數(shù)進(jìn)行一定位數(shù)的移位,這樣就可以將移位運(yùn)算和其它運(yùn)算結(jié)合到一條指令中。另外,利用這種移位功能可以代替一些乘數(shù)為2的冪乘法,雖然有這樣的限制,但是在許多濾波器和函數(shù)中確實(shí)有這樣的運(yùn)算,帶立即數(shù)的乘法需要兩個(gè)指令周期,而移位只需一個(gè)指令周期,并且如果條件允許還可以將其結(jié)合到其它指令中,從而大大節(jié)省運(yùn)算量。

利用DELAY指令進(jìn)行賦值操作

另外,在程序中有大量的賦值操作,即將一個(gè)內(nèi)存變量的值賦給另一個(gè)內(nèi)存變量。特別是在搜索碼本的時(shí)候有大量的賦值操作,并且賦值的兩個(gè)變量是固定的。一般的方法是將第一個(gè)變量讀入到累加器或寄存器TREG中,再將累加器的值賦到第二個(gè)變量中。此過(guò)程要用兩條單周期指令。C54x提供了一個(gè)移動(dòng)緩沖區(qū)的指令DELAY,可以在一個(gè)指令周期內(nèi)將內(nèi)存單元的值復(fù)制到它后面的相鄰的內(nèi)存單元內(nèi)。雖然DELAY指令一般是用來(lái)移動(dòng)緩沖區(qū)的,但只要在給變量分配內(nèi)存時(shí)將需要賦值的變量相鄰分配,就可以在一個(gè)指令周期內(nèi)完成賦值操作。

利用寄存器代替某些臨時(shí)變量

程序中往往有很多的臨時(shí)變量,有的臨時(shí)變量應(yīng)用到自始至終,但是有的臨時(shí)變量只是在程序中的某段區(qū)域使用,只是暫時(shí)做數(shù)據(jù)存儲(chǔ)之用,對(duì)這類變量就可以酌情使用寄存器代替。由于對(duì)寄存器可以直接進(jìn)行操作,而不需要進(jìn)行取數(shù)、存數(shù)操作,從而可以大大提高程序運(yùn)行速度。

盡量利用尋址寄存器

C54x提供了八個(gè)尋址寄存器AR0-AR7,使用它們可以進(jìn)行尋址操作,并且可以控制它們的值隨著指令執(zhí)行而增減。充分利用它們進(jìn)行尋址可以顯著提高運(yùn)行速度。


實(shí)現(xiàn)結(jié)果

運(yùn)算量統(tǒng)計(jì)

在對(duì)某一幀實(shí)際語(yǔ)音的處理過(guò)程中,編解碼器算法的,各個(gè)部分運(yùn)算量所占比例顯示在表1中。運(yùn)算量較大的部分是LSP系數(shù)的矢量量化與激勵(lì)碼本(自適應(yīng)碼本和隨機(jī)碼本)的搜索。這兩個(gè)部分的運(yùn)算量大約占全部編解碼運(yùn)算量的80%以上。



由于G.729A算法中的LSP系數(shù)的量化、自適應(yīng)碼本和隨機(jī)碼本的搜索等運(yùn)算量較大的部分的計(jì)算復(fù)雜度都是固定的,對(duì)于不同的輸入所用的指令周期數(shù)目只有很小的改變,所以整個(gè)編解碼器的運(yùn)算量也是基本固定的,在幀與幀之間只有很小的波動(dòng),基本在15MIPS附近波動(dòng),其中編碼部分約占13MIPS,解碼部分約占2MIPS。

儲(chǔ)量統(tǒng)計(jì)

G.729a算法所用的存儲(chǔ)量情況見(jiàn)表2。
編碼器和解碼器的存儲(chǔ)量是分別統(tǒng)計(jì)的,它們有很多的共同區(qū)域,如數(shù)據(jù)區(qū)中的表格部分和程序區(qū)的公用函數(shù)部分,所以合并后的數(shù)據(jù)區(qū)和程序區(qū)總存儲(chǔ)量應(yīng)分別為約7K字。


結(jié)束語(yǔ)

本文介紹了采用TI公司TMS320VC5416實(shí)現(xiàn)ITU-T G.729A 8kb/s CS-ACELP語(yǔ)音壓縮編碼,所采用的設(shè)計(jì)思路、程序調(diào)試和程序優(yōu)化的方法對(duì)用其它DSP芯片實(shí)現(xiàn)語(yǔ)音壓縮編碼算法也有參考意義。



  • 上一篇: 數(shù)字信號(hào)處理器第五講(上)
  • 下一篇: 數(shù)字信號(hào)處理器(第六講)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1