Un código exponencial-Golomb (o simplemente código Exp-Golomb ) es un tipo de código universal . Para codificar cualquier entero no negativo x usando el código exp-Golomb:
- Escribe x + 1 en binario.
- Cuenta los bits escritos, réstales uno y escribe esa cantidad de bits cero iniciales antes de la cadena de bits anterior.
Los primeros valores del código son:
0 ⇒ 1 ⇒ 1 1 ⇒ 10 ⇒ 010 2 ⇒ 11 ⇒ 011 3 ⇒ 100 ⇒ 00100 4 ⇒ 101 ⇒ 00101 5 ⇒ 110 ⇒ 00110 6 ⇒ 111 ⇒ 00111 7 ⇒ 1000 ⇒ 0001000 8 ⇒ 1001 ⇒ 0001001 ... [ 1 ]
En los ejemplos anteriores, consideremos el caso 3. Para 3, x+1 = 3 + 1 = 4. 4 en binario es '100'. '100' tiene 3 bits, y 3-1 = 2. Por lo tanto, agregamos 2 ceros antes de '100', lo que da como resultado '00100'.
De forma similar, consideremos el 8. '8 + 1' en binario es '1001'. '1001' tiene 4 bits, y 4-1 es 3. Por lo tanto, agregamos 3 ceros antes de 1001, lo que da como resultado '0001001'.
Esto es idéntico al código gamma de Elias de x +1, lo que le permite codificar 0. [ 2 ]
Extensión a números negativos
La codificación Exp-Golomb se utiliza en los estándares de compresión de vídeo H.264/MPEG-4 AVC y H.265 High Efficiency Video Coding , en los que también existe una variación para la codificación de números con signo asignando el valor 0 a la palabra clave binaria '0' y asignando palabras clave subsiguientes a valores de entrada de magnitud creciente (y signo alterno, si el campo puede contener un número negativo):
0 ⇒ 0 ⇒ 1 ⇒ 1 1 ⇒ 1 ⇒ 10 ⇒ 010 −1 ⇒ 2 ⇒ 11 ⇒ 011 2 ⇒ 3 ⇒ 100 ⇒ 00100 −2 ⇒ 4 ⇒ 101 ⇒ 00101 3 ⇒ 5 ⇒ 110 ⇒ 00110 −3 ⇒ 6 ⇒ 111 ⇒ 00111 4 ⇒ 7 ⇒ 1000 ⇒ 0001000 −4 ⇒ 8 ⇒ 1001 ⇒ 0001001 ... [ 1 ]
En otras palabras, un entero no positivo x ≤0 se asigna a un entero par −2 x , mientras que un entero positivo x > 0 se asigna a un entero impar 2 x −1.
La codificación Exp-Golomb también se utiliza en el códec de vídeo Dirac . [ 3 ]
Generalización al orden k
Para codificar números más grandes en menos bits (a costa de usar más bits para codificar números más pequeños), esto se puede generalizar usando un parámetro entero no negativo k . Para codificar un entero no negativo x en un código exp-Golomb de orden k :
- Codifique ⌊ x /2 k ⌋ usando el código exp-Golomb de orden 0 descrito anteriormente, luego
- Codificar x mod 2 k en binario con k bits
Una forma equivalente de expresar esto es:
- Codifique x +2 k −1 usando el código exp-Golomb de orden 0 (es decir, codifique x +2 k usando el código gamma de Elias), luego
- Elimine k bits cero iniciales del resultado de la codificación.
Véase también
Referencias
- 1 2 Richardson, Iain (2010). El estándar avanzado de compresión de vídeo H.264 . Wiley. págs. 208, 221. ISBN 978-0-470-51692-8.
- ↑ Rupp, Markus (2009). Transmisiones de vídeo y multimedia sobre redes celulares: análisis, modelado y optimización en redes móviles 3G en funcionamiento . Wiley. pág. 149. ISBN 9780470747766.
- ↑ "Especificación de Dirac" (PDF) . BBC. Archivado del original el 3 de mayo de 2015. Consultado el 9 de marzo de 2011 .
- Codificación de entropía
- Sistemas numéricos
- Compresión de datos