上期我们介绍了汉明码的构造原理,这一期我们来看看汉明码是怎么实现“纠错”和“改正”的。
我们假设传输过程中第3位发生了错误,原本传输的数据为101101,现在收到的数据为101001.
这时,汉明码会检查每一组的“偶校验”:
对于第一组来说(1,3,5位为一组):1的个数为1个,奇数个,不再满足“偶校验”,我们可以据此推断这一组有位数发生了错误,但不确定是哪一位发生了错误。为了达到“偶校验”,我们需要补一个1。
同理,对于第二组来说(2,3,6位为一组):1的个数位1个,奇数个,不再满足“偶校验”,我们可以据此推断这一组有位数发生了错误,但不确定是哪一位发生了错误。为了达到“偶校验”,我们需要补一个1。
对于第三组来说(4,5,6位为一组),1的个数为2个,偶数个,那么这组数据没有发生错误,我们为这组补一个0。
其实,我们通过对第一组和第二组的检查就已经可以确定是哪一位出了问题,第一组和第二组都是有问题的,它们的共同位是第3位,那么我们可以断定是第3位出了问题。
本例中的数据位较少,可以很快就定位到发生传输错误的位数,但是当数据位比较多的时候,我们不会这么快得出结论,我们需要将每一组检查后补的数处理一下:
(1,3,5为一组)
(2,3,6为一组)
从下往上读补的数:011,它的十进制就是3,通过这样的计算,我们可以准确知道是第3位的数据发生了改变,我们对第3位数据进行取反操作,就可以将数据修改为正确的数据。是不是觉得很神奇呢?
文章作者:速易芯刘彦