校验码及海明码(汉明码)

首先,我们要知道“何为校验码”?

一、校验码

1、校验码

是指能够发现或能够自动纠正错误的数据编码,也称作检错纠错码。原理是通过增加一些冗余码,来检验或纠错编码。
通常某种编码有许多码字构成,任意两个合法码字之间最少变化的二进制位数,称为数据校验码的码距,如 1100 和 1101 之间的码距为 1,因为只有最低位翻转了;而 1001 和 0010 之间的码距为 3,因为只有 1 位没有变化。
对于码距不小于 2 的数据校验码,开始具有检错的能力。码距越大,检错纠错的能力越强,而且检错能力总是大于等于纠错能力。
常用的校验码有奇偶校验码、海明校验码和循环冗余校验码。

2、奇偶校验码

概念:

  奇偶校验码是奇校验码偶校验码的统称. 它们都是通过在要校验的编码上加一位校验位组成.

校验方法:

  如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个

分类:

  1. 水平奇偶校验码:对每一个数据的编码添加校验位,使信息位与校验位处于同一行

例子:

原编码奇校验偶校验
00000000 10000 0
00100010 00010 1
11001100 11100 0
10101010 11010 0

当原编码在传输、储存的过程中发生了误码,1的数量就会改变,然后就能校验出该过程出现了错误。

  1. 垂直奇偶校验码:把数据分成若干组,一组数据排成一行,再加一行校验码. 针对每一行列采用奇校验 或 偶校验

缺点:
  1. 只能检测出奇数位出错. 如果发生偶数位错误就无法检测

  设原编码为0000,传输的过程中变成了1001。如果使用奇校验,原编码是00001,传输过后会变成10011,1仍然是奇数个,无法校验;如果使用偶校验,原编码是00000,传输过后会变成10010,1仍然是偶数个,同样无法校验。

  1. 奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码。

  校验过程中只知道1的数量发生变化,对于哪个地方发生变化无从知道。

二、海明码

实现原理:

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

两个码组对应位上数字的不同位的个数称为码组的距离,简称码距

例:

这两个二进制码中,有三个不相同的位置,所以码距为3.

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

海明码举例:

例子:

要计算原始信息位为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。

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

  • 校验码1(位置1):3,5,7,9,11,13
  • 校验码2(位置2):3,6,7,10,11
  • 校验码3(位置4):5,6,7,12,13
  • 校验码4(位置8):9,10,11,12,13

注意:后面的数字串是位置的下标,不是值,值还是0或1。

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

  • 校验码1(位置1):1 xor 0 xor 1 xor 0 xor 1 xor 0 = 1
  • 校验码2(位置2):1 xor 1 xor 1 xor 1 xor 1 = 1
  • 校验码3(位置4):0 xor 1 xor 1 xor 0 xor 0 = 0
  • 校验码4(位置8):0 xor 1 xor 1 xor 0 xor 0 = 0


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值