¿Cuántos bits de verificación se requieren para una palabra de datos de 16 bits para detectar errores de 2 bits y corrección de errores de un solo bit utilizando el código de Hamming?

Para comenzar, revise los conceptos de Distancia mínima de Hamming y Hamming Bound ( Hamming Bound también se llama Sphere Packing Bound ).

Deje que la distancia mínima de Hamming se denote por d. La teoría establece que:

  • Como máximo, se pueden detectar (d – 1) errores.
  • Como máximo, los errores (d – 1) / 2 pueden corregirse

Por ejemplo, si d es igual a 3, entonces podemos detectar 2 errores y corregir 1 error. Entonces resulta que necesitamos una distancia mínima de Hamming de 3. Podemos usar fácilmente las relaciones anteriores para calcular la distancia mínima de Hamming si deseamos detectar / corregir un número diferente de bits.

Ahora, los códigos de Hamming (binarios) generalmente se representan usando la siguiente notación: (n, k, d). Aquí, n es el número de bits en la palabra de código, k es el número de bits de información / datos, y d es nuevamente la Distancia mínima de Hamming. El Hamming Bound para este código es una relación matemática entre n, k y d . El código puede existir si y solo si se cumple el Hamming Bound . La relación de Hamming Bound para un código (binario) se da de la siguiente manera:

[matemáticas] 2 ^ k \ leq \ frac {2 ^ n} {\ sum_ {i = 0} ^ {\ frac {d-1} {2}} {n \ elegir i}} [/ matemáticas]

Aquí [math] {n \ choose i} = \ frac {n!} {I! (Ni)!} [/ Math]

En esta expresión, sabemos que d es 3 yk es 16, por lo que podemos resolver la siguiente expresión para n:

[matemáticas] 2 ^ {16} \ leq \ frac {2 ^ n} {{n \ elegir 0} + {n \ elegir 1}} [/ matemáticas]

Si conectamos esto a MATLAB, encontramos que [math] n \ geq 21 [/ math]

Entonces podemos elegir n = 21, lo que significa que necesita n – k = 21 – 16 = 5 bits de verificación.

( Nota : Esto se escribe asumiendo solo un alfabeto binario. La relación de Hamming Bound se puede generalizar para un alfabeto q-ary)

El primer código de Hamming es el código 8/4 2ED / 1EC. Necesitaría 4 de estos para codificar 16 bits y no trataría con más de un error en ningún octeto. Para esto, necesitaría intercalar los datos. Usé este código en el primer sistema de comunicación inalámbrico portátil en los años 60. Su ventaja era que podía indexar en una tabla de 16 profundidades para codificar y corregir en una instrucción, importante ya que la CPU tenía un tiempo de ciclo de 20 microsegundos (!).

Hay un código 16/8 3ED / 2EC, pero es un código no lineal (olvido su nombre, pero lo investigué e implementé mientras estaba en JPL) y es el primero de una familia de códigos no lineales que tienen una densidad más alta que los códigos lineales de Hamming tienen. Como es 16/8, es fácil de implementar de manera eficiente en software en sistemas orientados a bytes o palabras.

El código lineal de tasa media más largo es el código Golay 24/12, que es un 4ED / 3EC que fue utilizado por JPL para comunicaciones spcaecraft hace más de 50 años. Posteriormente ha sido reemplazado por códigos más eficientes y más robustos.

El código de Hamming que proporcionaría 2EC es el código (31,26) que es más largo de lo necesario para su propósito.

La teoría de la codificación es bastante abstrusa. Obtenga una introducción elemental en

corrección de errores del código hamming