• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > FPGA與DSP協(xié)同處理系統(tǒng)設(shè)計(jì)之:典型實(shí)例-整數(shù)DCT變換的設(shè)計(jì)與實(shí)現(xiàn)

    FPGA與DSP協(xié)同處理系統(tǒng)設(shè)計(jì)之:典型實(shí)例-整數(shù)DCT變換的設(shè)計(jì)與實(shí)現(xiàn)

    作者: 時間:2017-06-05 來源:網(wǎng)絡(luò) 收藏

    本文引用地址:http://www.czjhyjcfj.com/article/201706/348796.htm

    11.6典型實(shí)例21:的設(shè)計(jì)與實(shí)現(xiàn)

    11.6.1實(shí)例的內(nèi)容及目標(biāo)

    1.實(shí)例的主要內(nèi)容

    本節(jié)旨在設(shè)計(jì)實(shí)現(xiàn)了視頻壓縮標(biāo)準(zhǔn)算法中的部分,幫助讀者了解并行流水設(shè)計(jì)技巧在算法優(yōu)化中的作用。

    2.實(shí)例目標(biāo)

    通過本實(shí)例,讀者應(yīng)達(dá)到以下目標(biāo)。

    ·了解數(shù)字域變換的基本原理和用處。

    ·掌握DCT和的變換方法。

    ·學(xué)習(xí)硬件結(jié)構(gòu)設(shè)計(jì)方法。

    ·學(xué)習(xí)流水線設(shè)計(jì)方法。

    ·編程實(shí)現(xiàn)DCT變換。

    11.6.2整數(shù)DCT變換的原理

    1.DCT簡介

    是一種圖像壓縮編碼方法,它的變換編碼和以前各種標(biāo)準(zhǔn)中的DCT有所不同。以前標(biāo)準(zhǔn)中直接采用DCT的定義進(jìn)行變換,會帶來兩個問題。第一,需要進(jìn)行浮點(diǎn)數(shù)操作,從而造成系統(tǒng)設(shè)計(jì)及運(yùn)算上的復(fù)雜性;第二,由于變換核都是無理數(shù),而有限精度的浮點(diǎn)數(shù)不可能精確地表示無理數(shù),再加上浮點(diǎn)數(shù)的運(yùn)算可能會引入舍入誤差,這就使得在具體實(shí)現(xiàn)時會導(dǎo)致編解碼的不匹配(mismatch),即反變換的輸出結(jié)果和正變換的輸入不一致。

    為了解決這些問題,采用基于4×4塊的整數(shù)操作而不是實(shí)數(shù)運(yùn)算,使得變換操作僅用整數(shù)加減和移位操作就可以完成。這樣既降低了設(shè)計(jì)復(fù)雜度,又避免了編解碼誤匹配,能夠得到與4×4DCT變化類似的編碼效果,而由此帶來的編碼性能的減少微乎其微。

    由于變換中無乘法,采用基于提升結(jié)構(gòu)的無乘法二進(jìn)制DCT(BinDCT),只包括加法和16位算術(shù)移位,這樣大大減小了運(yùn)算復(fù)雜度。尤其是對低端處理,減少了乘法運(yùn)算且保持了整數(shù)變換的優(yōu)點(diǎn),精確的整數(shù)排除了編碼器和解碼器之間反變換的誤匹配,保證了變換的效果。

    2.DCT設(shè)計(jì)原理

    我們可以通過各種公式推導(dǎo)出整數(shù)DCT正變換的公式。

    (11.1)

    公式(11.1)中,雖然乘以1/2的操作可以用右移來實(shí)現(xiàn),但這樣會產(chǎn)生截斷誤差,因此,我們將1/2提到矩陣外面,并與右邊的點(diǎn)乘合并,得到公式(11.2)。

    (11.2)

    這就是H.264中所用到的整數(shù)變換公式,其變換核僅用加減法(和左移)即可以實(shí)現(xiàn),而后面的點(diǎn)乘操作可以合并到隨后的量化過程中去。

    H.264中所用到的反DCT變換公式如下:

    (11.3)

    其中與Y點(diǎn)乘的操作與反量化合并,乘以系數(shù)1/2的操作由右移來實(shí)現(xiàn),由于反量化后的結(jié)果足夠地大,所以這里不會出現(xiàn)截斷誤差的問題。以上各式中,

    H.264的整數(shù)DCT變換可以分做兩步完成:先對需要做變換的矩陣的每一列做一維變換,再對其結(jié)果的每一行做一維變換,這個次序也可以反過來,先行后列。這樣二維變換就可以用一維變換來實(shí)現(xiàn)。在具體實(shí)現(xiàn)過程中,為了減少運(yùn)算量,每一步可以采用蝶型算法,以公式(11.2)的第一步對X的第一列進(jìn)行一維變換為例,其運(yùn)算過程如下式所示。

    (11.4)

    其中第一列的元素,為濾波結(jié)果。由公式(11.4)可見計(jì)算有很多重復(fù),如就同時被計(jì)算的公式所使用,所以可以將其暫時保存起來以避免重復(fù)計(jì)算,對應(yīng)的蝶型算法如圖11.21所示。

    從圖中可以看見,若按公式(11.4)計(jì)算需要進(jìn)行12次加法、4次乘法。而按圖11.19中的蝶型算法僅需8次加法、2次乘法,它利用了運(yùn)算中的冗余,大大降低了運(yùn)算量。

    11.6.3實(shí)例步驟

    1.創(chuàng)建新工程并添加源文件

    如圖11.22所示,首先創(chuàng)建一個新工程并為工程添加源文件。

    2.添加測試文件,并添加激勵

    如圖11.23所示,為工程添加測試文件。

    圖11.22創(chuàng)建新工程并添加設(shè)計(jì)文件 圖11.23添加測試文件

    在測試文件中為測試添加激勵,如圖11.24所示。

    圖11.24添加激勵

    3.使用ModelSim進(jìn)行仿真

    要使用ModelSim對工程進(jìn)行仿真首先要在計(jì)算機(jī)上面安裝ModelSim軟件。安裝好以后在ISE7.1i的菜單里面選擇Edit→Preferences,如圖11.25所示。

    在上面的對話框里面,“IntegratedTools”復(fù)選頁里面的ModelTechSimulator里面選擇modelsim.exe的路徑,單擊“OK”按鈕。

    圖11.25設(shè)置仿真工具參數(shù)

    然后再選擇菜單里面的View→Refresh,刷新剛才更改的設(shè)置,如圖11.26所示。

    圖11.26刷新設(shè)置

    刷新后就會看見ProcessView里面的圖標(biāo)變成ModelsimSimulator的一些功能,如圖11.27所示。

    圖11.27ModelSim仿真選項(xiàng)

    此時雙擊“SimulateBehavioralModel”就可以對工程進(jìn)行行為仿真了,如圖11.28所示。

    圖11.28打開ModelSim進(jìn)行行為仿真

    在ModelSim的波形窗口中觀察到的行為仿真結(jié)果如圖11.29所示。

    圖11.29行為仿真結(jié)果

    11.6.4小結(jié)

    本節(jié)介紹視頻壓縮標(biāo)準(zhǔn)H.264算法中的整數(shù)DCT變換模塊的設(shè)計(jì)與實(shí)現(xiàn)方法,并通過ModelSim軟件仿真驗(yàn)證的設(shè)計(jì)結(jié)果。



    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 鹤峰县| 八宿县| 海口市| 枣阳市| 平塘县| 葵青区| 临沂市| 福建省| 共和县| 桐城市| 河津市| 惠州市| 嘉黎县| 徐水县| 巴楚县| 板桥市| 犍为县| 勐海县| 合山市| 武陟县| 阳城县| 龙游县| 格尔木市| 图们市| 凌源市| 大关县| 金溪县| 聂拉木县| 时尚| 徐汇区| 曲沃县| 叶城县| 丰都县| 林西县| 册亨县| 于田县| 类乌齐县| 宁武县| 万安县| 柞水县| 浦城县|