亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于HEVC的CABAC二進制算術編碼器的FPGA實現(xiàn)

        2020-05-08 02:02:02湯心溢
        紅外技術 2020年4期
        關鍵詞:算術二進制編碼器

        王 堯,湯心溢

        (1.中國科學院上海技術物理研究所 中國科學院紅外探測與成像技術重點實驗室,上海 200083;2.中國科學院大學,北京 100049;3.上海科技大學 信息科學與技術學院,上海 201210)

        0 引言

        作為新一代視頻編碼標準,H.265/HEVC(high efficiency video coding)可支持3840 pixel×2160 pixel以上級別高清視頻的壓縮編碼,同時幀率達到30 幀/s以上級標準,要求視頻流編碼具有更高的壓縮率。H.265/HEVC標準同上一代H.264/AVC標準相比,在相同的圖像質(zhì)量下碼流數(shù)據(jù)可減少50%左右[1],同時也要求更復雜的編碼計算;同CAVLC(context-based adaptive variable-length coding)相比,CABAC(context-based adaptive binary arithmetic coding,上下文自適應二進制算術編碼)可節(jié)省9%~14%的碼流數(shù)據(jù),同時要求運算量提高約40%[2]。

        HEVC標準的結(jié)構框圖如圖1所示,主要分為預測、量化、濾波和熵編碼部分。其中,熵編碼采用CABAC 編碼器,輸入為量化后的殘差數(shù)據(jù)流,通過CABAC 編碼器后輸出比特流,即最終的H.265 視頻數(shù)據(jù)流。本文基于HEVC標準,在硬件加速方面對CABAC的二進制算術編碼器進行了設計實現(xiàn)與優(yōu)化。

        1 CABAC二進制算術編碼器

        CABAC 編碼器分為3 部分:二值化,上下文建模,以及二進制算術編碼器。二值化過程將輸入的非二進制殘差數(shù)據(jù)語法元素轉(zhuǎn)化為二進制序列(bins);在上下文建模過程中,對二值化后的序列中每個符號(bin)出現(xiàn)的概率進行估計,分為最大概率符號(most probability symbol,MPS)和最小概率符號(least probability symbol,LPS);二進制算術編碼器則將此序列通過算術編碼的形式編碼為最終的比特流符號,完成HEVC編碼輸出。該算術編碼的本質(zhì)就是用一個碼字表示一段數(shù)據(jù)流,這個碼字是對一段數(shù)據(jù)流不斷分割后獲得的[3]。每個bin 在編碼完成后都需要對其上下文模型進行更新,即概率估計過程,該過程在上下文建模部分中完成,更新當前概率狀態(tài)索引σ和LPS的值。CABAC 算術編碼器整體結(jié)構如圖2所示。

        在CABAC編碼中,概率狀態(tài)(state)代表當前符號所對應的LPS出現(xiàn)概率,概率狀態(tài)估計值由一組有限的集合表示,LPS概率取值區(qū)間為[0.01875,0.5],對應64個概率索引值。概率理論值可由公式(1)計算得出:

        式中:σ為概率狀態(tài)索引;pσ為索引值σ對應的LP S出現(xiàn)概率理論值;α為迭代計算系數(shù)。

        圖1 HE VC編碼架構Fig.1 HEVCcoding architecture

        圖2 CABAC算術編碼器基本結(jié)構Fig.2 Basicstructureof CABACarithmeticencoder

        邊界情況下,當MPS出現(xiàn)時,概率狀態(tài)索引σ根據(jù)特定的規(guī)則跳轉(zhuǎn)增加[4],LPS對應的概率降低;當LPS出現(xiàn)時,概率狀態(tài)索引σ跳轉(zhuǎn)降低至對應的下一個值,LPS概率升高。當σ=0時,LPS與MPS所對應的符號互換。CABAC概率估計更新模型如圖3[4]所示,該更新過程決定了二進制算術編碼過程中概率狀態(tài)索引和LPS的輸入值,同時將當前編碼符號bin輸入至二進制算術編碼器中。

        在二進制算術編碼模塊中,輸入數(shù)據(jù)包括當前待編碼符號bin,LPS值,以及上下文建模/更新后的概率狀態(tài)索引σ。該模塊主要負責編碼區(qū)間的更新,并將更新好的編碼區(qū)間打包輸出比特流。描述編碼區(qū)間的參數(shù)由low和range構成,low為當前區(qū)間的下界值,range為當前區(qū)間長度,每輸入一個bin,二進制算術編碼通過σ和目前的range值查表得到bin=LPS時所對應的range更新值,記為rLPS,之后將對lo w和range的取值進行更新。

        圖3 CABAC的概率估計更新模型Fig.3 CABAC probabilityestimation update model

        對當前符號bin,如果bin=LPS,則當前區(qū)間更新為:

        如果bin=MPS,則當前區(qū)間更新為:

        low和range值更新完畢后,編碼數(shù)據(jù)通過重歸一化[5]進行實時的打包輸出,完成二進制算術編碼器的比特流輸出。CABAC二進制算術編碼器的算法流程如圖4所示,虛線所示流程為概率估計更新的計算過程,可在上下文建模部分中完成[6],其中σ的更新計算通常使用查找表的方式代替式(1)的概率轉(zhuǎn)移運算。隨著新的編碼區(qū)間計算完畢,會產(chǎn)生部分已確定的編碼位,后來輸入的符號無法修改這部分編碼。重歸一化的目的是將已確定的編碼位進行及時的打包輸出,并保證更新后的編碼區(qū)間仍然可以用有限位的精度來表示。

        圖4 CABAC二進制算術編碼器的算法流程Fig.4 Algorithm flow of CABAC binary arithmetic encoder

        2 編碼器算法實現(xiàn)與優(yōu)化

        根據(jù)硬件平臺的并行運算特性,該二進制算術編碼器采用如圖5所示的多級流水線的硬件加速結(jié)構,通過犧牲硬件資源提高數(shù)據(jù)編碼速度。編碼器主要針對常規(guī)編碼模式,支持四路bin 并行輸入,首先對輸入數(shù)據(jù)進行預處理,提取編碼二進制bin值、當前LPS取值及索引值σ;之后依據(jù)圖4所示的二進制算術編碼器算法流程,以硬件流水線的形式計算每個bin 對應的rLPS、新的range值和low值,并對編碼區(qū)間進行重歸一化,最后以每8個比特作為一個字節(jié)打包輸出編碼比特流,完成編碼器輸出。

        圖5 二進制算術編碼器多級流水線硬件結(jié)構Fig.5 Multi-stage pipeline hardware structure of binary arithmetic encoder

        該二進制算術編碼器在流水線結(jié)構中分為4個編碼階段。在第一階段中,對每個bin,編碼器判斷當前字符bin是否為LPS,并根據(jù)輸入的概率狀態(tài)索引σ查表得到rLPS值。由于此時尚未讀取到最新的range值,rLPS的計算依賴于該range值的最高兩位,其可能取值有4種,所以需要計算并存儲每個bin的所有4種rLPS 取值,記錄為rLPSTab,并在第二階段range的更新中通過式(4)的規(guī)則進行查表讀取,解決了rLPS對range值的數(shù)據(jù)依賴問題:

        在每路rLPSTab的計算中,各使用一路寄存器保存rLPSTab的值,該過程每次需要1個時鐘周期進行數(shù)據(jù)更新;在第二階段中,編碼器需要通過寄存器維護最新的編碼區(qū)間長度range_last的值,根據(jù)當前bin是否為LPS、range_last 以及通過式(4)查表讀取到的rLPS值,通過式(2)、(3)得到更新后的編碼區(qū)間長度range_update,并各使用一路寄存器進行數(shù)據(jù)暫存。編碼階段1、2 采用如圖6所示的電路計算結(jié)構,在range 計算后需要對range值進行重整,當bin 為MPS時,在計算后的range值(rMPS)最高位為0時需要對其算術左移一位,可以通過二選一MUX 解決;當bin 為LPS時,range值即為重整后的rLPS值,此時range的重整過程被預存在 rLPSupdateTab 中,rLPSupdateTab 保留了4種rLPS值所對應的重整結(jié)果,可在編碼階段1 內(nèi)預先完成,需要時從LUT 中調(diào)取,避免了本級流水線對range值的數(shù)據(jù)依賴。之后,根據(jù)當前bin是否為LPS,得到編碼階段2 對應的range_update 結(jié)果,進行l(wèi)ow的計算。數(shù)據(jù)從預處理到計算結(jié)果送入編碼階段3的過程需要2個時鐘周期。

        在第三階段中,編碼器需要通過寄存器維護最新的編碼區(qū)間下界low_last的值,根據(jù)當前bin是否為LPS、rMPS和low_last,通過式(2)、(3)得到更新后的low_update;第四階段為重歸一化過程,由于low的部分高位二進制數(shù)值不再隨輸入而產(chǎn)生變化,需要重新維護編碼區(qū)間,判斷已確定的編碼比特,將緩沖比特序列算術左移,將待輸出的bit 存放在比特暫存區(qū)中,并將已確定的二進制編碼數(shù)據(jù)以8個bit 為一個單位打包輸出,即為二進制算術編碼器的輸出比特流。由于每個bin 從輸入該模塊到輸出比特流需要依賴數(shù)據(jù)打包等待過程,完成比特輸出需要1~3個不等的時鐘周期,為防止數(shù)據(jù)溢出,設置深度為64 bit的比特buffer,將四路編碼進行緩沖存儲。編碼階段3、4的電路結(jié)構如圖7所示。

        在實際運算中,對概率估計更新過程,使用查表法代替乘法運算,可大大減少運算時間,節(jié)省時鐘周期和資源占用。采用概率狀態(tài)轉(zhuǎn)移查找表,表示每個σ對應的下一個概率狀態(tài)及概率估計值,將概率估計更新后的概率數(shù)據(jù)存放在SRAM 中,在下一次概率估計更新時對SRAM 進行讀取和重新寫入,以完成概率模型的動態(tài)更新,避免了使用寄存器存儲大量數(shù)據(jù)導致的芯片資源和面積消耗。本文的二進制算術編碼器對概率估計更新進行了運算效率的優(yōu)化,由于編碼器模塊每次的輸入為同一數(shù)據(jù)塊中連續(xù)的4個bin,可將該并行輸入的4個bin的概率估計更新過程簡化為只計算其中第一個bin的概率估計更新,減少硬件資源占用和運算時間;這一過程對輸入的二進制編碼數(shù)據(jù)進行打包處理,即以4個符號的包為單位進行編碼(對應文獻[7]中N=4的情況),并將概率估計更新的計算結(jié)果在SRAM 中進行更新。當輸入的4 bit 序列的后三位為交替出現(xiàn)的序列,即{LPS,MPS,LPS}或{MPS,LPS,MPS}時,對于編碼效率的影響最小,此時只有1個bin的概率估計更新值受到1次σ跳轉(zhuǎn)的影響[7];而對于最差情況[8],輸入的4 bit 序列的后三位為同一符號,即{LPS,LPS,LPS}或{MPS,MPS,MPS}時,此組序列僅有3次σ跳轉(zhuǎn)的偏差,整體而言可兼顧運算資源與編碼效率的平衡,并將算術編碼器部分的SRAM 使用數(shù)量減少為原始算法[9]的2/5,同時略微提高硬件編碼速度。

        圖6 Range_update的計算結(jié)構Fig.6 Calculation structure of range_update

        圖7 Low的計算和比特輸出Fig.7 Calculation and bit output of low

        3 仿真與結(jié)果

        對本文的二進制算術編碼器在Vivado 2018.2 平臺上進行前仿真,仿真結(jié)果如圖8所示,在不考慮初始化及中斷復位的情況下,該算術編碼器每個時鐘周期可以完成4個bin的編碼,相比文獻[3]的結(jié)構有顯著的編碼速度提升。

        采用Xilinx的xczu9eg-ffvb1156 FPGA 對本文的二進制算術編碼器模塊進行硬件實現(xiàn),綜合實現(xiàn)后的資源占用情況如表1所示。

        在本文設計中,將DSP 乘法器運算全部轉(zhuǎn)化為查找表運算,避免了時序問題的同時提高整體編碼速度,數(shù)據(jù)輸出時延為3~5個時鐘周期。本文與其他參考文獻的實現(xiàn)結(jié)果對比如表2所示,與文獻[3]相比,本文的二進制算術編碼器消耗了大量的LUT 資源用于概率索引查找表以及range、low的快速計算,而每個Slice可提供4個6 輸入的LUT,在該系列Xilinx 器件中每個CLB 邏輯單元對應2個Slice,導致承載LUT的CLB的數(shù)量消耗為文獻[3]的4倍左右,與后者每時鐘周期0.7個bin的編碼速度對比,本文在犧牲了大量片上資源的基礎上,獲得了更快的編碼速度,實時性更強,在相同條件下可支持1080p 視頻數(shù)據(jù)在30~60 f/s 幀率下的實時編碼,符合基于HEVC高效的CABAC二進制算術編碼器的設計要求。

        圖8 二進制算術編碼器仿真結(jié)果Fig.8 Binary arithmetic encoder simulation results

        表1 二進制算術編碼器資源使用情況Table1 Binary arithmetic encoder resource usage

        表2 與其他文獻實現(xiàn)結(jié)果對比Table2 Comparison with implementation results of other references

        4 總結(jié)

        本文實現(xiàn)了HEVC的CABAC二進制算術編碼器常規(guī)編碼模式下的硬件加速結(jié)構,基于并行流水線對二進制算術編碼器進行硬件結(jié)構設計與實現(xiàn),通過SRAM 存儲概率估計更新數(shù)據(jù),使用查找表優(yōu)化概率估計及編碼區(qū)間的計算過程,避免DSP 乘法運算,縮短運行時間。結(jié)果表明,本文的硬件CABAC二進制算術編碼器平均每時鐘周期可以完成4個bin的編碼,適用于對HEVC 視頻編碼實時性要求較高的場合,功耗相對有限,編碼效率高,支持較高幀率的1080p 視頻實時編碼,具有較快的數(shù)據(jù)編碼傳輸能力。

        猜你喜歡
        算術二進制編碼器
        用二進制解一道高中數(shù)學聯(lián)賽數(shù)論題
        有趣的進度
        二進制在競賽題中的應用
        基于FPGA的同步機軸角編碼器
        算算術
        學算術
        基于PRBS檢測的8B/IOB編碼器設計
        小狗算算術
        JESD204B接口協(xié)議中的8B10B編碼器設計
        電子器件(2015年5期)2015-12-29 08:42:24
        做算術(外一則)
        讀寫算(中)(2015年12期)2015-11-07 07:25:01
        欧美aⅴ在线| 漂亮人妻被强了中文字幕| 中文无码av一区二区三区| 日韩吃奶摸下aa片免费观看| 黄色毛片在线看| 蜜桃视频中文在线观看| 少妇激情高潮视频网站| 97se亚洲国产综合自在线观看| 人与嘼交av免费| 国产在视频线精品视频二代 | 亚洲国产一区二区三区在线观看| 少妇白浆高潮无码免费区| 国产成人香蕉久久久久| 日韩在线一区二区三区中文字幕| 国产欧美成人一区二区a片| 国产露脸精品产三级国产av| 亚洲成AV人片无码不卡| 国产主播性色av福利精品一区| 中文字幕人妻第一区| 日韩欧美亚洲综合久久影院d3| 久久久亚洲精品一区二区| 青青草成人免费在线观看视频| 亚洲精品成人av在线| 一级午夜视频| 日本一区二区高清在线观看| 天堂资源中文网| 东方aⅴ免费观看久久av| 国产亚洲欧美另类第一页| 午夜亚洲精品视频在线| 国产男小鲜肉同志免费| 欧美一级在线全免费| 漂亮人妻被黑人久久精品| 加勒比精品一区二区三区| 91精品久久久中文字幕| 久久9精品区-无套内射无码| 国产精品视频yuojizz| 国产色婷亚洲99精品av网站| 亚洲av综合色区无码专区桃色| 日韩人妻无码一区二区三区久久99| av鲁丝一区鲁丝二区鲁丝三区| 欧美操逼视频|