CRC实例解析

看很多人还是没懂CRC,我单独用一篇博客介绍定义后再用两道例题解析一下过程

目录

什么叫CRC?

为什么要使用CRC? 

CRC码 

举例

那我下面给你们一个思考题: 

模2运算 

 CRC校验码计算

 题:假设选择的CRC生成多项式为G(x) = x^4 + x^3 + 1,求出二进制序列10110011的CRC校验码? 最终的发送数据帧是多少?

 题2:当我们要发送一帧数据时,要发送的数据为101110。采用CRC 生成多项式是​编辑。试求应添加在数据后面的余数


什么叫CRC?

CRC即循环冗余校验码,是数据通信领域中比较常见的一种查错校验码,它的特征便是信息字段和校验字段的长度可以任意选定。

CRC是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,用来保证数据传输的正确性和完整性。

为什么要使用CRC? 

 CRC校验是一种常用检错校验方式。接收方用与发送方相同的模2除法的除数,并通过CRC校验来辨别数据再传输过程中是否出现的错误。注意CRC校验只能检错,不能纠错!

      CRC校验原理:其根本思想就是先在要发送的数据帧后面附加一个CRC校验码(CRC校验码是通过发送端和接收端共同选定的某个特定除数通过模2除法计算出来的),生成一个新帧后发送给接收端。新帧到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)特定的除数,看是否能整除(由于在发送端发送的新帧末尾携带了CRC校验码,因此新帧是能整除以特定除数的(也就是模2除法计算后余数为0)),如果余数为0,则表示传输数据正确;如果余数不为0,则表示数据传输过程出现错误!
 

具体来说,CRC校验原理就是以下几个步骤:

(1)先选定一个特定的模2除数(二进制形式的除数,通常以多项式表示,所以CRC又称为多项式编码方法)。

   (2)假设所选定的模2除数的二进制位数为k位,假设原数据帧位数为m位。然后在原数据帧后面加上k-1位个“0”(CRC占位值),然后以这个加了k-1个“0“的新数据帧(m+k-1位)以"模2除法"方式除以模2除数,所得到的余数就是该帧的CRC校验码,注意:余数的位数一定要是比除数位数只能少一位,也就是说余数长度为k-1位,不足则前面补0)。

   (3)再把CRC校验码替换原数据帧末尾的CRC占位值,形成一个新数据帧,然后将新数据帧发送到接收端;

   (4)最后在接收端再把这个新帧以“模2除法”方式除以前面选定的模2除数,如果余数为0,则表明该帧在传输过程中没出错;如果余数不为0,则表示数据传输过程出现了错误。
 

CRC码 

CRC码又称多项式码,任何一个二进制数都可以和一个对应的多项式建立一一对应的关系 

举例

1011011对应的多项式为x^{6} + x^{4} + x^{3} + x + 1

解析:对应位上为1,则加上对应位的x多少次方

比如,以上,第六位为1(二进制数最右面是第0位),则加上 x^{6} ;第五位为0,则不加;第四位为1,则加上x^{4},以此类推

那我下面给你们一个思考题: 

 X^{5}+X^{4}+X^{1}+1对应的代码是多少?

答案是:110011 

模2运算 

 "模2除法"与"算术除法"类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。相当于二进制中的逻辑异或运算(二进制位相同异或值为0,二进制位不同异或运算值为1)! 

模2加法位运算为:1+1=0,0+1=1,1+0=1,0+0=0,无进位,也无借位;

模2减法位运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。

 

余数应该比除数少一位,如果不够则在前面加0,这里余数是2位所以不用补0 

 CRC校验码计算

 从上面的分析可以知道要计算出CRC校验码需要如下两个关键步骤:

      (1)选定模2除数;

      (2)通过模2除法计算CRC校验码

      下面用一个例子来演示CRC校验码的计算。

 题:假设选择的CRC生成多项式为G(x) = x^4 + x^3 + 1,求出二进制序列10110011的CRC校验码? 最终的发送数据帧是多少?

解析:

(1)首先把生成多项式转换成二进制数(模2除数),由G(x) = x^4 + x^3 + 1可以知道(模2除数一共是5位,位数等于最高位的幂次加1,即4+1=5),然后根据多项式各项的含义(多项式只列出二进制值为1的位,也就是这个模2除数二进制的第4位、第3位和第0位的二进制均为1,其它位均为0),这样我们就到模2除数的二进制比特串为11001;


(2)模2除数位数为5位,根据前面的介绍可得知CRC校验码的位数为4位(校验码的位数比生成多项式的位数少1);

 (3)原数据帧为10110011,在它末尾加4个0(CRC占位值),得到101100110000,然后把这个数通过"模2除法"方式除以模2除数,得到的余数(即CRC码)为0100

 4)把上步计算得到的CRC校验0100替换原始帧101100110000后面的四个“0”(CRC占位值),得到带CRC校验码的新数据帧101100110100。再把这个新数据帧发送到接收端;

(5)当新数据帧到达接收端后,接收端会把这个新数据帧再用相同的模2除数11001以"模2除法"方式计算余数,验证余数是否为0,如果余数为0,则表明该帧在传输过程中没出错;如果余数不为0,则表示数据传输过程出现了错误。 

 可以看出余数在模2除法下等于0

 题2:当我们要发送一帧数据时,要发送的数据为101110。采用CRC 生成多项式是P(x) = x^{3} + 1。试求应添加在数据后面的余数

解析:

这里就简化步骤,可以知道多项式对应的除数是1001(4位),余数则占3位;然后我们在发送数据后面加3个0,进行模2除法运算:

余数为011,所以要发送的数据帧为101110011,

当接收到后,又对数据进行验证:

至此,经过几道实例的讲解,大家应该明白CRC的计算方法和步骤了

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像污秽一样

谢谢谢谢谢谢谢谢谢谢谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值