ハミング符号
データに複数の検査ビットを加え、その組合せから誤りの位置を特定して訂正する符号。基本的な構成では1ビットの誤りを訂正でき、通信やメモリの誤り対策に使われる。
イマシルちゃんの解説
並べた荷物を、いくつかの重なるグループに分けて確かめるとするよ。
どのグループが合わなかったかを組み合わせれば、間違った荷物を絞り込めるんだ。
「何かが違う」と分かるだけより、一歩進んだ確かめ方だね。
ただ、いくつも同時に間違うと、同じ目印だけでは見分けられなくなることがあるよ。
より深い解説
検査結果から誤りを見つける
複数のパリティ検査が、それぞれ異なるビットの組を確かめるように構成する。受信側で検査をやり直した結果の組合せをシンドロームと呼び、誤りの位置の判定に使う。
基本的な例として、4ビットのデータに3ビットの検査情報を加える(7、4)符号がある。全体7ビットのうち、情報を運ぶ部分が4ビットである。
符号間の違いと能力
二つのビット列で、異なるビットの数をハミング距離という。正しい符号語同士の最小距離が大きいほど、誤りが加わっても区別しやすくなる。
| 能力 | 最小距離dとの関係 |
|---|---|
| 誤りの検出 | 最大d − 1ビットまで |
| 誤りの訂正 | 最大⌊(d − 1)÷ 2⌋ビットまで |
標準的なハミング符号の最小距離は3であり、単一誤りを直す構成になる。ただし、二重誤りを単一誤りと区別しながら常に安全に訂正できる、という意味ではない。
メモリで使う拡張
全体を検査する追加のパリティを設けると、最小距離を4にできる。1ビットの誤りを訂正し、2ビットの誤りを検出するSECDEDの構成が代表的である。
基本形と、この拡張した形の能力を混同しない。訂正用の回路が単一誤りとして処理すると、基本形では二重誤りを別の場所の誤りと誤認する場合がある。
通信での利用
BR/EDRでは、一部のパケットの誤り訂正に、短縮された(15、10)ハミング符号を使う。無線通信のすべての方式・すべてのパケットが同じ符号を使うわけではない。
| 技術 | 主な目的 |
|---|---|
| ハミング符号 | 誤りの訂正・検出 |
| CRC | 伝送中の誤り検出 |
| 画像や音声の圧縮 | 表す内容に必要なデータ量の削減 |
HDLCのFCSに使われるCRCや、音声・画像の圧縮とは役割が異なる。誤りに備えて冗長な情報を加えることと、情報量を減らして効率よく表すことを区別する。
限界を考える
訂正能力を越える誤りが起きれば、誤訂正や検出不能が生じ得る。FECと再送を組み合わせるなど、回線品質や求める信頼性に応じた対策が必要になる。
メモリの誤り対策
ECCメモリは、誤り訂正符号を用いて保存データの誤りを検出・訂正するメモリである。1ビット訂正・2ビット誤り検出を行うSECDEDは代表的な構成だが、ECCという名前だけで、あらゆる多重誤りを直せるとはいえない。
単一のパリティによる検査は、奇数個のビット反転を検出できるが、誤った位置を特定できない。複数の検査結果を組み合わせる符号と、検査ビットを一つだけ加える方法を区別する。訂正可能な誤りが続く場合も、ログの監視や部品の調査が必要である。