ハミングコードとは
ハミングコードは、バイナリ伝送でエラーを検出および修正する方法です。 これは、検出ロジックを提供するアルゴリズムと同様に、チェックに使用されるシーケンスに追加の2進数を含めることで実現します。 このようなコードは、任意のビットシーケンスで2つのエラーを検出し、誤っている可能性のある1つのビットを修復できます。 最も一般的に参照されるハミングコードはHamming(7,4)として知られています。4は開始ビットの元の数を示し、7は追加のチェックビットが含まれた後のシーケンスのビットの総数を表します。
この手法の名前は、1950年にメソッドを公開した作成者であるRichard Hammingに由来します。ハミングコードの仕組みは、ビット列を取得し、パリティビットと呼ばれる追加のチェックビットをシーケンスに挿入することです。 チェックビットは常に2のべき乗の位置に挿入されるため、追加のパリティビットを含めることにより、任意の数のビットを検証できます。 これは、シーケンスに追加された最後のパリティビットが、シーケンスの最終位置以下の2のべき乗の位置になるまで続きます。
すべてのパリティビットが配置されている場合、残りの位置は実際のデータビットです。 4ビットの例では、ビット位置1、2、および4がパリティビットになり、位置3、5、6、および7がデータになります。 このシーケンスが確立されると、ハミングコードのロジックが機能します。
ハミングコードでは、シーケンスに追加された各パリティビットを使用して、自身を含むビット位置に近いビット位置の一部をチェックします。 位置1のパリティビットは、他のすべてのビット位置をチェックします。これは、本質的にシーケンス内のすべての奇数番号の位置です。 位置2の2番目のパリティビットは、位置2と3をチェックしてから、2つの位置をスキップし、さらに2つの位置をチェックし、さらに2つの位置をスキップします。 位置4にパリティビットがある場合、位置4〜7をチェックし、4つの位置をスキップし、さらに4つをチェックし、それ以降に進むという点で同様に動作します。 シーケンス内のすべてのパリティビットは、シーケンス全体を通してこの方法で続きます。
ハミングコードがエラーを検出して修正するプロセスは、各パリティチェックのチェックシーケンスのビットを加算することです。各ビットは偶数である必要があります。 7ビットの例を考えると、最初のパリティチェックでは、ビット1、3、5、7が加算されます。 合計が偶数の場合、パリティはチェックアウトされますが、合計が奇数の場合はエラーが発生します。 パリティチェックは重複しているため、このようなエラーが2つ表示されます。 偶数の合計が得られない2パリティビット位置が加算されると、修正が必要なビットが明らかになります。
7ビットのハミングコードの例では、位置番号5のビットが間違っていると考えてください。 位置1、3、5、および7のビットの合計は、4〜7の位置のビットの合計と同様に、奇数として出力されます。 これは、位置1および4のチェックビットのパリティチェックが失敗したことを示します。 1と4を加算すると、合計は5になります。これは、修正が必要な伝送の不正ビットの位置です。