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多项式的映射关系,可以看看;
常用的生成多项式

不对之处,还望指正

浙公网安备 33010602011771号