QRコードの概要
符号化(エンコード)
エラー訂正の概要
エラー訂正に必要な「行列」の解説
「行列」を使ってエラー訂正をしよう
リード・ソロモン符号とエラー訂正の方法
多項式の割り算
リード・ソロモン符号の作り方
ガロア理論と体
QRコードを作ろう
QRコードメーカー
独極・QRコード担当の「あじな」です。 最近、物忘れが激しです。私の脳には「エラー訂正」能力がないのでしょうか。。しょんぼり。。

これまでの復習 [表示する]

  1. QRコードは株式会社デンソーが作ったもので、スマホや携帯で読み取れる
  2. QRコードは「小さな白と黒の四角でできている」「多少汚れても大丈夫」という特徴がある
  3. 白黒の四角を使うのは、コンピュータにわかりやすくさせるため
  4. QRコードは「機能パターン」と「符号化領域」で出来上がっている
  5. 「機能パターン」は、「クワイエットゾーン」「位置検出パターン」「位置検出パターンの分離パターン」「タイミングパターン」「位置合わせパターン」の5種類
  6. 「符号化領域」は「形式情報」「型番情報」「データ領域」の3種類
  7. 「形式情報」は「エラー訂正レベル」と「マスクパターン参照子」で決まり、「\(4 \times 8=32\)」種類のパターンがある
  8. 「型番情報」は「QRコードのバージョンによって決まり、40種類ある
  9. 「データ領域」は「データ」と「エラー訂正情報」で出来上がる
  10. QRコードはバージョンが1~40まである。一辺の大きさは、「QRコードのバージョン(1~40)\( \times \)4\( + \)17」
  11. 「エラー訂正レベル」は「L(7%の汚れまで)」「M(15%の汚れまで)」「Q(25%の汚れまで)」「H(30%の汚れまで)」の4種類ある。
  12. 「エラー訂正レベル」が「L」だと「QRコード」で表現できるデータの量は最大で、「H」のときに最小になる。
  13. 「1bit」とは白・黒、1・0のような2種類の情報を表すことができる能力のことで、文字を増やすと「2bit(4種類)」「3bit(8種類)」と表現できる種類が増える
  14. 日常の言葉を「エンコード」して「コード(符号)」に置き換え、「コード(符号)」を「デコード」して日常の言葉に戻す
  15. QRコードの「エンコード」方式は「数字モード」「英数字モード」「漢字モード」「8bitモード」の4種類
  16. どの「エンコード」方式でも、データは「モード指示子」+「文字数指示子」+「データ」+「終端パターン」+「埋め草ビット」+「埋め草ワード」となる
  17. QRコードには「白」と「黒」を読み間違えても、元の情報を復元する「エラー訂正」能力が備わっている

あなたも私も「エラー訂正」をやっている!?

例えば、騒音がうるさい工事現場の近くでご近所さんに出会ったと思ってください。
その時、あなたにはご近所さんが「こんに■は。今日はいい■気ですね」と言っているように聞こえました。
「■」の部分は工事の音がうるさくてよく聞こえなかった部分です。
実際、近所の方がなんて言ったかわかりますか?

「いまどき、ご近所付き合いなんてないよ」っていわないでください・・・。あくまで、想像ですから。
きっと、聞こえない部分があっても「こんにちは。今日はいい天気ですね」と言っていることがわかりますよね。

これって、前回QRコードのエラー訂正の例でみたものと似ていると思いません?
「1101010■1101101100■110001010」となって、「■」の部分がうまく読めなかったときに、復元するってやつです。

なんで、私たちは普段こんな復元ができるのでしょうか?もう少し例を見てみましょう。

次の文は「エラー訂正」できますか?
「卵は1パック、1■1円です」

・・・わからないですよね。1パック191円なのか、181円なのか・・・。
なんで、ご近所さんの挨拶は「エラー訂正」できたのに、卵の価格のエラー訂正はできないのでしょうか?

どんなのときにエラー訂正可能なのか?

先ほど事例から、どんなときにエラー訂正が可能なのか考えてみましょう。

もう皆さん、薄々気づいているとは思いますが、「その文脈だと、普通この単語しかでてこない」というのがはっきりしている場合は、エラー訂正可能なのです。
たとえば、「こんに■は」と言われた場合、可能性的には「こんにあは」とか、「こんにそは」といった文もあり得ますが、日本語にそんな単語はなく「こんにちは」と解釈するのが妥当なのです。
ちょっと変な言い方をすれば「考えられる日本語のうち、もっとも”近しい”単語を選んで推測している」ということです。

もうちょっと、変なことを考えてみると、可能性的には、「こんに■は」と聞こえた際には、「■」の部分が聞き取れなかっただけでなく、「ん」や「に」の部分も聞き間違いで、相手は「このたびは」といったのかもしれません。
でも、「こんに■は」と聞こえた場合、「このたびは」と「こんにちは」を比べると、圧倒的に「こんにちは」という単語のほうが「近い」ですよね。
だから、素直に「こんにちは」と復元できたのです。

ありえる単語の中でも最も近い距離にあるものに復元します
単語の距離のイメージ


一方、「1■1円」の場合、「181円」でも「191円」でもあり得ます。
さっきの「近い」という単語で解説すると、「1■1円」と「181円」、「191円」はどっちも同じぐらい近く、どっちも「ありえそう」なのです。
(もしかしたら、主婦の方々にとってはどっちがあり得そうかという感覚があるのかもしれませんが・・・。)

つまり、同じ近さに複数の別の単語(卵の例だと「191円」や「181円」)があると、「復元できない」んです。

復元は効率を犠牲にしている

前回の解説でも少し触れましたが、復元は効率性を犠牲にしています
というのも、日本語に「こんにあは」や「こんにそは」がないから「こんに■は」は「こんにちは」に復元できたのですが、裏を返せば、日本語は「こんにあは」や「こんにそは」という単語を禁止していることになります。
5文字の「ひらがな」で表現できる単語は、(「ひらがな」に50種類の文字があるとすると)\(50^5=312,500,000\)種類あるはずですよね。
でも、実際は可能な文字の並びの中でも「あえて」つかわない単語があるのです(「こんにあは」とか「こんにそは」といった単語はつかわない単語です)
これは、少ない文字でたくさんの種類を表現したいという効率性の面からは「よくない」ことですが、「エラー訂正」という観点からは「望ましい」ことなのです。

つまり、「エラー訂正」と「効率性」は相性が悪いのです。
そこで、世の中の偉い人たちは「効率性をそこそこ保てて、エラー訂正能力もそこそこある」というバランスの良い形を探し始めることになります。