4-3海明码的纠错原理

4-3海明码的纠错原理

Content #

把 4 位数据位,分别记作 d1、d2、d3、d4。这里的 d,取的是数据位 data bits 的首字母。把 3 位校验位,分别记作 p1、p2、p3。这里的 p,取的是校验位 parity bits 的首字母。

从 4 位的数据位里面,拿走 1 位,然后计算出一个对应的校验位。这个校验位的计算用之前讲过的奇偶校验就可以了。比如,用 d1、d2、d4 来计算出一个校验位 p1;用 d1、d3、d4 计算出一个校验位 p2;用 d2、d3、d4 计算出一个校验位 p3。

这个时候,如果 d1 这一位的数据出错了,p1 和 p2 和校验的计算结果不一样。 d2 出错了,是因为 p1 和 p3 的校验的计算结果不一样;d3 出错了,则是因为 p2 和 p3;如果 d4 出错了,则是 p1、p2、p3 都不一样。当数据码出错的时候,至少会有 2 位校验码的计算是不一致的。

那倒过来,如果是 p1 的校验码出错了,那意味着只有 p1 的校验结果出错。所以校验码不一致,一共有 2^3-1=7 种情况,正好对应了 7 个不同的位数的错误。

海明码这样的纠错过程,有点儿像电影里面看到的推理探案的过程。通过出错现场的额外信息,一步一步条分缕析地找出,到底是哪一位的数据出错,还原出错时候的“犯罪现场”。

Viewpoints #

From #

50 | 数据完整性(下):如何还原犯罪现场?