// Exponential-Golomb – standardowy kod o zmiennej długości w kompresji wideo
Używany w kodekach H.264/AVC i H.265/HEVC.
Różne wartości k dla różnych rozkładów.
Wbudowane odwzorowanie liczb całkowitych ze znakiem.
Kody Exp-Golomb rzędu k kodują nieujemną liczbę całkowitą n w następujący sposób: 1) Dodaj 1 do n, aby otrzymać codeNum, 2) Podziel przez 2^k, aby otrzymać iloraz q i resztę r, 3) Zapisz q zer, następnie 1, a potem r w k bitach. Dla k=0 jest to równoważne z kodem Eliasa Gamma. Dla liczb ze znakiem mapowanie jest następujące: n>0 → 2n-1, n≤0 → -2n.
Rząd k=0 (standard): 0 → 1 1 → 010 2 → 011 3 → 00100 Rząd k=1: 0 → 10 1 → 11 2 → 010 3 → 011 Tryb ze znakiem (k=0): 0 → 1 (mapuje na 0) 1 → 010 (mapuje na 1) -1 → 011 (mapuje na 2) 2 → 00100 (mapuje na 3)
Exponential-Golomb to uniwersalny kod o zmiennej długości szeroko stosowany w standardach kompresji wideo, takich jak H.264 i H.265. Uogólnia kod Eliasa Gamma z parametrem k, który pozwala dostosować się do różnych rozkładów danych.
k=0 (standardowy Exp-Golomb) sprawdza się dla małych liczb całkowitych o rozkładzie zbliżonym do wykładniczego. Większe wartości k są lepsze dla większych liczb lub bardziej równomiernych rozkładów. Kodeki wideo często używają k=0 dla elementów składni i adaptacyjnego k dla reszt.
Exp-Golomb jest idealny do wideo, ponieważ: 1) jest prosty do implementacji w sprzęcie, 2) nie wymaga tablic wyszukiwania, 3) dobrze odpowiada statystycznemu rozkładowi danych wideo, 4) zapewnia dobrą kompresję dla wektorów ruchu i współczynników transformaty.
W porównaniu z Huffmanem: prostszy, bez tablic, ale mniej optymalny. W porównaniu z kodowaniem arytmetycznym: znacznie prostszy, lecz o mniejszym stopniu kompresji. Exp-Golomb stanowi kompromis między prostotą a efektywnością, idealny do kodowania wideo w czasie rzeczywistym.