海明码
- 一、什么是海明码
- 二、校验位的分布方式
- 1、奇偶校验
- 2、海明码校验位
- 三、检错原理
- 四、纠错原理
一、什么是海明码
首先来看一下百度的介绍:
海明码(Hamming Code)是一种具有检错和纠错能力的编码方式,由理查德·汉明(Richard Hamming)于1950年提出。它通过增加少数几个校验位,能够检测出两位同时出错的情况,也能检测出一位出错并自动恢复其正确值,这种自动纠错的能力是海明码的主要特点之一。海明码不仅具有检测错误的能力,还能指出错误的具体位置,从而为进一步的自动纠错提供了依据。
简单来说,如果海明码的一位或者两位数据位发生了错误,我们一定可以通过海明码的特性判断出来,如果是多位数据发生了错误,我们可能可以判断出来,如果只有一位发生错误,我们还可以定位出来具体的数据位。
二、校验位的分布方式
1、奇偶校验
在了解海明码之前,我们先简单了解奇偶校验,例如一个二进制数据:
思考一下,如果现在需要添加一个校验位,那么这个校验位应该填1还是填0呢?
如果是奇校验的话,我们需要保证所有数据位和校验位的值加起来是一个奇数。
如果是偶校验的话,我们需要保证所有数据位和校验位的值加起来是一个偶数。
2、海明码校验位
为什么要介绍奇偶校验?因为海明码校验位的确定就是根据奇偶校验来的,对于校验位,我们可以全部用奇校验来确定,也可以全部使用偶校验来确定,但是不可以混合使用,当你学完本文以后,再回来理解这句话就很清晰了。如果没有特别说明,那么海明码默认使用的就是偶校验,这是一个约定俗成的规定,我们只有知道海明码使用的是哪个校验方式才可以对数据进行检错和纠错。
还是用10001这个数据作为例子,下面将使用偶校验设计海明码,先看海明码的两个性质:
(1)校验位均在在2k上,例如1,2,4,8,16,32,64,128。
如果是数据是1000,那么8号数据位也是没有意义的,故只需要2位数据位,这样就不难理解,为什么有2k>k+m这个公式了,k是校验位的个数,m是数据位的个数。
(2)如果使用1、2、3、4…给海明码的码位标号,把号码转成二进制,那么第n位的二进制位是1的组合将满足偶校验,这个看文字不好理解,看下图就懂了。
三、检错原理
海明码的检错原理很简单,就是按照分组验证每一组是都否符合偶校验,符合那就可能没出错,不符合那就一定出错了。如果是一位或者两位出错了,那么一定可以被检测出来,这点可以自行验证,如果验证出来了,说明你已经彻底掌握海明码了!
下面通过例子理解一下一位出错的情况,例如10001的海明码011000011变成了011000111,再次查看各组的偶校验情况,发现含有7号元素的组都不符合偶校验了。
四、纠错原理
不难可以推论出分组的规律,1、2、4、8、16、32、64、128、256…分别代表第一组、第二组、第三组、第四组、第五组、第六组…等等,其实就是二进制的每一位代表一组,可以简单的通过编号就可以看出一个数属于哪几个组的了。
那么加入只有一个码位发生了错误,它所在所有的组都将不符合偶校验,例如3号出错,1、2组不符合偶校验,9号出错,1、4组不符合偶校验。
现在我们反过来推论,假如在只有一个码位发生了错误的前提下,某一个码位所在的所有分组都不符合偶校验,那么这个码位就是出错的码位了。
当然啊,这是在只有一个码位发生了错误的前提下才成立的,多个码位发生了错误的话是没办法纠错的,并且,有极小的概率,多个码位发生错误时,通过海明码无法校验出来,因为无法排除发生错误后各组的偶校验仍然成立的情况。
至此,海明码的基础原理与应用就学完喽
加油呀!兄弟们!!!
感谢观看,点个赞支持一下吧!