天天看點

MPEG-2壓縮編碼的視訊基本流

之前給你的錄像對應版本是将你之前提供Xilinx下的那個工程,後來客服和你交流了下,你的目的就是需要實作mpeg2解碼部分,而對音頻等子產品不需要。

這裡,我們将其中的涉及的部分提取,進行仿真說明。并映射到DE2-115開發闆。MPEG2解碼的整個結構如下所示:

MPEG-2壓縮編碼的視訊基本流

即,我們需要實作如上框圖中的紅色部分。即從視訊流輸入到最後的視訊輸出這兩個部分。而原始的視訊輸入是事先将視訊儲存到開發闆中的SDRAM中,此外,由于ALTERA開發闆中的外部存儲器為:

MPEG-2壓縮編碼的視訊基本流

即該開發闆外部用于兩個SDRAM。

    是以,這裡的方法和你提供的那個方法有很大的不同,這裡,由于隻有兩個外部存儲器,是以本方法相對于你下載下傳的那個代碼而言,有一定程度的簡化。

   整個軟體的流程如下所示:

MPEG-2壓縮編碼的視訊基本流

    代碼的原始輸入流為MPEG2的編碼輸入。

通過上面的分析,本方案可以用如下的結構進行标示:

MPEG-2壓縮編碼的視訊基本流

這個子產品分為三個部分,一個是上半部分的MPEG2解碼部分,一個是下面的視訊顯示,最後一個是系統的控制管理部分。

二、MPEG2原理簡介

MPEG-2系統是将視訊、音頻及其它資料基本流組合成一個或多個适宜于存儲或傳輸的資料流的規範,如圖1所示。符合ITU-R. 601标準的、幀次序為I1B2B3P4B5B6P7B8B9I10數字視訊資料和符合AES/EBU标準的數字音頻資料分别通過圖像編碼和聲音編碼之後,生成次序為I1P4B2B3 P7B5B6I10 B8B9視訊基本流(ES)和音頻ES。在視訊ES中還要加入一個時間基準,即加入從視訊信号中取出的27MHz時鐘。然後,再分别通過各自的資料包形成器,将相應的ES打包成打包基本流(PES)包,并由PES包構成PES。最後,節目複用器和傳輸複用器分别将視訊PES和音頻PES組合成相應的節目流(PS)包和傳輸流(TS)包,并由PS包構成PS和由TS包構成TS。顯然,不允許直接傳輸PES,隻允許傳輸PS和TS;PES隻是PS轉換為TS或TS轉換為PS的中間步驟或橋梁,是MPEG資料流互換的邏輯結構,本身不能參與交換和互操作。

   将MPEG-2壓縮編碼的視訊基本流(ES-Elementary Stream)資料分組為包長度可變的資料包,稱為打包基本流(PES- Packetized Elementary Stream)。廣而言之,PES為打包了的專用視訊、音頻、資料、同步、識别資訊資料通道。所謂ES,是指隻包含1個信源編碼器的資料流。即ES是編碼的視訊資料流,或編碼的音頻資料流,或其它編碼資料流的統稱。每個ES都由若幹個存取單元(AU-Access Unit)組成,每個視訊AU或音頻AU都是由頭部和編碼資料兩部分組成的。将幀順序為I1P4B2B3P7B5B6 的編碼ES,通過打包,就将ES變成僅含有1種性質ES的PES包,如僅含視訊ES的PES包,僅含音頻ES的PES包,僅含其它ES的PES包。PES包的組成見圖2。

 由圖2可見,1個PES包是由標頭、ES特有資訊和包資料3個部分組成。由于標頭和ES特有資訊二者可合成1個資料頭,是以可認為1個PES包是由資料頭和包資料(有效載荷)兩個部分組成的。

 標頭由起始碼字首、資料流識别及PES包長資訊3部分構成。包起始碼字首是用23個連續“0”和1個“1”構成的,用于表示有用資訊種類的資料流識别,是1個8 bit的整數。由二者合成1個專用的包起始碼,可用于識别資料包所屬資料流(視訊,音頻,或其它)的性質及序号。例如:

 比特序1 1 0 ×××××是号碼為××××的MPEG-2音頻資料流;

    比特序1 1 1 0 ××××是号碼為××××的MPEG-2視訊資料流。

 PES包長用于包長識别,表明在此字段後的位元組數。如,PES包長識别為2 B ,即2×8 = 16 bit字寬,包總長為216-1=65535 B,分給資料頭9 B(標頭6 B + ES特有資訊3 B ),可變長度的包資料最大容量為65526 B。盡管PES包最大長度可達(216 -1)=65535 B(Byte),但在通常的情況下是組成ES的若幹個AU中的由頭部和編碼資料兩部分組成的1個AU長度。1個AU相當于編碼的1幅視訊圖像或1個音頻幀,參見圖2右上角從ES到PES的示意圖。也可以說,每個AU實際上是編碼資料流的顯示單元,即相當于解碼的1幅視訊圖像或1個音頻幀的取樣。

 ES特有資訊是由PES標頭識别标志、PES標頭長資訊、資訊區和用于調整資訊區可變包長的填充位元組4部分組成的PES包控制資訊。其中,PES標頭識别标志由12個部分組成:PES加擾控制資訊、PES優先級别訓示、資料适配定位訓示符、有否版權訓示、原版或拷貝訓示、有否顯示時間标記(PTS-Presentation Time Stamp)/解碼時間标記(DTS-Decode Time Stamp)标志、PES標頭有否基本流時鐘基準(ESCR-Elementary Stream Clock Reference)資訊标志、PES標頭有否基本流速率資訊标志、有否數字存儲媒體(DSM)特技方式資訊标志、有否附加的拷貝資訊标志、PES標頭有否循環備援校驗(CRC-Cyclic Redundancy Check)資訊标志、有否PES擴充标志。有擴充标志,表明還存在其它資訊。如,在有傳輸誤碼時,通過資料包計數器,使接收端能以準确的資料恢複資料流,或借助計數器狀态,識别出傳輸時是否有資料包丢失。

MPEG-2幀間編碼結構

    為了在高效壓縮編碼的條件下、獲得可随機存取的高壓縮比、高品質圖像,MPEG定義了I、P、B三種圖像格式,分别簡稱為幀内圖(Intra Picture)、

    預測圖(Predicted Picture)及雙向圖(Bidirec tional Picture),即I圖、P圖及B圖,用于表示1/30s時間間隔的幀序列畫面。

    因為,要滿足随機存取的要求,僅利用I圖本身資訊進行幀内編碼就可以了;要滿足高壓縮比和高品質圖像的要求,單靠I圖幀内編碼還不行,

    還要加上由P圖和B圖參與的幀間編碼,以及塊比對運動補償預測,即用前一幀圖像預測目前圖像的因果預測和用後一幀圖像預測目前圖像的内插預測。

    這就要求幀内編碼與幀間編碼平衡,因果預測與内插預測間的平衡。平衡的結果是随機存取的高壓縮比、高品質圖像的統一。

    為了提高壓縮比及圖像品質,MPEG-2視訊編碼采用運動補償預測(時間預測+内插)消除時間備援和不随時間變化的圖像細節;

    采用二維DCT(圖像像素+量化傳輸系數)分解相鄰像素,消除觀衆不可見、不重要的圖像細節;采用熵值編碼(已量化參數+編碼參數的熵),使bit數減少到理論上的最小值。對以上3種壓縮技術,作如下說明:

運動補償預測:

将存儲器中前一圖像幀的重建圖像中相應的塊按編碼器端求得的運動矢量進行位移,這就是運動補償過程。為了壓縮視訊信号的時間備援度(Temporal Redundancy),MPEG采用了運動補償預測(Motion Compensated Prediction),圖17是其運動處理過程示意圖。運動補償預測假定:通過畫面以一定的提前時間平移,可以局部地預測目前畫面。這裡的局部意味着在畫面内的每個地方位移的幅度和方向可以是不相同的。采用運動估值的結果進行運動補償,以便盡可能地減小預測誤差。運動估值包括了從視訊序列中提取運動資訊的一套技術,該技術與所處理圖像序列的特點決定着運動補償性能的優劣。與畫面16×16像素宏塊相關的運動矢量支援接收機解碼器中的運動補償預測。

二維DCT

MPEG采用了Ahmed N.等人于1974年提出的離散餘弦變換(DCT-Discrete Cosine Transform)壓縮算法,降低視訊信号的空間備援度(Spatial Redundancy)。因為靜态圖像和預測誤差信号兩者具有非常高的空間備援度,為降低空間備援度最廣泛地采用的頻率域分解技術就是DCT。DCT将運動補償誤差或原畫面資訊塊轉換成代表不同頻率分量的系數集。這有兩個優點:其一,信号常将其能量的大部分集中于頻率域的1個小範圍内,這樣一來,描述不重要的分量隻需要很少的比特數;其二,頻率域分解映射了人類視覺系統的處理過程,并允許後繼的量化過程滿足其靈敏度的要求。視訊信号的頻譜線在0-6MHz範圍内,而且1幅視訊圖像内包含的大多數為低頻頻譜線,隻在占圖像區域比例很低的圖像邊緣的視訊信号中才含有高頻的譜線。是以,在視訊信号數字處理時,可根據頻譜因素配置設定比特數:對包含資訊量大的低頻譜區域配置設定較多的比特數,對包含資訊量低的高頻譜區域配置設定較少的比特數,而圖像品質并沒有可察覺的損傷,達到碼率壓縮的目的。然而,這一切要在低熵(Entropy)值的情況下,才能達到有效的編碼。能否對一串資料進行有效的編碼,取決于每個資料出現的機率。每個資料出現的機率差别大,就表明熵值低,可以對該串資料進行高效編碼。反之,出現的機率差别小,熵值高,則不能進行高效編碼。視訊信号的數字化是在規定的取樣頻率下由A/D轉換器對視訊電平轉換而來的,以256層或1024層表示輸入視訊信号的幅度,每個像素的視訊信号幅度随着每層的時間而周期性地變化。每個像素的平均資訊量的總和為總平均資訊量,即熵值。由于每個視訊電平發生幾乎具有相等的機率,是以視訊信号的熵值很高。

由DCT正變換公式(2)及反變換公式(3)可見,計算有一定的複雜性。但是,實際上這個函數是用代碼來實作的,即兩個餘弦項隻在程式開始時進行1次計算,将計算的結果儲存起來,而後通過查表就可以了,其它各項都可以通過查表解決,其程式采用了雙層嵌套循環。圖25是兩個餘弦項所構成的核函數Gu,v (x,y)計算的示意圖,其中設N = 8, u = 2,v = 3;x = 4, y = 5,可求得G2,3(4,5) = G2,3(4)G2,3(5) = (-0.924) ×(+0.979)= - 0.905,以此類推可得到各個點的值,儲存起來備查。通過查表,查出各個項的值,用代碼來實作圖24中DCT編碼器輸出的DCT系數。

量化

DCT系數采用量化(Quantization)進行壓縮是1個關鍵性的運算,因為組合量化和遊程長度編碼可以提供最大的壓縮量,也可以通過量化使編碼器輸出比對成1個給定的比特率。實際上,自适應量化是實作視覺品質的關鍵性工具之一,在量化中會減少頻率域中描述DCT系數的精度。這一點可從圖26基本MPEG編碼器的運動補償預測編碼過程簡化電路圖看出。

編碼

     編碼是DCT壓縮系統的最後一步。在對64個DCT系數均勻量化後,系數分成為直流(DC)和交流(AC)兩個部分。DC系數代表了分量子產品的平均亮度,可采用內插補點脈沖編碼調制(DPCM)進行編碼;對AC系數,由于非零的DCT系數大多數集中在矩陣的左上角,在進行編碼之前先對量化後的DCT系數進行“之”字形掃描,有利于得到一個長的“0”序列,提高編碼效率。DCT系數掃描方式有“之”字形和“準之” 字形兩種。逐行掃描采用“之”字形傳送量化後的DCT系數,隔行掃描采用“準之”字形傳送量化後的DCT系數,兩種掃描方式如圖28所示。

MPEG-2壓縮編碼的視訊基本流

解碼部分和編碼部分相對應,即反運算。

三、MPEG2各個子產品設計

這裡,我們開始對MPEG2的解碼設計進行仿真分析。

根據算法流程,整個子產品的設計按如下的幾個子產品進行,頭資訊解碼子產品,Slice頭資訊解碼子產品,運動預測子產品,運動補償子產品,塊解碼子產品,反掃描子產品,反量化子產品,反DCT子產品,系統工作管理子產品,SDRAM控制子產品,VGA顯示子產品。

下面就這些子產品進行設計,以下的子產品我們均通過modelsim仿真驗證其正确性。

IDCT子產品:

    該子產品,采用的是流的處理形式,即串行的處理方法進行,整個子產品使用四個雙口RAM,其資源占用如下所示:

MPEG-2壓縮編碼的視訊基本流

這個子產品的仿真結果如下所示:

MPEG-2壓縮編碼的視訊基本流
MPEG-2壓縮編碼的視訊基本流

反量化子產品:

這個子產品就是對應MPEG2編碼中的量化子產品,其主要原理就是位址讀取存儲在ROM中的反量化資料,即通過查找表的方法得到反量化後的結果。

這個子產品的資源占用情況為:

MPEG-2壓縮編碼的視訊基本流

其RTL圖為:

MPEG-2壓縮編碼的視訊基本流

這個子產品的仿真結果如下所示:

MPEG-2壓縮編碼的視訊基本流

運動補償子產品:

這個子產品是MPEG2中的核心子產品,其主要由塊估計,塊預測子產品組成。這個子產品的資源占用如下所示:

其RTL圖如下所示:

MPEG-2壓縮編碼的視訊基本流

參數緩存子產品:

    将計算的一些中間結果儲存到雙口RAM中,再次使用的時候,從雙口RAM中讀出即可。

其RTL圖如下所示:

MPEG-2壓縮編碼的視訊基本流

   這個子產品主要由四個BRAM構成。

塊解碼子產品:

塊子產品解碼子產品如下所示:

其中RTL圖如下所示:

MPEG-2壓縮編碼的視訊基本流

以上這些子產品就是MPEG2中的圖像幀的解密部分,整個子產品整合起來結構如下所示:

其RTL圖如下所示:

MPEG-2壓縮編碼的視訊基本流

    MPEG2的視訊流資料,通過上面的子產品,就可以進行解碼了。

結合頭資訊解碼的MPEG2解碼總體結構子產品:

MPEG-2壓縮編碼的視訊基本流

加入SRAM控制器之後,整個系統的結構如下所示:

從上面的圖可知,其中一個是SDRAM管理子產品,一個是MPEG2解碼的核心子產品。