ハミング距離とハミング符号(7,4)の計算
2つの同じ長さのビット列がどれだけ違うか(ハミング距離)を数えたり、4ビットのデータから、1ビットの誤りを直せるハミング符号(7,4)を作ったりします。
計算方法
ハミング距離は、同じ桁の数字を1つずつ比べて、違う桁の数を数えます。
ハミング符号(7,4)は、4ビットのデータ(d1〜d4)に、3ビットのパリティビット(p1〜p3)を足した7ビットの符号です。位置1・2・3・4・5・6・7のうち、p1は1・3・5・7番目、p2は2・3・6・7番目、p3は4・5・6・7番目のビットの1の数を偶数にするように決めます。
受け取った7ビットで同じ検査をやり直し、結果(シンドローム)が0でなければ、その値がそのまま誤りのある桁の位置を表します。
式の意味を説明します。ハミング距離は、2つのビット列の同じ位置を見比べて、違っている桁を数えた値です。小さいほど似ていることになり、0ならまったく同じです。ハミング符号は、決めた位置の1の数がいつも偶数になるようにパリティビットを足します。受け取った側で偶数が崩れていれば、どの位置が反転したのかを計算で割り出せます。
例:1011001と1001101を比べると、3桁目と5桁目が違うので、ハミング距離は2桁です。
気をつけること。ハミング符号(7,4)は1ビットの誤りを直せますが、2ビットが同時に誤ると正しく直せません。距離を数えるには、2つのビット列の長さが同じでなければなりません。実際の通信では、もっと強い誤り訂正の方式が使われることもあります。
出典:ハミング距離・ハミング符号(7,4)の定義(1950年にリチャード・ハミングが発表した誤り検出・訂正符号の仕組み)
よくある質問
ハミング距離は何に使う?
通信の誤り検出や、似ている文字列・画像を探す仕組みなど、いろいろな場面で使われる考え方です。
ハミング符号(7,4)はどんな場面で使われる?
メモリやストレージなど、1ビットの誤りが起きても自動で直したい場面のもとになる考え方です。実際の製品では、もっと強力な符号が使われることもあります。
2ビット以上の誤りは直せる?
ハミング符号(7,4)は、1ビットの誤りまでしか正しく直せません。2ビットの誤りがあると、別の1ビットの誤りと区別できず、間違って直してしまうことがあります。