CRC(Cyclic Redundancy Check)校验

参考资源

CRC在线计算工具

CRC(循环冗余校验)在线计算_ip33.com

常见CRC参数模型

Catalogue of parametrised CRC algorithms

点击某一个,可以看到详情。例如,点击CRC宽度是32位的:

下表拷贝自:CRC(循环冗余校验)在线计算_ip33.com

CRC校验概念介绍

CRC,全称是Cyclic Redundancy Check,即循环冗余校验,它是一种计算校验码的方法。在数据通信、存储等领域有广泛应用。

在发送端对数据做多项式计算,将计算得到的结果(即校验码)附在原始数据后面;接收端也执行同样的算法,以校验数据的完整性和正确性。

生成多项式

可以用一个比特位的序列来表示。

例如,生成多项式G(X)=X^{4}+X^{1}+1的比特位序列是10011,X的指数就表示该比特位为1。比特位序列的位数是生成多项式的最高次幂 +1。该生成多项式的最高次幂是4,对应的比特位序列的位数是5。

再例如,生成多项式G(X)=X^{16}+X^{15}+X^{2}+1的比特位序列是1 1000 0000 0000 0101。

宽度(WIDTH)

指CRC校验码的比特位数,它比生成多项式的比特位序列少1位,它也等于生成多项式的最高次幂。

例如,生成多项式G(X)=X^{4}+X^{1}+1的宽度是4。

再例如,生成多项式G(X)=X^{16}+X^{15}+X^{2}+1的宽度是16。

多项式(POLY)

生成多项式比特位序列的简写,忽略了生成多项式比特位序列最高位的1,结果用十六进制表示。

例如,生成多项式G(X)=X^{4}+X^{1}+1的比特位序列是10011,忽略最高位的1得到0011,对应的POLY值为0X03。

再例如,生成多项式G(X)=X^{16}+X^{15}+X^{2}+1的比特序列是1 1000 0000 0000 0101,忽略最高位的1得到1000 0000 0000 0101,对应的POLY值为0X8005。

校验原理

通信双方约定好一个生成多项式。设校验码的位数是R,信息码的位数是K。

发送端

1、发送端将信息码左移R位,空出来的位置上补0,生成一个K+R=N位的二进制序列;

2、上面生成的N位的二进制序列对生成多项式做模2除法,得到一个余数。如果余数的位数不够R位,则前面补0;

3、将余数替换第1步生成的N位的比特位序列的末尾的R个0,最后得到要发送的N位的比特位序列,并发送出去。

接收端

将接收到的N位的比特位序列对生成多项式做模2除法,如果能够整除,证明信息发送过程中没有变化,校验成功;如果不能整除,证明信息发送过程中发生了变化,校验失败。

计算示例

假设原始信息码的比特位为序列是1101110011,那么长度K=10。生成多项式是G(X)=X^{4}+X^{3}+1,对应的比特位序列是11001,那么校验码的位数R=4位。

发送端

1、将10位的信息码左移4位,空出来的位置上补0,生成一个14位的比特位制序列:11011100110000。

2、将11011100110000对11001做模2除法,得到4位的余数为0110:

3、 将4位余数0110替换11011100110000末尾的4个0,得到要发送的14位比特位序列为:

11011100110110

接收端

 接收端收到的14位比特位序列为11011100110110,将该序列对生成多项式(对应的比特位序列11001)做模2除法,能够整除,校验正确:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值