1の個数が偶数になるよう検査ビットを付加するパリティ方式
偶数パリティ(even parity)とは、データとパリティビット(=検査用に付け足す1ビット)を合わせた 1の個数が必ず偶数になるようにパリティビットを決める方式です。「全体の1の数を偶数にする」という1つのルールだけで誤りを見つけます。
身近な例で言うと、2人組(ペア)で席に着く約束に似ています。全員がペアになっていれば人数は偶数のはず。もし1人余っていたら「誰かいなくなった or 増えた」とすぐ分かります。偶数パリティも同じで、「1は必ず偶数個」という約束が崩れていたら、途中でビットが化けた(誤った)と判断します。
上のツールでデータビットをクリックすると、1の個数が偶数になるようパリティビット(P)がリアルタイムに決まります。データの1が偶数個ならP=0、奇数個ならP=1になる様子を確認してください。
偶数パリティビットの決め方はとても簡単で、次の2通りで考えられます。どちらも同じ結果になります。
・個数で考える:データの1が偶数個ならP=0、奇数個ならP=1
・XORで考える:全データビットを XOR(排他的論理和)した値がそのままP
XOR(排他的論理和)は「2つのビットが違えば1、同じなら0」という演算です。0⊕0=0, 0⊕1=1, 1⊕0=1, 1⊕1=0。これを左から順に畳み込むと、最終結果は「1が奇数個なら1、偶数個なら0」になります。つまりXORの結果=偶数パリティビットなのです。回路では1個のXOR素子を連ねるだけで作れるため、ハードウェアで高速に計算できます。
計算例として 1011001 を見てみましょう。1の個数は4個(偶数)なのでP=0。XORで計算しても 1⊕0⊕1⊕1⊕0⊕0⊕1 = 0 となり一致します。送信フレームは 10110010 となり、全体の1は4個=偶数です。
受信側がやることは「届いたフレーム(データ+パリティ)の1の個数を数え、偶数かどうか確認する」だけです。手順は次のとおりです。
・手順1:受信フレーム全体の1の個数を数える
・手順2:偶数なら「誤りなし」、奇数なら「誤りあり」と判定
・手順3:誤りありなら、送信側に再送を要求する(訂正はできない)
送信時に「必ず偶数個」にしてあるので、1ビットだけ化けると個数が奇数になり、約束が破れたとすぐ分かります。上のツールで「誤り注入」を1つ選ぶと、受信側の1の個数が奇数になり「誤り検出!」と表示されるのを確認できます。
ただし注意点として、2ビット同時に誤ると1の個数は偶数のままなので見逃します。偶数パリティは奇数個の誤りを検出でき、偶数個の誤りは検出できません。また、誤りの検出はできても訂正はできません。