水曜日, 8月 17, 2011

QRコードを作るプログラムを作る(4)


QRコードを生成する手順で、

1. 入力テキストの分析と符号化
2. 誤り訂正符号というものを生成する
3. マトリックス(碁盤の目)に符号を並べる
4. マスクなるものをかける
5. 形式と型番を示す情報をつける

「2. 誤り訂正符号というものを生成する」にやってきました。

規格書を読んでみると、
  • QRコードには、損傷した場合に復元できる”誤り訂正”能力がある。
  • 誤り訂正レベルは以下の4段階から選べる
    • レベル L 復元能力7%
    • レベル M 復元能力15%
    • レベル Q 復元能力25%
    • レベル H 復元能力30%
ふむ。そうですか。

そのために、
  • データコード後列に付加する一連の誤り訂正コード語を生成するリードソロモン誤り訂正を備えている。
?※△□? なんだそれ。その後しばらくよく理解できない記述が続いている。
ハクション大魔王じゃないが痒い。

で、結局どうすればいいのさ!というところを読み取っていくと、
まず基本として理解しなければならないのは、こういうことだった。
  • 1. 入力テキストの分析と符号化にて符号化された入力テキストを8ビットずつにわけたが、8ビットで1データコード語と呼ぶ。
  • QRコードに格納されるデータは、データコード語列とそのデータコードに対して計算された誤り訂正コード語列である。
  • 型番と誤り訂正レベルによって、データコード語の数と誤り訂正語の数が決められている。例えば、
    • 型番1で誤り訂正レベルLの場合(以下 1 - L のように表記する。)、データコード語は19個で、誤り訂正コード語は7個と規定されている。
    • 1- H の場合、データコード語は9個になり、誤り訂正コード語は17個とされている。
  • 型番と誤り訂正レベルによって、データコード語列を複数のブロックに分けることになっている。このブロックをRS(リードソロモン)ブロックという。RSブロックごとに、誤り訂正コード語列を算出する。例えば、以下のように決められている。
    • 1- x であれば、RSブロック数は1である。
    • 3 - Q の場合、RSブロック数は2である。3- Qの全ブロックのデータコード語は34個、誤り訂正コード語は36個であるが、各RSブロックのデータコード語は17個、誤り訂正コード語は18個である。
    • 5 - H の場合、RSブロック数は4個あり、そのうち2個のRSブロックのデータコード語は11個、誤り訂正コード語は22個、残り2個のRSブロックのデータコード語は12個、誤り訂正コード語は22個。

というわけでプログラムの手順としては
  • 使う型番と誤り訂正レベルに応じて、データコード語列をRSブロックに分割する。
  • 分割したデータコード語列に対して誤り訂正コード語列を求める。
ということになる。

さて、誤り訂正コード語列を求めるにはどすればいいのか。
規格書にはさらに難解な言葉が、、、
  • 規格書より引用
    QRコードの多項式は、2を法とする算術及び100011101を法とする算術(体の原始多項式 x8 + x4 + x3 + x2 + 1の係数を示す100011101を持つ2の8乗のガロア体)を用いて計算する。。。。。。

うーん。高校で数学をちゃんとやっておけば、、、いや、高校でもガロア体なんて言葉聞いたことないとおもうぞ。。。やっぱり理系のひとはこんなのわかるんだろうね。きっと。そもそも私はスペイン文学士だ。ドンキホーテなら全部読んだぞ。えへん。日本語だけど。ぶつぶつ。。。

いや、こんなときはgoogleで検索してみよう。じゃあガロア体とは?

うーん。高校で数学をちゃんとやっておけば、、、いや、高校でもガロア体なんて。。。。


続く。。。




0 件のコメント: