データを通信回線で送受信したり、記憶媒体に書き込んだりする際には、ノイズや障害によってビットが化けてしまう(0が1に、または1が0に変わる)エラーが発生することがあります。
このようなエラーを検出する最もシンプルな手法のひとつがパリティビット(Parity Bit)です。
本記事では、パリティビットの仕組みと目的、偶数パリティと奇数パリティの違い、計算方法、そして限界と現代での活用について詳しく解説していきます。
パリティビットとは何か?基本的な概念
それではまず、パリティビットの基本的な概念と、なぜエラー検出に使われるのかについて解説していきます。
パリティビットの定義と目的
パリティビットは、データのビット列に付加する1ビットの検査ビットです。
データビットの中に含まれる「1」の個数に応じて、パリティビットを0または1に設定することで、受信側がデータのエラーを検出できるようにします。
通信エラーが発生した場合、受信したビット列のパリティチェックが一致しなくなるため、「どこかでエラーが発生した」ことを検知できます。
ただし、パリティビットはエラーの検出のみが可能であり、どのビットが誤っているかの特定(訂正)は行えません。
偶数パリティと奇数パリティの違い
パリティビットには、偶数パリティ(Even Parity)と奇数パリティ(Odd Parity)の2種類があります。
偶数パリティと奇数パリティの定義
偶数パリティ:データビット+パリティビットの「1」の総数が偶数になるよう設定
奇数パリティ:データビット+パリティビットの「1」の総数が奇数になるよう設定
どちらを使うかは、通信プロトコルや規格によってあらかじめ取り決められており、送信側と受信側が同じ方式を使う必要があります。
パリティビットの位置
パリティビットは通常、データビット列の最上位ビット(MSB)または最下位ビット(LSB)の位置に付加されます。
7ビットのデータに1ビットのパリティビットを加えて8ビット(1バイト)として扱うという構成が代表的です。
シリアル通信(RS-232C・UARTなど)では、スタートビット・データビット・パリティビット・ストップビットの順にフレームを構成するのが標準的です。
パリティビットの計算方法
続いては、偶数パリティと奇数パリティのパリティビットの具体的な計算方法について確認していきましょう。
偶数パリティの計算例
偶数パリティのパリティビットを計算する手順を具体例で確認します。
偶数パリティの計算例
データビット:1010110(7ビット)
手順1:データビット中の「1」の個数を数える
1+0+1+0+1+1+0 = 4個(偶数)
手順2:偶数パリティでは、「1」の総数が偶数になるようパリティビットを設定
すでに4個(偶数)なので、パリティビット = 0
送信ビット列:0 1010110(パリティビット+データ)
「1」の総数:4個(偶数)→ 偶数パリティ成立
もうひとつの例
データビット:1011101(7ビット)
「1」の個数:1+0+1+1+1+0+1 = 5個(奇数)
偶数にするためには「1」を1つ追加 → パリティビット = 1
送信ビット列:1 1011101
「1」の総数:6個(偶数)→ 偶数パリティ成立
奇数パリティの計算例
奇数パリティでは、「1」の総数が奇数になるようパリティビットを設定します。
奇数パリティの計算例
データビット:1010110(7ビット)
「1」の個数:4個(偶数)
奇数にするためには「1」を1つ追加 → パリティビット = 1
送信ビット列:1 1010110
「1」の総数:5個(奇数)→ 奇数パリティ成立
XOR演算を使った計算の自動化
パリティビットの計算はXOR(排他的論理和)演算を使って効率よく求めることができます。
XOR演算でのパリティ計算(偶数パリティ)
データビット:1 XOR 0 XOR 1 XOR 0 XOR 1 XOR 1 XOR 0
= 1 XOR 0 = 1
1 XOR 1 = 0
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 1 = 0
0 XOR 0 = 0
最終XOR結果 = 0 → これが偶数パリティビット
XOR演算の結果が偶数パリティビットとなります。奇数パリティビットは、偶数パリティビットをNOT(反転)した値になります。
パリティビットによるエラー検出の仕組み
続いては、受信側でのパリティチェックによるエラー検出の仕組みについて確認していきましょう。
正常受信時のパリティチェック
受信側では、受信したビット列(パリティビットを含む全ビット)の「1」の個数を数え、設定されたパリティ(偶数または奇数)と一致するかを確認します。
正常受信時の偶数パリティチェック
送信ビット列:0 1010110
受信ビット列:0 1010110(エラーなし)
「1」の個数:4個(偶数)→ 偶数パリティ成立 → エラーなし
エラー検出時のパリティチェック
通信中に1ビットが反転するエラーが発生した場合、パリティチェックで検出できます。
1ビットエラー発生時の偶数パリティチェック
送信ビット列:0 1010110(「1」が4個:偶数パリティ)
受信ビット列:0 1110110(3ビット目が0→1に化けた)
「1」の個数:5個(奇数)→ 偶数パリティ不成立 → エラー検出!
エラーを検出した受信側は、送信側に再送信を要求するなどのエラー処理を行います。
パリティビットで検出できないエラー
パリティビットの重要な限界として、2ビット同時エラーは検出できないという点があります。
2ビットエラーの見落とし
送信ビット列:0 1010110(「1」が4個:偶数パリティ)
受信ビット列:0 1110100(2ビットが同時に反転)
「1」の個数:4個(偶数)→ 偶数パリティ成立 → エラー検出できない!
偶数個のビットが同時に反転した場合、パリティは変わらないためエラーを検出できません。
パリティビットの限界と発展した技術
続いては、パリティビットの限界を補うために開発された、より高度なエラー検出・訂正技術について確認していきましょう。
パリティの限界と対応
パリティビットは1ビットエラーの検出はできますが、エラーの訂正(どのビットが誤っているかの特定)はできません。
また、2ビット以上のエラーが同時に発生した場合は検出できないこともあります。
これらの限界を補うために、より高度なエラー検出・訂正符号が開発されました。
より高度なエラー検出・訂正技術
パリティビットよりも高度なエラー検出・訂正の技術として以下のものがあります。
| 技術名 | 特徴 | 主な用途 |
|---|---|---|
| CRC(巡回冗長検査) | 複数ビットエラーの検出が可能 | 通信・ストレージ |
| ハミング符号 | 1ビットエラーの訂正が可能 | メモリ・ECC |
| Reed-Solomon符号 | 複数ビットの訂正が可能 | CD/DVD・QRコード |
| LDPC符号 | 高効率な誤り訂正 | 5G・Wi-Fi・SSD |
現代でのパリティの活用
パリティビットはシンプルさから現在も多くの場面で使われています。
UARTシリアル通信(マイコン・組み込み機器間の通信)、PCIパリティエラーチェック、古いメモリモジュールのエラー検出などで使われています。
また、RAID 5のパリティ(ブロック単位のXORパリティ)はパリティビットの概念を拡張したもので、現代のストレージシステムでも広く使われています。
まとめ
本記事では、パリティビットの基本概念、偶数パリティと奇数パリティの違い、XOR演算を使った計算方法、エラー検出の仕組みと限界、そして発展した誤り訂正技術について解説しました。
パリティビットはデータビットに1ビットを付加してエラーを検出するシンプルな手法で、偶数パリティは「1」の総数を偶数に、奇数パリティは奇数に保つよう設定します。
1ビットエラーの検出には有効ですが、2ビット以上のエラーや訂正には対応できないため、高信頼性が必要な場面ではCRCやハミング符号などと組み合わせて使われます。
情報工学の基礎知識として、パリティビットの仕組みをしっかり理解しておくことが重要でしょう。