誤り訂正符号とは何ですか

結論

誤り訂正符号とは、データに冗長な情報を加え、通信や保存、読み取りの際に生じた誤りを検出し、条件に応じて元のデータを復元する技術です。QRコードやコンピューターのメモリ、デジタル通信などで利用されます。誤りを検出するだけの方式と、実際に訂正できる方式は区別する必要があります。

クイックアンサー:誤り訂正符号は、データの一部が変化したり失われたりした場合に備えて、元の情報に検査・復元用の情報を付け加える仕組みです。英語ではError-Correcting Codeと呼ばれ、ECCと略されます。QRコードではリード・ソロモン符号が使われており、一定の範囲内であれば、汚れや欠損があるコードから情報を復元できます。

誤り訂正符号とは?基本的な意味と役割

誤り訂正符号は、データに一定の規則で余分な情報を付け加え、データの一部に誤りが発生したときに、その誤りを見つけたり修正したりするための仕組みです。データを送信するときだけでなく、記憶装置に保存したデータを読み出すときにも利用されます。

デジタルデータは、通常、0と1のビットで表されます。しかし、通信中のノイズ、記録媒体の劣化、読み取り時の汚れや傷などによって、保存・伝送されたデータが元の内容と異なることがあります。このような変化は、ビット誤りやデータ破損につながります。

そこで、元のデータと一緒に、データの規則性を確認するための情報を扱います。受信側や読み取り側は、その情報を利用して異常を判定し、符号方式の能力と誤りの状態に応じてデータを復元します。

なぜデータに余分な情報を加えるのか

誤り訂正符号では、元のデータに追加する情報を冗長性と呼びます。冗長性は単なる無駄なデータではありません。元の情報が正しいかどうかを判断したり、失われた情報を復元したりするために使われます。

例えば、送信側が「1011」という4ビットの情報を送信し、受信側に「1001」が届いたとします。受信側が元のデータを別に持っていなければ、受信したビット列だけを見て、どのビットが変化したのかを確実に判断することはできません。

誤り訂正符号では、あらかじめ決めた規則に基づいて検査情報を追加します。受信側はその規則を使い、誤りの有無や位置を推定します。ただし、冗長な情報を加えるだけで、どのような誤りでも必ず訂正できるわけではありません。訂正能力は符号方式や追加情報の構成によって異なります。

誤り検出と誤り訂正の違い

誤り検出は、データに異常があることを見つける処理です。一方、誤り訂正は、検出した異常について、条件が満たされていれば正しいデータを復元する処理です。

例えば、通信で誤りが検出された場合、送信側にデータを再送信してもらう方法があります。これに対して、誤り訂正符号を使えば、受信したデータと追加情報から、その場で誤りを修正できる場合があります。再送信が難しい状況や、読み取りをできるだけ一度で済ませたい場面では、特に重要な違いです。

誤り訂正符号が使われる場面

誤り訂正符号は、データを正確に扱う必要があるさまざまな場面で利用されています。

利用分野主な役割
QRコード一部が汚れたり欠けたりした場合でも、条件に応じて情報を復元する。
デジタル通信伝送中に発生したビット誤りへの対策を行う。
メモリ記憶データの一部に生じた誤りを検出・訂正する。
ストレージデータの記録や読み出しに伴う誤りへの対策に利用する。
デジタルメディア記録や読み取り時の誤りに対応し、データの信頼性を高める。

このように、誤り訂正符号の目的はデータの信頼性を高めることです。ただし、訂正能力には限界があります。損傷が大きすぎる場合や、訂正できる範囲を超える誤りが発生した場合は、元のデータを復元できないことがあります。

誤り訂正符号はどのような仕組みで誤りを直すのか

誤り訂正符号の基本的な処理は、データに追加情報を付ける「符号化」と、受け取ったデータを検査して元の情報を取り出す「復号」に分けられます。データを送信する場合だけでなく、保存したデータを後から読み出す場合にも、基本的な考え方は共通しています。

符号化から誤り訂正までの流れ

  1. 元のデータを用意する:送信または保存したいデータを準備します。
  2. 符号化する:決められた規則に従って冗長ビットなどの追加情報を計算し、元のデータと組み合わせます。
  3. データを送信・保存する:符号化されたデータを通信経路に流したり、記録媒体に保存したりします。
  4. 受信・読み取りを行う:受信側や読み取り側がデータを取得します。この段階で元のデータとは異なるビットが含まれている場合があります。
  5. 検査して誤りを判定する:符号の規則と受信データを照合し、異常の有無や誤りの位置を判断します。
  6. 復号・訂正する:符号方式の能力と誤りの状態に応じてデータを修正し、元の情報を取り出します。

実際の処理方法は符号方式によって異なります。すべての方式が同じ手順で誤りの位置を特定するわけではなく、訂正ではなく検出だけを目的とする方式もあります。

冗長ビットはどのように役立つのか

冗長ビットは、元のデータだけでは分からない情報を補うために使われます。例えば、パリティビットを用いる方式では、データに含まれる1の個数が特定の条件を満たすように検査用のビットを追加します。受信側でその条件が崩れていれば、データに誤りが生じた可能性を検出できます。

ただし、単純なパリティビットでは、複数のビットが変化すると異常を検出できない場合があります。また、パリティビットだけで一般に誤りの位置まで特定できるわけではありません。誤りの位置を判断して訂正するには、より多くの検査情報を使うなど、別の仕組みが必要です。

誤り訂正の考え方を簡単な例で理解する

誤り訂正の仕組みを理解するには、正しいデータとして認められるビット列を、あらかじめ決めておくと考えると分かりやすくなります。符号化されたデータは、任意のビット列ではなく、特定の規則を満たす符号語です。

受信したビット列が正しい符号語と少しだけ異なる場合、復号器は符号の規則を使い、最も可能性の高い元の符号語を推定できます。ただし、異なる符号語に近い位置まで複数のビットが変化すると、正しい送信データを特定できないことがあります。

この考え方は、符号語同士の違いを数える「ハミング距離」と関係しています。符号語同士が十分に離れているほど、一定数のビット誤りが起きても、どの符号語が元のデータだったかを区別しやすくなります。

また、復号器が誤った符号語を正しいものと判断する「誤訂正」が起こる可能性もあります。誤り訂正符号はすべての破損を確実に見抜くものではなく、必要に応じてCRCなどの誤り検出の仕組みを併用します。

誤り訂正能力は何で決まる?ハミング距離と訂正可能な誤り

誤り訂正符号がどの程度の誤りに対応できるかを考えるとき、重要になるのがハミング距離です。ハミング距離とは、同じ長さの2つのビット列を比べたとき、値が異なる位置の数を表します。

例えば、「1011」と「1001」は3番目のビットだけが異なるため、ハミング距離は1です。一方、「1011」と「0100」は複数の位置が異なるため、ハミング距離は1より大きくなります。

符号語同士の最小ハミング距離を \(d_{\min}\) とすると、一般的なブロック符号では、誤りを確実に検出できる最大ビット数の目安は \(d_{\min}-1\)、誤りを確実に訂正できる最大ビット数の目安は次の式で表されます。

訂正可能なビット数:

\(\displaystyle t=\left\lfloor\frac{d_{\min}-1}{2}\right\rfloor\)

これは、受信したビット列が元の符号語から離れても、別の符号語の訂正範囲に入り込まないようにするためです。例えば、最小ハミング距離が3の符号では、通常、1ビットの誤りを確実に訂正できます。

ただし、この式は符号の性質を理解するための一般的な基準です。実際に利用する符号の訂正能力は、符号の設計、誤りの種類、誤りの位置が分かっているかどうかなどによって変わります。

誤り検出と誤り訂正で必要な能力は異なる

誤りを検出するだけなら、データが正しい符号語から外れたことを判断できればよい場合があります。一方、誤りを訂正するには、どの符号語が元のデータに対応するのかを区別できる必要があります。

そのため、同じ符号でも、検出できる誤りの数と訂正できる誤りの数は同じとは限りません。訂正能力を増やすには、符号語同士の距離を広げたり、冗長な情報を増やしたりする設計が必要になる場合があります。

誤り検出符号・誤り訂正符号・チェックデジットの違い

誤り検出符号、誤り訂正符号、チェックデジットは、いずれもデータの正しさを確認する場面で使われますが、目的や仕組みは同じではありません。特に、誤りを発見することと、正しい情報に戻すことは区別する必要があります。

仕組み主な目的誤りの訂正
誤り検出符号データに誤りがあるかを検出する検出だけを目的とする方式では訂正できない
誤り訂正符号誤りを検出し、条件に応じて修正する符号方式の能力と誤りの範囲内で可能
チェックデジット数字列などの入力ミスを検査するための桁を付加する通常は誤りの検出が中心で、元の値を自動的に復元するものではない
パリティビットビット列のパリティ条件を使って誤りを検出する単純な方式では訂正能力に限界がある
CRCデータの破損を検出する一般的には検出に利用し、訂正には別の仕組みを使う

バーコードのチェックデジットは何をするのか

JANコードなどの一部のバーコードでは、数字列の整合性を確認するためにチェックデジットが使われます。所定の計算規則で求めた値と、コードに含まれるチェックデジットを照合することで、入力や読み取りの誤りを検出する手がかりになります。

ただし、チェックデジットが一致したからといって、データが必ず正しいと保証されるわけではありません。検査方式で検出できない誤りもあり、チェックデジット自体は、誤った数字を正しい数字へ自動的に戻すための情報ではありません。

バーコードの桁数やチェックデジットの役割を確認したい場合は、バーコードの桁数についても参考になります。

QRコードの誤り訂正はチェックデジットとどう違うのか

QRコードでは、誤り訂正の仕組みを使って、コードの一部が汚れたり欠けたりしていても、残った情報から元のデータを復元できる場合があります。これは、数字列の入力ミスなどを検出するチェックデジットとは役割が異なります。

QRコードの誤り訂正では、誤り訂正レベルによって、データに加える冗長な情報の量と、対応できる損傷の程度が変わります。ただし、誤り訂正レベルが高ければ、どのような損傷でも読み取れるという意味ではありません。コード全体の状態や損傷した場所、読み取り環境なども結果に影響します。

用途に合ったコードを作成するときは、誤り訂正だけでなく、印刷サイズや読み取りやすさも考慮することが大切です。実際に作成する場合は、無料バーコード作成・一括生成ツールで用途に合うコード形式を確認できます。

代表的な誤り訂正符号の種類と特徴

誤り訂正符号には複数の方式があり、それぞれ得意とする誤りや用途が異なります。選ぶ際は、データ量、訂正したい誤りの種類、処理に必要な計算量、追加情報によって増えるデータ量などを考慮します。

方式特徴主な用途・位置づけ
ハミング符号検査用のビットを使い、特定の条件で発生したビット誤りを検出・訂正するメモリやデジタル回路など
リード・ソロモン符号複数のビットからなる記号を単位として扱い、一定範囲の記号誤りや消失に対応するQRコードや各種デジタルデータの保護
BCH符号数学的な構成に基づき、設計に応じた誤り訂正能力を実現する記憶装置や通信など
畳み込み符号連続する入力データの関係を利用して符号化する通信システムなど
低密度パリティ検査符号疎な検査行列を利用し、反復的な復号処理で誤り訂正を行う各種デジタル通信やデータ伝送

ハミング符号の特徴

ハミング符号は、データビットに検査用のビットを追加し、検査結果の組み合わせから誤りの位置を判断する方式です。代表的なハミング符号では、条件を満たす単一ビットの誤りを訂正できます。拡張ハミング符号では、追加のパリティ情報を用いて、単一ビット誤りの訂正と二重ビット誤りの検出を組み合わせる方式もあります。

ただし、訂正と検出の能力は符号の構成によって異なります。複数のビットが誤っている場合に、すべてのハミング符号が正しく訂正できるわけではありません。

ハミング(7,4)符号とは

ハミング(7,4)符号は、4ビットのデータに3ビットの検査情報を追加し、合計7ビットの符号語を構成する方式です。「7,4」という表記は、符号語が7ビットで構成され、そのうち4ビットが情報ビットであることを示します。

追加された検査ビットは、決められたデータビットの組み合わせから計算されます。受信側は検査結果の組み合わせを利用して、単一ビットの誤りがある場合に、その位置を特定して訂正します。

例えば、送信した7ビットの符号語のうち1ビットだけが変化した場合、標準的なハミング(7,4)符号では、その誤りを訂正できます。一方、複数のビットが変化した場合は、正しく訂正できるとは限りません。単一誤り訂正と二重誤り検出を両立させたい場合には、拡張ハミング符号などが使われます。

リード・ソロモン符号の特徴

リード・ソロモン符号は、データを一定の規則で符号化し、追加した冗長な記号を使って誤りを訂正する方式です。ビット単位ではなく、複数のビットからなる記号を単位として扱うため、まとまった範囲の記号が誤っている場合や、位置が分かっている記号が失われた場合などに対応できます。

QRコードの誤り訂正では、この方式が利用されています。そのため、コードの一部に汚れや欠損があっても、残された情報と誤り訂正用の情報が十分であれば、データを読み取れることがあります。ただし、復元可能な範囲を超えて損傷すると、読み取りに失敗する可能性があります。

用途に合わせて方式を選ぶポイント

誤り訂正符号を選ぶときは、方式の名前だけで判断せず、次の点を確認します。

QRコードを作成する一般利用者の場合、誤り訂正符号の数式を自分で実装する必要は通常ありません。重要なのは、利用する生成ツールで選択できる誤り訂正レベルの意味を理解し、印刷環境やコードの用途に合った設定を選ぶことです。

関連ページ: QRコードの誤り訂正符号とは?仕組み・レベルの違い・選び方を解説

誤り訂正符号の限界と読み取りエラーへの対処法

誤り訂正符号には、復元できる誤りの範囲に限界があります。QRコードに誤り訂正機能が設定されていても、コードの一部が大きく欠けていたり、必要なパターンが認識できなかったりすると、読み取りに失敗することがあります。

読み取りエラーが発生した場合は、誤り訂正レベルだけを変更するのではなく、印刷品質、コントラスト、コードの大きさ、読み取り環境を順番に確認しましょう。

読み取れない原因を切り分ける

  1. 印刷品質を確認する:線やセルがつぶれていないか、ぼやけていないかを確認します。印刷解像度が不足している場合は、出力品質を改善します。
  2. コントラストを確認する:コードと背景の明暗差が十分にあるかを確認します。背景画像や装飾がコードを見づらくしている場合は、デザインを見直します。
  3. 汚れや欠損を確認する:コードの一部が隠れていないか、折れや傷がないかを確認します。可能であれば、汚れのない状態で再読み取りします。
  4. 読み取り環境を確認する:カメラのピント、照明の反射、撮影距離、端末の状態を確認し、角度や距離を変えて試します。
  5. 誤り訂正レベルを見直す:必要に応じて設定を変更し、再生成したQRコードを複数の端末でテストします。
  6. 格納データを確認する:読み取りに成功しても、表示されたURLや番号が意図した内容と一致するか確認します。

誤り訂正レベルを上げても解決しない場合

誤り訂正レベルを高くしても、読み取りエラーが必ず解消されるわけではありません。コードの一部が損傷している場合には有効なことがありますが、コード全体の配置が崩れている、印刷が極端に不鮮明である、コントラストが不足しているといった問題は、別途修正する必要があります。

また、QRコードに格納したURLそのものが間違っている場合、読み取りに成功しても正しいページにはアクセスできません。読み取りの問題と、読み取った後のリンク先の問題は分けて確認してください。

一括生成では、すべてのコードを個別に確認することが難しい場合があります。そのため、生成後は元データとの対応関係を保ち、異なる行から作成したコードをサンプルとして読み取り、出力形式や印刷条件を確認することが重要です。重要な用途では、サンプル確認だけでなく、必要に応じて生成したコード全体を検証してください。

誤り訂正符号に関するよくある間違い

誤り検出と誤り訂正は同じものだと思っている

誤り検出はデータに誤りがあることを判定する処理であり、誤り訂正は条件に応じて正しいデータを復元する処理です。誤りを検出できても、必ず元のデータを復元できるとは限りません。

チェックデジットがあればデータを復元できると思っている

チェックデジットは、主に数字や文字列の入力ミスなどを検出するために使われます。通常は、間違ったデータを自動的に正しい値へ復元する仕組みではありません。QRコードの誤り訂正符号とは目的と働きが異なります。

冗長性が多いほど、必ず読み取りやすくなると思っている

冗長性を増やすと、誤り訂正に利用できる情報が増えます。一方、QRコードでは同じデータを格納する際に構成や密度が変わることがあり、印刷サイズや読み取り条件によっては不利になる場合もあります。訂正能力だけでなく、出力品質やコードの大きさも考慮してください。

誤り訂正レベルHなら、どこが欠けても問題ないと思っている

レベルHでも訂正できる範囲には限界があります。損傷の場所や大きさ、読み取りに必要なパターンの状態によっては復元できません。ロゴを追加する場合も、ロゴが大きいほど安全というわけではないため、配置を調整して読み取りテストを行います。

読み取りに成功すれば、データが正しいと思っている

読み取りに成功することと、格納した内容が意図どおりであることは別です。URL、商品情報、管理番号などを格納した場合は、読み取った結果が正しいかどうかも確認してください。誤り訂正符号は、入力時点で間違っていた情報を正しい内容に修正するための仕組みではありません。

誤り訂正符号に関するよくある質問

誤り訂正符号とは何ですか?

データに冗長な情報を加え、通信や保存、読み取りの際に発生した誤りを検出し、条件に応じて訂正する技術です。QRコード、メモリ、デジタル通信などで利用されています。

ECCとは誤り訂正符号のことですか?

はい。ECCはError-Correcting Codeの略称として使われ、誤り訂正符号を指します。データの誤りを検出・訂正する技術を表す用語です。

誤り訂正符号の一覧にはどのような方式がありますか?

代表的な方式には、ハミング符号、リード・ソロモン符号、BCH符号、畳み込み符号、低密度パリティ検査符号などがあります。用途や訂正能力、処理条件に応じて使い分けます。

パリティビットと誤り訂正符号は同じですか?

パリティビットは、ビット列に含まれる1の個数などの条件を使って誤りを検出する仕組みです。単純なパリティ方式は通常、誤りの位置を特定して訂正することはできません。パリティは、より広い誤り検出・訂正の仕組みを構成する要素として利用されます。

標準的なハミング(7,4)符号は、4ビットのデータに3ビットの検査情報を加えた7ビットの符号語を使い、1ビットの誤りを訂正できます。複数ビットの誤りを常に正しく訂正できるわけではありません。

QRコードではリード・ソロモン符号が使われています。コードの一部が損傷しても、訂正可能な範囲でデータを復元できます。ただし、損傷が大きい場合や読み取りに必要なパターンが認識できない場合は、読み取れないことがあります。

誤り訂正能力の目安が異なります。一般的にはLが約7%、Mが約15%、Qが約25%、Hが約30%です。ただし、コード全体の面積に対して同じ割合の損傷を必ず許容できるという意味ではありません。

はい。CSV、Excel、Googleスプレッドシート、テキストなどから大量のQRコードを作成する場合も、印刷条件や格納情報に応じた設定を検討します。生成後は、元データとの対応関係を確認し、実際の利用環境で読み取りテストを行ってください。

無料で利用できる範囲、対応する入力形式、生成数の制限、出力形式、誤り訂正レベルを変更できるかなどを確認します。ツールごとに機能が異なるため、少数のデータで生成から読み取りまで試してから本格的に利用すると安心です。

誤り訂正符号を使えば、最初から間違っていたデータも直せますか?

いいえ。誤り訂正符号は、符号化後に発生した誤りを訂正するための仕組みです。最初に誤ったURLや商品番号を登録した場合、その内容が意図した正しい値に自動で修正されるわけではありません。生成前のデータ確認と、生成後の読み取り確認を行ってください。

まとめ

誤り訂正符号とは、データに冗長な情報を加え、伝送や保存、読み取り時に発生した誤りを検出・訂正するための技術です。ハミング符号は主にビット誤りの検出・訂正に利用され、リード・ソロモン符号はQRコードなどで使われています。方式ごとに訂正能力や処理方法が異なるため、用途に合った仕組みを選ぶことが重要です。

QRコードでは、L・M・Q・Hの4つの誤り訂正レベルから、利用環境に合った設定を検討できます。ただし、誤り訂正能力には限界があり、印刷品質、コントラスト、コードの損傷状態によっては読み取れません。また、誤り訂正符号は、最初から間違っていたURLや商品情報を自動的に修正するものではありません。

CSVやExcel、Googleスプレッドシート、テキストからQRコードを一括生成する場合も、元データの正確さと生成後の検証が欠かせません。用途に合ったコードを作成したら、実際のサイズで出力し、使用する端末で読み取りテストを行いましょう。

QRコードを作成する場合は、Bulk Qr Code Generatorで用途に合った生成方法を確認し、格納データと読み取り結果の両方を確かめることが大切です。

誤り訂正符号とは何ですか?

データに冗長な情報を加え、伝送や保存、読み取りの際に生じた誤りを検出または訂正するための符号化技術です。

誤り訂正符号と誤り検出符号の違いは何ですか?

誤り検出符号はデータの誤りを検出することを目的とし、誤り訂正符号は条件を満たす範囲で誤りを訂正できるようにします。誤り訂正符号には誤り検出の機能もあります。

ECCとは誤り訂正符号のことですか?

はい。ECCは誤り訂正符号を指す略称として使われます。データの誤りを検出・訂正する技術を表します。

QRコードではどの誤り訂正符号が使われますか?

QRコードではリード・ソロモン符号が使われています。コードの一部が損傷しても、訂正可能な範囲でデータを復元できます。

QRコードの誤り訂正レベルL・M・Q・Hは何が違いますか?

誤り訂正能力の目安が異なります。一般にLは約7%、Mは約15%、Qは約25%、Hは約30%です。ただし、コードの面積に対する損傷許容率を直接示すものではありません。

誤り訂正レベルHならQRコードが必ず読み取れますか?

いいえ。Hでも訂正能力には限界があります。損傷の範囲や位置、印刷品質、コントラスト、読み取り環境によっては読み取れません。

誤り訂正符号があれば、印刷品質は気にしなくてよいですか?

いいえ。セルのつぶれやぼやけ、低いコントラストなどは読み取りを妨げます。誤り訂正機能に頼りすぎず、適切なサイズと印刷品質を確保してください。

チェックデジットと誤り訂正符号は同じですか?

同じではありません。チェックデジットは主に入力ミスなどの検出に使われます。誤り訂正符号は、方式や条件に応じてデータの誤りを訂正できるようにする仕組みです。

ハミング符号は何をするためのものですか?

ハミング符号は、冗長な検査情報を使ってデータの誤りを検出・訂正する符号方式です。基本的なハミング符号では、条件を満たす場合に1ビットの誤りを訂正できます。

7,4ハミング符号では何ビットの誤りを訂正できますか?

誤り訂正符号を使えば、最初から間違っていたデータも直せますか?

いいえ。誤り訂正符号は、符号化後に発生した誤りを訂正するための仕組みです。最初に誤ったURLや商品番号を登録した場合、その内容が意図した正しい値に自動で修正されるわけではありません。