(57)【特許請求の範囲】
【請求項１】
通信チャネルを介して転送元から転送先へ送信されるデータを符号化する方法であって
、ここにおいて、前記送信されるデータは入力シンボルの順序付けられたセットで表され
ることができる、
前記入力シンボルの順序付けられたセットから複数の冗長シンボルを生成することと、
ここにおいて、前記複数の冗長シンボルの中の各冗長シンボルは、前記入力シンボルの順
序付けられたセットのうちの１または複数を使用して算出される、
前記入力シンボルおよび冗長シンボルを含むシンボルの複合セットから複数の出力シン
ボルを生成することと、ここにおいて、可能な出力シンボルの数は前記シンボルの複合セ
ットの中のシンボルの数から独立している、ここにおいて、少なくとも１つの出力シンボ
ルは、前記シンボルの複合セットの中の２以上、かつ、前記シンボルの複合セットの中の
すべてのシンボル未満から生成される、
ここにおいて、前記複数の冗長シンボルの前記生成は、冗長シンボルの各対の間の弱い
共通の帰属関係を保証する決定性プロセスを使用して行われる、
ここにおいて、２つの冗長シンボルの間の共通の帰属関係は、両冗長シンボルが依存する
入力シンボルのセットである、ここにおいて、２つの冗長シンボルの間の弱い共通の帰属
関係は、両冗長シンボルが依存する入力シンボルの数が前記プロセスにより与えられるし
きい値より小さいときに存在し、前記しきい値は、前記入力シンボルの順序付けられたセ
ット中の入力シンボルの数から独立している、
ここにおいて、各入力シンボルに関して、前記入力シンボルに依存する所定数の冗長シン
ボルが存在する、を含む方法。
【請求項２】
さらに、前記通信チャネルを介して前記複数の出力シンボルを送信することを備える、
請求項１に記載の方法。 
【請求項３】
さらに、前記複数の出力シンボルを記憶媒体に記憶することを備える、請求項１に記載
の方法。
【請求項４】
前記複数の冗長シンボルは、ＬＤＰＣ符号にしたがって生成される、請求項１に記載の
方法。
【請求項５】
複数の出力シンボルは、任意の所定数Ｎの出力シンボルから前記入力シンボルの順序付
けられたセットが再生成されることができるようなものであり、ここで、Ｎは入力シンボ
ルの数よりわずかに大きい、請求項１に記載の方法。
【請求項６】
前記複数の出力シンボルは、前記入力シンボルの順序付けられたセットが前記複数の出
力シンボルのうちのＮ個のものから再生成されることができる高い確率が存在するような
ものであり、ここでＮは少なくとも入力シンボルの数と同じである、請求項１に記載の方
法。 
【請求項７】
前記複数の出力シンボルは、前記入力シンボルの順序付けられたセットのうちのＧ個の
ものが前記複数の出力シンボルのうちのＫ個のものから再生成されることができるような
ものであり、ここでＫは入力シンボルの数であり、ＧはＫより小さい、請求項１に記載の
方法。 
【請求項８】
多くともＧ個の入力シンボルは任意の数の出力シンボルから再生成されることができ、
ここで、Ｇは前記入力シンボルの順序付けられたセットの中の入力シンボルの数より少な
い、請求項１に記載の方法。
【請求項９】
複数の冗長シンボルを生成することは、各冗長シンボルについて、
重み分布にしたがってｔ個の異なる入力シンボルを決定すること、
前記ｔ個の異なる入力シンボルのＸＯＲとして各冗長シンボルを計算すること
を含む、請求項１に記載の方法。
【請求項１０】
通信チャネルを介して前記複数の出力シンボルを送信することを備える、ここにおいて
、前記複数の出力シンボルを生成するステップは前記複数の出力シンボルを送信するステ
ップと実質的に並行に行われる、請求項１に記載の方法。
【請求項１１】
前記複数の冗長シンボルは、スタティックシンボル、ハミングシンボル、およびパディ
ングシンボルを備える、ここにおいて、前記シンボルの合計数は素数となるように選択さ
れる、請求項１に記載の方法。
【請求項１２】
任意の２つの異なる冗長シンボルに関して、これら２つの異なる冗長シンボルのそれぞ
れが依存する入力シンボルの前記セットが多くても６個の入力シンボルを共通して有する
ように、前記あらかじめ定められるしきい値は６である、請求項１に記載の方法。
【請求項１３】
前記入力シンボルの順序付けられたセットのうちの１または複数を使用して前記複数の
冗長シンボルを生成することは、
各配列要素がゼロであるように配列Ｃ［Ｋ］，．．．，Ｃ［Ｋ＋Ｓ−１］を初期化
すること、ここにおいて、Ｋは入力シンボルの数であり、Ｓは生成されるＬＤＰＣシンボ
ルの数であり、およびＫ個の入力シンボルに対応するＫ個の中間シンボルに配列Ｃ［０］
，．．．，Ｃ［Ｋ−１］を初期化すること、
カウンタｉ＝０を用いて、以下のステップを行うこと、ここにおいて、ａおよびｂ
は中間変数であり、“％”はモジュロ演算を表し、ｆｌｏｏｒ（ ）は関数の引数より小
さい最大の整数値を表す関数であり、“＾”はビット毎のＸＯＲ演算：
（１）ａ＝１＋（ｆｌｏｏｒ（ｉ／Ｓ）％（Ｓ−１）） 
（２）ｂ＝ｉ％Ｓ 
（３）Ｃ［Ｋ＋ｂ］＝Ｃ［Ｋ＋ｂ］＾Ｃ［ｉ］ 
（４）ｂ＝（ｂ＋ａ）％Ｓ 
（５）Ｃ［Ｋ＋ｂ］＝Ｃ［Ｋ＋ｂ］＾Ｃ［ｉ］ 
（６）ｂ＝（ｂ＋ａ）％Ｓ 
（７）Ｃ［Ｋ＋ｂ］＝Ｃ［Ｋ＋ｂ］＾Ｃ［ｉ］ 
を表す、
１からＫ−１までのカウンタｉの各値に関して、これらのステップを繰り返すこと
、
少なくとも結果として生じる配列Ｃ［Ｋ］，．．．，Ｃ［Ｋ＋Ｓ−１］を前記複数
のＳ個のＬＤＰＣシンボルとして出力すること
を備える、請求項１に記載の方法。
【請求項１４】
Ｓ≧ｃｅｉｌ（０．０１・Ｋ）＋Ｘとなるように、Ｓは最小の素数である、ここで、ＸはＸ・（Ｘ−１）＝２・Ｋとなるような最小の正の整数である、請求項１３に記載の方法。
【請求項１５】
各入力シンボルに関して、前記入力シンボルに依存する前記所定数の冗長シンボルは３
である、請求項１に記載の方法。
【発明の詳細な説明】
【関連技術】
【０００１】
［35 U.S.C.§119下における優先権の主張］
本願は、２００４年５月７日に提出された仮米国特許出願第６０／５６９，１２７号(表題「ファイルダウンロードおよびストリーミングのシステム（FILE DOWNLOAD AND STREAMING SYSTEM）」)に基づいて優先権を主張する。上記の仮米国特許出願は、全ての目的のためにその全体がここにおいて組み込まれる。
【技術分野】
【０００２】
本発明は、通信システムにおける符号化、復号化に関するものであり、より詳細には通信データの誤りおよびギャップを考慮した符号化、復号化を行う通信システムに関するものである。実施形態において、データは、ブロードキャストまたはマルチキャスト無線ネットワークを介して受信機に送信される。
【背景技術】
【０００３】
送り手と受け手との間で通信チャネルを介して行うファイルおよびストリームの転送は多くの文献の主題として取り上げられてきた。好ましくは、受け手は、送り手からチャネルを介して送信される正確なデータのコピーをあるレベルの確実性をもって受信することを望む。ほとんどの物理的に実現可能なシステムがそうであるように、チャネルは完全な忠実度を有していないため、伝送により消失するか歪められるデータを取り扱う方法に関心が生じる。受け手は、いつ破損データが誤ってデータ受信されたかの判断を常に行えるとは限らないので、通常、破損データ（誤り）に比較し欠落データ（消去）を取扱うのは容易である。多くの誤り訂正符号は、消去および／または誤りを修正するために開発された。一般的に、データが送信されているチャネルおよび送信されているデータの性質の不忠実度に関する何らかの情報に基づいて使用する特定の符号（コード）が選択される。たとえば、チャネルが長期間の不忠実度を有することが既知の場合、そのアプリケーションのためにはバースト誤り符号が最適であり得る。短くまれな誤りだけが予想される場合、簡単なパリティ符号が最善であり得る。
【０００４】
送信機および受信機が通信のために必要とされる演算能力および電力の全てを有し、送受信装置間のチャネルが相対的にエラーフリーの通信を可能とするのに十分クリーンであるときに、データ転送は直接なされる。そして、チャネルが悪環境であるか、または、送信機および／または受信機の能力が制限されている場合に、データ転送の問題はより難しくなる。
【０００５】
１つの解決策は、受信機が転送における消去および誤りから回復可能とするために、データを送信機で符号化する前方エラー訂正（ＦＥＣ）技術を活用する方法である。受信機が送信機に誤りについての通信が可能な受信機から送信機への逆方向チャネルが利用可能な場合、その伝送プロセスを調整可能である。しかし、しばしば逆方向チャネルは利用可能ではない。たとえば、送信機が多数の受信機に対して送信している場合、送信機はそれらの全ての受信機からの逆方向チャネルを処理することが可能でないかもしれない。その結果、通信プロトコルはしばしば逆方向チャネルなしで設計されることを必要とし、そして、送信機はこれらのチャネル状況の全容無しに広く様々なチャネル状況を取扱わなければならないかもしれない。
【０００６】
受信機がポータブルまたは移動可能である低出力の小型デバイスであり高帯域でデータを受信することを必要とする場合、送信機と受信機間のデータ転送の問題はより難しくなる。たとえば、ファイルまたはストリームをブロードキャストまたはマルチキャストにより、固定された送信機から多数もしくは不確定数のポータブルまたは移動可能な受信機に配信するよう設定される無線ネットワークであり、受信機が演算能力、記憶容量、利用できる電力、アンテナサイズ、デバイスサイズおよびその他の設計制約条件において拘束される場合である。
【０００７】
このようなシステムでは、逆方向チャネルが少ないか皆無であり、メモリ制限、コンピューティングサイクル制限、移動可能性およびタイミングを含む考慮が必要である。各々の受信機の電源の予測不可能なオン／オフ、範囲の出入り、リンクエラー、セル切替、セル内輻輳によるファイルまたはストリームパケットに対する強制的一時的な優先度引き下げなどにより損失が発生するため、望ましくは、潜在的に大きい数の受信機に配信するために必要なデータの転送時間の最小化するよう設計しなければならない。
【０００８】
データ転送のために使用するパケットプロトコルの場合、パケット網を通じて送信されるファイル、ストリームまたは他のデータブロックは等しいサイズの入力シンボルに分割され、入力シンボルは連続的なパケットに置かれる。入力シンボルが実際にビットストリームに分解されるか否かに関わらず、入力シンボルの”サイズ”はビット単位で測定することができ、ここで、入力シンボルが２Ｍ個のシンボルのアルファベットから選択されるとき、その入力シンボルはＭビットのサイズを有する。この種のパケットベースの通信システムにおいて、パケット指向符号化スキームが適切である。意図された受け手が、ネットワーク中での消去にもかかわらずオリジナルファイルの正確なコピーを回復可能な場合、ファイル送信は信頼性が高いといわれる。意図された受け手がネットワーク中での消去にもかかわらずタイムリーなやり方でストリームの各部の正確なコピーを回復可能な場合、そのストリームの送信は信頼性が高いといわれる。そのファイルまたはストリームの一部が回復可能でない、または、ストリーミングに関してそのストリームの一部がタイムリーなやり方で回復可能ではない場合などには、ファイル送信およびストリーム送信は共に信頼できないものになり得る。散発的な輻輳の発生のためにルータのバッファリングメカニズムは処理限界に達し、入ってきたパケットは強制的にドロップされるので、パケット損失がしばしば生じる。そのため、転送中の消去に対する保護について多くの研究がなされてきた。
【０００９】
ファイルまたはストリームの入力シンボルから任意数の出力シンボルを生成する連鎖反応符号（chain reaction codes）を使用することが知られている。受信機が、既に知っているデータを複製する追加データを受信する情報複製の方法に対して、この方法には情報付加的な出力シンボルの生成を含む多くの用途がある。連鎖反応符号を生成、利用、動作している新規の技術がいくつか公開されており、たとえば、Ｌｕｂｙに発行される米国特許第６，３０７，４８７号”Information Additive Code Generator and Decoder for Communication Systems”（”ルビーＩ”）、Ｌｕｂｙらに発行される米国特許第６，３２０，５２０号”Information Additive Group Code Generator and Decoder for Communication Systems”（以下、”ルビーＩＩ”）、そして、2003年3月27日にショクロラヒらに発行された米国特許公開２００３／００５８９５８号”Multi-Stage Code Generator and Decoder for Communication Systems”（以下、”ショクロラヒ”）に示されている。許可される範囲において、全ての目的のためこれらの全ての開示を本願明細書に引用する。
【００１０】
連鎖反応符号器により作成される出力シンボルの特性の１つとして、受信機は十分な出力シンボルを受信するとすぐにオリジナルファイルまたはオリジナルストリームのブロックを回復することが可能であるということがある。具体的には、高確率を有するオリジナルのＫ個の入力シンボルを回復するために、受信機はおよそＫ＋Ａ個の出力シンボルを必要とする。ここで、比Ａ／Ｋは”相対的受信オーバーヘッド”と呼ばれる。相対的受信オーバーヘッドは、入力シンボル数Ｋ、および、復号器の信頼性に依存する。たとえば、ある特定実施形態において、Ｋ＝６０，０００であり、少なくとも１−１０−８の確率で入力ファイルまたはストリームのブロックを復号器が復号化可能な相対的受信オーバーヘッドが５％の場合、Ｋ＝１０，０００では、相対的受信オーバーヘッドが１５％の場合同様の確率で復号化可能となる。ある実施形態においては、連鎖反応符号の相対的受信オーバーヘッドは（１３＊ｓｑｒｔ（Ｋ）＋２００）／Ｋとして計算することが出来、ここで、ｓｑｒｔ（Ｋ）は入力シンボル数Ｋの二乗根である。この実施形態において、連鎖反応符号の相対的受信オーバーヘッドは、Ｋが小さい値であるほど大きくなる傾向がある。
【００１１】
ルビーＩ、ルビーＩＩおよびショクロラヒは、本発明による特定の実施形態において使用可能なシステム及び方法の教示を提供する。しかしながら、それらのシステム及び方法は、本発明および他の多くのバリエーション、変更態様を必要とせず、代替物が使用可能であることが理解できるであろう。
【００１２】
また、例えば、ショクラヒ氏の文献に記載され、商標名「Ｒａｐｔｏｒ」符号としてデジタルファウンテン社により開発されたような、マルチステージ連鎖反応（multi-stage chain reaction）（”ＭＳＣＲ”）符号を使用することも公知である。マルチステージ連鎖反応符号は、たとえば、ソースファイルまたはソースストリームから入力シンボルを受信し、そこから中間シンボルを生成し、連鎖反応符号を用いて中間シンボルを符号化する符号器において用いられる。より詳しくは、複数の冗長シンボルは、送信される入力シンボルの順序付けられたセットから生成される。入力シンボルおよび冗長シンボルを含むシンボルの複合セットから複数の出力シンボルが生成され、ここで、可能な出力シンボルの数はシンボルの複合セットの中のシンボルの数よりはるかに大きく、少なくとも一つの出力シンボルは、シンボルの複合セットの中の２以上であって、前記複合セット中のすべてより少ないシンボルから生成され、入力シンボルの順序付けられたセットが任意の所定の数Ｎの出力シンボルから所望の精度まで再生成されることができる。
【００１３】
用途によっては、他のバリエーションの符号がより適切であり、他のものが選択されることができる。
【発明の概要】
【００１４】
本発明のある実施形態によれば、通信チャネルを介して転送元から転送先へ送信されるデータを符号化する方法が提供される。その方法は、入力シンボルの順序付けられたセットで動作し、入力シンボルから複数の冗長シンボルを生成することを含む。その方法はまた、入力シンボルおよび冗長シンボルを含むシンボルの複合セットから複数の出力シンボルを生成することを含み、ここにおいて、可能な出力シンボルの数はシンボルの複合セットのシンボルの数よりはるかに大きく、ここにおいて、少なくとも一つの出力シンボルはシンボルの複合セットの中のシンボルの数より多く全てシンボル数より少ないシンボルから生成され、入力シンボルの順序付けられたセットが任意の所定数の出力シンボルからも所望の精度まで再生成されることができるようなシンボルである。複数の冗長シンボルは、第１入力シンボルを使用して算出されるスタティックシンボルの第１セットは、第１入力シンボルと異なる第２入力シンボルを使用して算出されるスタティックシンボルの第２セットと弱い関連性を有するように、決定性プロセスにおいて送信される入力シンボルの順序付けられたセットから生成される。
【００１５】
本発明のさらに別の実施形態によれば、通信チャネルを介して転送先から送信されるデータを受信するシステムは類似した技術を使用して提供される。そのシステムは、通信チャネルを介して送信される出力シンボルを受信するための通信チャネルに結合された受信モジュールを備え、各々の出力シンボルは入力シンボルおよび冗長シンボルの複合セットの少なくとも１つのシンボルから生成され、少なくとも１つの出力シンボルは複合セットの中の１より多く全てより少ないシンボルから生成され、可能な出力シンボルの数は複合セットの中のシンボルの数よりはるかに大きく、入力シンボルは入力シンボルの順序付けられたセットからのものであり、冗長シンボルは入力シンボルから生成され、複数の冗長シンボルは、第１の入力シンボルを使用して算出されるスタティックシンボルの第１セットは、第１の入力シンボルと異なる第２の入力シンボルを使用して算出されるスタティックシンボルの第２セットと弱い関連性を有するように、決定性プロセスにおいて送信される入力シンボルの順序付けられたセットから生成される。
【００１６】
本発明のさらに別の実施形態によれば、搬送波で表現されるコンピュータデータ信号が提供される。
【００１７】
多数の利点が、本発明により達成される。たとえば、ある実施形態においては、チャネルを介して送信されるデータを符号化する計算費用が減少される。さらに他の実施形態において、このデータを復号化する計算費用が減少される。実施形態により、これらの利点の１つ以上を達成できる。これらおよびその他の利点の更なる詳細が、本願明細書全体および特に下記記載により提供される。
【００１８】
本願明細書において開示される本発明の性質および効果の更なる理解は、明細書および添付の図面の残りの部分を参照することで認識される。
【図面の簡単な説明】
【００１９】
【図１】図１は、本発明の一実施形態に従う通信システムのブロック図である。
【図２】図２は、本発明の一実施形態に従う符号器のブロック図である。
【図３】図３は、本発明の一実施形態に従う冗長シンボルを生成する方法の簡略ブロック図である。
【図４】図４は、本発明の一実施形態に従うスタティック符号器の基本操作の簡略ブロック図である。
【図５】図５は、本発明の一実施形態に従うダイナミック符号器の簡略ブロック図である。
【図６】図６は、本発明の一実施形態に従うダイナミック符号器の基本操作の簡略ブロック図である。
【図７】図７は、本発明の一実施形態に従うスタティック符号器の簡略ブロック図である。
【図８】図８は、本発明の一実施形態に従うスタティック符号器の基本操作の簡略ブロック図である。
【図９】図９は、スタティック符号器の一つの特定の実施形態に従う符号化パラメータを算出する方法の簡略図である。
【図１０】図１０は、本発明の他の実施形態に従うスタティック符号器の簡略フローチャートである。
【図１１】図１１は、本発明の一実施形態に従う復号器の簡略ブロック図である。
【図１２】図１２は、本発明の一実施形態に従う復号器の動作の簡略フローチャートである。
【図１３】図１３は、本発明の他の実施形態に従う復号器の動作の簡略フローチャートである。
【図１４】図１４は、本発明のさらにもう一つの実施形態に従う復号器の動作の簡略フローチャートである。
【図１５】図１５は、本発明の一実施形態に従うダイナミック復号器の簡略ブロック図である。
【図１６】図１６は、本発明の一実施形態に従うスタティック復号器の簡略ブロック図である。
【図１７】図１７はサブシンボル写像からのソースシンボルを示す図である。
【図１８】図１８は、さまざまなファイルサイズのファイルのダウンロードパラメータの可能な設定を示す図である。
【図１９】図１９は、さまざまなソースブロックサイズのストリーミングパラメータの可能な設定を示す図である。
【図２０】図２０は、ソースおよび中間シンボルとの関係を示すマトリックスの形式を示す図である。
【図２１】図２１は、度数生成器の度数分布を示す図である。
【図２２】図２２は、復号化に使用可能なマトリックスＡの形式を示す図である。
【発明を実施するための形態】
【００２０】
［特定実施形態の詳細な説明］
詳細な説明の後に以下の３つの付録を示す。付録Ａは、システマティックインデックスＪ（Ｋ）の値の例を含む。付録Ｂ．１は、テーブルＶ０の値の例を含む。そして、付録Ｂ．２は、テーブルＶ１の値の例を含む。
【００２１】
ここに記載される特定実施形態において、“マルチステージコーディング(coding)”として表記されるコーディングスキームが記載されており、その実施形態はショクロラヒ(Shokrollahi)氏の文献において提供される。
【００２２】
ここに記載されるマルチステージ符号化は複数の段階によりデータを符号化する。常にではないが、一般的には、第１段階では予め指定される量の冗長性をデータに付加する。第２段階では、オリジナルデータおよび符号化の第１段階により計算される冗長シンボルから出力シンボルを生成するために連鎖反応符号等を使用する。本発明の一特定実施形態において、受信されたデータは、最初に連鎖反応復号プロセスを使用して復号化される。そのプロセスにおいてオリジナルデータを完全に回復することが出来ない場合、第２の復号ステップが適用されることができる。
【００２３】
マルチステージ符号化の実施形態において、冗長シンボルは、符号化の第１段階において、入力ファイルまたはストリームのブロックから生成される。これらの実施形態では、符号化の第２段階で、出力シンボルは、入力ファイルまたはストリームのブロックおよび冗長シンボルの組合せから生成される。これらの実施形態において、出力シンボルは、必要に応じて生成されることができる。第２段階が連鎖反応符号化を含む実施形態において、各々の出力シンボルは他の出力シンボルが生成される方法に関係なく生成されることができる。一旦生成されると、これらの出力シンボルはパケット内に配置され転送先に送信される。ここで、各々のパケットは１個以上の出力シンボルを含んでいる。非パケット化送信技術はその代わりに、あるいは加えて利用可能である。
【００２４】
ここで使用される用語”ファイル”は、１個以上のソースに記憶され、１以上の転送先にユニットとして配信される任意のデータを示す。したがって、ファイルサーバまたはコンピュータ記憶装置からのファイル、画像、および文書は、すべて、配信される”ファイル”の例である。ファイルは、周知のサイズのもの（ハードディスクに記憶された１メガバイトの画像のような）であることができ、未知のサイズのもの（ストリーミングソースの出力から得されたファイルのような）であることができる。いずれの場合においても、ファイルは入力シンボルのシーケンスであり、ここで各々の入力シンボルはそのファイル内の位置と値とを有する。
【００２５】
ここで使用される用語”ストリーム”は、１個以上のソースに記憶され、もしくは生成され、１個以上の転送先にそれが生成される順番に各時点で特定のレートで配信される任意のデータを示している。ストリームは、固定レートまたは可変レートでありえる。したがって、遠隔装置の制御に使用されるデータストリーム、ＡＭＲオーディオストリーム、およびＭＰＥＧビデオストリームは全て配信されることのできる”ストリーム”の例である。各時点でのストリームのレートは、既知である（例えば４メガビット／秒）ことができ、あるいは未知（例えば、各時点でのレートが前もって分からない可変レートストリーム）であることができる。いずれの場合においても、ストリームは入力シンボルのシーケンスであり、各々の入力シンボルはストリーム内の位置と値とを有する。
【００２６】
送信は、ファイルまたはストリームを配信するために１以上の送信機から１以上の受け側へチャネルを介してデータを送信するプロセスである。また、送信機を符号器と称することもある。１台の送信機が完全なチャネルにより任意の数の受け側に接続している場合、全てのデータは正しく受信されるので、その受信されたデータは入力ファイルまたはストリームの正確なコピーである。ここでは、現実のチャネルの多くの場合と同様、チャネルが完全でないと仮定する。多くのチャネルの欠点の中で、重要な２つの欠点は、データ消去およびデータの不完全性（それはデータ消去の特殊例とみなされることができる）である。データ消去は、チャネルがデータを失うか、あるいはドロップしたときに発生する。データ不完全性は、データの一部が素通りするまで受け側がデータを受信し始めない場合、送信が終了する前に受け側がデータを受信するのを止めた場合、受け側が送信されたデータの一部のみを受信することを選択する場合、および／または、受け側が断続的に止まり、再びデータを受信し始めた場合に発生する。データ不完全性の例としては、移動中の衛星送信機が入力ファイルまたはストリームを示すデータを送信しており、受け側が範囲内に入る前にその送信を始めることがあり得る。受け側が範囲内に入ると、データは受信されることができ、それは衛星が動いて範囲外に出るまでであり、その時点でその受け側は、範囲内に入った別の衛星により送信されている同じ入力ファイルまたはストリームについてデータを受信し始めるためにその衛星デッシュを向けなおすことができる（その期間中、それはデータを受信していない）。この説明を読むことから明らかになるように、データ不完全性はデータ消去の特殊な例である。何故ならそれは、受け側は、あたかもその受け側が全期間中範囲内にあったかのようにデータ不完全性を処理することができる（そして、その受け側は、同じ問題を有する）が、しかし、チャネルは、その受け側がデータを受信し始めた個所まで全てのデータを失ったからである。また、周知のように、通信システム設計において、検出可能な誤りは、検出可能な誤りを有する全てのデータブロックまたはシンボルを単にドロップすることによって、消去に等しいとみなされることができる。
【００２７】
若干の通信システムにおいて、受け側は、多数の送信機によって、または多数の接続を使用する１台の送信機によって生成されるデータを受信する。たとえば、ダウンロードの速度を上げるために、受け側は、同じファイルに関してデータを送信するために２以上の送信機に同時に接続し得る。別の例として、マルチキャスト送信において、多数のマルチキャストデータストリームは、受け側が総計の送信速度を、それらをその送信機に接続しているチャネルの帯域幅と一致させるためにこれらのストリームの一つ以上に接続することを可能にするために送信され得る。全てのこのような場合において、問題は、全ての送信されたデータが受け側に独立した使用のものであること、すなわち送信レートが異なるストリームに関してかなり異なるときでさえ、および損失の任意のパターンが存在するとき、その多数のソースデータはそのストリームの中で冗長ではないことを保証することである。
【００２８】
一般に、通信チャネルは、データ送信のために受け側と送信機とを接続するものである。通信チャネルはリアルタイムチャネルであることができ、ここで、チャネルはデータを得ながら送信機から受け側へそのデータを移動し、または、通信チャネルは、送信機から受け側への伝送中にデータの全てまたは一部を記憶する記憶チャネルであり得る。後者の実施形態は、ディスク記憶装置または他の記憶デバイスである。その実施形態において、データを生成するプログラムまたはデバイスは、記憶デバイスにデータを送信する送信機と考えることができる。受け側は、記憶デバイスからデータを読み取るプログラムまたはデバイスである。送信機が記憶デバイス上にデータを取得するために使用するメカニズム、記憶デバイス自体、および受け側が記憶デバイスからデータを得るために使用するメカニズムは、チャネルを集合的に形成する。それらのメカニズムまたは記憶デバイスがデータを失い得る機会がある場合、それは通信チャネル中のデータ消去として扱われるであろう。
【００２９】
送信機および受け側が、シンボルが消去されることができる通信チャネルによって、隔てられるとき、入力ファイルまたはストリームの正確なコピーを送信せず、その代わりに、消去の回復を支援する（入力ファイルまたはストリーム自身の全部または一部を含むことができた）入力ファイルまたはストリームから生成されるデータを送信することが好ましい。符号器は、そのようなタスクを処理する回路、デバイス、モジュール、またはコードセグメントである。符号器の動作を見る１つの方法は、符号器が入力シンボルから出力シンボルを生成することであり、ここで、入力シンボル値のシーケンスは入力ファイルまたはストリームのブロックを表す。したがって、各入力シンボルは、入力ファイルまたはストリームのブロックにおける位置と、値とを有する。復号器は、受け側により受信される出力シンボルから入力シンボルを再構成する回路、デバイス、モジュールまたはコードセグメントである。マルチステージコーディングにおいて、符号器および復号器は、各々が異なるタスクを実行しているサブモジュールに更に分割される。
【００３０】
マルチステージコーディングシステムの実施形態において、符号器および復号器は、各々が異なるタスクを実行するサブモジュールに更に分割されることが可能である。例えば、実施形態によっては、符号器は、本明細書において、スタティック符号器およびダイナミック符号器と呼ばれるものを含む。ここで使用しているように、「スタティック符号器」は入力シンボルのセットから多くの冗長シンボルを生成する符号器であり、そこにおいて、冗長シンボルの数は符号化の前に決定される。スタティック符号化コードの実施形態はリード−ソロモンコード、トルネードコード、ハミングコード、低密度パリティチェック（ＬＤＰＣ：Ｌｏｗ Ｄｅｎｓｉｔｙ Ｐａｒｉｔｙ Ｃｈｅｃｋ）コード、その他を含む。「スタティック復号器」という用語はスタティック符号器によって符号化されたデータを復号化できる復号器を示すために本願明細書において使用される。
【００３１】
ここで使用しているように、”ダイナミック符号器”は、入力シンボルのセットから出力シンボルを生成する符号器であり、ここで、可能な出力シンボルの数は入力シンボルの数より大きい大きさのオーダーであり、生成される出力シンボルの数は固定される必要はない。ダイナミック符号器の１つの実施形態は、連鎖反応符号器（例えばルビーＩおよびルビーＩＩに記載されている符号器）である。用語”ダイナミック復号器”は、ダイナミック符号器によって符号化されたデータを、復号化することができる復号器を指すために本願明細書において使用される。
【００３２】
マルチステージコーディングの実施形態は、任意の特定の種類の入力シンボルに限られる必要はない。一般的に、入力シンボルの値は、ある正の整数Ｍに関して２M個のシンボルのアルファベットから選択される。このような場合、入力シンボルは、入力ファイルまたはストリームからのデータのＭビットのシーケンスにより表されることができる。たとえば、Ｍの値は、出力シンボルのサイズ、通信チャネル、および／またはアプリケーションの使用に基づいてしばしば決定される。加えて、出力シンボルのサイズは、入力シンボルのサイズ、チャネルおよび／またはアプリケーションに基づいてしばしば決定される。場合によっては、出力シンボル値および入力シンボル値が同一サイズであった（すなわち、同数のビットで表現可能であったか、あるいは同じアルファベットから選択された）場合、コーディングプロセスは単純化され得る。そうである場合、出力シンボル値サイズが制限されるときに、入力シンボル値サイズは制限される。たとえば、出力シンボルを制限されたサイズのパケットにすることが望ましい。出力シンボルに関連したキーに関するあるデータが、受信機でそのキーを回復するために送信されることになっていた場合、出力シンボルは、そのキーに関するデータおよび出力シンボル値を１つのパケット中に収容できるほど十分小さいことが好ましい。
【００３３】
一例として、入力ファイルが多メガバイト(multiple megabyte)ファイルである場合、入力ファイルは、各入力シンボルが何千、何百ものバイト、または数バイトだけを符号化する、何千、何十万、または何百万もの入力シンボルに分解され得る。別の例としてパケットベースのインターネットチャネルのために、１０２４バイトのサイズのペイロードを有するパケットは、適当でうり得る（１バイトは、８ビットである）。この例では、各々のパケットが１つの出力シンボルおよび８バイトの補助情報を含むと仮定すると、８１２８ビット（（１０２４−８）＊８）の出力シンボルサイズが適当であろう。したがって、入力シンボルサイズは、Ｍ＝（１０２４−８）＊８、すなわち８１２８ビットとして選ばれることができる。別の例として、若干の衛星システムはＭＰＥＧパケット規格を使用し、ここで、各々のパケットのペイロードは１８８バイトを含む。その実施形態において、各々のパケットが１つの出力シンボルおよび４バイトの補助情報を含むと仮定すると、１４７２ビット（（１８８−４）＊８）の出力シンボルサイズが適当であろう。したがって、入力シンボルサイズは、Ｍ＝（１８８−４）＊８、または１４７２ビットとして選ばれることができる。マルチステージコーディングを使用する汎用通信システムにおいて、特定用途用パラメータ（例えば入力シンボルサイズ（すなわち、入力シンボルによって符号化されるビットの数、Ｍ）は、その用途によって設定される変数であり得る。
【００３４】
別の例として、可変サイズの転送元パケットを使用して送られるストリームに関して、各転送元パケットがその転送元パケットより、せいぜいわずかに大きい総サイズを有する入力シンボルの整数でカバーされることができるように、シンボルサイズはむしろ小さくなるように選ばれる。
【００３５】
各々の出力シンボルは、値を有する。以下において検討される好ましい一実施形態において、各々の出力シンボルはまた、それの”キー”と呼ばれる識別子と関連付けられている。各々の出力シンボルのキーは、受け側が１つの出力シンボルと他の出力シンボルを区別することを可能にするために、受け側により容易に決定されることができることが好ましい。出力シンボルのキーは、他の全ての出力シンボルのキーと異なっていることが好ましい。前の技術で説明されたキーイングのさまざまな形式が存在する。たとえば、ルビーＩには、本発明の実施形態において使用されることができるキーイングのさまざまな形式が記述される。
【００３６】
データ消去が予想される場合、または送信が開始及び終了するまさにそのときに受け側が受信を開始及び終了しない場合、マルチステージコーディングは特に役立つ。後者の状態は本明細書において、”データ不完全性”と呼ぶ。消去イベントに関して、マルチステージコーディングは、ルビーＩ．氏の文献に記載されている連鎖反応コーディングの利点のうちの多くを共用する。具体的には、マルチステージ出力シンボルは情報付加的であるので、任意の適当な数のパケットは所望の精度に入力ファイルまたはストリームを回復するために用いられることができる。マルチステージコーディングが使われるときに、これらの状況は通信プロセスに悪影響を与えない。何故ならそれは、マルチステージコーディングにより生成される出力シンボルは情報付加的だからである。たとえば、１００のパケットがデータ消去を引き起こすノイズのバーストのせいで失われる場合、追加の１００のパケットはその消去されたパケットの損失を交換するためにバースト後に受け取られることができる。送信機が送信し始めるときに、受信機がそれに同調を行わなかったために、何千ものパケットが失われる場合、その受信機は、送信の任意の他の期間から、あるいは別の送信機からでさえ、それら何千ものパケットを受け取ることができる。マルチステージコーディングについては、受信機は任意の特定のセットのパケットを受け取ることを強いられないので、それは１台の送信機から若干のパケットを受信し、別の送信機に切り替わり、若干のパケットを失い、与えられた送信の開始または終了を見のがし、ストリームの入力ファイルまたはブロックを依然として回復することができる。受信機・送信機の調整なしに送信に加わり、及びそれを離れる能力は、通信プロセスを単純化するのに役に立つ。
【００３７】
いくつかの実施形態では、マルチステージコーディングを使用してファイルまたはストリームを送信することは、入力シンボルをストリームの入力ファイルまたはブロックから生成し、形成し、または抽出すること、冗長シンボルを算出すること、一つ以上の出力シンボルに入力および冗長シンボルを符号化すること、ここで各出力シンボルは他の全ての出力シンボルから独立してそのキーに基づいて生成され、及びチャネルの上で一つ以上の受け側に出力シンボルを送信することを含むことができる。加えて、ある実施形態では、マルチステージコーディングを使用して、ストリームの入力ファイルまたはブロックのコピーを受信すること（及び再構成すること）は、１以上のデータストリームから出力シンボルのいくつかのセットまたはサブセットを受信することと、その受信された出力シンボルの値およびキーから入力シンボルを復号化することを含むことができる。
【００３８】
本願明細書に記載されている適切なＦＥＣ消去コードは、上述された問題点を克服するために用いられることができ、マルチメディア同報通信およびマルチキャスティングシステムおよびサービスを含む多くのフィールドでの使用が見出される。以降、「マルチステージ連鎖反応符号（multi-stage chain reaction code）」と呼ばれるＦＥＣ消去コードは、このようなシステムおよびサービスの現在および将来の必要条件の多数を満たす特性を有する。
【００３９】
マルチステージ連鎖反応符号のいくつかの基本特性は、任意のパケット損失状況に関して、並びに任意の関連レートのストリームまたは任意の関連サイズのソースファイルの配信に関して、以下の通りである。
【００４０】
（ａ）個々の受信機デバイス”ＲＤ”の受信オーバーヘッドは、最小化される、
（ｂ）ソースファイルを任意の数のＲＤに配信するために必要な合計送信時間は最小化されることができる、
（ｃ）送信スケジュールの適切な選択により、任意の数のＲＤへ配信されたストリームの品質は、入力シンボルの数に関連して送られる出力シンボルの数について最大にされることができる。  
ＲＤは、車両に埋め込まれた、ポータブルの(portable)（すなわち、使用しているとき、移動可能であるが一般的に動いていない）、あるいはある場所に固定されたハンドヘルドデバイスであり得る。
【００４１】
復号化のために必要とされる作業メモリの量は低く、上記の特性を依然として提供することができ、また、符号化し、復号化するために必要とされる計算の量は最小限である。この文書において、マルチステージ連鎖反応符号のいくつかのバリエーションの説明をインプリメントするための簡単で容易なものが提供される。
【００４２】
マルチステージ連鎖反応符号は、ファウンテン(fountain)コードであり、必要とされる数の符号化パケットが実行中に生成されることができ、各々がストリームのブロックまたはソースファイルを回復することに等しく有用な固有の符号化シンボルを含む。ＦＥＣコードの他のタイプに対してファウンテンコードを使用することには多数の利点がある。１つの利点は、パケット損失状況およびＲＤ利用可能度に関係なく、ファウンテンコードが符号化パケットの数を最小化し、各ＲＤがストリームのブロックまたはソースファイルを再構築するために受信することを必要とすることである。これは、厳しいパケット損失状況下や、移動ＲＤが、たとえば、長いファイルダウンロードセッションにわたって断続的にしかオンにされないか、あるいは利用可能でないときでさえ真であり。
【００４３】
別の利点は、送信が進行中である間に実行中に(on-the-fly)生成すべき符号化パケットの数についての決定がなされて、必要とされるまさにその数の符号化パケットを生成する能力である。これは、たとえば、ストリームのブロックまたはソースファイルを回復するのに十分な符号化パケットをそれらが受信したか否かを指示する複数のＲＤからのフィードバックが存在する場合、有用であり得る。パケット損失状況が期待されるより厳しくないとき、送信は、早く終了されることができる。パケット損失状況が期待されるよりも厳しいか、またはＲＤが期待されるよりも多い頻度で利用できないとき、送信はシームレスに延長されることができる。
【００４４】
別の利点は、逆多重化する能力である。逆多重化は、ＲＤがストリームのブロックまたはソースファイルを再構築するために独立した送信機で生成された受信された符号化パケットを結合することができるときである。逆多重化の１つの実用的な使用は、異なる送信機から符号化パケットを受信することを参照して以下に記載されている。
【００４５】
将来のパケット損失、ＲＤ有効性およびアプリケーション状態が予測し難い場合、予測不能な状況下で適切に動作するように可能な限り柔軟であるＦＥＣの解を選択することは重要である。マルチステージ連鎖反応符号は、他のタイプのＦＥＣコードによってつり合いがとれない柔軟度を提供する。
【００４６】
次に、図面を参照して本発明の態様を説明する。  
＜システムの概要＞
図１は、マルチステージコーディングを使用する通信システム１００のブロック図である。通信システム１００において、入力ファイル１０１または入力ストリーム１０５は入力シンボル生成器１１０に提供される。入力シンボル生成器１１０は入力ファイルまたはストリームから１個以上の入力シンボルのシーケンス（ＩＳ（０），ＩＳ（１），ＩＳ（２），．．．）を生成し、各々の入力シンボルは値と、位置（図１の括弧内の整数として示す）とを有する。上述したように、入力シンボルの可能な値、すなわちアルファベットは一般的に、各入力シンボルが入力ファイルまたはストリームのＭビットに関して符号化を行うように、２Ｍ個のシンボルのアルファベットである。Ｍの値は通常、通信システム１００の使用により決定されるが、しかし、汎用システムは、Ｍが使用に応じて変化することができるように、入力シンボル生成器１１０のシンボルサイズ入力を含み得る。入力シンボル生成器１１０の出力は、符号器１１５に提供される。
【００４７】
スタティックキー生成器１３０は、スタティックキーＳ０，Ｓ１．．．のストリームを生成する。生成されるスタティックキーの数は一般に制限されており、符号器１１５の特定実施形態に依存する。スタティックキーの生成は、以降で更に詳細に説明する。ダイナミックキー生成器１２０は、符号器１１５により生成される各々の出力シンボルに関するダイナミックキーを生成する。各々のダイナミックキーは、同じ入力ファイルまたはストリームのブロックのダイナミックキーの大部分が固有となるように生成される。たとえば、利用可能なキー生成器の複数の実施形態がルビーＩに記載されている。ダイナミックキー生成器１２０およびスタティックキー生成器１３０の出力は、符号器１１５に提供される。
【００４８】
ダイナミックキー生成器１２０によって提供された各々のキーＩから、符号器１１５は、入力シンボル生成器により提供される入力シンボルからの、値Ｂ（Ｉ）を有する出力シンボルを生成する。符号器１１５の動作については、以下で更に詳細に説明する。各々の出力シンボルの値はそれのキー、１個以上の入力シンボルの何らかの関数、および、ことによると入力シンボルから計算された１個以上の冗長シンボルに基づいて生成される。本明細書において、ある特定の出力シンボルのもとである入力シンボルおよび冗長シンボルの集合を、出力シンボルの”関連シンボル”または単にその”付随物（associates）”と呼ぶ。関数（”値関数”）および付随物の選択は、以降で更に詳細に記載されるプロセスに従って行われる。常にではないが、一般的に、Ｍは入力シンボルおよび出力シンボルに関して同一であり、すなわち、それら双方は同じビット数に関して符号化を行う。
【００４９】
いくつかの実施形態では、符号器１１５は付随物を選択するために入力シンボルの数Ｋを使用する。入力がストリーミングファイルである場合のようにＫが前もってわかっていない場合には、Ｋは単に推定値であることができる。また、符号器１１５により生成される任意の中間シンボルおよび入力シンボルに記憶域を割り当てるために、値Ｋは符号器１１５により使用され得る。
【００５０】
符号器１１５は送信モジュール１４０に出力シンボルを提供する。また、送信モジュール１４０は、ダイナミックキー生成器１２０からのこのような各出力シンボルのキーを提供される。送信モジュール１４０は出力シンボルを送信し、送信モジュール１４０はまた、使用されるキーイング方法に依存して、送信された出力シンボルのキーに関する何らかのデータを、チャネル１４５を介して受信モジュール１５０に送信することができる。チャネル１４５は、消去チャネルであるとみなされるが、しかしそれは通信システム１００の適切な動作のための必要条件ではない。送信モジュール１４０が出力シンボルおよびそれらのキーに関して必要とされる任意のデータをチャネル１４５へ送信するように適合され、および受信モジュール１５０がシンボルおよび、場合によっては、それらのキーに関する何らかのデータをチャネル１４５から受信するように適合される限り、モジュール１４０、１４５および１５０は、任意の適切なハードウェアコンポーネント、ソフトウェアコンポーネント、物理媒体、またはその任意の組合せであることができる。Ｋの値は、付随物を決定するために用いられる場合、チャネル１４５を介して送信されることができ、またはそれは符号器１１５および復号器１５５の合意の上で定刻より早く設定され得る。
【００５１】
前述したように、チャネル１４５は、テレビジョン送信機からテレビジョン受け側への同報通信リンクまたはインターネットを通った経路、あるいはあるポイントから他のポイントへの電話接続のようなリアルタイムチャネルであることができ、もしくはチャネル１４５は、ＣＤ−ＲＯＭ、ディスクドライブ、ウェブサイト等のような記憶チャネルであることができる。チャネル１４５は、入力ファイルがパーソナルコンピュータから電話回線を介してインターネットサービスプロバイダー（ＩＳＰ）へ送信されるときに形成されるチャネルのような、リアルタイムチャネルと記憶チャネルの組合せであることさえ可能であり、その入力ファイルはウェブサーバに記憶され、続いてインターネットを介して受け側に送信される。
【００５２】
チャネル１４５は消去チャネルであると仮定されているので、通信システム１００は、受信モジュール１５０から出力される出力シンボルと送信モジュール１４０に入力される出力シンボルとの間に１対１の対応を呈することは出来ない。実際、チャネル１４５がパケットネットワークを備える場合、通信システム１００は、２個以上のパケットの相対的順序がチャネル１４５を通過中に保存されると仮定することさえ出来ないかもしれない。従って、出力シンボルのキーは上述された１以上のキーイング・スキームを利用して決定され、出力シンボルが受信モジュール１５０から出力される順序によって必ずしも決定されるわけではない。
【００５３】
受信モジュール１５０は復号器１５５に出力シンボルを提供し、受信モジュール１５０がこれらの出力シンボルのキーに関して受信する任意のデータは、ダイナミックキー再生器１６０に提供される。ダイナミックキー再生器１６０は受信された出力シンボルのためのダイナミックキーを再生成し、これらのダイナミックキーを復号器１５５に提供する。スタティックキー生成器１６３は、スタティックキーＳ０，Ｓ１．．．を再生成し、それらを復号器１５５に提供する。スタティックキー生成器は、符号化および復号化プロセスの両期間中に使用される乱数生成器１３５にアクセスしている。これは、同一の物理デバイス上で乱数が生成される場合にはこのような同一の物理デバイスへのアクセスの形態であることができ、あるいは同じ動作を得るために同一の乱数生成アルゴリズムへのアクセスの形態であることができる。復号器１５５は、ダイナミックキー再生器１６０およびスタティックキー生成器１６３により提供されるキーを、対応する出力シンボルと一緒に使用して、入力シンボル（再び、ＩＳ（０），ＩＳ（１），ＩＳ（２），．．．）を回復する。復号器１５５は回復された入力シンボルを入力ファイル再構築器１６５へ提供し、それは入力ストリーム１０５または入力ファイル１０１のコピー１７０を生成する。
【００５４】
＜符号器＞
図２は、図１に示される符号器１１５の特定の一実施形態のブロック図である。符号器１１５は、スタティック符号器２１０、ダイナミック符号器２２０、および、冗長計算機２３０を備えている。スタティック符号器２１０は、以下の入力を受信する。  
ａ）入力シンボル生成器１１０により提供され、入力シンボルバッファ２０５に記憶されたオリジナルの入力シンボルＩＳ（０），ＩＳ（１），ＩＳ（２），．．．，ＩＳ（Ｋ−１）
ｂ）オリジナルの入力シンボルの数Ｋ
ｃ）スタティックキー生成器１３０により提供されるスタティックキーＳ０，Ｓ１，．．．
ｄ）冗長シンボルの数Ｒ。  
スタティック符号器２０５は、これらの入力を受信するとすぐに、後述するようにＲ個の冗長シンボルＲＥ（０），ＲＥ（１），．．．，ＲＥ（Ｒ−１）を計算する。常にではないが一般的に、冗長シンボルは入力シンボルと同じサイズである。一特定実施形態において、スタティック符号器２１０により生成される冗長シンボルは、入力シンボルバッファ２０５に記憶される。入力シンボルバッファ２０５は単なる論理的なものであることができる。すなわち、ファイルまたはストリームのブロックが１つの場所に物理的に記憶されることができ、シンボルバッファ２０５内における入力シンボルの位置は、オリジナルのファイルまたはストリームのブロック内におけるこれらシンボルの位置の単なる名称変更(renamings)であることができる。
【００５５】
ダイナミック符号器は、入力シンボルおよび冗長シンボルを受信し下記に詳述されているように出力シンボルを生成する。冗長シンボルが入力シンボルバッファ２０５に記憶される一実施形態においては、ダイナミック符号器２２０は入力シンボルバッファ２０５から入力シンボルおよび冗長シンボルを受信する。
【００５６】
冗長計算機２３０は、入力シンボルの数Ｋから冗長シンボルの数Ｒを計算する。この計算は下記に詳述されている。
【００５７】
＜スタティック符号器の概要＞
スタティック符号器２１０の一般動作は図３および図４に示される。図３は、スタティック符号化の方法の一実施形態の簡略フローチャートを例示している。ステップ３０５において、変数ｊ（いくつの冗長シンボルが生成されたかについての状況を常に把握している）は、ゼロに設定される。その後、ステップ３１０では、第１の冗長シンボルＲＥ（０）は入力シンボルＩＳ（０），．．．，ＩＳ（Ｋ−１）のうちの少なくともいくつかのものの関数Ｆ０として計算される。それから、ステップ３１５で、変数ｊはインクリメントされる。次に、ステップ３２０で、冗長シンボルの全てが生成されたか（すなわち、ｊがＲ−１より大きいか？）どうかが検査される。もしＹｅｓの場合、フローは終了する。そうでなければ、フローは、ステップ３２５へ進む。ステップ３２５において、ＲＥ（ｊ）は入力シンボルＩＳ（０），．．．，ＩＳ（Ｋ−１）および以前に生成された冗長シンボルＲＥ（０），．．．，ＲＥ（ｊ−１）の関数Ｆｊとして計算される。ここで、Ｆｊは入力シンボルのあらゆるすべてのものまたは冗長シンボルのあらゆるすべてのものに依存する関数である必要はない。ステップ３１５、３２０および３２５は、Ｒ個の冗長シンボルが計算されるまで繰り返される。
【００５８】
再び図１および図２を参照すると、実施形態によっては、スタティック符号器２１０はスタティックキー生成器１３０から１個以上のスタティックキーＳ０，Ｓ１．．．を受信する。これらの実施形態では、スタティック符号器２１０は、いくつかまたは全部の関数Ｆ０，Ｆ１，．．．Ｆｊ−１を決定するためにスタティックキーを使用する。たとえば、スタティックキーＳ０は関数Ｆ０を決定するために利用可能であり、スタティックキーＳ１は関数Ｆ１を決定するために利用可能である。もしくは、スタティックキーＳ０，Ｓ１，．．．の１個以上のものが関数Ｆ０を決定するために利用可能であり、スタティックキーＳ０，Ｓ１，．．．のうちの１個以上のものが関数Ｆ１を決定するために利用可能である。他の実施態様では、スタティックキーは不要であり、したがってスタティックキー生成器１３０は必要ない。
【００５９】
次に、図２および図３を参照すると、実施形態によっては、スタティック符号器２１０により生成される冗長シンボルは、入力シンボルバッファ２０５に記憶されることができる。図４は、スタティック符号器２１０の一実施形態の動作の簡略図である。特に、スタティック符号器２１０は、入力シンボルバッファ２０５から受信された入力シンボルＩＳ（０），．．．，ＩＳ（Ｋ−１），ＲＥ（０），．．．，ＲＥ（ｊ−１）の関数Ｆｊとして、冗長シンボルＲＥ（ｊ）を生成し、それを入力シンボルバッファ２０５の中に戻し記憶する。関数Ｆ０，Ｆ１，．．．，ＦＲ−１の正確な形式は、特定の用途に依存する。常ではないが一般的には、関数Ｆ０，Ｆ１，．．．，ＦＲ−１は、それらの対応する引数のうちのいくつかあるいは全ての排他的論理和を含んでいる。上述したように、これらの関数は実際に、図１のスタティックキー生成器１３０により生成されるスタティックキーを使用することができ、あるいは使用しなくてもよい。たとえば、後述する一特定実施形態では、最初のいくつかの関数は、ハミングコードを実装し、スタティックキーＳ０，Ｓ１，．．．を全く使用せず、その一方で残りの関数は低密度パリティチェックコードを実装し、スタティックキーを明示的に利用する。
【００６０】
＜マルチステージ符号器の概要＞
再度図２を参照すると、ダイナミック符号器２２０は、入力シンボルＩＳ（０），．．．，ＩＳ（Ｋ−１）および冗長シンボルＲＥ（０），．．．，ＲＥ（Ｒ−１）ならびにそれが生成する各出力シンボルのためのキーＩを受信する。オリジナルの入力シンボルおよび冗長シンボルを備えるこの集合は、以降”ダイナミック入力シンボル”の集合と呼ばれる。図５は、ウェイトセレクタ５１０、アソシエータ５１５、値関数セレクタ５２０および計算機５２５を含むダイナミック符号器の一実施形態の簡略ブロック図である。図５に示すように、Ｋ＋Ｒ個のダイナミック入力シンボルはダイナミックシンボルバッファ５０５に記憶される。実質的に、ダイナミック符号器５００は図６に例示される、すなわち、選択された入力シンボルのある値関数として出力シンボル値Ｂ（Ｉ）を生成するための動作を実行する。
【００６１】
図７は、本発明によるスタティック符号器の一特定実施形態の簡略ブロック図である。スタティック符号器６００は、パラメータ計算機６０５、ハミング符号器６１０および低密度パリティチェック（ＬＤＰＣ）符号器６２０を備えている。ハミング符号器６１０は、入力シンボルバッファ６２５からの入力シンボルＩＳ（０），．．．，ＩＳ（Ｋ−１）、入力シンボルの数Ｋ、およびパラメータＤを受信するように結合される。それに応じて、ハミング符号器６１０は、ハミングコードに従ってＤ＋１個の冗長シンボルＨＡ（０），ＨＡ（１），．．．，ＨＡ（Ｄ）を生成する。
【００６２】
図８は、図７に示されるスタティック符号器を使用する本発明の一実施形態の動作を例示する。
【００６３】
図９は、上述のパラメータＤおよびＥを計算する、図７のパラメータ計算機６０５のような、パラメータ計算機の一実施形態の簡略フローチャートである。最初に、ステップ７０５で、パラメータＤは１に初期化される。その後、ステップ７１０で、２Ｄ−Ｄ−１がＫ未満であるか否かが決定される。ＮＯの場合フローはステップ７３０へ進む。ＹＥＳの場合、フローはステップ７２０へ進み、ここでパラメータＤはインクリメントされる。その後、フローはステップ７１０へ戻る。Ｄが決定されると、ステップ７３０において、パラメータＥはＲ−Ｄ−１として算出される。
【００６４】
図１０は本発明の一実施形態に従うこのような符号器の簡略フローチャートであり以下に説明する。最初に、ステップ８０５で、変数ｉはゼロに初期化される。変数ｉは、すでに生成された冗長シンボルの数を常に把握している。ステップ８１０において、数ｔは、Ｋ／２以上の最も小さい奇数の整数として算出される。ステップ８１５において、値Ｐ1 ，Ｐ2 ，．．．，Ｐt は、Ｋ、ｔおよびスタティックキーＳi に基づいて生成される。値Ｐ1 ，Ｐ2 ，．．．，Ｐtは、冗長シンボルを生成するために用いられる入力シンボルの位置を示す。ある特定の実施形態では、図５のアソシエータ５１５のようなアソシエータは、Ｐ1 ，Ｐ2 ，．．．，Ｐtを生成するために用いられる。特に、値ｔはＷ（Ｉ）入力として与えられ、値ＫはＫ＋Ｒ入力として与えられ、スタティックキーＳiはキーＩ入力として与えられる。ｔの多くの異なる値は、類似したコーディング効果を生じさせ、したがってこの特定の選択は単なる一例に過ぎないことに留意すべきである。ステップ８２０において、ＲＥ（ｉ）の値は、値ＩＳ（Ｐ1 ），ＩＳ（Ｐ2 ），．．．，ＩＳ（Ｐt）のＸＯＲとして計算される。ステップ８２５において、変数ｉは次の冗長シンボルの計算を準備するために１だけインクリメントされ、ステップ８３０で、全ての冗長シンボルが計算されたか否かが決定される。否の場合、フローはステップ８１５に戻る。
【００６５】
図１１は、本発明による復号器の一実施形態を示す簡略ブロック図である。復号器９００は、たとえば、図１の復号器１５５を実装するために用いられる。
【００６６】
復号器９００は、ダイナミック復号器９０５とスタティック復号器９１０を備えている。ダイナミック復号器９０５により回復される入力シンボルおよび冗長シンボルは、復元バッファ９１５に記憶される。ダイナミック復号化の完了後、スタティック復号器９１０は、ダイナミック復号器９０５により回復されない任意の入力シンボルがあれば、その回復を試みる。特に、スタティック復号器９１０は復元バッファ９１５からの入力シンボルと冗長シンボルを受信する。
【００６７】
図１２は、本発明による復号化のための方法の一実施形態の簡略フローチャートである。ステップ１００５において、Ｑ個の出力シンボルは、復号器により受信される。Ｑの値は、入力シンボルの数と使用される特定のダイナミック符号器に依存する。Ｑの値は、また、復号器が入力シンボルを回復できる所望の精度に依存する。たとえば、復号器が高確率で入力シンボルの全てを回復できることが望まれる場合、Ｑは入力シンボルの数より大きな数として選択されなければならない。特に、用途によっては、入力シンボルの数が大きいときに、Ｑはオリジナル入力シンボルの数より３％未満大きい。他の用途において、入力シンボルの数が少ないときに、Ｑは入力シンボルの数より少なくとも１０％大きいことが可能である。具体的には、Ｑは入力シンボルの数Ｋに数Ａを加えたものとして選ばれることができ、ここで、Ａは、復号器が高確率で入力シンボルの全てを確実に再生成することができるように選択される。数Ａの決定は、下で更に詳細に記載されている。（時々または常に）復号器が入力シンボルの全てを復号化することができないことが許容できる場合、ＱはＫ＋Ａ未満であり、Ｋに等しく、あるいはＫ未満でさえあることができる。明らかに、符号化システム全体の１つの目的はしばしば、可能な限り数Ｑを減少させ、その一方で所望の精度に関して復号プロセスの成功に関する良好な確率保証を維持することである。
【００６８】
ステップ１０１０において、ダイナミック復号器９０５は受信したＱ個の出力シンボルから入力シンボルおよび冗長シンボルを再生成する。ステップ１００５および１０１０が実質的に並行して実行されることができることが理解される。たとえば、ダイナミック復号器９０５は、復号器がＱ個の出力シンボルを受信する前に、入力シンボルおよび冗長シンボルを再生成し始めることができる。
【００６９】
ダイナミック復号器９０５がＱ個の出力シンボルを処理した後、入力シンボルが所望の精度に回復されたかどうかが決定される。所望の精度は、たとえば、入力シンボルの全て、または入力シンボルの全てより少ないある数、割合等であることができる。ＹＥＳの場合、フローは終わる。ＮＯの場合は、フローはステップ１０２０へ進む。ステップ１０２０において、スタティック復号器９１０は、ダイナミック復号器９０５が回復することができなかった入力シンボルの回復を試みる。スタティック符号器９１０がダイナミック復号器９０５により回復された入力シンボルおよび冗長シンボルを処理した後、フローが終了する。
【００７０】
図１３は、本発明による復号化のための方法の他の実施形態を示している簡略フローチャートである。この実施形態は、図１１に関して記載されたものと類似していて、共通のステップ１００５、１０１０、１０１５および１０２５を含む。しかし、ステップ１０２５の後、フローはステップ１０３０へ進み、そこにおいて、入力シンボルが所望の精度に回復されたかどうかが決定される。ＹＥＳの場合、フローは終了する。ＮＯの場合、フローはステップ１０３５へ進む。ステップ１０３５において、１個以上の追加の出力シンボルが受信される。その後、フローはステップ１０１０へ戻り、その結果ダイナミック復号器９０５および／またはスタティック復号器９１０は残っている回復されていない入力シンボルの回復を試みることができる。
【００７１】
図１４は、本発明による復号化のための方法のさらにもう一つの実施形態を示している簡略フローチャートである。ステップ１０５５において、出力シンボルは復号器により受信される。そして、ステップ１０６０で、ダイナミック復号器９０５は受信された出力シンボルから入力シンボルおよび冗長シンボルを再生成する。その後、ステップ１０６５で、ダイナミック復号化が終了されるべきか否かが決定される。この決定は、処理された出力シンボルの数、回復された入力シンボルの数、追加の入力シンボルが回復されている現在のレート、出力シンボルの処理に費やした時間等のうちの一以上のものに基づくことができる。
【００７２】
ステップ１０６５において、ダイナミック復号化は終了されるべきではないと決定される場合、フローはステップ１０５５へもどる。しかし、ステップ１０６５において、ダイナミック復号化を終了することが決定される場合、フローはステップ１０７０へ進む。ステップ１０７０において、入力シンボルが所望の精度に回復されたか否かが決定される。ＹＥＳである場合、フローは終了する。ＮＯの場合は、フローはステップ１０７５へ進む。ステップ１０７５において、スタティック復号器９１０は、ダイナミック復号器９０５が回復することができなかった任意の入力シンボルの回復を試みる。スタティック符号器９１０が、ダイナミック符号器９０５によって回復された入力シンボルおよび冗長シンボルを処理した後、フローは終了する。
【００７３】
図１５は、本発明によるダイナミック復号器の一実施形態を示す。ダイナミック復号器１１００は、図５に示されるダイナミック符号器５００のものと類似したコンポーネントを含む。復号器１１００は、ルビーＩおよびルビーＩＩに記載されている連鎖反応復号器の実施形態と類似している。ダイナミック復号器１１００は、ウェイトセレクタ５１０と、アソシエータ５１５と、値関数セレクタ５２０と、出力シンボルバッファ１１０５と、短縮器１１１５と、復元器１１２０と、復元バッファ１１２５とを備える。
【００７４】
図１６は、スタティック復号器の一実施形態の簡略ブロック図を示している。データが図７に関して記載されているようなスタティック符号器を用いて符号化されるときに、この実施形態を用いることができる。スタティック復号器１２００は、ＬＤＰＣ復号器１２０５とハミング復号器１２１０を備えている。ＬＤＰＣ復号器１２０５は復元バッファ１２１５から入力シンボルおよび冗長シンボルを受信し、ダイナミック復号器の復号ステップの後に回復されていない復元バッファ１２１５のそれらシンボルの復元を試みる。いくつかの実施形態では、復元バッファ１２１５は、復元バッファ１１２５（図１５）である。
【００７５】
ＬＤＰＣ復号器およびハミング復号器の多くのバリエーションは、当業者にとって周知であり、本発明による各種実施形態において使用されることができる。１つの特定実施形態において、ハミング復号器は、ガウス消去アルゴリズムを使用して行われる。ガウス消去アルゴリズムの多くのバリエーションは、当業者には周知であり、本発明による各種実施形態において使用されることができる。
【００７６】
＜バリエーション＞
上述のマルチステージ連鎖反応符号（multi-stage chain reaction code）はシステマティックコード(systematic codes)ではない。すなわち、ソースブロックのオリジナルソースシンボルのうちの全てが必ずしも送信される符号化シンボルであるというわけではない。しかしながら、システマティックＦＥＣコードは、ファイルダウンロードシステムまたはサービスに役立ち、ストリーミングシステムまたはサービスにとって非常に重要である。下記のインプリメンテーションに示すように、変更を加えられたコードは、システマティックなものにされることができ、ファウンテンコードおよび他の記載された特性を依然として維持する。
【００７７】
マルチステージコードを使用して様々な補足的なサービスを設計することが容易である一つの理由は、複数の送信機間での調整(coordination)なしにソースファイルまたはストリームを復元するために多数の送信機から受信された符号化シンボルを結合することができるからである。唯一の必要条件は、送信機がキーの異なるセットを使用して、それらがそのコードへ符号化パケットで送信する符号化シンボルを生成するにことである。これを達成するやり方は、この種の各々の送信機によって使用されるキー空間の異なる範囲を示すこと、または各々の送信機でランダムにキーを生成することを含む。
【００７８】
この能力の使用の一例として、例えばＨＴＴＰセッション等を介して、追加の符号化パケットがメイクアップ(make-up)送信機から送信されることを要求するためにファイルダウンロードセッションからソースファイルを復元するのに十分な符号化パケットを受信しなかったマルチステージ連鎖反応符号を可能にするファイルダウンロードサービスへの補足的なサービスを提供することを検討する。メイクアップ送信機はソースファイルから符号化シンボルを生成し、例えば、ＨＴＴＰを使用してそれらを送信し、全てのこれらの符号化シンボルは、ソースファイルを回復するためにファイルダウンロードセッションから受信されたものと結合され得る。このアプローチを使用することは、異なる送信機が、送信機間の調整なしにインクリメンタルソースファイル配信サービスを提供することを可能にし、その各々個別の受信機が各ソースファイルを回復するために最低限の数の符号化パケットだけを受信すればよいことを確実にする。
【００７９】
＜マルチステージコードのさまざまな段階のインプリメンテーション＞
＜ＦＥＣスキーム定義＞
これらの技術を使用するパケットは、ソースブロック番号（ＳＢＮ）を備える４オクテットのＦＥＣペイロードＩＤ（パケット内の符号化シンボルが関係するソースブロックの１６ビット整数識別子）のようなヘッダ情報と、および符号化シンボルＩＤ（ＥＳＩ）（パケット内の符号化シンボルの１６ビット整数識別子））とを用いて表され得る。ソースブロック番号および符号化シンボルＩＤの１つの適切な解釈は、下記のセクションＢにおいて定義される。ＦＥＣオブジェクト送信情報は、以下において定義されるパラメータＴ、Ｚ、ＮおよびＡ、転送長（Ｆ）、およびＦＥＣ符号化ＩＤを含み得る。パラメータＴおよびＺは、１６ビットの符号のない整数であり、ＮおよびＡは８ビットの符号のない整数である。
【００８０】
ＭＢＭＳ前方誤り訂正のＦＥＣ符号化スキームは、下記のセクションにおいて定義される。それはＦＥＣ転送元パケットのための１つと、ＦＥＣ修復パケットのためのもう１つの、２つの異なるＦＥＣペイロードＩＤフォーマットを定義するが、しかし非システマティックコードのバリエーションもまた可能である。
【００８１】
転送元ＦＥＣペイロードＩＤは、ソースブロック番号（ＳＢＮ）（パケット内の符号化シンボルが関係するソースブロックのための１６ビットの整数識別子）および符号化シンボルＩＤ（ＥＳＩ）（パケット内の符号化シンボルのための１６ビットの整数識別子）を含み得る。その一方で、修復ＦＥＣペイロードＩＤは、ソースブロック番号（ＳＢＮ）（パケット内の修復シンボルが関係するソースブロックのための１６ビットの整数識別子）、符号化シンボルＩＤ（ＥＳＩ）（パケット内の修復シンボルのための１６ビットの整数識別子）、およびソースブロック長（ＳＢＬ）（１６ビット：ソースブロック内のソースシンボルの数を表す）を含み得る。ソースブロック番号、符号化シンボルＩＤおよびソースブロック長の解釈は、以下に定義される。
【００８２】
ＦＥＣオブジェクト送信情報は、ＦＥＣ符号化ＩＤ、最大ソースブロック長（シンボル単位の）、およびシンボルサイズ（バイト単位の）を含み得る。最大ソースブロック長およびシンボルサイズは、最大ソースブロック長（シンボル単位で、ソースブロックの最大長を表す１６ビット）、およびシンボルサイズ（Ｔ）の４オクテットフィールド（バイト単位で、符号化シンボルのサイズを表す１６ビット）を含み得る。
【００８３】
下記のセクションは、システマティックＭＳＣＲ前方誤り訂正符号、ならびにＭＢＭＳへのその適用およびその他の使用を指定する。ＭＳＣＲはファウンテンコードである。すなわち、必要とされる数のソースシンボルは、ブロックのソースシンボルから実行中に符号器によって生成されることができる。復号器は、ソースシンボルの数よりもわずかに多い符号化シンボルの任意のセットからソースブロックを回復することができる。この文書に記載されているコードは、システマティックコードである。すなわち、いくつかの修復シンボルならびにオリジナルソースシンボルは、変更を加えられずに送信機から受信機へ送信される。
【００８４】
＜Ｂ．１ 定義、記号および略号＞
＜Ｂ．１．１ 定義＞
この説明のために、以下に用語および定義を示す。  
ソースブロック：ＭＳＣＲ符号化の目的で一緒に考慮されるＫ個のソースシンボルのブロック。  
ソースシンボル：符号化プロセス中に使用されるデータの最小単位。ソースブロック内の全てのソースシンボルは同一のサイズである。  
符号化シンボル：データパケットに含まれるシンボル。符号化シンボルは、ソースシンボルおよび修復シンボルを含む。ソースブロックから生成される修復シンボルは、ソースブロックのソースシンボルと同様に同一のサイズを有する。  
システマティックコード：ソースブロックのために送信される符号化シンボルの一部としてソースシンボルが含まれるコード。  
修復シンボル：ソースブロックのために送信される、ソースシンボルでない符号化シンボル。修復シンボルはソースシンボルに基づいて生成される。  
中間シンボル：逆符号化プロセスを使用してソースシンボルから生成されるシンボル。その後、修復シンボルは中間シンボルから直接生成される。符号化シンボルは中間シンボルを含まない。すなわち、中間シンボルはデータパケットに含まれない。  
シンボル：データの単位。シンボルの、バイト単位のサイズはシンボルサイズとして知られている。  
符号化シンボルグループ：一緒に送られる、すなわち、ソースシンボルとのその関係が単一の符号化シンボルＩＤに由来することのできる同じパケット内における符号化シンボルのグループ。  
符号化シンボルＩＤ：符号化シンボルグループのシンボルとソースシンボルとの関係を定義する情報。  
符号化パケット：符号化シンボルを含むデータパケット。  
サブブロック：ソースブロックは時としてサブブロックに分解され、その各々は作業メモリ内において復号化されるように十分に小さい。Ｋ個のソースシンボルを含むソースブロックに関して、各々のサブブロックはＫ個のサブシンボルを含み、ソースブロックの各シンボルは各サブブロックからの１個のサブシンボルから構成される。  
サブシンボル：シンボルの一部。各ソースシンボルは、ソースブロック内に存在するサブブロックと同じ数のサブシンボルから構成される。  
転送元パケット：ソースシンボルを含むデータパケット。  
修復パケット：修復シンボルを含むデータパケット。
【００８５】
＜Ｂ．１．２ 記号＞
ｉ、ｊ、ｘ、ｈ、ａ、ｂ、ｄ、ｖ、ｍ：正の整数を表す
ｃｅｉｌ（ｘ）：ｘ以上である最小の正の整数を表す
ｃｈｏｏｓｅ（ｉ，ｊ）：ｊ個のオブジェクトが繰り返しなしにｉ個のオブジェクトの中から選択されることができるやり方の数を表す
ｆｌｏｏｒ（ｘ）：ｘ以下である最大の正の整数を表す
ｉ％ｊ：ｉモジュロｊを表す
Ｘ＾Ｙ：等しい長さのビットストリングＸおよびＹに関する、ＸとＹとのビット毎の排他論理和を表す
Ａ：シンボルアライメントパラメータを表す。シンボルおよびサブシンボルのサイズはＡの倍数に制限される
ＡＴ：Ａの転置行列を表す
Ａ−１：Ａの逆行列を表す
Ｋ：単一のソースブロック内のシンボルの数を表す
ＫＭＡＸ：単一のソースブロック内に存在することができるソースシンボルの最大数を表す。８１９２に設定される
Ｌ：単一のソースブロックに関するプレコーディング(pre-coding)シンボルの数を表す
Ｓ：単一のソースブロックに関するＬＤＰＣシンボルの数を表す
Ｈ：単一のソースブロックに関するハーフシンボルの数を表す
Ｃ：中間シンボルの配列、Ｃ［０］，Ｃ［１］，Ｃ［２］，．．．，Ｃ［Ｌ−１］を表す
Ｃ’：ソースシンボルの配列、Ｃ’［０］，Ｃ’［１］，Ｃ’［２］，．．．，Ｃ’［Ｋ−１］を表す
Ｘ：負でない整数値を表す
Ｖ０、Ｖ１：４バイトの整数の２つの配列、Ｖ０［０］，Ｖ０［１］，．．．，Ｖ０［２５５］およびＶ１［０］，Ｖ１［１］，．．．，Ｖ１［２５５］を表す
Ｒａｎｄ［Ｘ、ｉ、ｍ］：擬似乱数生成器
Ｄｅｇ［ｖ］：度数生成器
ＬＴＥｎｃ［Ｋ、Ｃ、（ｄ、ａ、ｂ）］：ＬＴ符号化シンボル生成器
Ｔｒｉｐ［Ｋ、Ｘ］：トリプル生成器関数
Ｇ：符号化シンボルグループ内のシンボルの数
Ｎ：ソースブロック内のサブブロックの数
Ｔ：バイト単位のシンボルサイズ。ソースブロックがサブブロックに分割される場合、Ｔ＝Ｔ’・Ｎである
Ｔ’：バイト単位のサブシンボルサイズ。ソースブロックがサブブロックに分割されない場合、Ｔ’は関連しない
Ｆ：ファイルダウンロードのための、バイト単位のファイルサイズ
Ｉ：バイト単位のサブブロックサイズ
Ｐ：ファイルダウンロードに関しては、そのファイルダウンロードトランスポートパラメータの推奨導出に使用される、バイト単位の各パケットのペイロードサイズ。ストリーミングに関しては、ストリーミングトランスポートパラメータの推奨導出に使用される、バイト単位の各修復パケットのペイロードサイズ
Ｑ：Ｑ＝６５５２１、すなわち、Ｑは２１６未満の最大の素数である
Ｚ：ファイルダウンロードに関するソースブロックの数
Ｊ（Ｋ）：Ｋに関連するシステマティックインデックス
Ｇ：任意の生成器行列を表す
ＩＳ：ＳｘＳの恒等行列を表す
０ＳｘＨ：ＳｘＨの零行列を表す。
【００８６】
＜Ｂ．１．３ 略号＞
本明細書の説明のために、以下の略号を用いる。  
ＥＳＩ（Encoding Symbol ID）：符号化シンボルＩＤ
ＬＤＰＣ（Low Density Parity Check）：低密度パリティチェック
ＬＴ（Luby Transform）：ルビー変換
ＳＢＮ（Source Block Number）：ソースブロック番号
ＳＢＬ（Source Block Length）：シンボル単位のソースブロック長。
【００８７】
＜Ｂ．２ 概要＞
ＭＳＣＲ前方誤り訂正符号は、ＭＢＭＳファイル配信およびＭＢＭＳストリーミングアプリケーションの双方に適用されることができる。これらのアプリケーションの各々に特有であるＭＳＣＲ符号の態様は、本明細書のセクションＢ．３およびＢ．４において説明される。
【００８８】
システマティックＭＳＣＲ符号のコンポーネントは、セクションＢ．５に記載されている基本的な符号器である。第１に、中間シンボルについての知識がソースシンボルを復元するのに十分であるように、オリジナルソースシンボルから１つのセットの中間シンボルの値をどのようにして導き出すかが記述される。第２に、符号器は、各々が多数の中間シンボルの排他的論理和である修復シンボルを作成する。符号化シンボルは、ソースおよび修復シンボルの組合せである。修復シンボルは、中間シンボルおよびしたがってソースシンボルが符号化シンボルの任意の十分に大きいセットから回復可能なやり方で作成される。
【００８９】
この文書は、システマティックＭＳＣＲ符号 符号器を定義する。多くの考えられる復号化アルゴリズムが利用可能である。効率的な復号化アルゴリズムは、セクションＢ．６において提供される。
【００９０】
中間シンボルおよび修復シンボルの構築は、セクションＢ．５に記載される擬似乱数生成器に基づく。この生成器は、送信機および受信機の双方で利用できる５１２の乱数の固定セットに基づく。数の実施形態のセットは、付録Ｂ．１において提供される。
【００９１】
最後に、ソースシンボルからの中間シンボルの構築は、”システマティックインデックス”により支配される。システマティックインデックスの値の一セット例は、４個のソースシンボルからＫＭＡＸ＝８１９２個のソースシンボルまでのソースブロックサイズに関する付録Ａに示される。
【００９２】
＜Ｂ．３ ファイルダウンロード＞
＜Ｂ．３．１ ソースブロック構築＞
＜Ｂ．３．１．１ 全般＞
ＭＳＣＲ符号器をソースファイルに適用するために、ファイルはＺ（≧１）個のブロック（ソースブロックとして知られる）に分解されうる。ＭＳＣＲ符号器は、各々のソースブロックに独立的に適用される。各々のソースブロックは固有の整数ソースブロック番号（ＳＢＮ）により識別され、ここで第１のソースブロックはＳＢＮ０を有し、第２のものはｓＢＮ１を有し、他も同様である。各々のソースブロックは、各々のサイズがＴバイトのいくつかの（Ｋ個の）ソースシンボルに分割される。各々のソースシンボルは固有の整数符号化シンボル識別子（ＥＳＩ）により識別され、ここでソースブロックの第１のソースシンボルはＥＳＩ０を有し、第２のものはＥＳＩ１を有し、他も同様である。
【００９３】
Ｋ個のソースシンボルを有する各々のソースブロックはＮ（≧１）個のサブブロックに分割され、それらは作業メモリにおいて復号化されるために十分小さい。各サブブロックは、サイズＴ’のＫ個のサブシンボルに分割される。
【００９４】
Ｋの値はファイルの各々のソースブロックの値に関して必ずしも同じとは限らず、Ｔ’の値はソースブロックの各々のサブブロックに関して必ずしも同じでなくてもよいことに注意すべきである。しかしながら、シンボルサイズＴは、ファイルの全てのソースブロックに関して同一であり、シンボルの数Ｋはソースブロックのあらゆるサブブロックに関して同一である。ファイルの、ソースブロックおよびサブブロックへの正確な分割は、後述のＢ．３．１．２に記載されている。
【００９５】
図１７は二次元配列に配置されたソースブロックの例を示し、ここで、各々のエントリはＴ’バイトのサブシンボルであり、各々の行はサブブロックであり、各々の列はソースシンボルである。この例では、Ｔ’の値は、あらゆるサブブロックに関して同一である。各々のサブシンボルのエントリに示される数は、ソースブロック内のオリジナルの順番を示している。たとえば、Ｋの番号をつけられたサブシンボルは、ソースブロックのＴ’・ＫからＴ’・（Ｋ＋１）−１個までのバイトを含む。そして、ソースシンボルｉは、各々のサブブロックからの第ｉのサブシンボルの連結であり、それはｉ、Ｋ＋ｉ、２・Ｋ＋ｉ、．．．、（Ｎ−１）・Ｋ＋ｉの番号をつけられたソースブロックのサブシンボルに対応する。
【００９６】
＜Ｂ．３．１．２ ソースブロックとサブブロック分割＞
ソースブロックおよびサブブロックの構築は、Ｆ、Ａ、Ｔ、Ｚ、Ｎの５個の入力パラメータ  および関数分割（Ｐａｒｔｉｔｉｏｎ）［ ］に基づいて決定される。５個の入力パラメータは次のように定義される。  
Ｆ：バイト単位のファイルのサイズ
Ａ：バイト単位のシンボルアライメントパラメータ
Ｔ：Ａの倍数でなければならないバイト単位のシンボルサイズ
Ｚ：ソースブロックの数
Ｎ：各ソースブロック内のサブブロックの数
【００９７】
これらのパラメータは、ｃｅｉｌ（ｃｅｉｌ（Ｆ／Ｔ）／Ｚ）≦ＫＭＡＸとなるように設定される。これらのパラメータの導出のための推奨は、セクションＢ．３．４において提供される。
【００９８】
関数分割（Ｐａｒｔｉｔｉｏｎ）［ ］は入力として一対の整数（Ｉ、Ｊ）をとり、出力として４つの整数（ＩＬ、ＩＳ、ＪＬ、ＪＳ）を導出する。具体的には、分割（Ｐａｒｔｉｔｉｏｎ）［Ｉ、Ｊ］の値は、４つの整数のシーケンス（ＩＬ、ＩＳ、ＪＬ、ＪＳ）であり、ここでＩＬ、＝ｃｅｉｌ（Ｉ／Ｊ）、ＩＳ＝Ｆｌｏｏｒ（Ｉ／Ｊ）、ＪＬ＝Ｉ−ＩＳ・Ｊ、ＪＳ＝Ｊ−ＪＬである。分割（Ｐａｒｔｉｔｉｏｎ）［ ］は、サイズＩのブロックをＪ個のほぼ等しいサイズのブロックに分割するパラメータを導出する。具体的には、長さＩＬのＪＬ個のブロックと長さＩＳのＪＳ個のブロックかある。
【００９９】
ソースファイルは、以下の通りにソースブロックおよびサブブロックに分割され得る。
【０１００】
Ｋｔ＝ｃｅｉｌ（Ｆ／Ｔ）のとき
（ＫＬ、ＫＳ、ＺＬ、ＺＳ）＝分割（Ｐａｒｔｉｔｉｏｎ）［Ｋｔ，Ｚ］
（ＴＬ、ＴＳ、ＮＬ、ＮＳ）＝分割（Ｐａｒｔｉｔｉｏｎ）［Ｔ／Ａ，Ｎ］とする。
【０１０１】
その後、ファイルは、Ｚ＝ＺＬ＋ＺＳ個の隣接するソースブロックに分割され、最初のＺＬ個のソースブロックは各々ＫＬ・Ｔバイトを有し、残りのＺＳ個のソースブロックは各々ＫＳ・Ｔバイトを有する。
【０１０２】
Ｋｔ・Ｔ＞Ｆである場合、符号化のために、最後のシンボルはその最後においてＫｔ・Ｔ−Ｆゼロバイトを用いてパディングされ得る。
【０１０３】
次に、各々のソースブロックはＮ＝ＮＬ＋ＮＳ個の隣接するサブブロックに分割され、最初のＮＬ個のサブブロックは各々ＴＬ・ＡのサイズのＫ個の隣接するサブシンボルを含み、残りのＮＳ個のサブブロックは各々ＴＳ・ＡのサイズのＫ個の隣接するサブシンボルを含む。シンボルアライメントパラメータＡは、サブシンボルが常にＡバイトの倍数であることを保証する。
【０１０４】
最後に、ソースブロックの第ｍ番目のシンボルは、Ｎ個のサブブロックの各々から第ｍ番目のサブシンボルの連結を含む。
【０１０５】
＜Ｂ．３．２ 符号化パケット構築＞
＜Ｂ．３．２．１ 全般＞
各々の符号化パケットは、以下の情報を含む。  
ソースブロック番号（ＳＢＮ）
符号化シンボルＩＤ（ＥＳＩ）
（複数の）符号化シンボル
【０１０６】
各々のソースブロックは、他のものから独立に符号化される。ソースブロックはゼロから連続的に番号をつけられる。
【０１０７】
０からＫ−１の符号化シンボルＩＤ値は、ソースシンボルを識別する。Ｋからの符号化シンボルＩＤは前方へ修復シンボルを識別する。
【０１０８】
＜Ｂ．３．２．２ 符号化パケット構築＞
各符号化パケットは、完全にソースシンボル（転送元パケット）から成るか、あるいは完全に修復シンボル（修復パケット）から成ることが好ましい。パケットは、同じソースブロックからの任意の数のシンボルを含むことができる。パケット中の最後のシンボルがＦＥＣ符号化のために付加されたパディング(padding)バイトを含む場合、これらのバイトは、パケットに含まれる必要はない。その他の場合には、全(whole)シンボルだけが含まれ得る。
【０１０９】
各転送元パケットで伝送される符号化シンボルＩＤ、Ｘは、そのパケットで伝送される最初のソースシンボルの符号化シンボルＩＤである。そのパケット中の次のソースシンボルは、符号化シンボルＩＤ、Ｘ＋１からＸ＋Ｇ−１を逐次順序で有し、ここでＧはそのパケット内のシンボルの数である。
【０１１０】
同様に、修復パケットに配置された符号化シンボルＩＤ、Ｘは、その修復パケットの最初の修復シンボルの符号化シンボルＩＤであり、そのパケット中の次の修復シンボルは符号化シンボルＩＤ、Ｘ＋１からＸ＋Ｇ−１を逐次順序で有し、ここでＧはそのパケット内のシンボルの数である。
【０１１１】
受信機は、修復パケットの合計数を知る必要がないことに注意すべきである。ＥＳＩ Ｘを有する修復パケット内に配置された修復シンボルに関してＧ個の修復シンボルトリプル（ｄ［０］，ａ［０］，ｂ［０］），．．．，（ｄ［Ｇ−１］，ａ［Ｇ−１］，ｂ［Ｇ−１］）は、Ｂ．５．３．４において定義されるトリプル生成器を使用して次のように計算される。
【０１１２】
ｉ＝０，．．．，Ｇ−１のそれぞれに対して、
（ｄ［ｉ］，ａ［ｉ］，ｂ［ｉ］）＝Ｔｒｉｐ［Ｋ，Ｘ＋ｉ］
【０１１３】
ＥＳＩ Ｘを有する修復パケット中に配置されるＧ個の修復シンボルは、セクションＢ．５．３において説明されるように、中間シンボルＣおよびＬＴ符号器ＬＴｅｎｃ［Ｋ，Ｃ，（ｄ［ｉ］，ａ［ｉ］，ｂ［ｉ］）］を使用して修復シンボルトリプルに基づいて計算される。
【０１１４】
＜Ｂ．３．３ 転送＞
このセクションには、ファイル配信のためのＭＳＣＲ前方誤り訂正を利用する任意のトランスポート・プロトコルとＭＳＣＲ符号器／復号器との間での情報交換が記載される。
【０１１５】
ファイル配信のためにＭＳＣＲ符号器および復号器は、バイト単位のファイルサイズＦ、シンボルアライメントパラメータＡ、Ａの倍数である、バイト単位のシンボルサイズＴ（、ソースブロックの数Ｚ、各ソースブロックのサブブロックの数Ｎという、トランスポート・プロトコルからの情報を必要とする。ファイル配信のためにＭＳＣＲ符号器は、加えて、Ｆバイトの符号化されるファイルを必要とする。
【０１１６】
ＭＳＣＲ符号器は、各々のパケットに関して、ＳＢＮ、ＥＳＩおよび（複数の）符号化シンボルを含む符号化パケット情報をトランスポート・プロトコルに提供する。トランスポート・プロトコルはＭＳＣＲ復号器にこの情報を透過的に通信する。
【０１１７】
＜Ｂ．３．４ 推奨パラメータ（情報提供的）＞
＜Ｂ．３．４．１ パラメータ導出アルゴリズム＞
このセクションは、４つのトランスポートパラメータＡ，Ｔ，ＺおよびＮの導出に関する推奨を示す。この推奨は以下の入力パラメータに基づく。  
Ｆ：バイト単位のファイルサイズ
Ｗ：バイト単位のサブブロックサイズに関する目標
Ｐ：Ａの倍数であると仮定される、バイト単位の最大のパケットペイロードサイズ
Ａ：バイト単位のシンボルアライメントファクタ
ＫＭＡＸ：ソースブロック当たりのソースシンボルの最大数
ＫＭＩＮ：ソースブロック当たりのシンボルの数に関する最小目標
ＧＭＡＸ：パケット当たりのシンボルの最大目標数。
【０１１８】
上記の入力に基づいて、トランスポートパラメータＴ、ＺおよびＮは、以下の通りに算出される。  
Ｇ＝ｍｉｎ｛ｃｅｉｌ（Ｐ・ＫＭＩＮ／Ｆ），Ｐ／Ａ，ＧＭＡＸ｝−パケット当たりのシンボルの近似の数
Ｔ＝ｆｌｏｏｒ（Ｐ／（Ａ・Ｇ））・Ａ
Ｋt ＝ｃｅｉｌ（Ｆ／Ｔ）−ファイル内のシンボルの合計数
Ｚ＝ｃｅｉｌ（Ｋｔ／ＫＭＡＸ）
Ｎ＝ｍｉｎ｛ｃｅｉｌ（ｃｅｉｌ（Ｋｔ／Ｚ）・Ｔ／Ｗ），Ｔ／Ａ｝
とする。
【０１１９】
上述のように導出されたＧおよびＮの値は、下限と考えるべきである。例えば２の累乗に最も近いもの等に、これらの値を増加することが有効となり得る。特に、上記のアルゴリズムはシンボルサイズＴが最大パケットサイズＰを除算することを保証せず、したがって正確にＰのサイズのパケットを使用することが可能でないことがあり得る。その代わりに、Ｐ／Ａを除算する値であるようにＧが選択される場合、シンボルサイズＴはＰの除数となり、サイズＰのパケットが使用されることができる。
【０１２０】
入力パラメータ、Ｗ、Ａ、ＫＭＩＮおよびＧＭＡＸの推奨された設定は、以下の通りである。  
Ｗ＝２５６ＫＢ Ａ＝４ ＫＭＩＮ＝１０２４ ＧＭＡＸ＝１０
【０１２１】
＜Ｂ．３．４．２ 例＞
上記のアルゴリズムは、図１８に示すように、結果としてトランスポートパラメータとなり、Ｐ＝５１２、ならびにＷ、Ａ、ＫＭＩＮおよびＧＭＡＸに関する推奨値をとる。
【０１２２】
＜Ｂ．４ ストリーミング＞
＜Ｂ．４．１ ソースブロック構築＞
この文書において定義したように、ソースブロックは、システマティックＭＳＣＲ前方誤り訂正符号を利用して、トランスポート・プロトコルによって構築される。ソースブロックの構築および修復シンボルの構築に使われるシンボルサイズＴは、トランスポート・プロトコルにより提供される。任意のソースブロック中のソースシンボルの数がせいぜいＫＭＡＸであるように、パラメータＴが設定されることができる。
【０１２３】
推奨されたパラメータは、セクションＢ．４．４に示される。
【０１２４】
＜Ｂ．４．２ 符号化パケット構築＞
Ｂ．４．３に説明するように、各々の修復パケットは、ＳＢＮ、ＥＳＩ、ＳＢＬおよび（複数の）修復シンボルを含む。修復パケット内に含まれる修復シンボルの数は、パケット長から計算される。修復パケット中に配置されるＥＳＩ値および修復シンボルを生成するために用いられる修復シンボルのトリプルは、セクションＢ．３．２．２にて説明したように計算される。
【０１２５】
＜Ｂ．４．３ トランスポート＞
このセクションは、ストリーミングのためにＭＳＣＲ前方誤り訂正を利用する、任意のトランスポート・プロトコルとＭＳＣＲ符号器／復号器との間の情報交換を記載する。ストリーミングのためにＭＳＣＲ符号器は、各々のソースブロックに関してトランスポート・プロトコルからの情報：バイト単位のシンボルサイズＴ、ソースブロック中のシンボルの数Ｋ、ソースブロック番号（ＳＢＮ）、符号化されるソースシンボル（Ｋ・Ｔバイト）を使用することができる。ＭＳＣＲ符号器は、各修復パケットに関してＳＢＮ、ＥＳＩ、ＳＢＬおよび（複数の）修復シンボルを含む符号化パケット情報を、トランスポート・プロトコルに提供する。トランスポート・プロトコルはＭＳＣＲ復号器にこの情報を透過的に通信することができる。
【０１２６】
＜Ｂ．４．４ 推奨パラメータ＞    ＜Ｂ．４．４．１ パラメータ導出アルゴリズム＞
このセクションは、をトランスポートパラメータＴの導出の推奨を提供する。この推奨は、以下の入力パラメータに基づく。  
Ｂ：バイト単位の最大ソースブロックサイズ
Ｐ：バイト単位の最大の修復パケットペイロードサイズ、それはＡの倍数である
Ａ：バイト単位のシンボルアライメントファクタ
ＫＭＡＸ：ソースブロック当たりのソースシンボルの最大数
ＫＭＩＮ：ソースブロック当たりのシンボルの数に関する最小目標
ＧＭＡＸ：修復パケット当たりのシンボルの最大目標数
【０１２７】
これらの入力に関する必要条件は、ｃｅｉｌ（Ｂ／Ｐ）≦ＫＭＡＸである。上記の入力に基づいて、トランスポートパラメータＴは、以下の通りに算出される。  
Ｇ＝ｍｉｎ｛ｃｅｉｌ（Ｐ・ＫＭＩＮ／Ｂ），Ｐ／Ａ、ＧＭＡＸ｝−パケット当たりのシンボルの近似の数
Ｔ＝ｆｌｏｏｒ（Ｐ／（Ａ・Ｇ））・Ａ
とする。
【０１２８】
上記で導出されるＴの値は、使用するＴの実効値へのガイド(guide)とみなされるべきである。そのＴをＰに除算することは有効である得、あるいはフルサイズ修復シンボルが失われた転送元パケットの終わりで（ソースブロックのソースシンボルの最大数ＫＭＡＸを超えない限り）部分的なソースシンボルを回復するために用いられるとき、浪費を最小にするようにＴの値をより小さく設定することが有効であり得る。さらに、Ｔの選択は転送元パケットサイズの分布に依存することができ、例えば、全ての転送元パケットが同一サイズである場合、Ｐ’がＴの倍数である修復パケットＰ’の実際のペイロードサイズが、各々の転送元パケットがソースブロックにおいて占めるバイトの数に等しい（あるいは可能な限り少ないバイトだけそれより大きい）ように、Ｔを選択することが有効である。
【０１２９】
入力パラメータ、Ａ、ＫＭＩＮおよびＧＭＡＸに関する推奨された設定は、以下の通りである。  
Ａ＝４   ＫＭＩＮ＝１０２４     ＧＭＡＸ＝１０
【０１３０】
＜Ｂ．４．４．２ 例＞
上記のアルゴリズムは、Ｐ＝５１２、並びにＧＭＡＸ、ＫＭＩＮおよびＡに関する推奨値を仮定すると、図１９に示されるトランスポートパラメータとなる。となる。
【０１３１】
＜Ｂ．５． システマティックＭＳＣＲ符号化器＞
＜Ｂ．５．１． 符号化の概要＞
システマティックＭＳＣＲ符号器は、Ｋ個のソースシンボルを含むソースブロックから修復シンボルを生成するために用いられる。
【０１３２】
シンボルは、符号化および復号プロセスの基本的なデータ単位である。各々のソースブロック（サブブロック）に関して、全てのシンボル（サブシンボル）は同一サイズである。符号化および復号化の両方のためのシンボル（サブシンボル）に関して実行されるアトミック(atomic)動作は、排他的論理和演算である。  
Ｃ’［０］，．．．，Ｃ’［Ｋ−１］を、Ｋ個のソースシンボルを示すものとする。  
Ｃ［０］，．．．，Ｃ［Ｌ−１］を、Ｌ個の中間シンボルを示すものとする。
【０１３３】
符号化の第１のステップは、Ｋ個のソースシンボルから中間シンボルの数（Ｌ＞Ｋ）を生成することである。このステップにおいて、Ｋ個のソーストリプル（ｄ［０］，ａ［０］，ｂ［０］），．．．，（ｄ［Ｋ−１］，ａ［Ｋ−１］，ｂ［Ｋ−１］）は、セクションＢ．５．４．４にて説明するように、Ｔｒｉｐ［ ］生成器を使用して生成される。Ｋ個のソーストリプルは、Ｋ個のソースシンボルと関連付けられ、その後逆符号化プロセスを使用してソースシンボルからＬ個の中間シンボルＣ［０］，．．．，Ｃ［Ｌ−１］を決定するために用いられる。このプロセスは、ＭＳＣＲ復号化プロセスにより実現されることができる。
【０１３４】
ある定った“プレコーディング関係”は、Ｌ個の中間シンボル内に保持されなければならない。セクションＢ．５．２では、これらの関係と、および中間シンボルがソースシンボルからどのようにして生成されるかが説明される。
【０１３５】
中間シンボルが生成されると、修復シンボルが作成され、一または複数の修復シンボルは、単一のデータパケット中に一つのグループとして配置される。各々の修復シンボルグループは、符号化シンボルＩＤ（ＥＳＩ）および符号化シンボルの数（Ｇ）と関連付けられる。ＥＳＩは、セクションＢ．５．４．４．で説明されるＴｒｉｐ［ ］生成器を再び使用して、各修復シンボルに関して３つの整数のトリプル（ｄ、ａ、ｂ）を生成するために用いられる。これは、セクションＢ．５．４において説明される生成器を使用して、セクションＢ．３およびＢ．４において説明したように実行される。その後、各々の（ｄ，ａ，ｂ）−トリプルは、セクションＢ．５．４．３．に記載されるＬＴＥｎｃ［Ｋ，Ｃ［０］，．．．，Ｃ［Ｌ−１］，（ｄ，ａ，ｂ）］生成器を使用して中間シンボルから対応する修復シンボルを生成するために使用される。
【０１３６】
＜Ｂ．５．２．第１の符号化ステップ：中間シンボル生成＞
＜Ｂ．５．２．１ 全般＞
第１の符号化ステップは、ソースシンボルＣ’［０］，．．．，Ｃ’［Ｋ−１］からＬ個の中間シンボルＣ［０］，．．．，Ｃ［Ｌ−１］を生成するためのプレコーディングステップである。中間シンボルは、下記の制約条件の２つのセットによって固有に定義される。  
１．中間シンボルは、ソースシンボルトリプルの一つのセットによってソースシンボルに関連付けられる。ソースシンボルトリプルの生成は、セクションＢ．５．４．４において説明されるＴｒｉｐ［ ］生成器を使用して、セクション５．２．２で定義される。  
２．プレコーディング関係の一つのセットは、それら自身を中間シンボル内に保持する。これらは、セクションＢ．５．２．３において定義される。
【０１３７】
Ｌ個の中間シンボルの生成は、セクション５．２．４において定義される。
【０１３８】
＜Ｂ．５．２．２． ソースシンボルトリプル＞
Ｋ個のソースシンボルのそれぞれは、０≦ｉ＜Ｋに関してトリプル（ｄ［ｉ］，ａ［ｉ］，ｂ［ｉ］）と関連付けられる。ソースシンボルトリプルは、下記のようにセクションＢ．５．４．４で定義されるトリプル生成器を使用して、決定される。  
０＜ｉ＜Ｋであるそれぞれのｉについて、
（ｄ［ｉ］，ａ［ｉ］，ｂ［ｉ］）＝Ｔｒｉｐ［Ｋ，ｉ］
【０１３９】
＜Ｂ．５．２．３プレコーディング関係＞
Ｌ個の中間シンボルの間のプレコーディング関係は、第１のＫ個の中間シンボルに関して最後のＬ−Ｋ個の中間シンボルを表すことにより定義される。
【０１４０】
最後のＬ−Ｋ個の中間シンボルＣ［Ｋ］，．．．，Ｃ［Ｌ−１］はＳ ＬＤＰＣシンボルを含む、そして、ＳおよびＨの値がそうであるＨハーフシンボルは後述するようにＫから決定される。そのため、Ｌ＝Ｋ＋Ｓ＋Ｈである。  
Ｘを、Ｘ・（Ｘ−１）＝２・Ｋとなるように最小の正の整数とし、
Ｓを、Ｓ＞＝ｃｅｉｌ（０．０１・Ｋ）＋Ｘとなるように最小の素数とし、
Ｈを、（Ｈ、ｃｅｉｌ（Ｈ／２））＞＝Ｋ＋Ｓを選択するように最小の整数とし、
Ｈ’＝ｃｅｉｌ（Ｈ／２）Ｌ＝Ｋ＋Ｓ＋Ｈとし、
Ｃ［０］、．．．、Ｃ［Ｋ−１］ を、最初のＫ個の中間シンボルを示すものとし、
Ｃ［Ｋ］、．．．、Ｃ［Ｋ＋Ｓ−１］を、 ゼロに初期化されたＳ個のＬＤＰＣシンボルを示すものとし、
Ｃ［Ｋ＋Ｓ］、．．．、Ｃ［Ｌ−１］を、ゼロに初期化されたＨ個のハーフシンボルを示すものとする。
【０１４１】
Ｓ個のＬＤＰＣシンボルは、以下のプロセスの最後でＣ［Ｋ］，．．．，Ｃ［Ｋ＋Ｓ−１］の値であるように定義される。
【０１４２】
Ｆｏｒ  ｉ＝０,．．．,Ｋ−１  ｄｏ
ａ＝１＋（ｆｌｏｏｒ（ｉ／Ｓ）％（Ｓ−１））
ｂ＝ｉ％Ｓ
Ｃ［Ｋ＋ｂ］＝Ｃ［Ｋ＋ｂ］＾Ｃ［ｉ］
ｂ＝（ｂ＋ａ）％Ｓ
Ｃ［Ｋ＋ｂ］＝Ｃ［Ｋ＋ｂ］＾Ｃ［ｉ］
ｂ＝（ｂ＋ａ）％Ｓ
Ｃ［Ｋ＋ｂ］＝Ｃ［Ｋ＋ｂ］＾Ｃ［ｉ］
【０１４３】
Ｈ ハ−フシンボルは以下のように定義される。  
全ての正の整数ｉについて、ｇ［ｉ］＝ｉ＾（ｆｌｏｏｒ（ｉ／２））とし、
注：ｇ［ｉ］はグレイシーケンスであり、それにおいて各々の要素は前のものと単一のビット位置において異なる。  
ｇ［ｊ，ｋ］は、要素がそれらの二進表示でちょうどｋ個のゼロでないビットを有するｇ［ｉ］のシーケンスのｊ番目の要素を示し、ｊ＝０，１，２，．．．である。
【０１４４】
それから、ハーフシンボルは、以下のプロセスの後、Ｃ［Ｋ＋Ｓ］，．．．，Ｃ［Ｌ−１］の値として定義される。  
Ｆｏｒ  ｈ＝０，．．．，Ｈ−１  ｄｏ
Ｆｏｒ  ｊ＝０，．．．，Ｋ＋Ｓ−１  ｄｏ
Ｉｆ  ｂｉｔ  ｈ  ｏｆ  ｇ［ｊ，Ｈ’］ｉｓ  ｅｑｕａｌ  ｔｏ  １  ｔｈｅｎ  Ｃ［ｈ＋Ｋ＋Ｓ］＝Ｃ［ｈ＋Ｋ＋Ｓ］＾Ｃ［ｊ］
【０１４５】
＜Ｂ．５．２．４ 中間シンボル＞
＜Ｂ．５．２．４．１ 定義＞
Ｋ個のソースシンボルＣ’［０］，Ｃ’［１］，．．．，Ｃ’［Ｋ−１］があるとすると、Ｌ個の中間シンボルＣ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］は以下の条件を満たすように固有に定義されたシンボル値である。  
１．Ｋ個のソースシンボルＣ’［０］，Ｃ’［１］，．．．，Ｃ’［Ｋ−１］は、０＜ｉ＜Ｋである全てのｉについて、Ｋ個の制約条件
Ｃ’［ｉ］≡ＬＴＥｎｃ［Ｋ，（Ｃ［０］，．．．，Ｃ［Ｌ−１］），（ｄ［ｉ］，ａ［ｉ］，ｂ［ｉ］）］ 
を満たす。  
２．Ｌ個の中間シンボルＣ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］は、Ｂ．５．２．３で定義されたプレコーディング関係を満たす。
【０１４６】
＜Ｂ．５．２．４．２ 中間シンボルの計算＞
このサブセクションは、Ｂ．５．２．４．１の制約条件を満たすＬ個の中間シンボルＣ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］の算出のための可能な方法を記載する。
【０１４７】
Ｋ個の入力シンボルからＮ個の出力シンボルを生成するコード生成器行列ＧはＧＦ（２）上のＮｘＫマトリックスであり、ここで各行は出力シンボルのうちの１つに対応し、各列は入力シンボルのうちの１つに対応し、およびここで、ｉｔｈの出力シンボルは、行ｉの中にゼロでないエントリを含む列を有するそれら入力シンボルの合計に等しい。
【０１４８】
したがって、Ｌ個の中間シンボルは、以下の通りに算出されることができる。  
Ｃを、Ｌ個の中間シンボル（Ｃ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］）の列ベクトルを示すものとする。  
Ｄを、Ｋ個のソースシンボルＣ’［０］，Ｃ’［１］，．．．，Ｃ’［Ｋ−１］が後続する、Ｓ＋Ｈ個のゼロシンボルを含む列ベクトルを示すのもとする。
【０１４９】
よって、上記の制約条件は、
Ａ・Ｃ＝Ｄ 
となるような、ＧＦ（２）上のＬｘＬマトリックスＡを定義する
マトリックスＡは、以下のように構成されることができる。  
ＧＬＤＰＣを、ＤＰＣシンボルのＳｘＫの生成行列とする。そのため、
ＧＬＤＰＣ・（Ｃ［０］，．．．，Ｃ［Ｋ−１］）Ｔ＝（Ｃ［Ｋ］，．．．，Ｃ［Ｋ＋Ｓ−１］）Ｔとし、
ＧＨａｌｆを、ハーフシンボルのＨ×（Ｋ＋Ｓ）の生成行列とする。そのため、
ＧＨａｌｆ・（Ｃ［０］，．．．，Ｃ［Ｓ＋Ｋ−１］）Ｔ＝（Ｃ［Ｋ＋Ｓ］，．．．，Ｃ［Ｋ＋Ｓ＋Ｈ−１］）Ｔとし、
ＩＳを、ＳｘＳの恒等行列とし、
ＩＨを、ＨｘＨの恒等行列とし、
０ＳｘＨを、ＳｘＨの零行列とし、
ＧＬＴを、ＬＴ符号器により生成される符号化シンボルのＫ×Ｌの生成行列とし、
そのため、
ＧＬＴ・（Ｃ［０］，．．．，Ｃ［Ｌ−１］）Ｔ＝（Ｃ’［０］，Ｃ’［１］，．．．，  Ｃ’［Ｋ−１］）Ｔとする。  
すなわち、ＬＴＥｎｃ［Ｋ，（Ｃ［０］，．．．，Ｃ［Ｌ−１］），（ｄ［ｉ］，ａ［ｉ］，ｂ［ｉ］）］を生成するために排他的論理和を行われるシンボル中にＣ［ｉ］が含まれる場合にのみ、ＧＬＴｉ，ｊ＝１ とする。  
したがって、
Ａの最初のＳ個の行は、ＧＬＤＰＣ｜ＩＳ｜ＺＳ×Ｈに等しい。  
Ａの次のＨ個の行は、ＧＨａｌｆ｜ＩＨに等しい。  
Ａの残りのＫ個の行は、ＧＬＴに等しい。
【０１５０】
マトリックスＡは、図２０に示される。中間シンボルは下記のように算出されることができる。  
Ｃ＝Ａ−１・Ｄ
【０１５１】
任意のＫに関して行列Ａは最大ランクを有し、したがって逆転可能であるように、ソーストリプルは生成される。この算出は、Ｌ個の中間シンボルＣ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］を作成するためにＭＳＣＲ復号プロセスをＫ個のソースシンボルＣ’［０］，Ｃ’［１］，．．．，Ｃ’［Ｋ−１］に適用することにより実現されることができる。
【０１５２】
ソースシンボルから中間シンボルを効率的に生成するために、セクションＢ．６に記載されているような効率的な復号器インプリメンテーションを用いることが推奨される。ソースシンボルトリプルは、そのアルゴリズムを使用してソースシンボルの効率的な復号化を容易にするように設計される。
【０１５３】
＜Ｂ．５．３．第２の符号化ステップ：ＬＴ符号化＞
第２の符号化ステップにおいて、ＥＳＩ Ｘを有する修復シンボルは、セクションＢ．３．２．２およびＢ．４．２に従って生成されたトリプル（ｄ，ａ，ｂ）＝Ｔｒｉｐ［Ｋ，Ｘ］を使用して、Ｌ個の中間シンボルＣ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］に、セクションＢ．５．４において定義される生成器ＬＴＥｎｃ［Ｋ，（Ｃ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］），（ｄ，ａ，ｂ）］を適用することによって生成される。
【０１５４】
＜Ｂ．５．４． 生成器＞
＜Ｂ．５．４．１． 乱数生成器＞
乱数生成器Ｒａｎｄ［Ｘ，ｉ，ｍ］は以下の通りに定義され、ここで、Ｘは負でない整数であり、ｉは負でない整数であり、ｍは正の整数であり、生成された値は０とｍ−１との間の整数である。Ｖ０およびＶ１を、２５６個のエントリそれぞれの配列であるとし、ここで、各々のエントリは４バイトの符号なしの整数である。これらの配列は、セクションＢ．７において提供される。したがって、
Ｒａｎｄ［Ｘ，ｉ，ｍ］＝（Ｖ０［（Ｘ＋ｉ）％２５６］＾Ｖ１［（ｆｌｏｏｒ（Ｘ／２５６）＋ｉ）％２５６］）％ｍ
【０１５５】
＜Ｂ．５．４．２． 度数生成器＞
度数生成器Ｄｅｇ［ｖ］は以下の通りに定義され、ここでｖは少なくとも０であって２20＝１０４８５７６より小さい整数である。
【０１５６】
図２１において、 ｆ［ｊ−１］≦ｖ＜ｆ［ｊ］となるインデックスｊを探す
Ｄｅｇ［ｖ］＝ｄ［ｊ］
【０１５７】
＜Ｂ．５．４．３． ＬＴ符号化シンボル生成器＞
符号化シンボル生成器ＬＴＥｎｃ［Ｋ，（Ｃ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］），（ｄ，ａ，ｂ）］は、以下の入力をとる。  
Ｋは、ソースブロック（サブブロック）に関するソースシンボル（またはサブシンボル）の数である。Ｌを、セクションＢ．５．２にて説明したようにＫから得られるものとし、Ｌ’を、Ｌ以上の最小の素数とする。  
（Ｃ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］）は、セクションＢ．５．２にて説明したように生成されたＬ個の中間シンボル（サブシンボル）の配列である。  
（ｄ、ａ、ｂ）はセクションＢ．５．３．４で定義されたトリプル生成器を使用して決定されたソーストリプルであり、それによってｄは符号化シンボル度数を示す整数であり、ａは１とＬ’−１を含むそれらの間の整数であり、ｂは０とＬ’−１を含むそれらの間の整数である。
【０１５８】
以下のアルゴリズムにより、符号化シンボル生成器は単一の符号化シンボルを出力として作成する。  
Ｗｈｉｌｅ（ｂ≧Ｌ）ｄｏ  ｂ＝（ｂ＋ａ）％Ｌ’
ＬＴＥｎｃ［Ｋ，（Ｃ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］），（ｄ，ａ，ｂ）］＝Ｃ［ｂ］
Ｆｏｒ  ｊ＝１，．．．，ｍｉｎ（ｄ−１，Ｌ−１）ｄｏ
ｂ＝（ｂ＋ａ）％Ｌ’
Ｗｈｉｌｅ（ｂ≧Ｌ）ｄｏ  ｂ＝（ｂ＋ａ）％Ｌ’  ＬＴＥｎｃ［Ｋ，（Ｃ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］），（ｄ，ａ，ｂ）］＝ＬＴＥｎｃ［Ｋ，（Ｃ［０］，Ｃ［１］，．．．，Ｃ［Ｌ−１］），（ｄ，ａ，ｂ）］＾Ｃ［ｂ］
【０１５９】
＜Ｂ．５．４．４ トリプル生成器＞
トリプル生成器Ｔｒｉｐ［Ｋ，Ｘ］は次の入力をとる。  
Ｋ：ソースシンボルの数
Ｘ：符号化シンボルＩＤ
Ｌを、セクションＢ．５．２で説明したようにＫから決定されるもの
Ｌ’を、Ｌ以上である最小の素数
Ｑ＝６５５２１、２１６未満の最大の素数
Ｊ（Ｋ）を、付録Ａにおいて定義される、Ｋと関係するシステマティックデックスとする。
【０１６０】
トリプル生成器の出力は、以下のように決定されるトリプル（ｄ、ａ、ｂ）である。  
１． Ａ＝（５３５９１＋Ｊ（Ｋ）・９９７）％Ｑ
２． Ｂ＝１０２６７・（Ｊ（Ｋ）＋１）％Ｑ
３． Ｙ＝（Ｂ＋Ｘ・Ａ）％Ｑ
４． ｖ＝Ｒａｎｄ［Ｙ，０，２２０］
５． ｄ＝Ｄｅｇ［ｖ］
６． ａ＝１＋Ｒａｎｄ［Ｙ，１，Ｌ’−１］
７． ｂ＝Ｒａｎｄ［Ｙ，２，Ｌ’］
【０１６１】
＜Ｂ．６ ＦＥＣ復号器インプリメンテーション＞
＜Ｂ．６．１ 全般＞
このセクションは、本願明細書に記載されているＭＳＣＲ符号のための効率的な復号化アルゴリズムを記載する。受信された各符号化シンボルは、中間シンボル間の方程式の値とみなすことができることに注意すべきである。これらの連立方程式と、中間シンボル間の周知のプレコーディング関係とから、連立方程式を解くための任意のアルゴリズムは中間シンボルおよびそれ故ソースシンボルをうまく復号化できる。しかしながら、選択されるアルゴリズムは、復号化の計算効率に大きな影響を及ぼしている。
【０１６２】
＜Ｂ．６．２ ソースブロックの復号化＞
＜Ｂ．６．２．１ 全般＞
復号器は、ソースブロック中のシンボルの数Ｋと、シンボルサイズＴを含む、それが復号化するソースブロックの構造を知っていると仮定される。
【０１６３】
セクションＢ．５に記載されたアルゴリズムから、ＭＳＣＲ復号器はプレコーディングシンボルの合計数Ｌ＝Ｋ＋Ｓ＋Ｈを算出し、それらが復号化されるソースブロックからどのように生成されたかを決定することができる。この説明において、復号化されるソースブロックに関して受信された符号化シンボルが復号器に渡されると仮定される。さらに、この種の各々の符号化シンボルに関しては、その排他論理和が符号化シンボルに等しい中間シンボルのセットおよび数は復号器に渡されると仮定される。ソースシンボルの場合、セクションＢ．５．２．２に記載されているソースシンボルトリプルは、各々のソースシンボルを与えるために計算する(sum)中間シンボルの数およびセットを示す。
【０１６４】
Ｎ≧Ｋを、ソースブロックに関して受信された符号化シンボルの数とし、Ｍ＝Ｓ＋Ｈ＋Ｎとする。以下のＬ×ＭのビットマトリックスＡは、復号化されるソースブロックのために復号器に渡される情報から得られることができる。ＣをＬ個の中間シンボルの列ベクトルとし、Ｄを受信機に知られた複数の値を有するＭ個のシンボルの列ベクトルとし、ここで、Ｍ個のシンボルの最初のＳ＋ＨがＬＤＰＣおよびＨａｌｆシンボルに対応する０値を有するシンボル（これらはＬＤＰＣおよびＨａｌｆシンボルの検査シンボルであり、ＬＤＰＣおよびＨａｌｆシンボル自身ではない）であり、Ｍ個のシンボルのうちの残りのＮ個は、ソースブロックのために受信された符号化シンボルである。それから、ＡはＡ・Ｃ＝Ｄを満たすビットマトリックスである。ここで、ＧＦ［２］より上のマトリックス乗算を示す。具体的には、インデックスｊに対応する中間シンボルが符号化においてインデックスｉに対応するＬＤＰＣ、Ｈａｌｆまたは符号化シンボルにＸＯＲされる場合、あるいはインデックスｉがＬＤＰＣまたはＨａｌｆシンボルに対応し、インデックスｊが同じＬＤＰＣまたはＨａｌｆシンボルに対応する場合、Ａ［ｉ，ｊ］＝１である。他の全てのｉおよびｊについて、Ａ［ｉ，ｊ］＝０である。
【０１６５】
ソースブロックの復号化は周知のＡおよびＤからＣを復号化することに等しい。Ｃは、ＧＦ［２］より上のＡのランクがＬである場合にのみ、復号化されることができることは明らかである。Ｃが復号化されると、失われたソースシンボルは、各失われたソースシンボルを得るためにＸＯＲされる中間シンボルの数およびセットを決定するためにソースシンボルトリプルを使用して得られることができる。
【０１６６】
復号化Ｃの第１段階は、復号化予定を形成することである。このステップにおいて、Ａは、ガウス消去（行演算と、行および列の並べ替えを使用する）を用いて、およびＭ−Ｌの行を放棄した後に、Ｌ×Ｌの恒等行列に変換される。復号化予定はガウス消去処理の期間中、行演算と行および列の並べ替えのシーケンスを含み、ＤではなくＡだけに依存する。ＤからのＣの復号化は復号化予定の形成と並行して行われることができ、または復号化は復号化予定に基づいてその後行われることができる。
【０１６７】
Ｃの復号化と復号化予定との間の対応は、以下の通りである。まず最初に、ｃ［０］＝０，ｃ［１］＝ １．．．，ｃ［Ｌ−１］＝Ｌ−１およびｄ［０］＝０，ｄ［１］＝１．．．，ｄ［Ｍ−１］＝Ｍ−１とする。
【０１６８】
・Ａの行ｉが復号化予定において行ｉ’にＸＯＲされるたびに、復号プロセスにおいて、シンボルＤ［ｄ［ｉ］］はシンボルＤ［ｄ［ｉ’］］にＸＯＲされる。
【０１６９】
・行ｉが復号化予定において行ｉ’ と交換されるたびに、復号プロセスにおいて、ｄ［ｉ］の値はｄ［ｉ’］の値と交換される。
【０１７０】
・列ｊが復号化予定において列ｊ’と交換されるたびに、復号プロセスにおいてｃ［ｊ］の値はｃ［ｊ’］の値と交換される。
【０１７１】
この対応から、ソースブロックの復号化におけるシンボルの排他的論理和の合計数は、ガウス消去における行演算（交換ではない）の数であることは明らかである。Ａは最後のＭ−Ｌの行を廃棄した後およびガウス消去の後のＬ×Ｌの恒等行列であるため、Ｌ個のシンボルＤ［ｄ［０］］，Ｄ［ｄ［１］］，．．．，Ｄ［ｄ［Ｌ−１］］はＬ個のシンボルＣ［ｃ［０］］，Ｃ［ｃ［１］］，．．．，Ｃ［ｃ［Ｌ−１］］の値であることは、成功した復号化の終わりに明らかとなる。
【０１７２】
復号化予定を形成するためにガウス消去が行われる順序は、その復号化が成功したか否かには関係がない。しかしながら、復号化の速度は、ガウス消去が実行される順序に大きく依存する。（さらにまた、Ａのまばらな表現を維持することは非常に重要である。但し、これはここでは説明されない）。このセクションの残りには、比較的効率的である、ガウス消去が行われ得る順序を説明する。
【０１７３】
＜Ｂ．６．２．２ 第１段階＞
ガウス消去の第１段階で、マトリックスＡは概念的に部分行列に分割される。第１段階部分行列のサイズは、０に初期化される負でない整数ｉおよびｕでパラメータ化される。Ａのサブマトリックスは、
（１）最初のｉ個の行および最初のｉ個の列の交差によって定義される部分行列Ｉ。これは、その段階の各々のステップの終りの恒等行列である。  
（２） 最初のｉ個の行および最初のｉ個以外のすべての列および最後のｕ個の列の交差により定義される部分行列。この部分行列のすべてのエントリは、ゼロである。  
（３）最初のｉ個の列および最初のｉ個以外のすべての行の交差により定義される部分行列。この部分行列のすべてのエントリは、ゼロである。  
（４） すべての行および最後のｕ個の列の交差により定義される部分行列Ｕ。  
（５）最初のｉ個以外のすべての列および最後のｕ個の列および最初のｉ個以外の行の交差によって形成された部分行列Ｖ。
【０１７４】
図２２はＡ．の部分行列を例示する。第１の段階のはじめにおいて、Ｖ＝Ａである。各ステップにおいて、Ａの行は選択される。Ｖの構造により定義される以下のグラフは、Ａのうちのいずれの行が選択されるかを決定することにおいて使用される。Ｖを横切る列は、そのグラフ中のノードであり、Ｖの中のちょうど２つの１を有する行は、２つの１の位置における２つの列（ノード）を接続するグラフの複数のエッジである。このグラフの構成要素は、そのグラフ中のノード／エッジの各対の間に経路が存在するようなノード（列）およびエッジ（行）の最大のセットである。構成要素のサイズは、その構成要素の中のノード（列）の数である。
【０１７５】
多くてＬ個のステップが第１段階に存在する。ｉ＋ｕ＝Ｌであるとき、すなわち、ＶおよびＶより上のすべてゼロの部分行列が消えており、ＡがＩ、Ｉより下のすべてゼロの部分行列、およびＵを含むとき、その第１段階は成功裏に終了する。Ｖが消える前のあるステップにおいて、そのステップにおいて選択すべきゼロでない行がＶの中に存在しない場合、その段階は復号化の失敗において不成功に終わる。各ステップにおいて、Ａの行は以下のように選択される。  
Ｖの全てのエントリがゼロである場合、行は選択されず、復号化は失敗する。
【０１７６】
Ａの少なくとも一つの行がＶの中にちょうどｒ個の１を有するように、ｒを最小の整数とする。  
ｒ≠２である場合、最小の当初の度数を備えるＶの中のちょうどｒ個の１を有する行を、すべてのこのような行の中から選択する。  
ｒ＝２である場合、Ｘにより定義されるグラフの中の最大のサイズの構成要素の一部であるＶの中にちょうど２つの１を備える任意の行を選択する。
【０１７７】
このステップで行が選択された後、Ｖと交差するＡの最初の行は、選ばれた行がＶと交差する最初の行であるように、その選ばれた行と交換される。並べ替えものの中のＡの列は、選ばれた行のｒ個の１のうちの１つがＶの最初の列に現れ、残りのｒ−１個の１がＶの最後の列に現れるように並べ替えられる。その後、選ばれた行は、Ｖの最初の列中に１を有する選ばれた行の下の、Ａの全ての他の行にＸＯＲされる。最後に、ｉは１だけ増やされ、ｕはｒ−１だけ増やされ、それはステップを完了する。
【０１７８】
＜Ｂ．６．２．３ 第２段階＞
部分行列Ｕは、最初のｉ個の行Ｕｕｐｐｅｒと、残りのＭ−ｉ個の行Ｕｌｏｗｅｒにさらに分割される。ガウス消去は、その順位がｕ（復号化の失敗）より少ないと決定するか、あるいは最初のｕ個の行が恒等行列（第２段階の成功）であるマトリックスにそれを変換するために、Ｕｌｏｗｅｒに関して第２段階において実行される。このｕ×ｕの恒等行列をＩuと呼ぶ。Ｕｌｏｗｅｒ−Ｉｕと交差するＡのＭ−Ｌ個の行は廃棄される。この段階の後、Ａは、Ｌ個の行およびＬ個の列を有する。
【０１７９】
＜Ｂ．６．２．４ 第３段階＞
第２段階の後、Ｌ×Ｌの恒等行列にＡを変換することを終了させるためにゼロにされる必要のあるＡの部分だけがＵｕｐｐｅｒである。部分行列Ｕｕｐｐｅｒの行の数ｉは、通常、Ｕｕｐｐｅｒの列の数ｕよりはるかに大きい。Ｕｕｐｐｅｒを効率的にゼロにするために、以下の前計算マトリックスＵ’は、第三段階のＩｕに基づいて計算され、その後Ｕ’はＵｕｐｐｅｒをゼロにするために第四段階において使用される。Ｉｕのｕの行は、各々８つの行のｃｅｉｌ（ｕ／８）グループに分割される。その後、８つの行の各群のために、８つの行の全て非ゼロの組合せが計算される。そして、結果として２8−１＝２５５の行となる（これは、グループ当りの行の２8−８−１＝２４７の排他的論理和を用いて行われることができる。何故なら、これはＩuの中に現れるものハミング重み1の組合せが再計算される必要がないからである）。このように、結果として生じる前計算マトリックスＵ’は、ｃｅｉｌ（ｕ／８）・２５５の行とｕの列とを有する。Ｕ’は形式的にマトリックスＡの一部ではないが、しかし、Ｕupperをゼロにするために第四段階において使用される。
【０１８０】
＜Ｂ．６．２．５ 第４段階＞
Ａの最初のｉの行の各々について、この行のＵupperの部分行列の８つの列の各グループに関して、Ｕupperの８つの列エントリのセットが全てゼロでない場合、その８つの列におけるパターンに一致する前計算マトリックスＵ’の行はその行にＸＯＲされ(exclusive-ORed)、したがって、Ｕ’の１つの行をその行にＸＯＲすることを犠牲にして、その行中の８つの列をゼロにする。
【０１８１】
この段階の後、ＡはＬ×Ｌの恒等行列であり、完全な復号化予定は成功裏に形成された。その後、既知の符号化シンボルをＸＯＲすることを備える対応する復号化は、復号化予定に基づいて中間シンボルを回復するために実行されることができる。
【０１８２】
全てのソースシンボルと関連するトリプルは、Ｂ．５．２．２に従って計算される。復号化において、受信されたソースシンボルのためのトリプルが使用される。失われたソースシンボルのトリプルは、いずれの中間シンボルがその失われたソースシンボルを回復するためにＸＯＲされる必要があるかを決定するために使用される。
【０１８３】
＜マルチステージコードのいくつかの特性＞
上述の多くの例において、入力シンボルおよび出力シンボルはビットの同じ数に関して９８を符号化し、各々の出力シンボルは１つのパケット中に配置される（パケットはそっくりそのまま受信されるか、あるいはそっくりそのまま失われるトランスポートの単位である）。いくつかの実施形態では、各々のパケットがいくつかの出力シンボルを含むように、通信システムは変更を加えられる。その後、出力シンボル値のサイズは、多くの要因に基づいて、入力シンボルへの、ストリームのブロックまたはファイルの初期の分割における入力シンボル値のサイズにより決定されるサイズに設定される。各々のパケットが受信されると、出力シンボルが束で到着することを除き、復号プロセスは基本的に不変のままである。
【０１８４】
入力シンボルおよび出力シンボルのサイズの設定は、通常、ストリームのブロックまたはファイルのサイズ、および出力シンボルが送信される通信システムにより要求される。たとえば、通信システムがデータのビットを規定されたサイズのパケットにグループ化し、あるいは他のやり方でビットをグループ化する場合、シンボルサイズの設計はパケットまたはグループ化サイズから開始する。そこから、デザイナーはいくつの出力シンボルが１つのパケットまたはグループ中で伝送されるかを決定し、それは出力シンボルのサイズを決定する。簡単化のために、デザイナーは、おそらく、入力シンボルサイズを出力シンボルサイズに等しく設定するが、しかし、入力データが異なる入力シンボルサイズをより都合の良いものにする場合、それが使用されることができる。
【０１８５】
上記の符号化プロセスは、ストリームのブロックまたはオリジナルのファイルに基づいて出力シンボルを含んでいるパケットのストリームを作成する。ストリームの各々の出力シンボルは他の全ての出力シンボルから独立して生成され、作成されることができる出力シンボルの数に関して上限も下限もない。キーは、各々の出力シンボルと関連付けられる。そのキー、およびストリームのブロックまたは入力ファイルのいくつかの内容は、出力シンボルの値を決定する。連続的に生成された出力シンボルは連続的なキーを有する必要はなく、いくつかの用途においては、キーのシーケンスをランダムに生成するか、またはそのシーケンスを疑似ランダム的に生成することが好ましい。
【０１８６】
マルチステージ復号化は、ストリームのブロックまたはオリジナルのファイルがＫ個の等しいサイズの入力シンボルに分割されることができ、各々の出力シンボル値が入力シンボル値と同じ長さである場合に、そのブロックまたはファイルが非常に高い確率により平均でＫ＋Ａ個の出力シンボルから回復されることができるという特性を有する。ここで、ＡはＫと比較して小さい。たとえば、上に導入される重み分布に関して、Ｋが１９，６８１より大きい場合、Ａの値がａ＊Ｋを上回る確率は多くても１０−１２であり、それはＫの任意の値に関して多くて１０−１０である。特定の出力シンボルがランダムまたは疑似ランダムな順序で生成され、移動中の特定の出力シンボルの損失はランダムとみなされるため、入力ファイルまたはブロックを回復するために必要とされる出力シンボルの実際の数値には若干の小さい分散が存在する。場合によっては、Ｋ＋Ａ個のパケットの特定の収集物がその入力ファイルまたはブロック全体を復号化するために十分でない場合、受信機が出力パケットの一つ以上の転送元からより多くのパケットを集めることができる場合に、その入力ファイルまたはブロックは依然として回復可能である。
【０１８７】
出力シンボルの数は１の解により制限されるだけなので、Ｋ＋Ａよりかなり多くの出力シンボルを生成できる。たとえば、Ｉが３２ビット数である場合、４０億の異なる出力シンボルが生成されることができるが、ストリームのファイルまたはブロックはＫ＝５０，０００の入力シンボルを含むことができた。ある用途では、それら４０億の出力シンボルのうちの少数のものだけが生成され、送信されることができ、それはストリームの入力ファイルまたはブロックが可能な出力シンボルの非常に小さい割合を用いて回復され得る確信に近いものであり、また、入力ファイルまたはブロックがＫよりわずかに多い出力シンボルを用いて回復され得る（入力シンボルサイズが出力シンボルサイズと同じであると仮定して）すばらしい確率である。
【０１８８】
ある用途では、入力シンボルの全てを復号化することができないこと、あるいは比較的低い確率により入力シンボルの全てを復号化することができることは許容可能であり得る。この種のアプリケーションにおいて、受信機は、Ｋ＋Ａ個の出力シンボルを受信した後に入力シンボルの全てを復号化する試みを止めることができる。または、受信機は、Ｋ＋Ａ個未満の出力シンボルを受信した後に出力シンボルを受信するのを止めることができる。ある用途では、受信機は、Ｋ個以下の出力シンボルしか受信することができない。このように、本発明のいくつかの実施形態においては、所望の精度は、全ての入力シンボルの完全な回復である必要はないことが理解される。
【０１８９】
更に、不完全な回復が許容可能な若干のアプリケーションでは、入力シンボルの全ては回復されることができないように、あるいは入力シンボルの完全な回復には入力シンボルの数より多くの出力シンボルの受信が要求されるように、データが符号化されることができる。このような符号化は、通常、より少ない計算費用を必要とし、したがって符号化の計算費用を減少させる許容可能なやり方であることができる。
【０１９０】
上記の図面のさまざまな機能ブロックはハードウェアおよび／またはソフトウェアの組合せによりインプリメントされることができ、特定のインプリメンテーションにおいて、それらブロックのうちのいくつかの機能性のうちのいくつかまたはすべてが組み合わせられることができることが理解される。同様に、本願明細書に記載されたさまざまな方法は、ハードウェアおよび／またはソフトウェアの組合せによりインプリメントされることができることが理解され得る。
【０１９１】
上記の説明は、例示的であり限定的でない。本発明の多くのバリエーションは、この開示を検討により当業者に明らかになる。したがって、本発明の技術的範囲は、上記の説明を参照として決定されるべきではなく、その代わりに、複数の等価物のそれらの完全な技術的範囲と共に、添付の特許請求の範囲を参照して決定されるべきである。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］  通信チャネルを介して転送元から転送先へ送信されるデータを符号化する方法であって、
第１の入力シンボルを使用して算出されるスタティックシンボルの第１のセットが、前記第１の入力シンボルと異なる第２の入力シンボルを使用して算出されるスタティックシンボルの第２のセットと弱い共通の帰属関係を有するように、決定性プロセスにおいて送信される入力シンボルの順序付けられたセットから複数の冗長シンボルを生成することと、
前記入力シンボルおよび冗長シンボルを含むシンボルの複合セットから複数の出力シンボルを生成することと、ここにおいて、可能な出力シンボルの数は前記シンボルの複合セットの中のシンボルの数よりはるかに大きい、ここにおいて、少なくとも１つの出力シンボルは、前記順序付けられた入力シンボルが任意の所定数（Ｎ）の出力シンボルから所望の精度まで再生成されることができるように、前記シンボルのされたセットの中の２以上すべて未満のシンボルから生成される、
を含む方法。
［Ｃ２］  さらに、通信チャネルを介して前記複数の出力シンボルを送信することを備える、Ｃ１に記載の方法。
［Ｃ３］  さらに、前記複数の出力シンボルを記憶媒体に記憶することを備える、Ｃ１に記載の方法。
［Ｃ４］  前記複数の冗長シンボルは、ＬＤＰＣ符号にしたがって生成される、Ｃ１に記載の方法。
［Ｃ５］  前記所望の精度は、前記入力シンボルの完全な回復である、Ｃ１に記載の方法。
［Ｃ６］  前記所望の精度は、高確率での前記入力シンボルの完全な回復である、Ｃ１に記載の方法。
［Ｃ７］  前記所望の精度はＧ個の入力シンボルの回復である、ここでＧは、前記入力シンボルの順序付けられたセットの中の入力シンボルの数より少ない、Ｃ１に記載の方法。
［Ｃ８］  多くともＧ個の入力シンボルは任意の数の出力シンボルから再生成されることができ、ここで、Ｇは前記入力シンボルの順序付けられたセットの中の入力シンボルの数より少ない、Ｃ１に記載の方法。
［Ｃ９］  複数の冗長シンボルを生成することは、各冗長シンボルについて、
分布にしたがってｔ個の異なる入力シンボルを決定すること、
前記ｔ個の異なる入力シンボルのＸＯＲとして各冗長シンボルを計算すること
を含む、Ｃ１に記載の方法。
［Ｃ１０］  通信チャネルを介して前記複数の出力シンボルを送信することを備える、ここにおいて、前記複数の出力シンボルを生成するステップは前記複数の出力シンボルを送信するステップと実質的に並行に行われる、Ｃ１に記載の方法。
［Ｃ１１］  前記複数の冗長シンボルは、スタティックシンボル、ハミングシンボル、およびパディングシンボルを備える、ここにおいて、前記シンボルの合計数は素数となるように選択される、Ｃ１に記載の方法。
【０１９２】
＜付録Ａ． システマティックインデックスＪ（Ｋ）の値＞
Ｋの値それぞれについて、ソースシンボルトリプルのセット（ｄ［０］，ａ［０］，ｂ［０］），．．．，（ｄ［Ｌ−１］，ａ［Ｌ−１］，ｂ［Ｌ−１］）が、Ｌ個の中間シンボルが固有に定義されるようなものである特性を有するように、システマティックインデックスＪ（Ｋ）は設計されている。すなわち、セクションＢ．５．２．４．２のマトリックスＡは最大の階数（ランク）を有し、逆転可能である。以下は、４と８１９２とを含むそれらの間のＫの値に関するシステマティックインデックスのリストである。値の順序は、読み取りの順序と同じである。すなわち、第１行の最初の数値から第１行の最後の数値、そして、第２行の最初の数値が続き、以下同様である。  
【表１】
0005485302.tif 000002
【表２】
0005485302.tif 000003
【表３】
0005485302.tif 000004
【表４】
0005485302.tif 000005
【表５】
0005485302.tif 000006
【表６】
0005485302.tif 000007
【表７】
0005485302.tif 000008
【表８】
0005485302.tif 000009
【表９】
0005485302.tif 000010
【０１９３】
＜付録Ｂ．１ テーブルＶ０の値＞
これらの値は、上述の明細書のセクションＢ．５．４．１で述べられたテーブルＶ０の値の例示的なセットを示している。各エントリは１０進数表記の３２ビット整数である。値の順序は、第１の列の最上段から第１の列の最下段、そして、第２の列の最上段が続き、以下同様である。  
【表１０】
0005485302.tif 000011
【０１９４】
＜付録Ｂ．２ テーブルＶ１の値＞
これらの値は、上述の明細書のセクションＢ．５．４．１で述べられたテーブルＶ１の値の例示的なセットを示している。各エントリは１０進数表記の３２ビット整数である。値の順序は、第１の列の最上段から第１の列の最下段、そして、第２の列の最上段が続き、以下同様である。  
【表１１】
0005485302.tif 000012
【図１】
0005485302.tif 000013
【図２】
0005485302.tif 000014
【図３】
0005485302.tif 000015
【図４】
0005485302.tif 000016
【図５】
0005485302.tif 000017
【図６】
0005485302.tif 000018
【図７】
0005485302.tif 000019
【図８】
0005485302.tif 000020
【図９】
0005485302.tif 000021
【図１０】
0005485302.tif 000022
【図１１】
0005485302.tif 000023
【図１２】
0005485302.tif 000024
【図１３】
0005485302.tif 000025
【図１４】
0005485302.tif 000026
【図１５】
0005485302.tif 000027
【図１６】
0005485302.tif 000028
【図１７】
0005485302.tif 000029
【図１８】
0005485302.tif 000030
【図１９】
0005485302.tif 000031
【図２０】
0005485302.tif 000032
【図２１】
0005485302.tif 000033
【図２２】
0005485302.tif 000034