ハミング符号

読み:はみんぐふごう / 英語表記:Hamming code

データに複数の検査ビットを加え、その組合せから誤りの位置を特定して訂正する符号。基本的な構成では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という名前だけで、あらゆる多重誤りを直せるとはいえない。

単一のパリティによる検査は、奇数個のビット反転を検出できるが、誤った位置を特定できない。複数の検査結果を組み合わせる符号と、検査ビットを一つだけ加える方法を区別する。訂正可能な誤りが続く場合も、ログの監視や部品の調査が必要である。

実際の試験ではここに出る!

この用語が出てくる記事

↑