prediktiv kodning - icg.isy.liu.se · ra = p d ar r = 2 6 6 6 4 r xx(0) r ... givet en l ang...
TRANSCRIPT
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/