通信の効率が高いハミング符号

 実際の通信で,より通信効率の高い符号化方式として使われているのがハミング符号です。ハミング符号は送信するビット列から何種類かのビットの組み合わせを作り,そこから検査符号を演算する方式です。検査符号の長さを元のビット列の長さより短くできるので,多数決方式より通信の効率が良くなります。

 ここでは4ビットの情報(x1,x2,x3,x4)を送るのに3ビットの検査ビット(c1,c2,c3)を付けるハミング符号を例に説明しましょう(pict.3[拡大表示])。

 ハミング符号のミソは検査ビットを演算するビットの組の作り方にあります。検査ビットの最初のc1は「x1,x2,x3」から求めます。同じように,c2は「x2,x3,x4」,c3は「x1,x3,x4」という組み合わせから計算します。ポイントはそれぞれのグループで三つのビットの組み合わせが異なる点です。

 それぞれのグループから検査ビットを作るときは排他はいた的論理和てきろんりわと呼ばれる演算を行います。排他的論理和とは,平たく言うと,1の数を数えて奇数なら1,偶数なら0とする論理演算方法です。「1000」を送るとすると,最初の検査ビットc1は組み合わせ「1,0,0」の排他論理和で「1」になります。同様の計算から検査ビットは「101」と計算できます。送信側はこれをつなげて「1000101」という7ビットのデータにして送ります。

1ビットの誤りしか訂正できない

 次に,受信側でこれを受け取ったときにビット誤りが生じて「1001101」になっていた場合を想定して,これをどのように訂正するか見ていきましょう。

 受信側では,まずデータ部と検査ビットを分け,データ部からあらためて検査ビットを計算します。データ部は「1001」ですから検査ビットは「110」になります。しかし届いた符号の検査ビットは「101」ですから,c2とc3が正しくありません。

 検査ビットを作るときの組み合わせを見ると,c2とc3の両方だけにかかわっているのはx4のビットです。従ってデータ部の最後のビットが間違っており,これを反転して「0」に戻せば誤りを訂正できます。

 ただし,この方式では2ビットが誤って届くと元のデータに戻せませんし,3ビット以上誤ると,誤りの発生すら検知できません。先ほどの「1001101」も元のデータが2ビット誤って届いたと仮定すると,「110」であるべき検査ビットが「101」と間違ったとも考えられます。これでは訂正個所が決められません。

 ハミング符号にはほかに,11ビットの情報に4ビットの検査ビットを加えるもの,26ビットの情報に5ビットの検査ビットを加えるものなどがあります。ただし,どの方式でも訂正できるのは1ビットの誤りだけです。従って,情報部を長く取ると通信効率が上がりますが,誤り訂正能力は逆に低下してしまいます。

次へ 上 中 下