誤り制御について頭の中を整理〜。誤り制御の方法は以下の二つ。
- 誤り検出 により再送
- 誤り訂正 により自己修復
参考資料
- https://ja.wikipedia.org/wiki/%E8%AA%A4%E3%82%8A%E6%A4%9C%E5%87%BA%E8%A8%82%E6%AD%A3
- http://www.lineeye.co.jp/html/term_ayamari.html
誤り検出: パリティチェック
- 誤り検出用のパリティビットを付加してデータの整合性を検査する方法
- 偶数パリティ: データの和が偶数になるようにパリティビットを付加する
- 奇数パリティ: データの和が奇数になるようにパリティビットを付加する
例えば、7bitデータを送出する場合に偶数パリティを採用するとすれば以下のように、パリティビットを付加すればよい
[0,0,0,0,0,0,0] [0] ← パリティビット
[0,1,0,0,0,0,0] [1]
[0,1,1,0,1,0,0] [1]
VRC(Vertical Redundancy Check) – 垂直パリティ
- キャラクタ単位でパリティチェックを行う
偶数パリティの場合8bit目をパリティビットとすれば次のような感じ
b8|0|1|1| ←パリティビット
b7|0|0|0|
b6|0|0|1|
b5|0|1|1|
b4|0|1|1|
b3|0|1|1|
b2|0|0|1|
b1|0|0|0|
|A|B|C| ← A, B, C はそれぞれ 7bit のキャラクタ + 1bit のパリティビット
LRC(Longitudinal Redundancy Check) -水平パリティ
- 伝送した文字列の終端に Block Check Character(BCC) と呼ばれる誤り検出のためのキャラクタを付加する
- 伝送した各ビットの正当性を確認することによりキャラクタ単位ではなく文字列全体のなかに誤りがあることを検査することができる
偶数パリティの場合以下のような具合で
b8|0|1|1| 0 |
b7|0|0|0| 0 |
b6|0|0|1| 1 |
b5|0|1|1| 0 |
b4|0|1|1| 0 |
b3|0|1|1| 0 |
b2|0|0|1| 1 |
b1|0|0|0| 0 |
|A|B|C|BCC|
群係数チェック
- 水平方向の和の下2桁を取り、下位ビットのチェックビットとする
偶数パリティであれば以下のような具合
b8|0|1|1| 0 | 0 | ← 偶数パリティなので 00。和は 10 なので b7 のチェックビットは 10
b7|0|0|0| 1 | 0 | ← 和は 10 なので b6 のチェックビットは 10
b6|0|0|1| 0 | 1 | ← 和は 10 なので b5 のチェックビットは 10
b5|0|1|1| 1 | 0 | ← 和は 11 なので b4 のチェックビットは 11
b4|0|1|1| 1 | 1 | ← 和は 100 なので b3 のチェックビットは 00
b3|0|1|1| 0 | 0 | ← 和は 10 なので b2 のチェックビットは 10
b2|0|0|1| 1 | 0 | ← 和は 10 なので b1 のチェックビットは 10
b1|0|0|0| 1 | 0 |
|A|B|C|CK1|CK2|
CRC(Cyclic Redundancy Check) – 巡回冗長検査
- バースト誤りを検出できるのが特長的
- 書いてる途中で飽きた(続き暇なときにまとめる)