基于FPGA實現(xiàn)視頻圖像的一種運動估計設計
人類獲取的信息中70%來自于視覺。視頻信息具有直觀性、確切性和高效性等優(yōu)點,其在多媒體信息中占有重要地位,成為了主導現(xiàn)代生活的主力軍。然而,視頻信息信息量太大,對信息存儲設備及通信網(wǎng)絡均提出了很高要求,嚴重阻礙了人們對有效信息的獲取和使用。而解決這個問題的途徑就是視頻編碼即視頻壓縮。
目前,視頻編碼的主控制芯片主要有3種:ASIC、FPGA和DSP。ASIC和PGA屬于硬件設計,DSP屬于軟件設計。從功能上說,全定制ASIC(Applieation Speeifie IntegratedCircuit)的功耗低、設計密度大并且能夠完成高速設計,但同時其開發(fā)周期很長,投片成本很高而且不容易對解決方案進行優(yōu)化,應用范圍很窄;DSp(Digital Signal Proeessing)可以提供強大的數(shù)字信號處理能力,其可編程特色可以支持各種標準格式的視頻編解碼算法,但其處理速度低、硬件結(jié)構(gòu)不靈活;FPGA(Field Programmable Gato Airay)兼有了兩者的一些優(yōu)點如可編程、功耗低等,同時又具有設計周期短、開發(fā)成本低、處理速度快、設計靈活等特點。
1 運動估計原理
運動估計主要是針對幀間預測,去除視頻幀在空間域和時間域的冗余度。塊匹配方法是目前編碼效率較高,普遍采用的一種編碼方法。首先,其要將當前幀進行劃分。長期實踐表明,將當前幀劃分為多個16x16的塊是比較合理的。其次,要根據(jù)劃分出的當前塊的具體情況,以及所采用的搜索方法來決定搜索窗口的大小。最后,要在所確定的搜索窗口里面,依據(jù)某種塊匹配準則找到當前塊的匹配塊以及由匹配塊到當前塊的運動矢量。圖1所示是塊匹配法的原理框圖,其中的箭頭就是由參考幀到當前幀的運動矢量。
目前經(jīng)常采用的塊匹配準則主要有歸一化互相關函數(shù)(NCCF),最小均方差(MSE)以及最小絕對值(MAD)。其中由于SAD準則在算法上并不需要做任何的乘法運算,可以減少很多的時間資源和硬件資源,從而使得SAD準則成為了現(xiàn)在通常使用的匹配準則。
其中A是參考幀中的搜索窗口區(qū)域,k-1和fk分別是當前幀和參考幀中的像素點值,(x0,y0)是塊中的其中一個點。
搜索采用的是三步搜索法,它是按照由粗到細的搜索理念,以一個像素為搜索精度,分為4,2,1,3個搜索步長進行搜索。一般選取原點作為起始點,分別按照4,2,1,3個步長組成9個點構(gòu)成的點群進行匹配運算,每次都是以誤差最小的塊為準匹配塊,在第二和第三步搜索時分別以第一和第二步搜索到的準匹配塊作為它們搜索的起始點。原理如圖2所示。
2 硬件實現(xiàn)
運動估計的原理圖如圖3所示。
2.1 地址計數(shù)器模塊
地址計數(shù)器主要是產(chǎn)生出可以在RRAM(參考塊存儲器)和CRAM(當前塊存儲器)中有目的地進行尋址的地址信號。如圖4所示。
地址計數(shù)器模塊的設計與當前塊和參考塊的存儲有很大的關系。將數(shù)據(jù)存入當前塊存儲器和參考塊存儲器時的順序是由左到右,由下到上,即當前塊存儲器是(-7,-7),(-6,-7),(-5,-7)……(8,-7),(-7,-6),(-6,-6)……(8,7),(8,8)。而參考塊存儲器是(-15,-15),(-15,-14),(-15,-13)……(-15,16),(-14,-15),(-14,-14)……(16,15),(16,16)。則可知在尋址當前塊存儲器時可以直接按照地址的由左到右,由下到上累加。其計算公式如式(2)所示:
C_addr=(j+7)×16+(i+8) (2)
對于參考塊存儲器,它是一個32x32的數(shù)據(jù)塊,設計的目的是從其中取出符合三步搜索法的9個數(shù)據(jù)塊,當然這九個數(shù)據(jù)塊都是16x16的,而且是以原點為中心組成的搜索點群。其計算公式如式(3)所示:
R_addr=(j+15)x32+(i+16) (3)
Clk是時鐘頻率信號,當它發(fā)生上升沿跳變時會使得產(chǎn)生的地址跳變到下一個新值。
Clr是清零信號,當它是低電平時,地址計數(shù)器可以產(chǎn)生從零開始的連續(xù)地址。
由于,當前塊存儲器只是一個16x16的RAM,其總的存儲空間是256,則可知使用八位地址就可以進行尋址整個空間,即CRAM_ADDR是八位輸出信號。而參考塊存儲器是一個32x32的的RAM,其總的存儲空間是1 024,則可知使用十位地址就可以進行尋址整個空間,即RRAM_ADDR是十位輸出信號。
2.2 參考塊分頻器模塊
參考塊分頻器模塊主要是將從參考塊存儲器中輸出的信號經(jīng)過分頻處理后,存儲在9個獨立的單元,以便后續(xù)的處理,如圖5所示。
由參考塊輸出的信號是256x9個連續(xù)的像素值,而當前塊輸出的信號只是256個連續(xù)信號在連續(xù)時鐘驅(qū)動下的九次重復,這樣就很難在256x9個時鐘周期內(nèi)完成對9個匹配塊的處理,更難在256個時鐘周期內(nèi)完成。因此要通過參考塊分頻器將參考塊存儲器連續(xù)輸出的256x9個像素點值進行九次分頻,存儲在9個RAM單元之中。這樣當下一個時鐘周期的上升沿到來時,這9個RAM可以同時輸出信號,并在接下來的255個時鐘周期之后將里面存儲的所有信號輸出,而且輸出的這些信號相互之間是完全獨立的。同時,為了使后面的各模塊能夠很好的進行,參考塊分頻器模塊還引入了當前塊的像素值信號,使得存入9個RAM單元的信號不僅僅是參考塊的像素點值,還有當前塊的像素點值以便保證后面的減法器可以正常工作。
2.3 減法器模塊
減法器模塊主要是完成當前塊像素點值和參考塊像素點值之間的作差,并將做差結(jié)果進行取絕對值運算。本減法器是采用9個LPM(參數(shù)化模塊庫)元件庫中的減法器合成的。而LPM中的減法器將被減數(shù)和減數(shù)明確地分開了。因此,在將當前塊和參考塊像素點值輸入到減法器之前先對二者進行比較,再分別輸入到減法器的被減數(shù)和減數(shù)端口。這樣當減法器設置為無符號數(shù)運算時,輸出結(jié)果就相當于取了絕對值的差值。從時鐘周期的角度發(fā)現(xiàn),整個減法器在256x9個時鐘周期內(nèi)是都在運行的,但是所要采集的有用信號僅僅是9個獨立的256個時鐘周期,即每個減法器僅僅使用256個時鐘周期的有用信號,其他時鐘周期內(nèi)的信號對于其他減法器是有用信號,但是對于本減法器卻是干擾信號,必須要消除。這就是在參考塊分頻器里面引入當前塊信息的原因。
2.4 累加比較器模塊
累加比較器主要是完成對每個減法器輸出的取過絕對值的差值信號的累加,并將累加結(jié)果進行比較輸出最佳運動矢量。累加比較器的設計和減法器的設計有很大關系,除了在上述的取絕對值方面二者相互要求比較嚴格之外,在時序方面,二者也有很大關聯(lián)。9個減法器在參考塊分頻器模塊的作用下,工作于所有的時鐘周期里面,而累加比較器則是以減法器輸出的信號作為累加原材料的,這就使得累加比較器也必須從時鐘的起始點就開始工作。確定運動矢量的標準是SAD最小值。也就是要通過比較9個累加結(jié)果,確定出最小值,并由地址計數(shù)器模塊找到這個最小值所對應的運動矢量。
2.5 整體方案
整體方案主要是將三步搜索法中的三步分開進行。在外部輸入信號的控制下,先輸入第一步搜索的地址計算控制因子,使得尋址范圍是在步長為4的9個數(shù)據(jù)塊群里面,第一步搜索完成時將第一步搜索到的最佳運動矢量輸入到第二步的搜索中,完成機制和第一步唯一的區(qū)別就是地址計算和產(chǎn)生的尋址范圍不同,這樣一直到完成第三步搜索時,將第三步搜索得到的最佳運動矢量作為當前塊在這個搜索窗口里面的最佳運動矢量。
3 實驗結(jié)果與分析
本設計采用Stratix II系列的EP2S15F484C3器件進行仿真,仿真結(jié)果如圖6所示。
由仿真結(jié)果可知整個搜索過程完全符合時序要求,總的邏輯資源占用率是27%。組合查找表使用了2 169個,占總數(shù)量12 480的17%。專用邏輯寄存器使用了2 855個,占總數(shù)量12 480的23%。而用的總的寄存器數(shù)也就是2 855。使用了180個片上引腳,占總個數(shù)的52%。使用了86 088比特的塊存儲器單元,占總的快存儲器數(shù)量的21%。搜索到的最佳運動矢量(0,-7),由前兩步的搜索結(jié)果可知其完全正確。
4 結(jié)束語
本文中采用FPGA設計的運動估計方案無論在搜索速度,資源利用還是時序控制上都具有一定的優(yōu)越性,可以大大提高視頻編碼器設計的性價比。另外,隨著半導體工藝的不斷進步,F(xiàn)PGA的性價比將不斷提高,將使得運動估計乃至視頻編碼的技術不斷提高。
評論