上の例では、次のように表せます。誤り検出、訂正などすべてこのXOR演算が基本になっています。1ビット誤り訂正それでは誤りの訂正です。誤りの状況を見てみましょう。誤り訂正用の付加ビットで区別できればいいことがわかります。いうことはだいたい想像できると思います。...ちょうど3ビットで区別できそうですね。これらの間には次の関係が成り立つものとします。0となっていることにします。0これはつまり、受信側での検証を示しています。0、0、0、であることを確認します。ここで、X1〜7のうち、1ビットに誤りが生じたとします。1例えば、X5が誤ったとすると、そのビットが反転します。検証結果として、1、0、1、というものが得られます。ビット位置によって、値が変わるようになっています。検証結果を見ると、どのビットが誤ったかわかるのです。B1〜3に割り当てればよさそうです。どこに割り振ってもいいか、というとそうではありません。これは元データに制約をかけることになってしまいうまくありません。次のように割り当てると都合良さそうです。0式で書いてBを移項するとこんな感じになります。A2+A3+A4これで1ビットの誤り訂正ができることになります。受信側では、表を利用して、どのビットが誤ったのかを検出できます。1というわけで、2ビット誤ると、さらに誤って訂正されてしまいます。A3が誤っていると認識され、さらに誤って訂正されてしまいます。簡単には、さらに全体にパリティを設けます。2ビット誤っていることがわかります。B4をパリティとすると、次のように送信側で構成します。A1+A2+A3)受信側では、つぎのような計算を行ないます。以下のようになります。これはつまりコード間距離がどれだけあるか、を議論していることになります。最低何ビット変えなければならないか、ということです。何ビット変化させれば、別の正しいコード列となるか、ということです。1ビット変化させただけで別のコードになってしまう場合は、誤り検出も訂正もできません。1ビット誤り検出ができます。1ビット誤り訂正ができます。2ビット誤り検出+1ビット誤り訂正が可能となります。この場合は、コード間距離-1が、誤り検出できるビット数になります。訂正ではなく誤り検出としてだけ用いるならば、2ビット誤り検出が可能です。訂正ではなく誤り検出としてだけ用いるならば、任意の3ビット誤り検出が可能です。430HXでは、実際の例を見てみます。64ビット中1ビットの誤り訂正、2ビット誤り検出をすることができます。1ビット誤り訂正、2ビット誤り検出ができます。2枚で72ビット=64ビット+8ビットとなり、丁度うまくいくことになります。この誤り訂正回路を実際に設計してみましょう。2進数で1から71まで71ビット分の表を書きます。最後に、空いた部分を、D0〜D63を割り当てます。してできた表はこちらになります。読み出した時にもこの表から誤り位置を計算して訂正することができます。430HXはこの表に相当する回路が入っているわけですね。CRC16チェック伝送路のチェック方式として有名なCRC16チェック、というものがあります。パケット転送における誤り検出においてほぼ標準的なものになっています。このCRC16、実は上の表を作っているのと等価です。掛け合わせて、XORを取っていることになります。このCRC16は、16ビット、つまり、65535通りの表を作るとひと廻りし、再び同じ表を作ります。連続する16個分のベクトルが常に直交しています。任意の16ビット連続部分を、付加ビットとして使用できます。CRC内容16ビットを出力すると、受信側では、1ビットの誤り訂正を行なうことができます。実際には、X+1で割り切れてしまいます。X+1というのは実はパリティそのものです。できるようになっています。32751ビット中任意の3ビット誤りを検出することができる、というわけです。