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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 運(yùn)用定點(diǎn)DSP實(shí)現(xiàn)MPEG-4標(biāo)準(zhǔn)中DCT系數(shù)快速量化的方法

          運(yùn)用定點(diǎn)DSP實(shí)現(xiàn)MPEG-4標(biāo)準(zhǔn)中DCT系數(shù)快速量化的方法

          作者: 時(shí)間:2006-05-07 來(lái)源:網(wǎng)絡(luò) 收藏

          摘要:以運(yùn)用TMS320C6200定點(diǎn)芯片完成MPEG-4標(biāo)準(zhǔn)中DCT系數(shù)量化為例,簡(jiǎn)要介紹MPEG-4標(biāo)準(zhǔn)的量化方法,提出一種用定點(diǎn)乘法和移位運(yùn)算代替量化過(guò)程中的除法和飽和運(yùn)算的方法,并實(shí)現(xiàn)了快速運(yùn)算。

          本文引用地址:http://www.ex-cimer.com/article/242317.htm

          關(guān)鍵詞:量化 DCT變換 定點(diǎn)芯片 MPEG-4

          在基于DCT變換的圖像壓縮編碼方法中,對(duì)DCT系數(shù)必須做量化處理。量化過(guò)程是一個(gè)多對(duì)一的映射,例如對(duì)一個(gè)8×8塊的64個(gè)DCT變換系數(shù)分別除以量化步長(zhǎng)后取整。由于大多數(shù)DCT變換系數(shù)量化后變?yōu)榱?,因而達(dá)到壓縮的目的。由于在量化過(guò)程中用到除法,因此通常需要進(jìn)行浮點(diǎn)運(yùn)算。

          但是,可進(jìn)行浮點(diǎn)運(yùn)算的器()芯片結(jié)構(gòu)比定點(diǎn)DSP芯片復(fù)雜,價(jià)格一般也比定點(diǎn)DSP芯片高很多。所以數(shù)字圖像處理系統(tǒng)中通常采用定點(diǎn)DSP芯片來(lái)完成圖像壓縮運(yùn)算,這種方法已經(jīng)成為數(shù)字圖像處理技術(shù)的的一個(gè)趨勢(shì)。

          可用于數(shù)字圖像處理的比較好的定點(diǎn)DSP芯片有德州儀器公司新一代高性能定點(diǎn)DSP芯片TMS320C6200系列。它具有VLIW(Very Long Instruction Word)結(jié)構(gòu),由8個(gè)可并行運(yùn)行的執(zhí)行單元構(gòu)成。這些單元使得該系列芯片在單周期內(nèi)可以并行執(zhí)行多條指令,例如在單周期內(nèi)并行完成2個(gè)16位×16位乘法和2個(gè)移位操作。它還具有流水線結(jié)構(gòu),使得若干條指令的不同執(zhí)行階段可以并行執(zhí)行。這些設(shè)計(jì)使得TMS320C6200系列芯片程序執(zhí)行速度更快、性能更高。如200MHx時(shí)鐘的TMS320C6201峰值性能可以達(dá)到1600MIPS。

          在定點(diǎn)DSP上完成除法,通常的辦法是調(diào)用庫(kù)函數(shù)。但是調(diào)用庫(kù)函數(shù),勢(shì)必會(huì)打破循環(huán)中的流水線操作,嚴(yán)重影響量化的完成速度。所以提高量化過(guò)程速度的關(guān)鍵就在于避免任何函數(shù)調(diào)用、跳轉(zhuǎn)等操作。

          本文以TMS320C6200系列定點(diǎn)DSP為例,提出一種用定點(diǎn)乘法和移位運(yùn)算來(lái)代替量化過(guò)程中除法和飽和運(yùn)算的方法,從而極大地提高了量化過(guò)程的運(yùn)行速度。該方法也同樣適用于其它各種定點(diǎn)微處理器。

          1 MPEG-4標(biāo)準(zhǔn)中采用的量化技術(shù)及程序優(yōu)化

          MPEG-4標(biāo)準(zhǔn)中定義了兩種量化方式:H.263量化方式和MPEG-4量化方式。這里為簡(jiǎn)單起見,只介紹TMN2.0編碼器所用到的一種量化策略:AC系數(shù)和幀間宏塊的DC系數(shù)用H.263量化方式,而幀內(nèi)宏塊的DC系數(shù)用MPEG-4量化方式中的DC系數(shù)非線性量化方式。

          1.1 H.263量化方式

          量化參數(shù)QP可以取值[1,3],量化步長(zhǎng)為2QP。則量化公式為:

          對(duì)于幀內(nèi)宏塊,LEVEL=|COF|/(2QP)

          對(duì)于幀間宏塊,LEVEL=(|COF|-QP/2)/(2QP)式中,COF表示即將被量化的DCT變換系數(shù),LEVEL表示量化結(jié)果的絕對(duì)值。

          1.2 MPEG-4DC系數(shù)非線性量化方法

          量化公式為:LEVEL=DC_COF//dc_scaler

          式中,DC_COF表示即將被量化的DCT變換DC系數(shù);LEVEL表示量化結(jié)果;//表示先進(jìn)行除法運(yùn)算,然后對(duì)結(jié)果四舍五入取整。

          在內(nèi)部宏塊內(nèi),定義亮度塊為類型 1塊,色差塊為類型2塊,類型1塊的C系數(shù)由類型1的非線性標(biāo)尺量化;類型2的DC系數(shù)由類型2的非線性標(biāo)尺量化。

          表1為定義DC非線性量化標(biāo)尺dc_scaler。

          表1 幀內(nèi)宏塊DC系數(shù)標(biāo)尺

          類 型量化參數(shù)(QP)范圍內(nèi)的dc_scaler
          1~45~89~2425~31
          亮度:Type182QPQP+82QP-16
          色度:Type28(QP+12)/2QP-6

          從表1中可以看到亮度塊和色差塊的DC系數(shù)有獨(dú)立的量化標(biāo)尺,亮度塊具有較大的標(biāo)尺而色度塊具有較小的標(biāo)尺。這種分段線性的非線性量化策略是一種高效的量化方式,它在保證圖像質(zhì)量的基礎(chǔ)上提高了壓縮效率。

          1.3 將量化除法改定點(diǎn)乘法的方式

          以內(nèi)部宏塊的AC系數(shù)量化公式為例,將其改寫為:

          LEVEL=|COF|/2QP=|COF|(2 n/2QP)/2 n

          定義量化參數(shù)ac_cocff=[2n/2QP],[x]表示對(duì)x截尾取整,則:

          LEVEL=|COF|×ac_coeff/2n

          在QP的取值都范圍[1,31]內(nèi),要使截尾取整后的每一個(gè)2 n/2QP的值都能夠用量化參數(shù)ac_coeff一一對(duì)應(yīng)地表示,n必須足夠大。通過(guò)計(jì)算得出:當(dāng)n≥11時(shí)滿足要求。

          取n=11得到ac_coeff的計(jì)算公式為:

          ac_coeff=[2 11/2QP]

          其實(shí)質(zhì)就是用一個(gè)字(32 bit)的低11位(0Q11)來(lái)表示1/2QP的小數(shù)部分。

          由于QP在[1,31]之間,可以用上述公式計(jì)算出對(duì)應(yīng)于幀內(nèi)宏塊AC系數(shù)量化的量化系數(shù)的查找表:ac_coeff=AcQConff[QP]。用C語(yǔ)言表示為(假設(shè)QP=0時(shí)ac_coeff=0):

          const short int AcQConeff[32]=

          {0x000,0x400,0x200,0x155,0x100,0x0cc,0x0aa,0x092,

          0x080,0x071,0x066,0x05d,0x055,0x04e,0x049,0x044,

          0x040,0x03c,0x038,0x035,0x033,0x030,0x02e,0x02c,

          0x02a,0x028,0x027,0x025,0x024,0x023,0x022,0x021};

          計(jì)算表明,AC系數(shù)量化系數(shù)、亮度塊DC系數(shù)量化系數(shù)和色差塊DC量化系數(shù)都可以統(tǒng)一用一個(gè)字的低11位(0Q11)來(lái)表示。這樣就可以分別計(jì)算出它們的量化系數(shù)的查找表,從而實(shí)現(xiàn)用乘法運(yùn)算代替除法運(yùn)算。

          而除以2 n的操作可以用右移n位的辦法來(lái)完成。

          對(duì)于8bit無(wú)符號(hào)二進(jìn)制數(shù)表示的象素值,在經(jīng)過(guò)DCT變換后,其DCT變換系數(shù)的值域?yàn)閇-2048,2047],最大有12位二進(jìn)制數(shù)。同時(shí),由上述分析可知量化系數(shù)最大有11位。所以DCT變換系數(shù)與量化系數(shù)相乘的結(jié)果最大將有11+12共23位。由于TMS320C62xDSP芯片中集成的乘法器是16位×16位的乘法器,乘法運(yùn)算結(jié)果存放到32位的寄存器中。所以用本文方法計(jì)算出的量化系數(shù)與DCT變換系數(shù)相乘后,結(jié)果不會(huì)溢出。

          根據(jù)MPEG-4 Visual標(biāo)準(zhǔn)TMN 2.0的要求,量化后AC系數(shù)值要飽和到[-2048,2047]之間。這可以利用TMS320C62x芯片指令集中的飽和左移指令SSHL來(lái)實(shí)現(xiàn),只需兩條指令即可完成飽和運(yùn)算,無(wú)需使用比較指令和跳轉(zhuǎn)指令。

          下面給出內(nèi)部宏塊量化的TMS320C62x線性匯編程序:

          cmpeq type,1 //type定義的是當(dāng)前塊的類型

          [type] ldh *+DcLumQCoeff[QP],dc_coeff //得到類型1的DC系數(shù)的量化參數(shù)

          [!type] ldh *+DcChromQCoeff[QP],dc_coeff //得到類型2的DC系數(shù)的量化參數(shù)

          lde *coeff[0],level //取出DCT變換DC系數(shù)

          mpy level,dc_coeff,level //用乘法進(jìn)行量化

          addk 0x400,level //加 0x400,對(duì)結(jié)果進(jìn)行四舍五入

          shr level,11,level //右移11位

          cmpgt level,maxDC,tmp //對(duì)量化后的DC系數(shù)進(jìn)行飽和運(yùn)算

          [tmp] mv maxDC,level //將其限制在[1,maxDC]之間cmplt level,1,tmp

          [tmp] mvk 1,level

          ldh *+AcQcoeff[QP],ac_coeff //得到AC系數(shù)的量化參數(shù)

          mvk 63,cntr //63次循環(huán),只對(duì)AC系數(shù)進(jìn)行量化

          loop: .trip 63 ldh *coeff++[1],cof //取出DCT變換AC系數(shù)

          abs cof,level

          mpy level,ac_coeff,level //對(duì)AC系數(shù)絕對(duì)值用乘法進(jìn)行量化

          shru level,11,level //右移11位

          cmplt cof,0,tmp

          [tmp] neg level,result

          [!tmp] mv level,result

          sshl result,20,result //將量化后的AC系數(shù)值進(jìn)行飽和運(yùn)算,

          shru result,20,result //將結(jié)果限制在[-2048,2047]之間

          sth result,*qcoeff++[1]

          [cntr] sub cntr,1,cotr

          [cntr] b loop

          由該程序可以看到,程序中沒有任何會(huì)影響流水線的的跳轉(zhuǎn)語(yǔ)句及函數(shù)調(diào)用。因此將該程序編譯后會(huì)發(fā)現(xiàn),此循環(huán)被優(yōu)化構(gòu)成軟件流水。如果再使用其它一些優(yōu)化手段,比如合并程序中的移位指令,合作字訪問指令一次處理兩個(gè)短型數(shù)據(jù)等,該程序的效率將會(huì)更高。我們用TMS320C62x軟件仿真器測(cè)試表明,原來(lái)使用除法的量化函數(shù)需要4871個(gè)周期,而運(yùn)用上述優(yōu)化辦法進(jìn)行優(yōu)化后的量化函數(shù)只需275個(gè)周期即可完成,效率提高約18倍。

          DCT/IDCT變換及量化過(guò)程是視頻圖像壓縮系統(tǒng)中的關(guān)鍵模塊。該模塊的執(zhí)行速率對(duì)整個(gè)系統(tǒng)的處理流度影響很大,因此將量化過(guò)程中的浮點(diǎn)運(yùn)算轉(zhuǎn)換為定點(diǎn)運(yùn)行,提高該模塊在定點(diǎn)DSP芯片上的執(zhí)行速度,其意義顯得尤為重要。同時(shí)由于目前絕大多數(shù)數(shù)字通訊系統(tǒng)都基于定點(diǎn)DSP芯片,如果用定點(diǎn)芯片完成視頻圖像處理將會(huì)有易于與數(shù)字通訊系統(tǒng)集成的優(yōu)點(diǎn)。我們的這一方法為在定點(diǎn)芯片上完成圖像處理進(jìn)行了有益的嘗試,為后續(xù)的研發(fā)工作打下了一個(gè)良好的基礎(chǔ)。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();