IT用語集

ハミング符号とは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

データ伝送や保存の現場では、ノイズや媒体の劣化などによってビット誤りが発生することがあります。こうした誤りは、システムの信頼性を損なう要因になり得ます。そこで重要になるのが「誤り訂正符号」です。中でもハミング符号は、比較的少ない冗長ビット(パリティビット)で、1ビット誤りの訂正まで行える代表的な方式として知られています。本記事では、ハミング符号の基本的な考え方や仕組み、利用されやすい場面、拡張方式、さらに量子誤り訂正との関係まで、押さえておきたいポイントを整理します。

ハミング符号とは何か

ハミング符号とは、データ伝送や保存の途中で生じる誤りを検出・訂正するための、誤り訂正符号(ECC: Error Correcting Code)の一種です。特に、1ビット誤りを訂正できる点が特徴として挙げられます。

ハミング符号の基本的な仕組み

ハミング符号では、元のデータ(情報ビット)に対して、誤り検出や訂正に用いる冗長ビットを追加します。この冗長ビットは一般にパリティビットと呼ばれます。

特徴的なのは、パリティビットの配置位置と、どのビットを対象に計算するかがあらかじめ規則として定められている点です。典型的には、パリティビットを2のべき乗の位置(1、2、4、8…)に配置し、受信側でパリティチェックを行ってシンドローム(誤り位置を示す手がかり)を求めます。

  1. 送信側は、情報ビットにパリティビットを加えて符号語を生成する(エンコード)。
  2. 受信側は、同じ規則に基づいてパリティを検査し、シンドロームを計算する(デコード)。
  3. シンドロームが0でなければ、誤り位置を推定できる(1ビット誤りであれば特定できる)。
  4. 誤りと推定した位置のビットを反転し、元のデータを復元する。

ハミング符号の種類と特徴

ハミング符号は「(n,k)」の形で表されることが多く、kビットの情報をnビットに符号化します。代表的な例は次のとおりです。

種類特徴
ハミング(7,4)符号4ビットの情報に3ビットの冗長を加えて7ビットにする。1ビット誤りの訂正が可能。
ハミング(15,11)符号11ビットの情報に4ビットの冗長を加えて15ビットにする。1ビット誤りの訂正が可能。
拡張ハミング符号(SECDED)全体パリティを追加し、1ビット訂正(SEC)と2ビット誤り検出(DED)を行う構成(例:ハミング(7,4)に全体パリティを加えた(8,4)など)。

どの方式を選ぶかは、想定する誤りの頻度や種類、冗長ビットをどこまで許容できるか(通信効率や容量効率)によって決まります。

ハミング符号が使われる理由

  • 冗長ビットが比較的少なくても、1ビット誤りの訂正が可能
  • 仕組みが単純で、実装や理解がしやすい
  • ECCの基本概念(パリティ、シンドローム、距離)を把握する教材としても適している

ハミング符号の背景

ハミング符号は、計算機や通信の分野で「誤りは避けられない」という前提に立ち、冗長性を利用して自動的に訂正する考え方を具体化した方式です。この発想は、その後の誤り訂正符号全体の発展にも影響を与えました。

ハミング符号の実際の適用例

ハミング符号は万能な方式というより、軽量な誤り訂正が求められる場面に向いた技術と位置づけられます。より高い訂正能力が必要な場合には、BCH符号やリードソロモン符号、LDPC符号などが選ばれることも多く、用途に応じた使い分けが前提になります。

データストレージやメモリでの利用

代表例として挙げられるのが、サーバー向けのECCメモリです。一般的には、1ビット誤りは自動訂正し、2ビット誤りは検出して異常として扱う(SECDED)設計が採られます。小さな誤りを黙って見逃すのではなく、検出結果に応じて処理を分ける点が、信頼性向上につながります。

組み込み機器や制御系での利用

産業機器や車載機器、医療機器などでは、データの正確性が重要である一方、処理能力や実装規模に制約があります。こうした条件下で、比較的軽量な誤り訂正としてハミング符号が検討されることがあります。

通信システムでの位置づけ

通信では、誤りが単発で起きるのか、連続して発生するのかといった特性によって適切な方式が変わります。ハミング符号は、単発のビット誤りを想定した環境では有効ですが、誤りが多発する回線やバースト誤りが支配的な場合には、別の方式が適することもあります。

ハミング符号の仕組み

エンコーディングの考え方

エンコードでは、情報ビットにパリティビットを加え、規則に沿った符号語を作成します。一般的なルールは次のとおりです。

  • パリティビットを1、2、4、8…といった2のべき乗の位置に配置する
  • 各パリティビットについて、対象となるビット群を集め、偶数または奇数パリティになるよう値を決める

対象となるビットは、ビット位置を2進数で表した際に、対応する桁が1になるかどうかで整理されます。

デコーディングと誤り訂正

受信側では、符号語に対してパリティチェックを行い、その結果をまとめたものをシンドロームとして求めます。シンドロームが0であれば整合しており、0以外の場合はどこかに不整合があることを示します。

ハミング符号では、設計上、1ビット誤りであればシンドロームが誤り位置に対応するため、そのビットを反転することで訂正が可能です。

誤り検出能力と限界

誤解されやすい点として、次の点を整理しておく必要があります。

  • 標準的なハミング符号は、1ビット誤りを確実に訂正できる。
  • 2ビット誤りが発生した場合、通常の1ビット訂正デコーダでは誤訂正が起きる可能性がある。
  • そのため実務では、全体パリティを加えた拡張ハミング符号(SECDED)を用い、2ビット誤りは検出して処理を中断または再送する運用が採られることが多い。

ハミング符号は、誤りが少ない前提で効果を発揮する方式であり、誤り率や誤りの出方を踏まえて採用可否を判断することが重要です。

ハミング距離

ハミング距離とは、2つのビット列を比較したときに異なるビットの個数を指します。たとえば「1011」と「1001」は1か所だけ異なるため、距離は1です。

誤り訂正符号では、符号語同士の最小ハミング距離が性能に直結します。最小距離をdとすると、

  • d-1ビットまでの誤りを検出できる
  • ⌊(d-1)/2⌋ビットまでの誤りを訂正できる

と整理できます。標準的なハミング符号の最小距離は3であり、1ビット訂正に対応します。拡張ハミング符号では全体パリティを追加することで最小距離が4となり、1ビット訂正と2ビット検出が可能になります。

発展的な話題

他の誤り訂正符号との関係

ハミング符号は、より強力な誤り訂正符号へ発展する際の基礎として位置づけられます。代表的な方式には、拡張ハミング符号、BCH符号、リードソロモン符号、LDPC符号などがあります。

誤りの頻度や形態、許容できる遅延や計算量、冗長率といった条件に応じて、適切な方式が選択されます。

ソフトウェア実装での利用

ハミング符号はハードウェアだけでなく、ソフトウェアによる実装も可能です。軽量な整合性チェックや、リソース制約のある環境での簡易的な誤り訂正など、用途によっては採用されることがあります。ただし、再送制御や暗号、認証との役割分担を考慮し、「誤り訂正を入れれば安全になる」といった理解にならないよう注意が必要です。

量子誤り訂正との関係

量子コンピュータでは、量子ビットが外乱に弱く、誤り訂正が実用化の鍵とされています。量子誤り訂正は古典の誤り訂正符号と同一ではありませんが、誤りを検出し、状態を復元するという考え方は共通しています。

古典のハミング(7,4)符号の構造を応用した量子誤り訂正符号も知られており、ハミング符号の発想は量子分野でも別の形で活かされています。

まとめ

ハミング符号は、情報ビットにパリティビットを加え、受信側でシンドロームを用いて誤り位置を推定することで、1ビット誤りを訂正できる誤り訂正符号です。拡張ハミング符号(SECDED)とすることで、1ビット訂正と2ビット誤り検出を組み合わせた運用が可能になり、メモリやストレージなど信頼性が求められる場面で考え方が活かされます。一方で、誤りが多い環境では他方式が適する場合もあるため、誤りの特性と冗長率、計算量のバランスを見て使い分けることが重要です。

よくある質問

ハミング符号とは何ですか?

ハミング符号は、データ伝送や保存で生じる誤りを検出・訂正するための誤り訂正符号(ECC)の一種で、特に1ビット誤りの訂正が可能な点が特徴です。

ハミング符号は何ビットの誤りを訂正できますか?

標準的なハミング符号は、1ビット誤りを確実に訂正できるよう設計されています。

2ビット誤りはどう扱われますか?

標準的なハミング符号では、2ビット誤りが起きると誤訂正につながる可能性があります。実務では、全体パリティを加えた拡張ハミング符号(SECDED)を用い、2ビット誤りは検出して異常として扱う設計が一般的です。

拡張ハミング符号(SECDED)とは何ですか?

ハミング符号に全体パリティを追加し、1ビット誤りは訂正、2ビット誤りは検出する構成を指します。

パリティビットは何のために入れるのですか?

パリティビットは、受信側で整合性を確認し、誤り位置を推定するための冗長情報です。

シンドロームとは何ですか?

受信データに対してパリティチェックを行った結果をまとめたもので、1ビット誤りであれば誤り位置に対応する値になります。

ハミング距離とは何ですか?

2つのビット列を比較したときに異なるビットの個数を表す指標です。

ハミング(7,4)符号の「(7,4)」は何を意味しますか?

4ビットの情報を7ビットに符号化することを意味し、冗長ビットを加えて符号語を作成します。

ハミング符号はどのような場面で使われますか?

単発のビット誤りを想定した環境で、軽量な誤り訂正が求められる場合に検討されます。

量子コンピュータとハミング符号は関係がありますか?

量子誤り訂正は古典ECCとは異なりますが、誤りを検出・訂正するという考え方の面で共通点があります。古典のハミング符号の構造を応用した量子誤り訂正符号も知られています。

記事を書いた人

ソリトンシステムズ・マーケティングチーム