CRC和海明校验码

CRC

概念

循环冗杂校验码,只能检错不能纠错,原理是找出一个能整除多项式的编码,使用的是在原始信息位后追加若干校验位的思想。

流程

概念有点乱,作为笔记文直接举例附带一下。
现有原始信息10110,CRC的生成多项式有G(x)=x^4+x+1,求校验码。

1,补0
按生成项的最高次幂补,G(x)最高项是4,即补4个0,得到10110 0000.
2,拿除数
根据多项式G(x)存在x的4次幂,1次幂,0次幂,缺少指数2和3,即2和3位置填0
0  1  2  3  4
1  0  0  1  1
3,模2运算
其实就是做除法,但不是真正除法,对应位置做相同为0,不同为1的运算即可。

在这里插入图片描述

这里因为余数刚好有4位(前面补了4个0),所以不需要懂,直接加在原始信息后面即可,即10110 1111。
如果不足最高次幂则需要补0,补在左边,比如余数123,那么补齐就应该是0123。
4,校验(接收方)
因为补上了余数,用多项式G(x)来做除法(按2生成的方式),余数应该为0。

海明校验码

这个我会尽量写详细点,不用去找下一篇文章。(大概

本质和例子

这是奇偶校验法,我们直接上例子会好点。
经典例子1011

首先当然是上公式啦~
2^k - 1 >= n + k
这里n代表信息的位数,这里有4位,即n=4。那么我们就可以解出最小的k值,为3
所以算上校验位,一共有4+3=7位,画个表格。


这里规定,校验位是2n,即20=1,2^1=2,4,8…,那么在这个例子里就是1,2,4为校验位,那么已经可以填第一行了,数据按照从左到右排。
在这里插入图片描述
接下来算01,我们把信息位的拆成2进制

7=2^2+2^1+2^0
6=2^2+2^1
5=2^2    +2^0
3=    2^1+2^0

2^2=4,那么j3的位置应该等于7,6,5这三个位置的异或,即1:0:1,相同为0不同为1,那么等于0,即j3位置填0。
2^1=2,那么j2的位置应该等于7,6,3这三个位置的异或,1:0:1,结果是0
那么j1也同理,结果是1,我们得出表
在这里插入图片描述
那么海明码就是1010101
前面说了,这个是用奇偶校验方式检验的,如果奇校验,那么结果应该全是1,反之应该全是0,这也是海明码有纠错能力的地方,找到出错位置反转就好了,即0->1或者1->0。
首先说一下奇偶是怎么算的,是按照数据1的个数来判定,比如我得到了1010 111,进行偶判定,那么计算过程如下:
校验位与上面的位置关系进行异或
j3(4):765=1:1:0:1=1
j2(2):763=1:1:0:1=1
j1(1):753=1:1:1:1 =0
不全是0,说明有错,而且根据排列得到的二进制数110,转换为10进制为6,即出错在第六位,纠错方式即反转,把1换为0,更改后的海明码1010 101,与上文相符。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值