循环冗余校验码怎么算
循环冗余校验码的计算方法:
编码原理:
现假设有:有效信息:M;
除数G(生成多项式)有:M/G=Q+R/G;
此时,可选择R作为校验位,则MR即为校验码。
校验原理:(M-R)/G=Q+0/G
说明:以接收到的校验码除以约定的除数,若余数为0,则可认为接收到的数据是正确的。
例:有效信息1101,生成多项式样1011
循环校验码解:
有效信息1101(k=4),即M(x)=x3+x2+x0,生成多项式1011(r+1=4,即r=3);
即G(x)=x3+x1+x0,M(x)·x3=x6+x5+x3,即1101000(对1101左移三位);
M(x)·x3/G(x)=1101000/1011=1111+001/1011 即1010的CRC是:1101001 。
计算图文如下 :
CRC(Cyclic Redundancy Check)循环冗余校验码,是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,书上提到红军和蓝军通信联合进攻山下的敌军的例子,第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的问题还是不能解决,红军仍然不敢贸然行动。
循环冗余校验码怎么算?
循环冗余校验码的计算方法:
编码原理:
现假设有:有效信息:M;
除数G(生成多项式)有:M/G=Q+R/G;
此时,可选择R作为校验位,则MR即为校验码。
校验原理:(M-R)/G=Q+0/G
说明:以接收到的校验码除以约定的除数,若余数为0,则可认为接收到的数据是正确的。
例:有效信息1101,生成多项式样1011
循环校验码解:
有效信息1101(k=4),即M(x)=x3+x2+x0,生成多项式1011(r+1=4,即r=3);
即G(x)=x3+x1+x0,M(x)·x3=x6+x5+x3,即1101000(对1101左移三位);
M(x)·x3/G(x)=1101000/1011=1111+001/1011 即1010的CRC是:1101001 。
计算图文如下 :
CRC(Cyclic Redundancy Check)循环冗余校验码,是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,书上提到红军和蓝军通信联合进攻山下的敌军的例子,第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的问题还是不能解决,红军仍然不敢贸然行动。
CRC循环冗余校验码的计算
假设使用的生成多项式是G(x)=x3+x+1。4位的原始报文为1010,求编码后的报文。
解:
1、将生成多项式G(x)=x3+x+1转换成对应的二进制除数1011。
2、此题生成多项式有4位(R+1),要把原始报文C(x)左移3(R)位变成101,000,0
3、用生成多项式对应的二进制数对左移4位后的原始报文进行模2除:
1001--商
1010000
1011--除数
1000
1011
011--余数(校验位)
编码后的报文(CRC码):
1010000
+ 011
101,001,1
例如: g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是:
101
11101 | 110,0000(就是110,0000/11101)
111 01
1 0100
1 1101
1001
余数是1001,所以CRC码是110,1001
CRC的和纠错
在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若如果有一位出错,则余数不为0,而且不同位出错,其余数也不同。可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而与信息位无关
循环冗余校验码CRC
循环冗余校验码的算法,是不是应该这样算:
http://hi.baidu.com/do_sermon/item/9aecc41ac7bd6ef387ad4e83
这是有关循环冗余校验码知识,求专家们指导。不懂的地方如下。
楼主你好~
生成多项式是CRC算法给定的,这个多项式可以随意给定,不过多项式有强弱之分,所以(1)里面那个a(x)对应的二进制除数是110011。
这个多项式是给定的哦~不是得出来的。
这个二进制数在通信双方通信期间不变,相当于是一个上锁箱子的钥匙,这个钥匙是给定的,不能随便一把钥匙来开这个锁。
生成多项式的原则是,例如这个二进制数是100101,那么只要把每一位1给拿出来就行了,a(x)=1*x^5+0*x^4+0*x^3+1*x^2+0*x^1+1*x^0=x^5+x^2+1,这个多项式有一个必要,就是最高位和最低位一定要为1。还有几点比如信息源改变不同位得到余数不同等,这些是生成多项式的强弱,具体请参照密码学和编码学的相关知识,不过这跟算法本身没关系。
对于第二个问题,楼主别想这么多,他说的很学术,我直接跟楼主讲:
数据比如是1101101011,CRC生成多项式比如为a(x)=x^4+x^2+1,则他对应的二进制数是A=10101,(原理在上面)。那么你看A是5位,那么R就等于4,就是A位数-1,R=4,意味着数据位要向左移动4位,也就是数据变为11011010110000,然后进行下一步算法。
以上就是楼主第二个问题的通俗说法,学算法重要的是掌握它的原理,而不是死记硬背式子。
请扩展~
求循环冗余校验码。
01110
请教一道CRC循环冗余检验码的计算题
crc用的是二进制除法,不能化为十进制做,相减时1-1=0,0-0=0,1-0=1,0-1=1不要借位 1110001100000/110011=10110110*110011+11010,所以11010是校验码。在重申一遍,把它看成小学时学的除法(不可以化为十进制做)
机体步骤如下:
------------10110110
---------------------
110011/1110001100000
-------110011
------------------
---------101111
---------110011
------------------
----------111000
----------110011
------------------
------------101100
------------110011
------------------------
-------------111110
-------------110011
-------------------------
---------------11010
所以答案是11010
计算机网络循环冗余检验 中的除数怎么来的
首先要知道CRC生成的多项式P(X)。除数的位数是P(X)最高次幂+1。P(X)每个幂数代表着除数从右到左第几位为1,其余的都为0,就得出除数了。比如P(X)=X^4+X^3+1,则除数个数为5,从右往左分别为0 1 2 3 4位,其中4,3,0位为1,其余为0。除数为11001