海明码的目的是检验一位出错以及错在哪里,对于两位以上的错误是不能检验的;他是在奇偶校验码的基础上发展来的;
海明码和奇偶校验码;预先定义该段二进制数据的逻辑运算结果,通过引入额外的校验位,根据有效位的运算结果赋值保证(即使不同的二进制数据)最终的逻辑运算结果为定值。此种状态可以一直使用,
只有这样发出方与传送方才能预先定义二进制数据的逻辑运算结果.
这样当一位发生错误时,整个的逻辑运算结果就会改变;接收方的机器就会意识到错误,
奇偶校验码局限性:只能检验一位错误,不能纠错,对于偶数位的错误不能检验;
海明码:
海明码本质就是这张图:将原有效位进行分组,分组检验,在对整体进行检验;
分组规律:有效位同时处在不同的组里,检验位只在一个组里,
检验原理:由于组与组之间有交集,当有多个组出错时,错误的地方就在组与组之间的交集里,如果一组出错,说明是检验位出错;
出错位数计算:将各组逻辑运算结果累计得到的结果就是类错的位数;
分组实现:我们将检验位放在 2^i的位置,这样检验位位数的二进制就一定只在最高位有一个1,其余位全是0,而其他位一定存在多个1,根据权位为一的标准来分组,有效位有多个一,会同时在多个集合里,而检验位只有一个1,只在一个集合里;而且每一位一定有1,不会遗漏;
校验码赋值:
接着我们就可以按照奇偶校验码的逻辑来分组对检验码进行赋值0或一;
检验:
最终送到机器里进行检验,如果检验结果错误,将最终各个组的逻辑运算结果累积起来就是出错的位置,修改即可;(有检验码预先定义好每组的逻辑运算结果,同时另外一个机器默认结果,那么当结果不对时就出错了;)
问题:当有两个位出错时,每个组逻辑运算的结果所对应的位不是正确答案,
办法:此时要对对整个二进制数据进行逻辑检验,方法是同样预先定义一个检验位,这个检验位并不在之前的位里,如果整个运算结果为真,局部为假,说明出现了偶数位的错误,重传数据,如果整个为假,局部为假,那就是只出现了奇数位的错误;修改,逻辑运算结果累积起来的二进制位所对应的数据,
局限性:只能修纠正一位错误,识别两位错误,错误多时也不起作用;