首 页 行业资讯 新车 试驾评测 养车用车 车型库

循环冗余校验码CRC的问题

发布网友 发布时间:2022-04-22 06:18

我来回答

3个回答

热心网友 时间:2023-07-25 18:38

循环冗余码CRC(Cyclic Rendancy Code)又称多项式码.
任何一个由二进制数位串组成的代码,都可以惟一地与一个只含有0和1两个系数的多项式建立一一对应的关系.例如,代码1010111对应的多项式为X6+X4+X2+X+1,多项式X5+X3+X2+X+1对应的代码为10111.
CRC码在发送端编码和接收端检验时,都可以利用事先约定的生成多项式G(X)来得到.设G(X)中最高位X的次方为Xr,信息位为K(X);则CRC码=Xr乘以K(X)再除以G(X).
比如:信息位K(X)=X6+X4+X3+1既1011001,生成多项式G(X)=11001既X4+X3+1(可得Xr=X4)
则CRC码=X4* (X6+X4+X3+1)/(X4+X3+1)=X10+X8+X7+X4/(X4+X3+1)=10110010000/11001
得到的余数就是CRC码
注:以上除法用的是模2除法,是一种不考虑减法借位的运算.既0-0=0,0-1=1,1-0=1,1-1=0

—————————————————————————————
重新在网站做了图解,有疑问的话直接在网站留言吧http://www.infors.org/02.htm

参考资料:http://www.infors.org/02.htm

热心网友 时间:2023-07-25 18:38

楼上的例题的余数是1010,注意模二除法规则:不考虑减法借位,0-0=0,0-1=1,1-0=1,1-1=0

热心网友 时间:2023-07-25 18:38

借助于多项式除法,其余数为校验字段。
例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1
假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001
x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;
采用多项式除法: 得余数为: 1111 (即校验字段为:1111)
发送方:发出的传输字段为: 1 0 1 1 0 0 1 1111
信息字段 校验字段
接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)
如果能够除尽,则正确,
给出余数(1111)的计算步骤:
除法没有数学上的含义,而是采用计算机的模二除法,即,除数和被除数做异或运算
1011001
1100100
=111101
111101
110010
= 1111

CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。 它的编码规则是:
1、首先将原信息码(kbit)左移r位(k+r=n)
2、运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。
非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:
0+0=1+1=0,1+0=0+1=1
即‘异’则真,‘非异’则假。
由此得到定理:a+b+b=a 也就是‘模2减’和‘模2加’直值表完全相同。
有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。
例如: g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是:
对于g(x)=x4+x3+x2+1的解释:(都是从右往左数)x4就是第五位是1,因为没有x1所以第2位就是0。
11101 | 110,0000(设a=11101 ,b=1100000)
取b的前5位11000跟a异或得到101
101加上b没有取到的00得到10100
然后跟a异或得到01001
也就是余数1001
余数是1001,所以CRC码是110,1001
标准的CRC码是,CRC-CCITT和CRC-16,它们的生成多项式是:
CRC-CCITT=x^16+x^12+x^5+1
CRC-16=x^16+x^15+x^2+1

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com