【はみんぐふごう】

ハミング符号 とは?

最終更新:
💡 エラーを見つけるだけじゃなく「直す」までやってくれる符号

データ中の1ビットの誤りを自動的に検出・訂正できる誤り訂正符号。冗長ビット(パリティビット)をデータに追加し、エラーの位置を特定する仕組み。

📌 このページのポイント
ハミング符号(7,4):1ビットを訂正偶数パリティ・左から位置1〜7データ1011に検査ビットを付けて送信1234567送信0110011位置5だけ反転した例受信0110111検査結果 P4・P2・P1 = 101₂ = 5位置5を反転 → 元の0110011へ前提:1つの符号語の誤りは1ビット橙:検査ビット(1・2・4)/ 青:データ
送信と受信の値を同じ列で比較し、誤った位置5を赤で示しています。検査結果は検査ビットそのものの値ではありません。全体パリティを追加するSECDEDの図ではありません。
ひよこ ひよこ
ハミング符号って何?エラーを直せるってほんと?
ペンギン先生 ペンギン先生
本当だよ。普通のパリティビットは「どこかが壊れた」しか分からないけど、ハミング符号はパリティビットを複数の位置に配置することで「何ビット目が壊れたか」まで特定できるんだ。1つの符号語で誤りが1ビットという前提なら、自動で修復できるよ。
ひよこ ひよこ
パリティビットをたくさん使うってこと?どう配置するの?
ペンギン先生 ペンギン先生
パリティビットは2のべき乗の位置(1, 2, 4, 8, …)に置くのがルールだよ。例えば7ビットのハミング符号なら、位置1・2・4がパリティビットで、位置3・5・6・7がデータビット。各パリティビットは特定のビットグループの偶奇をチェックするんだ。
ひよこ ひよこ
エラーの位置はどうやって分かるの?
ペンギン先生 ペンギン先生
検査結果をP4・P2・P1の順に並べると、エラー位置が二進数で分かるんだ。例えばパリティ1がNG、パリティ2がOK、パリティ4がNGなら「101」=5番目のビットがおかしい、と特定できる。すごく賢い仕組みだよね。
ひよこ ひよこ
2ビット以上壊れたらどうなるの?
ペンギン先生 ペンギン先生
基本のハミング符号では、1ビット訂正と2ビット検出を同時に保証できないんだ。誤りの有無を判定するだけなら2ビット誤りも検出できるけど、1ビットだと思って訂正すると誤訂正する場合がある。全体パリティを追加した拡張符号なら、1ビット訂正と2ビット検出を両立できるよ。ECCの方式は製品によって異なるんだ。
ひよこ ひよこ
ECCメモリ以外にも使われてるの?
ペンギン先生 ペンギン先生
通信や記憶装置でも、冗長な情報で誤りに備える考え方が使われるよ。ただし方式は同じではない。例えばQRコードのデータにはリードソロモン符号を使うので、ハミング符号と混同しないようにしよう。
もっと詳しく知りたい人へ

普通のハミング符号で2ビットが壊れるとどうなる?

基本のハミング符号では、1ビット誤りと2ビット誤りを区別して訂正できません。例えば位置1と2が反転すると、検査結果が位置3の1ビット誤りと同じになり、訂正を試みると誤訂正します。全体パリティを追加した拡張符号なら1ビット訂正と2ビット検出を両立できますが、3ビット以上の誤りまで保証するものではありません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ハミング符号」って出てきたら「1ビットの誤りを自動で見つけて直せる仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Hamming Code」 = ハミングが考案した符号
💬 ベル研究所のリチャード・ハミングの名前に由来するよ。誤りの検出で計算が止まる問題から、訂正まで行う方法を研究したんだ

参考資料

← 用語集にもどる