Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

ハミング符号(ハムミングゴウ)とは | 意味や読み方など丁寧でわかりやすい用語解説

ハミング符号(ハムミングゴウ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ハミング符号 (ハミングゴウ)

英語表記

Hamming code (ハミングコード)

用語解説

ハミング符号とは、デジタルデータ伝送や記録の際に発生する誤りを検出し、場合によってはその誤りを訂正する能力を持つ、非常に重要な誤り訂正符号の一種である。アメリカの数学者リチャード・ハミングによって考案され、その効率性と信頼性から、情報技術の多くの分野で広く活用されている。具体的には、コンピュータのメモリ(RAM)やデータストレージデバイス、ネットワーク通信など、データの正確性が極めて重要となる場面で、情報の整合性を確保するための基盤技術として機能している。

デジタルデータは0と1のビット列で構成されるが、外部からのノイズ、電磁干渉、記憶媒体の物理的欠陥、あるいは宇宙線のような予期せぬ要因によって、これらのビットが反転(0が1に、1が0に変化)することがある。ハミング符号の主要な目的は、このようなビット誤りが発生した場合でも、元のデータを自動的に特定し、修正することで、データの破損を防ぎ、信頼性の高い情報処理を可能にすることである。

ハミング符号の基本的な仕組みは、元のデータビットに対して「パリティビット(冗長ビット)」と呼ばれる検査用の追加ビットを付加することにある。このパリティビットは、データビットの特定のグループの排他的論理和(XOR)を計算した結果として生成され、データに何らかの規則的な関係性を持たせる。送信側では、このデータビットとパリティビットを組み合わせた「符号語」を生成し、これを伝送または記録する。受信側では、受け取った符号語に対して同様のパリティチェックを再度実行し、その結果から誤りの有無、そして誤りがあった場合はその発生位置を特定する。

詳細に説明すると、ハミング符号はパリティビットを配置する位置と、それらが監視するデータビットのグループに工夫が凝らされている。一般的に、パリティビットは符号語の中で2のべき乗の位置(1番目、2番目、4番目、8番目など)に配置されることが多い。例えば、最も基本的なハミング符号の一つである(7,4)ハミング符号は、4ビットのデータに3ビットのパリティビットを追加し、合計7ビットの符号語を形成する。この場合、1番目、2番目、4番目の位置にパリティビットが配置され、残りの3番目、5番目、6番目、7番目の位置にデータビットが割り当てられる。

各パリティビットは、以下のルールに基づいて特定のビットグループを監視する:

  • P1(1番目の位置のパリティビット)は、1, 3, 5, 7番目のビットの排他的論理和が0になるように決定される。
  • P2(2番目の位置のパリティビット)は、2, 3, 6, 7番目のビットの排他的論理和が0になるように決定される。
  • P4(4番目の位置のパリティビット)は、4, 5, 6, 7番目のビットの排他的論理和が0になるように決定される。

この規則に従ってパリティビットが計算され、送信される符号語は常にこれらの条件を満たす状態となる。

受信側では、この7ビットの符号語を受け取った際に、上記と同じ計算を再度実行して、三つの「シンドロームビット」を生成する。

  • S1 = ビット1 ^ ビット3 ^ ビット5 ^ ビット7
  • S2 = ビット2 ^ ビット3 ^ ビット6 ^ ビット7
  • S4 = ビット4 ^ ビット5 ^ ビット6 ^ ビット7 (ここで「^」は排他的論理和を意味する。)

もし受け取った符号語に誤りがなければ、S1, S2, S4のすべてが0になる。しかし、もし単一のビット誤りが発生した場合、これらのシンドロームビットのうち少なくとも一つが1となる。このS4 S2 S1の順に並べた3ビットの組み合わせ(これを「シンドローム」と呼ぶ)が、誤りが発生したビットの位置をバイナリ形式で正確に指し示す。例えば、シンドロームが011(S4=0, S2=1, S1=1)であれば、これはバイナリで3を意味し、3番目のビットに誤りがあることを示す。受信側は、この情報に基づいて該当するビットを反転させることで、元のデータを完全に復元できる。

ハミング符号は、このメカニズムにより「単一ビット誤り」を確実に検出し、かつ訂正する能力を持つ。また、「二重ビット誤り」に関しては、その発生を検出することはできる。例えば、ある特定のハミング符号では、単一ビット誤りのシンドロームと二重ビット誤りのシンドロームが異なるパターンを持つように設計されており、0以外のシンドロームが検出されたが、それが既知の単一ビット誤りのパターンと一致しない場合、二重ビット誤りの可能性が高いと判断できる。しかし、二重ビット誤りの正確な位置を特定し、訂正することはできない。もし訂正を試みると、誤ったビットを修正してしまう「誤訂正」につながる可能性があるため、通常は検出に留め、訂正は行わないか、より上位の層で再送要求などの処理を行う。

ハミング符号の最大の利点は、比較的少ない冗長ビット(パリティビット)で、優れた誤り検出・訂正能力を発揮できる点にある。これにより、データ伝送のオーバーヘッド(冗長ビットによるデータ量の増加)を最小限に抑えつつ、システムの信頼性を大幅に向上させることが可能になる。

その応用範囲は非常に広い。最も身近な例の一つが、サーバーや高性能コンピュータで利用されるECC(Error-Correcting Code)メモリである。DRAM(Dynamic Random Access Memory)では、宇宙線やアルファ粒子といった外部要因により、ごく稀にビット反転(ソフトエラー)が発生することがあるが、ハミング符号を利用したECCメモリは、これらの単一ビットのソフトエラーを自動的に検出し、訂正することで、システムの安定稼働とデータ破損の防止に大きく貢献している。また、一部のデータストレージデバイス(例えば、エンタープライズ向けSSDコントローラの一部)や、データ通信の信頼性が極めて重要視される衛星通信、航空宇宙分野、軍事通信などでも利用されている。

しかし、ハミング符号にも限界は存在する。前述の通り、2ビット以上のランダムな誤りに対しては、訂正能力が著しく低下するか、誤りを検出できない、あるいは誤った訂正を行ってしまうリスクがある。特に、データ伝送路において複数のビットが連続して誤る「バースト誤り」が発生した場合、ハミング符号だけでは効果的な対応が難しい。このような状況に対応するためには、リード・ソロモン符号など、バースト誤り訂正に特化したより複雑で強力な誤り訂正符号が使用される。

結論として、ハミング符号はデジタルシステムの信頼性を確保するための、基礎的かつ極めて効果的な手段である。システムエンジニアを目指す者にとって、データの信頼性保証は不可欠な知識であり、ハミング符号の原理と応用を深く理解することは、堅牢なシステム設計やトラブルシューティングを行う上で、大いに役立つだろう。

関連コンテンツ

関連IT用語