誤り符号化
反転したビット、三つの符号の対応
青いマスは受け取ったデータビット、金色のマスは付け加えた検査ビットで、赤い枠のマスが雑音で反転したビットです。保護なし・パリティ・ハミングを順に押すと、同じ単一ビットの誤りを三つの符号がどう扱うかを並べて比べられます。データだけを送ると誤りに気づきもせず、パリティビット一つは誤りがあることまでしかわからず、ハミングはどのビットかを突き止めて正します。
雑音はビットを反転する
雑音は受信機で、ときどき 0 を 1 に、1 を 0 に反転させます。図の元のデータは 1011 ですが、二番目のビットが反転して 1111 として届きました。データビットだけを送っていたなら、1111 もまっとうな 4 ビットのデータなので、受信機には誤りが起きたことさえわかりません。どのビットパターンも、データとして等しくもっともらしいからです。
余分なビットが番人
データから規則で計算した検査ビットを付け加えると、事情が変わります。最も単純なパリティビットはデータビットすべての XOR で、1 の個数をいつも偶数にそろえます。元のデータ 1011 には 1 が三つあるのでパリティは 1 になりますが、二番目のビットが反転すると 1 が五つの奇数になり、検査が合わなくなります。受信機はこれで誤りが起きたことを知りますが、パリティ一つでは、どのビットが誤っているかまでは突き止められません。
距離が訂正を生む
符号語を点と見なすと、よい符号は有効な点どうしを互いに遠く離しておきます。二つの符号語で値の異なるビット位置の数をハミング距離といい、有効な符号語どうしの最小距離が 2 なら単一ビットの誤りを検出でき、3 なら訂正までできます。一か所誤った語でも、依然として元の符号語に最も近いからです。ハミング(7,4)は 3 個の検査ビットで、7 ビットのうちどのビットの誤りでも突き止めます。三つの検査ビットがそれぞれ異なるデータビットの組を受け持っているので、どの検査が合わなかったかの組み合わせが、反転した位置をただ一つに指し示すのです。その代価は符号化率 R = k/n = 4/7 で、情報 4 ビットを送るために 3 ビットの余分を払うことになります。
最初の画面に戻ると
保護がないとき、反転したビットはまっとうなデータに見えて赤でした。パリティビットを一つ加えると、何かが食い違っているという合図は出ましたが、どのビットかはわからず橙でした。ハミングの検査ビットが食い違いを集めてそのビットを正確に突き止め、元に戻すと金色になりました。覚えておくことは一つです。余分なビットで有効な語どうしを遠く離しておけば、雑音で一歩押し出された語も、最も近い元の語へ戻ってきます。シャノンが約束した容量以下での信頼性は、こうして守られるのです。
通信トラックを終えて
なぜ変調するのかから出発して、一つのメッセージがたどる道を最後まで追ってきました。ベースバンドの小さな揺れを搬送波に載せて周波数軸の上へ移し(AM・FM)、数に変え(標本化・PCM)、そのビットで搬送波を揺らしました(ASK・FSK・PSK)。続いて帯域幅の天井に出会い、雑音と SNR を測り、ランダムさを確率で手なずけ、シャノンの絶対的な限界を見て、ついにその限界の下で誤りを符号で取り戻しました。通信とは結局、雑音に満ちた世界でメッセージを失わずに手渡す技術なのです。