預測編碼
預測編碼
預測編碼是根據離散信號之間存在著一定關聯性的特點,利用前面一個或多個信號預測下一個信號進行,然後對實際值和預測值的差(預測誤差)進行編碼。
預測編碼如果預測比較準確,誤差就會很小。在同等精度要求的條件下,就可以用比較少的比特進行編碼,達到壓縮數據的目的。
預測編碼中典型的壓縮方法有脈衝編碼調製(PCM,Pulse Code Modulation)、差分脈衝編碼調製(DPCM,Differential Pulse Code Modulation)、自適應差分脈衝編碼調製(ADPCM,Adaptive Differential Pulse Code Modulation)等,它們較適合於聲音、圖像數據的壓縮,因為這些數據由採樣得到,相鄰樣值之間的差相差不會很大,可以用較少位來表示。
脈衝編碼調製(PCM,pulse code modulation)是概念上最簡單、理論上最完善的編碼系統。它是最早研製成功、使用最為廣泛的編碼系統,但也是數據量最大的編碼系統。
PCM的編碼原理比較直觀和簡單,原理框圖如圖04-01-1所示。在這個框圖中,它的輸入是模擬信號,首先經過時間採樣,然後對每一樣值都進行量化,作為數字信號的輸出,即PCM樣本序列x(0),x(1),…,x(n)。圖中的“量化,編碼”可理解為“量化階大小(step-size)”生成器或者稱為“量化間隔”生成器。
圖04-01-1 PCM編碼框圖
量化有多種方法。最簡單的是只應用於數值,稱為標量量化,另一種是對矢量(又稱為向量)量化。標量量化可歸納成兩類:一類稱為均勻量化,另一類稱為非均勻量化。理論上,標量量化也是矢量量化的一種特殊形式。採用的量化方法不同,量化后的數據量也就不同。因此,可以說量化也是一種壓縮數據的方法。
下面介紹標量量化,矢量量化將在本章最後一節介紹。
(一)均勻量化
如果採用相等的量化間隔處理採樣得到的信號值,那麼這種量化稱為均勻量化。均勻量化就是採用相同的“等分尺”來度量採樣得到的幅度,也稱為線性量化,如圖04-01-2所示。量化后的樣本值Y和原始值X的差 E=Y-X 稱為量化誤差或量化雜訊。
圖04-01-2 均勻量化
(二)非均勻量化
用均勻量化方法量化輸入信號時,無論對大的輸入信號還是小的輸入信號一律都採用相同的量化間隔。為了適應幅度大的輸入信號,同時又要滿足精度要求,就需要增加量化間隔,這將導致增加樣本的位數。但是,有些信號(例如話音信號),大信號出現的機會並不多,增加的樣本位數就沒有充分利用。為了克服這個不足,就出現了非均勻量化的方法,這種方法也叫做非線性量化。
非線性量化的基本想法是,對輸入信號進行量化時,大的輸入信號採用大的量化間隔,小的輸入信號採用小的量化間隔,如圖04-01-3所示,這樣就可以在滿足精度要求的情況下用較少的位數來表示。量化數據還原時,採用相同的規則。
圖04-01-3 非均勻量化
1.m 律壓擴
式中:x為輸入信號幅度,規格化成 -1≤< /SPAN> x≤ 1;
sgn(x)為x的極性,x<0時為-1,否則為1;
m為確定壓縮量的參數,它反映最大量化間隔和最小量化間隔之比,取100≤ m≤ 500,現在多取 m =255。
由於m律壓擴的輸入和輸出關係是對數關係,所以這種編碼又稱為對數PCM。具體計算時,用m=255,可以把對數曲線變成8條折線以簡化計算過程。
2.A律壓擴
G.711標準建議的A律壓擴主要用在中國大陸和歐洲等地區的數字電話通信中,按下面的式子確定量化輸入和輸出的關係:
0 ≤ | x| ≤ 1/A
1/A < |x| ≤ 1
式中:x為輸入信號幅度,規格化成 -1 ≤< /SPAN > x ≤ 1;
sgn(x)為x的極性,x<0時為-1,否則為1;
A為確定壓縮量的參數,它反映最大量化間隔和最小量化間隔之比,通常取A=87.6。
A律壓擴的前一部分是線性的,其餘部分與m律壓擴相同。A律壓擴具有與m律壓擴相同的基本性能(在大信號區信噪比高於m律量化器,但在小信號區不如m律量化器)和實現方面的優點,尤其是還可以用直線段很好地近似,以便於直接壓擴或數字壓擴,並易於與線性編碼格式相互轉換。具體計算時,A=87.56,為簡化計算,同樣把對數曲線部分變成13條折線。
對於採樣頻率為8 kHz,樣本精度為13比特、14比特或者16比特的輸入信號,使用m率壓擴編碼或者使用A率壓擴編碼,經過PCM編碼器之後每個樣本的精度為8比特,輸出的數據率為64 kbps。這個數據就是CCITT推薦的G.711標準:話音頻率脈衝編碼調製(Pulse Code Modulation (PCM) of Voice Frequencies)。通常的聽覺主觀感覺認為8位壓擴量化有不低於12位均勻量化A/D的信噪比及動態範圍。
在PCM系統中,原始的模擬信號經過採樣后得到的每一個樣值都被量化成為數字信號。為了壓縮數據,可以不對每一樣值都進行量化,而是預測下一樣值,並量化實際值與預測值之間的差值,這就是DPCM(Differential Pulse Code Modulation,差分脈衝編碼調製)。1952年貝爾(Bell)實驗室的C. C. Cutler取得了差分脈衝編碼調製系統的專利,奠定了真正實用的預測編碼系統的基礎。DPCM的組成如圖04-01-4,其中編碼器和解碼器分別完成對預測誤差量化值的熵編碼和解碼。
圖04-01-4 DPCM系統原理框圖
DPCM系統工作時,發送端先發送一個起始值x0,接著就只發送預測誤差值ek = xk – x^k,而預測值x^k可記為
x^k = f(x'1,x'2,…, x' N,k), k > N (04-01-1)
式中k > N表示x'1,x'2,…, x' N的時序在xk之前,為所謂因果型(Causal)預測,否則為非因果型預測。
接收端把接收到的量化后的預測誤差e^k 與本地算出的x^k相加,即得恢複信號x'k。如果沒有傳輸誤差,則接收端重建信號x'k與發送端原始信號xk之間的誤差為:
xk - x' k = x k - ( x^k + e^k )
= ( xk - x^k ) - e^k
= ek - e^k
= qk (04-01-2)
這正是發送端量化器產生的量化誤差,即整個預測編碼系統的失真完全由量化器產生。因此,當xk已經是數字信號時,如果去掉量化器,使e^k = ek,則qk = 0,即x'k = xk 。這表明,這類不帶量化器的DPCM系統也可用於無損編碼。但如果量化誤差qk ≠ 0,則x'k ≠xk,為有損編碼。
如果預測方程式(04-01-2)的右方是各個x'i的線性函數,即
N
x' k = Σai(k) x' i k > N (04-01-3)
i=1
即得常用的線性預測,又稱線性預測編碼(LPC,Linear Predictive Coding)。LPC在語音處理中得到廣泛應用,並在此基礎上發展了許多演演算法,典型的有:多脈衝線性預測編碼(MPLPC),規則脈衝激勵編碼(RPE),碼激勵線性預測(CELP),代數激勵線性預測(ACELP),矢量和激勵線性預測(VSELP),QCELP(Qualcomm CELP,變速率CELP),低延時碼激勵線性預測(LD-CELP),共軛結構代數激勵線性預測(CS-ACELP),混合激勵線性預測(MELP),間隔同步更新碼激勵線性預測(PSI-CELP),鬆弛碼激勵線性預測(RCELP),殘差激勵線性預測(RELP),規則脈衝激勵長時預測(RPE-LTP)等。
在DPCM中,“1位量化”的特殊情況稱為增量調製(Δ調製)。
為了能夠正確恢復被壓縮的信號,不僅在接收端有一個與發送端相同的預測器,而且其輸入信號也要相同(都是x'k,而不是xk),動作也與發送端的預測器環路(即發送端本地的反量化和解碼部分)完全相同。
在圖像信號中應用DPCM時,用作預測的像素和被預測的像素可以在同一行,也可以在不同行(同一幀),甚至在不同幀,分別稱為一維預測、二維預測和三維預測。聲音信號中的預測只是一維預測。
DPCM的優點是演演算法簡單,容易硬體實現,缺點是對通道雜訊很敏感,會產生誤差擴散。即某一位碼出錯,對圖像一維預測來說,將使該像素以後的同一行各個像素都產生誤差;而對二維預測,該碼引起的誤差還將擴散到以下的各行。這樣,將使圖像質量大大下降。同時,DPCM的壓縮率也比較低。隨著變換編碼的廣泛應用,DPCM的作用已很有限。
進一步改善量化性能或壓縮數據率的方法是採用自適應量化或自適應預測,即自適應脈衝編碼調製(ADPCM)。它的核心想法是:①利用自適應的思想改變數化階的大小,即使用小的量化階(step-size)去編碼小的差值,使用大的量化階去編碼大的差值,②使用過去的樣本值估算下一個輸入樣本的預測值,使實際樣本值和預測值之間的差值總是最小。它的編碼簡化框圖如圖04-01-5所示。
圖04-01-5 ADPCM方框圖
1.自適應量化
在一定量化級數下減少量化誤差或在同樣的誤差條件下壓縮數據,根據信號分佈不均勻的特點,希望系統具有隨輸入信號的變化區間足以保持輸入量化器的信號基本均勻的能力,這種能力叫自適應量化。
自適應量化必須有對輸入信號的幅值進行估值的能力,有了估值才能確定相應的改變數。若估值在信號的輸入端進行,稱前饋自適應;若在量化輸出端進行,稱反饋自適應。信號的估值必須簡單,佔用時間短,才能達到實時處理的目的。
2.自適應預測
預測參數的最佳化依賴信源的特徵,要得到最佳預測參數顯然是一件繁瑣的工作。而採用固定的預測參數往往又得不到較好的性能。為了能使性能較佳,又不致於有太大的工作量,可以採用自適應預測。
為了減少計算工作量,預測參數仍採用固定的,但此時有多組預測參數可供選擇,這些預測參數根據常見的信源特徵求得。編碼時具體採用哪組預測參數需根據特徵來自適應地確定。為了自適應地選擇最佳參數,通常將信源數據分區間編碼,編碼時自動地選擇一組預測參數,使該實際值與預測值的均方誤差最小。隨著編碼區間的不同,預測參數自適應地變化,以達到准最佳預測。
幀間預測編碼是利用視頻圖像幀間的相關性,即時間相關性,來達到圖像壓縮的目的,廣泛用於普通電視、會議電視、視頻電話、高清晰度電視的壓縮編碼。
在圖像傳輸技術中,活動圖像特別是電視圖像是關注的主要對象。活動圖像是由時間上以幀周期為間隔的連續圖像幀組成的時間圖像序列,它在時間上比在空間上具有更大的相關性。大多數電視圖像相鄰幀間細節變化是很小的,即視頻圖像幀間具有很強的相關性,利用幀所具有的相關性的特點進行幀間編碼,可獲得比幀內編碼高得多的壓縮比。對於靜止圖像或活動很慢的圖像,可以少傳一些幀,如隔幀傳輸,未傳輸的幀,利用接收端的幀存儲器中前一幀的數據作為該幀數據,對視覺沒有什麼影響。因為人眼對圖像中靜止或活動慢的部分,要求有較高的空間解析度,而對時間解析度的要求可低些。這種方法叫幀重複方法,廣泛應用於視頻電話、視頻會議系統中,其圖像幀速率一般為1~15幀/秒。
採用預測編碼的方法消除序列圖像在時間上的相關性,即不直接傳送當前幀的像素值,而是傳送x和其前一幀或后一幀的對應像素x' 之間的差值,這稱為幀間預測。當圖像中存在著運動物體時,簡單的預測不能收到好的效果,例如在圖04-01-6中當前幀與前一幀的背景完全一樣,只是小球平移了一個位置,如果簡單地以第k-1幀像素值作為k幀的預測值,則在實線和虛線所示的圓內的預測誤差都不為零。如果已經知道了小球運動的方向和速度,可以從小球在k-1幀的位置推算出它在k幀中的位置來,而背景圖像(不考慮被遮擋的部分)仍以前一幀的背景代替,將這種考慮了小球位移的k-1幀圖像作為k幀的預測值,就比簡單的預測準確得多,從而可以達到更高的數據壓縮比。這種預測方法稱為具有運動補償的幀間預測。
圖 04-01-6 幀間預測與具有運動補償的幀間預測
具有運動補償的幀間預測編碼是視頻壓縮的關鍵技術之一,它包括以下幾個步驟:首先,將圖像分解成相對靜止的背景和若干運動的物體,各個物體可能有不同的位移,但構成每個物體的所有像素的位移相同,通過運動估值得到每個物體的位移矢量;然後,利用位移矢量計算經運動補償后的預測值;最後對預測誤差進行量化、編碼、傳輸,同時將位移矢量和圖像分解方式等信息送到接收端。圖04-01-7示出了具有運動補償的幀間預測器的原理框圖。
圖04-01-7 具有運動補償的幀間預測器功能框圖
在具有運動補償的幀間預測編碼系統中,對圖像靜止區和不同運動區的實時完善分解和運動矢量計算是較為複雜和困難的。在實際實現時經常採用的是像素遞歸法和塊匹配法兩種簡化的辦法。
像素遞歸法的具體作法是,仍需通過某種較為簡單的方法首先將圖像分割成運動區和靜止區。在靜止區內像素的位移為零,不進行遞歸運算;對運動區內的像素,利用該像素左邊或正上方像素的位移矢量D作為本像素的位移矢量,然後用前一幀對應位置上經位移D后的像素值作為當前幀中該像素的預測值。如果預測誤差小於某一閾值,則認為該像素可預測,無需傳送信息;如果預測誤差大於該閾值,編碼器則需傳送量化后的預測誤差、以及該像素的地址,收、發雙方各自根據量化后的預測誤差更新位移矢量。由此可見,像素遞歸法是對每一個像素根據預測誤差遞歸地給出一個估計的位移矢量,因而不需要單獨傳送位移矢量給接收端。
塊匹配法是另一種更為簡單的運動估值方法。它將圖像劃分為許多子塊,並認為子塊內所有像素的位移量是相同的,這意味著將每個子塊視為一個“運動物體”。對於某一時間t,圖像幀中的某一子塊如果在另一時間t-t1的幀中可以找到若干與其十分相似的子塊,則稱其中最為相似的子塊為匹配塊,並認為該匹配塊是時間t-t1的幀中相應子塊位移的結果。位移矢量由兩幀中相應子塊的坐標決定。
考慮到一定時間間隔內物體可能的運動速度、運動範圍和匹配搜索所需的計算量,在匹配搜索時一般僅在一個有限範圍內進行。假設在給定時間間隔內最大可能的水平和垂直位移為d h和d v個像素,則搜索範圍SR為
其中M、N為子塊的水平和垂直像素數。
在塊匹配方法中需要解決兩個問題:一是確定判別兩個子塊匹配的準則;二是尋找計算量最少的匹配搜索演演算法。判斷兩個子塊相似程度的準則可以利用兩個塊間歸一化的二維互相關函數、兩子塊間亮度的均方差MSE或兩子塊間亮度差絕對值的均值MAD等。通過對不同判別準則的比較研究表明,各種判別準則對位移矢量的估值精度影響差別不是很大。由於MAD準則的計算不含有乘法和除法運算而成為最常使用的匹配判別準則。MAD準則定義如下:
其中Xk和Xk-1分別表示圖像在第k幀和第k-1幀的像素值。當MAD最小時,表示兩個子塊匹配。
對於匹配搜索演演算法,最簡單和直接的方法就是全搜索方式,即將第k-1幀中的子塊在整個搜索區內逐個像素移動,每移動一次計算一次判決函數。總的移動次數為 (2d h + 1)(2d v + 1)。當d h = d v = 6時,總的計算次數為169。顯然,全搜索的運算量是相當大的。為了加快搜索過程,人們提出了許多不同的搜索方法,其中應用較廣的有二維對數法、三步法、共軛方向法和正交搜索法。這幾種方法都基於如下的假設:當偏離最小誤差方向時,判決函數是單調上升的,搜索總沿著判決函數值減小的方向進行。上述幾種方案所需的搜索步驟和計算點數略有差異,但基本思路是一致的。
通過上面介紹的兩種運動矢量估值方法可以看出,像素遞歸法對每一個像素給出一個估計的位移矢量,因而對較小面積物體的運動估值較為精確。但像素遞歸法在估值時需要進行疊代運算,從而存在著收斂速度和穩定性問題。塊匹配法對同一子塊內位移量不同的像素只能給出同一個位移估值,限制了對每一像素的估值精度。但對於面積較大的運動物體而言,採用塊匹配法的預測要比採用像素遞歸法的預測效果好。另外,從軟硬體實現角度看,塊匹配演演算法相對簡單,在實際活動圖像壓縮編碼系統中得到較為普遍的應用。
在具有運動補償的預測編碼系統中,利用了活動圖像幀間信息的相關性,通過對相鄰幀圖像的預測誤差進行編碼而達到壓縮數據的目的。運動補償技術的引入,大大提高了預測精度,使傳輸每一幀圖像的平均數據量進一步降低。在此系統中圖像的傳輸幀率並沒有變化,仍與編碼前的幀率一樣。然而在某些應用場合如可視電話、視頻會議等,對圖像傳輸幀率的要求可適當降低,這就為另外一種稱為幀間內插的活動圖像壓縮編碼方法提供了可能。
活動圖像的幀間內插編碼是在系統發送端每隔一段時間丟棄一幀或幾幀圖像,而在接收端再利用圖像的幀間相關性將丟棄的幀通過內插恢復出來,以防止幀率下降引起閃爍和動作不連續。恢復丟棄幀的一個簡單辦法是利用線性內插,設x(i, j), y(i, j)分別代表兩個傳輸幀中相同空間位置上像素的亮度,在中間第n個內插幀對應位置的亮度z(i, j) 可用如下的內插公式:
n=1,2,3,……N-1
其中N為兩個傳輸幀之間的幀間隔數。
簡單線性幀間內插的缺點在於當圖像中有運動物體時,兩個傳輸幀在物體經過的區域上不再一一對應,因而引起圖像模糊。如圖04-01-8所示,為解決這一問題可採用帶有運動補償的幀間內插。具有運動補償的幀間內插和幀間預測都需要進行運動估值,但二者的目的和運動估值不準確所帶來的影響不完全相同。
圖04-01-8 幀間內插示意圖
在幀間預測中引入運動補償的目的是為了減少預測誤差,從而提高編碼效率。運動估值的不準確會使預測誤差加大,從而使傳輸的數據率上升,但接收端據此位移矢量和預測誤差解碼不會引起圖像質量下降。而在幀間內插中引入運動補償的目的,是使恢復的內插幀中的運動物體不致因為內插而引起太大的圖像質量下降。這是由於在丟棄幀內沒有傳送任何信息,要確定運動物體在丟棄幀中的位置必須知道該物體的運動速度。運動估值的不準確,將導致內插出來的丟棄幀圖像的失真。另外,在幀間內插中的位移估值一般要對運動區的每一個像素進行,而不是對一個子塊;否則,內插同樣會引起運動物體邊界的模糊。因此,在幀間內插中較多使用能夠給出單個像素位移矢量的像素遞歸法。
其他還有閾值法(只傳送像素亮度的幀間差值超過一定閾值的像素)、幀內插(對於活動緩慢的圖像,利用前後兩幀圖像進行內插,得到預測圖像,然後對幀差信號進行編碼)、運動估計與補償等。