coderen | decoderen | comprimeren

> rice | adaptief | compressie <

// Rice-codering – Adaptieve gehele-getalcompressie met instelbare parameter

0 tekens
0 tekens

>> functies

[ADAPTIEF]

Instelbare parameter

Stel k af om verschillende gegevensverdelingen te optimaliseren.

[EFFICIËNT]

Geometrische data

Optimaal voor data met een geometrische of exponentiële verdeling.

[EENVOUDIG]

Snelle codering

Eenvoudige deel- en restbewerkingen voor hoge snelheid.

>> technische info

Hoe Rice-codering werkt:

Bij Rice-codering wordt elk geheel getal n gedeeld door 2^k om quotiënt q en rest r te verkrijgen. Het quotiënt wordt in unair gecodeerd (q enen gevolgd door een nul) en de rest in k binaire bits. Dit levert een variabele code op die zich via de parameter k aanpast aan de gegevensverdeling.

Rice-coderingsvoorbeeld (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

Grotere k: minder unair-bits, meer binaire bits
Kleinere k: meer unair-bits, minder binaire bits

Waarom Rice-codering gebruiken?:

  • ▸Past zich aan de gegevensverdeling aan
  • ▸Eenvoudig te implementeren
  • ▸Snelle codering en decodering
  • ▸Geschikt voor sensordata
  • ▸Efficiënt voor kleine gehele getallen

>> veelgestelde vragen

Wat is Rice-codering?

Rice-codering is een entropiecodering met variabele lengte die bijzonder efficiënt is voor geometrische verdelingen. Het is een speciaal geval van Golomb-codering waarbij de deler M beperkt is tot machten van 2 (M = 2^k), wat snelle implementaties met bitbewerkingen mogelijk maakt.

Hoe kies ik de k-parameter?

De optimale k-waarde hangt af van de verdeling van je data. Voor gegevens met gemiddelde μ geldt ongeveer k ≈ log₂(μ × ln(2)). Kleine k (0–2) werken goed voor zeer kleine getallen, terwijl grotere k (4–8) beter zijn voor data met grotere waarden. Gebruik de analysefunctie om de optimale k voor je data te vinden.

Rice vs Golomb-codering?

Rice-codering is een subset van Golomb-codering waarbij M = 2^k. Deze beperking maakt Rice sneller (bitshifts in plaats van deling), maar soms iets minder optimaal. Golomb kan elke M-waarde kiezen voor betere compressie, terwijl Rice een beetje efficiëntie inruilt voor snelheid.

Waar wordt Rice-codering gebruikt?

Rice-codering wordt veel gebruikt bij verliesloze audiocompressie (FLAC, ALAC), beeldcompressie (JPEG-LS) en sensordata met geometrische verdelingen. Het is bijzonder effectief voor kleine niet-negatieve gehele getallen met een exponentieel afnemende waarschijnlijkheid.

// Uitgewerkt voorbeeld

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

// Codevoorbeelden

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

>> Meer vragen

V: Wat is het verschil tussen Rice- en Golomb-code?

A: De Rice-code is het speciale geval van de Golomb-code waarbij parameter M een macht van twee is (M = 2^k). Bitverschuiving en masker vervangen dan de deling, wat zeer snel is.

V: Hoe kies je parameter k?

A: k moet ongeveer log2 van het gemiddelde van de waarden zijn. Te kleine k geeft lange unaire reeksen, te grote k verspilt bits aan de rest. Codecs zoals FLAC kiezen k per blok.

V: Waarvoor is de Rice-code geschikt?

A: Voor niet-negatieve gehele getallen met geometrische verdeling, waarbij kleine waarden veel vaker voorkomen. Typisch voorspellingsresiduen in verliesvrije audio (FLAC) en beeld (JPEG-LS).