CRC校验计算方法

循环冗余校验码(CRC),是一种能力相当强的具有检错、纠错能力的校验码,常用于串行传送的辅助存储器与主机的数据通信和计算机网络中

为什么要使用CRC?

(在计算机网络中的应用)

数据在传输过程中,可能会产生比特差错:1可能变为0, 0可能变为1,因此为了保证数据传输的可靠性,必须采用各种差错检测措施

目前在数据链路层中广泛采用的就是循环冗余检验CRC的检错技术

(CRC技术也很容易实现)

CRC码

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

举例

1011011对应的多项式为

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

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

思考

对应的代码是多少?

答案:110101

模2运算

对应位进行异或操作:相同为0,不同为1

CRC原理

CRC运算就是在发送的数据后面加上 r 位冗余位,构成一个由 k 位信息位,加上 r 位冗余位组成的 n = k + r 位码字发出去

也许直接看概念或者原理,可能会不容易理解,所以这里直接给出例题进行讲解

例题:

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

每组比特数 k = 6(因为数据101110有6位)
除数 = 1001,n = 3(因为根据得出对应二进制为1001,最高次幂为3,所以n = 3)
先进行移位,得被除数 = 101110000(就是将要发送的数据后面补 n 个0)
求余:进行模二除法,得余数 = 011(求余过程如下)

图中可以看到,最后的余数为 011

所以当我们发送数据的时候,就可以将此余数添加到要发送的数据后面,也就是 101110011,这就是编码后的CRC码,我们将其发送即可

当码字到达接收端时

若CRC码在接收端能被除数 1001 整除,则说明接收正确
若CRC码不能被除数整除,则检测到出错

循环冗余校验码的检错能力:

可检测出所有奇数位错
可检测出所有双比特的错
可检测出所有小于、等于校验位长度的突发错

总结

采用CRC时,需要约定一个生成多项式(除数)

发送方:信息位 + 冗余位 = 发送码字 (冗余位就是上面例题中求的余数)

接收方:用收到的CRC码字除以生成多项式(除数),判断余数是否为0

为0:接收正确,接收数据帧
不为0:接收有错,丢弃数据帧
————————————————
版权声明:本文为CSDN博主「她的坏机器人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42193813/article/details/105732396

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值