【计算机硬件基础知识】海明校检码基础

楔子

  为了保证数据在传输过程中的正确性,实现数据的查错和纠错,各式各样的效验码应运而生,海明效验码(也称奇偶校验码PCC)就是其中一种。海明效验码能够检测出数据中的两位同时出错但不能纠正;同时,海明效验码可以实现一位数据的查错和纠错功能。下面我们来介绍些必要的知识储备从而进行海明效验码的讲解。

知识储备

异或运算

  异或运算主要是用于比较运算符左右两边数据的值是否相同的;若运算符左右两边的值相同,异或结果为0;若运算符两边的值不同,异或结果为1。举例如下:

00=010=101=111=0(同为0,异为1

效验位

  海明效验码中用于检查数据正确性而在原始数据中插入的数据。效验位的位置的确定由2的次方的值决定,即效验位的位置可以为第一位(2的0次方为1)、第二位(2的1次方为2)、第四位(2的2次方为4)、......、第2的n次方位。效验关系:从左边第一个数据位3开始,因为3=2^0+2^1=1+2,所以数据位3上的数据可以由效验位为1和2的效验码进行效检;5=2^2+2^0=4+1,所以数据位5上的数据有效验位4和效验位1上的效验码进行效验;6=2^2+2^1=4+2,所以数据位6上的数据由效验位4和效验位2上的数据进行效验;7=2^2+2^1+2^0=4+2+1,所以数据位7上的数据由效验位4、效验位2和效验位1上的效验码进行效验。需要特别注意的是,数据位的效验位需要从该数据位的左边开始由近及远的进行选择。

数据位

  原始数据在海明效验码中所占的位置,即除效验位之外的位置都是数据位。

某一原始数据的效验码由该原始数据的位置决定。数据位的位数等于该数据位之前的适当的几个效验位的位数的和(选取效验位时,要从数据位的左边第一个位置开始;只取剩余效验位的最大值进行计算,不能得出结果的再依次向左取值进行计算)。

效验位的个数

  效验位的个数有数据位的个数决定,具体算法如下图:


效验位的值

  海明码中的效验位的值由数据位决定:某一效验位上的值为其进行效验的所有数据为上的数据的异或值。

校验

海明码的确定

  为讲解方便,我们用H表示海明码、P表示校验位、D表示数据位、R表示检验位和数据位的异或值。海明校验码通过校验位和数据位的异或值对原始数据进行校验和纠错。下面我们以1000111为例,进行海明校验码的一些基础讲解。

1、确定校验位的个数(参看校验位的个数)

  这里,n=7,计算k》4,所以至少需要4位校验位对原始数据进行校验。

2、确定校验位的值


  可以由上图确定校验位和数据位的校验关系,把海明码下标转换为相应的数据位下标和校验位下标即可。

3、计算校验位的值:


  上图给出的是第一个校验位的值,感兴趣的话可以自行求解其余校验位的值。在我们计算出所有校验位的值后按照顺序和数据位进行组合即可得到相应的海明码。值得注意的是,海明码的顺序是从右到左开始的,而其中的原始数据是从左到右的。

检测错误

  海明码通过奇偶校验进行数据的检测,首先我们需要计算每一个校验值和其负责校验的数值的异或值(用R表示),然后按照奇偶校验的原则进行计算:若采用偶校验,则所有的R为0时,数据没有出错,其余情况均视为数据出错;若采用奇校验,则所有的R为1时,数据没有出错,其余情况视为数据出错。

小结

  海明码的基础就先介绍到这里,海明码让我认识到了原来简单的0和1还能对自身进行正确性的检测,真是万万没想到啊。

感谢您的宝贵时间,祝生活愉快,谢谢~

                                                                                                                                                                                     —joker

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值