

从编码形式上,存储工程师可以发现汉明码是一个校验很严谨的编码方式。在这个例子中,通过对4 个数据位的3 个位的3 次组合检测来达到具体码位的校验与修正目的(不过只答应一个位出错,两个出错就无法检查出来了,这从下面的纠错例子中就能体现出来)。在校验时则把每个汉明码与各自对应的数据位值相加,假如结果为偶数(纠错代码为0)就是正确,假如为奇数(纠错代码为1)则说明当前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位出了问题。 还是刚才的1101 的例子,正确的编码应该是1010101 ,假如第三个数据位在传输途中因干扰而变成了1,就成了1010111 。检测时,P1+D8+D4+D1 的结果是偶数4,第一位纠错代码为0,正确。P1+D8+D2+D1 的结果是奇数3,第二位纠错代码为1,有错误。P3+D4+D2+D1 的结果是奇数3,第三但纠错代码代码为1,有错误。那么具体是哪个位有错误呢?三个纠错代码从高到低排列为二进制编码110 ,换算成十进制就是6,也就是说第6 位数据错了,而数据第三位在汉明码编码后的位置正好是第6 位。 那么汉明码的数量与数据位的数量之间有何比例呢?上面的例子中数据位是4 位,加上3 位汉明码是7 位,而2 的3 次幂是8。这其中就存在一个规律,即2P≥P+D+1 ,其中P 代表汉明码的个数,D 代表数据位的个数,比如4 位数据,加上1 就是5,而能大于5 的2 的幂数就是3 (23=8,22=4)。这样,存储工程师就能算出任何数据位时所需要的汉明码位数:7 位数据时需要4 位汉明码(24>4+7+1),64 位数据时就需要7 位汉明码(27>64+7+1 ),大家可以依此推算。此时,它们的编码规也与4 位时不一样了。 另外,汉明码加插的位置也是有规律的。以四位数据为例,第一个是汉明码是第一位,第二个是第二位,第三个是第四位,1、2、4 都是2 的整数幂结果,而这个幂次数是从0 开始的整数。这样存储工程师可以推断出来,汉明码的插入位置为1(20)、2(21)、4(22)、8(23)、16(24)、32(25)…… 

新闻热点
疑难解答