摘 要: 闡述H.264標(biāo)準(zhǔn)中的整數(shù)反變換運算及反量化" title="反量化">反量化,。該硬件原型包含亮度直流系數(shù)的反哈達(dá)瑪變換和反量化以及亮度系數(shù)和色度系數(shù)的反變換過程,。根據(jù)蝶形算法,,該硬件原型采用分時復(fù)用" title="復(fù)用">復(fù)用技術(shù)和全零信號,節(jié)省運算時間。仿真結(jié)果表明,,該設(shè)計能滿足高清數(shù)字視頻的實時處理應(yīng)用,。
關(guān)鍵詞: H.264;整數(shù)變換,;反量化;分時復(fù)用(TDM)
?
H.264是由ITU-T的VCEG(視頻編碼" title="視頻編碼">視頻編碼專家組)和ISO/IEC的MPEG(運動圖像編碼專家組)共同開發(fā)的一個新的數(shù)字視頻編碼國際標(biāo)準(zhǔn),,它以提高視頻編碼在壓縮效率和網(wǎng)絡(luò)環(huán)境下更高的穩(wěn)定性為應(yīng)用目標(biāo),。H.264在各功能模塊的實現(xiàn)細(xì)節(jié)上引入一些新的技術(shù),例如幀內(nèi)預(yù)測,、1/4精度的運動補(bǔ)償,、基于4×4塊的整數(shù)變換等。這些措施使得H.264算法具有很高的編碼效率,,在相同的重建圖像質(zhì)量下,,能夠比H.263節(jié)約50%左右的碼率[1,2],。在H.264 Baseline 中,,反變換解碼和反量化過程中采用了整數(shù)DCT逆變" title="逆變">逆變換,并將尺度調(diào)整融合到反量化過程中,。由于反變換過程僅通過加法和移位操作完成,,用整數(shù)運算代替浮點運算,不僅提高變換速度,,也解決反變換的失配問題,,同時反量化過程用乘法和移位操作代替除法運算,因而適合硬件實現(xiàn),。本文針對H.264Baseline高清視頻解碼芯片中ITIQ模塊的設(shè)計進(jìn)行論述及硬件實現(xiàn)結(jié)構(gòu),。
1 H.264的反量化和反變換
反量化公式如式(1)所示:
其中Wij′為反量化后的系數(shù),將作為反變換的輸入,,Zij為反量化的輸入,,Qstep為量化步長,PF為縮放因子,,系數(shù)64用來消除取整誤差,。H.264標(biāo)準(zhǔn)不直接說明Qstep或PF,而是根據(jù)0≤QP≤5和每個系數(shù)位置,,定義參數(shù)Vij=(Qstep×PF×64),,QP(量化參數(shù))每增加6,Qstep增大一倍,。公式(1)改為:
Vij為縮放比例因素,。QP與Qstep的對應(yīng)關(guān)系、Vij與QP%6以及像素位置關(guān)系可查表獲得[3]。4×4塊亮度DC系數(shù)在解碼器里,,先是一個反哈達(dá)瑪變換,,然后是反量化。反哈達(dá)瑪變換:
反量化:
其中(i,,j=0,,…,3),,V(0,,0)對應(yīng)于Vij位置(0,0)的縮放比例因素,,floor( )為取整函數(shù),。
反變換:
??? ?
這是H.264中所用到的整數(shù)反變換公式,其變換核CMT W′Cm僅用加減法(和右移)即可實現(xiàn),。中間的點乘操作可以合并到前面的反量化過程中去,,由于把變換和量化融合在一起,因而有效地減少了壓縮編碼的運算量[4],。
2 硬件設(shè)計
由于整數(shù)DCT逆變換與亮度直流系數(shù)哈達(dá)瑪逆變換在算法上有許多共同點,,并且兩者在時間上也不會重疊,所以在硬件設(shè)計上采用模塊復(fù)用,。相關(guān)聯(lián)模塊結(jié)構(gòu)如圖1所示,,ENTR模塊(entropy decode)是H.264 decode IP 中的熵解碼模塊。INT模塊包含幀內(nèi)預(yù)測和幀間預(yù)測,,它把反變換后的殘差值與預(yù)測值相加且移位后可得重構(gòu)的圖像像素值,。ENTR模塊把亮度直流系數(shù)傳給ITIQ 模塊做哈達(dá)瑪反變換和反量化,ITIQ再把反量化后的亮度直流系數(shù)傳回ENTR模塊,。ENTR模塊把反量化后的亮度(DC系數(shù)和AC系數(shù))和色度(DC系數(shù)和AC系數(shù))數(shù)據(jù)存入CB模塊中,。CB模塊再把數(shù)據(jù)傳給ITIQ模塊做反變換,ITIQ模塊把結(jié)果又傳給CB模塊,,CB模塊再把反變換后的殘差傳給INT模塊,。色度DC系數(shù)的哈達(dá)瑪反變換和反量化及亮度(DC系數(shù)和AC系數(shù))和色度(DC系數(shù)和AC系數(shù))的反量化在ENTR模塊中完成。
?
2.1 CB模塊的設(shè)計
由于反變換分為水平與垂直變換,,做完水平變換的數(shù)據(jù)要先存儲,,然后再根據(jù)存儲的數(shù)據(jù)做垂直變換。CB模塊的功能是存儲和控制,總共存儲兩組數(shù)據(jù),,每組256bit,。ENTR模塊把經(jīng)過反量化后的亮度(DC系數(shù)和AC系數(shù))和色度(DC系數(shù)和AC系數(shù))的數(shù)據(jù)存入CB模塊中,CB模塊再把數(shù)據(jù)傳給ITIQ模塊做反變換,,ITIQ模塊做完后把結(jié)果又傳給CB模塊,,CB模塊再把反變換后的殘差給INT模塊。CB模塊有一計數(shù)信號,ENTR模塊每寫入一組數(shù)據(jù)加1,,當(dāng)計數(shù)信號為2時發(fā)信號給ENTR模塊不能再寫入數(shù)據(jù),,INT模塊每讀完一組數(shù)據(jù)時計數(shù)信號減1。CB模塊發(fā)信號給ITIQ模塊啟動反變換,,當(dāng)反變換完成時CB模塊發(fā)信號給INT模塊允許讀取,。在中低碼率編碼過程中,運動補(bǔ)償參差值經(jīng)過整數(shù)變換,、量化運算后,,常常會出現(xiàn)大量的零系數(shù),尤其低速運動的視頻序列出現(xiàn)的全零塊更多,。全零塊不需做反變換,可節(jié)省運算時間,,由ENTR模塊發(fā)全零塊信號ENTR_CB_zero給CB模塊,,CB模塊直接把數(shù)據(jù)傳給INT模塊,而省去反變換運算這一步,。這種情況要用信號itiq_do_zero控制:當(dāng)ITIQ模塊正在做反變換時,,ENTR模塊發(fā)全零塊信號給CB模塊,全零數(shù)據(jù)不能馬上傳給INT模塊,,要等待前面的數(shù)據(jù)傳給INT模塊后,,才能輪到全零塊數(shù)據(jù)。因此當(dāng)CB_ITIQ_enable為1時,,將itiq_do_zero置1,,當(dāng)反變換完成后再置0。剛好只存儲兩組數(shù)據(jù),,可采用3信號分別對應(yīng)3模塊來控制數(shù)據(jù)地址的翻轉(zhuǎn),,起始值都為0。如信號0表示兩模塊連接0地址,,信號1表示兩模塊連接1地址,。ENTR模塊每寫入一組數(shù)據(jù)entr_cb_flag加1,entr_cb_flag為0表示數(shù)據(jù)寫入cb[0],,entr_cb_flag為1表示數(shù)據(jù)寫入cb[1],。CB模塊每完成一次反變換itiq_cb_flag加1,如果itiq_do_zero為1,,則在反變換完成后下一時鐘周期" title="時鐘周期">時鐘周期itiq_cb_flag再加1,,itiq_cb_flag為0表示數(shù)據(jù)寫入cb[0],itiq_cb_flag為1表示數(shù)據(jù)寫入cb[1],。INT模塊每讀取完一組數(shù)據(jù)int_cb_flag加1,,int_cb_flag為0表示從cb[0]中讀取數(shù)據(jù),int_cb_flag為1表示從cb[1]中讀取數(shù)據(jù)。itiq_finish_cnt信號控制INT模塊是否讀取,,當(dāng)它為1或2時發(fā)一讀信號給INT模塊,。當(dāng)反變換做完時itiq_finish_cnt加1;當(dāng)ENTR_CB_
zero為1且itiq_do_zero為0時itiq_finish_cnt加1,,否則要等反變換做完后下一周期再加1; INT模塊每讀取完一組數(shù)據(jù)則減1,。
2.2 ITIQ模塊的設(shè)計
ITIQ硬件結(jié)構(gòu)如圖2所示?;贖adamard反變換和反向整數(shù)DCT變換有很多相似之處,,并且調(diào)用本模塊不會同時出現(xiàn),本模塊進(jìn)行功能復(fù)用,,根據(jù)啟動信號選通不同的數(shù)據(jù)進(jìn)行運算,。輸入數(shù)據(jù)一組為256bit,對應(yīng)4×4塊排列如表1所示,。本模塊根據(jù)面積與速度的協(xié)調(diào),,采用8個加法器(具體設(shè)計如表2所示),一次讀取64bit進(jìn)行運算,??偣灿?個狀態(tài),前4個狀態(tài)是水平變換,,后4個狀態(tài)是垂直變換,。在本模塊中采用的算法是蝶形算法,具體算法如圖3所示,。在反變換水平變換時,,a2=r2-r0中r2要先右移一位再減r0,a3=r2+r0 中r0要先右移一位再加r2,。
?
軟件模型中反量化系數(shù)可通過查表得到,,因它是相應(yīng)固定的值,在硬件中可根據(jù)輸入當(dāng)前量化系數(shù)直接賦相對應(yīng)的值,。哈達(dá)瑪逆變換得到的數(shù)據(jù)再與相對應(yīng)的反量化系數(shù)相乘,。當(dāng)QP值小于36時,在軟件模型中的加法可簡化為進(jìn)位則加1(當(dāng)往右移4位時,,如第4位為1則移位后結(jié)果再加1,,依此類推),其他情況則將相乘后的結(jié)果進(jìn)行相對應(yīng)的左移,。
狀態(tài)機(jī)圖如圖4所示,。狀態(tài)說明:Idle為起始狀態(tài),如果無解碼要求(即En=0),,則狀態(tài)機(jī)停留在Idlie狀態(tài),,否則狀態(tài)機(jī)跳轉(zhuǎn)到S1狀態(tài),。En信號為反變換或哈達(dá)瑪逆變換啟動信號。
?
S1:讀取data_in[63:0]共64bit數(shù)據(jù)做蝶形運算,,En=1跳轉(zhuǎn)到S2狀態(tài),,否則跳轉(zhuǎn)到Idlie狀態(tài)。r0=data_in [63:48],,r1=data_in[47:32],,r2=data_in[31:16],r3=data_in[15:0],。
S2:讀取data_in[127:64]共64bit數(shù)據(jù)做蝶形運算,,En=1跳轉(zhuǎn)到S3狀態(tài),否則跳轉(zhuǎn)到Idlie狀態(tài),。r0=data_in[127:112],,r1=data_in[111:96],r2=data_in[95:80],,r3=data_in[80:64],。
S3:讀取data_in[191:128]共64bit數(shù)據(jù)做蝶形運算,En=1跳轉(zhuǎn)到S4狀態(tài),,否則跳轉(zhuǎn)到Idlie狀態(tài),。r0=data_in[191:176],,r1=data_in[175:160],,r2=data_in[159:144],r3=data_in[143:128],。
S4:讀取data_in[255:192]共64bit數(shù)據(jù)做蝶形運算,,En=1跳轉(zhuǎn)到S5狀態(tài),否則跳轉(zhuǎn)到Idlie狀態(tài),。r0=data_in[255:240],,r1=data_in[239:224],r2=data_in[223:208],,r3=data_in[207:192],。
S5:讀取64bit數(shù)據(jù)做蝶形運算,En=1跳轉(zhuǎn)到S6狀態(tài),,否則跳轉(zhuǎn)到Idlie狀態(tài),。r0=data_in[207:192],r1=data_in[143:128],,r2=data_in[79:64],,r3=data_in[15:0]。
S6:讀取64bit數(shù)據(jù)做蝶形運算,,En=1跳轉(zhuǎn)到S7狀態(tài),,否則跳轉(zhuǎn)到Idlie狀態(tài),。r0=data_in[223:208],r1=data_in[159:144],,r2=data_in[111:96],,r3=data_in[31:16]。
S7:讀取64bit數(shù)據(jù)做蝶形運算,,En=1跳轉(zhuǎn)到S8狀態(tài),,否則跳轉(zhuǎn)到Idlie狀態(tài)。r0=data_in[239:224],,r1=data_in[175:160],,r2=data_in[111:96],r3=data_in[47:32],。
S8:讀取64bit數(shù)據(jù)做蝶形運算,,En=1跳轉(zhuǎn)到S1狀態(tài),否則跳轉(zhuǎn)到Idlie狀態(tài),。r0=data_in[255:240],,r1=data_in[191:176],r2=data_in[127:112],,r3=data_in[63:48],。
本設(shè)計采用的硬件平臺是Synopsys公司的VCS,整個設(shè)計在Unix環(huán)境下進(jìn)行,。在PC機(jī)上進(jìn)行整個IP環(huán)境仿真,,在QCIF格式下,ITIQ模塊完成一個宏塊的運算操作需要694個時鐘周期,。在D1格式下,,ITIQ模塊完成一個宏塊的運算操作需要570個時鐘周期。能夠滿足高清解碼的要求,。在FPGA上仿真,,在最高頻率100MHz下解碼比較流暢。目前該芯片正在流片中,。
參考文獻(xiàn)
[1] SCHAFER R,,WIEGAND T,SCHWARZ H.The emerging?H.264/AVC standard.EBU technical review,,2003,,(1).
[2] 王嵩,薛全,,張穎.H.264視頻編碼新標(biāo)準(zhǔn)及性能分析[J].電視技術(shù),,2003,(6).
[3] H.264/MPEG-4 Part 10 White Paper- transform and?quantization.
[4] 畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)-H.264/AVC[M].北京:人民郵電出版社,,2005.