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

2023-05-16

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)
请添加图片描述
请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐