> rice | adaptive | compress <
// Rice-Codierung – Adaptive Ganzzahlkomprimierung mit einstellbarem Parameter
>> funktionen
Einstellbarer Parameter
Passe k an, um verschiedene Datenverteilungen optimal zu komprimieren.
Geometrische Daten
Optimal für Daten mit geometrischer oder exponentieller Verteilung.
Schnelles Codieren
Einfache Division- und Restoperationen für hohe Geschwindigkeit.
>> technische details
Wie Rice-Codierung funktioniert
Bei der Rice-Codierung wird jede Ganzzahl n durch 2^k geteilt, um Quotient q und Rest r zu erhalten. Der Quotient wird in Unary codiert (q Einsen gefolgt von einer Null) und der Rest in k Binärbits. So entsteht ein variabler Code, der sich über den Parameter k an die Datenverteilung anpasst.
Rice-Beispiel (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 Größeres k: weniger Unary-Bits, mehr Binärbits Kleineres k: mehr Unary-Bits, weniger Binärbits
Warum Rice-Codierung verwenden?
- Passt sich der Datenverteilung an
- Einfach zu implementieren
- Schnelles Codieren und Dekodieren
- Gut für Sensordaten
- Effizient für kleine Ganzzahlen
>> häufige fragen
Was ist Rice-Codierung?
Rice-Codierung ist ein Entropie-Codierverfahren mit variabler Länge, das besonders effizient für geometrische Verteilungen ist. Es ist ein Spezialfall der Golomb-Codierung, bei dem der Divisor M auf Potenzen von 2 (M = 2^k) beschränkt ist, was schnelle Implementierungen mit Bit-Operationen ermöglicht.
Wie wähle ich den k‑Parameter?
Der optimale k-Wert hängt von der Datenverteilung ab. Für Daten mit Mittelwert μ gilt näherungsweise k ≈ log₂(μ × ln(2)). Kleine k (0–2) funktionieren gut für sehr kleine Zahlen, größere k (4–8) für größere Werte. Nutze die Analysefunktion, um das optimale k für deine Daten zu finden.
Rice vs. Golomb-Codierung?
Rice-Codierung ist ein Spezialfall der Golomb-Codierung, bei dem M = 2^k gilt. Dadurch kann Rice-Codierung schneller sein (Bit-Shift statt Division), ist aber eventuell etwas weniger optimal. Golomb kann beliebige M-Werte wählen, während Rice etwas Kompressionseffizienz gegen Geschwindigkeit tauscht.
Wo wird Rice-Codierung eingesetzt?
Rice-Codierung wird häufig in verlustfreier Audiokompression (FLAC, ALAC), Bildkompression (JPEG-LS) und Sensordaten mit geometrischer Verteilung eingesetzt. Besonders effektiv ist sie für kleine, nichtnegative Ganzzahlen mit exponentiell abnehmender Wahrscheinlichkeit.