奇偶校验&海明码

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ITxiaobaibai/article/details/83048005

奇偶校验:

奇偶校验是一种通过增加冗余位使得码字中“1”的个数恒为奇数个或者偶数个的编码方式,是一种检错码,是不能纠错的。

奇偶校验分为三种:水平奇偶校验、垂直奇偶校验、水平垂直奇偶校验

eg:(红色的数字是校验位添加的数字,使得其中的1的个数始终未奇数(偶数)个)

原编码           奇校验          偶校验

0000              0000 1          0000 0

0010              0010          0010 1

1100              1100 1          1100 0

1010              1010 1          1010 0

如果发生奇数个位传输错误,name编码中的1的个数会发生变化,从而校验出错,要求重新传输数据,这种方式无法纠正错误。

 

 

海明码

      核心公式:2r ≥k+r+1

异或:1的个数为奇数为1,1的个数为偶数为0;
其中k为信息的个数,r为校验位的个数,那么我们怎样来确定校验位?

按照教材中的示例:
eg:

二进制码 101101100,求它的海明编码
1、信息为k=9;r的最小值为4,所以校验位为4

2、所以校验码的位数为13位,如何分配校验码位置和信息位?以及校验位的值为多少?

3、分配校验码的位置:校验位的位置一般为2^n(n≥0),针对此题来说就是1、2、4、8的位置上。

4、信息位的位置:除了校验码位,其余的从高到低依次存放。如图

5、R1、R2、R3、R4的数值如何确定?

想要确定校正位的数值,就首先必须知道哪些信息位需要校正位来校正,校正的原则:想要校正第几(i)位,则应该满足对应的

那几个校正位相加等于i。例如3=1+2;7=1+2+4(2的n次方相加)。

               

从上面的位置能知道每一个校验码参与的信息位,然后就是异或⊕(相同的两个数异或为0,不同的两个数为1)

          

R1=B3⊕B5⊕B7⊕B9⊕B11⊕B13=1⊕0⊕1⊕0⊕1⊕0=1;
根据上表和计算公式得出R1=1,R2=1,R3=0;R4=0;则把结果填入其中得到


纠错

把海明校验码中的第11位改为0,验证错误,并找出错误位。

R1=B3⊕B5⊕B7⊕B9⊕B11⊕B13=1⊕0⊕1⊕0⊕1⊕0=1

R2=B2⊕B3⊕B6⊕B7⊕B10⊕B11=1⊕1⊕1⊕1⊕1⊕0=1

R3=B4⊕B5⊕ B6⊕B7⊕B12⊕B13=0⊕0⊕1⊕1⊕0⊕0=0

R4=B8⊕B9⊕B10⊕B11⊕B12⊕B13=0⊕0⊕1⊕0⊕0⊕0=1

从高位往下写得到1101,即十进制的11,因此错误的位数为第11位。

展开阅读全文

没有更多推荐了,返回首页