Logisim-CRC简单介绍

简介

CRC(Cyclic Redundancy Check)即循环冗余校验是一种既能检错也能纠错的校验码,校验的原理是基于模2运算;

编码/解码过程

这里以一个示例来进行说明编码过程,假设原始数据为:110

1、计算校验位的位数

根据公式 k + r ≤ 2r - 1 计算,其中【r】为校验位位数,【k】为原始数据的位数。

原始数据是:110,也就是k = 3,根据公式算出r <= 2

2、选择多项式

选择一个r+1位的多项式,也就是最高次幂等于r的,上面算的r <= 2,先从r=2开始,在下面的常用多项式中没有最高次幂等于2的,那么就让r=3,再看下面有符合的多项式:$ x^3+x+1 $,转换成二进制: 1011

3、计算

  • 原始数据110左移r位,变成110000
  • 110000除以1011,得到余数是个1
  • 将余数1放在110的右侧的r位的校验位上,也就是变成110001

最终校验码就是:110001

4、校验

将收到的【校验码】除以多项式1011,如果余数为0,表示无错,反之,则表示有错

5、出错举例

例子1:如果收到校验码是110101,除以多项式1011,得到的余数是个100,换算成10进制等于4

例子2:如果收到校验码是111001,除以多项式1011,得到的余数是个11,换算成10进制等于3

通过上面两个例子可以看出,余数和出错的位数不相等,不像海明码那样最后出错的结果正好等于出错的位数,虽然CRC出错计算的余数不等于出错的位数,但是余数和出错的位数之间还是有固定的映射关系,不同的多项式,映射关系不同,Logisim-017-CRC解码,这边文章里面有一个100101多项式的映射关系,可以看看;

常用的生成多项式


不对之处,还望指正

posted @ 2024-11-23 23:25  blogliang  阅读(173)  评论(0)    收藏  举报