データ伝送や保存の現場では、ノイズや媒体の劣化などによってビット誤りが起きることがあります。こうした誤りは、システムの信頼性を大きく損なう原因になり得ます。そこで重要になるのが「誤り訂正符号」です。中でもハミング符号は、比較的少ない冗長ビット(パリティビット)で、1ビット誤りの訂正まで行える代表的な方式として知られています。本記事では、ハミング符号の基本的な考え方から仕組み、活用されやすい場面、拡張方式、そして量子誤り訂正とのつながりまで、押さえておきたいポイントを整理します。
ハミング符号とは、データ伝送や保存の途中で起きる誤りを見つけたり直したりするための、誤り訂正符号(ECC: Error Correcting Code)の一種です。特に、1ビット誤りを訂正できる点が大きな特徴です。
ハミング符号では、元のデータ(情報ビット)に対して、誤り検出・訂正に使う冗長ビットを追加します。この冗長ビットは一般にパリティビットと呼ばれます。
ポイントは、パリティビットを「どこに置くか」と「どのビットを見て計算するか」がルール化されていることです。典型的には、パリティビットを2のべき乗の位置(1,2,4,8,…)に配置し、受信側でパリティチェックを行ってシンドローム(誤り位置を示す手がかり)を作ります。
ハミング符号は「(n,k)」の形で表されることが多く、kビットの情報をnビットに符号化します。代表例は次のとおりです。
| 種類 | 特徴 |
|---|---|
| ハミング(7,4)符号 | 4ビットの情報に3ビットの冗長を加えて7ビットにする。1ビット誤りの訂正が可能。 |
| ハミング(15,11)符号 | 11ビットの情報に4ビットの冗長を加えて15ビットにする。1ビット誤りの訂正が可能。 |
| 拡張ハミング符号(SECDED) | 全体パリティを追加して、1ビット訂正(SEC)+2ビット誤り検出(DED)を狙う構成。 |
どれを選ぶかは、「どの程度の誤りを想定するか」「冗長ビットをどこまで許容できるか(通信効率・容量効率)」によって変わります。
ハミング符号は、リチャード・W・ハミングによって提案された誤り訂正符号です。コンピュータや通信で「誤りは起こるもの」という前提に立ち、冗長性をうまく使って自動的に訂正する考え方は、その後のECC全体の発展にも大きく影響しました。
ハミング符号は「強力な万能選手」というより、軽量な誤り訂正としてハマる場面があるタイプの技術です。より強い誤り訂正が必要な回線や媒体では、BCH符号・リードソロモン符号・LDPC符号などが採用されることも多く、用途に応じた使い分けが重要です。
代表的な例が、サーバー向けのECCメモリです。一般に、1ビット誤りは自動訂正し、2ビット誤りは検出して異常扱いにする(SECDED)設計が多く、拡張ハミング符号の考え方が活きる場面です。媒体の微小な誤りを“なかったことにする”のではなく、“検出して扱いを変える”ことが信頼性につながります。
産業機器・車載・医療機器などでは、データの正確性が重要であり、かつ処理資源や実装制約が厳しいことがあります。そうした場面で、比較的軽量なECCとして検討されることがあります。
通信の現場では、誤りの特性(単発のビット誤りか、バースト誤りか、誤り率がどの程度か)によって採用方式が変わります。ハミング符号は、1ビット誤りの訂正が効く前提のところでは有力ですが、誤りが多い/塊で起きる環境では、別方式のほうが適することも珍しくありません。
エンコードの基本は「情報ビットにパリティビットを足して、規則に沿った符号語を作る」ことです。典型的には次のルールを使います。
この「対象となる位置」は、ビット位置を2進数で見たときに、該当する桁が1になる位置、という形で整理できます。
受信側は、受信した符号語に対してパリティチェックを行い、結果をまとめたものをシンドロームとして得ます。シンドロームが0なら整合しており、0以外なら「どこかが合っていない」状態です。
重要なのは、ハミング符号の設計上、1ビット誤りであればシンドロームが誤り位置に対応する形になり、該当ビットを反転することで訂正できる点です。
ここは誤解が起きやすいポイントなので、整理しておきます。
要するに、ハミング符号は「誤りが少ない前提で強い」方式で、誤りが増えると限界が見えます。用途に合うかどうかは、誤り率や誤りの出方(単発/バースト)で判断するのが現実的です。
ハミング距離は、2つのビット列を比べたときに、異なるビットの個数を表す指標です。たとえば「1011」と「1001」は1か所だけ違うので距離1です。
誤り訂正符号では、符号語同士の最小ハミング距離(最小距離)が性能に直結します。一般に、最小距離が d の符号は、
という形で整理できます。ハミング符号が1ビット誤り訂正に強いのは、この距離設計に基づいています。
ハミング符号はECCの出発点としても有名で、より強力な方式へ発展していきます。代表例は次のとおりです。
「誤りがどれくらい起きるか」「どんな形で起きるか」「遅延・計算量・冗長率をどうしたいか」に応じて、適した方式が選ばれます。
ハミング符号はハードウェアECCだけでなく、ソフトウェアでも扱えます。たとえば、軽量な整合性チェックや、リソース制約のある環境での簡易ECCなど、要件次第で採用の余地があります。ただし、通信プロトコルなどでは再送制御や暗号・認証との役割分担もあるため、「ECCを入れれば安全」という話にはならない点は押さえておきたいところです。
量子コンピュータでは、量子ビットが外乱に弱く、誤り訂正が実用化の鍵になります。量子誤り訂正は古典のECCと同じではありませんが、古典符号の考え方が土台になっているのは確かです。
たとえば、量子誤り訂正符号の中には、古典のハミング(7,4)符号の構造を取り入れたことで知られるものがあります(代表例としてSteane符号が挙げられます)。このように、ハミング符号の“発想”は、量子の世界でも別の形で受け継がれています。
近年は、通信やストレージの大規模化により、LDPC符号などの実用研究が加速しています。一方で、ハミング符号自体は「軽量・基本」の位置づけとして、教育・基礎設計・一部用途で今後も使われ続けるでしょう。まずは、ハミング符号でECCの考え方をつかみ、その上で要件に合う方式を選べるようになるのが現実的です。
ハミング符号は、情報ビットにパリティビットを付加し、受信側でシンドロームを使って誤り位置を推定することで、1ビット誤りを訂正できる誤り訂正符号です。特に、拡張ハミング符号(SECDED)の形にすると「1ビット訂正+2ビット検出」を狙えるため、メモリやストレージなど、信頼性が重要な場面で考え方が活きます。ただし、誤りが多い環境では別方式のほうが適することもあるため、誤りの特性と冗長率・計算量のバランスを見て使い分けることが大切です。
ハミング符号は、データ伝送や保存で起きる誤りを検知・訂正するための誤り訂正符号(ECC)の一種で、特に1ビット誤りの訂正ができる点が特徴です。
標準的なハミング符号は、1ビット誤りを確実に訂正できるように設計されています。
標準的なハミング符号では、2ビット誤りが起きると誤訂正につながる可能性があります。実務では全体パリティを追加した拡張ハミング符号(SECDED)を使い、2ビット誤りは検出して異常として扱う設計がよく採られます。
ハミング符号に全体パリティを追加し、1ビット誤りは訂正(SEC)、2ビット誤りは検出(DED)することを狙う構成です。
パリティビットは、受信側で整合性をチェックし、誤り位置を推定するための冗長情報です。これにより誤りの検知や訂正が可能になります。
受信データに対してパリティチェックを行った結果をまとめたもので、標準的なハミング符号では1ビット誤りなら誤り位置に対応する形になります。
2つのビット列を比べたときに異なるビットの個数を表す指標です。誤り訂正符号では、符号語同士の最小ハミング距離が検出・訂正性能を左右します。
k=4ビットの情報をn=7ビットに符号化することを意味します。冗長ビット(パリティビット)を加えて符号語を作ります。
軽量な誤り訂正が求められる場面で検討されます。特に拡張ハミング符号(SECDED)の考え方は、ECCメモリなど信頼性重視の設計で活きることがあります。
量子誤り訂正は古典ECCと同一ではありませんが、古典符号の考え方が土台になっています。古典のハミング(7,4)符号の構造を取り入れた量子誤り訂正符号が知られており、発想の面でつながりがあります。