Codificación Golomb


La codificación Golomb es un método de compresión de datos sin pérdidas que utiliza una familia de códigos de compresión de datos inventados por Solomon W. Golomb en la década de 1960. Los alfabetos que siguen una distribución geométrica tendrán un código Golomb como código de prefijo óptimo , [1] lo que hace que la codificación Golomb sea muy adecuada para situaciones en las que la aparición de valores pequeños en el flujo de entrada es significativamente más probable que la de valores grandes.

La codificación Rice (inventada por Robert F. Rice ) denota el uso de un subconjunto de la familia de códigos Golomb para producir un código de prefijo más simple (pero posiblemente subóptimo). Rice usó este conjunto de códigos en un esquema de codificación adaptable ; "Codificación de arroz" puede referirse a ese esquema adaptativo o al uso de ese subconjunto de códigos Golomb. Mientras que un código Golomb tiene un parámetro ajustable que puede ser cualquier valor entero positivo, los códigos Rice son aquellos en los que el parámetro ajustable es una potencia de dos. Esto hace que los códigos de Rice sean convenientes para usar en una computadora, ya que la multiplicación y la división por 2 se pueden implementar de manera más eficiente en la aritmética binaria .

Rice se sintió motivado a proponer este subconjunto más simple debido al hecho de que las distribuciones geométricas a menudo varían con el tiempo, no se conocen con precisión, o ambas cosas, por lo que seleccionar el código aparentemente óptimo podría no ser muy ventajoso.

La codificación Rice se utiliza como etapa de codificación de entropía en una serie de métodos de compresión de datos de audio y compresión de imágenes sin pérdidas.

La codificación de Golomb utiliza un parámetro ajustable M para dividir un valor de entrada x en dos partes: q , el resultado de una división por M , y r , el resto. El cociente se envía en codificación unaria , seguido del resto en codificación binaria truncada . Cuando , la codificación Golomb es equivalente a la codificación unaria.

Los códigos Golomb-Rice se pueden considerar como códigos que indican un número por la posición del contenedor ( q ) y el desplazamiento dentro del contenedor ( r ). La figura de ejemplo muestra la posición q y el desplazamiento r para la codificación del entero x utilizando el parámetro de Golomb-Rice M = 3 , con probabilidades de origen que siguen una distribución geométrica con p (0) = 0,2 .


Ejemplo de codificación Golomb para una fuente x con distribución geométrica, con parámetro p (0) = 0.2 , usando código Golomb con M = 3 . El código de 2 bits 00 se usa el 20% del tiempo; los códigos de 3 bits 010, 011 y 100 se utilizan más del 38% del tiempo; Se necesitan 4 bits o más en una minoría de casos. Para esta fuente, entropía = 3.610 bits; para este código con esta fuente, rate = 3.639 bits; por lo tanto, redundancia = 0,030 bits o eficiencia = 0,992 bits por bit.
Esta imagen muestra la redundancia, en bits, del código Golomb, cuando M se elige de forma óptima, para 1 − p (0) ≥ 0,45
Relaciones de compresión del experimento del algoritmo de Rice codificado en Golomb