Comprobación CRC (1): principio CRC, ejemplo de cálculo y selección del polinomio óptimo

CRC( Cyclic Redundancy Check), es decir, verificación de redundancia cíclica, genera un código de verificación de longitud fija por cálculo para verificar si los datos son incorrectos o están dañados durante la transmisión, lo que garantiza la integridad de los datos. zSupongamos que queremos enviar letras minúsculas . En Unicode, representado zpor números 0x7A, binario es 0111 1010. Para que el receptor verifique que los datos no han sido modificados durante la transmisión, calculamos el CRC de los datos 1000y lo agregamos a nuestro mensaje: 0111 1010 1000. Esta suma de verificación 1000se llama redundante porque se agrega a los datos originales.

1 cálculo CRC

1.1 Polinomios

Matemáticamente, el CRC es polynomialel resto de la división del polinomio módulo dos ( ) de los datos. Por lo tanto, el CRC se puede escribir como

CRC = data % 2 polynomial

El polinomio puede ser cualquier polinomio matemático (sin ningún coeficiente), pero su exponente más alto no puede exceder el número de bits CRC. Por ejemplo, si queremos generar un CRC de 8 bits, entonces el exponente más alto del polinomio también debe ser 8, por ejemplo: x 8 + x 2 + x + 1 x^8+x^2+x+1X8+X2+X+1 . Y los polinomios se pueden convertir en representación binaria, de hecho es para ver si cada índice existe, si existe será 1, y si no existe será 0. Por ejemplox 8 + x 2 + x + 1 x^8+x^2+x+1X8+X2+X+1 convertido a binario como100000111.

  • Elegir un polinomio diferente dará como resultado diferentes CRC para los mismos datos. Entonces, el emisor y el receptor deben usar un polinomio común
  • Para CRC, algunos polinomios son más adecuados que otros según el escenario de uso específico. Por ejemplo, ciertos polinomios pueden ser más fáciles de detectar errores de bits consecutivos o errores de bits alternos.

Luego, para poder calcular el CRC, necesitamos entender la división módulo dos.

1.2 Cálculo de módulo dos divisiones y ejemplos

(1) Operación Módulo 2
La operación Módulo 2 es una operación bit a bit en números binarios. En esta operación, no hay acarreo ni préstamo, y cada bit se trata como un número independientemente de sus vecinos. De hecho, es la operación XOR en lenguaje C:

bit1 bit2 XOR
0 0 0
0 1 1
1 0 1
1 1 0

(2) División modular en dos
La ejecución de la división modular en dos es similar a la división aritmética, la única diferencia es que usamos la resta modular en dos (XOR) en lugar de la resta aritmética para calcular el resto en cada paso. Suponiendo que el dividendo es 100100, y el divisor es 1101, veamos cómo calcular el CRC:

  1. La longitud del divisor calculado Les 4 en este caso.
  2. Agregue un poco después del dividendo L-1, aquí hay 3, que también es la longitud del CRC. Nota: el bit más alto del divisor debe ser 1, el número adicional de bits corresponde al exponente más alto del binomio: x 3 + x 2 + 1 x^3+x^2+1X3+X2+1
  3. Calcula con módulo binario 2, y el resto obtenido es el resultado de CRC:001

inserte la descripción de la imagen aquí

1.3 Tipos de CRC

Los tipos de CRC se nombran por su tamaño de bit. Los comunes son: CRC-8, CRC-16, CRC-32, CRC-64 y CRC-1 (un caso especial del bit de paridad). Obviamente, para el mismo tipo, polinomios diferentes también tienen resultados diferentes. Por ejemplo, para el dividendo 01000001, sus resultados CRC-8 bajo diferentes polinomios son los siguientes:

polinomio binario CRC-8
110100111 11001100
100000111 11000000
101001001 01100110
111010101 01001000
  • GSM-BArriba está el polinomio CRC-8 estándar utilizado en diferentes aplicaciones como bluetooth,

2 Elección de polinomios

我们应该如何选择合适的CRC和相应的多项式?有三个方面需要考虑:随机错误检测精度、突发错误检测精度和冗余系数。
(1)随机错误检测精度
随机错误是指在数据中随机出现的错误。例如,在传输数据时,单个比特被翻转,或者在传输过程中丢失几个比特。根据我们使用的CRC的位大小,我们可以检测到大多数这些随机错误。然而,对于CRC-n来说,这些错误的 1 / 2 n 1/2^n 1/2n不能被检测到。下表显示了每种CRC类型未检测到错误的百分比:

CRC 不可检测错误 百分比%
CRC-8 1 / 2 8 1/2^8 1/28 0.39
CRC-16 1 / 2 16 1/2^{16} 1/216 0.0015
CRC-32 1 / 2 32 1/2^{32} 1/232 0.00000002
CRC-64 1 / 2 64 1/2^{64} 1/264 5.4 × 1 0 − 20 5.4×10^{-20} 5.4×1020

(2)突发错误检测精度
数据传输中的错误通常不是随机的,而是连续的出现几个位的错误,这种错误称为突发错误,它是数据通信中最常见的错误。
CRC-n可以检测最大长度为n位的单突发错误。然而,这在很大程度上取决于用于计算CRC的多项式。有些多项式能够检测到传输数据中的多个突发错误。

CRC 突发差错检测
CRC-8 至少出现一个连续的错误突发,但这个长度≤8位
CRC-16 至少出现一个连续的错误突发,但这个长度≤16位
CRC-32 至少出现一个连续的错误突发,但这个长度≤32位
CRC-64 至少出现一个连续的错误突发,但这个长度≤64位

(3) Coeficiente de redundancia
El costo de usar CRC para la detección de errores es aumentar los datos adicionales. Por ejemplo, CRC-32 transmite dos bytes adicionales más que CRC-16. Obviamente, un CRC con un menor número de bits requiere que se calculen y almacenen menos bits.

En base a estos tres factores, podemos decidir qué tipo de CRC elegir para nuestra aplicación. Sin embargo, el polinomio CRC también afecta la eficiencia y la calidad de la detección de errores. Si quieres estudiarlo en profundidad, será un tema muy complicado, y este artículo no lo estudiará. Afortunadamente, hay muchos polinomios estándar disponibles en línea para tipos de CRC específicos y, en la mayoría de los casos, usar uno de estos le brindará una buena detección de errores .

3 resumen

La verificación de CRC se usa a menudo en el proceso de hacer proyectos. Cuando estaba en la universidad, tenía una comprensión superficial de este proceso de cálculo, pero espero entender el principio, así que escribí este artículo, el siguiente, I La implementación de se introducirá el método de tabla de búsqueda de CRC32.

Supongo que te gusta

Origin blog.csdn.net/tilblackout/article/details/131195357
Recomendado
Clasificación