| リード・ソロモン符号 | |
|---|---|
| にちなんで名付けられました | アーヴィング・S・リードとギュスターヴ・ソロモン |
| 分類 | |
| 階層 | 線形ブロック符号、多項式符号、リード・ソロモン符号 |
| ブロック長 | n |
| メッセージの長さ | k |
| 距離 | n − k + 1 |
| アルファベットサイズ | q = p m ≥ n ( p は素数)多くの場合、n = q − 1 です。 |
| 表記法 | [ n , k , n − k + 1] qコード |
| アルゴリズム | |
| Berlekamp–Massey Euclideanら | |
| 不動産 | |
| 最大距離分離可能コード | |
情報理論および符号理論において、リード・ソロモン符号は、 1960 年にアービング S. リードとギュスターヴ ソロモンによって導入された誤り訂正符号のグループです。[ 1 ]ミニディスク、CD、DVD、ブルーレイディスク、QR コード、データ マトリックス などの消費者向け技術、DSLやWiMAXなどのデータ伝送技術、衛星通信、 DVBやATSCなどの放送システム、 RAID 6などのストレージ システムなど、多くの用途があります。
リード・ソロモン符号は、シンボルと呼ばれる有限体要素の集合として扱われるデータブロックに対して動作します。リード・ソロモン符号RS( n , k )は、複数のシンボルエラーを検出および訂正できます。データにt = n − k個のチェックシンボルを追加することで、リード・ソロモン符号は、最大t個の誤ったシンボルの任意の組み合わせを検出(ただし訂正はしない)したり、未知の位置にある最大⌊t /2⌋個の誤ったシンボルを特定して訂正したりできます。消去符号として、アルゴリズムに提供され既知の位置にある最大t個の消去を訂正したり、エラーと消去の組み合わせを検出して訂正したりできます。リード・ソロモン符号は、連続するb + 1個のビットエラーのシーケンスが最大でサイズbのシンボル2個に影響を与える可能性があるため、多重バーストビットエラー訂正符号としても適しています。tの選択は符号の設計者に委ねられており、広い範囲内で選択できます。
本稿では、リード・ソロモン符号化方式には2種類あり、それぞれ「オリジナルビュー」と「BCHビュー」と呼ぶ。その起源については、歴史の項で説明する。
リード・ソロモン符号は、1960 年に当時MIT リンカーン研究所の職員であったIrving S. ReedとGustave Solomonによって開発されました。彼らの画期的な論文は「特定の有限体上の多項式符号」と題されていました。[ 1 ]リードとソロモンの論文で説明されている元の符号化方式では、符号化するメッセージに基づいて可変多項式を使用しており、符号化する固定値のセット (評価点) のみがエンコーダとデコーダに知られています。元の理論的なデコーダは、受信したメッセージのn (符号化されたメッセージの長さ) の値のうちk (符号化されていないメッセージの長さ)の部分集合に基づいて潜在的な多項式を生成し、最もよく見られる多項式を正しいものとして選択しましたが、これは最も単純なケースを除いては実用的ではありませんでした。これは当初、元の方式をエンコーダとデコーダの両方に知られている固定多項式に基づくBCH 符号互換方式に変更することで解決されましたが、後に、元の方式に基づく実用的なデコーダが開発されました。ただし、当初は BCH 方式よりも低速でした。その結果、リード・ソロモン符号には大きく分けて2種類存在する。1つは元の符号化方式を用いるもの、もう1つはBCH符号化方式を用いるものである。
また、1960年には、ダニエル・ゴレンシュタインとニール・ツィーラーによって開発された、BCH 符号用の実用的な固定多項式デコーダが、1960 年 1 月にツィーラーによるMIT リンカーン研究所のレポートで説明され、その後 1961 年 6 月に記事で説明されました。 [ 2 ]ゴレンシュタイン-ツィーラーデコーダと BCH 符号に関する関連研究は、 W. ウェズリー・ピーターソン(1961)の著書「誤り訂正符号」で説明されています。 [ 3 ] 1963 年までに (あるいはそれ以前に)、JJ ストーン (および他の研究者)は、リード-ソロモン符号が固定生成多項式を使用する BCH 方式を使用できることを認識し、そのような符号を BCH 符号の特別なクラスにしました。[ 4 ]しかし、元の符号化方式に基づくリード-ソロモン符号は BCH 符号のクラスではなく、評価点の集合によっては巡回符号ですらありません。
1969年、エルウィン・バーレカンプとジェームズ・マッセイによって改良されたBCH方式復号器が開発され、以来、バーレカンプ・マッセイ復号アルゴリズムとして知られている。
1975年、杉山康夫は拡張ユークリッドアルゴリズムに基づいて、別の改良型BCH方式デコーダを開発した。[ 5 ]

1977年、リード・ソロモン符号は、連結された誤り訂正符号の形でボイジャー計画に実装されました。量産型消費者向け製品における最初の商用応用は、1982年に登場したコンパクトディスクで、そこでは2つのインターリーブされたリード・ソロモン符号が使用されています。今日、リード・ソロモン符号はデジタルストレージデバイスやデジタル通信規格で広く使用されていますが、ボーズ・チャウドリ・ホッケンゲム(BCH)符号に徐々に置き換えられつつあります。例えば、リード・ソロモン符号は、畳み込み内部符号と組み合わせてデジタルビデオ放送(DVB)規格DVB-Sで使用されていますが、後継規格であるDVB-S2ではLDPCと組み合わせてBCH符号が使用されています。
1986年、ベルレカンプ・ウェルチアルゴリズムとして知られる独自の復号方式が開発された。
1996年、マドゥ・スーダンらが、リストデコーダまたはソフトデコーダと呼ばれる、元の方式デコーダのバリエーションを開発し、これらのタイプのデコーダに関する研究は現在も続けられている(グルスワミ・スーダンのリスト復号アルゴリズムを参照)。
2002年には、拡張ユークリッドアルゴリズムに基づいて、Shuhong Gaoによって別の独自の方式デコーダが開発されました。[ 6 ]
2015年頃、独自のスキーム症候群のようなデコーダが開発された(作者不明)。[ 7 ]
リード・ソロモン符号化は、メディアの欠陥に伴うバーストエラーを訂正するために、大容量記憶システムで広く用いられている。
リード・ソロモン符号化はコンパクトディスクの重要な構成要素です。これは、大量生産される消費者向け製品で初めて強力な誤り訂正符号化が使用された例であり、DATやDVDも同様の方式を採用しています。CDでは、28ウェイ畳み込みインターリーバで分離された2層のリード・ソロモン符号化により、クロスインターリーブリード・ソロモン符号化(CIRC)と呼ばれる方式が実現されています。CIRCデコーダの最初の要素は、8ビットシンボルを持つ(255,251)コードを短縮した、比較的弱い内側の(32,28)リード・ソロモンコードです。このコードは、32バイトブロックあたり最大2バイトの誤りを訂正できます。さらに重要なのは、訂正不可能なブロック、つまり2バイトを超える誤りを持つブロックを消去としてフラグ付けすることです。消去の指示が付いた復号された28バイトブロックは、デインターリーバによって(28,24)外側コードの異なるブロックに分散されます。デインターリーブのおかげで、内部コードから消去された28バイトのブロックは、28個の外部コードブロックそれぞれにおいて、1バイトの消去として処理されます。外部コードは、1ブロックあたり最大4つの消去を処理できるため、この問題を容易に修正できます。
その結果、ディスク表面で最大4000ビット、つまり約2.5mmのエラーバーストを完全に訂正できるCIRCが実現しました 。このコードは非常に強力なので、CD再生エラーのほとんどは、訂正不可能なエラーバーストではなく、レーザーがトラックをジャンプさせるトラッキングエラーが原因である可能性が非常に高いです。[ 8 ]
DVDも同様の方式を採用しているが、ブロックサイズがはるかに大きく、内部コードは(208,192)、外部コードは(182,172)となっている。
リード・ソロモン誤り訂正は、USENET上でマルチメディアファイルに付随して投稿されることが多いアーカイブファイルでも使用されています。分散型オンラインストレージサービスであるWuala(2015年にサービス終了)も、ファイルの分割時にリード・ソロモンを使用していました。
PDF-417、MaxiCode、Datamatrix、QRコード、Aztecコード、Han Xinコードなど、ほとんどすべての2次元バーコードは、リード・ソロモン誤り訂正方式を採用しており、バーコードの一部が破損していても正しく読み取れるようになっています。バーコードスキャナがバーコードシンボルを認識できない場合、それは消去されたものとして扱われます。
リード・ソロモン符号化は一次元バーコードではあまり一般的ではないが、PostBarシンボル体系で使用されている。
リード・ソロモン符号の特殊な形式、特にコーシー-RSとヴァンデルモンド-RSは、消去チャネルを介したデータ伝送の信頼性の低さを克服するために使用できます。符号化プロセスでは、RS( N , K )という符号を想定し、その結果、長さNシンボルのN個の符号語が生成され、それぞれにKシンボルのデータが格納され、その後、消去チャネルを介して送信されます。
受信側でK個の符号語を組み合わせれば、N個の符号語すべてを復元できます。符号化率は、チャネルの消失確率が適切にモデル化でき、かつそれよりも低いと判断できる場合を除き、一般的に1/2に設定されます。結論として、Nは通常2Kであり、これは送信された符号語すべてを復元するには、送信された符号語の少なくとも半分が受信される必要があることを意味します。
リード・ソロモン符号は、xDSLシステムやCCSDSの宇宙通信プロトコル仕様において、前方誤り訂正の一形態として使用されている。

リード・ソロモン符号化の重要な応用例の一つは、ボイジャー計画によって送り返されたデジタル画像を符号化することであった。
ボイジャーは、リード・ソロモン符号と畳み込み符号を組み合わせた符号化方式を導入したが、この方式はその後、深宇宙通信や衛星通信(例えば、直接デジタル放送)において非常に広く普及した。
ビタビ復号器は、短いバースト状のエラーを発生させる傾向がある。これらのバーストエラーを訂正するには、短い、あるいは簡略化されたリード・ソロモン符号を用いるのが最適である。
連結型リード・ソロモン/ビタビ復号畳み込み符号化の現代版は、マーズ・パスファインダー、ガリレオ、マーズ・エクスプロレーション・ローバー、カッシーニのミッションで使用されており、シャノン容量という究極の限界から約1 ~ 1.5dB以内の性能を発揮します。
これらの連結コードは、より強力なターボコードに置き換えられつつあります。
リード・ソロモン符号は実際には符号のファミリーであり、各符号はアルファベットサイズq、ブロック長n、メッセージ長kの3 つのパラメータによって特徴付けられます。アルファベット記号の集合は有限体として解釈される。順序したがって、は素数のべき乗でなければならない。リード・ソロモン符号の最も有用なパラメータ化では、ブロック長は通常、メッセージ長の定数倍、つまりレートとなる。は定数であり、さらにブロック長はアルファベットサイズと等しいか、それより1つ少ないかのいずれかである。つまり、または。
リード・ソロモン符号にはさまざまな符号化手順があり、したがって、すべての符号語の集合を記述する方法も複数存在する。リードとソロモンの本来の見解では、リード・ソロモン符号のすべての符号語は、次数が1未満の多項式の関数値の列である。[ 1 ]リード・ソロモン符号の符号語を得るために、メッセージシンボル(q サイズのアルファベット内の各シンボル)は多項式の係数として扱われます。次数が有限体上と要素。次に、多項式一連の任意の順序の異なる点その分野の、そして値のシーケンスが対応するコードワードです。評価ポイントのセットの一般的な選択肢には、、または、、 ... 、 どこは、。
正式には、セットリード・ソロモン符号の符号語は、次のように定義される。 次数が1 未満の任意の 2 つの異なる多項式最大で同意するこれは、リード・ソロモン符号の任意の2つの符号語が少なくとも位置。さらに、一致する2つの多項式があります。点であるが等しくなく、したがってリード・ソロモン符号の距離は正確にすると相対距離は、 どこはレートです。相対距離とレートの間のこのトレードオフは漸近的に最適です。なぜなら、シングルトン境界により、すべてのコードがを満たすからです。この最適なトレードオフを実現する符号であるリード・ソロモン符号は、最大距離分離可能符号のクラスに属します。
次数がk未満の異なる多項式の数と異なるメッセージの数はどちらも等しいが、したがって、すべてのメッセージをそのような多項式に一意にマッピングできますが、このエンコーディングを行う方法はいくつかあります。リードとソロモンによる元の構成では、メッセージxを多項式pの係数として解釈しますが、その後の構成では、メッセージを最初のk点における多項式の値として解釈します。そして、これらの値を次数がk未満の多項式で補間することにより、多項式pを得る。後者の符号化手順は、効率はやや劣るものの、体系的なコード、すなわち元のメッセージが常に符号語の部分列として含まれるという利点がある。[ 1 ]
リードとソロモンの元の構成では、メッセージ多項式にマッピングされると 合言葉評価によって得られるで異なるポイントその分野の[ 1 ]したがって、古典的な符号化関数リード・ソロモン符号は次のように定義されます。
この関数は線形写像であり、すなわち、以下の-マトリックス要素を含む。
この行列は、上のヴァンデルモンド行列です。言い換えれば、リード・ソロモン符号は線形符号であり、古典的な符号化手順では、その生成行列は次のようになる。。
系統的なリード・ソロモン符号を生成する代替符号化手順があります。1つの方法は、ラグランジュ補間を使用して多項式を計算します。そのためそれから他のポイントで評価される。
この関数これは線形写像です。対応する体系的符号化行列Gを生成するには、行列AにAの左正方部分行列の逆行列を乗算します。
以下の-マトリックス要素を含む。
離散フーリエ変換は、本質的には符号化手順と同じであり、生成多項式を使用します。上記のように、一連の評価ポイントをメッセージ値にマッピングします。
逆フーリエ変換は、n < q 個のエラーのないメッセージ値のセットをk個の係数を持つ符号化多項式に変換するために使用できますが、この変換が機能するためには、メッセージを符号化するために使用される評価点のセットがαの増加べき乗のセットである必要があります。
しかし、ラグランジュ補間は、評価点の集合に対する制約や、エラーのないメッセージ値の集合の要件なしに同じ変換を実行し、体系的な符号化や、ガオ復号器のステップの1つに使用されます。
BCHコードとBCHビューのほとんどの実装では、最上位項が最初に表示されることに注意してください。このビューでは、メッセージは多項式の係数として解釈されます。:
生成多項式は、ガロア体原始の連続するべき乗を根とする多項式として定義される。 「狭義のコード」の場合、。
エンコーディングはコードワード多項式を計算するそれはちょうど。
送信者は関連する多項式を計算する学位どこそして多項式を送信する多項式メッセージ多項式を乗算することによって構築されます度を持つ生成多項式学位それは送信者と受信者の両方に知られている。。
この関数は線形写像であり、すなわち、以下の-マトリックス要素を含む。
以下のマトリックス要素を含む。
リード・ソロモン符号のBCHビューの符号化手順は、各符号語がメッセージを接頭辞として含み、誤り訂正記号を接尾辞として単純に付加する体系的な符号化手順となるように変更することができる。ここでは、送信する代わりに、エンコーダは送信多項式を構築する係数が最大の単項式は、対応する係数に等しい。、そして低次の係数次のように選ばれるで割り切れるすると、係数はは、係数の部分列である。全体的に体系的なコードを得るために、メッセージ多項式を構築します。メッセージをその係数のシーケンスとして解釈することによって。
形式的には、構築は乗算によって行われます。によるスペースを作るためにチェックシンボル、その積を余りを求め、その余りを差し引いて補正する。小切手記号は、剰余を計算することによって作成されます。:
残りの部分は最大で次の度数を持つ一方、係数は多項式においてゼロです。したがって、コードワードの次の定義は最初の係数は、:
結果として、はちょうど割り切れる: [ 11 ]
この関数これは線形写像です。対応する体系的符号化行列 G を生成するには、行列 A に A の左正方部分行列の逆行列を乗算します (または、G の左正方部分行列を単位行列に設定して各行を符号化します)。
以下のマトリックス要素を含む。
リード・ソロモン符号は [ n , k , n − k + 1] 符号です。言い換えれば、次元kでハミング距離が最小の、長さn ( F上)の線形ブロック符号です。リード・ソロモン符号は、最小距離がサイズ ( n , k )の線形符号で可能な最大値を持つという意味で最適です。これはシングルトン境界として知られています。このような符号は、最大距離分離可能 (MDS) 符号とも呼ばれます。
リード・ソロモン符号の誤り訂正能力は、その最小距離によって、または同等に、はブロック内の冗長性の尺度です。エラーシンボルの位置が事前にわからない場合、リード・ソロモン符号は最大で を訂正できます。誤ったシンボル、つまり、ブロックに追加された冗長シンボルの数の半分の数のエラーを訂正できます。エラーの位置が事前にわかっている場合もあります(たとえば、復調器の信号対雑音比の「サイド情報」 )—これらは消去と呼ばれます。リード・ソロモン符号(任意のMDS符号と同様)は、エラーの2倍の数の消去を訂正でき、 2 E + S ≤ n − kの関係が満たされる限り、エラーと消去の任意の組み合わせを訂正できます。エラーの数とはブロック内の消去回数です。

FSKのAWGNチャネルに対する理論的な誤差限界は、次の式で表すことができます。[ 12 ] その他の変調方式については、以下を参照してください。 どこ、、、は、符号化されていないAWGNの場合のシンボル誤り率であり、は変調次数です。
リード・ソロモン符号の実用的な用途では、有限体を用いるのが一般的である。と要素。この場合、各シンボルは次のように表すことができます。-ビット値。送信者はデータポイントをエンコードされたブロックとして送信し、エンコードされたブロック内のシンボル数はしたがって、8ビットシンボルで動作するリード・ソロモン符号はブロックあたりのシンボル数。(バイト指向のコンピュータシステムが普及しているため、これは非常に一般的な値です。)、 とブロック内のデータシンボルの数は設計パラメータです。一般的に使用されるコードは、8ビットのデータシンボルと32個の8ビットのパリティシンボル-シンボルブロック。これは次のように表記されます。コードに対応しており、ブロックあたり最大16個のシンボルエラーを修正できます。
上述のリード・ソロモン符号の特性により、エラーがバースト的に発生するアプリケーションに特に適しています。これは、シンボル内のビット数がいくつエラーになっても、符号にとっては問題にならないためです。シンボル内の複数のビットが破損しても、単一のエラーとしてカウントされるだけです。逆に、データストリームがエラーのバーストやドロップアウトではなく、ランダムな単一ビットエラーによって特徴付けられる場合、リード・ソロモン符号は通常、バイナリ符号に比べて不適切な選択肢となります。
リード・ソロモン符号は、畳み込み符号と同様に透過符号です。つまり、伝送路のどこかでチャネルシンボルが反転されていても、デコーダは正常に動作します。結果として、元のデータが反転されます。ただし、リード・ソロモン符号は、符号が短縮されると透過性を失います(このセクションの末尾にある「備考」を参照)。短縮された符号の「欠落」ビットは、データが反転されているかどうかに応じて、ゼロまたはイチで埋める必要があります。(言い換えれば、シンボルが反転されている場合は、ゼロ埋めをイチ埋めに反転する必要があります。)このため、リード・ソロモン復号を行う前に、データの意味(つまり、真または反転)を判別することが必須となります。
リード・ソロモン符号が巡回符号であるかどうかは、構成の微妙な詳細によって決まります。リードとソロモンの元の見解では、符号語は多項式の値であり、評価点のシーケンスを選択することで符号を巡回符号にすることができます。特に、は、体の原始根である。定義により、すべての非ゼロ要素形式をとるのために、 どこ各多項式以上暗号語を生み出す関数がも同じ次数の多項式であり、この関数はコードワードを生成する。; 以来が成り立つと、このコードワードは、から派生した元のコードワードの巡回左シフトである。。したがって、評価点として原始ルートのべき乗のシーケンスを選択すると、元のビューのリード・ソロモン符号は巡回的になります。BCH ビューのリード・ソロモン符号は、BCH 符号が巡回的であるため、常に巡回的です。
設計者は、リード・ソロモン符号ブロックの「自然な」サイズを使用する必要はありません。「短縮」と呼ばれる手法を用いることで、より大きな符号から任意のサイズのより小さな符号を作成できます。例えば、広く使用されている(255,223)符号は、ソースブロックの未使用部分を95個のバイナリゼロで埋めて送信しないことで、(160,128)符号に変換できます。デコーダ側では、ブロックの同じ部分にバイナリゼロがローカルにロードされます。
QRコードVer 3(29×29)は、インターリーブブロックを使用しています。メッセージは26バイトのデータで構成され、2つのリード・ソロモン符号ブロックを使用してエンコードされています。各ブロックは、(255,233)リード・ソロモン符号を(35,13)符号に短縮したものです。
デルサルト・ゲーサルス・ザイデル[ 13 ]の定理は、短縮されたリード・ソロモン符号の応用例を示している。短縮と並行して、パンクチャリングと呼ばれる技術により、符号化されたパリティシンボルの一部を省略することができる。
本節で説明するデコーダは、符号語を係数の列として捉えるBCH理論に基づいています。エンコーダとデコーダの両方に既知の固定生成多項式を使用します。
ダニエル・ゴレンシュタインとニール・ツィーラーは、1960年1月にツィーラーがMITリンカーン研究所の報告書で説明し、その後1961年6月に論文で発表したデコーダを開発した。[ 14 ] [ 15 ]ゴレンシュタイン・ツィーラーデコーダとBCH符号に関する関連研究は、W.ウェズリー・ピーターソン著の『誤り訂正符号』(1961年)に記載されている。[ 3 ]
送信されたメッセージ、は、多項式の係数とみなされる。
リード・ソロモン符号化手順の結果、s ( x )は生成多項式で割り切れる。 ここでαは原始要素である。
s ( x )は生成関数g ( x)の倍数であるため、s( x )は生成関数g (x )のすべての根を「継承」することになる。 したがって、
送信された多項式は、伝送中にエラー多項式によって破損する。 受信した多項式を生成する
係数e i は、 xのそのべき乗にエラーがない場合はゼロになり、エラーがある場合はゼロ以外になります。xの異なるべき乗i kにν個のエラーがある場合、
デコーダの目的は、エラーの数 ( ν )、エラーの位置 ( ik )、およびそれらの位置におけるエラー値 ( eik )を求めることです。これらから、e ( x )を計算し、 r ( x )から差し引くことで、元の送信メッセージs ( x ) を取得できます。
デコーダは、受信した多項式を各点で評価することから始める。その評価結果を「症候群」 S jと呼ぶ。それらは次のように定義される 。 ご了承くださいなぜならルーツは前述のセクションで示したとおりです。
シンドロームに着目する利点は、メッセージ多項式が不要になることです。つまり、シンドロームはエラーのみに関係し、送信されるメッセージの実際の内容には影響されません。シンドロームがすべてゼロの場合、アルゴリズムはここで停止し、メッセージが転送中に破損しなかったことを報告します。
便宜上、エラーロケータX kとエラー値Y kを次のように 定義する。
すると、これらのエラーロケーターとエラー値を用いて、症候群は次のように表すことができます。
この症候群値の定義は、以前の定義と同等である。。
症候群は、2ν個の未知数に関するn − k ≥ 2ν個の方程式系を与えるが、その方程式系はX kに関して非線形であり、明らかな解は存在しない。しかし、X kが既知であれば(下記参照)、症候群方程式は線形方程式系を与える。 これは、 Y k の誤差値 について容易に解くことができる。
したがって、問題はX kを見つけることである。なぜなら、そうすれば左端の行列がわかり、等式の両辺にその逆行列を掛けることで Y kが得られるからである。
エラーの位置が既にわかっているこのアルゴリズムのバリアント(消去コードとして使用される場合)では、これで終わりです。エラーの位置(X k )は、他の方法で既にわかっています(たとえば、FM伝送では、ビットストリームが不明瞭であったり干渉によって妨げられたりしたセクションは、周波数分析から確率的に決定できます)。このシナリオでは、エラーは修正可能です。
アルゴリズムの残りの部分はエラーの位置を特定するために使用され、最大で次のシンドローム値が必要になります。単にこれまで使用されてきたものと同じです。これが、位置を知らなくても訂正できる数の2倍の誤り訂正記号を追加する必要がある理由です。
線形漸化式があり、それによって連立一次方程式が得られます。これらの方程式を解くことで、エラー発生箇所X kを特定できます。
誤差位置特定多項式Λ( x )を次のように 定義する。
Λ( x )の零点は逆数であるこれは上記の積表記の構成から導かれる。なぜなら、すると、乗算された項の 1 つがゼロになります。多項式全体がゼロになるようにする。
させては、両辺に を掛けますそして、それは依然としてゼロのままです。
k = 1 からνまで合計しても、やはりゼロになります。
各項をそれぞれ独立した合計にまとめます。
定数値を抽出します合計の影響を受けないもの:
これらの総和は、既知の値であり代入できるシンドローム値と等価になります。したがって、これは次のようになります。
引き算両側から得られる
jは 1 からvまでの任意の整数として選択され、この等価性はそのようなすべての値に対して成り立つことを思い出してください。したがって、線形方程式は 1 つだけでなくv個存在します。この線形方程式系は、誤差位置多項式の 係数 Λ iについて解くことができます。 上記では、デコーダがエラー数νを知っていると仮定していますが、その数はまだ決定されていません。PGZ デコーダはν を直接決定するのではなく、連続する値を試すことによってそれを探索します。デコーダはまず試行νに対して最大の値を想定し、その値に対して線形システムを設定します。方程式が解ける場合 (つまり、行列式がゼロでない場合)、その試行値がエラー数になります。線形システムが解けない場合は、試行ν を1 つ減らし、次のより小さなシステムを調べます。[ 16 ]
前のステップで見つけた係数Λ iを用いて、誤差位置多項式を構築します。誤差位置多項式の根は、網羅的探索によって見つけることができます。誤差ロケーターX kは、これらの根の逆数です。誤差位置多項式の係数の順序を逆にすることもできます。その場合、逆順の多項式の根が誤差ロケーターになります。(それらの逆数ではない)Chien検索はこのステップの効率的な実装です。
誤差位置X kが分かれば、誤差値を決定できます。これは、上記の誤差方程式行列でY kを直接解くか、 Forneyアルゴリズムを使用することで可能です。
対数を底としてi kを計算するX kの。これは通常、事前に計算されたルックアップ テーブルを使用して行われます。
最後に、e ( x )はi kとe i kから生成され、 r ( x )から減算されて、エラーが訂正された元の送信メッセージs ( x )が得られます。
RS(7,3)コードの場合、 GF (929)でα =3、t =4 ( PDF417バーコードで使用される)で定義されたリード・ソロモン符号を考えます。生成多項式は次のようになります。 メッセージ多項式がp ( x ) = 3 x 2 + 2 x + 1の場合、システマティック符号語は次のように符号化されます。 送信エラーにより、代わりに以下のメッセージが受信される場合があります。 症候群は、αのべき乗でrを評価することによって計算されます。 システムを降伏させる
ガウス消去法を用いて、 それで 根はx 1 = 757 = 3 −3およびx 2 = 562 = 3 −4である。係数は逆順にすることができる。 正の指数を持つ根 27 = 3 3および 81 = 3 4 を生成するが、通常はこれは使用されない。逆根の対数はエラー位置に対応する(右から左、位置 0 はコードワードの最後の項)。
誤差値を計算するには、フォーニーアルゴリズムを適用します。
引き算受信した多項式r ( x ) から元のコードワードsを再現します。
Berlekamp –Masseyアルゴリズムは、誤差位置特定多項式を見つけるための代替反復手順です。各反復において、想定される誤差数eに基づいて、Λ( x )の現在のインスタンスに基づいて不一致を計算します。 そして、再計算された Δ がゼロになるように Λ( x ) とeを調整します。Berlekamp –Massey アルゴリズムの記事には、この手順の詳細が記載されています。次の例では、C ( x ) は Λ( x )を表すために使用されます。
上記のピーターソン・ゴレンスタイン・ツィーラーの例と同じデータを使用します。
Cの最終値は誤差位置特定多項式 Λ( x ) です。
誤差位置多項式と誤差値多項式の両方を計算するための別の反復法は、杉山による拡張ユークリッドアルゴリズムの応用に基づいています。
t個のシンドロームとe個のエラー に対して、 S ( x )、Λ( x )、Ω( x )を定義する。
重要な方程式は次のとおりです。
t = 6、e = 3 の場合:
Λと症候群の関係により、中間項はゼロになります。
拡張ユークリッドアルゴリズムは、次の形式の多項式の系列を見つけることができます。
ここで、 i が増加するにつれてRの次数は減少します。R i ( x ) < t /2 になると、
B ( x )とQ ( x )は保存する必要がないため、アルゴリズムは次のようになります。
R −1 := x t R 0 := S ( x ) A −1 := 0 A 0 := 1 i := 0 while degree of R i ≥ t /2 i := i + 1 Q := R i -2 / R i -1 R i := R i -2 - Q R i -1 A i := A i -2 - Q A i -1
Λ( x )の低次の項を1 に設定するには、Λ( x ) と Ω( x ) をA i (0)で割ります。
A i (0) は A iの定数 (低次の) 項です。
上記のピーターソン・ゴレンシュタイン・ツィーラーの例と同じデータを使用します。
離散フーリエ変換は復号に使用できます。[ 17 ]症候群名との衝突を避けるため、c ( x ) = s ( x ) を符号化されたコードワードとします。r ( x ) とe ( x ) は上記と同じです。C ( x )、E ( x )、R ( x ) をc ( x )、e ( x )、r ( x )の離散フーリエ変換と定義します。r ( x ) = c ( x ) + e ( x ) であり、離散フーリエ変換は線形演算子であるため、R ( x ) = C ( x ) + E ( x ) となります。
離散フーリエ変換を用いてr ( x ) をR ( x ) に変換します。離散フーリエ変換の計算はシンドロームの計算と同じであるため、R ( x ) とE ( x ) のt係数はシンドロームと同じです。
使用を通してこれらを症候群(同じもの)として扱い、上記のデコーダのいずれかの方法を使用してエラーロケーター多項式を生成します。
vをエラー数とする。既知の係数を用いてE ( x )を生成する。に誤差位置特定多項式、およびこれらの式
次に、C ( x ) = R ( x ) − E ( x ) を計算し、 C ( x ) の逆変換 (多項式補間)を行ってc ( x )を生成します。
シングルトン境界は、サイズ ( n , k )の線形ブロック符号の最小距離dがn - k + 1で上限が定められていることを示しています。距離dは通常、誤り訂正能力を⌊( d - 1) / 2⌋に制限するものと理解されていました。リード・ソロモン符号はこの境界を等号で達成し、したがって⌊( n - k ) / 2⌋までの誤りを訂正できます。ただし、この誤り訂正の境界は厳密ではありません。
1999年、MITのMadhu SudanとVenkatesan Guruswamiは、「Improved Decoding of Reed–Solomon and Algebraic-Geometry Codes」を発表し、コードの最小距離の半分を超えるエラーの訂正を可能にするアルゴリズムを紹介した。 [ 18 ]これは、リード・ソロモン符号、そしてより一般的には代数幾何符号にも適用される。このアルゴリズムは符号語のリストを生成し(リスト復号アルゴリズムである)、 GF (2m )とその拡張上の多項式の補間と因数分解に基づいている。
2023年に、符号理論家は、ランダムな評価点上で定義されたリード・ソロモン符号が、線形サイズのアルファベット上で高い確率でリスト復号容量( n - kエラーまで)を達成できることを示した。[ 19 ] [ 20 ] [ 21 ]これらの結果は復号を実行するためのアルゴリズムを提供するものではない。
上述の代数復号法はハード決定法であり、これは各シンボルについてその値に関するハード決定が行われることを意味します。たとえば、復号器は各シンボルに、チャネル復調器のシンボルの正しさに対する信頼度に対応する追加の値を関連付けることができます。理論限界に近い誤り訂正性能を実現するために反復ソフト決定信念伝播復号法を使用するLDPCコードとターボコードの出現により、ソフト決定復号を従来の代数コードに適用することへの関心が高まりました。2003年、Ralf KoetterとAlexander Vardyは、SudanとGuruswamiの研究に基づいて、リード-ソロモンコード用の多項式時間ソフト決定代数リスト復号アルゴリズムを発表しました。[ 22 ] 2016年、Steven J. FrankeとJoseph H. Taylorは新しいソフト決定復号器を発表しました。[ 23 ]
本節で説明するデコーダは、リード・ソロモンのオリジナルの符号語の考え方、すなわち符号化対象のメッセージに基づいて多項式値が連続するシーケンスとして符号語を捉える考え方を採用しています。エンコーダとデコーダは同じ固定値セットを使用し、デコーダは受信したメッセージから符号化多項式(および必要に応じてエラー位置特定多項式)を復元します。
リードとソロモンは、最も頻繁に出現するメッセージ多項式を見つけることでエラーを訂正する理論的なデコーダーについて説明した。[ 1 ]デコーダーは値の集合しか知らない。にそして、符号語の値のシーケンスを生成するために使用された符号化方式も不明です。元のメッセージ、多項式、およびエラーは不明です。復号手順では、n 個の符号語値のさまざまなサブセットに対してラグランジュ補間などの方法を使用して、一度に k 個ずつ取得し、受信符号語のエラーを合理的に除去するのに十分な数の一致する多項式が生成されるまで、潜在的な多項式を繰り返し生成することができます。多項式が決定されると、対応する符号語の値を再計算することで、符号語のエラーを修正できます。残念ながら、最も単純なケースを除いて、サブセットが多すぎるため、このアルゴリズムは実用的ではありません。サブセットの数は二項係数です。、そして部分集合の数は、控えめなコードであっても非現実的です。3つのエラーを訂正できる(255,249)コードの場合、単純な理論デコーダは3590億の部分集合を調べます。
1986年、ベルレカンプ・ウェルチアルゴリズムとして知られるデコーダが開発されました。このデコーダは、元のメッセージ多項式と、エラーに対応する入力値に対してゼロを生成するエラー「ロケーター」多項式を復元することができ、その時間計算量はO ( n³ )です。ここでnはメッセージ内の値の数です。復元された多項式は、元のメッセージを復元(必要に応じて再計算)するために使用されます。
RS(7,3)、GF(929)、および評価点の集合a i = i − 1を使用する
メッセージ多項式が
合言葉は
送信エラーにより、代わりにこちらが受信される場合があります。
重要な方程式は次のとおりです。
最大エラー数をe = 2と仮定します。重要な方程式は次のようになります。
ガウス消去法を用いる:
E ( x ) = 0 : {2, 3}の場合にP ( x )を再計算してb を修正し、修正されたコードワードを取得します。
2002年に、拡張ユークリッドアルゴリズムに基づいて、Shuhong Gaoによって改良されたデコーダが開発されました。[ 24 ]
Berlekamp Welsh によって生成された多項式を複製するには、Q ( x ) とE ( x ) をE ( x ) = 708の最上位係数で割ります。
E ( x ) = 0 : {2, 3}の場合にP ( x )を再計算してb を修正し、修正されたコードワードを取得します。
2015年頃、改良されたデコーダが開発されました。[ 25 ]デコーダはシンドロームを生成し、BCHの見解と同様に、エラーロケータ多項式とシンドローム間の鍵方程式は同じですが、エラーロケータ多項式には、、そしてルックアップテーブルを使用して、ルートをコードワードオフセットに変換します。
初期化: 多項式が定義されます。. 一連の多項式は次のように定義されます。. 一連の値が生成されます. 一連の多項式が生成されます。
復号化 - エラーの可能性のあるコードワードを受信しました 症候群多項式が生成されます。。 もしエラーが検出されない場合、拡張ユークリッドは次のように開始します。 、、、 そして、 エラーロケーター多項式は そして誤差値の多項式はそしては、の 形式的導関数生成されます: オフセットエラーの根は ルート =、 エラー値は 。
もしすると、対応するエラー値 オフセットで検出されました、そして、別途エラー値が計算されます。 、セットの根に対応する最も重要な係数
Berlekamp Welchの例と同じデータを使用する
初期化:
デコード: ユークリッド:
分けるそして925年
{{cite book}}ISBN /日付の不一致(ヘルプ)