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
^1100101111010000
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。