2011-03-22 231 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.