> rice | adaptiv | komprimering <

// Rice-kodning – Adaptiv heltalskomprimering med justerbar parameter

0 tecken
0 tecken

>> funktioner

[ADAPTIV]

Justerbar parameter

Justera k för att optimera olika datadistributioner.

[EFFEKTIV]

Geometriska data

Optimalt för data med geometrisk eller exponentiell fördelning.

[ENKEL]

Snabb kodning

Enkla divisions- och restoperationer för hög prestanda.

>> teknisk information

Hur Rice-kodning fungerar:

Rice-kodning delar varje heltal n med 2^k för att få kvot q och rest r. Kvoten kodas unärt (q ettor följt av en nolla) och resten kodas i k binära bitar. Detta skapar en kod med variabel längd som anpassar sig till datadistributionen via k-parametern.

Exempel på Rice-kodning (k=2):

k=2, M=2^2=4

0 → q=0, r=0 → 0|00 → 000
1 → q=0, r=1 → 0|01 → 001
2 → q=0, r=2 → 0|10 → 010
3 → q=0, r=3 → 0|11 → 011
4 → q=1, r=0 → 10|00 → 1000
5 → q=1, r=1 → 10|01 → 1001
6 → q=1, r=2 → 10|10 → 1010
7 → q=1, r=3 → 10|11 → 1011
8 → q=2, r=0 → 110|00 → 11000

Större k: färre unära bitar, fler binära bitar
Mindre k: fler unära bitar, färre binära bitar

Varför använda Rice-kodning?:

  • ▸Anpassar sig till datadistributionen
  • ▸Enkel att implementera
  • ▸Snabb kodning och avkodning
  • ▸Bra för sensordata
  • ▸Effektiv för små heltal

>> vanliga frågor

Vad är Rice-kodning?

Rice-kodning är en entropikodningsmetod med variabel längd som är särskilt effektiv för geometriska fördelningar. Det är ett specialfall av Golomb-kodning där divisorn M begränsas till potenser av 2 (M = 2^k), vilket möjliggör snabba implementationer med bitoperationer.

Hur väljer jag k-parametern?

Det optimala k-värdet beror på datadistributionen. För data med medelvärde μ gäller ungefär k ≈ log₂(μ × ln(2)). Små k (0–2) fungerar bra för mycket små tal, medan större k (4–8) är bättre för data med större värden. Använd analysfunktionen för att hitta det optimala k för dina data.

Rice vs Golomb-kodning?

Rice-kodning är en undergrupp av Golomb-kodning där M = 2^k. Denna begränsning gör Rice snabbare (bitförskjutningar i stället för division) men ibland något mindre optimal. Golomb kan välja valfria M-värden för bättre komprimering, medan Rice byter lite effektivitet mot hastighet.

Var används Rice-kodning?

Rice-kodning används ofta i förlustfri ljudkomprimering (FLAC, ALAC), bildkomprimering (JPEG-LS) och sensordata med geometriska fördelningar. Den är särskilt effektiv för små icke-negativa heltal med exponentiellt avtagande sannolikhet.

// Genomgånget exempel

nqrk=2
0000000
1001001
2010010
3011011
41001000
51011001
61101010
71111011
820011000

// Kodexempel

Rice code with parameter k  (Golomb code with M = 2^k)
  q = n >> k            quotient, written as q ones followed by a zero
  r = n & (2^k - 1)     remainder, written as k plain bits
  code = unary(q) + r

k = 2, n = 9  ->  q = 2, r = 01  ->  110 01
Decode: count the leading 1s (q), skip the 0, read k bits (r), n = (q << k) | r
Choose k about log2(mean value): small values -> small k

>> Fler frågor

F: Vad skiljer Rice-kod från Golomb-kod?

S: Rice-kod är specialfallet av Golomb-kod där parametern M är en tvåpotens (M = 2^k). Bitskift och mask ersätter divisionen, vilket är mycket snabbt.

F: Hur väljer man parametern k?

S: k bör vara ungefär log2 av medelvärdet. För litet k ger långa unära följder, för stort k slösar bitar på resten. Kodekar som FLAC väljer k per block.

F: Vad passar Rice-kod för?

S: Icke-negativa heltal med geometrisk fördelning, där små värden är mycket vanligare. Typiskt prediktionsrester i förlustfritt ljud (FLAC) och bild (JPEG-LS).