Metoder och algoritmer i komprimering
Källkodning
Familj
Huffmankodning
Metodnamn
Beskrivning
Fixlängd
Trädstruktur. Börja med alla kodord som löv i trädet ordnade efter sannolikhet. Tilldela rekursivt
varje kodord med bitar. Kan utvidgas till att koda flera kodord till ett. Kan ge dålig prestanda vid
skeva fördelningar.
Adaptiv
Man startar med en känd sannolikhetsmodell. Varje gång man kodar en symbol uppdateras
sannolikhetmodellen. Man behöver inte skicka sidoinfo om sannolikhetsmodellen.
Skurlängdskodning
Kodar som tuplar av symbol och längd.
Golombkoder
Koder för att koda heltal med monotont avtagande sannolikheter. Välj parameter m, så att heltalet n
kodas med q = n/m 1:or följt av en nolla. Är optimala för fördelningar med avtagande
sannolikheter. Mindre sidoinfo än Huffmankodning, bara parameter m skickas.
Aritmetisk kodning
Med hjälp av en fördelningsfunktion (cumulative distribution function) kan varje sekvens av
källsymboler med ett tal i intervallet [0,1). Talet hittas med hjälp av sannolikheten för varje symbol.
För att få momentan avkodning skickar man bitar direkt och skalar om intervallet.
Prediktiv kodning
Fixpunktsaritmetik
Intervallsgränserna sparas som ett heltalmed m bitars noggrannhet
Adaptiv
Samma som för Adaptiv Huffmankodning.
Linjär prediktion
Vi gissar signalens värde i tidpunkten n som en linjär kombination av N tidigare värden.
Prediktionsfelet som bildas av de tidigare skickade predikterade värdena kvantiseras och
skickas.
p n =∑ a i x n−i där x är rekonstruerade signalen.
Transformkodning
Allmänt
Generell algoritm:
1. Dela in signalen i block av storlek N (i 2D NxN) och transformera dessa block med lämplig
reversibel transform.
2. Kvantisera tranformerad signal.
3. Koda de transformerade tranformkomponenterna (med tex Huffy, aritmetisk...)
Linjära transformer
Signalen tranformeras med:
N −1
N −1
theta n = ∑ a n , i x i och kan återfås av x n = ∑ b n , i theta i . Detta kan skrivas i matrisform:
i=0
i=0
 A⋅x och x =B⋅O
 där B= A . Vi är bara intresserade av ortonormala matriser så att
O=
B= A−1= AT Operationen kan beskrivas som ett basbyte. Önskvärda egenskaper hos
transformen är att den koncentrerar signalenergin på så få komponenter som möjligt, ta bort
beroendet mellan transformkomponenterna, vara robust samt vara enkel och snabb att beräkna.
−1
Om vi använder samma typ av kvantisering och kodning (zonkodning?) för alla
transformkomponenter blir distortionen för varje komponent lika stor.
Man kan också koda med tröskelkodning, vilket innebär att man bara skickar de
transformkomponenter som ligger över en viss tröskel. Resten skickas som 0. Vilka komponenter
som skickas måste skickas som sidoinformation. Man använder Zig­zag scanning.
Karhunen­Loéve
tranform (KLT)
Ger maximal energikoncentration, pga att de nya basvektorerna ges av korrelationsmatrisens
egenvektorer. Nackdelen är att transformmatrissen måste skickas för varje signal. Om källans
statistik ändras måste nya basvektorer beräknas.
Diskret Cosinus
Transform (DCT)
Transformmatrisen ges av:
[C ]ij =
{

}
1
N
i=0
2
2 j1i pi i=1,... , N −1
cos
N
2N
DCT är nära besläktad med Fouriertransformen.
Diskret Walsh­
Hadamard transform
En Hadamardmatris av storleken N=2kges av:
[
H B=
H N /2 H N /2
H N /2 −H N /2
]
där H 1=1 .
I DWHT är matrisen normerad med 1/  N vilket gör att den bara antar +1 eller ­1. Ger inte så
bra energikoncentration vilket göra att kvantiseringsfelen blir väldigt synliga.
Delbandskodning
M­band
Signalen delas upp i frekvensband med hjälp av M stycken analysfilter Hi. Varje subband samplas
sedan ner, kvantiseras och kodas. På mottagarsidan sker en omvänd process samt en
sammanslagning till en återskapad signal.
Det finns flera sätt att ta fram filter, t ex QMF, power symmetric filter, wavelets, Haar och LeGall.
Flat filterbank
Signalen filtreras med ett lågpass och ett högpass filter. Varje filtrerad signal filtreras sedan igen
rekursivt. Detta ger en jämn uppdelning av frekvensaxeln.
Dyadisk filterbank
Endast den ena grenen (typiskt lågpassfiltrerade grenen) filtreras vidare. Ger en filterbank med
finare uppdelning på (lägre) frekvenser.
Tvådimensionella
signaler
Oftast använder man 2 filter (låg­ och högpassfilter), och delar upp signalen i fyra delar. Låg­låg,
Låg­hög, Hög­låg och Hög­hög. Vanligtvis fortsätter man bara att dela upp Låg­låg delen.
Högfrekvensdelarna kvantiseras ofta till 0 och det finns ett starkt samband mellan föregående
sampels vilket kan utnyttjas i kodningen. Om man använder dyadisk filterbank måste
bittilldelningen ta hänsyn till att de olika komponenterna har olika sampeltakt.
Kvantiseringsmodeller
Familj
Metodnamn
Beskrivning
Likformig kvantisering
Alla beslutsområden är lika stora. Generellt gäller att för varje extra bit som används för
kvantisering ger en SNR vinst på 6 dB.
Kompander
Kvantisera kompanderfunktionen c(x) istället för x. Detta är en likformig kvantisering. Mottagaren
använder en expanderfunktion c­1(x) för att rekonstruera värdet. Funktionerna välj så att
kvantiseringen blir finar för små värden på x.
Vektorkvantisering
Utnyttja korrelationen mellan närliggande sampel genom att skapa vektorer av tex ett sampel och
föregående sampel. Mängden rekonstruktionspunkter kallas för kodbok. Tree­Structured Vector Placera rekonstruktionsvektorerna som löv i ett binärt träd. Varje inre nod lagrar två testvektorer.
Quantization (TSVQ) Vid kvantisering, starta i roten och jämför vilken testvektor som är närmast värdet, och fortsätt ner i
trädet tills en en rekonstruktionspunkt nås (löv). Snabb sökning, men ingen garanti att den
kvantisering som ger minst distortion väljs.
Gain­shape VQ
En vektor kvanisteras som ett längd (gain) värde och ett normerad vektormodell (shape). Lägre
komplexitet men högre distortion.
Multistage VQ
Istället för att använda en L­dimensionell kvantiserare med datatakt R, används k stycken L­
dimensionella kvantiserare som tillsammans har datatak R. Man kvantiserar vektor med den första
kvantiseraren, och därefter kvantiseringsfelet med nästa kvantiserare, osv. Lägre komplexitet men
högre distortion.
Lattice VQ
Använder ett likformigt gitter. Behöver bara skicka hur mönstret ser ut inte alla
rekonstruktionspunkter. Bättre prestanda än en skalär kvantiserare men sämre än en generell.
Lloyd­Max
Skalär
En algoritm för att hitta den kvantisering som minimerar distortionen.
1. Börja med en startuppsättning rekonstruktionspunkter.
2. Beräkna optimala beslutsgränser
3. Beräkna distortionen.
4. Om skillnaden mellan föregående steg mindre än  ­> vi är färdiga, annars forsätt.
5. Beräkna nya optimala rekonstruktionspunkter och gå till 3.
Flera dimensioner
Lloyd­Max algoritmen kan generaliseras till flera dimensioner. I 2 dimensioner hittar den optimala
beslutsgränser som är centroider kring sannolikhetstyngdpunkter.
LBG eller K­means
Istället för att bygga upp täthetsfunktion från träningsdata används träningsdata direkt i algoritmen.
Startkodboken väljs antingen genom att genera flera slumpmässiga och välja den bästa, M stycken
slumpmässiga vektorer, eller Pairwise Nearest Neighbour (starta med träningsvektorer som
beslutsgränser och slå ihop de vektorer som ligger närmast tills M vektorer återstår).