2011-03-22 238 views
2

我对计算汉明码有点困惑。在Wikipedia article它是写:计算汉明码

校验位1覆盖所有比特位置 ,其具有至少显著位 组:位1(奇偶位本身),3, 5,7,9,等。

如何才能获得包含该值的位的奇偶校验?

做我的理解是正确的,是根据第一奇偶校验位以上的文章应该被计算为:

parity_bit_1 = parity_bit_1 xor data_1 xor data_2 xor data_4 xor data_5 xor data_7 ... 

然而,在某些其他来源(如joel.neely的回答this question)是指说计算方式如下:

parity_bit_1 = data_1 xor data_3 xor data_5 xor data_7 xor data_9 ... 

那么,该怎么做呢?

回答

2

这意味着什么:对于每个k,下面的东西都是零:索引有k位的所有位的异或位。 (您的位具有索引1,2,...,2^n-1)。

实际数据进入其索引具有多于一个位集的位中。

然后,您可以使用奇偶校验约束条件计算所需的2位索引位的值:每个约束条件恰好包含一个索引为2的幂的位,并且索引为2的幂的每个位恰好出现在一个约束中。

因此,例如,考虑n = 3的情况。你有2^3-1 = 7位的代码;其中3个是奇偶校验位,即1,2,4位。其他指标3,5,6,7是您感兴趣的数据。

您选择位1,2,4中的内容以确保bit1异或位3异或位5异或位7 = 0和bit2 XOR bit3 XOR bit6 XOR bit7 = 0和bit4 XOR bit5 XOR bit6 XOR bit7 = 0。

因此,例如,如果您的消息是0110,那么您将发送?,?,0,?,1, 1,0。首先 ?有?+ 0 + 1 + 0 = 0,因此必须是1.第二?有?+ 0 + 1 + 0 = 0,因此也必须是1.第三?有?+ 1 + 1 + 0 = 0因此必须为0.所以你发送的是1100110.