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 j1i 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).