Prediktiv kodning - icg.isy.liu.se · RA = P d ar R = 2 6 6 6 4 R xx(0) R ... Givet en l ang...

Post on 13-May-2018

216 views 0 download

Transcript of Prediktiv kodning - icg.isy.liu.se · RA = P d ar R = 2 6 6 6 4 R xx(0) R ... Givet en l ang...

Prediktiv kodning

Narliggande sampel i en signal ar oftast starkt korrelerade med varandra,det kan darfor vara en bra ide att forsoka utnyttja denna korrelation(minnet) innan kvantiseringen for att fa en effektivare kodning.

En generell prediktiv kodare utnyttjar signalens utseende N steg tillbaka itiden for kodningen, dvs vi kodar efter den betingade fordelningen

f (xn|xn−1xn−2 . . . xn−N)

Detta ar en markovmodell av ordning N. En kontinuerlig markovmodellar komplicerad och ar ofta svar att estimera for en given signal. Istallet ardet enklare att anvanda en AR-modell for kallan, och da far vi en linjarprediktor.

Linjar prediktion

Ide: Vi gissar (predikterar) signalens varde i tidpunkten n som enlinjarkombination av de N senaste vardena.

pn = a1xn−1 + a2xn−2 + . . .+ aNxn−N =

=N∑i=1

aixn−i

Skillnaden mellan det riktiga vardet och det predikterade vardet,prediktionsfelet, dn = xn − pn kvantiseras och skickas till mottagaren.Mottagaren rekonstruerar dn, beraknar pn och kan sen aterskapa xn.

Detta fungerar inte i praktiken!

Problemet ar att mottagaren bara kan aterskapa en distorderad version dn

av prediktionsfelet och darfor bara en distorderad version xn av signalen.

Linjar prediktion

For att den prediktiva kodaren ska fungera, maste kodardelen gorasamma berakningar som avkodardelen kan gora.Prediktionen maste goras fran den rekonstruerade signalen xn istallet forfran originalsignalen.

pn = a1xn−1 + a2xn−2 + . . .+ aN xn−N =

=N∑i=1

ai xn−i

Prediktionsfelet dn kvantiseras och skickas. Bade kodaren och avkodarenaterskapar dn och xn = pn + dn.

Prediktiv kodare och avkodare

-����- Q -

?�����P

6

-

xn +

−+

+

dn dn

pn

xn

-����-

�P

6

dn +

+

xn

pn

Prediktiv kodare Prediktiv avkodare

Optimering av prediktorn

Hur ska man valja prediktorkoefficienterna ai?Givet en datatakt R sa vill vi minimera distorsionen

D = E{(xn − xn)2} = E{(dn − dn)2}

Kvantiseringen gor att det ar svart att berakna optimala ai exakt. Om viantar fin kvantisering, dvs att antalet kvantiseringsnivaer ar stort, kan vigora approximationen

xn ≈ xn

dvs vi raknar som om prediktionen gjordes pa originalsignalen.Med fin kvantisering far vi aven att

D ≈ c · σ2d · 2−2R

dar σ2d ar variansen hos prediktionsfelet och c beror av vilken typ av

kvantisering vi gor och vilken fordelning dn har. Vi kan alltsa minimeradistorsionen genom att minimera prediktionsfelets varians.

Optimering av prediktorn

Prediktionsfelets varians

σ2d = E{(xn − pn)2} =

= E{(xn −N∑i=1

ai xn−i )2} ≈

≈ E{(xn −N∑i=1

aixn−i )2}

Derivera m.a.p. aj och satt lika med 0, vilket ger oss N ekvationer

∂ajσ2d = −2 · E{(xn −

N∑i=1

aixn−i ) · xn−j} = 0

Matrisbeskrivning

Detta kan skrivas om som matrisekvationen

RA = P

dar

R =

Rxx(0) Rxx(1) · · · Rxx(N − 1)Rxx(1) Rxx(0) · · · Rxx(N − 2)

......

. . . · · ·Rxx(N − 1) Rxx(N − 2) · · · Rxx(0)

A =

a1a2...

aN

, P =

Rxx(1)Rxx(2)

...Rxx(N)

dar Rxx(k) = E{xn · xn+k} ar autokorrelationsfunktionen for xn.

Matrisbeskrivning

Losningen kan fas somA = R−1P

For den optimala prediktorn A far vi

σ2d = Rxx(0)− AtP

Prediktionsvinst

Vid fin kvantisering ges distorsionen och signal-brusforhallandetapproximativt av

Dp ≈ c · σ2d · 2−2R , SNRp = 10 · log10

σ2x

Dp

dar σ2x ar originalsignalens varians.

Om vi istallet kvantiserat originalsignalen direkt hade vi fatt

Do ≈ c · σ2x · 2−2R , SNRo = 10 · log10

σ2x

Do

Skillnaden brukar kallas prediktionsvinst (prediction gain)

SNRp − SNRo = 10 · log10

Do

Dp≈ 10 · log10

σ2x

σ2d

Skattning av autokorrelationer

Givet en lang sekvens x1, x2, . . . , xn av testdata kan man skattaautokorrelationsfunktionen enligt

Rxx(k) =1

n − k

n−k∑i=1

xi · xi+k

I Matlab kan det skrivas

mean(x(1:end-k).*x(k+1:end))

Signaler med medelvarde

Vad gor man om signalen har ett medelvarde m 6= 0?

1. Om signalens medelvarde ar litet i forhallande till variansen kan mananvanda linjar prediktion som vanligt.

2. Annars kan man skapa en ny signal yn = xn −m, konstruera en linjarprediktor for yn och skicka m som sidoinformation.

3. Alternativt kan man konstruera en affin prediktor

pn =N∑i=1

aixn−i + a0

Bortsett fran kvantiseringen sa ger detta samma resultat somalternativ 2.

Tvadimensionella prediktorer

Man kan naturligtvis generalisera prediktorbegreppet till att aven fungerafor tvadimensionella signaler, t.ex. bilder.Till exempel, om vi har en bildsignal xij och vi vill gora en prediktion franbildpunkten till vanster om och bildpunkten ovanfor den aktuella

pij = a1 · xi,j−1 + a2 · xi−1,j

Den optimala prediktorn ges da av losningen till ekvationssystemet[E{x2

i,j−1} E{xi,j−1 · xi−1,j}E{xi,j−1 · xi−1,j} E{x2

i−1,j}

] [a1a2

]=

[E{xi,j · xi,j−1}E{xij · xi−1,j}

]eller, uttryckt med autokorrelationsfunktionen[

Rxx(0, 0) Rxx(1,−1)Rxx(1,−1) Rxx(0, 0)

] [a1a2

]=

[Rxx(0, 1)Rxx(1, 0)

]

Exempel, prediktiv kodning av bild

768× 512 bildpunkter, 8 bitar/bildpunkt

Lloyd-Max-kvantisering, 8 nivaer

Datatakt: R = 3 bitar/bildpunktDistorsion: D ≈ 59.02PSNR: 30.42 dB

Prediktor

Skattad akf

Rxx(0, 0) = σ2 ≈ 2580.9

Rxx(1, 0) ≈ 0.9770 · σ2

Rxx(0, 1) ≈ 0.9863 · σ2

Rxx(1, 1) ≈ 0.9703 · σ2

Rxx(1,−1) ≈ 0.9665 · σ2

Prediktor

pij = 0.8008 · xi,j−1 + 0.6493 · xi−1,j − 0.4525 · xi−1,j−1

En attanivaers Lloyd-Max-kvantiserare optimeras pa prediktionsfelet.

Prediktionsfel, 8 nivaer

Kvantiserat prediktionsfel, 8 nivaer

Avkodad bild, 8 nivaer

Datatakt: R = 3 bitar/bildpunktDistorsion: D ≈ 5.62PSNR: 40.63 dB (Prediktionsvinst 10.21 dB)

Lloyd-Max-kvantisering, 2 nivaer

Datatakt: R = 1 bit/bildpunktDistorsion: D ≈ 735.77PSNR: 19.46 dB

Prediktionsfel, 2 nivaer

Kvantiserat prediktionsfel, 2 nivaer

Avkodad bild, 2 nivaer

Datatakt: R = 1 bit/bildpunktDistorsion: D ≈ 84.81PSNR: 28.85 dB (Prediktionsvinst 9.39 dB)

Exempel: hey04.wav

Filen hey04.wav fran lab 2 kodas med olika ordning pa prediktorn.Likformig kvantisering med 256 nivaer.Diagrammet visar SNR som funktion av antalet prediktorkoefficienter.

0 1 2 3 4 5 6 7 842

43

44

45

46

47

48

49

Exempel: hey04.wav

Filen hey04.wav fran lab 2 kodas med olika ordning pa prediktorn.Likformig kvantisering med 32 nivaer.Diagrammet visar SNR som funktion av antalet prediktorkoefficienter.

0 1 2 3 4 5 6 7 825

26

27

28

29

30

31

32

33

34

Exempel: hey04.wav

Filen hey04.wav fran lab 2 kodas med olika ordning pa prediktorn.Likformig kvantisering med 4 nivaer.Diagrammet visar SNR som funktion av antalet prediktorkoefficienter.

0 1 2 3 4 5 6 7 88

10

12

14

16

18

20

22

Distorsionsfri kodning

Linjar prediktiv kodning kan ocksa anvandas vid distorsionsfri kodning.Om vi antar att insignalen bestar av heltal, sa maste vi se till att varprediktor ocksa producerar heltal.Som exempel har vi bland annat lossless JPEG, som kan anvandaprediktorerna

1. pij = Ii−1,j

2. pij = Ii,j−1

3. pij = Ii−1,j−1

4. pij = Ii,j−1 + Ii−1,j − Ii−1,j−1

5. pij = bIi,j−1 + (Ii−1,j − Ii−1,j−1)/2c6. pij = bIi−1,j + (Ii,j−1 − Ii−1,j−1)/2c7. pij = b(Ii,j−1 + Ii−1,j)/2c

Distorsionsfri kodning

Vi kodar var papegojbild med prediktorn

pij = Ii,j−1 + Ii−1,j − Ii−1,j−1

och huffmankodar sen prediktionsfelet. Datatakten blir da 4.18bitar/bildpunkt.

Om vi istallet anvander prediktorn

pij = b0.8008 · Ii,j−1 + 0.6493 · Ii−1,j − 0.4525 · Ii−1,j−1c

foljt av huffmankodning blir datatakten 3.93 bitar/bildpunkt.

Ljudsignalerna i lab 1

Prediktorer av ordning 1 och 2.hey04_8bit.wav

pn = 0.9820 · xn−1

pn = 1.2970 · xn−1 − 0.3207 · xn−2

nuit04_8bit.wav

pn = 0.9981 · xn−1

pn = 1.8434 · xn−1 − 0.8468 · xn−2

speech.wav

pn = 0.9507 · xn−1

pn = 1.7719 · xn−1 − 0.8639 · xn−2

FLAC (Free Lossless Audio Coding)

Distorsionsfri kodning av ljud

Ljudsignalen delas in i block (typiskt nagra tusen sampel).

Koda summa/skillnad av de tva stereokanalerna om det ger hogrekompression.

Linjara prediktorer optimeras inom blocket. Det finns aven mojlighet attanvanda fixa prediktorer (jamfor med lossless JPEG).

Prediktionsfelet kodas med Ricekoder (ungefar samma sak somGolombkoder).

https://xiph.org/flac/