首先对于我们所熟知的奇偶校验,对于偶校验来说:
我们往最前面添加一个校验位,但是一个校验位只能表示两种状态,即对或错
现在我们希望能够知道更多的信息,即要增加校验位的个数
我们可以将信息位进行分组,比如要分成k组,每一组中都要有一个校验码;
则我们就有了校验码:P1,P2,P3.....Pk。
对比原先我们在偶校验中只有1个校验码,只能表示2^1种状态
现在我们有k个校验码,可以表示2^k中状态。
我们现在希望,这2^k种状态可以表示出如果海明码错了一位,这个一位到底在哪里,以便可以进行修正
于是因为我们海明码有n+k位(n位信息位,k位校验位),错了的那一位可能出现在n+k位中任何一位,同时还可能没有错误
于是有n+k+1种状态(注意这个是在只错了一位的基础上进行讨论的)
所以我们有公式:2^k>=n+k+1;
上面的编排可以使分的组的元素之间有如下关系:
其中每个圈是分的组,下面的S1,S2,S3分别是分的组,
上面的例子中是P2在传送的过程中发生了变化,即从1变成了0,于是S1,S2,S3重新进行偶校验时,发现了错误,同时仔细观察S1,S2,S3组成的序列
010其二进制正好表示2这个数,即
在上面的下标中H2发生了变化,即P2发生了变化
但是如果面对两个位发生了变化,而不是只有一位发生了变化,这个时候海明码的就错能力就不行了,而且会发生错误
于是我们如何判断到底是两个位发生了变化,还是只有一位发生了变化?
如果三位及以上发生的错误用海明码的一位错误纠正编码法就完蛋了。
标签:校验位,明码,校验,发生,一位,校验码 From: https://www.cnblogs.com/cilinmengye/p/16989323.html