国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FPGA 的HEVC 熵編碼語法元素硬件加速設(shè)計(jì)

2023-11-24 02:59:56林志堅(jiān)黃萍鄭明魁陳平平
關(guān)鍵詞:編碼器殘差語法

林志堅(jiān) 黃萍 鄭明魁 陳平平

(福州大學(xué) 物理與信息工程學(xué)院,福建 福州 350108)

隨著智能手機(jī)和短視頻的普及,視頻在全網(wǎng)數(shù)據(jù)流量占比已接近70%。2013年,為了滿足人們對(duì)視頻更高質(zhì)量的要求,國(guó)際電聯(lián)(ITU)正式批準(zhǔn)通過了高效視頻編碼(HEVC/H.265)標(biāo)準(zhǔn),該標(biāo)準(zhǔn)較高級(jí)視頻編碼(AVC/H.264)標(biāo)準(zhǔn)的編碼效率大約提高50%[1]。編碼效率的提升,降低了對(duì)視頻傳輸和存儲(chǔ)的帶寬要求[2],因此HEVC 可以支持4 k 和8 k的分辨率[3]。熵編碼是HEVC 的最后一個(gè)環(huán)節(jié),可以很大程度壓縮視頻的熵冗余。相較于AVC/H.264,HEVC 保留了唯一的熵編碼方式——上下文自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC),用于編碼片數(shù)據(jù)(Slice data)。雖然CABAC 具有編碼效率的優(yōu)勢(shì),但其復(fù)雜度也成倍增加[4]。

目前,普遍的CABAC 硬件設(shè)計(jì)1 個(gè)時(shí)鐘周期可以處理1個(gè)語法元素,而一些語法元素的上下文索引計(jì)算規(guī)則復(fù)雜[4],導(dǎo)致語法元素的生成通常不止1 個(gè)時(shí)鐘周期。因此語法元素作為CABAC 的輸入,其生成速度落后于CABAC 的處理速度,導(dǎo)致CABAC 模塊的空閑,使得該部分的設(shè)計(jì)成為了提高熵編碼實(shí)際吞吐量的瓶頸。近年來,CABAC 作為熵編碼的核心模塊備受廣大研究者關(guān)注,涌現(xiàn)了大量關(guān)于優(yōu)化CABAC 硬件結(jié)構(gòu)和提高其吞吐量的研究。文獻(xiàn)[5]將熵編碼的硬件架構(gòu)分成數(shù)據(jù)預(yù)處理模塊、二值化模塊、上下文建模模塊和算術(shù)編碼模塊,其中數(shù)據(jù)預(yù)處理模塊用于產(chǎn)生語法元素(SE)。該架構(gòu)可以采用三路并行架構(gòu)同時(shí)進(jìn)行編碼樹單元(CTU)的編碼,極大提高了熵編碼的吞吐量。但該架構(gòu)熵編碼吞吐量的提高并沒有針對(duì)語法元素的生成結(jié)構(gòu)進(jìn)行優(yōu)化,而是通過巨大的電路資源消耗換取。文獻(xiàn)[6]針對(duì)熵編碼的數(shù)據(jù)依賴性強(qiáng)的特點(diǎn),提出了預(yù)歸一化、大概率符號(hào)和小概率符號(hào)并行等方案,該方案每個(gè)時(shí)鐘平均可以處理4.2個(gè)字符。文獻(xiàn)[7]中提出的四路殘差語法元素方案可以提高殘差語法元素的速度,但是設(shè)計(jì)復(fù)雜,并且沒有考慮到語法元素的存儲(chǔ)消耗問題。文獻(xiàn)[8]中通過查找表的方式確定系數(shù)組(CG)的掃描位置,解決了對(duì)角掃描的復(fù)雜變換問題。文獻(xiàn)[9]中提出基于乒乓結(jié)構(gòu)的殘差編碼控制結(jié)構(gòu),但該結(jié)構(gòu)沒有考慮到全零CG 塊的問題。高吞吐量熵編碼器的實(shí)現(xiàn)需要有足夠的語法元素輸入,以確保熵編碼器能夠持續(xù)工作。因此,文中針對(duì)加快語法元素產(chǎn)生提出了多種電路優(yōu)化方案,以減少熵編碼模塊整體的時(shí)間。首先,通過對(duì)高效視頻編碼(HEVC)標(biāo)準(zhǔn)碼流信息的分析,提出了預(yù)頭信息編碼、上下文模型初始化和編碼單元(CU)結(jié)構(gòu)優(yōu)化策略,可以加快語法元素的產(chǎn)生,以供自適應(yīng)二進(jìn)制算術(shù)編碼器使用。其次,大多數(shù)殘差語法元素計(jì)算較為復(fù)雜,對(duì)硬件電路很不友好,而文中提出的高效殘差編碼架構(gòu)和部分上下文索引流水計(jì)算方案,在保證高吞吐量的同時(shí),可以減少由復(fù)雜計(jì)算帶來的路徑延遲,提高工作頻率。本文提出的設(shè)計(jì)充分考慮到各個(gè)模塊的特性,可以在增加很小硬件面積的情況下,提高熵編碼的吞吐量。

1 熵編碼概述

1.1 HEVC的碼流結(jié)構(gòu)

視頻編解碼器共同遵守一套編碼結(jié)構(gòu),以確保解碼器可以將碼流正確解碼,恢復(fù)視頻。為了提高壓縮效率和網(wǎng)絡(luò)適應(yīng)性,HEVC 設(shè)計(jì)了新的語法分層處理架構(gòu)[10]。從概念上講,HEVC 被分成視頻編碼層(VCL)和網(wǎng)絡(luò)抽象層(NAL)[11]。VCL描述了74個(gè)低級(jí)語法元素,主要可以分成4 大類:四叉樹劃分、幀內(nèi)和幀間預(yù)測(cè)、變換、量化和環(huán)路濾波[12]。NAL 層將壓縮的視頻數(shù)據(jù)封裝到NAL 單元中,增加了HEVC 應(yīng)用的靈活性[11]。CABAC 將根據(jù)這些語法元素來準(zhǔn)備要存儲(chǔ)或者傳輸?shù)拇a流[12]。圖1是HEVC 的碼流結(jié)構(gòu),首先,整個(gè)碼流前端是參數(shù)集相關(guān)頭信息,包括視頻參數(shù)集(VPS)、序列參數(shù)集(SPS)和圖片參數(shù)集(PPS);其次,每個(gè)片(Slice)由片頭(Slice Header)和片數(shù)據(jù)(Slice Data)構(gòu)成,其中,片數(shù)據(jù)由1個(gè)或多個(gè)CTU 信息構(gòu)成。每個(gè)CTU信息包含環(huán)路濾波(LP)參數(shù)信息和多個(gè)編碼單元(CU)信息。每個(gè)CU 信息包含CU 頭信息、預(yù)測(cè)單元(PU)信息和變換單元(TU)信息。

圖1 HEVC的碼流結(jié)構(gòu)Fig.1 Stream structure of HEVC

1.2 CABAC流程

CABAC 熵編碼器的作用是對(duì)視頻壓縮的早期階段產(chǎn)生的語法元素?cái)?shù)據(jù)進(jìn)行無損壓縮。在實(shí)際編碼中,因?yàn)槊總€(gè)字符是不可預(yù)測(cè)的,CABAC 采用二進(jìn)制算術(shù)編碼方法統(tǒng)計(jì)每個(gè)輸入字符的變化特性,可為每個(gè)字符提供精準(zhǔn)的上下文模型,從而達(dá)到較高的壓縮效率。CABAC 的基本框架如圖2 所示,包括二值化、上下文建模和二進(jìn)制算術(shù)編碼3個(gè)步驟。

圖2 CABAC的基本框架Fig.2 Basic framework of CABAC

二值化是將非二進(jìn)制語法元素的值轉(zhuǎn)換成二進(jìn)制字符串。在HEVC 中使用了4 種不同的二值化方法,包括:一元碼、截?cái)嘁辉a、K階指數(shù)哥倫布二值化和定長(zhǎng)編碼[8]。HEVC 為每個(gè)語法元素都指定了對(duì)應(yīng)的二值化方法,可以在不增加傳輸比特的條件下正確解碼[7]。

上下文建模是根據(jù)已編碼字符的統(tǒng)計(jì)特性來估計(jì)當(dāng)前字符的概率[5]。在HEVC 中,不同語法元素或者同一語法元素不同位置的字符,都有不同的上下文模型。根據(jù)HEVC 提供的初始值、量化參數(shù)(QP)和片類型可以得到每個(gè)字符的初始上下文模型。在編碼的過程中,根據(jù)輸入字符的上下文索引進(jìn)行查表可以得到相應(yīng)的上下文模型,并在算術(shù)編碼結(jié)束后,更新對(duì)應(yīng)的上下文模型。

算術(shù)編碼是根據(jù)遞歸區(qū)間劃分的。在遞歸的過程中保留編碼區(qū)間Range 和區(qū)間下限Low。算術(shù)編碼包含3 種模式:常規(guī)編碼、旁路編碼和結(jié)尾編碼[10]。其中常規(guī)編碼是基于自適應(yīng)的概率模型進(jìn)行編碼,需要不斷讀寫概率狀態(tài)表更新概率狀態(tài);而旁路編碼是使用等概率的方式進(jìn)行算術(shù)編碼,概率狀態(tài)無需更新[10]。雖然常規(guī)編碼相較于旁路編碼其編碼結(jié)構(gòu)更復(fù)雜,但是具有更高的編碼效率。

2 加快語法元素方案分析

2.1 預(yù)編碼頭信息方案

頭信息包括參數(shù)集頭信息和片頭信息。參數(shù)集頭信息包括視頻參數(shù)集(VPS)、序列參數(shù)集(SPS)和圖片參數(shù)集(PPS)。片頭信息主要包括當(dāng)前Slice的配置參數(shù)。如圖3 所示,在文獻(xiàn)[13]的設(shè)計(jì)中,熵編碼模塊啟動(dòng)后,需要等待片頭信息編碼完成后再開始CTU信息編碼。而在對(duì)視頻的第1個(gè)CTU信息進(jìn)行編碼之前,不僅需要等待片頭信息編碼,還需要等待參數(shù)集片頭信息編碼完成后才能啟動(dòng)CTU信息編碼。本文提出的預(yù)編碼頭信息方案如圖4所示,可以節(jié)省等待編碼頭信息的時(shí)間。具體的預(yù)編碼頭信息方案如下:針對(duì)參數(shù)集頭信息,在啟動(dòng)編碼器后,可以馬上對(duì)參數(shù)集頭信息進(jìn)行編碼。針對(duì)片頭信息,第1個(gè)片頭信息的編碼是在參數(shù)集信息編碼完成后進(jìn)行的,而其它片頭信息與CTU信息同時(shí)進(jìn)行編碼。因此本文的熵編碼模塊啟動(dòng)后,都可以馬上啟動(dòng)CTU信息的編碼。

圖3 文獻(xiàn)[13]的編碼頭信息方案Fig.3 Encoding header information scheme in literature [13]

圖4 本文的預(yù)編碼頭信息方案Fig.4 Pre-encoding header information scheme in this paper

參數(shù)集和第1個(gè)Slice的頭信息不需要計(jì)算,可以從配置信息中獲取。因此,可以在第1個(gè)CTU的待編碼信息傳入前,提前完成頭信息編碼。由于每個(gè)Slice 的壓縮數(shù)據(jù)是獨(dú)立的,Slice 的頭信息無法從前1個(gè)Slice的頭信息推斷得到[10],所以在對(duì)每個(gè)Slice 信息進(jìn)行編碼之前編碼端都需要編碼片頭信息。其中,片頭信息相關(guān)語法元素的編碼方式都不是CABAC,不需要使用上下文模型,所以片頭信息可以和CTU 信息并行編碼。因此,本文把不是第1 個(gè)片的其它片頭信息和CTU 的信息并行編碼,通過碼流控制模塊選擇對(duì)應(yīng)的碼流輸出,可以節(jié)約等待編碼片頭信息的時(shí)間,避免二進(jìn)制算術(shù)編碼模塊的空閑。

圖5 是本文熵編碼器狀態(tài)機(jī)轉(zhuǎn)換圖,一共有7個(gè)狀態(tài),分別是原始狀態(tài)(IDLE)、編碼高級(jí)語法元素狀態(tài)(High_Syntax)、編碼片頭信息狀態(tài)(Slice_Header)、上下文模型初始化狀態(tài)(Context Model_Init)、編碼CTU 狀態(tài)(CTU)、清空編碼器緩存狀態(tài)(Slice_End)和生成cabac_init_flag 狀態(tài)(Determine)。當(dāng)檢測(cè)到編碼器啟動(dòng)標(biāo)志coder_start_i的上升沿時(shí),將啟動(dòng)高級(jí)語法元素和片頭信息的編碼,并分別對(duì)3個(gè)Slice進(jìn)行上下文模型初始化;頭信息編碼和上下文模型初始化結(jié)束后,回到原始狀態(tài),并將header_cm_done置為高電平,表示上下文模型初始化和頭信息編碼已經(jīng)完成,下個(gè)Slice 的首個(gè)CTU進(jìn)來時(shí),無需進(jìn)行頭信息編碼和上下文模型初始化。當(dāng)檢測(cè)到start_i信號(hào)并且條件1為真時(shí),即表示該CTU 為非第1幀的首個(gè)CTU,將同時(shí)啟動(dòng)片頭信息編碼、上下文模型初始化和CTU 編碼進(jìn)程。當(dāng)檢測(cè)到start_i 為高電平并且圖5 中的條件1為假時(shí),則會(huì)進(jìn)入編碼CTU 的狀態(tài),若該CTU 不是Slice 的最后一個(gè)CTU,則CTU 編碼結(jié)束后直接進(jìn)入原始狀態(tài),等待下一個(gè)CTU數(shù)據(jù)的到來,否則end_of_slice_flag 置為高電平,進(jìn)入Slice_End 狀態(tài)清空算術(shù)編碼器的緩存,接著進(jìn)入Determine 狀態(tài)計(jì)算cabac_init_flag,該標(biāo)志決定下一個(gè)Slice 的B Slice和P Slice的上下文模型是否互換。

圖5 本文熵編碼器狀態(tài)機(jī)轉(zhuǎn)換圖Fig.5 Entropy encoder state machine conversion diagram in this paper

2.2 上下文模型初始化方案

上下文模型初始化是為每個(gè)字符提供唯一的初始概率模型[10]。每個(gè)Slice 不能跨越它的邊界進(jìn)行預(yù)測(cè),因此在熵編碼之前需要進(jìn)行上下文模型初始化。根據(jù)QP、Slice Type 和HEVC 為各個(gè)字符提供的InitValue 可以計(jì)算出每個(gè)字符的初始上下文模型。在文獻(xiàn)[13]設(shè)計(jì)中,每次編碼新的Slice時(shí),都需要重新計(jì)算上下文初始值。而本文提出的上下文模型初始化方案在編碼器啟動(dòng)時(shí),將分別計(jì)算B Slice、P Slice 和I Slice 的上下文模型并存儲(chǔ)到對(duì)應(yīng)存儲(chǔ)器中,以供每個(gè)Slice 的上下文模型初始化直接讀取,避免重復(fù)進(jìn)行上下文模型初始化。

首先,上下文自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)中的上下文建模過程需要使用上下文初始化模型,所以上下文模型初始化不可以與CABAC并行。其次,HEVC中每種Slice約有200種字符上下文模型,初始化需要消耗一定的時(shí)間,這將造成CABAC 模塊的空閑。因此,本文提出的上下文模型初始化方案避免了等待上下文模型初始化的過程,從而提高了熵編碼的編碼效率。

熵編碼器狀態(tài)機(jī)轉(zhuǎn)換圖如圖5所示,頭信息編碼完成后,將啟動(dòng)上下文模型初始化電路。當(dāng)對(duì)視頻首個(gè)CTU 進(jìn)行編碼時(shí),header_cm_done 等于1,表示頭信息編碼和上下文模型初始化工作已經(jīng)完成,可以直接進(jìn)入CTU 編碼的工作;當(dāng)編碼其他Slice 的首個(gè)CTU 時(shí),將并行對(duì)片頭信息和CTU 進(jìn)行編碼及對(duì)上下文模型進(jìn)行初始化。

圖6是本研究的上下文模型初始化電路圖。其中,context_init_B、context_init_P 和context_init_I用來分別存儲(chǔ)B、P 和I Slice 的初始上下文模型;context_update 用作編碼器實(shí)時(shí)更新的上下文模型。該模塊啟動(dòng)時(shí),控制模塊將控制上下文模型初始化電路產(chǎn)生3個(gè)Slice的上下文模型,分別存儲(chǔ)到context_init_B、context_init_P、context_init_I 中。值得一提的是,在視頻編碼中,第1個(gè)Slice是獨(dú)立編碼的,所以該Slice一定是I Slice。根據(jù)這個(gè)特點(diǎn),本文初始化過程中將contex_update 初始化為context_init_I,這樣編碼第1個(gè)Slice時(shí),可以跳過上下文模型初始化直接進(jìn)入編碼CTU狀態(tài)。此后的上下文模型初始化過程只需要1 個(gè)時(shí)鐘周期,context_update 根據(jù)Slice 類別(Slice_type_i)選擇對(duì)應(yīng)的context_init即可。

圖6 上下文模型初始化電路圖Fig.6 Context model initialization circuit diagram

2.3 CU結(jié)構(gòu)優(yōu)化策略

因?yàn)镃ABAC 對(duì)數(shù)據(jù)依賴性強(qiáng),熵編碼模塊必須按照HEVC 的編碼順序?qū)⒄Z法元素依次送入CABAC 編碼。由于語法元素產(chǎn)生速度與CABAC 編碼速度不匹配,所以本文將產(chǎn)生的語法元素存放在先進(jìn)先出模塊(FIFO)中,以供CABAC讀取。

進(jìn)入CU 層編碼時(shí),需要依次編碼CU 層、PU層和TU 層的語法元素。計(jì)算幀內(nèi)語法元素時(shí),構(gòu)建最可能模式(MPM)列表需要消耗較多的時(shí)間;計(jì)算變換塊的語法元素時(shí),變換塊的掃描和殘差語法元素上下文復(fù)雜的計(jì)算等都會(huì)導(dǎo)致語法元素信息產(chǎn)生速度變慢,從而導(dǎo)致CABAC 的空閑;進(jìn)一步,針對(duì)QP 較大的TU 塊,包含較多的全零CG 塊,編碼信息較少,殘差四叉樹的遍歷同樣會(huì)導(dǎo)致CABAC 模塊的空閑。因此,本文在CU 層增加2 個(gè)FIFO 分別用于存儲(chǔ)PU 和TU 層產(chǎn)生的語法元素信息,這樣可以緩沖等待生成PU層和TU層語法元素的時(shí)間,減少CABAC 的空閑時(shí)間,提高熵編碼的實(shí)際吞吐量。

圖7 是CU 層級(jí)的設(shè)計(jì)框圖。語法元素的信息來源主要分成3 個(gè)部分:CU 層語法元素、PU 層語法元素和TU 層語法元素,而具體輸出哪一部分的語法元素信息是通過CU 層的狀態(tài)機(jī)輸出的state_o來決定的。

圖7 CU層級(jí)的設(shè)計(jì)框圖Fig.7 Design block diagram of the CU hierarchy

2.4 殘差編碼架構(gòu)設(shè)計(jì)

由文獻(xiàn)[14]可知,與變換系數(shù)有關(guān)的語法元素占總語法元素的65%~72%,因此變換系數(shù)的編碼在熵編碼中占舉足輕重的地位。1 個(gè)變換塊的變換系數(shù)經(jīng)過掃描可以獲得一組一維的變換系數(shù),該組變換系數(shù)可以通過最后非零系數(shù)位置和幅值信息完全表示[10]。最后非零系數(shù)位置表示經(jīng)掃描后的第1 個(gè)非零系數(shù)的位置。在HEVC 中,通過對(duì)最后非零系數(shù)位置和幅值信息進(jìn)行CABAC 編碼,可以達(dá)到壓縮的目的。

變換塊將被劃分成若干個(gè)4×4 大小的CG 塊,并按照一定的掃描順序,依次對(duì)每個(gè)CG進(jìn)行編碼。由于掃描順序中的對(duì)角掃描規(guī)律和部分殘差語法元素的上下文索引計(jì)算過程都較為復(fù)雜,在硬件架構(gòu)的設(shè)計(jì)上會(huì)造成時(shí)延高的問題。文獻(xiàn)[9]中將數(shù)據(jù)準(zhǔn)備和CG 編碼設(shè)計(jì)成乒乓結(jié)構(gòu),以節(jié)省等待數(shù)據(jù)準(zhǔn)備的時(shí)間,但是沒有對(duì)數(shù)據(jù)的掃描進(jìn)行流水線處理。本文將殘差編碼架構(gòu)設(shè)計(jì)成如圖8 所示的4 級(jí)流水線模式,該架構(gòu)在保證高吞吐量的同時(shí)能實(shí)現(xiàn)較低延時(shí)。

圖8 殘差編碼流水架構(gòu)Fig.8 Residual code pipeline architecture

第1級(jí)流水線中,根據(jù)殘差系數(shù)塊的掃描方式和大小,通過查表確定CG的位置。本文將每個(gè)CG塊的位置信息和CG塊的跳轉(zhuǎn)都記錄在表里。因此,只需要一個(gè)時(shí)鐘(clk)就可以實(shí)現(xiàn)CG 位置的獲取和CG 的跳轉(zhuǎn)。第2 級(jí)流水線中,向頂層傳遞CG 的位置,查詢?cè)揅G 的殘差系數(shù),該過程消耗2 個(gè)clk。第3 級(jí)流水線中,根據(jù)CG 的殘差系數(shù)和掃描方式計(jì)算最后非零系數(shù)的位置,該過程消耗1 個(gè)clk。第4級(jí)流水線中,為了減少由語法元素上下文索引復(fù)雜計(jì)算帶來的多路徑延遲,本文將該部分獨(dú)自劃分1 個(gè)模塊,只有當(dāng)CG 的殘差系數(shù)不全為零才進(jìn)入該模塊進(jìn)行CG編碼。4級(jí)流水線的設(shè)計(jì)可以保證CG 編碼模塊的持續(xù)工作,持續(xù)輸出語法元素的同時(shí)減少了關(guān)鍵路徑的延遲,提高了熵編碼模塊的工作頻率。

2.5 上下文索引計(jì)算

經(jīng)掃描得到CG 的一維殘差后,HEVC 并不是直接將殘差送給熵編碼模塊進(jìn)行編碼,而是進(jìn)行一番分析和處理后,形成最合適的變換系數(shù)表示殘差,交由熵編碼處理。其中表示位置信息的語法元素sig_coeff_flag(SIG)和表示幅值信息的語法元素coeff_abs_level_greater1_flag(GR1)的上下文索引計(jì)算規(guī)則復(fù)雜并且數(shù)量占比大[14],因此如何快速計(jì)算SIG 和GR1 的上下文索引成了加快CG 編碼的關(guān)鍵問題。文獻(xiàn)[7]中使用多時(shí)鐘域,每個(gè)時(shí)鐘處理4 個(gè)位置的所有語法元素,不僅會(huì)消耗大量的硬件資源,而且會(huì)導(dǎo)致工作頻率的極大下降。為解決該問題,本文對(duì)殘差語法元素的特性進(jìn)行分析,使用3 級(jí)流水線計(jì)算SIG 和GR1 的上下文索引,可以減少等待上下文索引的計(jì)算過程,滿足每個(gè)時(shí)鐘編碼1個(gè)SE,在增加較少的硬件資源的基礎(chǔ)上,提高了工作頻率。

SIG 表示該像素點(diǎn)的系數(shù)是否為零,1個(gè)CG 中最多編碼16次SIG。GR1表示該像素點(diǎn)的系數(shù)是否大于1,1個(gè)CG中最多編碼8次GR1[10]。SIG和GR1的上下文索引由像素點(diǎn)的位置、YUV分量、變換塊的大小和相鄰CG 的語法元素coded_sub_block_flag(CSBF)的值決定。其中,在編碼過程中,像素點(diǎn)的位置是實(shí)時(shí)變化的,因此本文使用3級(jí)流水線計(jì)算SIG和GR1的上下文索引,可以縮短等待上下文索引的計(jì)算過程,滿足每個(gè)時(shí)鐘編碼1 個(gè)SE。第1 級(jí)流水線中,根據(jù)掃描類型和像素點(diǎn)的索引Res_idx,查找像素點(diǎn)所在的位置。同樣,本文將16 個(gè)像素點(diǎn)的位置和Res_idx 記錄在表內(nèi)。第2 級(jí)流水線中,由像素點(diǎn)的位置、相鄰CG 的CSBF 和TU 的大小計(jì)算上下文基礎(chǔ)索引Sig_Base_Ctx 和Gr1_Base_Ctx。第3 級(jí)流水線中,由YUV 分量和基礎(chǔ)索引計(jì)算上下文索引增量Sig_Icr_Ctx 和Gr1_Base_Ctx 并編碼。圖9 是SIG 和GR1 的上下文索引流水計(jì)算架構(gòu)。

圖9 上下文索引流水計(jì)算架構(gòu)Fig.9 Context index for pipeline calculation architecture

3 設(shè)計(jì)驗(yàn)證與結(jié)果分析

本文提出的熵編碼架構(gòu)包含熵編碼的所有模塊,已通過Verilog RTL 實(shí)現(xiàn),并基于官方參考軟件HM16.7,已經(jīng)通過不同QP、分辨率和視頻序列的測(cè)試。圖10 是本文方案的測(cè)試框圖。測(cè)試過程如下:首先,將HM16.7中熵編碼模塊的輸入數(shù)據(jù)和輸出碼流打印出來;接著,將打印出來的HM16.7 中編碼的輸入數(shù)據(jù)作為本文設(shè)計(jì)的輸入。最后,將本文設(shè)計(jì)的輸出碼流與HM16.7的輸出碼流進(jìn)行一致性對(duì)比。

圖10 測(cè)試框圖Fig.10 Test block diagram

本文對(duì)HEVC官方提供的視頻序列進(jìn)行仿真測(cè)試,統(tǒng)計(jì)了在全I(xiàn) 幀情況下編碼1 個(gè)CTU 所需要的時(shí)間,如表1所示。根據(jù)結(jié)果可知,本文方案應(yīng)用在QP較大的序列中效果更佳。在預(yù)料之中,QP越小,殘差系數(shù)語法元素所占的比重越大,本文提出的預(yù)編碼頭信息和上下文模型初始化方案的優(yōu)勢(shì)將減弱。從表1 中可以得到,QP 為22 時(shí),每個(gè)CTU節(jié)省了23.1%~32.8%的時(shí)間;QP 為37 時(shí),每個(gè)CTU節(jié)省了45.2%~51.2%的時(shí)間。平均每個(gè)全I(xiàn)幀的CTU節(jié)省了38.2%的周期數(shù)。

表1 全I(xiàn)幀下不同QP和序列的1個(gè)CTU時(shí)鐘數(shù)節(jié)省情況Table 1 Number of 1 CTU clocks saved for different QPs and sequences at full I-frame

與同類型文獻(xiàn)進(jìn)行比對(duì)的結(jié)果如表2所示。該表列出了我們所關(guān)心的參數(shù),包括硬件工藝、邏輯門個(gè)數(shù)、最高主頻和最高吞吐量,其中硬件工藝是指所選芯片的制造工藝,用柵長(zhǎng)長(zhǎng)度表示,柵長(zhǎng)越短,則可以在相同的硅片上集成更多的晶體管。文獻(xiàn)[15]中雖然提出了流水線HEVC熵編碼架構(gòu),但使用了較多的邏輯門;本文在最高主頻達(dá)到200 M的同時(shí),使用的邏輯門數(shù)比文獻(xiàn)[9]減少了61.7%;文獻(xiàn)[16]中對(duì)殘差系數(shù)編碼中上下文模型的選擇算法提出了改進(jìn),但無法實(shí)現(xiàn)完全流水,本文的殘差系數(shù)控制方案可以實(shí)現(xiàn)完全流水,而且邏輯門個(gè)數(shù)節(jié)約了61.83%;文獻(xiàn)[5]中雖然提出了高吞吐量的三路CTU并行編碼方案,但其資源消耗是本文設(shè)計(jì)的6.22倍。

表2 硬件結(jié)果對(duì)比Table 2 Comparison of hardware results

4 結(jié)語

隨著CABAC 吞吐量的提高,語法元素作為CABAC 的輸入,其生成速度成為熵編碼實(shí)際吞吐量的瓶頸。因此,本文主要針對(duì)加快語法元素生成展開工作,并基于官方參考軟件HM16.7做了原型驗(yàn)證。結(jié)果表明在編碼全I(xiàn)幀時(shí),不同QP和序列的1個(gè)CTU 平均可以節(jié)省38.2%的周期數(shù)。統(tǒng)計(jì)分析指出,殘差語法元素信息是構(gòu)成碼流的關(guān)鍵。隨著QP 減小,殘差語法元素的占比增加。通過實(shí)驗(yàn)分析可知,隨著QP 的減小,本文方案的優(yōu)勢(shì)降低。因此,筆者將繼續(xù)優(yōu)化其他殘差語法元素的計(jì)算,以確保小QP時(shí)CABAC有足夠的語法元素輸入。

猜你喜歡
編碼器殘差語法
基于雙向GRU與殘差擬合的車輛跟馳建模
基于殘差學(xué)習(xí)的自適應(yīng)無人機(jī)目標(biāo)跟蹤算法
基于遞歸殘差網(wǎng)絡(luò)的圖像超分辨率重建
跟蹤導(dǎo)練(二)4
KEYS
基于FPGA的同步機(jī)軸角編碼器
Keys
Book 5 Unit 1~Unit 3語法鞏固練習(xí)
基于PRBS檢測(cè)的8B/IOB編碼器設(shè)計(jì)
JESD204B接口協(xié)議中的8B10B編碼器設(shè)計(jì)
電子器件(2015年5期)2015-12-29 08:42:24
灵台县| 芮城县| 固原市| 米易县| 扶沟县| 祥云县| 安陆市| 高碑店市| 靖西县| 印江| 乌审旗| 塘沽区| 嘉兴市| 卢湾区| 宁武县| 志丹县| 桂林市| 凤台县| 饶阳县| 得荣县| 繁昌县| 米林县| 六安市| 昌宁县| 图们市| 赤城县| 襄城县| 左权县| 永安市| 高安市| 高要市| 台湾省| 长汀县| 兖州市| 大渡口区| 沛县| 龙川县| 乐昌市| 明光市| 客服| 望奎县|