26.1 Codificador

  1. Inicialización de los contextos de predicción:
    1. Sea Q el contexto actual. LOCO-I considera un máximo de 1094 contextos distintos.
    2. Sea N[Q] el número de ocurrencias de cada contexto. Inicialmente N[Q] 0 Q.
    3. Sea B[Q] el error de predicción acumulado en cada contexto. Inicialmente B[Q] 0 Q.
    4. Sea A[Q] la suma de los valores absolutos de los errores de predicción para cada contexto. Inicialmente A[Q] 0 Q.
    5. Sea C[Q] los valores de cancelación del bias. El bias es un valor que sumado a la predicción espacial provoca que su media sea 0. Inicialmente C[Q] 0 Q.
  2. Determinación del contexto de predicción Q:
    1. Calcular el gradiente local. Para ello se efectúan las 4 diferencias (ver la siguiente figura):

      PIC

      g1 ←   d - a
g2 ←   a - c
g3 ←   c- b
g4 ←   b- e

    2. Cuantificar los gradientes según:
          (|  0  si gi = 0
    |||{  1  si 1 ≤ |gi| ≤ 2
qi ←   2  si 3 ≤ |gi| ≤ 6
    |||  3  si 7 ≤ |gi| ≤ 14
    |(  4  en otro caso

      para i = 1,2,3 y

          (
    {  0  si |g4| < 0
q4 ←    1  si 5 ≤ g4
    (  2  en otro caso.

  3. Cálculo del error de predicción M(e):
    1. Construir la predicción inicial:
          ({  min(a,b)  si c ≥ max(a,b)
sˆ←    max (a,b)  si c ≤ min(a,b)
    (  a+ b - c  en otro caso.

    2. Cancelar el bias:
          { ˆs +C [Q ] si g1 > 0
ˆs ←   ˆs - C [Q ] en otro caso.

    3. Calcular el error de predicción:
      e ← (s- ˆs) mod β,

      donde β es el número de bits por punto. Esto provoca que el error de predicción sea proyectado desde el intervalo [-α + 1- 1] al intervalo [-α∕2,α∕2 - 1] donde α = 2β es el tama no del alfabeto.

    4. Barajar los errores de predicción negativos y positivos generando una distribución de probabilidades que es decreciente con el índice del error. Esto se realiza según el siguiente mapeo:
             {
M (e) ←    2e       si e ≥ 0
          2|e|- 1  en otro caso.

      Tras dicho mapeo, los errores de predicción se ordenan según: 0, -1, +1, -2, +2, ⋅⋅⋅,2β - 1.

  4. Codificación entrópica de M(e) en el contexto Q:
    1. Se emite un código de Rice que codifica el símbolo M(e) para k = log 2(A[Q]).
  5. Actualización del contexto Q:
    1. B[Q] B[Q] + e.
    2. A[Q] A[Q] + |e|.
    3. Si N[Q] = RESET, entonces: (donde 64 RESET 256)
      1. A[Q] A[Q]2.
      2. B[Q] B[Q]2.
      3. H[Q] N[Q]2.
    4. N[Q] N[Q] + 1.
    5. La actualización del valor para la cancelación del bias es algo más compleja. Si el error de predicción inicial en el contexto Q no tiene media 0, el nivel de compresión decae severamente porque las medias de la distribución de Laplace real y la modelada no coinciden. Para evitar esto, C[Q] almacena un valor proporcional a B[Q]∕N[Q] que es sumado a la predicción inicial para cancelar el bias.

      Además, C[Q] es el encargado de solucionar otro problema derivado del barajamiento producido por M(e) debido al cual, se tiende a asignar un código más corto al error negativo que al respectivo error positivo.

      Con todo esto, el algoritmo para la actualización de C[Q] es el siguiente [12]:

      1. Si B[A] ≤-N[Q], entonces:
        1. B[Q] B[Q] + N[Q].
        2. Si C[Q] > -128, entonces:
          • C[Q] C[Q] - 1.
        3. Si B[Q] ≤-N[Q], entonces:
          • B[Q] ←-N[Q] + 1.
      2. Si no:
        1. Si B[Q] > 0, entonces:
          • B[Q] B[Q] - N[Q].
          • Si C[Q] < 127, entonces:
            • C[Q] C[Q] + 1.
          • Si B[Q] > 0, entonces:
            • B[Q] 0.