简介
1. 循环冗余校验码(cyclic redundancy check)简称CRC(循环码),是一种能力相当强的检错、纠错码,
并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储
器与主机的数据通信和计算机网络中
2. 循环码是指通过某种数学运算实现有效信息与校验位之间的循环校验(而海明码是一种多重校验)
3. 这种编码基本思想是将要传送的信息M(X)表示为一个多项式L,用L除以一个预先确定的多项式G(X),得到
的余数就是所需的循环冗余校验码。
4. 这种校验又称多项式校验。
5. 理论上可以证明循环冗余校验码的检错能力有以下特点:
5.1、可检测出所有奇数位错;
5.2、可检测出所有双比特的错;
5.3、可检测出所有小于、等于校验位长度的突发错。
一、CRC校验原理
1. 先在要发送的帧后面附加一个CRC校验码(CRC校验码本质也是个二进制序列数),生成一个新帧发送给接收端
2. 附加的CRC校验码不是随意的,它要使所生成的新帧,能被发送端和接收端共同选定的特定数"模2除法"整除
3. 新帧到达接收端后,新帧除以(同样采用“模2除法”)这个特定数的除数。
3.1、如果没有余数,则表明该帧在传输过程中出现了无差错
3.2、如果有余数,则表明该帧在传输过程中出现了差错
“模2除法”:类似二进制中的逻辑异或运算(两者对应位相同则结果为“0”,不同则结果为“1”),
比如100101除以1110,结果得到商为11,余数为1
二、“模2除法”
1.介绍
1. 模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或
2. 多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。
3. 后者按带借位的二进制除法,根据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。
4. 多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义的。
5. 在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。
6. 因为除数首位总是1,按照模2 除法运算法则,那么余数首位是1就商1,是0就商0。
2.计算方法
三、CRC校验码的计算
1.CRC校验码计算步骤
1. 先选定对接收的帧进行"模2除法"的除数(可以随机选择,也可按标准选择),用于在接收端进行校验
2. 看所选定除数的二进制位数(假设有k位),然后在要发送的数据帧位数(假设有m位)后面加上k-1个“0”
3. 此时数据帧(共m+k-1位)用“模2除法”除以选定的除数,所得到的余数(二进制)就是该数据帧的CRC校验码
2.CRC计算例子
2.1计算步骤
例子:设选定除数的多项式为G(X) = X^4 + X^3 + 1,要求出的二进制序列10110011(原数据帧)的CRC校验码。
1. 由选定除数的多项式为G(X) = X^4 + X^3 + 1,可知:总位数等于5,二进制为11001
1.1、总位数等于最高位的幂次加1,即4+1=5.
1.2、多项式只列出二进制值为1的位,也就是这个二进制的第4、3、0位的二进制均为1,第2,1位均为0
2. CRC校验码的位数为4(校验码的位数比设选定除数少1),10110011(原数据帧)加4个0,得到101100110000
3. 把得到数101100110000,以“模2除法”方式除以选定除数,得到的余数0100(即CRC码)
4. 上步计算得到的CRC校验0100替换原始帧101100110000后面的四个“0”,得到新帧101100110100,再把这个新帧发送到接收端
6. 新帧到达接收端后,新帧用“模2除法”除以这个特定数的除数(11001),验证余数是否为0。
5.1、如果没有余数,则表明该帧在传输过程中出现了无差错
5.2、如果有余数,则表明该帧在传输过程中出现了差错
2.2计算过程截图