(57)【要約】【課題】  通信データにおける誤りおよびギャップを分析し、１つより多くのソースから生じる通信データを効率的に利用するためのデータを符号化および復号化する通信システムを提供すること。【解決手段】  損失された伝送パケットはパリティ記号を使用して回復される。エンコーダは、キーアルファベットから選択されたキーＩを使用して、出力記号を生成する。キーＩを有する出力記号は、生成されるべきその出力記号の重みＷ（Ｉ）を決定し、Ｉの関数にしたがってその出力記号と関連付けられるＷ（Ｉ）個の出力記号を選択し、選択されたＷ（Ｉ）個の入力記号の所定の値関数Ｆ（Ｉ）から出力記号値Ｂ（Ｉ）を生成することによって生成され、イレーズは入力記号を１つのブロックにグループ化しないで回復し得る。エンコーダは、繰り返し呼び出されて複数の出力記号を生成し得る。【選択図】  図１
2005117633.tif 000002
【特許請求の範囲】
【請求項１】
デジタル回路または適切にプログラムされた計算素子として具現化された符号化器を用いて、順序付けられた複数の入力記号を含む入力ファイルを表す１セットの出力記号のうちの出力記号を生成する方法であって、該出力記号は、出力アルファベットから選択され、各入力記号は、入力アルファベットから選択され、該入力ファイルは、該１セットの出力記号を回復可能であり、
該方法は、
該符号化器の入力において、該入力ファイルを含む該入力記号の１以上を受信することと、
キーアルファベットからキーＩを選択することであって、該キーアルファベットにおける可能なキーの数が該入力ファイルにおける入力記号の数よりずっと大きい、ことと、
該符号化器を用いて、該キーＩの所定の関数にしたがって該出力記号に対するリストＡＬ（Ｉ）を計算することであって、ＡＬ（Ｉ）はＷ（Ｉ）個のメンバを有するリストであり、各メンバは該出力記号に関連付けられた入力記号であり、重みＷは、少なくとも２つの値の間を変化し、かつ、Ｉの少なくとも１つの値に対して１より大きい正の整数である、ことと、
ＡＬ（Ｉ）によって示される該関連付けられた入力記号の所定の関数から出力記号値Ｂ（Ｉ）を生成することと、
該符号化器から、該値Ｂ（Ｉ）を該生成された出力記号の該値として出力することと
を含む、方法。
【請求項２】
前記キーＩを選択するステップが、前記符号化器を用いて、ランダム関数または擬似ランダム関数にしたがって該キーＩを計算するステップを含む、請求項１に記載の方法。
【請求項３】
前記計算するステップが、Ｉのランダム関数または擬似ランダム関数にしたがってＷ（Ｉ）を計算するステップを含む、請求項１に記載の方法。
【請求項４】
前記計算するステップが、Ｉのランダム関数または擬似ランダム関数にしたがってＡＬ（Ｉ）を計算するステップを含む、請求項１に記載の方法。
【請求項５】
前記計算するステップが、
Ｉの所定の関数と確率分布とにしたがって重みＷ（Ｉ）を計算するステップであって、該確率分布が少なくとも２つの正の整数上にあり、そのうちの少なくとも１つが１より大きい、ステップと、
リストＡＬ（Ｉ）のリストエントリを計算するステップと、
Ｗ（Ｉ）個のリストエントリが計算されるまで、リストＡＬ（Ｉ）のリストエントリを計算するステップを繰り返すステップと
を含む、請求項１に記載の方法。
【請求項６】
前記Ｗ（Ｉ）を計算するステップが、Ｗが前記キーアルファベット上の所定の分布を近似するようにＷ（Ｉ）を決定するステップを含む、請求項５に記載の方法。
【請求項７】
前記所定の分布が一様分布である、請求項６に記載の方法。
【請求項８】
前記所定の分布がつり鐘曲線分布である、請求項６に記載の方法。
【請求項９】
前記所定の分布は、Ｗ＝１が１／Ｋの確率を有し、ここで、Ｋが前記入力ファイルにおける入力記号の数であり、そしてＷ＝ｉがｉ＝２，．．．，Ｋに対して１／ｉ（ｉ−１）の確率を有する、請求項６に記載の方法。
【請求項１０】
前記所定の分布が、チューナブルパラメータＲ１およびＲ２ならびに前記入力ファイル内の前記入力記号の数であるＫが与えられた場合において、重みＷ＝１がＲ１／Ｋに比例する確率を有し、重みＷ＝２から重みＷ＝Ｋ／Ｒ２−１の範囲の低い重みのクラスにおける重みが１／（Ｗ（Ｗ−１）（１−Ｗ・Ｒ２／Ｋ））に比例する確率を有し、Ｗ＝Ｋ／Ｒ２からＷ＝Ｋの範囲の高い重みのクラスにおける重みが選択された確率分布を有するようなものである、請求項６に記載の方法。
【請求項１１】
前記ＡＬ（Ｉ）によって示される関連付けられた入力記号の前記所定の関数が、該ＡＬ（Ｉ）によって示される入力記号についての排他的ＯＲ（ＸＯＲ）である、請求項１に記載の方法。
【請求項１２】
前記入力アルファベットおよび前記出力アルファベットが同じアルファベットである、請求項１に記載の方法。
【請求項１３】
前記入力アルファベットが２Mi個の記号を含み、各入力記号がＭｉビットを符号化し、前記出力アルファベットが２Mo個の記号を含み、各出力記号がＭｏビットを符号化する、請求項１に記載の方法。
【請求項１４】
各後続キーＩが前記先行キーよりも１大きい、請求項１に記載の方法。
【請求項１５】
前記ＡＬ（Ｉ）を計算するステップが、
前記入力ファイルにおける入力記号の数Ｋを少なくとも近似的に識別し、かつ重みＷ（Ｉ）を識別するステップと、
Ｋより大きいかまたはＫに等しい最小素数Ｐを決定するステップと、
ＰがＫより大きい場合、Ｐ−Ｋ個のパディング入力記号で該入力ファイルを少なくとも論理的にパディングするステップと、
１≦Ｘ＜Ｐである第１の整数Ｘ、および０≦Ｙ＜Ｐである第２の整数Ｙを生成するステップと、
１〜Ｗ（Ｉ）の各Ｊに対して、ＡＬ（Ｉ）における第Ｊ番目のエントリを（（Ｙ＋（Ｊ−１）・Ｘ）  ｍｏｄ  Ｐ）に設定するステップと
を含む、請求項１に記載の方法。
【請求項１６】
前記各Ｊに対してＡＬ（Ｉ）における第Ｊ番目のエントリを設定するステップが、
配列Ｖにおける第１のエントリＶ［Ｊ＝０］をＹに設定するステップと、
１〜Ｗ（Ｉ）−１の各Ｊに対して、該配列Ｖにおける第Ｊ番目のエントリＶ［Ｊ］を（（Ｖ［Ｊ−１］＋Ｘ）  ｍｏｄ  Ｐ）に設定するステップと、
該配列Ｖを該リストＡＬ（Ｉ）として使用するステップと
を含む、請求項１５に記載の方法。
【請求項１７】
デジタル回路または適切にプログラムされた計算素子として具現化された符号化器を含む送信器を用いて、該送信器に結合されたソースから目的地にパケット通信チャネルを介して該送信器と該目的地との間でデータを送信する方法であって、
該方法が、
ａ）該ソースから送信されるべき該データを電子信号として受信することと、
ｂ）該データを入力記号の順序付けられたセットとして配列することであって、各入力記号は、入力アルファベットから選択され、かつ、該データにおける位置を有する、ことと、
ｃ）複数の出力記号を生成することであって、各出力記号は出力アルファベットから選択され、該複数の出力記号の各出力記号が、該符号化器によって、
１）キーアルファベットからキーＩを選択することであって、該キーアルファベットにおける可能なキーの数が該データにおける入力記号の数よりもずっと大きい、ことと、
２）Ｉの関数として重みＷ（Ｉ）を決定することであって、重みＷは、該キーアルファベットに対して少なくとも２つの値の間で変化し、かつ、該キーアルファベットにおける少なくともいくつかのキーに対しては１より大きい正の整数である、ことと、
３）該符号化器を用いて、Ｉの関数にしたがってＷ（Ｉ）個の該入力記号を選択することにより、該出力記号に関連付けられたＷ（Ｉ）個の入力記号のリストＡＬ（Ｉ）を形成することと、
４）該符号化器を用いて、該関連付けられたＷ（Ｉ）個の入力記号の所定の値関数から該出力記号の値Ｂ（Ｉ）を計算することと
によって生成される、ことと、
ｄ）該複数の出力記号のうち少なくとも１つを、複数のパケットの各々にパケット化することと、
ｅ）該送信器を用いて、該複数のパケットを該パケット通信チャネルを介して送信することと、
ｆ）該複数のパケットのうちの少なくともいくつかを該パケット通信チャネルを介して該目的地で受信することと、
ｇ）該複数の受信されたパケットから該データを復号化することと、
ｈ）該復号化されたデータを該送信されたデータとして該目的地で出力することと
を含む方法。
【請求項１８】
前記データを復号化するステップが、
１）デジタル回路または適切にプログラムされた計算素子として具現化された復号化器を用いて、受信された各出力記号を処理することであって、
ａ）該出力記号がそれから生成された前記キーＩを決定することと、
ｂ）該出力記号に関連付けられた前記重みＷ（Ｉ）を決定することと、
ｃ）該出力記号に関連付けられた前記Ｗ（Ｉ）個の関連付けられた入力記号を決定することと
によって処理することと、
２）該復号化器を用いて、任意の入力記号を復号化するのに十分な情報が受信されたかどうかを決定することと、
３）該受信された情報から復号化可能であるとステップ２）において決定された入力記号を復号化することと
を含む、請求項１７に記載の方法。
【請求項１９】
前記キーＩを決定するステップが、前記パケット通信チャネルを介して受信されたパケットにおいて供給されたデータから該キーＩを少なくとも部分的に決定するステップを含む、請求項１８に記載の方法。
【請求項２０】
前記復号化するステップが、
受信された出力記号を重みにしたがってソートするステップと、
出力記号を重みにしたがって処理するステップであって、低い重みの記号が高い重みの記号より前に処理される、ステップと
を含む、請求項１８に記載の方法。
【請求項２１】
前記データを復号化するステップが、
１）前記復号化器を用いて、受信された各出力記号を処理するステップであって、
ａ）該出力記号に関連付けられた前記重みＷ（Ｉ）を決定することと、
ｂ）該出力記号に関連付けられた該Ｗ（Ｉ）個の関連付けられた入力記号を決定することと、
ｃ）該重みＷ（Ｉ）および該出力記号に対する該Ｗ（Ｉ）個の関連物の位置とともに、該出力記号の値Ｂ（Ｉ）を出力記号テーブルに格納することと
によって処理することと、
５）該復号化器でさらなる出力記号を受信し、ステップ１）およびそのサブステップにしたがってそれらを処理することと、
６）重み１を有し、かつ使い古された出力記号として表記されない各出力記号、ＯＳ１に対して、
ａ）ＯＳ１に対応する入力記号の位置について入力記号を計算するステップと、
ｂ）該出力記号テーブルにおける接続された出力記号を識別するステップであって、接続された出力記号はステップ３）ａ）で処理された該入力記号の関数である出力記号である、ステップと、
ｃ）ステップ３）ａ）で処理された該入力記号から独立となるように、該接続された出力記号を再計算するステップと、
ｃ）ステップ３）ｃ）で再計算された該出力記号の重みを１だけデクリメントするステップと、
ｅ）ＯＳ１を使い古された出力記号として表記するステップと
を実行することと、
７）該入力記号の順序付けられたセットが該復号化器によって回復されるまで、上記ステップ１）から３）を繰り返すことと
を含む、請求項１７に記載の方法。
【請求項２２】
前記表記するステップが、前記使い古した出力記号にゼロの重みを割り当てるステップである、請求項２１に記載の方法。
【請求項２３】
前記表記するステップが、前記出力記号テーブルから前記使い古した出力記号を除去するステップを含む、請求項２１に記載の方法。
【請求項２４】
前記パケット化するステップが、複数の出力記号を各パケットにパケット化するステップであり、該方法が、パケット内の出力記号の位置を該出力記号を生成するためのキーの一部として使用するステップをさらに含む、請求項１７に記載の方法。
【請求項２５】
デジタル回路または適切にプログラムされた計算素子として具現化された符号化器を用いて、順序付けられた複数の入力記号を含む入力ファイルを表す１セットの出力記号のうちの出力記号を生成する方法であって、該出力記号は、出力アルファベットから選択され、各入力記号は、入力アルファベットから選択され、該入力ファイルは、該１セットの出力記号を回復可能であり、
該方法は、
該符号化器の入力において、該入力ファイルを含む該入力記号の１以上を受信することと、
該符号化器を用いて、所与の出力記号に対してリストＡＬを決定することであって、ＡＬは、該出力記号に関連付けられるべきＷ個の関連付けられた入力記号を示し、Ｗは正の整数であり、少なくとも２つの出力記号は関連付けられたＷに対して異なる値を有しており、Ｗは少なくとも１つの出力記号に対して１より大きく、可能な出力記号の数は該入力ファイル中の入力記号の数よりずっと大きい、ことと、
該符号化器を用いて、ＡＬによって示される該Ｗ個の関連付けられた入力記号の所定の関数から出力記号値を生成することと
を含む、方法。
【請求項２６】
前記所与の出力記号に関連付けられたキーＩからＷを計算するステップと、
キーＩからＡＬを計算するステップと
をさらに含む、請求項２５に記載の方法。
【請求項２７】
前記計算するステップが確率分布を使用する、請求項２６に記載の方法。
【請求項２８】
デジタル回路または適切にプログラムされた計算素子として具現化された符号化器を含む送信器を用いて、順序付けられた複数の入力記号を含む入力ファイルの情報内容を送信する方法であって、該出力記号は、出力アルファベットから選択され、各入力記号は、入力アルファベットから選択され、該入力ファイルは、該１セットの出力記号を回復可能であり、
該方法は、
該符号化器の入力において、該入力ファイルを含む該入力記号の１以上を受信することと、
該符号化器を用いて、複数の出力記号を生成することであって、該複数の出力記号のうちの出力記号は、
ａ）該出力記号に関連付けられるべきＷ個の関連付けられた入力記号を示すリストＡＬを決定することであって、Ｗは正の整数であり、少なくとも２つの出力記号は関連付けられたＷに対して異なる値を有しており、Ｗは少なくとも１つの出力記号に対して１より大きく、可能な出力記号の数は該入力ファイル中の入力記号の数よりずっと大きい、ことと、
ｂ）該符号化器を用いて、ＡＬによって示される該Ｗ個の関連付けられた入力記号の所定の関数から出力記号値を生成することと
によって生成される、ことと
を含む、方法。
【請求項２９】
前記複数の出力記号を生成するステップが、出力記号の独立した複数のものを複数のソースの各々で生成するステップであり、ここで該複数のものは、該複数のソースの各ソースが、１つの独立ソースが別の独立ソースの情報出力を完全に複製することなく、該複数のソースの他のソースによって生成されるリストを参照する必要なしに、関連付けられた入力記号のリストを決定するという点で独立である、請求項２８に記載の方法。
【請求項３０】
前記複数の出力記号を複数のチャネル上に分配するステップであって、１つのチャネルによって提供される前記情報内容が他のチャネルの情報内容の完全な複製でない、ステップをさらに含む、請求項２８に記載の方法。
【請求項３１】
前記決定ステップが、
キーアルファベットから、前記出力記号を生成するためのキーＩを選択することであって、該キーアルファベットは、前記入力記号の順序付けられたセット中の入力記号の数より多くのメンバを含む、ことと、
重みＷ（Ｉ）をＩの関数として決定することと、
Ｉの関数にしたがってＷ（Ｉ）個の該入力記号を選択することにより、該出力記号に関連付けられたＷ（Ｉ）個の入力記号のリストＡＬ（Ｉ）を形成することと、
該関連付けられたＷ（Ｉ）個の入力記号の所定の値関数から該出力記号の値Ｂ（Ｉ）を計算することと
を含む、請求項２８に記載の方法。
【請求項３２】
前記複数の出力記号を生成するステップが、出力記号の独立した複数のものを複数のソースの各々で生成するステップであり、ここで該複数のものは、該複数のソースの各ソースが、１つの独立ソースが別の独立ソースの情報出力を完全に複製することなく、該複数のソースの他のソースによって生成されるキーを参照する必要なしに、キーを選択するという点で独立である、請求項３１に記載の方法。
【請求項３３】
前記複数の出力記号を複数のチャネル上に分配するステップであって、１つのチャネルによって提供される前記情報内容が他のチャネルの情報内容の完全な複製でない、ステップをさらに含む、請求項３１に記載の方法。
【請求項３４】
デジタル回路または適切にプログラムされた計算素子として具現化された符号化器を含む送信器を用いて、ソースから該送信器を介して、その次に複数のチャネルを介してデータを送信する方法であって、
該方法は、
ａ）該符号化器の入力において、送信されるべき該データを受信することと、
ｂ）もしまだ配列されていないなら、送信されるべき該データを入力記号の順序付けられたセットとして配列することと、
ｃ）該符号化器を用いて、該複数のチャネルのそれぞれに対して複数の出力記号を生成することであって、各出力記号は、
１）キーアルファベットから、該出力記号を生成するためのキーＩを選択することであって、該キーアルファベットは、該入力記号の順序付けられたセットにおける入力記号の数より多くのメンバを含む、ことと、
２）Ｉの関数として重みＷ（Ｉ）を決定することであって、重みＷは、少なくとも２つの値の間で変化し、かつ、該キーアルファベットにおける少なくともいくつかのキーに対して１より大きい正の整数である、ことと、
３）Ｉの関数にしたがってＷ（Ｉ）個の該入力記号を選択することにより、該出力記号に関連付けられたＷ（Ｉ）個の入力記号のリストＡＬ（Ｉ）を形成することと、
４）該符号化器を用いて、該関連付けられたＷ（Ｉ）個の入力記号の所定の値関数から該出力記号の値Ｂ（Ｉ）を計算することと
によって生成される、ことと、
ｄ）該複数の出力記号のうち少なくとも１つを、複数のパケットの各々にパケット化することと、
ｅ）該送信器を用いて、該複数のパケットを該複数のチャネルを介して送信することであって、該複数のチャネルの少なくとも２つは、キーＩに対して異なる値を用いて生成された出力記号を含むパケットを運ぶ、ことと
を含む方法。
【請求項３５】
前記ソースは単一のソースを含み、該単一のソースは、該単一のソースに対してキーＩに対する値を生成し、前記複数のチャネルのいずれの２つから受信される情報内容も完全には複製でないように、その結果得られた出力パケットを該複数のチャネル上で分配する、請求項３４に記載の方法。
【請求項３６】
前記キーＩに対する値は、前記複数のチャネルのいずれの２つから受信される情報内容も完全には複製でないように、該複数のチャネルの各々に対して独立に選択される、請求項３４に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
（発明の背景）
本発明は、通信システムにおけるデータの符号化および復号化に関し、より詳細には、通信データにおける誤りおよびギャップを分析し、１つより多くのソースから生じる通信データを効率的に利用するためのデータを符号化および復号化する通信システムに関する。
【０００２】
送信者と受信者との間で通信チャネルを介したファイルの送信は、多くの文献に取り上げられてきた。好ましくは、受信者は、あるレベルの確実度で送信者によってチャネルを介して送信されたデータの正確なコピーを受信することを望む。チャネルが完全な忠実度を有さない場合（ほとんどすべての物理的に実現可能なシステムに当てはまる）の１つの問題点は、送信中に損失したりまたは化けたデータをどのように扱うかである。損失データ（イレーズ（ｅｒａｓｕｒｅ））は、化けたデータ（誤り）よりも扱いやすいことが多い。なぜなら、受信者は、いつ化けたデータが誤ってデータ受信されたのかを必ずしも当てることができないからである。イレーズを補正するため（いわゆる「イレーズ符号」）および／または誤りを補正するため（「誤り補正符号」すなわち「ＥＣＣ」）の多くの誤り補正符合が開発されてきた。一般に、データの送信中のチャネルおよびその送信されるデータの性質の不忠実度についての何らかの情報に基づいて、使用される特定の符号が選択される。例えば、チャネルが長時間の不忠実度を有することが既知の場合、そのようなアプリケーションには、バースト誤り符号が最も適切であり得る。短くまれな誤りだけが予想される場合、簡単なパリティ符号が最善であり得る。
【０００３】
複数の送信者および／または複数の受信器との間の通信チャネルを介したファイル送信もまた、多くの文献に取り上げられてきた。一般に、複数の送信者からのファイル送信は、送信者が作業の重複を最小限にできるように複数の送信者の間で調整が必要である。１つのファイルを受信器に送信する一般の複数送信者システムにおいて、送信者がどのデータをいつ送信するかを調整せずにその代わりにファイルのセグメントをただ送るだけの場合は、受信器が無駄な重複セグメントを多く受信する可能性がある。同様に、一人の送信者の送信に異なる受信器が異なる時点で参加する場合の問題点は、どのようにすればその送信者から受信器が受信するすべてのデータが確実に有用となるかである。例えば、送信者が連続して同じファイルについてのデータを送信しているとする。送信者が元のファイルのセグメントを単に送信し、いくつかのセグメントが損失した場合、受信器は、そのファイルの各セグメントの１コピーを受信する前に多くの無駄な重複セグメントを受信し得る。
【０００４】
符号を選択する際に別に考慮することは、送信に使用するプロトコルである。「インターネット」（大文字の「Ｉ」を使用）として知られるネットワークのグローバルなインターネットワークの場合、パケットプロトコルがデータ伝送のために使用される。そのプロトコルは、インターネットプロトコル、または略して「ＩＰ」と呼ばれる。１ファイルまたはデータの他のブロックがＩＰネットワークを介して送信される場合、そのデータは、等しいサイズの入力記号に分割され、入力記号は連続パケットに配置される。パケットベースであるので、パケット指向符号化スキームが適切であり得る。入力記号の「サイズ」は、入力記号が実際にビットストリームに分割されるどうかに関わらず、ビット単位で測られ得る。この場合、入力記号が２Ｍ記号のアルファベットから選択されるとすると、入力記号の大きさは、Ｍビットのサイズを有する。
【０００５】
伝送制御プロトコル（「ＴＣＰ」）は、確認応答機構を有する常用のポイントツーポイントパケット制御スキームである。ＴＣＰは、一対一通信に適切である。ここで、送信者および受信者の双方は、いつ送信および受信が生じるかについての合意があり、およびどの送信器および受信器が使用されるかの合意がある。しかし、ＴＣＰは、一対多または多対多通信または送信者および受信者が独立してデータの送信または受信の時間と場所を決定する場合に対しては、適切でないことがよくある。
【０００６】
ＴＣＰを使用する場合、送信者は整列したパケットを送信し、受信者は各パケットの受信の確認応答を行う。パケットが損失すると、送信者に確認応答が送られないので、送信者はパケットを再送信する。パケット損失は、多くの原因による。インターネット上では、パケット損失が頻繁に起こる。なぜなら、散発的な混雑状態によってルータにおけるバッファリング機構がその容量の最大に達し、入力パケットの損失を起こすからである。ＴＣＰ／ＩＰなどのプロトコルでは、確認応答パラダイムにより、確認応答の欠如に応答して、または受信者からの明示的要求に応答して損失パケットが単に再送信され得るので、パケット送信は完全には失敗しない。いずれの場合も、確認応答プロトコルは、受信者から送信者の逆向きチャネルを必要とする。
【０００７】
確認応答ベースプロトコルは、一般に多くのアプリケーションに適切であり、実際に現在のインターネットにおいて広く使用されているが、あるアプリケーションに対しては、それらは非効率的であり、完全に実行不可能であることもある。特に、確認応答ベースプロトコルは、待ち時間が長く、パケット損失率が高く、調整されていない受信者の接続および切断があり、および／または帯域の非対称性が高いようなネットワーク中では、十分に機能しない。長い待ち時間とは、確認応答が受信者から伝送して送信者に戻るまでに要する時間が長いことである。待ち時間が長いと、再送信前の総時間が過度に長くなり得る。パケット損失率が高くなるとまた、同じパケットのうちのそれぞれの再送信が到達せずに最後の１つまたは最後の数個の不運なパケットを得ることが大きく遅れるという問題を起こす。
【０００８】
「調整されていない受信者の接続および切断」は、各受信者が進行中の送信セッションに接続および切断を自由裁量でできる状況のことである。このような状況は、インターネット、「ビデオ・オン・デマンド」などの次世代サービスおよび将来のネットワークプロバイダによって提供される他のサービス上では一般的なことである。一般のシステムにおいて、受信者は、送信者の調整なしに進行中の送信に接続および切断する場合、受信者が多数のパケットの損失を認識する可能性がある。この場合、異なる受信者によって広く異なる損失パターンが認識される。
【０００９】
非対称性帯域は、受信者から送信者への逆向きデータパス（逆向きチャネル）が利用できないか、または前向きパスよりもさらにコストがかかる状況のことである。非対称性帯域の場合、受信者がパケットに頻繁に確認応答するのを過度に遅くさせ、および／または過度にコストがかかる。また、確認応答を頻繁にしなければやはり遅延が生じる。
【００１０】
さらに、確認応答ベースプロトコルは、放送にまで規模を十分に拡大することができない。放送では、１送信者が複数のユーザに同時にファイルを送信する。例えば、１送信者が複数の受信者に衛星チャネルを介してファイルを放送すると想定する。各受信者は、異なるパターンでパケットが損失し得る。ファイルの確実な送達のために確認応答データ（肯定または否定のいずれか）に基づくプロトコルは、各受信者から送信者への逆向きチャネルを必要とし、それを提供するのは過度にコストがかかり得る。さらに、このような場合には、複雑で強力な送信者が受信者から送信された確認応答データのすべてを適切に処理することができる必要がある。別の欠点は、異なる受信者が異なるパケットのセットを損失する場合に、ほんの少数の受信者によって受信し損ねたパケットのみを再放送することにより、他の受信者が無駄な重複パケットを受信してしまうことである。確認応答ベース通信システムにおいて十分に扱えない別の状況は、受信者が非同期的に受信セッションを開始し得る場合であり、つまり、受信者が送信セッションの途中でデータ受信を開始する可能性のある場合である。
【００１１】
マルチキャストおよび放送のためのＴＣＰ／ＩＰなどの確認応答ベーススキームの性能を向上させるための複雑なスキームがいくつか提案されてきた。しかし、現在のところ種々の理由によりいずれも完全には採用されていない。ひとつには、低地球軌道（ＬＥＯ）衛星放送ネットワークなどのような１受信者が複数の送信者から情報を得るような場合にまで確認応答ベースプロトコルの規模を十分に拡大することができないことである。ＬＥＯネットワークにおいては、ＬＥＯ衛星はその軌道のために上空を速い速度で通過するので、受信者は、いずれの特定の衛星の視野にはほんの短時間しか存在しない。これを補うために、ＬＥＯネットワークは多くの衛星を含み、１つの人工衛生が地平線に沈み別の衛星が地平線を昇る際に受信者が衛星間で引き渡される。確認応答ベースプロトコルが確実性を確保するために使用されるとしても、確認応答が適切な衛星から戻るように調整するためには、おそらく複雑な引き渡しプロトコルが必要であろう。なぜなら、受信者が１つの衛星からパケットを受信しつつなお別の衛星へそのパケットの確認応答を送ることがよく起こり得るからである。
【００１２】
確認応答ベースプロトコルを代替する、実用されることのあるプロトコルは、カルーセル（ｃａｒｏｕｓｅｌ）ベースプロトコルである。カルーセルベースプロトコルは、入力ファイルを等しい長さの入力記号に分割し、各入力記号をパケットに配置し、そして連続的にサイクルを繰り返し、すべてのパケットを送信する。カルーセルベースプロトコルの主な欠点は、受信者がたった１つのパケットを受信し損ねても、受信者がさらに完全な１回のサイクルを待たなければその受信し損ねたパケットを受信する機会を得られないことである。別の観点では、カルーセルベースプロトコルのために大量の無駄な重複データの受信を生じ得ることである。例えば、受信者がカルーセルの開始からパケットを受信し、しばらく受信を停止し、カルーセルの開始時に受信を再開する場合、多くの無駄な重複パケットが受信される。
【００１３】
上記問題を解決するために提案されてきた１つの解決法は、確認応答ベースプロトコルの使用を避け、その代わりに確実性を上げるためにリードソロモン符号などのイレーズ符号を使用することである。いくつかのイレーズ符号の１つの特徴は、ファイルが入力記号にセグメント化され、その入力記号がパケットで受信者に送信される場合、受信者は、十分に多くのパケットを受信したら、一般にどのパケットが到着したかにかかわらず、そのパケットを復号して完全なファイルを再構築する。このような性質は、たとえパケットが損失してもファイルが回復され得るので、パケットレベルでの確認応答の必要性を排除する。しかし、イレーズ符号による多くの解決方法は、確認応答ベースプロトコルの問題を解決しないか、さもなくば新規の問題を生じる。
【００１４】
多数のイレーズ符号に伴う１つの問題は、それらを処理するために過剰な計算能力またはメモリを必要とすることである。計算能力およびメモリを多少効率的に使用する通信アプリケーション用に最近開発された１つの符号化スキームは、トルネード符号化スキームである。トルネード符号は、入力ファイルがＫ個の入力記号によって表されＮ個の出力記号を決定するために使用される（ここでＮは、符号化処理を開始する前に固定される）という点で、リードソロモン符号と同様である。トルネード符号を使用する符号化は、一般にリードソロモン符号を使用する符号化よりもずっと速い。なぜなら、Ｎ個のトルネード出力記号を生成するのに必要な平均算術演算数がＮに比例し（数十アセンブリ符号演算かけるＮのオーダーである）、ファイル全体を復号化するのに必要な算術演算総数がまたＮに比例するからである。
【００１５】
トルネード符号は、リードソロモン符号よりも速度の点で優れているが、いくつかの欠点がある。まず、出力記号数Ｎが符号化処理の前に決定されなければならない。このため、パケットの損失率が過大に見積もられると効率が低下し、パケットの損失率が過小に見積もられると失敗する。これは、トルネードデコーダが、元のファイルを復号して復元するために所定数の出力記号（具体的には、Ｋ＋Ａ個のパケット、ここでＡはＫに比較して小さい）を必要とし、損失パケット数がＮ−（Ｋ＋Ａ）よりも大きい場合、元のファイルが復元されないからである。この制限は、一般にＮがＫ＋Ａよりも少なくとも実際のパケット損失分は大きくなるように選択される限り、多くの通信の問題に対して許容されるが、パケット損失をあらかじめ予測する必要がある。
【００１６】
トルネード符号の別の欠点は、トルネード符号がグラフ構造上で何らかの方法で整合するためにエンコーダおよびデコーダを必要とすることである。トルネード符号は、このグラフが構築されるデコーダで前処理段階を必要とする。その処理は、実質的に復号化を遅らす。さらに、グラフはファイルサイズに固有であるので、使用される各ファイルサイズに対する新しいグラフを生成する必要がある。さらに、トルネード符号によって必要なグラフの構築は複雑であり、最高の性能を得るためには、異なるサイズのファイルに対するパラメータの異なるカスタム設定をする必要がある。これらのグラフは、大きなサイズを有し、送信者および受信者の双方の記憶装置に大容量のメモリを要求する。
【００１７】
加えて、トルネード符号は、固定されたグラフおよび入力ファイルに対してちょうど同じ出力記号値を生成する。これらの出力記号は、Ｋ個の元入力記号およびＮ−Ｋ個の冗長記号からなる。さらに実用上、Ｎは単にＫの小さな倍数である（Ｋの１．５または２倍など）。このように、１より多い送信者から、同じグラフを使用して同じ入力ファイルから生成された出力記号を得る受信者が、多数の無駄な重複出力記号を受信する可能性は非常に高い。なぜなら、Ｎ個の出力記号があらかじめ固定されており、そのＮ個の出力記号は、出力記号が送信されるごとの各送信器から送信されるＮ個の出力記号と同じであり、かつ受信者によって受信されるＮ個の記号と同じである。例えば、Ｎ＝１５００、Ｋ＝１０００、および受信器が、１つの衛星が地平線へ沈む前にその衛星から９００個の記号を受信すると想定する。衛星が同期するように調整されなければ、次の衛星から受信器によって受信されたトルネード符号記号は、追加のものではない。なぜなら、その次の衛星は、同じＮ個の記号を送信しているからである。この場合、受信器は、入力ファイルの復元に必要な１００個の新しい記号を受信する前にすでに受信した９００個の記号のうちの多く記号のコピーを受信してしまう可能性がある。
【００１８】
したがって、必要なことは、送信者または受信者に過剰な計算能力またはメモリを設置する必要のない、かつ必ずしも１以上の送信者と１以上の受信者との間の調整を必要とせずにその送信者および／またはその受信者によってシステム内にファイルを効率的に配布するために使用され得る簡単なイレーズ符号である。
【発明の開示】
【課題を解決するための手段】
【００１９】
（発明の要旨）
本発明による通信システムの１つの実施形態において、エンコーダは、入力ファイルのデータおよびキーを使用して、出力記号を生成する。ここで、入力ファイルは、入力アルファベットからそれぞれ選択される順列の複数の入力記号であり、キーは、キーアルファベットから選択され、出力記号は、出力アルファベットから選択される。キーＩを有する出力記号は、生成されるべき出力記号の重みＷ（Ｉ）を決定するステップ（ここで、重みＷは、複数のキー上の少なくとも２つの値の間で変化する正の整数である）、Ｉの関数にしたがって、出力記号に関連付けられるＷ（Ｉ）個の入力記号を選択するステップ、および選択されたＷ（Ｉ）個の入力記号の所定の値関数Ｆ（Ｉ）から出力記号値Ｂ（Ｉ）を生成するステップによって生成される。エンコーダは、１回以上呼び出され得、各回別のキーを用い、各回出力記号を生成する。出力記号は、一般に互いに独立であり、無限の数（Ｉの解像度に従う）が、必要ならば生成され得る。
【００２０】
本発明によるデコーダにおいて、受信者によって受信された出力記号は、入力ファイルの符号化に基づいてこれらの出力記号を生成した送信者から送信された出力記号である。出力記号は送信中に損失され得るが、デコーダは、送信された出力記号の任意の部分を受信するだけの場合でさえ適切に動作する。入力ファイルを復号化するために必要な出力記号数は、そのファイルを構成する入力記号の数に等しいか、またはわずかに大きい。ここで、入力記号および出力記号は、同じビット数のデータと仮定する。
【００２１】
本発明による１つの復号化プロセスにおいて、各受信された出力記号に対して以下のステップが実行される：１）受信された出力記号のキーＩを識別するステップ；２）出力記号に対して、受信された出力記号値Ｂ（Ｉ）を識別するステップ；３）出力記号の重みＷ（Ｉ）を決定するステップ；４）出力記号に関連付けられたＷ（Ｉ）個の関連付けられた入力記号の位置を決定するステップ；および５）重みＷ（Ｉ）とともに、出力記号テーブルにＢ（Ｉ）を格納し、関連付けられた入力記号の位置を格納するステップ。次に、以下のプロセスが、重み１を有する未使用の出力記号がもはやこれ以上存在しなくなるまで繰り返し適用される：１）重み１を有し、「使い古した」出力記号として表記されない、格納された各出力記号に対して、キーＩに基づいて、出力記号に関連付けられる固有の残りの未回復入力記号の位置Ｊを計算するステップ；２）出力記号から入力記号Ｊに対する値を計算するステップ；３）入力記号Ｊを関連付けとして有する出力記号テーブル内の出力記号を識別するステップ；４）この識別された出力記号の値Ｂを再計算し、入力記号Ｊから独立するステップ；５）これら識別された出力記号の重みを１だけデクリメントするステップ；および６）入力記号Ｊを回復されたものとして表記し、キーＩを有する出力記号を使い古したものとして表記するステップ。このプロセスは、入力記号の順列セットが回復されるまで、すなわち、入力ファイル全体が完全に回復されるまで繰り返される。
【００２２】
本発明の１つの利点は、送信中に受信者が任意の所定の時点で受信を開始する必要がないこと、および出力記号のセット数が生成された後、送信者が停止する必要がないことである。なぜなら、送信者が任意の所定の入力ファイルに対して出力記号の有効な無限のセットを送信し得るためである。その代りに、受信者は、用意ができた場合に受信できるところから受信を開始し得、ランダムパターンでパケットを損失し得、そしてなお、受信されるデータの非常に多くが「情報付加的」データ（すなわち、すでに利用可能な情報の重複でなく、回復プロセスを補助するデータ）である良好な確率を有する。独立に生成された（ランダムに無関係であることが多い）データストリームが、情報付加的な方法で符号化されることによって、複数ソース生成および受信、イレーズロバスト性、ならびに未調整の接続および切断を可能にするという多くの利点が生じる。
【００２３】
本明細書中で開示される本発明の性質および利点のさらなる理解は、本明細書の残りの部分および添付の図面を参照して理解され得る。
【発明を実施するための最良の形態】
【００２４】
（好適な実施形態の説明）
本明細書中において記載される実施例において、「連鎖反応符号化」と呼ばれる符号化スキームが説明される。そのまえに、本記載中に使用される種々の用語の意味および範囲を説明する。
【００２５】
連鎖反応符号化を用いて、出力記号が必要に応じて入力ファイルから送信者によって生成される。各出力記号は、他の出力記号がどのように生成されるかにかかわらず生成され得る。どの時点においても、送信者は、出力記号の生成工程を停止し得る。送信者が出力記号の生成工程をいつ停止または再開するかについては、制約を必要としない。一旦生成された後、これらの出力記号は、パケット内に配置され、送信先へ送信される。この場合、各パケットは、１つ以上の出力記号を含む。
【００２６】
本明細書中で使用されるように、用語「ファイル」は、１つ以上のソースに格納され、１つ以上の送信先へ１単位として送達される任意のデータのことである。したがって、ファイルサーバまたはコンピュータ記憶装置からのドキュメント、イメージ、およびファイルはすべて、送達され得る「ファイル」の例である。ファイルは、既知のサイズを有するか（ハードディスク上に格納された１メガバイトのイメージなど）、または未知のサイズを有する（ストリーミングソースの出力から取り出されるファイルなど）。いずれの場合も、ファイルは入力記号のシーケンスであり、各入力記号はファイル内の位置および値を有する。
【００２７】
送信は、ファイルを送達するためにデータを１以上の送信者から１以上の受信者にチャネルを介して送信する処理のことである。１送信者が完全なチャネルによって任意数の受信者に接続される場合、すべてのデータが正しく受信されるので受信されたデータが入力ファイルの正確なコピーであり得る。ここで、大半の現実のチャネルの場合のようにチャネルが完全でないと仮定するか、またはいくつかシステムの場合のように１より多い送信者からデータが送信されると仮定する。多くのチャネルの欠点のうち、ここで関心のある２つの欠点は、データイレーズおよびデータ不完全性（データイレーズの特殊な場合として処理され得る）である。データイレーズが生じるのは、チャネルがデータを損失または脱落させる場合である。データ不完全性が生じるのは、データをうちのいくつかが受信者を通り過ぎてしまうまで受信者がデータの受信を開始しないか、受信者が送信終了前にデータの受信を停止するか、または受信者がデータ受信の停止および再開を断続的に行う場合である。データ不完全性の例として、移動衛星送信者が、入力ファイルを表すデータを送信し、受信者が範囲に入る前に送信を開始する。受信者が一旦範囲に入ると、衛星が範囲を出るまでデータが受信され得る。この場合、受信者は、衛星放送受信アンテナの向きを変更して（この間はデータを受信しない）、範囲内に入った別の衛星によって送信されている同じ入力ファイルについてのデータの受信を開始し得る。この記載を読むことにより明らかなように、データ不完全性は、データイレーズの特殊な場合である。なぜなら、受信者は、あたかも受信者が常に範囲内に存在しているが、チャネルは受信者がデータ受信を開始する時点までのすべてのデータを損失するかのように、データ不完全性を処理し得る（および受信者は同じ問題を有する）。また、通信システム設計において周知のように、検出可能な誤りは、単に検出可能な誤りを有するデータブロックまたは記号のすべてを脱落させることによってイレーズと等価になり得る。
【００２８】
いくつかの通信システムにおいて、受信者は、複数の送信者または複数の接続を有する１送信者によって生成されるデータを受信する。例えば、ダウンロードの速度を上げるために、受信者は、同時に１より多い送信者に接続して同じファイルに関するデータを送信する。別の例として、マルチキャスト送信において、複数のマルチキャストデータストリームは、受信者がこれらデータストリームのその１つ以上に接続できるよう送信され、そのストリームが送信者に接続されるチャネルの帯域に総送信速度を整合させる。すべてのそのような場合において重要なのは、たとえ送信速度が異なるストリーム間で大きく異なる場合であっても、かつ任意の損失パターンがある場合でも、すべての送信データが受信者に対して独立に使用されること、すなわち、複数のソースデータがストリーム間で冗長でないことである。
【００２９】
一般に、送信とは、送信者から受信者へ送信者と受信者とを接続するチャネルを介してデータを移動する行為である。そのチャネルは、チャネルがデータを取得した際にチャネルがそのデータを送信者から受信者へ移動させる実時間チャネルであり得る。あるいは、チャネルは、送信者から受信者への送信中にデータの一部またはすべてを格納する記憶チャネルでもよい。後者の例は、ディスク記憶装置または他の記憶装置である。この例では、データを生成するプログラムまたはデバイスは、データを記憶装置に送信する送信者として考えられ得る。受信者は、記憶装置からデータを読み出すプログラムまたはデバイスである。送信者がデータを記憶装置へ書き込むために使用する機構、記憶装置自体、および受信者が記憶装置からデータを読み出すための機構が、集合的にチャネルを形成する。これらの機構または記憶装置がデータを損失する可能性がある場合、そのような損失をチャネル中のデータイレーズとして処理し得る。
【００３０】
送信者および受信者がデータイレーズチャネルによって分離される場合、入力ファイルの正確なコピーを送信するのではなくて、その代わりにイレーズの回復を補助する入力ファイルから生成されたデータを送信するのが好ましい。エンコーダとは、そのようなタスクを処理する回路、デバイス、モジュール、または符号セグメントである。エンコーダの動作を見る１つの方法は、エンコーダが入力記号から出力記号を生成することであり、ここで入力記号値のシーケンスが入力ファイルを表す。したがって、各入力記号は、入力ファイル内の位置、および値を有する。デコーダとは、受信者によって受信された出力記号から入力記号を再構築する回路、デバイス、モジュール、または符号セグメントである。
【００３１】
連鎖反応符号化は、任意の特定のタイプの入力記号に限定されないが、入力記号のタイプはアプリケーションによって決定されることが多い。一般に、入力記号に対する値は、２Ｍ個の記号（ここでＭは正の整数）のアルファベットから選択される。そのような場合、入力記号は、入力ファイルからのＭビットのデータシーケンスによって表現され得る。Ｍの値は、アプリケーションの使用、およびチャネルに基づいて決定されることが多い。例えば、パケットベースインターネットチャネルに対しては、１０２４バイトのサイズのペイロードを有するパケットが適切であり得る（１バイトは８ビット）。この例において、各パケットが１つの出力記号および８バイトの補助情報を含むと仮定すると、入力記号サイズのＭは、（１０２４−８）・８、すなわち８１２８バイトが適切であり得る。別の例として、ＭＰＥＧパケット規格を使用するいくつかの衛星システムがある。この場合、各パケットのペイロードは１８８バイトを含む。この例において、各パケットは１つの出力記号および４バイトの補助情報を含むと仮定すると、記号サイズのＭは、（１８８−４）・８、すなわち１４７２バイトが適切であり得る。連鎖反応符号化を使用する汎用通信システムにおいて、入力記号サイズ（すなわち、Ｍ、入力記号によって符号化されたビット数）などのアプリケーション特定パラメータは、アプリケーションによって設定された変数である。
【００３２】
各出力記号は、ある値を有する。以下を考慮する１つの好ましい実施形態において、各出力記号は、「キー」と呼ばれる識別子を有する。好ましくは、各出力記号のキーは、受信者によって容易に決定され、受信者がある出力記号を別の出力記号と区別できるようにする。好ましくは、出力記号のキーは、他のすべての出力記号のキーと異なる。また好ましくは、受信者が受信された出力記号のキーを決定するためには、送信中に含まれるデータは可能な限り少ない方がよい。
【００３３】
キーイングの簡単な形態では、エンコーダによって生成された、連続した出力記号に対するキーのシーケンスは、連続した整数のシーケンスである。この場合、各キーは、「シーケンス番号」と呼ばれる。各送信パケット中の１つの出力記号値がある場合、シーケンス番号がパケット中に含まれ得る。一般にシーケンス番号が少数のバイト（例えば、４バイト）に収まるので、いくつかのシステムにおいては、出力記号値とともにシーケンス番号を含むことは経済的である。例えば、各１０２４バイトのＵＤＰインターネットパケットを使用して、シーケンス番号用に各パケット内に４バイトを割当ててもわずかに０．４％の負担がかかるだけである。
【００３４】
他のシステムでは、１より多くのデータからキーを生成するのが好ましい。例えば、１以上の送信者からの同じ入力ファイルに基づいて生成された１より多くのデータストリームを受信する受信者を含むシステムを考える。ここで、送信データはパケットのストリームであり、各パケットは、１つの出力記号を含む。すべてのそのようなストリームが、キーと同じシーケンス番号のセットを使用する場合、受信者は、同じシーケンス番号を有する出力記号を受信する可能性がある。同じキーを有するか、または同じシーケンス番号を有する場合の出力記号は、入力ファイルについて同一の情報を含むので、受信者は、無駄な重複データを受信する。したがって、そのような場合、キーがシーケンス番号と対になった固有のストリーム識別子を含むことが好ましい。
【００３５】
例えば、ＵＤＰインターネットパケットの１ストリームに対して、データストリームの固有の識別子は、送信者のＩＰアドレス、および送信者がパケットを送信するために使用しているポート数を含み得る。送信者のＩＰアドレスおよびストリームのポート数は、各ＵＤＰパケットのヘッダの一部であるので、キーのこれらの部分が受信者に確実に利用され得るように各パケット中に必要なさらなるスペースはない。送信者は、単にシーケンス番号を各パケットに対応の出力記号とともに挿入することのみを必要とし、受信者は、シーケンス番号およびパケットヘッダから受信された出力記号のキー全体を再生成し得る。別の例として、ＩＰマルチキャストパケットの１ストリームに対して、データストリームの固有の識別子は、ＩＰマルチキャストアドレスを含み得る。ＩＰマルチキャストアドレスは各ＩＰマルチキャストパケットのヘッダの一部であるので、ＵＤＰパケットについての上記説明は、この場合についても同様に適用される。
【００３６】
出力記号の位置によるキーイングは、それが可能な場合は好ましい。位置キーイングは、ＣＤ−ＲＯＭ（コンパクトディスク読み取り専用メモリ）などの記憶装置から出力記号を読み出すために十分機能し得る。ここで、出力記号のキーは、ＣＤ−ＲＯＭ上の位置（すなわち、トラック、プラスセクタ、セクタ内のプラス位置など）である。位置キーイングはまた、ＡＴＭ（非同期転送モード）システムなどの回路ベース送信システムのために十分機能し得る。ここで、整列したデータセルは、厳しいタイミング制約下で送信される。この形態のキーイングを使用すると、受信者は、出力記号のキーを、そのキーを明確に送信するのに必要なスペースを有することなく、再生成し得る。当然、位置キーイングは、そのような位置情報が利用でき確実であることを必要とする。
【００３７】
位置によるキーイングはまた、他のキーイング方法と組み合わせ得る。例えば、各パケットが１より多くの出力記号を含むパケット送信システムを考える。この場合、出力記号のキーは、固有のストリーム識別子、シーケンス番号、および出力記号のパケット内の位置から構築され得る。データイレーズは一般に全パケットの損失を生じるので、受信者は一般にパケットを全部受信する。この場合、受信者は、パケットのヘッダ（固有のストリーム識別子を含む）、パケット中のシーケンス番号、および出力記号のパケット内の位置を再生成し得る。
【００３８】
いくつかのシステムにおいて好ましいキーイングの別の形態は、ランダムキーイングである。これらのシステムにおいては、乱数（または疑似乱数）が、生成され、各出力記号に対するキーとして使用され、および出力記号とともに明確に送信される。異なる物理的位置で異なる送信者によって生成されるキーに対してさえ（可能なキーの範囲が十分大きいと仮定する）、ランダムキーイングの１つの性質は、同じ値を有するキーの割合が小さい可能性がある。この形態のキーイングは、インプリメンテーションが簡単であるため、いくつかのシステムにおいては他の形態よりも利点を有し得る。
【００３９】
上記のように、連鎖反応符号化が有用であるのは、データイレーズの可能性があるか、または受信者が、送信が開始および終了するちょうどその時点で受信を開始および終了しない場合である。後者の条件は、本明細書中で「データ不完全性」と呼ばれる。これらの条件は、連鎖反応符号化が使用される場合、通信プロセスに悪影響を与えない。なぜなら、受信される連鎖反応符号化が、情報追加型であるように、極めて独立しているからである。出力記号のほとんどのランダムな集合が、大部分が情報追加型であるように（これは、本明細書中に記載の連鎖反応符号化システムに対する場合である）十分に独立しているならば、任意の適切な数のパケットを使用して、入力ファイルを回復し得る。１００パケットがデータイレーズを起こすノイズの発生によって損失する場合、その発生の後でさらに１００パケットを取り上げてイレーズされたパケットの損失を置き換え得る。送信器が送信を開始した際に受信器が送信器に同調できず何千のパケットが損失した場合、受信器は、他の送信期間から（あるいは、別の送信器からの場合もある）その何千のパケットを取り上げる。連鎖反応符号化を使用すると、受信器は、任意の特定のパケットのセットを取り上げることに制約されず、従って１送信器からいくつかのパケットを受信し、別の送信器に切り換え、いくつかのパケットを損失し、所定の送信の開始または終了を逸しても、なお入力ファイルを回復し得る。受信器−送信器調整のない送信に接続および切断する機能は、通信プロセスを大きく簡略化する。
【００４０】
（基本的な実施）
連鎖反応符号化を使用してファイルを送信するステップは、入力ファイルから入力記号を生成、形成、または抽出し、その入力記号を１以上の出力記号に符号化するステップ（ここで、各出力記号は、すべての他の出力記号とは独立なキーに基づいて生成される）、および出力記号を１以上の受信者にチャネルを介して送信するステップを含む。連鎖反応符号化を使用する入力ファイルの１コピーを受信（および再構築）するステップは、１以上のデータストリームから出力記号のあるセットまたはサブセットを受信するステップ、および受信された出力記号の値およびキーから入力記号を復号化するステップを含む。
【００４１】
以下に説明するように、デコーダは、１以上の出力記号の値および可能ならすでに回復された他の入力記号の値についての情報から入力記号を回復し得る。したがって、デコーダは、いくつかの出力記号からいくつかの入力記号を回復し得る。これにより、デコーダは、その復号された入力記号およびすでに受信された出力記号などからの他の入力記号を復号し得、したがってこれにより、ファイルの入力記号の回復の「連鎖反応」が受信者側で再構築される。
【００４２】
次に、本発明の局面を図面を参照して説明する。
【００４３】
図１は、連鎖反応符号化を使用する通信システム１００のブロック図である。通信システム１００において、入力ファイル１０１、または入力ストリーム１０５は、入力記号発生器１１０に与えられる。入力記号発生器１１０は、入力ファイルまたは入力ファイルストリームから１以上の入力記号（ＩＳ（０），ＩＳ（１），ＩＳ（２），．．．）のシーケンスを生成し、各入力記号は、ある値およびある位置を有する（図１に括弧付きの整数として示される）。上記のように、入力記号に対して可能な値、すなわち、そのアルファベットは、一般に２Ｍ個の記号のアルファベットであるので、各入力記号は、Ｍビットの入力ファイルを符号化する。Ｍの値は、一般に通信システム１００を使用することによって決定されるが、汎用システムは、入力記号発生器１１０に入力される記号サイズを含み得るので、Ｍは使用ごとに異なり得る。入力記号発生器１１０の出力は、エンコーダ１１５に与えられる。
【００４４】
キー発生器１２０は、エンコーダ１１５によって生成される各出力記号に対するキーを生成する。各キーは、どのキー発生器によって生成されたかにかかわらず、上記の方法のうちの１つ、または同じ入力ファイルに対して生成されたキーの大きな割合が固有であることを確保する任意の同等の方法によって生成される。例えば、キー発生器１２０は、カウンタ１２５の出力、固有のストリーム識別子１３０、および／またはランダム発生器１３５の出力の組合せを使用して、各キーを生成し得る。キー発生器１２０の出力は、エンコーダ１１５に与えられる。
【００４５】
キー発生器１２０によって与えられた各キーＩに基づいて、エンコーダ１１５は、入力記号発生器によって与えられる入力記号から値Ｂ（Ｉ）を有する出力記号を生成する。各出力記号の値は、そのキーおよび１以上の入力記号のある関数に基づいて生成される。本明細書中で値を出力記号の「関連付けした入力記号」または単にその「関連付け」と呼ぶ。関数（「値関数」）および関連付けの選択は、以下により詳細に記載されるプロセスにしたがってなされる。一般に、常にではないが、Ｍは、入力記号および出力記号に対して同じである、すなわち、両方とも同じビット数で符号化する。
【００４６】
いくつかの実施形態において、入力記号数Ｋは、関連付けを選択するためにエンコーダによって使用される。Ｋがあらかじめ未知の場合は（入力がストリーミングファイルの場合など）、Ｋは単に推定され得る。値Ｋはまた、入力記号に対して記憶装置を割り当てるためにエンコーダ１１５によって使用され得る。
【００４７】
エンコーダ１１５は、出力記号を送信モジュール１４０に与える。送信モジュール１４０にはまた、キー発生器１２０から各そのような出力記号のキーが与えられる。送信モジュール１４０は、出力記号を送信し、送信モジュール１４０はまた、使用されるキーイング方法に依存して、送信される出力記号のキーについてのいくつかのデータをチャネル１４５を介して受信モジュール１５０に送信する。チャネル１４５は、イレーズチャネルと仮定されるが、これは、通信システム１００の適切な動作に必要ではない。モジュール１４０、１４５および１５０は、送信モジュール１４０が出力記号およびそれらのキーについて必要な任意のデータをチャネル１４５に送信するように改造され、受信モジュール１５０が出力記号および可能ならばそれらのキーについてのいくつかのデータをチャネル１４５から受信するように改造される限り、適切なハードウェアコンポーネント、ソフトウェアコンポーネント、物理的媒体、またはそれらの任意の組合せならいずれのものでもよい。Ｋの値が、関連付けを決定するために使用される場合、チャネル１４５を介して送信され得るか、またはエンコーダ１１５とデコーダ１５５との一致によってあらかじめ設定され得る。
【００４８】
上記のように、チャネル１４５は、インターネット、またはテレビジョン送信器からテレビジョン受信者への放送リンク、または１地点から別の地点への電話接続などの実時間チャネルであり得る。または、チャネル１４５は、ＣＤ−ＲＯＭ、ディスクドライブ、ウェッブサイトなどの記憶チャネルであり得る。チャネル１４５は、実時間チャネルと記憶チャネルとの組合せでもあり得る。例えば、一人がパソコンからインターネットサービスプロバイダ（ＩＳＰ）に電話回線を介して入力ファイルを送信し、その入力ファイルがウェッブサーバに格納されて、後でインターネットを介して受信者に送信される場合に形成されるチャネルである。
【００４９】
チャネル１４５はイレーズチャネルであると仮定されるので、通信システム１００は、受信モジュール１５０を出る出力記号と送信モジュール１４０に入る出力記号との間に１対１対応を仮定しない。実際には、チャネル１４５がパケットネットワークを含む場合、通信システム１００は、任意の２つ以上のパケットの相対的順序がチャネル１４５を介した送信中に保存されると仮定できないとされ得る。したがって、出力記号のキーは、上記キースキームの内１つ以上を使用して決定され、受信モジュール１５０を出る出力記号の順序によって必ずしも決定されない。
【００５０】
受信モジュール１５０は出力記号をデコーダ１５５に与え、受信モジュール１５０が受信するこれらの出力記号のキーについての任意のデータは、キー発生器１６０に与えられる。キー発生器１６０は、受信した出力記号に対するキーを再生成し、これらのキーをデコーダ１５５に与える。デコーダ１５５は、キー発生器１６０によって与えられたキーと対応の出力記号とを使用して、入力記号（再度、ＩＳ（０），ＩＳ（１），ＩＳ（２），．．．）を回復する。デコーダ１５５は、回復された入力記号を入力ファイルリアセンブラ１６５に与え、リアセンブラ１６５は入力ファイル１０１または入力ストリーム１０５のコピー１７０を生成する。
【００５１】
（基本エンコーダ）
図２は、図１に示されるエンコーダ１１５の１つの実施形態のブロック図である。図２のブロック図を、ここで図３を参照して説明する。図３は、図２に示すエンコーダによって実行される処理の内のいくつかの論理等価物を示す図である。
【００５２】
エンコーダ１１５には、入力記号および生成すべき各出力記号に対するキーが与えられる。示されるように、Ｋ個の入力記号が、入力記号バッファ２０５内に格納される。キーＩ（図１で示されるキー発生器１２０によって与えられる）は、値関数セレクタ２１０、重みセレクタ２１５、および連想装置２２０への入力である。入力記号数Ｋはまた、これら３つのコンポーネント２１０、２１５および２２０に与えられる。計算器２２５は、値関数セレクタ２１０、重みセレクタ２１５、連想装置２２０および入力記号バッファ２０５からの出力を受信するよう結合され、出力記号値に対する出力を有する。理解すべきことは、図２に示す要素と等価な他の構成が使用され得、これは本発明のエンコーダの１例にすぎないことである。
【００５３】
動作中、Ｋ個の入力記号が入力記号バッファ２０５に受信および格納される。上記のように、各入力記号は、位置（すなわち、入力ファイル内の元の位置）および値を有する。入力記号は、格納される入力記号の位置が決定され得る限り、それぞれの順序で入力記号バッファ２０５内に格納される必要はない。
【００５４】
キーＩおよび入力記号数Ｋを使用して、重みセレクタ２１５は、キーＩを有する出力記号の「関連付け」となるべき入力記号の数Ｗ（Ｉ）を判定する。キーＩ、重みＷ（Ｉ）および入力記号数Ｋを使用して、連想装置２２０は、出力記号に関連付けられた入力記号の位置のリストＡＬ（Ｉ）を判定する。理解すべきことは、Ｗ（Ｉ）は、連想装置２２０があらかじめＷ（Ｉ）を知らずにＡＬ（Ｉ）を生成し得る場合、別個にまたは明確に計算される必要がないことである。ＡＬ（Ｉ）が一旦生成されると、Ｗ（Ｉ）は容易に判定される。なぜなら、それはＡＬ（Ｉ）中の関連付けの数であるからである。
【００５５】
Ｉ、Ｗ（Ｉ）およびＡＬ（Ｉ）が一旦既知となると、出力記号の値Ｂ（Ｉ）が値関数Ｆ（Ｉ）に基づいて計算器２２５によって計算される。適切な値関数の１つの性質は、ＡＬ（Ｉ）中の関連付けに対する値が、出力記号値Ｂ（Ｉ）およびＡＬ（Ｉ）中の、他のＷ（Ｉ）−１個の関連付けから判定され得ることである。このステップにおいて使用される１つの好ましい値関数は、ＸＯＲ値関数である。なぜなら、それは、この性質を満足し、容易に計算され、および容易に反転されるからである。しかし、他の適切な値関数を代わりに用いてもよい。
【００５６】
値関数セレクタ２１０が使用される場合、キーＩおよびＫからの値関数Ｆ（Ｉ）を判定する。１つの変形において、値関数セレクタ２１０は、すべてのＩに対して同じ方法または関数Ｆを使用する。この変形において、値関数セレクタ２１０は必要でなく、計算器２２５が値関数Ｆを構成し得る。例えば、値関数はすべてのＩに対してＸＯＲであり得る。すなわち、出力記号値は、すべてのその関連付けの値のＸＯＲ（排他的なＯＲ）である。
【００５７】
各キーＩに対して、重みセレクタ２１５は、ＩおよびＫから重みＷ（Ｉ）を判定する。１つの変形において、重みセレクタ２１５は、キーＩを使用することによってＷ（Ｉ）を選択して、まずランダム検索数を生成し、次いでこの数を使用して、重みセレクタ２１５内に格納された分布テーブル中のＷ（Ｉ）の値を検索する。そのような分布テーブルがどのように形成およびアクセスされるかを以下により詳細に説明する。一旦重みセレクタ２１５がＷ（Ｉ）を判定すると、この値は、連想装置２２０および計算器２２５に与えられる。
【００５８】
連想装置２２０は、現在の出力記号に関連付けられたＷ（Ｉ）個の入力記号の位置のリストＡＬ（Ｉ）を判定する。この関連付けは、Ｉの値、Ｗ（Ｉ）の値およびＫ（利用可能ならば）に基づく。一旦連想装置２２０がＡＬ（Ｉ）を判定すると、ＡＬ（Ｉ）は、計算器２２５に与えられる。リストＡＬ（Ｉ）、重みＷ（Ｉ）および、値関数セレクタ２１０によって与えられる値関数Ｆ（Ｉ）または予め選択された値関数Ｆのいずれかを使用して、計算器２２５は、入力記号バッファ２０５中のＡＬ（Ｉ）によって参照されるＷ（Ｉ）個の入力記号にアクセスして、現在の出力記号に対する値Ｂ（Ｉ）を計算する。ＡＬ（Ｉ）を計算するための手順の例を以下に与えるが、別の適切な手順を代わりに使用してもよい。好ましくは、その手順は、各入力記号に、所定の出力記号に対する関連付けとして選択される確率を略等しく与え、デコーダがそれにとって利用可能なＡＬ（Ｉ）をまだ有していない場合にデコーダが複製し得るように選択する。
【００５９】
次に、エンコーダ１１５は、Ｂ（Ｉ）を出力する。実際は、エンコーダ１１５は、図３に例示する動作を実行して、すなわち、選択された入力記号のある値関数として出力記号値Ｂ（Ｉ）を生成する。示される例において、その値関数はＸＯＲであり、出力記号の重みＷ（Ｉ）は３であり、関連付けられた入力記号（関連付け）は位置０、２および３であり、値ＩＳ（０）、ＩＳ（２）およびＩＳ（３）をそれぞれ有する。したがって、出力記号は、Ｉの値に対して以下のように計算される：
Ｂ（Ｉ）＝ＩＳ（０）  ＸＯＲ  ＩＳ（２）  ＸＯＲ  ＩＳ（３）
次に、生成された出力記号は、上記のように送信および受信される。ここで、出力記号の内いくつかが損失されるかまたはその順序がみだれた、もしくは１つ以上のエンコーダによって生成されたと仮定する。しかし、受信される出力記号は、そのキーの表示、および値Ｂ（Ｉ）が正確であるという何らかの確実さをもって受信されると仮定する。図１に示すように、それらの受信された出力記号は、キー再発生器１６０による表示およびＫの値から再構築される対応のキーとともに、デコーダ１５５に入力される。
【００６０】
入力記号中に符号化されるビット数Ｍ（すなわち、そのサイズ）は、アプリケーションに依存する。出力記号のサイズもまた、アプリケーションに依存するが、チャネルにもまた依存し得る。例えば、一般的な入力ファイルが、複数のメガバイトのファイルである場合、その入力ファイルは、数千個、数万個または数十万個の入力記号に分割され、各入力記号は、数バイト、数十バイト、数百バイトまたは数千バイトである。
【００６１】
いくつかの場合において、出力記号値および入力記号値が同じサイズであれば（すなわち、同じ数のビットによって表現可能か、または同じアルファベットから選択される）、符号化プロセスは、簡略化され得る。そのような場合、出力記号をパケットに入れるのが望ましく、かつ各出力記号が限られたサイズのパケットに収まる必要がある場合のように、出力記号値サイズが限定されるとき、入力記号値サイズが限定される。キーについてのいくつかのデータが、受信器にてキーを回復するために送信される場合、好ましくは、出力記号は、値およびキーについてのデータが１つのパケットに収まるように十分に小さいものであり得る。
【００６２】
上記のように、多くの実施において入力記号の位置は一般に連続であるが、キーは連続ではない。例えば、入力ファイルが６０，０００個の入力記号にまで分割されたとすると、その入力記号の位置の範囲は、０から５９，９９９ある。上記実施のうちの１つにおいて、各キーはランダムな３２ビット数として独立に選択され、出力記号は、連続的に生成され、送信者が停止するまで送信され得る。ここで示すように、連鎖反応符号化は、６０，０００記号の入力ファイルが出力記号の任意の十分に大きな集合（６０，０００＋いくらかの増分Ａ）から再構築される。なお、これは、これらの出力記号が出力シーケンスのどこから取り出されるかに依存しない。
【００６３】
（基本デコーダ）
図４は、デコーダ１５５の１つの実施形態を詳細に示し、多くの部分が図２に示すエンコーダ１１５と共通である。デコーダ１５５は、値関数セレクタ２１０、重みセレクタ２１５、連想装置２２０、出力記号バッファ４０５、レジューサ（ｒｅｄｕｃｅｒ）４１５、再構築器４２０および再構築バッファ４２５を含む。エンコーダに関して、値関数セレクタ２１０および値関数の記述を格納するために割当てられる出力記号バッファ４０５中のスペースは、値関数がすべての出力記号に対して同じである場合、任意であり、使用しなくてもよい。再構築バッファ４２５のいくつかのエントリが図示され、ここでいくつかの入力記号が再構築され、他は依然未知である。例えば、図４において、位置０、２、５および６の入力記号が回復され、位置１、３および４の入力記号はまだ回復されない。
【００６４】
動作中、キーＩおよび値Ｂ（Ｉ）を有する受信された各出力記号に対して、デコーダ１５５は以下を行う。キーＩは、値関数セレクタ２１０、重みセレクタ２１５および連想装置２２０に与えられる。ＫおよびキーＩを使用して、重みセレクタ２１５は、重みＷ（Ｉ）を判定する。Ｋ、キーＩおよび重みＷ（Ｉ）を使用して、連想装置２２０は、出力記号に関連付けられた入力記号のＷ（Ｉ）個の位置のリストＡＬ（Ｉ）を生成する。必要に応じて、ＫおよびＩを使用して、値関数セレクタ２１０は、値関数Ｆ（Ｉ）を選択する。次に、Ｉ、Ｂ（Ｉ）、Ｗ（Ｉ）およびＡＬ（Ｉ）、および任意のＦ（Ｉ）は、出力記号バッファ４０５の行に格納される。値関数セレクタ２１０、重みセレクタ２１５および連想装置２２０は、エンコーダ１１５について記載したのと同じようにデコーダ１５５の動作を実行する。特に、図５における値関数セレクタ２１０、重みセレクタ２１５および連想装置２２０によって生成される値関数Ｆ（Ｉ）、重みＷ（Ｉ）およびリストＡＬ（Ｉ）は、図４に示す対応の部分と同じキーＩである。Ｋが入力ファイルごとに異なる場合、Ｋをメッセージヘッダに含むなどの任意の従来方法でエンコーダからデコーダへ通信され得る。
【００６５】
再構築器４２０は、出力記号バッファ４０５を走査して、重み１をもつ、すなわち、Ｗ（Ｉ）＝１およびＡＬ（Ｉ）がちょうど１つの関連位置をリストしている、格納された出力記号を探す。これらの記号は、本明細書中で「復号可能なセット」のメンバと呼ぶ。上記の性質を有する値関数に対して、重み１の出力記号は、復号可能なセットに含まれる。なぜなら、入力記号の値は、その出力記号から判定され得るからである。当然、入力記号が、１つの重みを有すること以外の条件下で復号されることが可能な値関数が使用されるならば、その条件を使用して、出力記号が復号可能なセットかどうかを判定し得る。明確にするために、ここで記載した例は、復号可能なセットが、重み１を有するこれらの出力記号であり、これらの例の、他の値関数復号可能条件への拡張は、この記載から明らかである。
【００６６】
再構築器４２０が復号可能なセットに含まれる出力記号を見つけた場合、その出力記号値Ｂ（Ｉ）および、必要に応じて、値関数Ｆ（Ｉ）を使用してＡＬ（Ｉ）にリストされた入力記号を再構築し、再構築された入力記号は、それらの入力記号に対する適切な位置で再構築バッファ４２５に配置される。表示された入力記号が既に再構築された場合、再構築器４２０は新たに再構築された入力記号を棄却するか、現存する再構築された入力記号を上書きするか、またはこの２つの入力記号を比較してそれらに違いがある場合は、誤差を発行し得る。値関数が関連付けすべてについてＸＯＲであるとき、入力記号値は単に出力記号値である。このように再構築器４２０は入力記号を再構築するが、復号可能なセット中の出力記号からのみ入力記号を再構築する。一旦復号可能なセットからの出力記号を使用して入力記号を再構築すると、それは、出力記号バッファ４０５のスペースを節約するために削除され得る。「使い古した」出力記号を削除することはまた、再構築器４２０が連続してその出力記号に再び訪れないことを確実にする。
【００６７】
まず、再構築器４２０は、復号可能なセットの１メンバである少なくとも１つの出力記号が受信されるまで待機する。一旦その出力記号を使用すると、復号可能なセットは再び空となる。ただし、他のいくつかの出力記号が、１つの再構築された入力記号およびもう１つ他の入力記号のみの関数であり得るという事実を除く。このように、復号可能なセットの１メンバから１つの入力記号を再構築することにより、他の出力記号が復号可能なセットに付加され得る。出力記号を復号可能なセットに付加するために低減するプロセスは、レジューサ４１５によって実行される。
【００６８】
レジューサ４１５は、出力記号バッファ４０５および再構築バッファ４２５を走査して、回復された入力記号の位置をリストするリストＡＬ（Ｉ）を有する出力記号を見つける。レジューサ４１５がキーＩを有する「低減可能な」出力記号を見つけた場合、レジューサ４１５は位置Ｒで回復された入力記号値ＩＳ（Ｒ）を得、そしてＢ（Ｉ）、Ｗ（Ｉ）およびＡＬ（Ｉ）を次のように変更する：
Ｂ（Ｉ）はＢ（Ｉ）  ＸＯＲ  ＩＳ（Ｒ）にリセットされる。
【００６９】
Ｗ（Ｉ）はＷ（Ｉ）−１にリセットされる。
【００７０】
ＡＬ（Ｉ）はＲを除くＡＬ（Ｉ）にリセットされる。
上の方程式では、値関数がすべての関連付けの値のＸＯＲであることが推定される。ＸＯＲは、その値関数自身の逆数であり、もしそうではなく、そして別の値関数が出力記号の計算に最初に用いられる場合には、その値関数の逆数がここでレジューサ４１５によって使用される。明白なように、１つより多くの関連付けの値が既知である場合、上記の方程式の等価物を計算してＢ（Ｉ）を、任意の未知の関連付けの値のみに依存するようにし得る（および、それに従ってＷ（Ｉ）およびＬ（Ｉ）を調整する）。
【００７１】
レジューサ４１５の作用は、出力記号バッファ４０５中の出力記号の重みを低減する。出力記号の重みが１に低減される場合（または、他の復号可能な条件が他の値関数に対して生じる場合）、その出力記号は、復号可能なセットの１メンバとなり、それは次に再構築器４２０によって作用され得る。実用においては、一旦十分な数の出力記号が受信されると、レジューサ４１５および再構築器４２０は、連鎖反応復号化を生成し、入力ファイルからのすべての入力記号が回復されるまで、再構築器４２０は復号可能なセットを復号してより多くの入力記号を回復し、レジューサ４１５はそれらの新しく受信された入力記号を使用してより多くの出力記号を低減し、それによりそれらを復号可能なセットに付加するなどする。
【００７２】
図４に示されるデコーダは、記憶装置、計算サイクルまたは送信時間をあまり考慮せずに、単純な方法で入力記号を再構築する。デコーダメモリ、複合化時間または送信時間（受信される出力記号の数を制限する）が限定される場合、デコーダは、それら限られたリソースをよりよく使用するために最適化され得る。
【００７３】
（より効率的なデコーダ）
図５は、デコーダ５００のより効率的な実施の好ましい実施形態を詳細に示す。ここで、値関数はＸＯＲであると仮定する。同様の実施が、ＸＯＲ以外の値関数に対して適用される。図５を参照して、デコーダ５００は、出力記号データ構造５０５（以下、ＯＳＤＳ５０５と呼ぶ）、入力記号データ構造５１０（以下、ＩＳＤＳ５１０と呼ぶ）、復号可能なセットスタック５１５（以下、ＤＳＳ５１５と呼ぶ）、受信オーガナイザ５２０、および回復プロセッサ５２５を含む。
【００７４】
ＯＳＤＳ５０５は、出力記号についての情報を格納するテーブルであり、ここでＯＳＤＳ５０５の行Ｒは、受信されたＲ番目の出力記号についての情報を格納する。変数Ｒは、受信された出力記号の数を追跡し、ゼロに初期化される。ＯＳＤＳ５０５は、各行に対してフィールドＫＥＹ、ＶＡＬＵＥ、ＷＥＩＧＨＴおよびＸＯＲ＿ＰＯＳを格納し、図示のフィールドは、列に組織化される。ＫＥＹフィールドは、出力記号のキーを格納する。ＶＡＬＵＥフィールドは、プロセス時に更新された出力記号値を格納する。最終的に入力記号の回復に使用されるすべての出力記号は、最終的に回復された入力記号値へと変更されるＶＡＬＵＥを有する。出力記号ＷＥＩＧＨＴフィールドは、出力記号の初期重みを格納する。出力記号のＷＥＩＧＨＴは、１になるまで経時的に低減され、そして入力記号を回復するために使用され得る。ＸＯＲ＿ＰＯＳフィールドは初めに出力記号の関連付けのすべての位置についてのＸＯＲを格納する。出力記号のＷＥＩＧＨＴが１になると、出力記号のＸＯＲ＿ＰＯＳは残る１つの関連付けの位置となる。
【００７５】
ＩＳＤＳ５１０は、入力記号についての情報を格納するテーブルであり、ここで行Ｐは、位置Ｐでの入力記号についての情報を格納する。各行に対して、ＩＳＤＳ５１０は最終的に、入力記号を回復するのに使用される出力記号のＯＳＤＳ５０５における行数となるＲＥＣ＿ＲＯＷフィールド、すべての値が「ｎｏ」に初期化され、入力記号が回復されたかどうかを示すＲＥＣ＿ＩＮＤフィールド、およびＲＬフィールド用の記憶装置を含む。入力記号が回復される場合、入力記号のＲＥＣ＿ＩＮＤは、「ｙｅｓ」に変更される。ＲＬ列は、すべてが「空リスト」値に初期化される。関連付けとして入力記号を有する出力記号が受信されるので、出力記号のＯＳＤＳ５０５における行数が、入力記号に対するＲＬリストに付加される。
【００７６】
ＤＳＳ５１５は、復号可能なセットについての情報を格納するスタックである。変数Ｓは、復号可能なセットのサイズを追跡し、それをゼロに初期化する。ＤＳＳ５１５において、列ＯＵＴ＿ＲＯＷは、出力記号のＯＳＤＳ５０５における行数を格納し、列ＩＮ＿ＰＯＳは、回復され得る入力記号のＩＳＤＳ５１０における位置を格納する。
【００７７】
１つの実施形態において、デコーダ５００は、以下のように、そして図６のフローチャートに示すように動作され、図６の対応するステップは、プロセスの説明において括弧で示す。まず、ＩＳＤＳ５１０は、上記のように初期化され、ＲおよびＳの両方がゼロに初期化される（６０５）。新たな出力記号が受信されると（６１０）、すなわち、キーＩおよび出力記号値Ｂ（Ｉ）、ＯＳＤＳ５０５においてＫＥＹ（Ｒ）がＩに設定され、ＶＡＬＵＥ（Ｒ）がＢ（Ｉ）に設定される（６１５）。次に、受信オーガナイザ５２０が呼び出されてＯＳＤＳ５０５の行Ｒに格納されたキーＩを有する受信された出力記号が処理される（６２０）。これは、図７のフローチャートに示すように、ＩＳＤＳ５１０に格納された情報を適切に使用して、情報をＯＳＤＳ５０５およびＤＳＳ５１５に付加するステップを含む。次に、Ｒを１だけインクリメントし（６２５）、次の出力記号をＯＳＤＳ５０５の次の行に格納させる。次に、回復プロセッサ５２５が呼び出され、復号可能なセット中の出力記号を処理し、新しい出力記号を復号可能なセットに付加する（６３０）。これは、図８ａおよび／または８ｂのフローチャートに示すように、ＩＳＤＳ５１０およびＯＳＤＳ５０５の一部を適切に使用および改変することによって、ＤＳＳ５１５に格納された復号可能なセットに付加および削除するステップを含む。デコーダ５００は、回復された入力記号の数を追跡し、この数がＫに達した場合、すなわち、すべての入力記号が回復された場合、デコーダ５００は、首尾よく終了し、そうでなければステップ６１０に戻り次の出力記号を受信する（６３５および６４０に示す）。
【００７８】
受信オーガナイザ５２０の動作を説明するフローチャートを図７に示す（図９から１２を参照）。値Ｂ（Ｉ）およびキーＩを有する出力記号が到着した場合、受信オーガナイザ５２０は、以下の動作を実行する（図７を参照）。重みＷ（Ｉ）は、ＩおよびＫから計算され（７０５）、関連付けの位置のリストＡＬ（Ｉ）は、Ｉ、Ｗ（Ｉ）、およびＫから計算される（７１０）。図１１〜１２は、Ｗ（Ｉ）の１計算の詳細を示し、図９〜１０は、ＡＬ（Ｉ）の１計算の詳細を示す。
【００７９】
再度図７を参照すると、ＸＬ（Ｉ）の値はＡＬ（Ｉ）上のすべての位置についてのＸＯＲとして計算される（７１５）。そうして、リストＡＬ（Ｉ）上の各位置Ｐに対して、入力記号Ｐが回復されない場合、すなわち、ＩＳＤＳ５１０においてＲＥＣ＿ＩＮＤ（Ｐ）＝「ｎｏ」の場合、Ｒは、ＩＳＤＳ５１０中のリストＲＬ（Ｐ）に付加され、そうでなく、入力記号Ｐが回復される場合、すなわち、ＩＳＤＳ５１０においてＲＥＣ＿ＩＮＤ（Ｐ）＝「ｙｅｓ」の場合、Ｗ（Ｉ）は１だけデクリメントされ、ＸＬ（Ｉ）はＸＬ（Ｉ）ＸＯＲＰに再設定される（７２０）。次に、ＯＳＤＳ５０５において、ＸＯＲ＿ＰＯＳ（Ｒ）はＸＬ（Ｉ）に設定され、ＷＥＩＧＨＴ（Ｒ）はＷ（Ｉ）に設定される（７２５）。次に、ＷＥＩＧＨＴ（Ｒ）は、１と比較される（７３０）。ＷＥＩＧＨＴ（Ｒ）が１に等しい場合、出力記号は、復号可能なセットに付加される、すなわち、ＤＳＳ５１５において、ＯＵＴ＿ＲＯＷ（Ｓ）はＲに設定され、ＩＮ＿ＰＯＳ（Ｓ）はＸＯＲ＿ＰＯＳ（Ｒ）に設定される。そして、Ｓの値が１だけインクリメントされる（７３５）。最後に、受信オーガナイザ５２０が戻る（７４０）。
【００８０】
図８ａに、図９〜１２を参照して回復プロセッサ５２５の１つの動作を記載するフローチャートを示す。その動作中、回復プロセッサ５２５はまず、復号可能なセットが空かどうか、すなわち、Ｓ＝０かどうかを確かめるためにチェックし、そうであればただちに呼び出し元へ帰る（８０５、８１０）。復号可能なセットが空でなければ、Ｓは１だけデクリメントされ（８１５）、出力記号の行番号Ｒ’および関連した入力記号の位置ＰをＤＳＳ５１５からロードする（８２０）。位置Ｐにおける入力記号が既に回復されていれば、すなわち、ＲＥＣ＿ＩＮＤ（Ｐ）＝「ｙｅｓ」のとき（８２５）、回復プロセッサ５２５はこの復号可能なセットの要素の処理を停止し、続いて次の要素を処理する。そうでなければ、ＯＳＤＳ５０５における行番号Ｒ’に格納された出力記号は、ＩＳＤＳ５１０上の位置Ｐにある入力記号の回復に使用され、これはＲＥＣ＿ＩＮＤ（Ｐ）を「ｙｅｓ」に、およびＲＥＣ＿ＲＯＷ（Ｐ）をＩＳＤＳ５１０のＲ’に設定することによって示される（８３０）。次に、出力記号の元のキー、ＯＳＤＳ５０５からのＫＥＹ（Ｒ’）、が元の重さＷ（Ｉ）および、キーの関連ＡＬ（Ｌ）の元のリストを計算するために（８４０，８４５）Ｉにロードされる（８３５）。
【００８１】
さらに、図８ａを参照して、位置Ｐにおける入力記号の回復値は、出力記号および入力記号を除く出力記号のすべての関連付けのＸＯＲとして計算される。これは、Ｐとは異なるＡＬ（Ｉ）上の全ての位置Ｐ’を考慮して計算される。ＩＳＤＳ５１０におけるＲＥＣ＿ＲＯＷ（Ｐ’）は、位置Ｐ’上の入力記号に対する回復値の行番号を格納し、ＯＳＤＳ５０５におけるＶＡＬＵＥ（ＲＥＣ＿ＲＯＷ（Ｐ’））はこの回復値である。この計算は図８ａの８５０で示されており、位置Ｐにおける入力記号に対する回復値はこの計算の最後で、ＶＡＬＵＥ（Ｒ’）＝ＶＡＬＵＥ（ＲＥＣ＿ＲＯＷ（Ｐ））において格納される。
【００８２】
図８ａに示された処理の変形例が、図８ｂに示される。ここで、各出力記号が処理される際に各出力記号に対してステップ８３０，８３５，８４０，８４５，および８５０を行う代わりに、Ｒ’およびＰの値は、後の処理用に、実行スケジュールに格納され得る（８６５）。延期された実行処理の例は図８ｃに示される。この変形例で、図６で示されたフローチャートは、ステップ６０５でＥをゼロに初期化することによって変更される。デコーダが受信記号は全体のファイルを復号するのに十分であると決定した後で、例えばステップ６４０ですべての入力記号が回復可能であることが既知となった後に、実行スケジュールの延期された処理が行われ得る。いくつかの場合、特に入力記号が大きいときは、スケジュールの実行は入力ファイル、またはその部分、が受信者側で必要とされるまで、延期され得る。
【００８３】
いずれの変形例においても、すなわち、図８ａまたは図８ｂのどちらかにおいて、ステップ８５５で、入力記号Ｐを関連付けとしてまだ有する出力記号は、入力記号が回復されたことを反映するように変更される。ＯＳＤＳ５０５におけるこれらの出力記号の行番号はＲＬ（Ｐ）に格納される。ＲＬ（Ｐ）の各行番号Ｒ”に対して、ＷＥＩＧＨＴ（Ｒ”）は１だけデクリメントし、ＯＳＤＳ５０５の行Ｒ”における出力記号の関連付けとして、位置Ｐにおける入力記号の削除を反映させるため、ＰをＸＯＲしてＸＯＲ＿ＰＯＳ（Ｒ”）にする。この変更によりＯＳＤＳ５０５の行Ｒ”における出力記号が重み１となる場合、すなわち、ＷＥＩＧＨＴ（Ｒ”）＝１のとき、この出力記号は、ＯＵＴ＿ＲＯＷ（Ｓ）をＲ”に、ＩＮ＿ＰＯＳ（Ｓ）をＸＯＲ＿ＰＯＳ（Ｒ”）に設定し、そしてＳを１だけインクリメントすることによって、復号可能なセットへと付加される。最後に、リストＲＬ（Ｐ）上の出力記号の行番号を格納するために使用されるスペースをフリースペースに戻し（８６０）、処理はステップ８０５に続く。
【００８４】
（連想装置の実施）
出力記号キーから関連する入力記号へのマッピング（すなわち、重みＷ（Ｉ）、およびキーＩに対する関連付けの位置のリストＡＬ（Ｉ）の決定）は、種々の形態をとり得る。Ｗ（Ｉ）は、同じキーＩに対してエンコーダおよびデコーダの両方によって同じ値（送信者および受信者のそれぞれにおいて）であるように選択されるべきである。同様に、ＡＬ（Ｉ）は、同じキーＩに対してエンコーダおよびデコーダの両方によって同じ位置のリストを含むように選択されるべきである。連想装置は、Ｉならびに通常Ｗ（Ｉ）およびＫからＡＬ（Ｉ）を計算または生成するオブジェクトである。
【００８５】
１つの実施形態において、Ｗ（Ｉ）およびＡＬ（Ｉ）は、ランダムプロセスを模倣するように設計された方法で判定される。エンコーダおよびデコータが同じキーに対して同じ結果を生成するという要件を満足するために、擬似ランダムシーケンスが、キーをシードにしてエンコーダおよびデコーダの両方によって生成され得る。擬似ランダムシーケンスの代わりに、本当のランダムシーケンスが、Ｗ（Ｉ）および／またはＡＬ（Ｉ）の生成のために使用され得るが、それが有用であるためには、Ｗ（Ｉ）およびＡＬ（Ｉ）を生成するために使用されたランダムシーケンスが受信者に通信される必要があり得る。
【００８６】
図４において示すデコーダにおいて、出力記号バッファ４０５は、関連付けの位置の各出力記号リストの記憶装置、すなわち列でラベルされたＡＬ（Ｉ）内に記憶装置を必要とする。図５に示すより効率的なデコーダは、この記憶装置を必要としない。なぜなら、関連付けの１リストは、例えば図９〜１０に示すように、必要に応じて再計算されるからである。これらの計算が必要に応じて速やかに行われ得る場合にのみ、記憶装置を節約するために毎回関連付けリストを再計算する際に利点がある。
【００８７】
連想装置２２０の好ましい実施形態が図９に示され、図１０に示すプロセスにしたがって動作する。この連想装置は、エンコーダおよびデコーダにおいて使用され得る。エンコーダは１回に１より多くのＡＬ（Ｉ）を格納する必要が通常ないので、エンコーダでのＡＬ（Ｉ）のための記憶装置にはあまり関心がないが、同じプロセスをエンコーダおよびデコーダの両方で使用して、ＡＬ（Ｉ）に対する値が両方の場所で確実に同じとなるようにすべきである。
【００８８】
連想装置２２０への入力は、キーＩ、入力記号数Ｋ、および重みＷ（Ｉ）である。出力は、キーＩを有する出力記号の関連付けのＷ（Ｉ）個の位置のリストＡＬ（Ｉ）である。図９において示すように、連想装置は、ランダムビットのテーブルＡＳＳＯＣ＿ＲＢＩＴＳ９０５および計算器ＡＳＳＯＣ＿ＣＡＬＣ９１０を含む。特定のＡＬ（Ｉ）が生成される前に、入力ファイルのサイズは、入力記号数が素数となるように調節される。このように、入力ファイルがＫ個の入力記号で開始する場合、Ｋより大きいかまたはＫに等しい最小素数Ｐが識別される。ＰがＫよりも大きい場合、Ｐ−Ｋ個のブランク（例えば、ゼロに設定される）入力記号が入力ファイルに付加され、ＫがＰに再設定される。この改変された入力ファイルに対して、関連付けの位置のリストＡＬ（Ｉ）は、図９および１０に示すように計算される。
【００８９】
この実施形態において、ＡＳＳＯＣ＿ＣＡＬＣ９１０は、以下に記載され、かつ図１０のフローチャートに示すように動作する。第１ステップは、キーＩ、入力記号数ＫおよびランダムビットＡＳＳＯＣ＿ＲＢＩＴＳ９０５のテーブルを使用して、Ｘが少なくとも１かつたかだかＫ−１であり、Ｙが少なくともゼロかつたかだかＫ−１である性質を有する２つの整数値ＸおよびＹを生成することである（１００５）。好ましくは、ＸおよびＹは、独立であり、それぞれの範囲内で一様分布する。次に、Ｗ（Ｉ）個のエントリを有する配列Ｖ［］が、ＡＬ（Ｉ）の記憶のために、そのメンバが計算される際に初期化される（１０１０）。Ｖ［］は、１つのリストに対する一時記憶装置にすぎないので、出力記号バッファ４０５（図４を参照）のＡＬ（Ｉ）列よりもずっと少ないメモリを占めるだけであり得る。Ｖ［０］（これは、リストＡＬ（Ｉ）の第１番目の要素）がＹに設定される（１０１５）。次に、１で始まりＷ（Ｉ）−１で終わるＪのすべての値に対して、Ｖ［Ｊ］の値は、ステップ１０２０〜１０５０に示すように、（Ｖ［Ｊ−１］＋Ｘ）  ｍｏｄ  Ｋに設定される。Ｋが素数であり、かつＷ（Ｉ）がたかだかＫであるので、Ｖ［］値のすべてが固有である。図示のように、「ｍｏｄ  Ｋ」演算は、簡単な比較および減算演算であり得る、すなわち、ステップ１０３５および１０４０。このように、所定の出力記号の関連付けの位置のリストを生成するプロセスは、非常に効率的である。
【００９０】
ＡＬ（Ｉ）を計算する上記アプローチの１つの利点は、関連付けの位置の分布に十分な変化を生成して、復号化アルゴリズムを、Ｗ（Ｉ）を選択するための良好な手順と合わされる場合、高い確率かつ最小の受信オーバーヘッドで動作させることを確実にする（すなわち、入力ファイルは、Ｋ個よりわずかに多い出力記号を受信した後、回復される。ここで入力記号および出力記号は同じ長さとする）。
【００９１】
（重みセレクタ実施例）
エンコーダ／デコーダの性能および効率は、重みの分布に依存し、いくつかの分布は、他の分布より良好である。重み選択の動作の局面を以下に議論し、その後いくつかの重要な重み分布を説明する。図１１のブロック図および図１２のフローチャートを使用してこれらの概念を例示する。
【００９２】
図１１に示すように、重みセレクタは、２つのプロセスＷＴ＿ＩＮＩＴ１１０５およびＷＴ＿ＣＡＬＣ１１１０、ならびに２つのテーブルＷＴ＿ＲＢＩＴＳ１１１５およびＷＴ＿ＤＩＳＴＲＩＢ１１２０を含む。プロセスＷＴ＿ＩＮＩＴ１１０５は、第１のキーが通過してテーブルＷＴ＿ＤＩＳＴＲＩＢ１１２０を初期化した場合に１度だけ呼び出される。ＷＴ＿ＤＩＳＴＲＩＢ１１２０の設計は、システムの重要な局面であり、後でずっとより詳細に考察される。プロセスＷＴ＿ＣＡＬＣ１１１０は、各呼び出しごとに呼び出されて、キーＩに基づいて重みＷ（Ｉ）を生成する。図１２のフローチャートに示すように、ＷＴ＿ＣＡＬＣ１１１０は、キーおよびテーブルＷＴ＿ＲＢＩＴＳに格納されたランダムビットを使用して、乱数Ｒを生成する（１２０５）。次に、Ｒの値を使用して、テーブルＷＴ＿ＤＩＳＴＲＩＢ１１２０における行番号Ｌを選択する。
【００９３】
図１１に示すように、ＷＴ＿ＤＩＳＴＲＩＢ１１２０のＲＡＮＧＥ列におけるエントリは、値ＭＡＸ＿ＶＡＬで終了する正の整数の増加シーケンスである。Ｒに対する可能な値のセットは、ゼロおよびＭＡＸ＿ＶＡＬ−１との間の整数である。所望の性質は、Ｒが、可能な値の範囲においてどの値になるのも等しく確からしいことである。Ｌの値は、ＲＡＮＧＥ（Ｌ−１）≦Ｒ＜ＲＡＮＧＥ（Ｌ）を満足するＬを見つけるまでＲＡＮＧＥ列を検索することによって決定される（１２１０）。一旦Ｌが見つかると、Ｗ（Ｉ）の値がＷＴ（Ｌ）に設定され、これは戻された重みである（１２１５、１２２０）。図１１において、図示のテーブル例に対して、Ｒが３８，５００に等しい場合、Ｌが４であることが分かり、したがって、Ｗ（Ｉ）はＷＴ（４）＝８に設定される。
【００９４】
重みセレクタおよび連想装置を実施する他の変形例は、Ｉを擬似ランダムに生成し、ＩからＷ（Ｉ）およびＡＬ（Ｉ）を直接生成するステップを含む。明らかなように、Ｗ（Ｉ）は、ＡＬ（Ｉ）を調べることによって決定され得る。なぜなら、Ｗ（Ｉ）は、ＡＬ（Ｉ）における関連付けの数に等しいからである。この説明から、Ｗ（Ｉ）個の値を生成する多くの他の方法は、説明したばかりのシステムと等価であり、ＷＴ＿ＤＩＳＴＲＩＢによって規定される分布を有する１セットのＷ（Ｉ）値を生成するということが明らかである。
【００９５】
（別のデコーダ）
この開示を読むと、受信器は、上記の実施例よりも効率的に動作し得ることが当業者に明らかである。例えば、受信器は、パケットをバッファし、１群のパケットが到着したときだけ回復ルールを適用すればより効率的であり得る。この改変は、後の不必要な動作を行う際にかかる計算時間を低減し、コンテクストスイッチングによるオーバーヘッドを低減する。特に、デコーダは、少なくともＫ個の出力記号（同じサイズの入力記号および出力記号を仮定する）がＫ個のパケット単位（１つのパケット毎に１つの記号を仮定する）で到着する前に、Ｋ個の入力記号の元のファイルを回復することは望めないので、復号化プロセスを開始する前に少なくともＫ個のパケットが到着するまで待機することが有益であり得る。
【００９６】
図１３は、上記の概念を含み、図６のデコーダによって使用されるプロセスの改変例である復号化の異なる方法を示す。２つの方法間の主な違いは、図１３の方法が１３１５に示すように、バッチ単位で出力記号を受信することである。第１のバッチのサイズはＫ＋Ａであるように設定され、ここで、Ａは、入力記号数Ｋの小さな部分である（１３１０）。第１の出力記号のバッチが受信された後で、出力記号は、出力記号を処理するために受信オーガナイザ５２０を使用するステップ（１３４０）と、復号可能なセットを処理し、重み１に低減された重みを有する出力記号から入力記号を回復するために回復プロセッサ５２５を使用するステップ（１３５０）とを組み合わせて、前記のように処理される。Ｋ個の入力記号すべての回復が、Ｋ＋Ａ個の出力記号の第１のバッチを使用して達成できない場合、Ｇ個の出力記号のさらなるバッチが、すべての入力ファイルが回復されるまで受信および処理される。
【００９７】
デコーダの補助データ構造に必要な記憶装置をできるだけ低減することは、利点である。すでに説明したように、各出力記号に対する関連付けのリストのための記憶装置は必要でない、なぜなら、必要に応じて、連想装置２２０を使用して、それらのリストを速やかに計算し得るからである。まだ回復されない入力記号の各々に対して、関連付けとして入力記号を有する出力記号のＯＳＤＳ５０５における行番号を格納するために別の記憶装置が必要である。すなわち、図５のテーブルＩＳＤＳ５１０におけるＲＬ列に示されるリストのためのスペースが必要である。図８のステップ８５５においてすでに説明したように、この格納を使用すると、所定の入力記号が再構築された場合、どの出力記号が低減可能かを速やかに識別し得る。それが効率良くなされなければ、これらのリストに必要な記憶装置は、すべての入力記号を回復するために使用されるすべての出力記号の関連付けの総数に比例し得る。
【００９８】
（予めソートするデコーダ）
次に、図１４および１５を参照して、デコーダのより好ましい実施形態を説明する。図１４は、デコーダを構成する部分を示す。それらは、図５に示すものと同じであるが、ただし、テーブルＷＥＩＧＨＴ  ＳＯＲＴ１４０５および図８ｂにおいて説明されるように形成された実行スケジュールを格納するために使用されるＥＸＥＣＵＴＩＯＮ  ＬＩＳＴ１４２０が追加される点で異なる。出力記号のＯＳＤＳ５０５における行番号のバッチを格納するために、テーブルＷＥＩＧＨＴ  ＳＯＲＴが使用され、それらは受信される際に、重みの昇順で格納される。ＷＴ＿ＶＡＬ列を使用して、重みを格納し、ＲＯＷ＿ＬＩＳＴ列を使用して、ＯＳＤＳ５０５における出力記号の行番号を格納する。一般に、重みＷＴ＿ＶＡＬ（Ｌ）を有するすべての出力記号の行番号は、ＲＯＷ＿ＬＩＳＴ（Ｌ）に格納される。このテーブルを使用して、図１５のステップ１５２０に示すように、重みの昇順で出力記号のバッチを処理する。重みが低い出力記号は、入力記号を回復するためにそれほど集中して計算に使用せず、出力記号の重みが大きいほど、それらの関連付けのほとんどがただちに回復されるということがあり得る。したがって、それは、リンク記憶装置スペース（デコーダは、回復された入力リンクによって使用されるスペースを回復し得、処理中の出力記号はまだ未回復のわずかな関連付けを有する）を実質的に節約する。
【００９９】
出力記号を適切なサイズのバッチで重みの昇順に処理することは、メモリ要件および処理要件を下げる。
【０１００】
図１５に示すように、Ｋ個よりわずかに多い出力記号（図ではＫ＋Ａ個の出力記号によって示す）は、いずれの処理の開始よりも前に到着することが許される（１５１５）。ここで、パケット毎に１つの出力記号、入力ファイルにおける同じサイズの入力記号および出力記号、ならびにＫ個の入力記号を仮定する。初めに、デコーダは、Ｋ＋Ａ個の出力記号の受信を単に待機する。なぜなら、デコーダは、Ｋ＋Ａ個の出力記号より少ない出力記号から入力ファイルをどうしても回復し得ないと予想でき、おそらくＫ個より少ない出力記号から任意の入力ファイルを回復し得ない。実用上は、５・√ＫがＡに対して良好な値であることが分かった。
【０１０１】
受信された出力記号のＯＳＤＳ５０５における行番号は、図１４のテーブルＷＥＩＧＨＴ  ＳＯＲＴ１４０５において重みの昇順で格納される（図１５のステップ１５１５）。Ｔが、そのときの１とＴとの間のＬの値に対する可能な出力記号の重みの数である場合、リストＲＯＷ＿ＬＩＳＴ（Ｌ）は、重みＷＴ＿ＶＡＬ（Ｌ）のすべての受信された出力記号を含み、ここで１＝ＷＴ＿ＶＡＬ（１）＜ＷＴ＿ＶＡＬ（２）＜ＷＴ＿ＶＡＬ（３）＜．．．＜ＷＴ＿ＶＡＬ（Ｔ）であり、かつＷＴ＿ＶＡＬ（Ｔ）が任意の出力記号の最大の重みである。次に、ステップ１５２０に示すように、図１５に示すデコータの動作の残りは、図１３に示すデコーダとまったく同じであるが、ただし、出力記号が重みの昇順で処理されることを除く。
【０１０２】
通常、Ｋ＋Ａ個の出力記号は、すべての入力記号を回復するのに十分であり得る。しかし、Ｋ＋Ａ個のパケットの数セットは、すべての入力記号を回復するのに十分でないことがある。そのような場合、Ｇ個のさらなる出力記号のバッチが、受信され、そしてすべての入力記号が回復されるまで処理される。Ｇに対する良好な設定は、√Ｋである。
【０１０３】
図１６〜１９は、図１５において記載するプロセスの実行例の１スナップショットを示す。この例において、６個の出力記号が図１６において矢印つきの線で示す関連付けとともに受信されている。まず、
【０１０４】
【数１】
2005117633.tif 000003
を有する出力記号が、図１７に示すようにＯＳＤＳ５０５に受信および格納される。ＯＳＤＳ５０５における行番号は、図１８に示すように、出力記号の重みに対応する行においてＲＯＷ＿ＬＩＳＴ中に格納される。重み１の出力記号は、ＯＳＤＳ５０５の行０、行１および行３にある。このように、ＲＯＷ＿ＬＩＳＴ（０）は、重みＷＴ＿ＶＡＬ（０）＝１を有する出力記号に対応し、図１８に示すように、行番号０、１および３を含む。同様に、ＲＯＷ＿ＬＩＳＴ（１）は４および５を含み、ＲＯＷ＿ＬＩＳＴ（３）は２を含む。
【０１０５】
プロセスのこの時点で、重み昇順にした最初の５つの出力記号が処理されており、ＯＳＤＳ５０５の行２における第６の出力記号は、受信オーガナイザ５２０によって処理されており、この第６の出力記号が回復プロセッサ５２５によってちょうど処理されるところである。行０、１、３および５における出力記号が、スケジュールにすでに付加され、それぞれ位置０、３、２および１で最終的に入力記号を回復する。ＯＳＤＳ５０５の行４における出力記号は、まだ回復されてない位置４および５において２つの関連付けを有し、したがって、ＩＳＤＳ５１０における位置４および５からＯＳＤＳ５０５における行４に戻るリンクが存在する。ＯＳＤＳ５０５の行２における出力記号は、位置０、１，３および５において４つの関連付けを有する。位置０、１および３における３つの関連付けは、回復されたものとしてすでにマークされており、したがって、そこから行２に戻るリンクは存在しない（それにより、この出力記号の重みが４から１に低減され、このことは、一旦回復プロセッサ５２５が実行されると位置４および５における残りの入力記号の回復をトリガする）。位置５における関連付けは回復されず、したがって受信オーガナイザ５２０は、ＩＳＤＳ５１０における位置５からＯＳＤＳ５０５における行２へのリンクを付与する。これはすべて、図１７に示される。このように、プロセスのこの時点で、入力記号から、それらを関連付けとして有する出力記号へ戻る全部で３つのリンクだけが使用される。これは、あらゆる入力記号から、それを関連付けとして有するあらゆる出力記号へのリンクを使用する単純な実施例に遜色がない。この例において、このようなリンクが１１可能である。
【０１０６】
一般に、リンク用の格納スペースの節約が、図１３に記載したプロセスよりも図１４および１５において記載したプロセスを使用する場合、劇的に低減する。例えば、入力記号数が５０，０００の場合、スペースの節約は、一般にリンクスペースにおいて１０〜１５倍である。この低減の理由は、重みのより小さい出力記号は、プロセスの終了時より開始時に入力記号を回復する可能性がより大きく、重みのより大きな出力記号は、プロセスの開始時より終了時に出力記号を回復する可能性がずっとより大きい。したがって、重みの昇順で出力記号を処理することは意味のあることである。図１３よりも図１４および１５に記載するプロセスのさらなる利点は、復号化が一般に３０％〜４０％速くなることである。これは、重みのより小さい出力記号が、重みのより大きい出力記号よりも、入力記号を回復するために使用される可能性が大きく（なぜなら、重みのより小さい出力記号が先に考慮されるからである）、かつ特定の入力記号を回復するコストは、それを回復するために使用される出力記号の重みに直接依存するからである。
【０１０７】
（重み分布の選択）
重要な最適化は、入力ファイルをできるだけ少ない出力記号を用いて完全に再構築し得るように符号化プロセスを設計することである。この最適化は、送信時間および帯域幅がコスト高または制限される場合、または入力ファイルが、さらなる出力記号を待つことなく速やかに復号化されなければならない場合、役に立つ。一般に、入力ファイルの再構築に必要な十分な出力記号数は、元の入力ファイルにおける入力記号数よりもわずかに大きい（同じサイズの入力記号および出力記号を仮定する）。入力ファイルよりも少ないビットを受信した場合、任意の入力ファイルは回復され得ないことを示し得る。したがって、完全な符号化スキームは、入力ファイルと同じビット数を符号化する任意の出力記号のセットから入力ファイルを回復することが可能であり得、符号化効率の１つの尺度は、予期される条件下で必要な予備のビットがどれくらい少ないかである。
【０１０８】
図５に示すデコーダにおいて、最大効率は、デコーダがちょうどＫ個の出力記号を受信した後で回復プロセッサ５２５が最後の未知の入力記号を回復する場合に得られる。Ｋ個より多い出力記号が、すべての入力記号が回復され得る時間までにデコーダによって受信されるならば、入力ファイルの回復に必要でない、または使用されない出力記号が受信される。最大効率が良好である間、それを目標とすることは、再構築が完全になる前にＤＳＳ５１５が空になり得る危険によって調節されるべきである。言い換えると、最大効率において、復号可能なセットのサイズは、ちょうど再構築が終了する際にゼロとなるが、符号化／復号化は、復号可能なセットのサイズが再構築の終了前にゼロとなるわずかの確率しかないように、Ｋ＋Ａ個の出力記号を使用して調整されるべきであり、そのためＧ個の出力記号のさらなるセットは必要でない。
【０１０９】
この点を図２０に例示する。この図は、復号可能なセットのサイズ対再構築された入力記号数のプロットを示す。ここで、デコーダは、以下に記載の理想の分布に対して、Ｋ＋Ａ個の出力記号を用いて動作する。この例において、Ａ＝０、すなわち、Ｋ個の入力記号のすべてを復号するために、受信された出力記号数は、可能な数の最小数である（入力記号および出力記号は同じサイズと仮定する）。理解すべきことは、そのプロットが、重みおよび関連付けを決定するための任意の所定関数に対して異なり、またどの特定の出力記号を受信したかに依存して異なり得ることである。そのプロットにおいて、復号可能なセットサイズの予想サイズは、最初は１であり、回復プロセスを通して１を維持する。このように、予想される挙動においては、次の入力記号を回復するために使用され得る、復号可能なセットにおける１つの出力記号が常に存在する。図２０はまた、理想の分布の実際の挙動の例を示す。この実際の実行において、復号可能なセットは、回復が完了する前は、空であることに留意されたい。理想の分布の実際の挙動は、一般的である、すなわち、理想の分布に対して、ランダムなゆらぎはほとんど常に、すべての入力記号が回復される前に復号可能なセットを空にし、このため、以下に記載のように、よりロバストな分布が必要である。
【０１１０】
効率は、ＸＯＲ値関数の場合で、１つのみの関連する入力記号を有する、復号可能なセットメンバがすでに再構築されている入力記号を、関連付けとして有する回数を限定することによって、向上される。これは、Ｗ（Ｉ）を生成するための関数を適切に選択することによって達成され得る。
【０１１１】
このように、十分な出力記号を受信することによって、入力ファイルを任意の所望の確実度で完全に回復することが可能である一方で、Ａの何らかの小さい値に対してＫ＋Ａ個程度に少ない出力記号（入力記号および出力記号は同じサイズと仮定する）を用いて完全な入力ファイルを含むＫ個の入力記号を回復する確率が高くなるように連鎖反応符号化通信システムを設計することが好ましい。Ａの最小値がゼロであり、リード−ソロモン符号化などのいくつかの符号化スキームにおいて達成され得るが、Ａとして何らかの小さい非ゼロ値を許容することによって、改善された通信システムが得られ得る。
【０１１２】
小さい値のＡは、出力記号に対する重み分布（すなわち、すべてのＩについてのＷ（Ｉ）の分布）、および出力記号についての関連付けの分布（すなわち、すべてのＩについてのＡＬ（Ｉ）のメンバーシップ）を決定するための適切な分布を使用することによって、連鎖反応符号化において達成され得る。強調すべきことは、復号化プロセスが重み分布および関連付けの選択についての分布にかかわらず適用され得るが、好ましい実施形態は、重み分布および特に最適に近い性能として選択された関連付けの選択についての分布を使用し得ることである。実際、選択した分布の小さな変化によって性能はほんのわずかしか変化し得ないので、多くの分布が良好に機能し得る。
【０１１３】
１つの好ましい実施形態による分布を決定するための方法論をここで説明する。使用される実際の重み分布は、理想の数学的分布に基づく。理想の重み分布において、重みＷ（Ｉ）は、「理想」の確率分布にしたがって選択される。最小の重みは１であり、最大の重みはＫである。ここで、Ｋは、入力記号数である。理想の分布において、ｉの値に等しい重みが以下の確率ｐを用いて選択される：
ｉ＝１の場合、ｐ＝１／Ｋ；および
ｉ＝２，．．．，Ｋの場合、ｐ＝１／（ｉ（ｉ−１））
一旦重みＷ（Ｉ）が選択されると、Ｗ（Ｉ）個の関連付けられた入力記号のリストＡＬ（Ｉ）がランダムに（必要ならば、擬似ランダムに）独立かつ均一に選択され、選択された関連付けの全てが確実に異なるようにする。このように、第１の関連付けは、Ｋ個の入力記号からランダムに選択される（各入力記号は、選択される確率が１／Ｋである）。次に、第２の関連付け（Ｗ＞１の場合）は、残りのＫ−１個の記号からランダムに選択される。上記の重み確率分布は、システムが予想通り正確に挙動するならば、正確にＫ個の出力記号がすべての入力記号を復号および回復するのに十分であり得るという性質を有する。理想の分布に対するこの予想される挙動は、図２０において実線で示される。しかし、重みおよび関連付けの選択のランダム性質のために、かつ出力記号の任意のセットが復号化プロセスにおいて使用されるために、プロセスは、必ずしもそのように挙動し得ない。理想の分布に対する実際の挙動の例を図２０において点線で示す。このように、理想の重み分布は、実用上はいくらか改変されなければならない。
【０１１４】
一般に、所定の設定に対する最良のパラメータは、コンピュータシミュレーションによって見つけられ得る。しかし、理想の重み分布に関する簡単な変形例は、効果的なオプションである。この簡単な変形例において、理想の重み分布は、重み１を有する出力記号および大きな重みを有する出力記号の確率を上げることによってわずかに改変されて、Ｋ＋Ａ個の出力記号が処理される前に復号可能なセットが空になる確率を低減する。重み１を有する出力記号を余分に供給すると、回復プロセスが入力記号の回復の終了近くになるまで、そのプロセスが重み１の出力記号を使い果たす（すなわち、復号可能なセットを空にする）確率を低減する。大きな重みの出力記号を余分に供給すると、回復プロセスの終了近くで、各々まだ回復されない入力記号に対して、その固有である残りの関連付けとして入力記号を有し、少なくとも１つの出力記号が存在する確率を増加する。
【０１１５】
より詳細には、改変された重み分布は以下の通りである：
ｉ＝１の場合、ｐ＝ｎ・Ｒ１／Ｋ；
ｉ＝２，．．．，（Ｋ／Ｒ２−１）の場合、ｐ＝ｎ／（ｉ（ｉ−１）（１−ｉＲ２／Ｋ））；および
ｉ＝Ｋ／Ｒ２，．．．，Ｋの場合、ｐ＝ｎ・ＨＷ（ｉ）
ここで、Ｋは入力記号数であり、Ｒ１およびＲ２は調節可能なパラメータ、ならびにｎはｐ値のすべての合計が１となるように使用される正規化因子である。
【０１１６】
ＨＷ（ｉ）ならびにＲ１およびＲ２としてサンプル値の計算を、添付書類Ａにおいて詳細に示す。添付書類Ａは、重み分布を実施するプログラムのソースコードリストである。そこで、Ｃ＋＋の記号ｎＳｔａｒｔＲｉｐｐｌｅＳｉｚｅ、ｎＲｉｐｐｌｅＴａｒｇｅｔＳｉｚｅおよびｎＳｙｍｂｏｌｓは、それぞれ上記式のＲ１、Ｒ２およびＫに対応する。
【０１１７】
この改変された分布は、理想の数学的重み分布に同様であり、重み１およびさらに大きな重みを有するさらに多くの出力記号、ならびにそれにしたがって再設計された分布を有する。改変された分布において示されるように、Ｒ１は、重み１の記号の複数の増加した確率を決定するのと同様に、重み１の出力記号の初期の割合を決定し、Ｒ２は、「より大きな」重みと「それほど大きくない」重みとの間の境界を決定する。
【０１１８】
Ｒ１およびＲ２に対する良好な選択は、一般にＫに依存し、経験的に決定され得る。例えば、Ｒ１を１．４×（Ｋの平方根）に等しくし、Ｒ２を２＋２×（Ｋの四乗根）に等しくすると、実用上うまくいく。したがって、Ｋ＝４０００の場合、Ｒ１＝８９およびＲ２＝１８に設定するとうまくいく。Ｋが６４０００の場合、Ｒ１＝３５４およびＲ２＝３４に設定するとうまくいく。Ｒ１およびＲ２のより詳細な計算を、添付書類Ａに示す。図２１は、この分布の予想される挙動が、回復プロセス全体にわたって復号可能なセットを適度に大きくしたままにするので、実際の実行下では、予想される挙動からのランダムなゆらぎは、すべての入力記号が回復される前に復号可能なセットを空にする見込みはない。
【０１１９】
上記の再構築プロセスは、トルネード符号に対して使用されるものと同様であるが、符号を形成するために使用される異なるプロセスによって、極端に異なる効果を生じる。特に、上記のように、連鎖反応符号化に必要なメモリは、トルネード符号に必要なメモリよりも著しく小さく、種々の状況における連鎖反応符号化の使用の容易さは、いくらかのスピードを犠牲にする可能性はあるが、トルネード符号のそれをはるかに超える。そのプロセスの基礎をなす数学的詳細は、以下により詳細に説明される。
【０１２０】
（いくつかの連鎖反応符号の性質）
生成され、そしてチャネルを介して送信される出力記号の数は、他の符号化スキームと同様に、連鎖反応符号化を用いても制限されない。なぜなら、キーは、入力記号に対して１対１対応を有する必要がなく、Ｉの異なる値の数は、入力記号の割合に制限されないからである。したがって、復号可能セットが、入力ファイルが再構築される前に空になる場合でさえ、復号プロセスが失敗しない可能性がある。なぜなら、デコーダが、必要とされるより多くの出力記号を集めて、重み１の出力記号を少なくともさらに１つ得ることができるからである。その重み１の出力記号が受信されると、それは、復号可能なセットに置かれ、連鎖反応効果によって、前に受信された出力記号を重み１に低減させ得るので、それらは入力記号の再構築のために使用され得る。
【０１２１】
上記の例のほとんどにおいて、入力および出力記号は、同じ数のビットとして符号化し、各出力記号は、１つのパケットに配置される（１パケットは、送信の１単位であり、完全に受信されるか、または完全に損失される）。いくつかの実施形態において、通信システムは、各パケットが数個の出力記号を含むように改変される。次に、出力記号値のサイズは、多くのファクタに基づいて、最初にファイルを入力記号に分割した際の入力記号値のサイズによって決定されるサイズに設定される。符号化プロセスは、実質的に変更されないままである。ただし、出力記号が、各パケットが受信される際に、ひとまとまりで到着することを除く。
【０１２２】
入力記号および出力記号サイズの設定は、通常、ファイルのサイズおよび出力記号が送信される通信システムによって決定される。例えば、通信システムは、データのビットを規定サイズのパケットにグループ化するか、または他の方法でビットをグループ化する場合、記号サイズの設計は、パケットまたはグループ化サイズから開始される。そこから、設計者は、何個の出力記号を１つのパケットまたはグループで送信し、かつ出力記号サイズを決定し得る。簡単のために、設計者は、おそらく入力記号サイズを出力記号サイズと等しくなるように設定し得るが、入力データが異なる入力記号サイズをより便利にする場合は、それが使用され得る。
【０１２３】
入力記号サイズを決定する際の別のファクタは、入力記号数Ｋが受信オーバーヘッドを最小に保つために十分大きくなるように入力記号サイズを選択することである。例えば、Ｋ＝１０，０００にすると、平均の受信オーバーヘッドが、５％〜１０％の適度なゆらぎを有するようになり、他方Ｋ＝８０，０００にすると、平均の受信オーバーヘッドは１％〜２％で、そのゆらぎが非常に小さくなる。例として、Ｋ＝８０，０００で１，０００，０００回の試行を含む１つのテストにおいて、受信オーバーヘッドは、４％を決して超えなかった。
【０１２４】
上記符号化プロセスは、元のファイルに基づき、出力記号を含むパケットの１ストリームを生成する。出力記号は、ファイルの符号化形態またはより簡潔には符号化ファイルを保持する。ストリーム中の各出力記号は、他のすべての出力記号と独立して生成され、生成され得る出力記号の数には下限および上限がない。キーは、各出力記号に関連付けられる。そのキーおよび入力ファイルの内いくつかの内容は、出力記号の値を決定する。連続生成された出力記号は、連続するキーを有する必要はなく、いくつかのアプリケーションにおいては、キーのシーケンスをランダムに生成するか、またはシーケンスを擬似ランダムに生成することが好ましくあり得る。
【０１２５】
連鎖反応符号化は、元のファイルがＫ個の等サイズの入力記号に分割され得、かつ各出力記号値が入力記号値と同じ長さを有する場合に、そのファイルが平均でＫ＋Ａ個の出力記号から回復され得る（ここでＡはＫに比較して小さい）という性質を有する。例えば、Ａは、Ｋ＝１０，０００の場合５００であり得る。特定の出力記号がランダムまたは擬似ランダムな順序で生成され、かつ送信中の特定の出力記号の損失が任意に仮定されるので、入力ファイルを回復するために必要な出力記号の実際の数にはいくらかの小さなばらつきが存在する。Ｋ＋Ａ個のパケットの特定の集合パケットが、入力ファイル全体を復号するのに十分でないようないくつかの場合において、受信器が１つ以上の出力パケットのソースからより多くのパケットを集め得る場合は、入力ファイルは、依然として回復可能である。
【０１２６】
出力記号の数は、Ｉの解像度によってのみ制限されるので、Ｋ＋Ａ個より十分に多くの出力記号が生成され得るべきである。例えば、Ｉが３２ビット数である場合、四十億個の異なる出力記号が生成され得る。他方、そのファイルは、Ｋ＝５０，０００個の入力記号を含み得る。実用上は、これら四十億個の出力記号のうちのほんのわずかな個数だけが生成および送信され得、そして入力ファイルが、可能の出力記号の非常に小さな割合を用いて回復され得ることがほぼ確実であり、そして入力ファイルが、Ｋ個よりわずかに多くの出力記号を用いて回復され得る可能性は非常に高い（入力記号サイズは、出力記号サイズと同じであると仮定する）。
【０１２７】
各出力記号を生成するために必要な算術演算の平均数は、ｌｏｇＫに比例し、そのため、入力ファイルを復号および回復するために必要な算術演算の総数は、ＫｌｏｇＫに比例する。上に示すように、入力ファイルを格納するために必要なメモリよりもほんのわずかに多くのメモリを使用する効率的な復号化プロセスが存在する（一般に、約１５％多い）。上記の数は、従来から公知の符号化技術と比較して演算および記憶装置において著しい減少を示す。
【０１２８】
例えば、リード−ソロモン符号は、通信アプリケーションのための標準的な符号である。リード−ソロモン符号を用いると、連鎖反応符号化を用いるように、入力ファイルはＫ個の入力記号に分割されるが、リード−ソロモン符号におけるそのＫ個の入力記号は、Ｎ個の出力記号に符号化される。ここで、Ｎは一般に、符号化プロセスが開始する前に固定される。これは、出力記号の不確定数を考慮する本発明と対照的である。
【０１２９】
出力記号の不確定数を有する１つの利点は、受信者が予想より多くの出力記号を逸する場合、不十分なチャネルによるか、またはいくつかの出力記号がすでに通過した後で開始する受信者により、受信者は、単に少し長く受信し、より多くの出力記号を取り上げ得ることである。別の利点は、受信者が複数のエンコーダから生成される出力記号を集め得るので、各エンコーダは、Ｋ個の出力記号のほんの小さな割合だけを提供する必要があり、１つのエンコーダからの記号の数は、どれだけのエンコーダが出力記号を受信者に供給しているかに依存し得ることである。
【０１３０】
リード−ソロモン符号はまた、符号化および復号化の両方について、連鎖反応符号より実質的に多くの時間を必要とする。例えば、リード−ソロモンを用いて各出力記号を生成するために必要な算術演算の数は、Ｋに比例する。リード−ソロモン符号を復号化するために必要な算術演算の数は、どの出力記号が受信者に到着したかに依存するが、一般に、そのような演算の数は、Ｋ２に比例する。このように、実用上は、ＫおよびＮの許容値は、非常に小さく、数十のオーダー、おそらくわずか数百までのオーダーである。例えば、クロス−インターリーブ（Ｃｒｏｓｓ−Ｉｎｔｅｒｌｅａｖｅｄ）リード−ソロモン符号は、コンパクトディスク（ＣＤ）およびＣＤ−ＲＯＭ上で使用される。ＣＤの場合、１つの標準的な符号はＫ＝２４およびＮ＝２８を使用し、別の標準的な符号はＫ＝２８およびＮ＝３２を使用する。ＣＤ−ＲＯＭの場合、１つの標準的な符号はＫ＝２４およびＮ＝２６を使用し、別の標準的な符号はＫ＝４３およびＮ＝４５を使用する。ＭＰＥＧファイル（ＭＰＥＧは、ビデオおよびオーディオストリームのためのファイルフォーマットである）の衛星送信のために使用される標準的なリード−ソロモン符号は、Ｋ＝１８８およびＮ＝２０４を使用し、一般に、このような大きな値は、専用のハードウェアを必要とする。
【０１３１】
ｃＫｌｏｇＫ時間での符号化およびｃ’Ｋ（ｌｏｇＫ）２時間での復号化を可能にするリード−ソロモン符号のより高速な実施例が存在することが公知であるが、ｃおよびｃ’が過度に大きな定数であるので、Ｋの非常に大きな値以外全てに対しては、これらの実施例はリード−ソロモン符号の他の実施例よりも遅くなる。すなわち、数千または数万のＫの値に対して有効なクロスオーバーポイントが存在する。したがって、クロスオーバーポイントより下のＫの値の場合、リード−ソロモン符号の他の実施例は、より高速である。そのより高速な実施例は、クロスオーバーポイントより高いＫの値の他の実施例よりも高速であるが、そのより高速な実施例は、Ｋのそれらの値で連鎖反応符号よりも数桁遅い。
【０１３２】
その速度制限のために、リード−ソロモン符号に対しては、一般に、小さい値のＫおよびＮだけが実現可能である。したがって、大きなファイルに関してそれらを使用することにより、そのファイルを多くのサブファイルに分割し、各サブファイルを別々に符号化することを必要とする。そのような分割は、符号の有効性を低減し、送信中のパケット損失を防止する。
【０１３３】
リード−ソロモン符号の１つの特徴は、Ｋ個の異なる出力記号のいずれもが、入力ファイルを復号化するために受信者によって使用され得ることである。おそらく、少なくともＫ個の出力記号が、任意の入力ファイルを復号化するために必要とされ、したがって、リード−ソロモン符号はこの点で最適であるということが証明できる。なぜなら、Ｋはまた、入力ファイルを復号化するために必要な出力記号の最大数であるからである。対照的に、連鎖反応符号化は一般に、Ｋ＋Ａ個のパケット（Ａは、適切に選択されたＫに比較して小さい）を必要とする。上記のネットワークアプリケーションにおいては、おそらくＡ個のさらなる記号が必要であるというこの欠点は、速度の利点および途切れなくより大きなファイルを処理する能力によって極めて影を薄くしている。
【０１３４】
（基本通信システムの変形例）
１つのチャネルに対する本発明による通信システムの実施形態は、上記に詳細に説明された。これらの実施形態の要素は、１つより多いチャネルの有利な使用に拡張し得る。
【０１３５】
図２２〜２３は、図１に示すような通信システムを組み込んだ２つのコンピュータの間のシステムを示す。第１の例（図２２）は、入力ファイル２２１０を受信者コンピュータ２２２０にネットワーク２２３０を介して送信する送信者コンピュータ２２００を有する。第２の例（図２３）は、入力ファイル２３１０を受信者コンピュータ２３２０（図には１つだけを示す）へ無線チャネル２３３０を介して放送する送信者コンピュータ２３００を有する。ネットワーク２３３０の代わりに、インターネットのワイヤなどの任意の他の物理的通信媒体を使用し得る。無線チャネル２３３０は、無線ラジオチャネル、ページャーリンク、衛星リンク、または赤外線リンクなどであり得る。図２３に示す構成はまた、１送信者が入力ファイルを多くの受信者に送信する場合、受信者が入力ファイルを多くの送信者から得る場合、または多くの受信者が入力ファイルを多くの送信者から得る場合に、有線または無線媒体とともに使用され得る。
【０１３６】
上記説明を読めば明らかなように、上記の連鎖反応符号化スキームを使用して、コンピュータネットワーク、インターネット、モバイル無線ネットワークまたは衛星ネットワークなどの損失のある送信媒体を介して、ファイルを所望の性質を有するパケット化されたデータのストリームとして送信し得る。そのような所望の性質の１つは、復号化エージェントが、一旦そのストリームから十分に多くのパケットの任意のセットを受信すると、元のファイルを極めて速やかに再構築し得ることである。連鎖反応符号化はまた、マルチキャストまたは放送設定において１送信エージェントが、そのファイルを複数の受信エージェントに送信する場合などの、多くのエージェントが関与する状況において有用である。
【０１３７】
連鎖反応符号化スキームはまた、複数の送信エージェントが同じファイルを複数の受信エージェントに送信する状況においても有用である。これにより、ネットワークインフラストラクチャの局所的な失敗に対して向上したロバスト性を可能にし、受信エージェントが受信するパケットの送信エージェントを１送信エージェントから別の送信エージェントに途切れなく変更でき、かつ受信エージェントが同時に１つより多い送信エージェントから受信することによってそれらのダウンロードを高速化できる。
【０１３８】
１つの局面において、上記の連鎖反応符号化プロセスは、ホログラフィーイメージのデジタル等価物を実行する。ここで、送信の各部分は、送信されるファイルのイメージを含む。ファイルがメガバイトのファイルである場合、ユーザは、ただ送信されるストリームを利用していずれの任意のメガバイトに値するデータ（それに加えていくらかの余分のオーバーヘッド）を得、そのメガバイトから元のメガバイトファイルを復号し得る。
【０１３９】
連鎖反応符号化は、送信されたストリームからデータをランダムに選択して動作するので、ダウンロードは、スケジュールされる必要はなく、一貫している必要もない。連鎖反応符号化を用いたビデオ・オン・デマンドの利点を考察する。特定のビデオが、受信器と送信器との間で調整することなく特定のチャネル上を連続するストリームとして放送され得る。受信器は、興味のあるビデオ用の放送チャネルに単に同調し、送信がいつ開始したかとか、または放送の損失部分のコピーをどのように得るかを理解する必要なしに、元のビデオを再構築するために十分なデータをキャプチャする。
【０１４０】
これらの概念を、図２４〜２５に例示する。図２４は、１つの受信器２４０２が３つの送信器２４０４（それぞれ、「Ａ」、「Ｂ」および「Ｃ」で示す）から３つのチャネル２４０６を介してデータを受信する構成を例示する。この構成を使用して、受信器が利用可能な帯域幅を３倍にし得るか、またはいずれか１つの送信器からファイル全体を得るための十分な長さで利用可能でない送信器を扱い得る。図示のように、各送信器２４０４は、値のストリームＳ（）を送信する。各Ｓ（）値は、出力記号Ｂ（Ｉ）およびキーＩを表し、その使用については上記している。例えば、値Ｓ（Ａ、ｎＡ）は、送信器２４０２（Ａ）で生成される出力記号のシーケンスで、「ｎＡ」番目の出力記号および「ｎＡ」番目のキーである。１つの送信器からのキーのシーケンスは、好ましくは他の送信器からのキーのシーケンスと異なっているので、送信器は誤りを重複させない。これは、シーケンスＳ（）が送信器の関数であるという事実によって図２４に例示する。
【０１４１】
送信器２４０４は、作業を重複させないように同期または調整される必要がないことに留意されたい。実際、調整することなく各送信器は、そのシーケンス上の異なる場所に位置する可能性がある（すなわち、ｎＡ≠ｎＢ≠ｎＣ）。ランダムに選択したＫ＋Ａ個の出力記号を、おそらくＧ個の余分の出力記号の数束とともに使用して、入力ファイルが回復され得るので、調整されない送信は、重複的である代わりに付加的である。
【０１４２】
この「情報付加性」を図２５に再度例示する。そこで、１つの入力ファイル２５０２のコピーが複数の送信器２５０４に提供される（そのうちの２つを図に示す）。送信器２５０４は、入力ファイル２５０２の内容から生成された出力記号をチャネル２５０６を介して受信器２５０８に独立に送信する。各送信器が記号生成のために異なるセットのキーを使用する場合、そのストリームは、重複的ではなく独立かつ付加的（すなわち、それらは入力記号を回復するために使用される情報プールに付加する）である可能性がある。図示の２つの各送信器は、受信器のデコーダが入力ファイル全体を回復する事ができる前に（Ｋ＋Ａ）／２個の出力記号を送信することだけが必要であり得る。
【０１４３】
２つの受信器および２つの送信器を使用して、受信器部２５１０によって受信される総情報量は、１つのチャネル２５０６を介して利用可能な情報の４倍の大きさであり得る。情報量は、例えば、送信器が両方の受信器に同じデータを放送する場合は、１つのチャネルの情報の４倍より少なくてもよい。その場合、データが任意のチャネルにおいて損失されると、受信器部２５１０での情報量は少なくとも２倍、および多くの場合はそれ以上である。送信器が１個の信号しか放送しないが、受信器が異なる時間に見える所にある場合は、各送信器を受信する１つより多い受信器を有する利点があることに留意されたい。図２５において、受信器部２５１０は、図１に示す受信器１５０、デコーダ１５５、キー発生器１６０および入力ファイルリアセンブラ１６５の機能と同様の機能を実行する。
【０１４４】
いくつかの実施形態において、入力ファイル２５０２は、２つのエンコーダを有する１つの計算デバイスにおいて符号化されるので、計算デバイスは、１つの送信器に対して１つの出力を、他方の送信器に対して別の出力を提供し得る。これらの例の他の変形例は、この開示を読む際に明らかとなる。
【０１４５】
本明細書中に記載の符号化装置および方法はまた、他の通信状況において使用され得、インターネットなどの通信ネットワークに制限されない。例えば、コンパクトディスク技術もイレーズおよび誤り訂正符合を使用して、傷の入ったディスクの問題に対応し、そこに情報を格納する際に連鎖反応符号の使用により利益を受け得る。別の例として、衛星システムは、送信のためのパワー要件をトレードオフするためにイレーズ符号を使用し得、パワーを低減することによってより多くの誤りを意図的に考慮する。このアプリケーションにおいて、連鎖反応符号化は有用であり得る。また、イレーズ符号は、情報記憶の信頼性のためのＲＡＩＤ（独立ディスクの冗長配列）システムを開発するために使用されてきた。したがって、本発明は、符号を使用して損失または誤りの可能性のあるデータの問題に対応する、上記の例などの他のアプリケーションにおける有用性を証明し得る。
【０１４６】
いくつかの好ましい実施形態において、上記通信プロセスを実行するための命令のセット（またはソフトウェア）が、損失の可能性のある通信媒体を介して通信する２つ以上の多目的計算機に提供される。機械の数は、１送信者および１受信者から任意の数の送信機および／または受信機の範囲であり得る。機械を接続する通信媒体は、有線、光学、または無線などであり得る。上記通信システムは、本記載から明らかとなるべき多くの使用を有する。
【０１４７】
上記は、例示的であって、限定的ではない。本発明の種々の変形例は、当業者にとって、本開示を読むことによって明らかとなり得る。したがって、本発明の範囲は、上記を参照して決定されるのではなく、その代りに添付の特許請求の範囲およびその等価物の完全な範囲を参照して決定されるべきである。
【０１４８】
【表１】
2005117633.tif 000004
【０１４９】
【表２】
2005117633.tif 000005
【０１５０】
【表３】
2005117633.tif 000006
【０１５１】
【表４】
2005117633.tif 000007
【０１５２】
【表５】
2005117633.tif 000008
【図面の簡単な説明】
【０１５３】
【図１】図１は、本発明の１つの実施形態による通信システムのブロック図である。
【図２】図２は、図１のエンコーダをより詳細に示すブロック図である。
【図３】図３は、出力記号が関連付けられた入力記号の１セットからどのように生成され得るかの例示である。
【図４】図４は、図１に示す通信システムにおいて使用され得るような基本デコーダのブロック図である。
【図５】図５は、別のデコーダのブロック図である。
【図６】図６は、１セットの出力記号から入力記号を回復するために、図５に示すデコーダなどのデコーダによって使用され得るプロセスのフローチャートである。
【図７】図７は、受信された出力記号をオーガナイズするために、図５に示す受信オーガナイザなどの受信オーガナイザによって使用され得るプロセスのフローチャートである。
【図８ａ】図８ａは、受信された出力記号を処理するために、図５に示す回復プロセッサなどの回復プロセッサによって使用され得るプロセスのフローチャートである。
【図８ｂ】図８ｂは、図８ａのプロセスの変形例の一部分のフローチャートであり、図８ｂは、保留される処理を含む回復プロセスにおいて実行されるステップを示す。
【図８ｃ】図８ｃは、図８ａのプロセスの変形例の一部分のフローチャートであり、図８ｃは、保留される処理を示す。
【図９】図９は、図２の連想装置をより詳細に示すブロック図である。
【図１０】図１０は、出力記号を用いて入力記号の関連付けを速やかに決定するために、図９に示す連想装置などの連想装置によって使用され得る１つのプロセスのフローチャートである。
【図１１】図１１は、図２の重みセレクタをより詳細に示すブロック図である。
【図１２】図１２は、所定の出力記号の重みを決定するために、図１１に示す重みセレクタなどの重みセレクタによって使用され得るプロセスのフローチャートである。
【図１３】図１３は、特に効率的である必要のないデコーダのための復号化のプロセスのフローチャートである。
【図１４】図１４は、より効率的なデコーダのブロック図である。
【図１５】図１５は、図１２〜１３を参照して説明される復号化よりも効率的に復号化するための、図１４のデコーダを使用して実施され得るような復号化のためのプロセスのフローチャートである。
【図１６】図１６は、図１５の復号化プロセスのための、ドキュメントおよび受信された出力記号の例を例示する図である。
【図１７】図１７は、図１５に示す復号化プロセス中のデコーダにおけるテーブルの内容を例示する。
【図１８】図１８は、図１５に示す復号化プロセス中に使用され得るような重みソートテーブルの内容を例示する図である。
【図１９】図１９は、図１５に示す復号化プロセス中に形成され得る実行リストを例示する。
【図２０】図２０は、理想の分布に対する、復号可能なセットサイズ対回復された入力記号数のプロットの形態の回復プロセスの進行を例示する。
【図２１】図２１は、ロバストな重み分布に対する、復号可能なセットサイズ対回復された入力記号数のプロットの形態の回復プロセスの進行を例示する。
【図２２】図２２は、上記図に例示するようなエンコーダおよびデコーダを使用して、１送信者（送信器）と１受信器との間のポイントツーポイント通信システムの例示である。
【図２３】図２３は、上記図に例示するようなエンコーダおよびデコーダを使用して、１送信者と複数の受信器（そのうちの１つだけを図示する）との間の放送通信システムの例示である。
【図２４】図２４は、１受信器が、複数の通常独立した送信者から出力記号を受信する場合の、本発明の１つの実施形態による通信システムの例示である。
【図２５】図２５は、複数の独立であり得る受信器が、複数の通常独立した送信者から出力記号を受信して、１受信器および／または１送信者だけが使用される場合より少ない時間で入力ファイルを受信する場合の、本発明の１つの実施形態による通信システムの例示である。
【図１】
2005117633.tif 000009
【図２】
2005117633.tif 000010
【図３】
2005117633.tif 000011
【図４】
2005117633.tif 000012
【図５】
2005117633.tif 000013
【図６】
2005117633.tif 000014
【図７】
2005117633.tif 000015
【図８ａ】
2005117633.tif 000016
【図８ｂ】
2005117633.tif 000017
【図８ｃ】
2005117633.tif 000018
【図９】
2005117633.tif 000019
【図１０】
2005117633.tif 000020
【図１１】
2005117633.tif 000021
【図１２】
2005117633.tif 000022
【図１３】
2005117633.tif 000023
【図１４】
2005117633.tif 000024
【図１５】
2005117633.tif 000025
【図１６】
2005117633.tif 000026
【図１７】
2005117633.tif 000027
【図１８】
2005117633.tif 000028
【図１９】
2005117633.tif 000029
【図２０】
2005117633.tif 000030
【図２１】
2005117633.tif 000031
【図２２】
2005117633.tif 000032
【図２３】
2005117633.tif 000033
【図２４】
2005117633.tif 000034
【図２５】
2005117633.tif 000035
【手続補正書】
【提出日】平成16年8月23日(2004.8.23)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００８２
【補正方法】変更
【補正の内容】
【００８２】
図８ａに示された処理の変形例が、図８ｂに示される。ここで、各出力記号が処理される際に各出力記号に対してステップ８３０，８３５，８４０，８４５，および８５０を行う代わりに、Ｒ’およびＰの値は、後の処理用に、実行スケジュールに格納され得る（８６５）。延期された実行処理の例は、８７０、８７５、８８０、および８８５で示される工程を含む図８ｃに示される。この変形例で、図６で示されたフローチャートは、ステップ６０５でＥをゼロに初期化することによって変更される。デコーダが受信記号は全体のファイルを復号するのに十分であると決定した後で、例えばステップ６４０ですべての入力記号が回復可能であることが既知となった後に、実行スケジュールの延期された処理が行われ得る。いくつかの場合、特に入力記号が大きいときは、スケジュールの実行は入力ファイル、またはその部分、が受信者側で必要とされるまで、延期され得る。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１０３
【補正方法】変更
【補正の内容】
【０１０３】
図１６〜１９は、図１５において記載するプロセスの実行例の１スナップショットを示す。この例において、６個の出力記号（１６０３０、１６０３５、１６０４０、１６０４５、１６０５０、１６０５５）が図１６において矢印つきの線で示す関連付け（１６０００、１６００５、１６０１０、１６０１５、１６０２０、１６０２５）とともに受信されている。まず、
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１４７
【補正方法】削除
【補正の内容】
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図１
【補正方法】変更
【補正の内容】
【図１】
2005117633.tif 000036
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図２
【補正方法】変更
【補正の内容】
【図２】
2005117633.tif 000037
【手続補正６】
【補正対象書類名】図面
【補正対象項目名】図３
【補正方法】変更
【補正の内容】
【図３】
2005117633.tif 000038
【手続補正７】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2005117633.tif 000039
【手続補正８】
【補正対象書類名】図面
【補正対象項目名】図５
【補正方法】変更
【補正の内容】
【図５】
2005117633.tif 000040
【手続補正９】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2005117633.tif 000041
【手続補正１０】
【補正対象書類名】図面
【補正対象項目名】図７
【補正方法】変更
【補正の内容】
【図７】
2005117633.tif 000042
【手続補正１１】
【補正対象書類名】図面
【補正対象項目名】図８ａ
【補正方法】変更
【補正の内容】
【図８ａ】
2005117633.tif 000043
【手続補正１２】
【補正対象書類名】図面
【補正対象項目名】図８ｂ
【補正方法】変更
【補正の内容】
【図８ｂ】
2005117633.tif 000044
【手続補正１３】
【補正対象書類名】図面
【補正対象項目名】図８ｃ
【補正方法】変更
【補正の内容】
【図８ｃ】
2005117633.tif 000045
【手続補正１４】
【補正対象書類名】図面
【補正対象項目名】図９
【補正方法】変更
【補正の内容】
【図９】
2005117633.tif 000046
【手続補正１５】
【補正対象書類名】図面
【補正対象項目名】図１０
【補正方法】変更
【補正の内容】
【図１０】
2005117633.tif 000047
【手続補正１６】
【補正対象書類名】図面
【補正対象項目名】図１１
【補正方法】変更
【補正の内容】
【図１１】
2005117633.tif 000048
【手続補正１７】
【補正対象書類名】図面
【補正対象項目名】図１２
【補正方法】変更
【補正の内容】
【図１２】
2005117633.tif 000049
【手続補正１８】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】変更
【補正の内容】
【図１３】
2005117633.tif 000050
【手続補正１９】
【補正対象書類名】図面
【補正対象項目名】図１４
【補正方法】変更
【補正の内容】
【図１４】
2005117633.tif 000051
【手続補正２０】
【補正対象書類名】図面
【補正対象項目名】図１５
【補正方法】変更
【補正の内容】
【図１５】
2005117633.tif 000052
【手続補正２１】
【補正対象書類名】図面
【補正対象項目名】図１６
【補正方法】変更
【補正の内容】
【図１６】
2005117633.tif 000053
【手続補正２２】
【補正対象書類名】図面
【補正対象項目名】図１７
【補正方法】変更
【補正の内容】
【図１７】
2005117633.tif 000054
【手続補正２３】
【補正対象書類名】図面
【補正対象項目名】図１８
【補正方法】変更
【補正の内容】
【図１８】
2005117633.tif 000055
【手続補正２４】
【補正対象書類名】図面
【補正対象項目名】図１９
【補正方法】変更
【補正の内容】
【図１９】
2005117633.tif 000056
【手続補正２５】
【補正対象書類名】図面
【補正対象項目名】図２０
【補正方法】変更
【補正の内容】
【図２０】
2005117633.tif 000057
【手続補正２６】
【補正対象書類名】図面
【補正対象項目名】図２１
【補正方法】変更
【補正の内容】
【図２１】
2005117633.tif 000058
【手続補正２７】
【補正対象書類名】図面
【補正対象項目名】図２２
【補正方法】変更
【補正の内容】
【図２２】
2005117633.tif 000059
【手続補正２８】
【補正対象書類名】図面
【補正対象項目名】図２３
【補正方法】変更
【補正の内容】
【図２３】
2005117633.tif 000060
【手続補正２９】
【補正対象書類名】図面
【補正対象項目名】図２４
【補正方法】変更
【補正の内容】
【図２４】
2005117633.tif 000061
【手続補正３０】
【補正対象書類名】図面
【補正対象項目名】図２５
【補正方法】変更
【補正の内容】
【図２５】
2005117633.tif 000062