王永霞,劉 博,張 剛
(太原理工大學信息工程學院,山西太原030024)
AVS是我國自主知識產(chǎn)權的第二代數(shù)字音視頻信源標準,在2006年2月確定為國家標準并開始實施。它的編碼效率與H.264相當,算法復雜度和硬件實現(xiàn)成本比H.264低。尤其是在碼率和PSNR相當?shù)那闆r下,AVS的編碼速度比H.264高[1]。AVS視頻編碼標準采用一系列新技術去除數(shù)據(jù)傳輸和存儲冗余,因此AVS視頻編碼過程包含幀內(nèi)預測、幀間預測、DCT變換、和熵編碼[2]等。其中,幀間預測中利用運動矢量來消除圖像間的冗余;幀內(nèi)預測中采用臨近宏塊相關性來消除圖像內(nèi)部的空間冗余;再通過對預測殘差進行DCT變換和量化消除視覺冗余,最后利用熵編碼有效減小編碼冗余[3]。
由于AVS標準提出的時間較晚,所以FPGA實現(xiàn)的實例較少。由于FPGA具有集成度高和系統(tǒng)結構靈活的特點[4],本文設計選擇FPGA為平臺,在其上實現(xiàn)了AVS編碼器的P幀部分。
完整的AVS編碼器框圖如圖1所示,AVS編碼幀分為3種:幀內(nèi)預測幀(I幀)、前向幀間預測幀(P幀)和雙向幀間預測幀(B幀)。下面介紹AVS編碼原理[5]。
圖1 AVS編碼器框圖
預測值是由前面已編碼的參考圖像經(jīng)運動補償后獲得。為了提高預測精度和壓縮比,實際的參考圖像可從已重建并濾波的幀中選擇,再與當前塊相減產(chǎn)生1個殘差塊,殘差塊經(jīng)整數(shù)變換(DCT)和量化[6](Quant)后產(chǎn)生一組系數(shù),將這些系數(shù)熵編碼(CAVLC),并與解碼所需的一些頭信息整合組成1個壓縮后的比特流,經(jīng)NAL(網(wǎng)絡自適應層)傳輸和存儲。為提供進一步預測所用的傳輸參考圖像,利用編碼器具有重建圖像的功能,將殘差圖像經(jīng)反量化(DE-QUANT)和反整數(shù)變換(IDCT)[7]得到新的殘差塊,將其與預測值相加,在本地得到一幀新的圖像,經(jīng)濾波后所得重建圖像作為后續(xù)編碼參考圖像[8]。
根據(jù)AVS編碼器編碼算法的特點,P幀編碼器包括MV預測模塊、運動估計模塊、變換量化模塊和熵編碼模塊,再加上重構、殘差和CBP頭文件等一些外圍電路構成。具體實現(xiàn)框圖如圖2所示。
圖2 整體設計原理框圖
MV預測模塊:當前編碼塊由臨近已編碼塊的MV預測而得到MVp。
運動估計模塊:由于運動圖像臨近幀之間存在相關性,所以將運動圖像分割成若干宏塊,并經(jīng)運動搜索得出當前編碼塊的最佳匹配塊在參考幀中的位置,根據(jù)其準確位置即可得到空間相對偏移矢量MV。
變換量化模塊:反量化、反DCT變換所得數(shù)據(jù)與參考塊相加得重建幀。
編碼模塊:主要包括DCT變換和反DCT變換、量化和反量化、ZIG-ZAG掃描和CAVLC熵編碼。DCT變換、量化后所得數(shù)據(jù)經(jīng)ZIG-ZAG掃描后傳送給熵編碼,作為CAVLC熵編碼的輸入數(shù)據(jù),CAVLC熵編碼形成的碼流前加入CBP頭文件,得到最終壓縮后的比特流8位對齊存入RAM中。
依據(jù)FPGA硬件平臺的特點,采用硬件描述語言VHD語言設計。本設計的核心模塊是MV預測模塊、運動估計模塊和編碼模塊。下面以P幀任一宏塊為例介紹各個模塊的功能和作用。
該模塊主要完成MVP_x和MVP_y的獲取。實現(xiàn)過程分4個狀態(tài)完成,分別是空閑、接收、計算和傳輸,如圖3所示。
圖3 MV預測狀態(tài)轉移圖
Stidle是空閑狀態(tài);Streceive是數(shù)據(jù)接收狀態(tài),加載左邊塊、上邊塊和右上邊塊這3個相鄰參考塊,分別用i_refa,i_refb,i_refc表示,及其相應運動矢量為 mva_x、mva_y,mvb_x、mvb_y,mvc_x、mvc_y;Stcalculate 是計算過程,具體步驟與AVS標準中MV預測過程[4]完全一致;Sttrans是MVP_x和MVP_y的輸出過程。用ModelSim仿真,結果如圖4所示。
圖4 MV預測模塊仿真結果(截圖)
該模塊需要從當前幀和參考幀中獲取輸入數(shù)據(jù),從當前幀中得到當前塊數(shù)據(jù),從參考幀中獲取搜索窗數(shù)據(jù)。在搜索窗中搜索得到SAD值最小的宏塊,作為當前塊的最佳匹配塊,并用運動矢量的形式記錄匹配塊的空間位置。此過程主要包括運動搜索、SAD計算、最佳運動矢量和預測模式的獲取。由于全搜索算法數(shù)據(jù)規(guī)則容易控制且易并行處理,所以本設計采用的搜索模式為全搜索;利用當前塊數(shù)據(jù)與參考窗數(shù)據(jù)作絕對差再求和所得結果即為所需SAD值;根據(jù)最佳匹配塊位置即可得到最佳運動矢量;預測模式包括8×8、8×16、16×8、16×16四種,SAD值最小的預測模式為最佳預測模式。由于最佳搜索模式為16×16的概率最大,因此,以16×16搜索模式為例介紹搜索過程。
實現(xiàn)過程包含空閑、數(shù)據(jù)接收、SAD計算和輸出16×16搜索模式下的最小SAD值4個狀態(tài),SAD計算過程和狀態(tài)轉移過程用ModelSim仿真,結果如圖5所示。ssad0_inter16×16o~ssad16_inter16×16o輸出SAD計算結果其中,dataout_inter16×16o輸出數(shù)據(jù)為16×16搜索模式下的最小SAD,mv_x和mv_y為此SAD值對應的運動矢量,stcurrent_inter16×16o為狀態(tài)跳轉。
圖5 16×16運動搜索仿真結果(截圖)
此模塊由DCT變換、量化、反DCT變換、反量化和熵編碼五部分構成。其中,DCT變換和反DCT變換都采用蝶形算法,每次處理8×8塊的一行數(shù)據(jù),且大量采用加法和移位,這樣節(jié)省了大量的時間和空間。查表實現(xiàn)量化和反量化,表格存儲在ROM中。DCT變換和量化后的數(shù)據(jù)通過DV_RAM傳給熵編碼模塊,反量化和反DCT變換的數(shù)據(jù)形成重構殘差塊。熵編碼主要實現(xiàn)ZIG-ZAG掃描、游程編碼、碼表的查詢與切換、哥倫布編碼和碼流輸出;此過程采用占用空間少的存儲方法存儲碼表,并將碼表查詢與切換、哥倫布編碼合并成流水線單元并行完成,省去了中間數(shù)據(jù)的存儲,還將熵編碼子過程并行完成,加快了處理速度。
編碼模塊輸入數(shù)據(jù)是當前塊與預測塊對應數(shù)據(jù)作差得到的殘差塊數(shù)據(jù),如圖6所示,其中圖6a是C代碼中輸入殘差數(shù)據(jù),圖6b是ModelSim仿真中截取的輸入數(shù)據(jù)流。經(jīng)DCT變換、量化和熵編碼后的碼流如圖7所示,其中圖7a是從AVS算法C代碼中截取的碼流;圖7b是從ModelSim仿真中截取的比特流。通過比較可以看出,2種方法輸入數(shù)據(jù)和所得結果都完全一致,說明FPGA的P幀編碼過程可正確輸出比特流。
圖6 編碼輸入數(shù)據(jù)仿真結果對比(截圖)
圖7 編碼輸出比特流仿真結果對比(截圖)
本設計整個編碼過程都是利用VHDL硬件描述語言,Xilinx ISE綜合,仿真器選用Xilinx公司的xc5vlx110t-1ff1136,綜合后最高工作頻率為117.534 MHz下,資源占用情況如表1所示,實驗結果表明資源占用少。
表1 資源利用表
CIF分辨率(352×288)YUV4∶2∶0的原始圖像,在100 MHz的時鐘頻率下,編碼一個16×16宏塊所需周期數(shù)限定在=10 101內(nèi)。由表1看出,本實驗所占周期為7 670,完全滿足實時編碼需求。
一幀圖像(以foreman圖像為例)編碼完之后形成的比特流,利用本實驗室自主研發(fā)的解碼器解碼之后所得圖像如圖8所示,表明本設計編碼過程完全正確。
圖8 解碼所得圖像(截圖)
本文在FPGA上設計與實現(xiàn)了AVS編碼器P幀,經(jīng)驗證和仿真,能達到CIF分辨率下的實時編碼。與同類其他研究相比,本文實現(xiàn)過程中采用并行和流水處理,保證了硬件資源的高效運行和最優(yōu)利用,并且對AVS在FPGA上的發(fā)展和完善起到了良好的促進作用。
[1]張欣佑,張曉東,王浩.AVS編碼與DSP實現(xiàn)的視頻編碼器[J].單片機與嵌入式系統(tǒng)應用,2006(12):16-18.
[2]李德斌,易清明,石敏.AVS解碼器中碼流分割模塊的硬件實現(xiàn)[J].電視技術,2009,33(11):35-37.
[3]連云冠,石玥,夏軍,等.AVS和H.264編解碼性能的比較[J].電信科學,2007(3):18-21.
[4]鄧瓊,楊立志,劉力政,等.一種基于FPGA的AVS編碼加速器的設計[J].微電子學與計算機,2008(6):97-100.
[5] GB/T20090.2—2006,信息技術先進音視頻編碼第二部分:視頻[S].2006.
[6]黃學超,張衛(wèi)寧.AVS量化和掃描硬件設計與實現(xiàn)[J].電氣電子教學學報,2011(2):34-37.
[7]張璐,劉佩林.基于FPGA的AVS反變換的設計與實現(xiàn)[J].電視技術,2006,30(7):20-23.
[8]畢厚杰.視頻壓縮編碼標準—H.264/AVC[M].北京:人民郵電出版社,2005.