由来と広い用途
リード・ソロモン符号は、1960年にIrving S. ReedとGustave Solomonが考案しました。1ビットずつではなく、通常はバイト単位のシンボル全体を扱うため、傷や汚れのようなまとまった損傷にも強い方式です。
この符号の仲間は、CD、DVD、Blu-rayディスクのデータ、一部のデジタルテレビや衛星通信、さらにData Matrix ECC 200、Aztecコード、PDF417などのほかの二次元バーコードでも、データを守っています。
QRコードでの使われ方
QRコードは、8ビットの各コード語を、原始多項式 x^8 + x^4 + x^3 + x^2 + 1(16進で0x11D)で構成される有限体GF(256)の元として扱います。データのコード語は生成多項式で割られ、その余りが、誤り訂正コード語としてデータの後ろに付けられます。
大きなコードでは、データが複数のブロックに分割され、それぞれに誤り訂正コード語が付きます。コード語をマス目に配置するときに、ブロック同士がインターリーブ(交互配置)されるため、1か所の損傷がいくつものブロックに分散し、1つのブロックが圧倒されずに済みます。
どこまで訂正できるか
1つのブロックにn個の誤り訂正コード語があれば、デコーダーは、位置が分からない誤りのコード語をn/2個まで、位置が分かっている場合(消失といいます)はn個まで訂正できます。両方が混ざる場合は、誤り1個を2、消失1個を1と数える規則に従います。
きれいで平らな領域をロゴで覆ったコードが読み取れるのは、このためです。賢いリーダーなら、覆われた領域を消失として扱えるのに対し、ランダムな損傷は、デコーダーがまず場所を見つけなければならないので、訂正が難しくなります。
- 位置不明の誤り:誤り訂正コード語の数の半分まで
- 消失(位置が分かっている):誤り訂正コード語の数まで
- 有限体:GF(256)、多項式0x11D
- ブロックはインターリーブされ、まとまった損傷を分散します