CRC循环冗余校验码原理解析(附实例)

1.CRC简介

CRC循环冗余校验码是数据通信中的一种查错校验码。

2.CRC原理

CRC 算法的基本思想是将传输的数据[M(X)] 当做一个位数很长的数。将这个数除以另一个数[G(X)] ,得到的余数[R(X)] 作为校验数据附加到原数据后面,组成循环校验码。

M(X)代表待编码的有效信息
G(X)代表约定好的多项式
R(X)代表代表检验位

由于,CRC的结构 = 信息位(N位) + 校验位(K位)

所以,CRC编码 = M(X) + R(X)

3.CRC编码方法

  • 把待编码的N位有效信息位表示为多项式M(X)

  • 把M(X)左移K位,得到M(X)*X^K,这样就空出了K位,以便拼接K位余数,这里的K位是由多项式G(X)的最高位决定的

  • 选取一个生成多项式G(x),对M(X)*X^K模二除 (多项式G(X)一般会直接给你,模二除看下面例子,实质是异或运算),以下是运算公式

    ( M(X) * X^K ) / G(X) = Q(X) + R(X) / G(X)

    这里的Q(X)是商,它本身不重要,这里最重要的是求出余数R(X)

  • 将信息位M(X)与余数R(X)拼接起来,构成CRC循环冗余校验码

    CRC编码 = M(X) + R(X)

4.举个栗子

题目:选择产生多项式位1011,把4位有效信息1100编成CRC码

  • M(X) = X^3 + X^2 = 1100

  • M(X) * X^3 = X^6 + X^5 = 1100000 (这里多项式最高位位3,左移3位

  • G(X) = X^3 +X +1 = 1011

  • ( M(X) * X^K ) / G(X) = 1100000 / 1011 = 1110 + 010 / 1011 (关键,这里进行模二运算,实质上是异或运算,求R(X))
    《CRC循环冗余校验码原理解析(附实例)》 经运算,此时确定R(X)为 010

  • 此时得出CRC编码 = M(X) + R(X) = 1100010

5.CRC编码的校验

校验原理:将得到的CRC码用约定的G(X)去除,余数为0,结果正确 ,某一位出错,则余数不为0

纠错的话,与G(X)的选择有关系,这方面比较深,考研大纲不考察纠错这块的知识点

    原文作者:Ragty_
    原文地址: https://blog.csdn.net/huoji555/article/details/103257371
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞