浅谈奇偶校验、CRC循环冗余校验、海明校验计算方法

上课老师讲了这三种校验方法,为了温习,写了这篇文章以作总结

由于才疏学浅本文不谈三种校验方法的原理,只介绍三种校验方法的使用方法

一、奇偶校验:
校验码求法:
奇校验:添加校验位使得1的个数为奇数个
偶校验:添加校验位使得1的个数为偶数个 
求校验码:
(1)假设原传输信息为ABCD,偶校验位为Z
则 Z=A⊕B⊕C⊕D (⊕为异或,相同时为0,不同时为1)
(2)那如果是奇校验电路呢???
那就要酱紫来:Z=A⊕B⊕C⊕D⊕1 (⊕为异或)
如何进行数据校验看是否传输正确呢?
对收到的数据求一下校验码,对比是否和发送的校验码一样,若不一样,则说明传输错误


二、CRC循环冗余校验:
原理:本质上是模2除法求余,将发送信息M(x)当作被除数,发送方和接收方共同约定一个除数G(x),然后求余R(x),该余数R(x)即为CRC值  
校验步骤:
(1)预先确定一个发送端和接收端都用来作为除数的二进制比特串,可以随机选择也可以使用国际标准(但最高位和最低为必须为1)
(2)如果除数为n位二进制比特串,那么先在要发送的数据后面加上(n-1)个0,然后以模2除法(和异或一样)除以上面的除数,得到的余数位数应该为(n-1)位,即为CRC校验码(如果前面位是0也不能省略,一定要是(n-1)位)。
(3)将计算出来的CRC校验码附加在原数据的后面,并发送
(4)接收端收到数据后,用收到的数据以模2除法除以最开始确定好的除数,若余数不为0,则传输中出现错误。(这里计算余数时,被除数一定是和发送端计算CRC校验码时的被除数是不一样的,因为发送端计算CRC校验码时的被除数是原数据+(n-1)个0,而收到的数据是原数据(可能受干扰)+(n-1)位CRC校验码)


三、海明校验:
设数据为1101,海明校验中分为奇偶校验,默认都是偶校验
(1)设欲检测的二进制代码为r位,为使其具有纠错能力,需要添加k位检测位,组成k+r=n位的代码。为了能准确对错误定位以及指出代码没错,新添加的检测位数k应满足:2^k ≥ r+k+1
由此可求出需要的校验位的个数
(2)校验位分别放在2的i次方上,i从0...n;
例如r=4,则求得k=3,一共7位海明码,则校验位分别为H1,H2,H4;
(3)下面求校验位
则:H3 = H1+H2 (这里是等式右边下标相加等于等式左边下标的意思,下面一样)
H5 = H1+H4
H6 = H2 + H4
H7 = H1 + H2 + H4
H1你就看哪个信息位用到了1, H3=1+2;H5=1+4;H7=1+2+4;所以

P1(H1)=H3 ⊕ H5 ⊕ H7
P2(H2) = H3 ⊕ H6 ⊕ H7
P3(H4) = H5 ⊕ H6 ⊕ H7
(4)大功告成,校验位求完,则有了海明码,那么我们怎么检查错误和纠正错误呢?
因为校验码有三位,我们这里再申明三位码分别用S1、S2、S3表示,满足下列关系:
S1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 ;
S2 = P2 ⊕ H3 ⊕ H6 ⊕ H7;
S3 = P3 ⊕ H5 ⊕ H6 ⊕ H7;
如果没有错误的话,S1 S2 S3应该都为0,若有不为0,S3S2S1(记住这里是降序排列因因为二进制高位在左)的值转换为十进制就是数据出错的地方,将这位数据取反就可以起到纠错的功能了。

好了,原理讲完,我们实例一下:

P1(H1)=H3 ⊕ H5 ⊕ H7=1
P2(H2) = H3 ⊕ H6 ⊕ H7=0
P3(H4) = H5 ⊕ H6 ⊕ H7=0
所以传输的海明码应该为1010101,我们假设在传输过程中第三位数据出了问题,由1变成了0,即1000101那下面开始进行检查和纠错,同理因为有3个校验位,所以我们设置3位码来进行检查与纠错
S1验证组:经过奇偶校验发现S1组中有奇数个1,使用异或运算S1=1(简单办法是直接数1的个数奇数为1偶数为0)

S1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 =1
同理S2 = P2 ⊕ H3 ⊕ H6 ⊕ H7=1;
S3 = P3 ⊕ H5 ⊕ H6 ⊕ H7=0;
S3S2S1=011  可知出错位数为第三位,所以将第三位的0改为1,即纠错成功,与发送端保持了一致。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Programming.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值