コンピューティング、電気通信、情報理論、および符号理論 において、前方誤り訂正(FEC)またはチャネル符号化[1] [2] [3]は、信頼性の低い通信チャネルまたはノイズの多い通信チャネルを介したデータ伝送におけるエラーを制御するために使用される技術です。
中心的な考え方は、送信者がメッセージを冗長的に符号化することであり、通常は誤り訂正符号(ECC)が用いられる。[ 4 ] [ 5 ]この冗長性により、受信側はメッセージ内のどこで発生してもエラーを検出できるだけでなく、限られた数のエラーを訂正できる場合が多い。したがって、再送を要求するための 逆方向チャネルは不要となる可能性がある。その代償として、順方向チャネルの帯域幅が固定的に高くなる。
アメリカの数学者リチャード・ハミングは1940年代にこの分野の先駆者となり、1950年に最初の誤り訂正符号であるハミング(7,4)符号を発明した。[5]
FEC は、一方向の通信リンクやマルチキャストで複数の受信者に送信する場合など、再送信にコストがかかるか不可能な状況に適用できます。
遅延の長い接続にもメリットがあります。遠方の惑星を周回する衛星の場合、エラーによる再送信は数時間の遅延を引き起こします。FECはモデムや携帯電話ネットワークでも広く利用されています。
受信機におけるFEC処理は、デジタルビットストリームに適用することも、デジタル変調された搬送波の復調に適用することもできます。後者の場合、FECは受信機における最初のアナログ-デジタル変換の不可欠な部分です。ビタビデコーダは、ノイズによって劣化したアナログ信号からデジタルデータを復調するための軟判定アルゴリズムを実装しています。多くのFECデコーダは、アナログ受信回路の微調整のためのフィードバックとして使用できる ビットエラー率(BER)信号も生成できます。
FEC 情報は、破損したデータの回復を可能にするために大容量ストレージ(磁気、光、ソリッド ステート/フラッシュ ベース) デバイスに追加され、信頼性のために特別な規定を必要とするシステム上のECC コンピュータ メモリとして使用されます。
訂正できるエラーまたは欠落ビットの最大割合は、ECCの設計によって決まるため、さまざまな条件にはさまざまな前方誤り訂正符号が適しています。一般に、強力な符号は、利用可能な帯域幅を使用して送信する必要がある冗長性を増加させ、有効ビットレートが低下する一方で、受信された有効信号対雑音比が向上します。クロード・シャノンの雑音ありチャネル符号化定理を使用すると、特定の最大許容誤り確率に対して達成可能な最大通信帯域幅を計算できます。これにより、ある基本雑音レベルが与えられたチャネルの理論上の最大情報転送速度に境界が確立されます。ただし、その証明は構成的ではないため、容量を達成する符号の構築方法についての洞察は得られません。数年の研究の後、極性符号[3]などのいくつかの高度なFECシステムは、無限長フレームの仮説の下でシャノンのチャネル容量によって示される理論上の最大値に非常に近づいています。
ECCは、アルゴリズムを用いて送信情報に冗長性を加えることで実現されます。冗長ビットは、多数の元の情報ビットの複雑な関数となる場合があります。元の情報は、エンコードされた出力にそのまま現れる場合もあれば、そうでない場合もあります。出力に入力情報が変更されずにそのまま含まれるコードは体系的であり、含まれないコードは非体系的と呼ばれます。
ECCの最も単純な例としては、各データビットを3回送信する方法があります。これは(3,1)繰り返しコードと呼ばれます。ノイズの多いチャネルでは、受信機は8つのバージョンの出力を受信する可能性があります(下の表を参照)。
これにより、3つのサンプルのいずれかに誤りがあった場合、「多数決」または「民主的な投票」によって訂正することが可能になります。このECCの訂正能力は以下のとおりです。
この三重モジュラー冗長化は実装が簡単で広く利用されているものの、ECCとしては比較的効率が悪いです。より優れたECCコードは通常、過去数十ビット、あるいは数百ビットの受信ビットを調べ、現在の少数ビット(通常は2~8ビットのグループ)をどのようにデコードするかを決定します。
ECC は「ノイズを平均化」することによって機能すると言えます。各データ ビットは多数の送信シンボルに影響を及ぼすため、ノイズによって一部のシンボルが破損しても、通常は同じユーザー データに依存する他の破損していない受信シンボルから元のユーザー データを抽出できます。
ほとんどの通信システムは、予想される最悪のビットエラー率に耐えられるように設計された固定チャネルコードを使用しており、ビットエラー率がさらに悪化すると全く動作しなくなります。しかし、一部のシステムでは、特定のチャネルエラー条件に適応します。ハイブリッド自動再送要求( ARQ)の一部のインスタンスでは、ECCがエラー率を処理できる限り固定ECC方式を使用し、エラー率が過度に高くなると ARQに切り替えます。適応変調符号化(AMC)では、さまざまなECCレートを使用し、チャネル内のエラー率が高い場合はパケットあたりのエラー訂正ビットを追加し、不要な場合は削除します。


ECC コードには、ブロック コードと畳み込みコードの 2 つの主なカテゴリがあります。
古典的なブロック符号は通常、硬判定アルゴリズム[6]を用いて復号されます。これは、すべての入力信号と出力信号に対して、それが1ビットに対応するか0ビットに対応するかの硬判定が行われることを意味します。対照的に、畳み込み符号は通常、ビタビアルゴリズム、MAPアルゴリズム、 BCJRアルゴリズムなどの軟判定アルゴリズムを用いて復号されます。これらのアルゴリズムは(離散化された)アナログ信号を処理し、硬判定復号よりもはるかに高い誤り訂正性能を実現します。
ほぼすべての古典ブロック符号は有限体の代数的性質を適用します。そのため、古典ブロック符号はしばしば代数符号と呼ばれます。
ブロック符号には多くの種類があり、リード・ソロモン符号はコンパクトディスク、DVD、ハードディスクドライブなどで広く使用されていることで知られています。その他の古典的なブロック符号の例としては、ゴレイ符号、BCH符号、多次元パリティ符号、ハミング符号などがあります。
ハミングECCは、 ECCメモリや初期のSLC NANDフラッシュメモリのエラー訂正によく使用されます。[7] これは、シングルビットエラー訂正と2ビットエラー検出を提供します。ハミングコードは、より信頼性の高いシングルレベルセル(SLC)NANDにのみ適しています。より高密度のマルチレベルセル(MLC)NANDでは、 BCH、リードソロモン、LDPCなどのマルチビット訂正ECCが使用される場合があります。[8] [9] [10] NORフラッシュでは通常、エラー訂正は使用されません。[8]
低密度パリティ検査(LDPC)符号は、多数の単一パリティ検査(SPC)符号から構成される、高効率な線形ブロック符号の一種です。反復軟判定復号法を用いることで、ブロック長に対して線形の時間計算量で、チャネル容量(理論最大値)に非常に近い性能を実現できます。実際の実装では、構成するSPC符号を並列に復号することに大きく依存しています。
LDPC コードは、 1960 年にロバート G. ギャラガーの博士論文で初めて導入されましたが、エンコーダとデコーダの実装にかかる計算量とリード・ソロモンコードの導入により、1990 年代までほとんど無視されていました。
LDPC符号は、DVB-S2(デジタルビデオ放送衛星第2世代)、WiMAX(マイクロ波通信規格IEEE 802.16e)、高速無線LAN(IEEE 802.11n)[11] 、 10GBase-Tイーサネット(802.3an)、G.hn/G.9960 (電力線、電話線、同軸ケーブルを用いたネットワークに関するITU-T規格)など、多くの最近の高速通信規格で使用されています。その他のLDPC符号は、 3GPP MBMS (ファウンテンコード参照) 内の無線通信規格として標準化されています。
ターボ符号化は、2つ以上の比較的単純な畳み込み符号とインターリーバーを組み合わせた反復ソフト復号方式であり、シャノン限界の1デシベル未満の性能を持つブロック符号を生成します。実用化の点ではLDPC符号よりも古く、現在では同等の性能を提供しています。
ターボ符号化の最も初期の商用応用の一つは、クアルコムが開発し、ベライゾン・ワイヤレス、スプリントなどの通信事業者が販売したCDMA2000 1x (TIA IS-2000)デジタルセルラー技術である。また、CDMA2000 1xをインターネットアクセス向けに進化させた1xEV-DO(TIA IS-856)にもターボ符号化が利用されている。EV-DOは1xと同様にクアルコムによって開発され、ベライゾン・ワイヤレス、スプリントなどの通信事業者が販売している(ベライゾンの1xEV-DOのマーケティング名はBroadband Access、スプリントの消費者向けおよび法人向けマーケティング名はそれぞれPower VisionとMobile Broadbandである)。
古典的なブロック符号では誤り検出能力や誤り訂正能力が規定されることが多いのに対し、LDPC符号などの現代のブロック符号の多くはそのような保証を欠いています。代わりに、現代の符号はビット誤り率で評価されます。
ほとんどの前方誤り訂正符号はビット反転のみを訂正し、ビット挿入やビット削除は訂正しません。このような状況では、ハミング距離がビット誤り率の測定に適した方法です。マーカーコードやウォーターマークコードなど、ビット挿入やビット削除を訂正するように設計された前方誤り訂正符号もいくつかあります。このようなコードを使用する場合、ビット誤り率を測定するにはレーベンシュタイン距離の方がより適切な方法です。 [12]
ECCの基本原理は、冗長ビットを追加することで、デコーダが送信側によってエンコードされた真のメッセージを見つけやすくすることです。特定のECCシステムの符号化率は、通信パケット内の情報ビット数と総ビット数(つまり、情報ビットと冗長ビット)の比として定義されます。したがって、符号化率は実数です。低い符号化率が0に近い場合、それは多くの冗長ビットを使用して良好な性能を実現する強力なコードであることを意味します。一方、高い符号化率が1に近い場合、それは弱いコードであることを意味します。
情報を保護する冗長ビットは、保護対象となる通信リソースと同じリソースを使用して転送する必要があります。これにより、信頼性とデータレートの間に根本的なトレードオフが生じます。[13]極端な例として、強力なコード(低い符号化率)は、受信側のSNR(信号対雑音比)を大幅に向上させ、ビットエラー率を低下させますが、その代償として実効データレートが低下します。もう一方の極端な例として、ECCを一切使用しない(つまり符号化率1)と、チャネル全体を情報転送に使用しますが、その代償として、ビットは追加の保護を受けずに残されます。
興味深い疑問の一つは、デコードエラー率が無視できるECCは、情報転送の点ではどれほど効率的だろうか、という点である。この疑問は、クロード・シャノンが第二定理で答えた。その定理によれば、チャネル容量は、エラー率がゼロに近づくECCが達成できる最大ビットレートである。[14]彼の証明はガウスランダム符号化に依存しているが、これは現実世界のアプリケーションには適していない。シャノンの研究によって示された上限は、究極のパフォーマンス限界に近づくECCを設計するための長い道のりを刺激した。今日では、さまざまなコードがシャノン限界にほぼ達することができる。しかし、容量を達成するECCの実装は通常、非常に複雑である。
最も一般的なECCは、性能と計算量の間でトレードオフの関係にあります。通常、ECCのパラメータは可能な符号化率の範囲を示しており、シナリオに応じて最適化することができます。通常、この最適化は、データレートへの影響を最小限に抑えながら、低い復号エラー確率を実現するために行われます。符号化率を最適化するためのもう一つの基準は、通信のエネルギーコストを抑えるために、低いエラー率と再送回数のバランスを取ることです。[15]
場合によっては、メッセージのビット単位のデコード、あるいは与えられた信号がコードワードであるかどうかの確認のみが必要で、信号全体を見る必要がありません。これは、コードワードが大きすぎて従来の方法では十分な速度でデコードできず、メッセージのほんの数ビットだけが現時点で関心の対象となっているストリーミング環境では理にかなっています。また、このようなコードは計算複雑性理論において重要なツールとなっており、例えば確率的に検証可能な証明の設計に用いられています。
局所的に復号可能な符号とは、符号語の一定の割合の位置が破損した後であっても、符号語の少数(例えば一定数)の位置を見るだけで、メッセージの単一ビットを確率的に復元できる誤り訂正符号です。局所的に検査可能な符号とは、信号の少数の位置を見るだけで、信号が符号語に近いかどうかを確率的に検査できる誤り訂正符号です。
すべての局所的に復号可能な符号(LDC)が局所的にテスト可能な符号(LTC)であるわけではない[ 16]。局所的に訂正可能な符号(LCC)でもない[17] 。qクエリLCCは指数的に制限される[18] [19]。一方、LDCは指数関数的ではない長さを持つことができる[20] [21] 。
古典的な(代数的)ブロック符号と畳み込み符号は、しばしば連結符号化方式で組み合わせられます。この方式では、短い拘束長のビタビ復号畳み込み符号がほとんどの処理を行い、より大きなシンボルサイズとブロック長を持つブロック符号(通常はリード・ソロモン)が畳み込み復号器によって生成されたエラーを「除去」します。この誤り訂正符号群を用いたシングルパス復号は非常に低いエラー率を実現しますが、長距離伝送条件(深宇宙など)では反復復号が推奨されます。
連結符号は、 1986年のボイジャー2号が天王星に接近した際に初めて使用されて以来、衛星通信および深宇宙通信における標準的な手法となっています。ガリレオ探査機は、アンテナの故障によって引き起こされる非常に高いエラー率を補正するために、反復連結符号を使用しました。

インターリーブは、デジタル通信システムやストレージシステムにおいて、前方誤り訂正符号の性能向上のために頻繁に用いられています。多くの通信チャネルはメモリレスではなく、誤りは通常、独立して発生するのではなくバースト的に発生します。コードワード内の誤り数が誤り訂正符号の能力を超えると、元のコードワードを復元できなくなります。インターリーブは、ソースシンボルを複数のコードワードにシャッフルすることでこの問題を軽減し、誤りをより均一に分散させます。 [22]そのため、インターリーブはバースト誤り訂正に広く用いられています。
ターボ符号やLDPC符号のような現代の反復符号の解析では、通常、誤りの分布が独立していることが前提とされています。[23]そのため、LDPC符号を使用するシステムでは、通常、符号語内のシンボル間に追加のインターリーブが採用されています。[24]
ターボ符号の場合、インターリーバーは不可欠な要素であり、その適切な設計は良好な性能を得るために非常に重要です。[22] [25]反復復号アルゴリズムは、復号器を表す因子グラフに短いサイクルがない場合に最も効果的に機能します。インターリーバーは短いサイクルを回避するように選択されます。
インターリーバーの設計には次のものがあります。
マルチキャリア通信システムでは、キャリア間のインターリーブを利用して周波数ダイバーシティを実現し、例えば周波数選択性フェージングや狭帯域干渉を軽減することができる。[29]
インターリーブなしの伝送:
エラーのないメッセージ: aaaabbbbccccdddeeeeffffgggg バーストエラーのある送信: aaaabbbbcccc____deeeeffffgggg
ここで、同じ文字の各グループは、4ビットの1ビット誤り訂正符号語を表します。符号語ccccは1ビットが変更されているため訂正可能ですが、符号語ddddは3ビットが変更されているため、全くデコードできないか、誤ってデコードされる可能性があります。
インターリーブあり:
エラーのないコードワード: aaaabbbbccccdddeeeeffffgggg インターリーブ: abcdefgabcdefgabcdefgabcdefg バーストエラーのある送信: abcdefgabcd____bcdefgabcdefg デインターリーブ後の受信コードワード: aa_abbbbccccdddde_eef_ffg_gg
各コードワード「aaaa」、「eeee」、「ffff」、「gggg」では 1 ビットだけが変更されるため、1 ビットのエラー訂正コードですべてを正しくデコードできます。
インターリーブなしの伝送:
元の送信文: ThisIsAnExampleOfInterleaving バーストエラーのある受信文: ThisIs______pleOfInterleaving
「AnExample」という用語は、結局ほとんど理解できず、修正も困難です。
インターリーブあり:
送信された文: ThisIsAnExampleOfInterleaving... エラーのない送信: TIEpfeaghsxlIrv.iAaenli.snmOten。 バースト エラーのある受信文: TIEpfe______Irv.iAaenli.snmOten。 デインターリーブ後の受信文: T_isI_AnE_amp_eOfInterle_vin_...
単語が完全に失われることはなく、失われた文字は最小限の推測で復元できます。
インターリーブ技術の使用は、総遅延を増加させます。これは、パケットをデコードする前に、インターリーブされたブロック全体を受信する必要があるためです。[30]また、インターリーバーはエラーの構造を隠蔽します。インターリーバーがない場合でも、より高度なデコードアルゴリズムはエラー構造を利用し、インターリーバーと組み合わせたより単純なデコーダよりも信頼性の高い通信を実現できます[要出典]。このようなアルゴリズムの例としては、ニューラルネットワーク[31]構造に基づくものがあります。
誤り訂正符号(ECC)の挙動をソフトウェアでシミュレートすることは、ECCの設計、検証、改善において一般的な手法です。近々登場する5Gワイヤレス規格では、ソフトウェアECCの新たな応用分野として、ソフトウェア無線(SDR)におけるクラウド無線アクセスネットワーク(C-RAN)が提案されています。これは、通信においてソフトウェアECCを直接使用するという考え方です。例えば5Gでは、ソフトウェアECCをクラウドに配置し、アンテナをこのコンピューティングリソースに接続することが可能になります。これにより、通信ネットワークの柔軟性が向上し、最終的にはシステムのエネルギー効率も向上します。
これに関連して、以下に挙げたさまざまなオープンソース ソフトウェアが利用可能です (網羅的ではありません)。
前方誤り訂正符号の仕組み
NANDフラッシュでは、リード・ソロモンアルゴリズムとBCHアルゴリズムの両方が一般的なECCの選択肢です。…ハミングベースのブロックコードは、SLCで最も一般的に使用されるECCです。…リード・ソロモンとBCHはどちらも複数のエラーを処理でき、MLCフラッシュで広く使用されています。
SLCの場合、訂正閾値が1のコードで十分です。MLCの場合はt=4が必要です。
{{cite book}}:|journal=無視されました (ヘルプ)