CRC循环冗余校验纠错中循环左移的原因以及一些新感受

本文详细解析CRC循环冗余校验中循环左移的目的,阐述了如何通过余数变化来定位错误位。在仅有一位错误的情况下,通过不断左移和除法操作,可以确定错误位于最后一位。同时,介绍了如何利用生成多项式在最后几位的异或运算来快速识别错误位置,简化错误纠正过程。
摘要由CSDN通过智能技术生成

CRC循环冗余校验纠错中循环左移的原因以及一些新感受

问题的描述

理解

已知前提

1.我们讨论的是只有一位代码出错的情况,多位出错的情况由于
  纠错代价过大而直接丢弃。
2.CRC循环冗余检验的余数具有循环的特点。
3.对余数左侧补零然后除以生成多项式的余数是该余数对应的出错位的
  前面一位出错的代码对应的余数。
4.每一个余数对应一个出错代码以及出错的位置。
左移的需求背景:

如图: 在这里插入图片描述
虽然余数(全0已排除)在一定条件下可以说是唯一对应一个错误代码,但除了后面 l e n ( G ( x ) ) − 1 len(G(x))−1 len(G(x))1位可以快速确认外,其余的都很难找到对应关系。

为什么需要左移

循环左移到对应的余数为001时,我们可以确定此时的二进制代码的最后一位一定是错的,其余的都是对的。
请添加图片描述
我们根据第一张图可知知道其实100对应的是倒数第三位出现错误,但我们当时不知道,所以我们会通过求这个余数的下一个余数,然后再把对应的代码循环左移一次,由上面的图片我们可以知道,错误的位置也变成了倒数第四位,也就是说,余数左侧补零除以生成多项式得到的余数与错误代码循环左移一位还是对应的。所以我们可以不停的用新的余数补零再除以生成多项式得到新余数,同样的错误代码也不听的循环左移,知道新余数为001,这样我们就知道此时的错误代码的错误是在最后一位了。

纠正后,我们需要把代码复原,通过上面图片里的过程我们可以知道循环左移到余数循环出现时,代码便已经复原。

新知

假设生成多项式的长度为4,那么倒数第一位到倒数第四位的错误代码我们可是可以直接通过余数辨别出来的。
如果是倒数第三位出错了,那么在除法的最后一次异或运算中,上面的操作数的倒数第三位一定是错误的,其余的位都是和生成多项式一样的;如果是倒数第四位出错了,那么在最后一次异或运算中,上面的操作数的倒数第四位一定和生成多项式的倒数第四位不同,其余的都是一样的。
这后面的几位其实都只会影响其下面的与其对齐的数字。
如下图所示(错误位置已经用波浪线标出,有点丑,将就着看把/wul)
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值