Articulo de referencia

Matemáticas de las comprobaciones de redundancia cíclica

La comprobación de redundancia cíclica (CRC) verifica el resto de la división en el anillo de polinomios sobre GF(2) (el cuerpo finito de los enteros módulo 2). Es decir, el con...

La comprobación de redundancia cíclica (CRC) verifica el resto de la división en el anillo de polinomios sobre GF(2) (el cuerpo finito de los enteros módulo 2). Es decir, el conjunto de polinomios donde cada coeficiente es cero o uno, y las operaciones aritméticas se repiten en círculo.

Cualquier cadena de bits puede interpretarse como los coeficientes de un polinomio de este tipo, y un mensaje tiene un CRC válido si es divisible por (es decir, es un múltiplo de) un polinomio generador acordado . Como ejemplo, el mensaje101100{\displaystyle 101100}se considera comoincógnita5+incógnita3+incógnita2{\displaystyle x^{5}+x^{3}+x^{2}}(que es divisible porincógnita2{\displaystyle x^{2}}(véase Aritmética polinomial módulo 2 más abajo para más detalles). Los CRC son convenientes y populares porque tienen buenas propiedades de detección de errores y un múltiplo de este tipo se puede construir fácilmente a partir de cualquier polinomio de mensaje.METRO(incógnita){\displaystyle M(x)}al agregar unnorte{\displaystyle n}polinomio de resto de -bitsR(incógnita){\displaystyle R(x)}producirW(incógnita)=METRO(incógnita)incógnitanorte+R(incógnita){\displaystyle W(x)=M(x)\cdot x^{n}+R(x)}, dóndenorte{\displaystyle n}es el grado del polinomio generador.

Aunque la separación deW(incógnita){\displaystyle W(x)}en la parte del mensajeMETRO(incógnita){\displaystyle M(x)}y la parte de la suma de comprobaciónR(incógnita){\displaystyle R(x)}es conveniente para el uso de CRC, las propiedades de detección de errores no hacen distinción; los errores se detectan por igual en cualquier lugar dentro deW(incógnita){\displaystyle W(x)}.

Formulación

En general, el cálculo de CRC corresponde a la división euclidiana de polinomios sobre GF(2):

METRO(incógnita)incógnitanorte=Q(incógnita)GRAMO(incógnita)+R(incógnita).{\displaystyle M(x)\cdot x^{n}=Q(x)\cdot G(x)+R(x).}

AquíMETRO(incógnita){\displaystyle M(x)}es el mensaje original polinomial yGRAMO(incógnita){\displaystyle G(x)}es el grado-norte{\displaystyle n}polinomio generador. Los bits deMETRO(incógnita)incógnitanorte{\displaystyle M(x)\cdot x^{n}}son el mensaje original connorte{\displaystyle n}ceros añadidos al final. La suma de verificación CRC se forma mediante los coeficientes del polinomio restante.R(incógnita){\displaystyle R(x)}cuyo grado es estrictamente menor quenorte{\displaystyle n}por las propiedades de la división euclidiana. El polinomio cocienteQ(incógnita){\displaystyle Q(x)}no tiene interés. Usando la operación módulo , se puede afirmar que

R(incógnita)=METRO(incógnita)incógnitanortemodGRAMO(incógnita).{\displaystyle R(x)=M(x)\cdot x^{n}\,{\bmod {\,}}G(x).}

En la comunicación, el remitente adjunta elnorte{\displaystyle n}bits de R después de los bits del mensaje original de M, lo que equivale a enviarW(incógnita)=METRO(incógnita)incógnitanorte+R(incógnita){\displaystyle W(x)=M(x)\cdot x^{n}+R(x)}(la palabra clave ). Esta equivalencia se puede ver porque sabemos queR(incógnita){\displaystyle R(x)}tiene un grado estrictamente menor quenorte{\displaystyle n}y el mensaje binarioMETRO(incógnita)incógnitanorte{\displaystyle M(x)\cdot x^{n}}corresponde a es el mensaje original desplazado a la izquierdanorte{\displaystyle n}veces. Por lo tanto, se añade elnorte{\displaystyle n}bits de R (posiblemente con ceros iniciales) al mensaje simplemente sumando los polinomios. EscribiendoW(incógnita){\displaystyle W(x)}De esta manera se demuestra queW(incógnita)modGRAMO(incógnita)=0{\displaystyle W(x){\bmod {\,}}G(x)=0}como

METRO(incógnita)incógnitanorte=Q(incógnita)GRAMO(incógnita)+R(incógnita){\displaystyle M(x)\cdot x^{n}=Q(x)\cdot G(x)+R(x)}
{\displaystyle \Rightarrow }
METRO(incógnita)incógnitanorteR(incógnita)=Q(incógnita)GRAMO(incógnita){\displaystyle M(x)\cdot x^{n}-R(x)=Q(x)\cdot G(x)}
{\displaystyle \Rightarrow }porque en GF(2)1=1{\displaystyle -1=1}
W(incógnita)=METRO(incógnita)incógnitanorte+R(incógnita)=Q(incógnita)GRAMO(incógnita){\displaystyle W(x)=M(x)\cdot x^{n}+R(x)=Q(x)\cdot G(x)}

El receptor, sabiendoGRAMO(incógnita){\displaystyle G(x)}, divideW(incógnita){\displaystyle W(x)}porGRAMO(incógnita){\displaystyle G(x)}y comprueba que el resto sea cero. Si lo es, el receptor lo descarta.R(incógnita){\displaystyle R(x)}(el últimonorte{\displaystyle n}bits) y asume los bits del mensaje recibidoMETRO(incógnita){\displaystyle M(x)}son correctas.

Las implementaciones de software a veces separan el mensaje en sus partes y comparan el recibido.R(incógnita){\displaystyle R(x)}a un valor reconstruido a partir del mensaje recibido, pero las implementaciones de hardware invariablemente encuentran que la división de longitud completa descrita anteriormente es más simple.

En la práctica, los cálculos CRC se asemejan mucho a la división larga en binario, excepto que las restas involucradas no toman prestados dígitos más significativos y, por lo tanto, se convierten en operaciones "o" exclusivas .

Un CRC es una suma de verificación en un sentido matemático estricto, ya que puede expresarse como la suma ponderada módulo 2 de síndromes por bit , pero esa palabra generalmente se reserva más específicamente para sumas calculadas utilizando módulos más grandes, como 10, 256 o 65535.

Los CRC también pueden utilizarse como parte de códigos de corrección de errores , que permiten no solo la detección de errores de transmisión, sino también la reconstrucción del mensaje correcto. Estos códigos se basan en principios matemáticos muy similares.

Aritmética de polinomios módulo 2

Dado que los coeficientes están restringidos a un solo bit, cualquier operación matemática sobre polinomios CRC debe asignar los coeficientes del resultado a cero o a uno. Por ejemplo, además:

(incógnita3+incógnita)+(incógnita+1)=incógnita3+2incógnita+1incógnita3+1(mod2).{\displaystyle (x^{3}+x)+(x+1)=x^{3}+2x+1\equiv x^{3}+1{\pmod {2}}.}

Tenga en cuenta que2incógnita{\displaystyle 2x}es equivalente a cero en la ecuación anterior porque la suma de coeficientes se realiza módulo 2:

2incógnita=incógnita+incógnita=incógnita×(1+1)incógnita×0=0(mod2).{\displaystyle 2x=x+x=x\times (1+1)\equiv x\times 0=0{\pmod {2}}.}

La suma de polinomios módulo 2 es lo mismo que la operación XOR a nivel de bits . Dado que XOR es la inversa de sí misma, la resta de polinomios módulo 2 también es lo mismo que la operación XOR a nivel de bits.

La multiplicación es similar (un producto sin acarreo ):

(incógnita2+incógnita)(incógnita+1)=incógnita3+2incógnita2+incógnitaincógnita3+incógnita(mod2).{\displaystyle (x^{2}+x)(x+1)=x^{3}+2x^{2}+x\equiv x^{3}+x{\pmod {2}}.}

También podemos dividir polinomios módulo 2 y hallar el cociente y el resto. Por ejemplo, supongamos que estamos dividiendoincógnita3+incógnita2+incógnita{\displaystyle x^{3}+x^{2}+x}porincógnita+1{\displaystyle x+1}Descubriríamos que

incógnita3+incógnita2+incógnitaincógnita+1=(incógnita2+1)1incógnita+1.{\displaystyle {\frac {x^{3}+x^{2}+x}{x+1}}=(x^{2}+1)-{\frac {1}{x+1}}.}

En otras palabras,

(incógnita3+incógnita2+incógnita)=(incógnita2+1)(incógnita+1)1(incógnita2+1)(incógnita+1)+1(mod2).{\displaystyle (x^{3}+x^{2}+x)=(x^{2}+1)(x+1)-1\equiv (x^{2}+1)(x+1)+1{\pmod {2}}.}

La división produce un cociente deincógnita2+1{\displaystyle x^{2}+1}con un resto de −1, que, al ser impar, tiene un último bit de 1.

En las ecuaciones anteriores,incógnita3+incógnita2+incógnita{\displaystyle x^{3}+x^{2}+x}representa los bits del mensaje original 111,incógnita+1{\displaystyle x+1}es el polinomio generador y el resto1{\displaystyle 1}(equivalentemente,incógnita0{\displaystyle x^{0}}) es el CRC. El grado del polinomio generador es 1, por lo que primero multiplicamos el mensaje porincógnita1{\displaystyle x^{1}}Llegarincógnita3+incógnita2+incógnita{\displaystyle x^{3}+x^{2}+x}.

Variaciones

Existen varias variaciones estándar de CRC, cualquiera de las cuales puede usarse con cualquier polinomio CRC. Las variaciones de implementación, como el orden de bytes y la presentación del CRC, solo afectan la asignación de cadenas de bits a los coeficientes deMETRO(incógnita){\displaystyle M(x)}yR(incógnita){\displaystyle R(x)}y no afectan las propiedades del algoritmo.

  • El resto de la división no tiene por qué ser cero. Aunque todo el texto anterior está escrito en términos de divisibilidad por el polinomio generador, cualquier resto fijoS(incógnita){\displaystyle S(x)}puede utilizarse y tendrá el mismo rendimiento que un resto cero. Lo más común es el polinomio de todos unos.(incógnitanorte+1)/(incógnita+1){\displaystyle (x^{n}+1)/(x+1)}se utiliza, pero, por ejemplo, el campo de control de errores del encabezado del modo de transferencia asíncrono tiene un resto deincógnita6+incógnita4+incógnita2+1.{\displaystyle x^{6}+x^{4}+x^{2}+1.} La única complicación surge si el mismo hardware que genera el CRC al encontrarR(incógnita)=METRO(incógnita)incógnitanortemodGRAMO(incógnita)+S(incógnita){\displaystyle R(x)=M(x)\cdot x^{n}{\bmod {G}}(x)+S(x)}se utiliza para comprobar el CRC con una división de ancho completo deW(incógnita)incógnitanortemodGRAMO(incógnita).{\displaystyle W(x)\cdot x^{n}{\bmod {G}}(x).} Este último no producirá un resto de 0, ni deS(incógnita){\displaystyle S(x)}, pero deS(incógnita)incógnitanortemodGRAMO(incógnita).{\displaystyle S(x)\cdot x^{n}{\bmod {G}}(x).} Esto no dificulta la comprobación CRC; simplemente hay que conocer el patrón esperado.
  • La división larga puede comenzar con un resto distinto de cero. El resto generalmente se calcula utilizando unanorte{\displaystyle n}-registro de desplazamiento de bits que contiene el resto actual, mientras se suman los bits del mensaje y se realiza la reducción móduloGRAMO(incógnita){\displaystyle G(x)}Se realiza la división normal inicializa el registro de desplazamiento a cero, pero también puede inicializarse a un valor distinto de cero. (De nuevo, lo más común es que todos los valores sean unos, pero se puede usar cualquier patrón). Esto es equivalente a sumar (XOR) el patrón de inicialización con el primero.norte{\displaystyle n}fragmentos del mensaje antes de introducirlos en el algoritmo. La ecuación CRC se convierte en:METRO(incógnita)incógnitanorte+i=metrometro+norte1incógnitai=Q(incógnita)GRAMO(incógnita)+R(incógnita){\displaystyle M(x)\cdot x^{n}+\sum _{i=m}^{m+n-1}x^{i}=Q(x)\cdot G(x)+R(x)}, dóndemetro>grados(METRO(incógnita)){\displaystyle m>\deg(M(x))}es la longitud del mensaje en bits. El cambio que esto impone enR(incógnita){\displaystyle R(x)}es una función del polinomio generador y la longitud del mensaje,i=metrometro+norte1incógnitaimodGRAMO(incógnita){\displaystyle \sum _{i=m}^{m+n-1}x^{i}\,{\bmod {\,}}G(x)}.

Estas dos variaciones sirven para detectar bits cero añadidos al mensaje. Un bit cero precedente añade un coeficiente cero inicial aW(incógnita),{\displaystyle W(x),}que no cambia su valor y, por lo tanto, no cambia su divisibilidad por el polinomio generador. Al agregar un patrón fijo a los primeros bits de un mensaje, se pueden detectar esos bits cero adicionales.

Asimismo, el uso de un resto distinto de cero detecta los bits cero finales añadidos a un mensaje. Si un mensaje protegido por CRCW(incógnita){\displaystyle W(x)}tiene un bit cero añadido, el polinomio recibido esW(incógnita)incógnita.{\displaystyle W(x)\cdot x.} Si el primero es divisible por el polinomio generador, también lo es el segundo. Usando un resto distinto de ceroS(incógnita){\displaystyle S(x)}, agregar un bit cero dará como resultado un resto diferenteS(incógnita)incógnitamodGRAMO(incógnita){\displaystyle S(x)\cdot x{\bmod {G}}(x)}y, por lo tanto, se detectará el bit adicional.

En la práctica, estas dos variaciones se utilizan invariablemente juntas. Cambian el CRC transmitido, por lo que deben implementarse tanto en el transmisor como en el receptor. Ambos extremos deben preconfigurar sus circuitos de división a todos unos, el transmisor debe agregar el patrón de inversión final al resultado, y el receptor debe esperar este patrón al verificar el CRC. Si el receptor verifica el CRC mediante división de longitud completa, el resto porque el CRC de una palabra clave completa que ya incluye un CRC ya no es cero. En cambio, es un patrón fijo distinto de cero, el CRC del patrón de inversión denorte{\displaystyle n}unos.

Estas inversiones son extremadamente comunes, pero no se realizan universalmente, incluso en el caso de los polinomios CRC-32 o CRC-16-CCITT. Casi siempre se incluyen al enviar mensajes de longitud variable, pero a menudo se omiten al comunicar mensajes de longitud fija, ya que es menos probable que surja el problema de los bits cero añadidos.

Representaciones inversas y polinomios recíprocos

Representaciones polinómicas

Todos los polinomios generadores CRC prácticos tienen valores distintos de cero.incógnitanorte{\displaystyle x^{n}}yincógnita0{\displaystyle x^{0}}coeficientes. Es muy común convertir esto en una cadena denorte{\displaystyle n}bits binarios omitiendo elincógnitanorte{\displaystyle x^{n}}coeficiente.

Esta cadena de bits se puede convertir a un número binario utilizando una de dos convenciones:

  • La representación msbit-first tiene el coeficiente deincógnitanorte1{\displaystyle x^{n-1}}como el bit más significativo y el coeficiente deincógnita0{\displaystyle x^{0}}(que siempre es 1) como el bit menos significativo.
  • La representación lsbit-first tiene el coeficiente deincógnitanorte1{\displaystyle x^{n-1}}como el bit menos significativo y el coeficiente deincógnita0{\displaystyle x^{0}}(que siempre es 1) como el bit más significativo.

La forma msbit-first se suele denominar en la literatura como la representación normal , mientras que la forma lsbit-first se denomina representación invertida . Es esencial utilizar la forma correcta al implementar un CRC. Si el coeficiente deincógnitanorte1{\displaystyle x^{n-1}}Si resulta ser cero, las formas se pueden distinguir de un vistazo viendo en qué extremo está activado el bit.

Por ejemplo, el polinomio CCITT de grado 16 en las formas descritas (los bits dentro de los corchetes se incluyen en la representación de la palabra; los bits fuera son bits 1 implícitos; las barras verticales designan los límites de los nibbles ):

16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 coeficiente 1 [0 0 0 1 |0 0 0 0 |0 0 1 0 |0 0 0 1] Normal [ 1 | 0 | 2 | 1 ] Bocados de Normal 0x1021 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [1 0 0 0 |0 1 0 0 |0 0 0 0 |1 0 0 0] 1 Inverso [ 8 | 4 | 0 | 8 ] Mordiscos de reversa 0x8408 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 [0 0 0 0 |1 0 0 0 |0 0 0 1 |0 0 0 1] Recíproco [ 0 | 8 | 1 | 1 ] Bocados de reciprocidad 0x0811 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Recíproco inverso 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Koopman [1 0 0 0 |1 0 0 0 |0 0 0 1 |0 0 0 0] 1 [ 8 | 8 | 1 | 0 ] Bocadillos 0x8810

Todos los polinomios generadores CRC conocidos de gradonorte{\displaystyle n}tienen dos representaciones hexadecimales comunes. En ambos casos, el coeficiente deincógnitanorte{\displaystyle x^{n}}se omite y se entiende que es 1.

  • La representación con el bit más significativo primero es un número hexadecimal connorte{\displaystyle n}bits, cuyo bit menos significativo siempre es 1. El bit más significativo representa el coeficiente deincógnitanorte1{\displaystyle x^{n-1}}y el bit menos significativo representa el coeficiente deincógnita0{\displaystyle x^{0}}.
  • La representación lsbit-first es un número hexadecimal connorte{\displaystyle n}bits, cuyo bit más significativo siempre es 1. El bit más significativo representa el coeficiente deincógnita0{\displaystyle x^{0}}y el bit menos significativo representa el coeficiente deincógnitanorte1{\displaystyle x^{n-1}}.

La forma msbit-first se suele denominar en la literatura como la representación normal , mientras que la forma lsbit-first se denomina representación invertida . Es esencial utilizar la forma correcta al implementar un CRC. Si el coeficiente deincógnitanorte1{\displaystyle x^{n-1}}Si resulta ser cero, las formas se pueden distinguir de un vistazo viendo en qué extremo está activado el bit.

Para complicar aún más el asunto, el artículo de P. Koopman y T. Chakravarty [ 1 ] [ 2 ] convierte los polinomios generadores de CRC a números hexadecimales de otra manera: msbit-first, pero incluyendo elincógnitanorte{\displaystyle x^{n}}coeficiente y omitiendo elincógnita0{\displaystyle x^{0}}Coeficiente. Esta representación de Koopman tiene la ventaja de que el grado se puede determinar a partir de la forma hexadecimal y los coeficientes se leen fácilmente de izquierda a derecha. Sin embargo, no se utiliza en ningún otro lugar y no se recomienda debido al riesgo de confusión.

Polinomios recíprocos

Un polinomio recíproco se crea asignando elincógnitanorte{\displaystyle x^{n}}a través deincógnita0{\displaystyle x^{0}}coeficientes de un polinomio alincógnita0{\displaystyle x^{0}}a través deincógnitanorte{\displaystyle x^{n}}coeficientes de un nuevo polinomio. Es decir, el recíproco del gradonorte{\displaystyle n}polinomioGRAMO(incógnita){\displaystyle G(x)}esincógnitanorteGRAMO(incógnita1){\displaystyle x^{n}G(x^{-1})}.

La propiedad más interesante de los polinomios recíprocos, cuando se utilizan en CRC, es que tienen exactamente la misma capacidad de detección de errores que los polinomios de los que son recíprocos. El recíproco de un polinomio genera las mismas palabras clave , solo que con los bits invertidos ; es decir, si todos menos el primeronorte{\displaystyle n}Se toman bits de una palabra clave bajo el polinomio original, se invierten y se utilizan como un nuevo mensaje, el CRC de ese mensaje bajo el polinomio recíproco es igual al inverso del primero.norte{\displaystyle n}bits de la palabra clave original. Pero el polinomio recíproco no es el mismo que el polinomio original, y los CRC generados con él no son los mismos (incluso con inversión de bits del módulo) que los generados por el polinomio original.

fuerza de detección de errores

La capacidad de detección de errores de un CRC depende del grado de su polinomio generador y del polinomio generador específico utilizado. El "polinomio de error"mi(incógnita){\displaystyle E(x)}es la diferencia simétrica entre la palabra clave del mensaje recibido y la palabra clave del mensaje correcto. Un algoritmo CRC no detectará un error si y solo si el polinomio de error es divisible por el polinomio CRC.

  • Dado que un CRC se basa en la división, ningún polinomio puede detectar errores que consistan en una cadena de ceros antepuestos a los datos, o en la falta de ceros iniciales. Sin embargo, consulte la sección  Variaciones .
  • Todos los errores de un solo bit serán detectados por cualquier polinomio con al menos dos términos con coeficientes distintos de cero. El polinomio de error esincógnitak{\displaystyle x^{k}}, yincógnitak{\displaystyle x^{k}}es divisible solo por polinomiosincógnitai{\displaystyle x^{i}}dóndeik{\displaystyle i\leq k}.
  • Se detectarán todos los errores de dos bits separados por una distancia menor que el orden del polinomio primitivo que es un factor del polinomio generador . El polinomio de error en el caso de dos bits esmi(incógnita)=incógnitai+incógnitak=incógnitak(incógnitaik+1),i>k{\displaystyle E(x)=x^{i}+x^{k}=x^{k}\cdot (x^{i-k}+1),\;i>k}. Como se indicó anteriormente, elincógnitak{\displaystyle x^{k}}El término no será divisible por el polinomio CRC, lo que deja elincógnitaik+1{\displaystyle x^{i-k}+1}término. Por definición, el valor más pequeño deik{\displaystyle {i-k}}de tal manera que un polinomio divideincógnitaik+1{\displaystyle x^{i-k}+1}es el orden o exponente del polinomio . Los polinomios de mayor orden se denominan polinomios primitivos , y para polinomios de gradonorte{\displaystyle n}con coeficientes binarios, tienen orden2norte1{\displaystyle 2^{n}-1}.
  • Todos los errores en un número impar de bits serán detectados por un polinomio que es un múltiplo deincógnita+1{\displaystyle x+1}Esto es equivalente a que el polinomio tenga un número par de términos con coeficientes distintos de cero. Esta capacidad supone que el polinomio generador es el producto deincógnita+1{\displaystyle x+1}y un polinomio primitivo de gradonortei{\displaystyle n-i}ya que todos los polinomios primitivos exceptoincógnita+1{\displaystyle x+1}tienen un número impar de coeficientes distintos de cero.
  • Todos los errores de ráfaga de longitudnorte{\displaystyle n}será detectado por cualquier polinomio de gradonorte{\displaystyle n}o mayor que tenga un valor distinto de ceroincógnita0{\displaystyle x^{0}}término.

(Como nota al margen, nunca hay razón para usar un polinomio con ceroincógnita0{\displaystyle x^{0}}término. Recuerde que un CRC es el resto del polinomio del mensaje multiplicado porincógnitanorte{\displaystyle x^{n}}dividido por el polinomio CRC. Un polinomio con una raíz cuadrada.incógnita0{\displaystyle x^{0}}el término siempre tieneincógnita{\displaystyle x}como factor. Entonces, siK(incógnita){\displaystyle K(x)}es el polinomio CRC original yK(incógnita)=incógnitaK(incógnita){\displaystyle K(x)=x\cdot K'(x)}, entonces

METRO(incógnita)incógnitanorte1=Q(incógnita)K(incógnita)+R(incógnita){\displaystyle M(x)\cdot x^{n-1}=Q(x)\cdot K'(x)+R(x)}
METRO(incógnita)incógnitanorte=Q(incógnita)incógnitaK(incógnita)+incógnitaR(incógnita){\displaystyle M(x)\cdot x^{n}=Q(x)\cdot x\cdot K'(x)+x\cdot R(x)}
METRO(incógnita)incógnitanorte=Q(incógnita)K(incógnita)+incógnitaR(incógnita){\displaystyle M(x)\cdot x^{n}=Q(x)\cdot K(x)+x\cdot R(x)}

Es decir, el CRC de cualquier mensaje con elK(incógnita){\displaystyle K(x)}El polinomio es el mismo que el del mismo mensaje con elK(incógnita){\displaystyle K'(x)}polinomio con un cero añadido. Es simplemente un desperdicio de bits.

La combinación de estos factores significa que los buenos polinomios CRC suelen ser polinomios primitivos (que tienen la mejor detección de errores de 2 bits) o polinomios primitivos de gradonorte1{\displaystyle n-1}, multiplicado porincógnita+1{\displaystyle x+1}(que detecta todos los números impares de errores de bits y tiene la mitad de la capacidad de detección de errores de dos bits de un polinomio primitivo de gradonorte{\displaystyle n}). [ 1 ]

Filtros de bits

El análisis mediante filtros de bits [ 1 ] permite determinar de forma muy eficiente las propiedades de un polinomio generador dado. Los resultados son los siguientes:

  1. Todos los errores de ráfaga (excepto uno) con una longitud no mayor que el polinomio generador pueden ser detectados por cualquier polinomio generador.1++incógnitanorte{\displaystyle 1+\cdots +x^{n}}Esto incluye errores de 1 bit (ráfaga de longitud 1). La longitud máxima esnorte+1{\displaystyle n+1}, cuandonorte{\displaystyle n}es el grado del polinomio generador (que a su vez tiene una longitud denorte+1{\displaystyle n+1}). La excepción a este resultado es un patrón de bits idéntico al del polinomio generador.
  2. Todos los errores de bits impares son detectados por polinomios generadores con un número par de términos.
  3. Los errores de 2 bits en una distancia (múltiple) del filtro de bits más largo de paridad par a un polinomio generador no se detectan; todos los demás se detectan. Para grados hasta 32 hay un polinomio generador óptimo con ese grado y número par de términos; en este caso el período mencionado anteriormente es2norte11{\displaystyle 2^{n-1}-1}. Paranorte=16{\displaystyle n=16}Esto significa que los bloques de 32.767 bits de longitud no contienen errores de 2 bits no detectados. Para un número impar de términos en el polinomio generador puede haber un período de2norte1{\displaystyle 2^{n}-1}Sin embargo, estos polinomios generadores (con un número impar de términos) no detectan todos los errores impares, por lo que deben evitarse. En el enlace mencionado al inicio de esta sección se puede encontrar una lista de los generadores correspondientes con un número par de términos.
  4. Todos los errores de un solo bit dentro del período del filtro de bits mencionado anteriormente (para términos pares en el polinomio generador) pueden identificarse de forma única por su residuo. Por lo tanto, el método CRC puede utilizarse para corregir errores de un solo bit también (dentro de esos límites, por ejemplo, 32.767 bits con polinomios generadores óptimos de grado 16). Dado que todos los errores impares dejan un residuo impar, y todos los pares un residuo par, se pueden distinguir los errores de 1 bit y los de 2 bits. Sin embargo, al igual que otras técnicas SECDED , los CRC no siempre pueden distinguir entre errores de 1 bit y de 3 bits. Cuando se producen 3 o más errores de bit en un bloque, la corrección de errores de bit mediante CRC será errónea y producirá más errores.

Véase también

Referencias

  1. 1 2 3 Koopman, Philip (julio de 2002). "Códigos de redundancia cíclica de 32 bits para aplicaciones de Internet" (PDF) . Actas de la Conferencia Internacional sobre Sistemas y Redes Confiables . págs. 459–468 . CiteSeerX 10.1.1.11.8323 . doi : 10.1109/DSN.2002.1028931 . ISBN   978-0-7695-1597-7. S2CID 14775606 . Consultado el 14 de enero de 2011 . - Verificación de los resultados de Castagnoli mediante búsqueda exhaustiva y algunos nuevos polinomios de buena calidad.
  2. Koopman, Philip; Chakravarty, Tridib (junio de 2004). «Selección de polinomios de código de redundancia cíclica (CRC) para redes embebidas» (PDF) . Conferencia Internacional sobre Sistemas y Redes Confiables, 2004. págs. 145–154 . CiteSeerX 10.1.1.648.9080 . doi : 10.1109/DSN.2004.1311885 . ISBN   978-0-7695-2052-0. S2CID 793862 . Consultado el 14 de enero de 2011 . – Análisis de polinomios CRC cortos para aplicaciones embebidas

  • Koopman, Phil. "Blog: Checksum and CRC Central" .— enumera los polinomios CRC que dan las mejores distancias de Hamming .