新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 二維DCT編碼的DSP實(shí)現(xiàn)與優(yōu)化

二維DCT編碼的DSP實(shí)現(xiàn)與優(yōu)化

作者: 時(shí)間:2008-10-08 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/258041.htm
  4 

  無論是C語言還是匯編語言,程序流程均分為初始化、行變換、列變換和移位輸出四個(gè)步驟。行、列變換具有相似性,如果對(duì)行變換的結(jié)果矩陣轉(zhuǎn)置,則列變換程序跟行變換一樣。對(duì)于匯編而言,初始化部分主要初始化FP指針以指向前一函數(shù)地址,初始化數(shù)據(jù)和指針寄存器以保存返回?cái)?shù)據(jù)等。由于DCT行變和列變換過程相似,且列變換是在行變換操作的基礎(chǔ)上進(jìn)行的。則可利用多種索引尋址寄存器的靈活組合,把行變換結(jié)果直接以轉(zhuǎn)置方式存儲(chǔ)而不增加實(shí)際的存儲(chǔ)時(shí)間,這樣行列變換可使用同一代碼循環(huán)兩次實(shí)現(xiàn),減小了實(shí)際代碼大小。圖2一維 DCT變換的流程圖。

  由于的小數(shù)乘法指令是先經(jīng)過乘法運(yùn)算后自動(dòng)調(diào)整的,其運(yùn)算時(shí)間比起整數(shù)運(yùn)算要費(fèi)時(shí)。因此,采用先倍乘CONST_SCALE,然后整數(shù)運(yùn)算的方式來節(jié)省運(yùn)算時(shí)間。運(yùn)算的結(jié)果需要除以系數(shù)CONST_SCALE,這在程序運(yùn)行時(shí)多帶來了兩次乘法,可以使用左右移位來實(shí)現(xiàn)。由于右移位同時(shí)會(huì)帶來移位誤差,因此在程序中使用了可選擇舍入運(yùn)算方式。

  為了達(dá)到更好的精度,在行變換時(shí)倍乘后再相加。這可使用Blackfin帶有預(yù)加/減比例的加法指令在一個(gè)指令周期內(nèi)實(shí)現(xiàn)。

  程序簡(jiǎn)化行列變換的代碼如下:

  B0 = R0;

  B3 = R1;

  B2 = R2; …

  LSETUP (DCT_START, DCT_END) LC0 = P0;

  DCT_START:…

  LSETUP(ROW_START,ROW_END)LC1=P2;

  ROW_START: …

  ROW_END:…

  B1 = B0;

  B0 = B2;

  DCT_END:B2 = B1;

  程序初始時(shí),R0指向輸入矩陣,R2指向中間矩陣,內(nèi)層循環(huán)是行變換過程,該過程結(jié)束時(shí),中間矩陣存儲(chǔ)著行變換結(jié)果的轉(zhuǎn)置。通過B0和B2的指針交換,把中間矩陣當(dāng)作輸入進(jìn)行行變換,這樣,把原輸入矩陣變成了輸出矩陣,并且矩陣中各元素位置不變。

  比較式(1)和(3)發(fā)現(xiàn),二維DCT 變換時(shí)結(jié)果為兩次無理數(shù)sqrt(8)相乘,產(chǎn)生了有理項(xiàng),因此,在程序里首先多乘一次sqrt(8),然后在兩次DCT 變換結(jié)束以后,使用右移3位以達(dá)到正常輸出。


   圖2 1維行DCT變換流程圖

  為了評(píng)估優(yōu)化后的效果,在A—BF533 EZLITE平臺(tái)和VisualDSP4.5環(huán)境下,當(dāng)BF533

  工作在核心頻率594MHZ時(shí),對(duì)一源圖像點(diǎn)陣灰度數(shù)據(jù)進(jìn)行DCT處理。該灰度圖像為一個(gè)8×8的數(shù)組A[6],對(duì)A進(jìn)行二維 DCT 調(diào)用,實(shí)際運(yùn)行結(jié)果為:C語言代碼為392 bytes,執(zhí)行時(shí)間為3.806397 μs;匯編語言代碼為248 bytes,執(zhí)行時(shí)間為1.085859μs。顯然,與以C語言為主的二維相比,用匯編語言實(shí)現(xiàn)的二維在代碼大小、代碼執(zhí)行時(shí)間上均得到了很大改善。

  5 結(jié)論

  本文創(chuàng)新之處在于能根據(jù)ADSP-BF533的結(jié)構(gòu)和指令特點(diǎn)及視頻信號(hào)壓縮的實(shí)時(shí)性要求,使用匯編語言對(duì)視頻信號(hào)進(jìn)行了二維及優(yōu)化。實(shí)驗(yàn)證明:在ADSP-BF533硬件平臺(tái)和VisualDSP4.5環(huán)境下,當(dāng) CPU運(yùn)行在594MHZ時(shí),使用匯編語言實(shí)現(xiàn)的DCT變換比C語言實(shí)現(xiàn)的DCT變換執(zhí)行時(shí)間減小71.4%,代碼空間減小近30%。以標(biāo)準(zhǔn)CIF 測(cè)試序列為例,壓縮一張352×288的圖片能減少4.31ms,可見優(yōu)化效果顯著。


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

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

關(guān)閉