?
11.6??典型實例21:整數(shù)DCT變換的設計與實現(xiàn)
11.6.1??實例的內(nèi)容及目標
1.實例的主要內(nèi)容
本節(jié)旨在設計實現(xiàn)了視頻壓縮標準H.264算法中的整數(shù)DCT變換部分,幫助讀者了解并行流水設計技巧在算法優(yōu)化中的作用。
2.實例目標
通過本實例,讀者應達到以下目標。
·??了解數(shù)字域變換的基本原理和用處。
·??掌握DCT和整數(shù)DCT變換的變換方法。
·??學習硬件結(jié)構設計方法。
·??學習流水線設計方法。
·??編程實現(xiàn)DCT變換。
11.6.2??整數(shù)DCT變換的原理
1.DCT簡介
H.264是一種圖像壓縮編碼方法,它的變換編碼和以前各種標準中的DCT有所不同。以前標準中直接采用DCT的定義進行變換,會帶來兩個問題。第一,需要進行浮點數(shù)操作,從而造成系統(tǒng)設計及運算上的復雜性;第二,由于變換核都是無理數(shù),而有限精度的浮點數(shù)不可能精確地表示無理數(shù),再加上浮點數(shù)的運算可能會引入舍入誤差,這就使得在具體實現(xiàn)時會導致編解碼的不匹配(mismatch),即反變換的輸出結(jié)果和正變換的輸入不一致。
為了解決這些問題,H.264采用基于4×4塊的整數(shù)操作而不是實數(shù)運算,使得變換操作僅用整數(shù)加減和移位操作就可以完成。這樣既降低了設計復雜度,又避免了編解碼誤匹配,能夠得到與4×4?DCT變化類似的編碼效果,而由此帶來的編碼性能的減少微乎其微。
由于變換中無乘法,采用基于提升結(jié)構的無乘法二進制DCT(Bin?DCT),只包括加法和16位算術移位,這樣大大減小了運算復雜度。尤其是對低端處理,減少了乘法運算且保持了整數(shù)變換的優(yōu)點,精確的整數(shù)排除了編碼器和解碼器之間反變換的誤匹配,保證了變換的效果。
2.DCT設計原理
我們可以通過各種公式推導出整數(shù)DCT正變換的公式。
(11.1)
?
公式(11.1)中,雖然乘以1/2的操作可以用右移來實現(xiàn),但這樣會產(chǎn)生截斷誤差,因此,我們將1/2提到矩陣外面,并與右邊的點乘合并,得到公式(11.2)。
(11.2)
這就是H.264中所用到的整數(shù)變換公式,其變換核僅用加減法(和左移)即可以實現(xiàn),而后面的點乘操作可以合并到隨后的量化過程中去。
H.264中所用到的反DCT變換公式如下:
? (11.3)
其中與Y點乘的操作與反量化合并,乘以系數(shù)1/2的操作由右移來實現(xiàn),由于反量化后的結(jié)果足夠地大,所以這里不會出現(xiàn)截斷誤差的問題。以上各式中,,。
H.264的整數(shù)DCT變換可以分做兩步完成:先對需要做變換的矩陣的每一列做一維變換,再對其結(jié)果的每一行做一維變換,這個次序也可以反過來,先行后列。這樣二維變換就可以用一維變換來實現(xiàn)。在具體實現(xiàn)過程中,為了減少運算量,每一步可以采用蝶型算法,以公式(11.2)的第一步對X的第一列進行一維變換為例,其運算過程如下式所示。
????????? ???? (11.4)
其中為第一列的元素,為濾波結(jié)果。由公式(11.4)可見計算有很多重復,如就同時被計算和的公式所使用,所以可以將其暫時保存起來以避免重復計算,對應的蝶型算法如圖11.21所示。
從圖中可以看見,若按公式(11.4)計算需要進行12次加法、4次乘法。而按圖11.19中的蝶型算法僅需8次加法、2次乘法,它利用了運算中的冗余,大大降低了運算量。
?
11.6.3??實例步驟
1.創(chuàng)建新工程并添加源文件
如圖11.22所示,首先創(chuàng)建一個新工程并為工程添加源文件。
2.添加測試文件,并添加激勵
如圖11.23所示,為工程添加測試文件。
圖11.22??創(chuàng)建新工程并添加設計文件???? 圖11.23??添加測試文件
?
在測試文件中為測試添加激勵,如圖11.24所示。
圖11.24??添加激勵
3.使用ModelSim進行仿真
要使用ModelSim對工程進行仿真首先要在計算機上面安裝ModelSim軟件。安裝好以后在ISE?7.1i的菜單里面選擇Edit→Preferences,如圖11.25所示。
在上面的對話框里面,“Integrated?Tools”復選頁里面的Model?Tech?Simulator里面選擇modelsim.exe的路徑,單擊“OK”按鈕。
圖11.25??設置仿真工具參數(shù)
然后再選擇菜單里面的View→Refresh,刷新剛才更改的設置,如圖11.26所示。
圖11.26??刷新設置
刷新后就會看見Process?View里面的圖標變成Modelsim?Simulator的一些功能,如圖11.27所示。
圖11.27??ModelSim仿真選項
?
此時雙擊“Simulate?Behavioral?Model”就可以對工程進行行為仿真了,如圖11.28所示。
圖11.28??打開ModelSim進行行為仿真
?
在ModelSim的波形窗口中觀察到的行為仿真結(jié)果如圖11.29所示。
圖11.29??行為仿真結(jié)果
11.6.4??小結(jié)
本節(jié)介紹視頻壓縮標準H.264算法中的整數(shù)DCT變換模塊的設計與實現(xiàn)方法,并通過ModelSim軟件仿真驗證的設計結(jié)果。