劉 博,王永霞,張 剛
(太原理工大學(xué)通信與嵌入式系統(tǒng)實驗室,山西太原 030024)
AVS環(huán)路濾波器的FPGA優(yōu)化及實現(xiàn)
劉 博,王永霞,張 剛
(太原理工大學(xué)通信與嵌入式系統(tǒng)實驗室,山西太原 030024)
針對AVS環(huán)路濾波的算法原理,用VHDL語言完成了在FPGA硬件平臺上的設(shè)計和仿真實現(xiàn)。環(huán)路濾波器對濾波數(shù)據(jù)的存儲結(jié)構(gòu)進行了合理的安排,用連續(xù)地址和跳變地址相結(jié)合的方式讀取數(shù)據(jù),并實現(xiàn)了讀取數(shù)據(jù)的同時并行進行計算操作,減少了環(huán)路濾波所占用的時鐘周期,提高了計算效率。該設(shè)計基于Xilinx公司的Virtex-4平臺實現(xiàn),最高時鐘頻率可達到140 MHz,滿足AVS實時編碼要求。
AVS;環(huán)路濾波器;FPGA
AVS是我國自主提出的數(shù)字電視、IPTV等音視頻編解碼標準,其技術(shù)簡潔,實現(xiàn)的復(fù)雜度較低,并且未使用國際標準中諸多專利而在成本上極具優(yōu)勢,受到人們越來越多的重視和關(guān)注[1]。FPGA可以方便地設(shè)計出硬件邏輯,滿足系統(tǒng)開發(fā)的靈活性、便利性、實時性以及系統(tǒng)設(shè)計的可編程性要求。
AVS編碼以宏塊為單位,會在塊的邊界處產(chǎn)生數(shù)據(jù)的不連續(xù),即“方塊效應(yīng)”[2]。為去除“偽邊界”所導(dǎo)致的方塊效應(yīng),需要加入環(huán)路濾波器。環(huán)路濾波明顯地提高重構(gòu)圖像質(zhì)量,同時環(huán)路濾波后作為參考幀使用[3]能提高預(yù)測效果,進而提高編碼效率。
AVS標準規(guī)定濾波操作大致分為三個步驟:第一,推導(dǎo)塊邊界閾值α、β;第二,判別邊界濾波強度Bs;第三,根據(jù)不同的Bs進行相應(yīng)的濾波操作。
根據(jù)濾波邊界兩個塊的qp平均值qp,以及Alphacoffset和Betaoffset由式(1)和式(2)計算得到索引值IndexA和IndexB,再查表得到對應(yīng)的α、β的取值。根據(jù)式(3)判別是否進行對該邊界濾波計算。濾波強度主要由編碼中殘差的大小決定[4]。由于幀內(nèi)預(yù)測涉及的參考像素較少,產(chǎn)生的殘差會較大,因此對殘差變換量化后的誤差就大,塊的邊緣就可能存在較強的虛假邊界。所以采用強濾波模式(Strong Filter),即Bs=2。相對于幀內(nèi)預(yù)測,幀間預(yù)測則較準確,變換產(chǎn)生的殘差較小,故邊緣強度也較小,所以采用標準濾波模式(Normal Filter),即Bs=1。具體濾波強度判別采用如下方式:當邊界兩邊的兩個8×8塊至少有一個屬于幀內(nèi)預(yù)測宏塊時,則判斷Bs為2;若當前幀為P或B幀圖像,邊界兩邊塊的參考圖像相同,并且兩個塊的運動矢量中有一個分量的差值大于或等于一個整像素,則判別Bs為1,否則Bs為0。
AVS根據(jù)邊界強度Bs進行不同的濾波處理,如圖1所示,其中粗線為兩個塊的邊界。Bs=0時不濾波;Bs=1時用到邊界兩側(cè)各三個像素點b2、b1、b0、a0、a1、a2;Bs=2 時用到邊界兩側(cè)各兩個像素點b1、b0、a0、a1[5]。
圖1 水平或垂直濾波邊界樣本值
AVS標準規(guī)定除條帶邊界及圖像邊界之外,宏塊的所有邊界都需進行濾波。這里的宏塊邊界是指宏塊內(nèi)部所有8×8塊的邊界、當前宏塊與其相鄰宏塊的上邊界以及左邊界。以宏塊為單位進行環(huán)路濾波,按照光柵掃描順序?qū)Ω鱾€8×8塊依次處理。
對色度塊和亮度塊分別進行環(huán)路濾波,圖2、圖3所示是4∶2∶0格式的亮度塊和色度塊的濾波邊界。按照從左到右順序先濾波垂直邊界,再按照從上到下的順序濾波水平邊界。
圖2 亮度塊濾波邊界
圖3 色度塊濾波邊界
當前宏塊的邊界樣本值可能在之前的濾波過程中已經(jīng)被修改,故當前宏塊的濾波輸入值應(yīng)為這些被濾波修改的邊界樣本值,并且當前宏塊濾波輸出值可能會再次修改這些邊界的樣本值。
本文將環(huán)路濾波以8×8的子宏塊為單位,在一個16×16的宏塊中依次循環(huán)4次執(zhí)行。在塊數(shù)據(jù)存儲時采用3塊RAM存儲器,如圖4所示。其中RAM 1和RAM2分別用于存儲當前塊左邊界三列和上邊界三行各24個數(shù)據(jù),RAM3用于存儲當前塊的64個數(shù)據(jù)。濾波垂直邊界時,采用3個時鐘周期同時讀取RAM1和RAM3中濾波邊界左右各3個點的數(shù)據(jù),對其進行相應(yīng)的判斷和計算,最后得出濾波后的數(shù)據(jù)值,按照原地址再依次寫回RAM1和RAM3中,作為后續(xù)塊濾波邊界的輸入值,對于水平邊界做同樣的處理。與只用一塊RAM相比較,這樣的存儲方式可以大大減少存取數(shù)據(jù)時所占用的時鐘周期,提高了處理速度。
圖4 數(shù)據(jù)存儲的RAM結(jié)構(gòu)
在本設(shè)計中,水平邊界濾波和垂直邊界濾波使用同一個計算單元,由于垂直邊界濾波后的數(shù)據(jù)可能會作為水平濾波的輸入樣本值,如圖3中宏塊的左上角3×3個數(shù)據(jù)。因此只有在垂直邊界濾波完成后才能濾波水平邊界,決定了濾波邊界的順序性。在向RAM中存入數(shù)據(jù)時,由于按照水平方向RAM依次地址加1,故對垂直邊界濾波時,可依次讀出邊界兩側(cè)連續(xù)地址的3個樣本值。但當對水平邊界濾波時,若仍采用讀出邊界兩側(cè)連續(xù)地址的3個數(shù)據(jù)值作為樣本值的方法,則需要對當前塊的數(shù)據(jù)塊進行行列轉(zhuǎn)置[6]。這里采用地址跳轉(zhuǎn)的方式對樣本數(shù)據(jù)值進行讀取來代替數(shù)據(jù)塊的轉(zhuǎn)置,有效地縮減了數(shù)據(jù)行列轉(zhuǎn)置過程中占用的時鐘周期。如圖5所示,在計算第n組濾波邊界樣本值的同時從RAM中讀取第n+1組邊界樣本值;在輸出第n組濾波計算值的同時開始第n+1組的濾波計算;使讀數(shù)和計算能并行處理,提高了濾波的計算效率。
圖5 環(huán)路濾波讀數(shù)和計算的并行實現(xiàn)
如圖6所示,狀態(tài)機在開始時處于Stidle狀態(tài),表示狀態(tài)空閑。當數(shù)據(jù)使能信號en=1時,表示有數(shù)據(jù)到來,此時狀態(tài)機就進入Streceive狀態(tài),開始接收數(shù)據(jù)。接收的數(shù)據(jù)包括3部分,當前塊數(shù)據(jù)、左邊界三列數(shù)據(jù)以及上邊界三行數(shù)據(jù)。數(shù)據(jù)接收完畢,計算塊邊界閾值α、β,判別濾波強度Bs值,選擇濾波模式。Stver_read表示讀取垂直邊界兩邊的數(shù)據(jù);在St_cal狀態(tài)計算垂直邊界濾波。當ver_cnt=8,即一個垂直邊界的8組數(shù)據(jù)計算結(jié)束,通過Sthor_read狀態(tài)讀取水平邊界兩邊的數(shù)據(jù)并在St_cal狀態(tài)計算。由于對同一種濾波強度,其水平和垂直邊界的計算過程是相同的,所以St_cal可以被反復(fù)調(diào)用。當前塊所有邊界濾波結(jié)束后在Sttransmit狀態(tài)將濾波后得到的計算數(shù)據(jù)輸出。
圖7是Bs=1時色度濾波的具體硬件實現(xiàn)過程。計算時先對a0、b0兩個點濾波,首先讀取濾波邊界各2個樣本值a0、a1、b0、b1作為樣本輸入值,最后得到濾波計算輸出值A(chǔ)0、B0。
圖6 環(huán)路濾波器狀態(tài)轉(zhuǎn)移圖
圖7 Bs=1時濾波的硬件實現(xiàn)過程
若當前為亮度邊界濾波,則還需對a1、b1兩個點進行濾波,其計算過程與圖6類似。濾波a1點時,只需將圖6中輸入數(shù)據(jù)的a1和a0,對應(yīng)換成其經(jīng)濾波運算后的輸出值A(chǔ)0和B0;以及與b1和b0對應(yīng)的輸入換成b2和b1即可獲得濾波輸出A1。濾波b1點時,只需將圖6中輸入數(shù)據(jù)的a1和a0,對應(yīng)換成a2和a1;以及與b1和b0對應(yīng)的輸入換成其經(jīng)濾波運算后的輸出值B0和A0即可獲得濾波輸出B1。
圖8是Bs=2時色度濾波的具體硬件實現(xiàn)過程,數(shù)據(jù)輸入方式與Bs=1時相同。進行亮度濾波a1點時,只需將輸入值a1和a0互換即可得到濾波輸出值A(chǔ)1;濾波b1點時,只需將輸入值b1和b0互換即可得到濾波輸出值B1。
圖8 Bs=2時濾波的硬件實現(xiàn)過程
本文在ISE 10.1環(huán)境下,使用VHDL語言設(shè)計并優(yōu)化了AVS環(huán)路濾波器。硬件平臺是Xilinx公司的Virtex-4系列的FPGA xc4vsx25。以8×8的色度塊為例,在Bs=1、qp=36的情況下,圖9是從AVS標準編碼軟件中截取的濾波結(jié)果,與圖10中ModelSim仿真軟件中得到的仿真結(jié)果一致。
圖9 AVS標準編碼濾波內(nèi)存數(shù)據(jù)(截圖)
圖10 濾波仿真結(jié)果數(shù)據(jù)(截圖)
資源利用情況如表1所示,整個濾波過程共占用434個時鐘周期,其中輸入濾波樣本值和輸出濾波計算結(jié)果各占112個周期,計算過程占210個時鐘周期,最高頻率能達140 MHz,能滿足AVS實時編碼要求。
表1 硬件資源利用
圖11是對AVS的一個標準碼流濾波前后的圖像對比,從圖像中可以直觀地看到環(huán)路濾波的去塊效應(yīng)效果顯著,經(jīng)濾波后的圖像質(zhì)量有了明顯的提高。
圖11 濾波前后圖像對比
本文設(shè)計的AVS環(huán)路濾波器,以8×8塊為單位進行濾波,采用3塊片內(nèi)RAM存儲濾波數(shù)據(jù),通過地址跳變完成濾波數(shù)據(jù)塊的轉(zhuǎn)置。采用數(shù)據(jù)讀取與計算并行處理流水結(jié)構(gòu),節(jié)省了時鐘周期,提高了計算效率和處理速度,能滿足AVS實時編碼高分辨率序列的要求。
:
[1]GB/T 20090.2—2006,先進音視頻編碼 第二部分:視頻[S].2006.
[2]畢厚杰.新一代視頻壓縮編碼標準:H.264/AVC[M].北京:人民郵電出版社,2005.
[3]黃友文,劉鈞彬.AVS去塊效應(yīng)濾波器的一種硬件優(yōu)化設(shè)計[J].江西理工大學(xué)學(xué)報,2011,32(2):70-72.
[4]林衡芝,張文軍,高志勇,等.一種支持H.264與AVS的高效環(huán)路濾波器設(shè)計[J].電視技術(shù),2011,35(11):31-35.
[5]張耀坤.基于FPGA的AVS編碼器中幀內(nèi)預(yù)測和環(huán)路濾波模塊的設(shè)計與實現(xiàn)[D].濟南:山東大學(xué),2011.
[6]黃中華,支琤.基于FPGA的AVS環(huán)濾波器設(shè)計與實現(xiàn)[J].計算機工程,2007,33(6),222-224.
張 剛(1953— ),博士生導(dǎo)師,主研語音編碼、視頻編碼、嵌入式系統(tǒng)等。
Optimization and Implementation of AVS Loop Filter on FPGA
LIU Bo,WANG Yongxia,ZHANG Gang
(Laboratory of Communication and Embedded System,Taiyuan University of Technology,Taiyuan 030024,China)
In this paper,design and simulation implementation of AVS loop filter are accomplished on FPGA hardware platform with VHDL language corresponding to relevant algorithm principles.For the loop filter designed,the storage structure of filter data is arranged reasonably,the data is read by means of combining contiguous address and jumps address together and computation operation is performed in parallel while reading data,reducing the clock cycles consumed by loop filtering and improving computation efficiency.This design is executed on Xilinx Virtex-4 with the maximum frequency up to 140 MHz,which satisfies the real- time encoding demand of AVS.
AVS;loop filter;FPGA
TN919.8
A
【本文獻信息】劉博,王永霞,張剛.AVS環(huán)路濾波器的FPGA優(yōu)化及實現(xiàn)[J].電視技術(shù),2014,38(1).
國家自然科學(xué)基金項目(60772101)
劉 博(1988— ),女,碩士生,主研視頻編解碼算法及其硬件實現(xiàn);
王永霞(1988— ),女,碩士生,主研視頻編解碼算法;
責任編輯:魏雨博
2013-05-12