奇偶校验与海明校验

原文来源:https://baijiahao.baidu.com/s?id=1594263251060755624&wfr=spider&for=pc

.为什么要有校验码?

        因为在数据存取和传送的过程中,由于元器件或者噪音的干扰等原因会出现错误,这个时候我们就需要采取相应的措施,发现并纠正错误,对于错误的检测和校正,大多采取“冗余校验”的思想,即除原数据外,额外增加若干位编码,这些新增的代码称为校验位。

.数据是如何校验的?

  • 输入的数据m经过f得到p校验位。
  • 数据m和校验位一起通过存储器或传输线路,分别得到m'和p',这两者可能和m,f相同,也可能由于传输储存发生问题而不同。
  • 由数据m'再次经过f得到校验位p'',比较p''和p',从而得出是否出错,输出对应的信息,如何比较,会在下面的对应校验码中给出。

三、码距

若干位代码组成的一个字称为码字,而两个码字具有不同代码的位数为这两个码字的距离,而码制里各种码字间最小的距离称为码距

例如:8421码,1001和0000,有两位不同,所以距离是2,而0010和0011的距离为1,是最小的距离,故8421码码距为1。

码距有什么用呢?答案是码距和这种类型的码的检错,纠错能力有关。

例如:8421码,由于码距是1,无检错,纠错能力,比如数据0000,如果其中一位变化,变成0001,那么,这个数据仍然是合法的。

四、奇偶校验码

  • 无论数据位多少位,校验位只有一位
  • 数据位和校验位一共所含的1个数为奇数,称为奇校验
  • 数据位和校验位一共所含的1个数为偶数,称为偶校验

例如:发送一组8位二进制数,假定第一位为奇偶校验位,后七位为数据位,采用奇校验,则:

1>当发送数据是b'0000111时,发送数据中的1有3个,为奇数,此时校验位则为0,实际发出去的数据就b'000000111;
2>当发送数据是b'0000110时,发送数据中的1有2个,为偶数,此时校验位则为1,实际发出去的数据就b'100000110;
         接收端收到这组二进制数据后,则校验“1”的个数是否为奇数,从而确定传输代码的正确性。

五、海明校验码
1.引入

        在了解了奇偶校验码之后,我们可以稍稍做下思考,既然奇偶校验码具有一定的局限性,也就是只能检测奇数的错误,并且不能改正错误,这也就意味着数据一旦传输错误,我们必须要重新上传,那么,我们有办法确定错误发生的位置么?只要确定了错误发生的位置,改正其实就是取反。

2.原理
        在m个数据位之外加上k个校验位,从而形成一个m+k位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

须知:

  • 海明校验码是放在2的幂次位上的,即“1,2,4,8,16,32······”;
  • 信息位为m的原始数据,需要加入k位的校验码,它满足m+k+1<2^k;

3.例子:

要计算原始信息位为101101100的海明校验码。
第一步:先用m+k+1<2^k计算出校验位:9+k+1 <2^k→k=4,即校验位为4位。
第二步:海明校验码是放在2的幂次位上,所以插在位置1,2,4,8中。

第三步:计算校验的值

 用到的校验码是看当前位置由哪几个 校验码所在的位置的和。
       
例如,校验码的位置是1,2,4,8。位置3= 1 + 2,所以位置3用到的校验码是1和2;位置7 = 1 + 2 + 4组成的,所以位置7用到的校验码是1,2和4。

将校验码校验的位置记录下来:

校验码P1(H1):3,5,7,9,11,13
校验码P2(H2):3,6,7,10,11
校验码P3(H4):5,6,7,12,13
校验码P4(H8):9,10,11,12,13

做异或运算(相同时为0,不同时为1):

校验码P1(H1):1 xor 0 xor 1 xor 0 xor 1 xor 0 = 1
校验码P2(H2):1 xor 1 xor 1 xor 1 xor 1 = 1
校验码P3(H4):0 xor 1 xor 1 xor 0 xor 0 = 0
校验码P4(H8):0 xor 1 xor 1 xor 0 xor 0 = 0

第四步:最终的信息

位置

1

2

3

4

5

6

7

8

9

10

11

12

13

最终信息位

1

1

1

0

0

1

1

0

0

1

1

0

0

4.海明校验码判断修复错误

因为校验码有4位,我们这里再申明三位码分别用S1、S2、S3、S4表示。

S1= P1H3H5H7⊕H9⊕H11⊕H13
S2= P3H3H6H7⊕H10⊕H11
S3= P3H5H6H7⊕H12⊕H13
S4= P4H9H10H11⊕H12⊕H13

假设 信息传输前1110 0110 0110 0 –>传输后1100 0110 0110 0

S1=1⊕0⊕0⊕1⊕0⊕1⊕0=1
S2=10111⊕1=1
S3=0⊕0⊕1⊕1⊕0⊕0=0
S4=0⊕0⊕1⊕1⊕0⊕0=0

S4S3S2S1=0011 说明第三位出错。

猜你喜欢

转载自blog.csdn.net/huhuandk/article/details/89393972