リード・ソロモン符号による誤り訂正

別名: リード・ソロモン符号, Reed–Solomon, RS符号, リードソロモン

定義

リード・ソロモン符号による誤り訂正は、損傷したQRコードを読み取れるようにする数学的な仕組みです。データにチェック用のコード語を加えることで、リーダーは、欠けたり誤ったりしたバイトを、決まった上限まで復元できます。

由来と広い用途

リード・ソロモン符号は、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
  • ブロックはインターリーブされ、まとまった損傷を分散します

よくある質問

QRコードのリード・ソロモン符号とは何ですか?

データに余分なコード語を加える誤り訂正の方式です。スキャナーはそれを使って、損傷したり読み取れなくなったりしたコード語を復元します。

リード・ソロモン符号を発明したのは誰ですか?

1960年にこの符号を発表した、Irving S. ReedとGustave Solomonです。現在では、光ディスク、通信、ほとんどの二次元バーコードで使われています。

中央にロゴがあるQRコードでも、動作するのはなぜですか?

ロゴが覆っているのは、リード・ソロモン誤り訂正で復元できるモジュールだからです。覆っている範囲が誤り訂正の容量に収まり、ファインダーパターンが空いていれば、動作します。

出典と規格

すべての用語