汉明码是用来校验存储器传输数据是否正确的一种编码方式。
汉明码具有一位纠错能力。
汉明码需要在原有数据位上增加一定数据位进行校验。
设数据为 n 位,则需要增加 k 位校验位。公式:2^k>=n+k+1
数据在计算机中用二进制表示,故将汉明码增加在2^k位置上使得每组测试数据中该位置一样。
故得测试小组:
C1: 1,3,5,7,9,11……位 (符合XXXX1)
C2:2,3,6,7,10,11……位(符合XXX1X)
C3:4,5,6,7,12,13……位(符合XX1XX)
略……
例:传入数据是0101,如何设计汉明码以及如何校验数据是否正确?(偶校验)
解:
首先,普及一下奇偶校验的知识。
奇校验是每组测试小组上的各个数是1的个数是奇数,就是C1:第1位^第3位^第5位……=1;
偶校验则为偶数。
由此可得,先通过公式计算出要增加的汉明码位数为三位。分别是A,B,D;
(汉明码)位置号:A,B,C,D,E,F,G
已知C=0,E=1,F=0,G=1;
所以可以求得,A=0,B=1,C=0;
最终结果为:0100101
纠错:如果传入后得到数据为0100111
发现:C1小组1的数量为偶数
C2小组1的数量为奇数
C3小组1的数量为奇数
易知:C1的A,C,E,G无错。C2与C3错了一位,而F位相同,故F为出错。可改正为0100101。