海明校验码--确定校验位

http://blog.csdn.net/yudandan10/article/details/11878421


计算机组成中的海明校验码,相信学过的都会有了解,那么对其中校验位的确定,我想似乎有些人不是很明白,今天我来详细的把如何确定校验位分享一下

    首先看下基本的概念  :

    2^r≥k+r+1  

其中r为校验位 ,k为信息位  信息位是已知的,那么如何确定校验位呢,用一个例子来说明 


例如:二进制码1011  求它的海明编码 步骤如下:


1、首先确定信息位,也就是1011了,那么随之K的长度也就知道了是4位

2、确定校验码是几位  根据上述公式我们去试最接近而且满足条件的值,1011的校验位是3,也就是r=3,这样刚好满足了条件  

3、确定了校验位的位数之后就是来确定校验位的值以及分配校验位了  

   首先来看分配校验位:  一般来说校验位都是放在2^n的位置处,也就是1、2、4、8....  

   其次就是确定分组(也就是确定校验位的值) 

 通过初步的解题我们知道了校验位+信息位一共是7位,那么我们首先来画一个表,分别把这些数据填进去  

   海明校验码--确定校验位_第1张图片

注释:  我分别把七个位置用1~7来表示了  在填写信息为的时候也要把高位的数据填到高的位置 ,例如1011  就要类似图中的填法  


 确定校验位的分组原则:

  1.每个位置的校验位确定: 要想校验第几位 (i)  那么i就等于校验位所在位置的加和    举个简单的例子,加入我要教研第3位,那么3=1+2  也就是3 由第一个和第二个校验位来校验,照这样的算法,以此类推,我们就可以知道每个位置都需要哪个校验位来校验了 


     下面是1011的校验位分配表

 

海明校验码--确定校验位_第2张图片

按上述方法分配好后,我们已经明确的知道了每个位置都需要利用哪些位置来校验,下面也是关键的一步了 


我们要把这些数据汇总起来,也就是每个校验位都校验了哪些位置,就分别把这些位置的值按亦或计算(也就是相同的值就为0  ,不相同时就取1)  这样就得到了每个校验位的值了 


  下面我们来看看,每个校验位都分别校验了哪些位置 :

海明校验码--确定校验位_第3张图片


由此表可以看出对于校验位所要校验的位置,已经确定了,余下的就是计算检验位的值了,(利用亦或运算) 


可得到r1  r2  r3 的值分别为 1,0,0  (如果此处你不会亦或运算,那么建议百度查一查,练习一个简单的例子就会和明白了) 


到此位置,我们就求出了校验位的值,同时海明码也就出来了 


那么对于海明码的验证纠错等知识我就不在这里介绍了,以上就是我对此部分知识的理解,欢迎交流学习

你可能感兴趣的:(海明校验码--确定校验位)