CRC码的简单计算(课下作业)
CRC原理及计算示例
CRC原理及计算⽰例
推荐博⽂:
1、CRC原理:
2、CRC校验码的计算⽰例:
除数是随机数或按标准选定,CRC的关键是如何求出余数(CRC校验码)。
假设选择的CRC⽣成多项式为G(x)=x^4+x^3+1 要求计算出⼆进制的序列10110011的CRC校验码。
(1)、
将多项式转为⼆进制数,由G(x)=x^4+x^3+1得知,⼀共5位(总位数=最⾼位的幂次+1,即4+1=5)根据多项式的含义(多项式只列出⼆进制值为1的位,也就是这个⼆进制的第4位、第3位、第0位的⼆进制均为1,其它位均为0,所有⼆进制的⽐特串(除数)为11001
(2)、
A.原数帧:10110011
B.除数:11001 (5位数)
C.新数帧:在原数据帧后⾯补上(除数总位数-1个)0 ----> 10110011 0000
D.CRC校验码:C/B的余数,余数的位数只能⽐B少⼀位不够在左边补0,------> 10110011 0000/11001 = 100(这⾥只有三位,所以需要在100左边补0为 0100)
E.新发送帧:在A后⾯加上D(10110011 0100), 接收端收到E,使⽤E/B看是否有余数,如果没有余数则表明该帧在传输过程中没有出错,否则出了差错 -----> 10110011 0100/11001 =10101000余数为0。
最新CRC码的简单计算(课下作业)
• 【说明】“模2除法”与“算术除法”类似,但 它既不向上位借位,也不比较除数和被除数的
相同位数值的大Байду номын сангаас,只要以相同位数进行相除
即可。模2加法运算为:1+1=0,0+1=1, 0+0=0,无进位,也无借位;模2减法运算为: 1-1=0,0-1=1,1-0=1,0-0=0,也无进
位,无借位。相当于二进制中的逻辑异或运算。
也就是比较后,两者对应位相同则结果为“0”, 不同则结果为“1”。如100101除以1110, 结果得到商为11,余数为1,再如 11×11=101。
• 总结计算:只要会把生成多项式按 项系数转化为二进制数作为除数, 在原帧后补上多项式阶数个0得到的 新串作为被除数,做多项式除法时 按“模2除法”,相减异或,商到最 低位余数即为CRC码,将原帧加上 CRC码发送就O啦!谢谢!
• (1)首先把生成多项式转换成二进制数,由G(X) = X4 + X3 + 1可以知道(,它一共是5位(总位数 等于最高位的幂次加1,即4+1=5),然后根据多项 式各项的含义(多项式只列出二进制值为1的位,也 就是这个二进制的第4位、第3位、第0位的二进制均 为1,其它位均为0)很快就可得到它的二进制比特串 为11001。
• (2)因为生成多项式的位数为5,根据 前面的介绍,得知CRC校验码的位数为4
(校验码的位数比生成多项式的位数少
1)。因为原数据帧10110011,在它后 面再加4个0,得到101100110000,然 后把这个数以“模2除法”方式除以生 成多项式11001,得到的余数,即得 CRC校验码为0100。具体操作在黑板上 演示。
CRC码的计算
• 由以上分析可知,既然除数是随机,或者按标准选定 的,所以CRC校验的关键是如何求出余数,也就是 CRC校验码。
crc循环冗余码的例题
crc循环冗余码的例题
CRC(循环冗余校验)是一种用于检测数据传输或存储中的错误的常见方法。
CRC利用一个多项式对数据进行操作,产生一个校验码,然后接收方可以使用同样的多项式对接收到的数据进行相同的操作,如果结果匹配,则数据被认为是正确的。
下面是一个简单的CRC计算例子:
假设我们有一个4位的二进制数据:1011。
我们选择一个生成多项式:x^4 + x^3 + x + 1,也可以表示为10011。
首先,我们把数据和生成多项式进行异或运算:
1011 异或10011 = 0110
然后我们把结果左移4位(相当于乘以2^4),变为:0110 左移4位= 0000111000
接下来我们把原始数据和刚才的结果进行异或运算:
1011 异或0000111000 = 1010
这个结果就是我们的CRC校验码。
接收方可以通过同样的方式对接收到的数据进行CRC 校验,如果结果和发送方的CRC校验码相同,那么数据就是正确的。
这只是一个非常基础的CRC计算例子,实际的CRC算法可能会更复杂,可能需要处理更长的数据和更复杂的生成多项式。
crc码的计算过程
crc码的计算过程
运算过程主要分为两个步骤:生成多项式除法和求余数。
下面将详细介绍CRC码的计算过程。
1.生成多项式除法:
设待发送的数据为D(k-1)...D2D1D0。
将k-1位的数据左移(空出k位),再用一个k位的生成多项式G除以这个左移后的数据,得到商商是一个k-1位的码。
将这个商接在被除数的后面,得到一个新的k位数据,再左移空出k位。
再用这个k位的数据除以生成多项式,重复上述步骤,直到余数的位数小于k。
2.求余数:
总结一下CRC码的计算过程:
1.准备好待发送的数据D和生成多项式G。
2.生成多项式除法:
a.将G左移k-1位,并记为G'。
b.将D左移k-1位,并记为D'。
c.用G'除以D',得到商Q1
d.将Q1连接到D'的右边,得到D1
e.将G'左移k位,将D'左移k位,重复步骤c-e,直到余数的位数小于k。
3.求余数,即最后得到的余数就是CRC码。
需要注意的是,生成多项式的选择对CRC码的计算结果有很大的影响。
不同的生成多项式可用于不同的应用场景,其性能也不同。
选取合适的生
成多项式是确保CRC码计算的正确性和可靠性的重要因素。
crc码的计算过程
crc码的计算过程CRC码,即循环冗余校验码,是一种确保高速数据传输系统数据准确性的重要手段。
CRC码能够检测出那些难以检测的二进制错误,比如噪声造成的中间数据错误,以及数据传输过程中被误码改变的数据。
本文将介绍CRC码的计算过程。
CRC码的计算过程需要通过三步:首先,生成CRC码;其次,在数据传输过程中,将CRC码加入到数据中;最后,接收端进行CRC校验,用来确认数据传输过程中没有发生错误。
首先,生成CRC码。
CRC码是根据特定的多项式计算出来的,它由一系列位(bit)组成,长度根据不同的应用而定,一般是8位或者16位。
首先,把要发送的数据(Data)按照一定的格式分成多个字节,每个字节包含8 bit;接着,把CRC码的位数(n)也按照一定的格式分成多个字节,每个字节也包含8 bit;最后,根据特定的多项式,将其中的每一个字节进行相关操作,计算出最终的CRC校验值。
其次,在数据传输过程中,将CRC码加入到数据中。
当要发送的数据以及对应的CRC码计算完成以后,此时发送端才开始正式发送数据。
在发送之前,发送端会将数据和CRC码进行组合,并把CRC码添加到数据的末尾。
这样,在数据传输过程中,接收端就能够接收到CRC码,从而可以进行CRC校验。
最后,接收端进行CRC校验,以确保数据的准确性。
接收端收到的数据包含有CRC码,但是这个CRC码是否正确,只有进行CRC校验才能确定。
因此,接收端首先会把收到的数据和CRC码分别存放在不同的寄存器中,并且以相同的格式进行存放;接着,根据特定的多项式,对收到的数据以及CRC码进行比较,计算出一个新的CRC码,如果两个CRC码不相同,则表明在传输过程中发生了错误;如果两个CRC码相同,则表明传输的数据是没有错误的。
综上所述,CRC码的计算过程共分为三步:首先,根据特定的多项式生成CRC码;其次,在传输过程中将CRC码加入到数据中;最后,接收端进行CRC校验,以确保数据准确性。
crc计算公式
crc计算公式CRC(循环冗余校验)是一种校验和算法,常用于数据传输和存储系统中,用于检测数据是否出错。
CRC的计算公式通常包括两个部分,一个是生成多项式( G enerator Polynomial)和一个初始值(Initial Value)。
CRC的计算公式如下:生成多项式:CRC算法使用一个固定的二进制多项式,通常表示为一个二进制数。
例如,常用的CRC-32生成多项式为0x04C11DB7。
初始值:CRC算法使用一个固定的初始值,通常表示为一个二进制数。
例如,CRC-32的初始值为0xFFFFFFFF。
计算过程:将数据按照一定的规则划分为多个字节,每个字节都进行一次异或运算,最后再整体进行一次异或运算。
具体步骤如下:将生成多项式和初始值设为当前值。
将数据按字节划分,每个字节与当前值进行一次异或运算。
将结果作为新的当前值。
重复步骤1-3,直到得到最终的CRC值。
例如,假设要计算一个长度为4字节的数据的CRC-32值,生成多项式为0x04C11DB7,初始值为0xFFFFFFFF。
计算过程如下:将生成多项式和初始值设为当前值:0xFFFFFFFF。
将数据的第一个字节与当前值进行异或运算:0xFFFFFFFF ^ 0x01020304 =0x05060708。
将结果作为新的当前值:0x05060708。
将数据的第二个字节与当前值进行异或运算:0x05060708 ^ 0x090A0B0C =0x0D0E0F0G。
将结果作为新的当前值:0x0D0E0F0G。
将数据的第三个字节与当前值进行异或运算:0x0D0E0F0G ^ 0x11121314 =0x15161718。
将结果作为新的当前值:0x15161718。
将数据的第四个字节与当前值进行异或运算:0x15161718 ^ 0x191A1B1C =0x1D1E1F1G。
将结果作为新的当前值:0x1D1E1F1G。
最终的CRC-32值为:最终的CRC-32值 = 最终的值 = 0x1D1E1F1G。
16进制crc校验码计算例题
16进制crc校验码计算例题(原创实用版)目录1.16 进制 CRC 校验码简介2.CRC 校验码的计算方法3.计算 CRC 校验码的例题4.总结正文一、16 进制 CRC 校验码简介CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛应用于数据传输和存储的错误检测技术。
在数据传输过程中,为了确保接收方能够正确接收数据,发送方会在数据末尾附加一些校验信息,接收方根据这些校验信息对数据进行校验。
CRC 校验码有多种位数,常见的有 8 位、16 位、32 位等。
本篇文章主要介绍 16 进制 CRC 校验码的计算方法及例题。
二、CRC 校验码的计算方法16 进制 CRC 校验码的计算方法如下:1.首先确定要添加校验位的数据位长度,设为 n 位。
2.确定校验位长度,设为 k 位(k≤n)。
3.构造一个 k×k 的生成多项式矩阵,矩阵中的元素都是 1 或 0。
4.将待校验的数据用二进制表示,并在其后面添加 k 个 0,形成一个 n+k 位的二进制数。
5.使用生成多项式矩阵去除这个二进制数,余数即为 CRC 校验码。
三、计算 CRC 校验码的例题假设有一个 8 位的数据:11010101,需要添加 3 位 CRC 校验码。
1.构造一个 3×3 的生成多项式矩阵:1 1 10 1 00 0 12.将待校验数据后面添加 3 个 0,得到 11010101000。
3.使用生成多项式矩阵去除 11010101000:1 1 1 (第一步:110 101 010 000)0 1 0 (第二步:010 101 001 010)0 0 1 (第三步:001 010 100 011)-------------1 0 04.余数为 100,即 CRC 校验码为 0x0A。
四、总结16 进制 CRC 校验码的计算方法相对简单,适用于各种数据传输和存储场景。
在实际应用中,根据需要可以调整校验位的长度,从而在保证数据正确性的同时,降低计算复杂度。
CRC校验码计算过程
CRC校验码计算过程1. 选择生成多项式(Generator Polynomial):CRC校验码的生成多项式是决定校验码位数和最终生成的校验码的关键。
常用的CRC生成多项式有CRC-8、CRC-16和CRC-32等。
选择适当的生成多项式是校验码计算过程的第一步。
2.添加补位:在待传输的数据帧最后添加足够位数的补位,以使得数据帧的长度等于生成多项式的位数。
例如,如果生成多项式是8位,则在待传输的数据帧最后添加8位的补位。
3.初始化寄存器:用一个特定的初始值(通常为全1或全0)初始化一个寄存器,该寄存器的长度等于生成多项式的位数。
这个寄存器可以看作是一个多项式的系数。
4.逐位相除:将待传输的数据帧与生成多项式进行逐位相除。
具体步骤如下:a.将数据帧的最高位与寄存器的最高位进行异或运算,并将结果送到寄存器的低位。
b.将寄存器的最高位右移一位。
c.如果寄存器最低位原来是1,从生成多项式中读取相应位,并与寄存器的当前位进行异或运算。
d.重复步骤b和c,直到数据帧的最后一位。
5.得到校验码:如果数据帧的每一位都被除完,剩下的寄存器中的位就是校验码。
6.添加校验码:将生成的校验码作为数据帧的最后几位,用于传输。
7.接收端校验:在接收端,接收到的数据帧包括校验码。
通过执行与发送端相同的CRC校验算法,可以得到一个校验码。
比较接收到的校验码与计算得到的校验码是否一样,不同则表示存在错误。
以上是CRC校验码的计算过程。
通过执行这个过程,可以实现数据的有效校验,提高数据传输的可靠性。
不过需要注意的是,CRC校验码只能检测错误,而不能纠正错误。
如果发现校验码不匹配,就需要进行错误处理,例如请求重新发送数据。
CRC_校验码的计算方法
CRC_校验码的计算方法CRC(Cyclic Redundancy Check)校验码是一种常用的错误检测技术,用于对数据进行校验,以确定数据在传输过程中是否出现了错误。
CRC校验码的计算方法主要包括以下几个步骤:1.选择生成多项式:在CRC校验码的计算中,需要首先选择一个生成多项式。
生成多项式是一个固定的二进制数值,一般采用多项式的形式表示。
常见的生成多项式有CRC-8、CRC-16和CRC-32等。
生成多项式的选择会直接影响到CRC码的检测能力。
2.初始化寄存器:在CRC计算过程中,需要使用一个寄存器来保存中间结果。
此时,需要将寄存器的初始值设定为一个固定的值,一般为全1或全0。
3.数据处理:将要计算CRC的数据按照数据的最高位到最低位的顺序,依次进入数据处理的流程。
4.逐位异或:将数据进行逐位异或操作,即将生成多项式的最高位的系数与当前数据的最高位的系数进行异或运算。
如果异或的结果为1,则将结果与生成多项式进行异或操作,否则直接进行下一步。
5.寄存器左移:将寄存器的值向左移动一位。
6.判断数据位:判断数据是否处理完毕。
如果处理完毕,则进入下一步,否则继续处理下一位的数据。
7.下一个数据位:将下一位的数据进入数据处理的流程。
8.判断寄存器最高位:判断寄存器中最高位的系数是否为1、如果为1,则将寄存器与生成多项式进行异或操作,否则不进行异或操作。
9.循环处理:重复上述步骤,直到数据的每一位都处理完毕。
10.输出校验码:当所有的数据位都处理完毕后,寄存器中保存的值就是CRC校验码。
通过以上步骤,就可以计算出CRC校验码。
在接收端,通过同样的计算方法将接收到的数据进行处理,并将计算出的校验码与接收到的CRC校验码进行比较,以确定数据在传输过程中是否出现了错误。
CRC校验码具有较高的检测能力,能够较好地检测错误,但不能纠正错误。
因此,在实际应用中,常常将CRC校验码与其他纠错码(如海明码)结合使用,以提高数据传输的可靠性。
crc校验值计算
crc校验值计算CRC校验值计算CRC(Cyclic Redundancy Check)校验是一种常用的数据校验方法,用于检测数据传输中是否出现错误。
它通过计算数据的校验值,将校验值附加在数据后面发送,接收方根据接收到的数据和校验值重新计算校验值,然后与接收到的校验值进行比对,从而确定数据是否损坏。
CRC校验值的计算过程非常简单,但却能够有效地检测数据错误。
下面将介绍CRC校验值的计算方法及其应用。
一、CRC校验值的计算方法1. 数据的表示在进行CRC校验值的计算之前,首先需要将数据转换为二进制形式。
对于文本数据,可以使用ASCII码将每个字符转换为对应的二进制数值;对于二进制数据,则直接使用二进制。
2. 生成多项式CRC校验值的计算依赖一个生成多项式。
常用的生成多项式有CRC-8、CRC-16和CRC-32等。
生成多项式通常以二进制形式表示。
3. 计算过程CRC校验值的计算过程实际上是一个除法运算。
首先将生成多项式左移n位(n为生成多项式的位数减1),然后将得到的结果与数据进行异或运算。
将得到的结果再次左移,再与数据进行异或运算。
重复以上操作,直到数据的所有位都进行了异或运算。
最后得到的结果即为CRC校验值。
二、CRC校验值的应用1. 数据传输中的错误检测CRC校验值常用于数据传输中,用于检测数据在传输过程中是否出现了错误。
发送方在发送数据之前,将数据和CRC校验值一起发送给接收方。
接收方在接收到数据之后,重新计算CRC校验值,然后与接收到的校验值进行比对。
如果两者相等,则说明数据传输没有出现错误;如果不相等,则说明数据传输存在错误。
2. 存储数据的完整性检查CRC校验值也可以用于存储数据的完整性检查。
将数据和CRC校验值一起存储,当需要读取数据时,重新计算CRC校验值,然后与存储的校验值进行比对。
如果两者相等,则说明数据没有损坏;如果不相等,则说明数据存在损坏。
三、总结CRC校验值是一种常用的数据校验方法,通过计算数据的校验值来检测数据传输中是否出现错误。
crc计算代码
crc计算代码CRC(Cyclic Redundancy Check)是一种常用的校验码算法,用于检测数据传输或存储过程中的错误。
本文将介绍CRC的基本原理、计算过程和应用场景,以及一些常见的CRC计算代码。
一、CRC的基本原理CRC是一种循环冗余校验码,其核心思想是通过对数据进行多项式除法运算,生成一个校验码,并将该校验码附加到原始数据的末尾。
接收方在接收到数据时,同样进行CRC计算,并将计算得到的校验码与接收到的校验码进行比较,以判断数据是否在传输过程中发生了错误。
CRC算法主要涉及两个重要参数:生成多项式和初始值。
二、CRC计算过程1. 确定生成多项式:生成多项式是CRC算法的重要参数之一,它决定了校验码的生成规则。
常用的生成多项式有CRC-8、CRC-16和CRC-32等。
不同的生成多项式适用于不同的应用场景,选择合适的生成多项式可以提高校验的准确性和效率。
2. 确定初始值:初始值是CRC算法的另一个重要参数,它决定了计算CRC时的初始状态。
不同的初始值会导致不同的校验码生成结果。
通常情况下,初始值都是全1或全0。
3. CRC计算过程:CRC计算过程主要包括以下几个步骤:(1)将原始数据按位划分成若干个字节或比特。
(2)将生成多项式反转。
(3)将初始值加载到计算寄存器中。
(4)依次处理每个数据位,将其与计算寄存器进行异或运算。
(5)重复上一步,直到所有数据位都被处理完毕。
(6)将计算寄存器的值作为校验码。
三、CRC的应用场景CRC广泛应用于数据通信、存储等领域,用于保证数据的完整性和可靠性。
常见的应用场景包括:1. 数据传输:在网络通信、串口通信等场景中,发送方将数据与校验码一起发送给接收方,接收方通过CRC计算来验证数据的正确性。
2. 数据存储:在磁盘、光盘等存储媒介中,CRC被用于检测数据的完整性,以防止数据损坏或丢失。
3. 错误检测与纠正:CRC还可用于检测和纠正数据传输过程中的错误。
crc冗余码题目
crc冗余码题目
CRC(循环冗余校验)是一种常见的校验码计算方法,常用于检测数据传输中的错误。
CRC的基本思想是对要传输的数据进行多项式编码,并在接收
端进行解码和校验,以确定数据是否在传输过程中发生了错误。
下面是一个简单的CRC冗余码题目:
题目:已知发送方和接收方约定使用生成多项式为 \(G(x) = x^4 + x^3 + x + 1\) 的CRC校验码,发送的信息为 \\)。
计算CRC码,并判断接收到的数据是否正确。
解题步骤:
1. 将发送的信息多项式 \(C(x)\) 表示为二进制数码,即 \(C(x) = x^7 +
x^6 + x^5 + x^4 + x^3 + x^2 + 1\)(因为 \\) 是 \(7\) 位二进制数)。
2. 生成多项式 \(G(x)\) 为 \(x^4 + x^3 + x + 1\),将其转换为二进制数码
为 \(11011\)。
3. 使用模2除法计算CRC码。
将 \(C(x)\) 除以 \(G(x)\),得到余数 \(R(x)\)。
4. 余数 \(R(x)\) 应该是 \(x^3 + x + 1\),转换为二进制数码为 \(10101\)。
5. 将余数 \(R(x)\) 添加到发送信息的末尾,得到完整的CRC码 \(C'(x)\)。
6. 在接收端,使用相同的生成多项式 \(G(x)\) 对接收到的数据进行CRC校验。
如果余数为零,则数据传输正确;否则,数据传输错误。
通过以上步骤,可以计算出CRC码并判断接收到的数据是否正确。
循环冗余码计算过程例题
循环冗余码(Cyclic Redundancy Check,CRC)是一种广泛使用的校验方法,用于循环冗余码(Cyclic Redundancy Check,CRC)是一种广泛使用的校验方法,用于检测数据传输或存储过程中可能出现的错误。
它的计算过程主要包括以下几个步骤:1. 初始化:首先,我们需要选择一个生成多项式(也称为CRC多项式)。
这个多项式的阶数决定了CRC的长度。
例如,如果我们选择的生成多项式是x^8 + x^2 + x + 1,那么我们的CRC 就会是一个9位的二进制数。
2. 添加校验位:在数据的最高位之前添加k个零,其中k是生成多项式的阶数。
例如,如果我们的生成多项式是x^8 + x^2 + x + 1,那么我们就在数据的最高位之前添加了3个零。
3. 移位:将添加了校验位的数据和生成多项式进行异或操作。
然后,将结果左移一位。
这个过程会重复进行,直到我们处理完所有的数据位。
4. 计算:在每一步中,我们都将当前的值与生成多项式进行异或操作,然后将结果左移一位。
这个过程会重复进行,直到我们处理完所有的数据位。
5. 检查结果:最后,我们将得到的CRC值与发送方提供的CRC值进行比较。
如果两者相同,那么我们就可以确定数据在传输过程中没有出现错误。
如果不同,那么数据就可能出现错误。
下面是一个具体的例题:假设我们有一个8位的数据块10101010,我们希望使用生成多项式x^8 + x^2 + x + 1来计算其CRC值。
1. 初始化:我们的生成多项式是x^8 + x^2 + x + 1,所以我们需要在数据的最高位之前添加3个零,得到的数据块是00101010。
2. 移位:我们将数据块和生成多项式进行异或操作,得到的结果左移一位,得到的结果再和生成多项式进行异或操作,如此重复进行8次。
具体过程如下:-第一次异或操作:00101010 XOR 10000001 = 10101011-左移一位:10101011 << 1 = 101010100-第二次异或操作:101010100 XOR 10000001 = 10101011-左移一位:10101011 << 1 = 101010100- ...-第八次异或操作:... XOR 1 = ...-左移一位:... << 1 = ...3. 计算:经过8次异或操作和左移操作后,我们得到的结果是... XOR 1 = ...。
crc计算例题
在计算通信或数据存储中,CRC(循环冗余校验)是一种常用的错误检测技术。
以下是一个简单的CRC计算例子。
假设我们有以下二进制数据:1101011011,并且我们用10011 (这是一个常见的CRC-4多项式)作为我们的生成多项式。
1. 首先,根据生成多项式的位数-1(在这个例子中位数是5,所以我们在数据的末尾添加4位0),得到11010110110000。
2. 接着我们开始模2除法(类似于长除法,但所有的减法变为异或操作):
- 11010110110000被10011除,计算过程如下:
11010110110000
10011 |----------
10111
10011
------
10000
10011
-----
110
10011
----
10100
10011
-----
0111
所以,余数为0111(或7的十进制表示)。
3. 把余数附加到原始数据的末尾,得到CRC编码的数据:11010110110111。
这样,我们就得到了通过CRC-4编码的数据。
如果在传输过程中没有发生错误,接收方可以通过执行相同的计算过程校验数据。
如果它们计算得出的余数与发送方的余数一致,那么就可以确认数据没有发生错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• when采用多项式编码的方法,发送方和 接收方必须事先商定一个生成多项式 G(x)。要计算m位帧M(x)的校验和,生 成多项式必须比该校验和的多项式短。 基本思想是:将校验和加在帧的末尾,使 这个带校验和的帧的多项式能被G(x)除 尽。当接收方收到带有校验和的帧时, 用G(x)去除它,如果有余数,则传输出 错。
2.多项式的生成
CRC码把整个数据块当作一串连续的二进制数据。 代数结构可看作是一个报文码多项式,是基于 将位串看成是系数为0或1的多项式,一个k位 帧可以看成是从x(k-1)到x(0)的k次多项 式的系数序列,这个多项式的阶数:k-1。码 组与多项式系数序列的对应,高位(最左边)是 x的k-1项系数,下一位是x的k-2项的系数,以 此类推,生成多项式的最高位和最低位必须是 1,且生成多项式必须比该校验和的多项式短。 For example,110101有6位,表示成多项式是 x5+x4+x2+0,即它的6个多项式系数分别是1, 1,0,1,0,和1。
CRC码的计算
• 1.什么是CRC码? • 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。 它是利用多项式除法及余数的原理来作错 误侦测(Error Detecting)的。实际应用时, 发送装置计算出CRC值并随数据一同发送给接 收装置,接收装置对收到的数据重新计算CRC 并与收到的CRC相比较。
CRC码的计算
• 由以上分析可知,既然除数是随机,或者按标准选定 的,所以CRC校验的关键是如何求出余数,也就是 CRC校验码。 • 下面以一个例子来具体说明整个过程。现假设选择的 CRC生成多项式为G(X) = X4 + X3 + 1,要求出 二进制序列10110011的CRC校验码。具体的计算过 程如下(不会作图没办法啦): • (1)首先把生成多项式转换成二进制数,由G(X) = X4 + X3 + 1可以知道(,它一共是5位(总位数 等于最高位的幂次加1,即4+1=5),然后根据多项 式各项的含义(多项式只列出二进制值为1的位,也 就是这个二进制的第4位、第3位、第0位的二进制均 为1,其它位均为0)很快就可得到它的二进制比特串 为11001。
• 总结计算:只要会把生成多项式按 项系数转化为二进制数作为除数, 在原帧后补上多项式阶数个0得到的 新串作为被除数,做多项式除法时 按“模2除法”,相减异或,商到最 低位余数即为CRC码,将原帧加上 CRC码发送就O啦!谢谢! • 2014-z0
• (2)因为生成多项式的位数为5,根据 前面的介绍,得知CRC校验码的位数为4 (校验码的位数比生成多项式的位数少 1)。因为原数据帧10110011,在它后 面再加4个0,得到101100110000,然 后把这个数以“模2除法”方式除以生 成多项式11001,得到的余数,即得 CRC校验码为0100。具体操作在黑板上 演示。
• 【说明】“模2除法”与“算术除法”类似, 但它既不向上位借位,也不比较除数和被除数 的相同位数值的大小,只要以相同位数进行相 除即可。模2加法运算为:1+1=0,0+1=1, 0+0=0,无进位,也无借位;模2减法运算为: 1-1=0,0-1=1,1-0=1,0-0=0,也无进 位,无借位。相当于二进制中的逻辑异或运算。 也就是比较后,两者对应位相同则结果为 “0”,不同则结果为“1”。如100101除以 1110,结果得到商为11,余数为1,再如 11×11=101。