新聞中心

EEPW首頁 > EDA/PCB > 設計應用 > 基于FPGA的H.264 DCT算法的硬件實現(xiàn)

基于FPGA的H.264 DCT算法的硬件實現(xiàn)

作者: 時間:2012-07-30 來源:網絡 收藏

摘要:二維離散余弦()在H.視頻編碼中承擔者信號從時域到頻域變換的作用。在現(xiàn)場可編程邏輯門陣列()上設計了高效的采用流水線結構的H. 硬件電路。首先,把二維4×4 變換轉換成二次一維DCT變換;其次,DCT變換之間加一個兩端口的RAM,以實現(xiàn)數列的轉置;最后,在頂層設計一個有限狀態(tài)機控制整個流程。該設計采用較少的資源實現(xiàn)了較好的功能,獲得了可靠的實驗結果。
關鍵詞:二維離散余弦變換;;H.;DCT

0 引言
目前,基于分塊DCT的編碼技術已成為圖像/視頻編碼國際標準的核心技術,一方面是因為DCT具有良好的去相關性和能量壓縮性,另一方面是因為DCT具有快速實現(xiàn)。隨著數字多媒體技術的快速發(fā)展,H.264視頻壓縮標準在多個領域得到了廣泛的應用。然而,在當前有限的網絡帶寬、有限的資源以及要求更高壓縮速率情況下,對二維離散余弦變換(DCT)提出了更高的要求。H.264對圖像或預測殘差采用了4×4整數離散余弦變換技術,避免了以往標準中使用的通用8×8離散余弦變換、逆變換經常出現(xiàn)的失配問題。

1 H.264的整數DCT變換
一維N點離散余弦變挽(DCT)可以表示為:
b.JPG
式中:xn是輸入時域序列中第n項;yK是輸出頻域序列中的第K項;系數CK定義如下:
c.JPG
H.264對4×4圖像塊進行操作,則相應的4×4DCT變換矩陣A為:

本文引用地址:http://www.butianyuan.cn/article/190096.htm

d.JPG
d.JPG
A中的a,b和c是實數,而圖像塊X中的元素是整數。對實數的DCT,由于在解碼端的浮點運算精度問題,會造成解碼后的數據的失配,進而引起漂移。H.264比其他圖像編碼使用了更多的預測過程,甚至內部編碼模式也依賴于空間預測。因此,H.264對預測漂移是十分敏感的。為此,H.264對4×4 DCT中的A進行了改造,采用了整數DCT技術,有效地減少計算量,同時不損失圖像準確度。式(1)可以等效為:
e.JPG
式中:d=c/b≈0.414;符號e1.jpg表示結果中的每個元素乘以矩陣E中對應位置上系數值的運算。為了簡化計算,去d為0.5,同時又要保持變換的正交性,對b進行修正,取f1.jpg。對矩陣C中的第2行和第4行,以及矩陣CT中的第2列和第4列元素乘以2,相應地改造矩陣E為Ef,以保持式(7)成立,得到:
g1.jpg
式中運算e1.jpg對每個矩陣元素只進行一次乘法,同時它將被歸納到量化運算中。這樣,h1.jpg中只剩下整數的加法、減法和移位運算。式(8)的矩陣乘法運算可以改造成兩次一維整數DCT變換,例如先對圖像或其殘差塊的每行進行一維整數DCT,然后對經行變換塊的每列再應用一維整數DCT變換。每次一維整數DCT可以采用蝶形快速,以節(jié)省時間,如圖1所示。

f.JPG


整數DCT變換是基于DCT的,但是又有一些不同:
(1)它是一個整數變換(所有的操作都可以使用整數,而不丟失解碼精度);
(2)它可以實現(xiàn)編碼端正變換與解碼端反變換之間的零誤差匹配;
(3)變換的核心部分可以僅僅使用加法和移位操作實現(xiàn);
(4)變換中的一部分尺度乘法運算可以和量化器結合到一起,減少了乘法的數量。

2 H.264整數DCT變換的FPGA實現(xiàn)
H.264中以4×4塊為單位,運算過程中只有移位和加法,降低了算法的復雜度,易于硬件實現(xiàn)。設計時可把二維DCT變換分割為兩次一維整數變換,而一維變換可以用蝶形快速算法實現(xiàn),整個過程只需64次加法和16次移位運算。

g.JPG


圖2為H.264整數DCT變換的框圖。首先,輸入的數據在控制單元的控制下進行一維DCT變換;然后,將結果存入雙端口RAM中,待整個4× 4塊一維變換后,將數據按照轉置的概念取出,再進行一維DCT變換;最后,將其結果輸出即可。在設計中,為了加快系統(tǒng)的速度,采用兩個一維DCT變換模塊。
2.1 一維DCT蝶形算法模塊
根據圖1所示的快速算法,在加法器之間插入寄存器,以提高時鐘頻率和流水線處理,乘法運算可用移位操作,因此可以快速地實現(xiàn)一維DCT蝶形算法。產生的結果存入雙端口RAM,以實現(xiàn)二維矩陣的轉置。在設計中,為了實現(xiàn)并行處理和最大的速率,設置兩個一維DCT蝶形算法模塊和4個雙端口RAM,在雙端口RAM的前后分別設計了數據選擇通路。第一個一維DCT實現(xiàn)行變換,第二個一維DCT實現(xiàn)列變換,由于在從行變換到列變換中間經過1個矩陣轉置過程,所以在給列變換單元輸入數據時,輸入的數據需要重新組合后再送給每個列變換單元。
在設計矩陣轉置是用4個RAM代替1個RAM,再增加兩個4通道的旋轉多路器,同時配合對4個RAM的編址讀操作,一次輸入原始矩陣的一列。并行矩陣轉置模塊的寫操作:每個時鐘周期變換一次RAM_BANK的接入順序,每個RAM_BANK每次寫入地址隨時鐘周期按順序遞增。
2.2 控制單元FSM
圖3顯示共有11個狀態(tài),主要對2個一維DCT變換模塊,4個RAM塊和2個數據選擇通路進行控制,采用獨熱編碼,較好地實現(xiàn)了各底層模塊電路的鏈接。在設計中,采用異步復位,其好處是:重要綜合工具工藝庫有可異步復位觸發(fā)器,那么該觸發(fā)器的數據輸入通道就不需要額外的組合邏輯。同時,采用了專用握手信號實現(xiàn)各模塊間有序的數據交換。

h.JPG



3 結論
通過圖4可以看出,在50 MHz的時鐘頻率下電路很好地完成了二維DCT的轉換,遲滯也比較小,實驗結果與所設計的電路功能完全一致。仿真界面如圖5所示。

a.JPG


在Altera的CycloneⅡ平臺上,通過QuartusⅡ編譯報告可以看出,此電路共消耗了732個LE和256 b的RAM。

4 結語
本文采用高效的流水線結構,并基于FPGA設計實現(xiàn)了H.264硬件電路,無論是硬件占用資源,還是處理精度,完全可以滿足H.264視頻偏碼的需要。

fpga相關文章:fpga是什么




關鍵詞: FPGA 264 DCT 算法

評論


相關推薦

技術專區(qū)

關閉