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)を狙う構成。

どれを選ぶかは、「どの程度の誤りを想定するか」「冗長ビットをどこまで許容できるか(通信効率・容量効率)」によって変わります。

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

  • 冗長ビットが少なめでも、1ビット誤り訂正ができる
  • 仕組みが比較的わかりやすく、実装しやすい
  • 誤り訂正の入門としても、ECCの基本概念(パリティ、シンドローム、距離)を押さえやすい

ハミング符号の歴史的背景

ハミング符号は、リチャード・W・ハミングによって提案された誤り訂正符号です。コンピュータや通信で「誤りは起こるもの」という前提に立ち、冗長性をうまく使って自動的に訂正する考え方は、その後のECC全体の発展にも大きく影響しました。

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

ハミング符号は「強力な万能選手」というより、軽量な誤り訂正としてハマる場面があるタイプの技術です。より強い誤り訂正が必要な回線や媒体では、BCH符号・リードソロモン符号・LDPC符号などが採用されることも多く、用途に応じた使い分けが重要です。

データストレージ/メモリでの利用(ECC)

代表的な例が、サーバー向けのECCメモリです。一般に、1ビット誤りは自動訂正し、2ビット誤りは検出して異常扱いにする(SECDED)設計が多く、拡張ハミング符号の考え方が活きる場面です。媒体の微小な誤りを“なかったことにする”のではなく、“検出して扱いを変える”ことが信頼性につながります。

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

産業機器・車載・医療機器などでは、データの正確性が重要であり、かつ処理資源や実装制約が厳しいことがあります。そうした場面で、比較的軽量なECCとして検討されることがあります。

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

通信の現場では、誤りの特性(単発のビット誤りか、バースト誤りか、誤り率がどの程度か)によって採用方式が変わります。ハミング符号は、1ビット誤りの訂正が効く前提のところでは有力ですが、誤りが多い/塊で起きる環境では、別方式のほうが適することも珍しくありません。

ハミング符号の仕組み

ハミング符号のエンコーディング方法

エンコードの基本は「情報ビットにパリティビットを足して、規則に沿った符号語を作る」ことです。典型的には次のルールを使います。

  • パリティビットは 1,2,4,8,…(2のべき乗)の位置に置く
  • 各パリティビットは、対象となる位置のビットをある規則で集めて偶数/奇数パリティになるように決める

この「対象となる位置」は、ビット位置を2進数で見たときに、該当する桁が1になる位置、という形で整理できます。

ハミング符号のデコーディングと誤り訂正

受信側は、受信した符号語に対してパリティチェックを行い、結果をまとめたものをシンドロームとして得ます。シンドロームが0なら整合しており、0以外なら「どこかが合っていない」状態です。

重要なのは、ハミング符号の設計上、1ビット誤りであればシンドロームが誤り位置に対応する形になり、該当ビットを反転することで訂正できる点です。

誤り検出能力と限界

ここは誤解が起きやすいポイントなので、整理しておきます。

  • 標準的なハミング符号は、1ビット誤りを確実に訂正できる(SEC)。
  • ただし、2ビット誤りが起きると、シンドローム自体は0にならないことが多い一方、通常の「1ビット訂正デコーダ」にかけると誤訂正(間違って直したつもりになる)リスクがある。
  • そのため実務では、全体パリティを追加した拡張ハミング符号(SECDED)を使い、「1ビットは訂正、2ビットは検出して止める/再送する」といった運用に寄せることが多い。

要するに、ハミング符号は「誤りが少ない前提で強い」方式で、誤りが増えると限界が見えます。用途に合うかどうかは、誤り率や誤りの出方(単発/バースト)で判断するのが現実的です。

ハミング距離とは何か?

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

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

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

という形で整理できます。ハミング符号が1ビット誤り訂正に強いのは、この距離設計に基づいています。

ハミング符号に関する発展的トピック

ハミング符号を拡張した他の誤り訂正符号

ハミング符号はECCの出発点としても有名で、より強力な方式へ発展していきます。代表例は次のとおりです。

  • 拡張ハミング符号(SECDED)
  • BCH符号(複数ビットの訂正を設計可能)
  • リードソロモン符号(バースト誤りに強い)
  • LDPC符号(大規模通信で強い方式として普及)

「誤りがどれくらい起きるか」「どんな形で起きるか」「遅延・計算量・冗長率をどうしたいか」に応じて、適した方式が選ばれます。

ソフトウェア実装におけるハミング符号の利用

ハミング符号はハードウェアECCだけでなく、ソフトウェアでも扱えます。たとえば、軽量な整合性チェックや、リソース制約のある環境での簡易ECCなど、要件次第で採用の余地があります。ただし、通信プロトコルなどでは再送制御や暗号・認証との役割分担もあるため、「ECCを入れれば安全」という話にはならない点は押さえておきたいところです。

量子コンピュータとハミング符号の関係性

量子コンピュータでは、量子ビットが外乱に弱く、誤り訂正が実用化の鍵になります。量子誤り訂正は古典のECCと同じではありませんが、古典符号の考え方が土台になっているのは確かです。

たとえば、量子誤り訂正符号の中には、古典のハミング(7,4)符号の構造を取り入れたことで知られるものがあります(代表例としてSteane符号が挙げられます)。このように、ハミング符号の“発想”は、量子の世界でも別の形で受け継がれています。

研究動向と今後の可能性

近年は、通信やストレージの大規模化により、LDPC符号などの実用研究が加速しています。一方で、ハミング符号自体は「軽量・基本」の位置づけとして、教育・基礎設計・一部用途で今後も使われ続けるでしょう。まずは、ハミング符号でECCの考え方をつかみ、その上で要件に合う方式を選べるようになるのが現実的です。

まとめ

ハミング符号は、情報ビットにパリティビットを付加し、受信側でシンドロームを使って誤り位置を推定することで、1ビット誤りを訂正できる誤り訂正符号です。特に、拡張ハミング符号(SECDED)の形にすると「1ビット訂正+2ビット検出」を狙えるため、メモリやストレージなど、信頼性が重要な場面で考え方が活きます。ただし、誤りが多い環境では別方式のほうが適することもあるため、誤りの特性と冗長率・計算量のバランスを見て使い分けることが大切です。

よくある質問

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

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

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

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

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

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

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

ハミング符号に全体パリティを追加し、1ビット誤りは訂正(SEC)、2ビット誤りは検出(DED)することを狙う構成です。

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

パリティビットは、受信側で整合性をチェックし、誤り位置を推定するための冗長情報です。これにより誤りの検知や訂正が可能になります。

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

受信データに対してパリティチェックを行った結果をまとめたもので、標準的なハミング符号では1ビット誤りなら誤り位置に対応する形になります。

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

2つのビット列を比べたときに異なるビットの個数を表す指標です。誤り訂正符号では、符号語同士の最小ハミング距離が検出・訂正性能を左右します。

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

k=4ビットの情報をn=7ビットに符号化することを意味します。冗長ビット(パリティビット)を加えて符号語を作ります。

ハミング符号はどんな場面で使われやすいですか?

軽量な誤り訂正が求められる場面で検討されます。特に拡張ハミング符号(SECDED)の考え方は、ECCメモリなど信頼性重視の設計で活きることがあります。

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

量子誤り訂正は古典ECCと同一ではありませんが、古典符号の考え方が土台になっています。古典のハミング(7,4)符号の構造を取り入れた量子誤り訂正符号が知られており、発想の面でつながりがあります。

記事を書いた人

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