0
点赞
收藏
分享

微信扫一扫

一下子理解CRC循环冗余校验

前提:

1.已知待发送数据str   

    如str="1111"

2.双方约定好辅助多项式g(x)

如约定g(x)=“10011”,用函数表示为g(x)= x^{4}+x^{1}+x^{0} 

发送方:

1.向待发送数据str末尾添0,0的个数为g(x)的最高次数,生成str0

这里g(x)最高次数为4,即新的str0=str+4个0="11110000"

2.用str0除以g(x),得到的余数即为CRC校验位

注意!这里除法是二进制模二除法,且余数位必须等于添0的个数,否则在余数前面补0

这里str0="11110000"模二除以g(x)="10011",得余数CRC=“0010”(模二除法见文章末尾)

3.用原str拼接CRC,即为生成的带校验数据

即发送方应发送str+CRC="1111"+"0010"="11110010"

接收方:

将接收到的数据使用模二除法,除以辅助多项式g(x)

若能整除,则代表数据正确

若不能整除,则代表数据错误,且余数的值即为出错的位数(位数从右到左,从1开始计数)

接收方收到了“11010010”,模二除以g(x)"10011"

得余数为110,即十进制6,即第六位出错,变成了0,可纠正回为1

补充------二进制模二除法

与普通除法规则不同在:

1.上商:部分被除数与除数,位数相同即商一,部分被除数位数小于除数才商0

2.减法:部分被除数与除数相减改为相异或

如图:

 

举报

相关推荐

0 条评论