CRC概述
CRC即Cyclic Redundancy Check,循环冗余校验,是一种数字通信中的常用信道编码技术。能识别是否出错,接收端检验时余数为0就没出错,但不具有纠错功能。
CRC码的组成
CRC码是由两部分组成的,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码长共n bit,信息码长k bit,就称为(n,k)码,剩余的r bit即为校验位。如:(7,3)码:110 1001,前三位110为信息码,1001为校验码。
校验码的生成与检验
- 生成多项式的最高次幂表明了校验位的位宽,将原信息码左移r bit,右侧补零,如 G(X)=X^3+X+1, 则1100–> 1100 000;
- 用1100 000除以g(x) (注意,使用的是模2除法,见下文),得到的余数即为CRC校验码;
- 将校验码续接到信息码的尾部,形成CRC码。
注:生成多项式的系数就是二进制除数比如:
模2除法
模2加减法
模2除法每一步用到模2加减法,关于模2加减法,其实就是按位异或,规则如下:
//不需要考虑进位和借位
0 ± 0 = 0
1 ± 1 = 0
0 ± 1 = 1
1 ± 0 = 1
例: 1101 ± 1001 = 0100
计算如下:
1 1 0 1
± 1 0 0 1
-----------
0 1 0 0
模2除法:
同样不需要考虑进位和借位
规则:假设被除数X,和除数P,余数R
X除以P,对X和P做模2加减法,即按位异或
所得余数R去除首位,即左移一位:
若R第一位为0,将其作为新的被除数,除以0。此时其首位为0,商即为0
若R第一位为1,将其作为新的被除数,除以P。此时其首位为1,商即为1
重复第2步直到R位数少于P位数
例:1111000对除数1101做模2除法:
1 0 1 1 //商
---------------
1 1 1 1 0 0 0 //被除数,注意首位为1
1 1 0 1 //被除数首位为1,除以除数
----------