> rice | adaptiv | komprimering <
// Rice-kodning – Adaptiv heltalskomprimering med justerbar parameter
>> funktioner
Justerbar parameter
Justera k för att optimera olika datadistributioner.
Geometriska data
Optimalt för data med geometrisk eller exponentiell fördelning.
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
| n | q | r | k=2 |
|---|---|---|---|
| 0 | 0 | 00 | 000 |
| 1 | 0 | 01 | 001 |
| 2 | 0 | 10 | 010 |
| 3 | 0 | 11 | 011 |
| 4 | 1 | 00 | 1000 |
| 5 | 1 | 01 | 1001 |
| 6 | 1 | 10 | 1010 |
| 7 | 1 | 11 | 1011 |
| 8 | 2 | 00 | 11000 |
// 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).