CRC校验

一、什么是CRC校验
       CRC即循环荣誉校验码(Cyclic Redundancy Check):是数据通讯领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

CRC的基本原理:

       在K位信息码后拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式

G(X)。根据G(X)可以生成K位信息的校验码,而G(X)叫做这个CRC码的生成多项式。校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(X)左移R位(可表示

成C(X)*2R),这样C(X)的右边就会空出R位,这就是校验码的位置。用C(X)*2R除以生成多项式G(X)得到的余数就是校验码


二、基本原理:

        任意一个由二进制位串组成的代码都可以和一个系数仅为”0”和”1”取值的多项式一一对应。例如:代码111010对应的多项式为X^5+X^4+X^3+X,多项式X^4+X+1对应的代码

为10011。

       若设码字长度为N,信息字段为K位,校验码段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得

                                                                                  V(x)=A(x)g(x)=x……x^Rm(x)+r(x);

其中m(x)为K次原始的信息多项式,r(x)为R-1次校验多项式(即CRC校验和),g(x)称为生成多项式:

                                                                      g(x)=g0+g1*1+g2*2+......g(R-1)*(R-1)+gR*R

发送方通过指定的g(x)产生CRC码字,接收方通过g(x)来校验收到的CRC码字。

三、生成方式
        借助于多项式除法,其余数为校验字段。

例如:信息字段代码为:1011001;对应

                                                                      m(x)=x^6+x^4+x^3+1

假设生成多项式为:g(x)=x^4+x^3+1;则对应g(x)的代码为11001;

                                                               X^4m(x)=x^10+x^8+x^7+x^4
对应的代码记为10110010000;

采用多项式除法:得余数为1010(即校验字段为:1010)

发送方:发出的传输字段为:10110011010信息字段校验字段

接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)

如果能够除尽,则正确。

下面是余数(1010)的计算步骤:

出发没有数学上的含义,而是采用计算机的模二除法,即,除数和被除数做异或运算。进行异或运算时除数和被除数最高位对齐,按位异或。

10110010000

^11001

01111010000
1111010000
^11001

0011110000
11110000
^11001

00111000
111000
^11001

001010
       则四位CRC监督码就位:1010。

四、算法介绍:
        设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于K;生成多项式为G(x),G(x)的最高幂次等于r;CRC的信息多项式为T(x).

发送方编码方式:将P(x)乘以xr(即对应的二进制码序列左移r位),再乘以G(x),所得余式即为R(x)。用公式表示为T(x)=xrP(x)+R(x)

接收方的解码方式:将T(x)除以G(x),得到一个数,如果这个余数为0,则说明传输中无错误发生,否则说明传输有误。

举例说明:设信息编码为1100,则生成多项式为1011,即P(x)=X^3+X+1,计算CRC的过程为

                                                                         XrP(x)=X^3(X^3+X^2)=X^6+X^5G(x)=X^3+X+1

即R(x)=x.注意到G(x)最高幂次r=3,得出CRC为010。

发布了53 篇原创文章 · 获赞 3 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章