ECC・CRC・パリティチェックとは?デジタル伝送データの誤り検出
デジタルデータを伝送するときに、データの誤りを検出する方法について紹介します。
誤り検出は、主に通信機器の送受信データのチェックに使われます。ここではパリティチェック、ECC、CRCについて触れます。メモリの読み書きなどでも良く使われる方式となり、エンジニアなら知っておきたい知識のひとつです。
Contents [hide]
受信したデータは正しいとは限らない?!
誤り検出は、デジタルデータを伝送する時に使います。データを伝送するときには、送信したデータと受信したデータが本当に、同じかどうかチェックする必要があります。なぜなら途中でノイズなどが入ってデータが壊れてしまっている可能性もあるからです。そこで、よく用いられるのが冗長検出という方法です。送信時はデータに誤り検出用のデータを付加しておき、受信時にその誤り検出用のデータを用いて受信したデータをチェックします。
シンプルな誤り検出、パリティチェック
パリティチェックとは、送信したデータのなかに1がいくつあったかをチェックをする方法です。
- 1の個数が偶数個なら0とする方式:偶数パリティ(evenparity)
- 1の個数が奇数個なら0とする方式:奇数パリティ(oddparity)
①1送信側でデータの最後に1がいくつあったかという情報を1bit足します。
ex)偶数パリティでデータが01010101だった時パリティビットは0
②受信側では受信したデータの中に1がいくつあったかを自分で数えます。
ex)受信データが01010100と最期のbitが間違っていた時、自分で数えた結果パリティビットは1
③自分で数えた数と送信側で足された情報が同じかどうかをチェックします。
ex)自分で数えた結果パリティビットは1、受信したのは0で、データに誤りがある事がわかります。
データの通信やファイル圧縮などでよく使われます。
誤り訂正も可能なECC訂正符号
ECCは送信したデータの誤り検出と、訂正ができる誤り訂正符号です。Error-CorrectingCodeの略で、チェック時の動作はパリティチェックと同様です。大きな違いは訂正が可能なことと、誤り検出データの計算方法にあります。送信データを一定の長さに分割し、決められた方法で計算した結果を付加します。受信時に誤りが検出されれば訂正を試みます。パリティチェックでは1bit以上の誤りは検出できませんが、ECCでは可能です。ただし、訂正が可能なのは1bit誤りの場合のみです。主にデータの通信やメモリの読み書きなどに使われます。
バースト誤りに強いCRCチェック
CyclicRedundancyCodeの略で、チェック時の動作自体はECCと同様です。送信したデータを元に計算した結果を付加し、誤りを検出します。ただし訂正はできません。計算方法としては、送信データを一定の長さに区切り、決められた定数で割った余りを用います。多少計算は複雑になりますが、パリティでは検出出来ない2bit以上の誤りを検出できます。主にデータの通信や記録などに使われます。
万能な誤り検出、というものは存在しない
データの誤り検出は他にもチェックサムやハミング係数やハミング符号など様々な方式があります。万能な誤り訂正というのは存在しませんので、使うときにはデータの量や誤りの発生頻度、発生しやすい誤りの状況によって適切な検出方法を選択してください。