(57)【要約】  メモリ制約を有するコンピューティングデバイスを使用してデータのシンボルを符号化する符号化器において、コンピューティングデバイスのメモリにソースブロックをロードすることと、ソースブロックのすべてよりは少ない中間変換を実行することと、メモリ内でソースブロックの一部を中間結果に置換することと、メモリに記憶された出力シンボルが符号化されたシンボルの組を形成するように変換を完了することとを含む、変換を実行する方法。復号化器は、インプレース変換を実行することによって、受信されたデータおよび復号化されたソースデータの記憶に実質的に同一のメモリを使用することを可能にする順序で復号化ステップを実行することができる。インプレース変換を使用することによって、受信されたデータが復号化されたソースデータに変換される時に、復号化されたソースデータ用のメモリの類似するサイズの大きい部分を必要とせずに、その受信されたデータのためにとっておかれるメモリの大きい部分を上書きすることができる。
2008544610.tif 000002
【特許請求の範囲】
【請求項１】
複数のソースシンボルとして整列されたデータを複数の符号化シンボルに符号化する符号化器において、ソースシンボルから符号化シンボルへの変換を実行する方法であって、ここで、ｋ個のソースシンボルはｎ個の符号化シンボルに変換され、該方法は、
第１のメモリに格納された前記ｋ個のソースシンボルにアクセスするステップと、
出力シンボルの中間セットを提供するため、前記ｋ個のソースシンボルの行列演算を計算する第１の変換段階を実行するステップであって、少なくとも前記中間セットのいくつかは前記ｎ個の符号化シンボルのいくつかを含む、ステップと、
出力シンボルの前記中間セットを前記第１のメモリに格納し、前記ｋ個のソースシンボルの少なくともいくつかを置換するステップであって、前記中間セット内の出力シンボルの個数は前記ｎより少ない、ステップと、
前記第１のメモリが少なくとも前記ｎ個の符号化シンボルと前記ｋ個の全てよりは少ないソースシンボルとを含むようになるまで、実行する前記ステップと格納する前記ステップとを繰り返すステップと、
を含み、
前記ｋ個のソースシンボルから生成された前記ｎ個の符号化シンボルはエラー訂正で使用されることを特徴とする方法。
【請求項２】
変換処理において、前記第１のメモリ内のシンボルの最大数はｎ＋１およびｋ＋１のうち大きい方より大きくはないことを特徴とする請求項１に記載の方法。
【請求項３】
変換処理において、前記第１のメモリ内のシンボルの最大数はｋ＋ｎよりもｎ＋１およびｋ＋１のうち大きい方により近いことを特徴とする請求項１に記載の方法。
【請求項４】
ｎはｋと等しくないことを特徴とする請求項１に記載の方法。
【請求項５】
ｎはｋと等しいことを特徴とする請求項１に記載の方法。
【請求項６】
前記変換は、リードソロモン符号を表すことを特徴とする請求項１に記載の方法。
【請求項７】
前記変換は、ＧＲＡ符号を表すことを特徴とする請求項１に記載の方法。
【請求項８】
前記変換は、連鎖反応符号を表すことを特徴とする請求項１に記載の方法。
【請求項９】
前記変換は、ＬＤＰＣ符号を表すことを特徴とする請求項１に記載の方法。
【請求項１０】
前記変換に使用されるシンボル演算の数は、前記行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項１に記載の方法。
【請求項１１】
前記変換に使用されるシンボル演算の数は、前記行列の逆行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項１に記載の方法。
【請求項１２】
前記行列は、インプレース符号化が可能な符号化行列の分解を含むことを特徴とする請求項１に記載の方法。
【請求項１３】
前記行列は、効率的なインプレース符号化が可能な符号を表すことを特徴とする請求項１に記載の方法。
【請求項１４】
複数の符号化ソースシンボルとして整列されたデータを複数の復号化シンボルに復号化する復号化器において、前記符号化シンボルから前記復号化シンボルへの変換を実行する方法であって、ここで、ｒ個の符号化シンボルはｄ個の復号化シンボルに変換され、該方法は、
第１のメモリに格納された前記ｒ個の符号化シンボルにアクセスするステップであって、該ｒ個の符号化シンボルはｋ個のソースシンボルからエラー訂正での使用のために生成される、ステップと、
行列演算を計算する第１の変換段階を実行するステップであって、該演算は符号化行列の逆行列であり、出力シンボルの中間セットを提供するため前記ｒ個の符号化シンボルに対し演算し、少なくとも前記中間セットのいくつかは前記ｄ個の復号化シンボルのいくつかを含む、ステップと、
出力シンボルの前記中間セットを前記第１のメモリに格納し、前記ｒ個の符号化シンボルの少なくともいくつかを置換するステップであって、前記中間セット内の出力シンボルの個数は前記ｄより少ない、ステップと、
前記第１のメモリが少なくとも前記ｄ個の復号化シンボルと前記ｒ個の全てよりは少ない符号化シンボルとを含むようになるまで、実行する前記ステップと格納する前記ステップとを繰り返すステップと、
を含むことを特徴とする方法。
【請求項１５】
変換処理において、前記第１のメモリ内のシンボルの最大数はｒ＋１およびｄ＋１のうち大きい方より大きくはないことを特徴とする請求項１４に記載の方法。
【請求項１６】
変換処理において、前記第１のメモリ内のシンボルの最大数はｒ＋ｄよりもｒ＋１およびｄ＋１のうち大きい方により近いことを特徴とする請求項１４に記載の方法。
【請求項１７】
ｒはｄと等しくないことを特徴とする請求項１４に記載の方法。
【請求項１８】
ｒはｄと等しいことを特徴とする請求項１４に記載の方法。
【請求項１９】
前記変換は、リードソロモン復号を表すことを特徴とする請求項１４に記載の方法。
【請求項２０】
前記変換は、ＧＲＡ復号を表すことを特徴とする請求項１４に記載の方法。
【請求項２１】
前記変換は、連鎖反応復号を表すことを特徴とする請求項１４に記載の方法。
【請求項２２】
前記変換は、ＬＤＰＣ復号を表すことを特徴とする請求項１４に記載の方法。
【請求項２３】
前記変換に使用されるシンボル演算の数は、前記行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項１４に記載の方法。
【請求項２４】
前記変換に使用されるシンボル演算の数は、前記行列の逆行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項１４に記載の方法。
【請求項２５】
前記行列は、インプレース復号化が可能な復号化行列の分解を含むことを特徴とする請求項１４に記載の方法。
【請求項２６】
前記行列は、効率的なインプレース復号化が可能な符号を表すことを特徴とする請求項１４に記載の方法。
【請求項２７】
通信システムであって、複数のｋ個のソースシンボルとして整列されたデータは送信機において複数のｎ個の符号化シンボルに変換され通信チャネルを介して送信され、送信された符号化シンボルの少なくともいくつかは受信機において複数のｒ個の受信シンボルとして受信され、ｄがｋ以上の場合該ｒ個の受信シンボルは前記ｋ個のソースシンボルを表す複数のｄ個の復号化シンボルに変換され、該通信システムは、
前記ｋ個のソースシンボルに必要なメモリサイズと前記ｎ個の符号化シンボルに必要なメモリサイズとの合計が送信バッファのサイズよりも大きいようなサイズを有する送信バッファと、
前記ｋ個のソースシンボルの符号化行列演算を計算することにより出力シンボルの中間セットを生成するための送信生成ロジックであって、少なくとも前記中間セットのいくつかは前記ｎ個の符号化シンボルのいくつかを含む、送信生成ロジックと、
出力シンボルの前記中間セットを前記送信バッファに格納し、前記ｋ個のソースシンボルの少なくともいくつかを置換するための送信格納ロジックであって、前記中間セット内の出力シンボルの個数は前記ｎより少ない、送信格納ロジックと、
前記送信生成ロジックに出力シンボルの他の中間セットを生成させ前記送信格納ロジックに出力シンボルの中間セットを格納させるためのフローロジックであって、前記送信バッファが少なくとも前記ｎ個の符号化シンボルと前記ｋ個の全てよりは少ないソースシンボルとを含むようになるまで前記ｋ個のソースシンボルの付加的なシンボルを置換し、前記ｋ個のソースシンボルから生成された前記ｎ個の符号化シンボルはエラー訂正で使用される、フローロジックと、
前記通信チャネルを介して前記ｎ個の符号化シンボルを送信するための送信回路と、
前記ｒ個の受信シンボルを受信するための受信回路であって、該ｒ個の受信シンボルは前記ｎ個の符号化シンボルを搬送する前記通信チャネルの結果である、受信回路と、
前記ｒ個の受信シンボルに必要なメモリサイズと前記ｄ個の復号化シンボルに必要なメモリサイズとの合計が受信バッファのサイズよりも大きいようなサイズを有する受信バッファと、
前記ｒ個の受信シンボルの復号化行列演算を計算することにより受信出力シンボル中間セットを生成するための受信生成ロジックであって、少なくとも前記受信出力シンボル中間セットのいくつかは前記ｄ個の復号化シンボルのいくつかを含む、受信生成ロジックと、
前記受信出力シンボル中間セットを前記受信バッファに格納し、前記ｒ個の受信シンボルの少なくともいくつかを置換するための受信格納ロジックであって、前記受信出力シンボル中間セット内の受信出力シンボルの個数は前記ｄより少ない、受信格納ロジックと、
前記受信生成ロジックに他の受信出力シンボル中間セットを生成させ前記受信格納ロジックに受信出力シンボル中間セットを格納させるためのフローロジックであって、前記受信バッファが少なくとも前記ｄ個の復号化シンボルと前記ｒ個の全てよりは少ない受信シンボルとを含むようになるまで前記ｒ個の受信シンボルの付加的なシンボルを置換する、フローロジックと、
を含むことを特徴とする通信システム。
【請求項２８】
前記ロジックは、プログラム可能プロセッサにより実行されるプログラムコード命令を含むことを特徴とする請求項２７に記載の通信システム。
【請求項２９】
前記ロジックは、ハードウェア回路を含むことを特徴とする請求項２７に記載の通信システム。
【請求項３０】
前記ロジックは、部分的にプログラム可能プロセッサにより実行されるプログラムコード命令を含み、部分的にハードウェア回路を含むことを特徴とする請求項２７に記載の通信システム。
【請求項３１】
前記復号化行列は、少なくとも前記受信シンボルにより定義される前記符号化行列の一部の逆行列であり、前記符号化行列の一部により乗算された前記復号化行列が単位行列となることを特徴とする請求項２７に記載の通信システム。
【請求項３２】
前記受信機は、移動電話受信機であることを特徴とする請求項２７に記載の通信システム。
【請求項３３】
前記受信機は、自動車での使用に適したものであることを特徴とする請求項２７に記載の通信システム。
【請求項３４】
前記送信機は、移動電話送信機であることを特徴とする請求項２７に記載の通信システム。
【請求項３５】
前記送信機は、自動車での使用に適したものであることを特徴とする請求項２７に記載の通信システム。
【請求項３６】
前記送信機はデジタルメディア送信機であり、前記受信機はデジタルメディア受信機であることを特徴とする請求項２７に記載の通信システム。
【請求項３７】
前記エラー訂正は、消去訂正であることを特徴とする請求項１に記載の方法。
【請求項３８】
前記エラー訂正は、消去訂正であることを特徴とする請求項１４に記載の方法。
【請求項３９】
前記エラー訂正は、消去訂正であることを特徴とする請求項２７に記載の通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的にはデータの符号化および復号化に関し、具体的には、大量の追加メモリの使用を必要としない、データの線形変換の計算に関する。
【背景技術】
【０００２】
多数のアプリケーションが、以下では”ソースブロック”と称する、データの所与のブロックを変換することによって結果を達成する。本明細書で使用される用語”ソースブロック”は、１つまたは複数のソースで格納される任意のデータを指す。したがって、ファイルサーバまたはコンピュータストレージデバイスからの文書、画像、およびファイルのすべてが、ソースブロックの例である。ソースブロックは、未知のサイズを有するものとすることができ（ストリーミングソースの出力からとられるソースブロックなど）、あるいは、ソースブロックは、既知のサイズを有するものとすることができる（ハードディスクに格納された１メガバイトの画像など）。どの形でも、ソースブロックは、１つまたは複数のソースシンボルのシーケンスであり、各ソースシンボルは、ソースブロック内の位置および値を有する、ソースブロック内の１つのデータである。
【０００３】
本明細書では、ソースブロックの変換は、ある結果を達成するためにそのソースブロックに対して実行されるアクションを指す。たとえば、ソースブロックが、カメラなどの外部デバイスによって取り込まれる場合に、１つの可能な変換は、より小さいストレージデバイスでのそのソースブロックの格納を容易にするための、あるいは１つまたは複数の可能な所期の受け取り側へのより高速の伝送を可能にするための、かなりより小さいサイズへのそのソースブロックの圧縮とすることができる。もう１つの例として、ソースブロックを、コンピュータネットワークなどのチャネルまたは破損もしくは消失の見込みがあるチャネルを介して転送されるものと指定することができる。その場合に、そのソースブロックを、伝送エラーに関する堅牢性を高めるために、伝送の前に変換することができる。
【０００４】
ソースブロックの変換を必要とする多数のアプリケーションのうちで特に重要なものが、伝送においてこうむるエラーに対するソースブロックの堅牢性を高めるために変換を実行するアプリケーションである。伝送とは、ソースブロックを配送するために１つまたは複数の送信機からチャネルを介して１つまたは複数の受け取り側へソースブロックを送る処理である。１つの送信機が、完全なチャネルによって任意の個数の受け取り側に接続される場合に、受信されるデータは、すべてのデータが正しく受信されるので、オリジナルのソースブロックの正確なコピーとすることができる。しかし、ほとんどの実世界のチャネルについてそうであるようにチャネルが完全ではない場合に、または一部のシステムについてそうであるようにデータが複数の送信機から発する場合に、受信されるものが、正確なコピーではない場合がある。
【０００５】
チャネルの不完全性は、データ消去、データ不完全性、またはデータ破損を指す可能性がある。データ伝送という行為は、地理的に離れた位置の間でのデータの伝送だけを指すのではなく、伝送には、データが絶対に物理的には移動されない場合をも含めることができる。たとえば、欠陥の可能性がある記憶媒体に格納されたソースブロックが、伝送の一形態を構成することができる。というのは、そのソースブロックがもう一度アクセスされる時に、データ破損の可能性があるからである。
【０００６】
可能な伝送エラーに対するソースブロックの保護の一般的な処理が、符号化の処理である。符号化を用いると、ソースブロックが変換され、あるいは、データの新しい組（時々”冗長”データまたは”リペア”データと呼ばれる）がソースブロックから計算される。変換されたソースブロックは、しばしば、オリジナルのソース符号から計算された冗長情報を含み、内部冗長性を使用して、伝送中にこうむるエラーに関する情報を入手し、そのようなエラーを訂正するという目標を有する。符号を設計し、使用する理論および実践に関する大量の文献がある。
【０００７】
符号の選択は、特定のアプリケーションと、その上で伝送が行われる通信チャネルとに依存する。しばしば、選択される符号は、ある線形性特性を有する。たとえば、ソースブロックが、ビットのグループである１つまたは複数のソースシンボルからなる場合に、線形性条件は、２つのソースブロックのシンボルごとの合計（写像）の符号化が、ソースブロックの符号化のシンボルごとの合計（写像）と等しいことを保証するはずである。そのような線形性条件は、符号化処理および復号化処理を記述し、計算するのに非常に有利に使用することができる。実際に使用される符号の大きいサブクラスが、そのような線形性条件を満足する。
【０００８】
ソースブロックの符号化につながる変換に対する逆処理が、復号化処理である。この処理では、符号化されたソースブロックの（おそらくは破損された）版が、伝送の前のソースブロックのオリジナルの状態のよい（または、時々、最良の可能な）推定値を得る形で処理される。
【０００９】
線形符号化方式の多数の利益のうちの１つが、符号化処理および復号化処理を行列によって説明できるという事実である。行列は、２次元配列の形で要素を含む数学的物体である。当業者に周知の通り、行列は、物体の間、たとえばソースブロックを構成するシンボルの集合の間の線形写像を表すのに便利に使用することができる。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しばしば、符号化処理および復号化処理が、中間結果を記憶するのに追加メモリを使用することから利益を得る場合がある。たとえば、一部の復号化処理は、復号化されたソースブロックに加えて、受信されたデータのコピーを保持することを必要とする場合がある。復号化処理および符号化処理に必要な追加メモリの量は、限られたメモリを有するデバイスにおいて多すぎる場合がある。たとえば、デバイスが、携帯電話機または携帯情報端末（ＰＤＡ）などの移動体受信デバイスである場合に、デバイス上のメモリが少ない場合があり、かつ／またはメモリが、そのデバイスでの実行を意図された他のアプリケーションのために予約されている場合がある。そのような情況では、復号化処理および符号化処理は、メモリを効率的に使用しなければならないが、時々、これを実施するのが難しい。
【課題を解決するための手段】
【００１１】
本発明の諸態様による復号化器の実施形態では、復号化器は、受信されたデータおよび復号化されたソースブロックの記憶に実質的に同一のメモリを使用し、インプレース変換として実行することを可能にする順番で復号化ステップを実行するようにプログラムされる。インプレース変換を使用することによって、受信されたデータのためのメモリの大きい部分および復号化されたソースデータのためのメモリの類似するサイズの大きい部分を必要とせずに、受信されたデータが復号化されたソースデータに変換される時に、受信されたデータのためにとっておかれるメモリの大きい部分を上書きすることができる。
【００１２】
しばしば、インプレース変換の使用は、プロセスがメモリのアクセスにより短い時間を費やすので、特定の処理の実行時間の減少につながり、減らされたメモリ要件を超える利益をもたらす。これは、記憶されるデータの総サイズが大きすぎる場合に、処理ユニットがより低速の二次ストレージデバイスにアクセスすることを強制される可能性があるという問題を防ぐ。
【００１３】
本発明の実施形態は、大量の追加メモリの使用を必要としないインプレース線形変換を実行する方法および処理を使用する。これらの方法および処理は、ソースブロックのＦＥＣ符号化変換およびＦＥＣ復号化変換と共に使用することができる。
【００１４】
次の詳細な説明は、添付図面と一緒に、本発明の性質および利点のよりよい理解をもたらす。
【００１５】
本明細書のテキストおよび式は、本発明の諸態様を例示するものである。
【発明を実施するための最良の形態】
【００１６】
受信されたデータおよび復号化されたソースブロックの記憶に実質的に同一のメモリを使用する処理を、しばしば、インプレース（in-place）変換と称する。しばしば、インプレース変換の使用は、プロセスがメモリのアクセスにより短い時間を費やすので、特定のプロセスの実行時間の減少につながる。これは、特に重要である。というのは、記憶されるデータの総サイズが大きすぎる場合に、処理ユニットがより低速の二次ストレージデバイスにアクセスすることを強制される可能性があるからである。本発明の実施形態は、大量の追加メモリの使用を必要としないインプレース線形変換を実行する方法および処理を使用する。これらの方法および処理は、特に、ソースブロックのＦＥＣ（前方エラー訂正）符号化変換およびＦＥＣ復号化変換に適用可能である。
【００１７】
本発明は、多数のデバイスに適用可能であるが、そのすべてが本明細書で明示的に説明されるわけではない。限定ではなく例に、携帯電話機、コンピュータ、ハンドヘルドコンピューティングデバイス、メディアプレイヤ、通信デバイス、ならびに／あるいはこれらのデバイスを実施するハードウェアおよび／またはソフトウェアが含まれる。
【００１８】
概要
送信機１１０でのＦＥＣ符号化および受信機１４０でのＦＥＣ復号化を使用する通信システムの高水準の図を図１に示す。送信機１１０および受信機１４０が、広い範囲のデバイスを含むことができることを理解されたい。多くの実施形態で、送信機および受信機は、単一のトランシーバデバイス内に含まれ、複数のそのようなデバイスが、それら自体の間で通信することができる。
【００１９】
図１では、送信機１１０は、ＦＥＣ符号化器１２０を含み、ＦＥＣ符号化器１２０は、通信チャネル１３０を介してＦＥＣ復号化器１５０を含む受信機１４０に送信されるデータに保護を追加するのに使用される。送信機１１０は、たとえばインターネットプロトコル（ＩＰ）パケットまたは他の形のパケットなどのパケット内で、ＦＥＣ符号化器１２０によって生成されたデータを送信することができ、このパケットは、各パケット内に、そのパケットがどのように生成されたかおよび／またはそのパケットが送信されるデータのどの部分を表すかを受信機１４０が判定できるようにする識別する情報を含む。
【００２０】
チャネル１３０は、ネットワークチャネル、無線チャネル、ＰＳＴＮチャネル、または他のチャネルとすることができる。通常、チャネル１３０は、その下である条件についてデータが失われる、ある制約を有する。通常、パケットネットワークについて、受信されたパケットの一部が読み取り可能ではない場合に、パケット全体が破棄される。したがって、送信機１１０から送信されたパケットが、受信機１４０で受信されないと考えられる状況があり、したがって、そのような消失から回復するための機構が必要である。
【００２１】
受信機１４０は、受信されたパケットのうちで必要な個数をＦＥＣ復号化器１５０に供給し、ＦＥＣ復号化器１５０は、データのすべてまたは一部を回復する。ＦＥＣ（前方エラー訂正）は、エラーが発生した場合にエラー訂正を可能にする、順方向チャネルで前もって提供される機構を提供する。エラーは、必要ではなく、その場合に、ＦＥＣの労力は、単なるバックアップであり、いくつかの場合には、ＦＥＣを使用して回復できるものより多数のエラーが発生する場合があり、その場合には、通信が失敗するか、再送信などを要求するサイド通信が発生する。
【００２２】
伝送がポイントツーポイントである必要はない。図２に示されているように、１つのシステムが、複数の送信機および複数の受信機を有することができる。図２は、それぞれがＦＥＣ符号化器（２１１）、ＦＥＣ復号化器（２３２、２４２）、またはその両方（２２２、２２１）を含む、送信機２１０、受信機２３０および２４０、ならびに送信機／受信機２２０を含むシステムを示す。図２に示された例では、すべての送信機、送信機／受信機、および受信機が、チャネル２５０を介して通信することができ、チャネル２５０には、一体化されたＩＰネットワーク、ばらばらのネットワークの組合せ、またはネットワークの他の類似する組合せを含めることができる。
【００２３】
図３に、送信機および／または受信機を実施するのに使用できるハードウェアの例をより詳細に示す。この図に示されているように、ＦＥＣ符号化器／復号化器３０５は、動作を実行するのに使用されるＣＰＵ  ３１０、超高速アクセスを有する一時メモリをＣＰＵ  ３１０に提供するキャッシュ３２０、比較的高速のアクセスを有するより大量のメモリをＣＰＵ  ３１０に提供するＲＡＭ  ３３０、および適度なアクセス速度を有する大量の永久メモリをＣＰＵ  ３１０に提供するディスク３４０を含む。
【００２４】
この実施形態の多数の他の変形形態が可能である。たとえば、キャッシュ３２０を、ＣＰＵによる処理の準備をするために他のメモリデバイスからデータをプリロードするためすなわち直接メモリアクセス（ＤＭＡ）動作のために、オペレーティングシステム（ＯＳ）によって制御される部分と、ＦＥＣ符号化／復号化処理の制御の下の部分とに区分することができる。他の例として、複数のレベルキャッシュを設けることができ、フラッシュなどの他のタイプのストレージデバイスを設けることができ、ストレージタイプの一部、たとえばディスクストレージをなくすことができる。
【００２５】
より一般的に、メモリを有するコンピューティングデバイスは、しばしば、さまざまな種別のメモリを有する。一部の種別のメモリは、より近いメモリがプロセッサに物理的により近いかより高速の応答レートを有することができるという点で他の種別より”近い”と考えられ、これは、プロセッサが”近い”メモリを遠くのより長いリードを必要とするすなわちより低速のメモリより高速に読み取り、かつ／または書き込むことを可能にする。より一般的に言っても、ある種別のメモリは、待ち時間、応答レート、メモリの位置を読み取り／書き込むのに必要なエネルギの量、メモリ内の情報を維持するエネルギの量、ビットあたりのコスト、および他の考慮事項のゆえに、別の種別のメモリより好ましいものとすることができる。メモリの種別は、通常、好ましさによって順序付けることができ、最高速の最も強力で効率的なメモリが、好ましい。通常、工学的制約および設計制約が、複数の種別のメモリの使用を命ずる場合がある。たとえば、永続ストレージが可能ではないことからＲＡＭキャッシュメモリだけが求められることはなく、プロセッサアクセスが低速なのでディスクメモリだけが求められることはない。
【００２６】
上で説明したように、あるデバイスが、複数の種別のメモリを有することができ、これらの種別は、好ましさによって順序付けられる。最も好ましいメモリが、特定の計算動作の結果を含むのに十分に大きくはない場合に、より好ましくない種別のメモリへのスワップアウトなど、メモリ管理が必要になる場合がある。そのような動作は、特にある種のデバイスおよびある種の動作において、待ち時間、計算コスト、電力使用量に関するオーバーヘッドを追加し、したがって、効率的なインプレース変換に関して本明細書で説明される方法および装置は、デバイスの動作に対する大きい利益をもたらす。
【００２７】
図３の図示では、ＦＥＣ符号化器／復号化器３０５は、さまざまなメモリユニットを制御することができ、ＦＥＣ符号化器／復号化器３０５を使用しているアプリケーションの制御の下の他の部分がある場合がある。したがって、たとえば、ＦＥＣ符号化を実行する時に、アプリケーションが、符号化されるソースブロックのそれ自体のコピーを制御する場合があり、ＦＥＣ符号化器が、別々のメモリ位置に、アプリケーションによってそのＦＥＣ符号化器に渡されたソースブロックのそれ自体のコピーを有する場合がある。
【００２８】
この例では、アプリケーションによって使用される他のメモリにかかわりなく、ＦＥＣ符号化器によって使用されるメモリを最小化することが重要である可能性があり、また、この例では、ＦＥＣ符号化器が、ソースブロックのリペアシンボルの計算中にソースブロックの一部またはすべてを上書きできる可能性もある。というのは、アプリケーションが、ソースブロックのそれ自体の別々のコピーを有するからであり、かつ／またはアプリケーションが、ソースブロックの一部を既にチャネルに送信済みであり、ソースブロックのその部分のコピーを保持することをもやや必要としない場合があるからである。もう１つの例として、一般に、ＦＥＣ復号化中には、符号シンボルのコピーがソースブロックのオリジナルのソースシンボルを回復するのに使用されたならば、その符号シンボルのコピーを維持することは、重要ではない。
【００２９】
図４に、メモリ４２０に記憶される受信された符号シンボル４４０からソースシンボル４３０のソースブロックを生成するのにＣＰＵ  ４０５を使用することができる従来のＦＥＣ復号化処理４１０（おそらくはプログラムコードとして実施される）を示すが、メモリ４２０は、図３に示されたタイプまたは他のタイプを含むことができる。図示されているように、シンボル記憶のためにＦＥＣ復号化処理４１０が必要とするメモリの量は、通常、ソースブロックの総サイズと符号シンボルの総サイズとの合計である。類似するコメントが、従来のＦＥＣ符号化処理にあてはまる。
【００３０】
図５に、本発明によるインプレースＦＥＣ復号化処理の実施形態を示す。開始時のインプレースＦＥＣ復号化処理のスナップショット５１０は、メモリ５２０に記憶された受信された符号シンボル５３０を処理するＣＰＵ  ５０５を示し、メモリ５２０には、図３に示されたタイプまたは他のタイプを含めることができる。終了時のインプレースＦＥＣ復号化処理のスナップショット５１５は、受信された符号シンボル５３０によって最初に占められていたものと同一のメモリ５２０に記憶されたソースブロックの回復されたソースシンボル５４０を作るのに使用されたＣＰＵ  ５０５を示す。さらに、ＦＥＣ復号化処理の中間ステップ中に、シンボルに使用されるメモリは、受信された符号シンボル５３０を記憶するのに必要なメモリの量および回復されたソースシンボル５４０を記憶するのに必要なメモリの量のうちの最大値より大きい、少ない量である。したがって、ソースブロックを回復するのに必要な符号シンボルの総サイズが、ソースブロックのサイズ程度なので、インプレースＦＥＣ復号化処理５１０および５１５は、復号化中にシンボルストレージに従来のＦＥＣ復号化処理４１０のメモリの約半分を使用する。類似するコメントが、インプレースＦＥＣ符号化処理にあてはまる。
【００３１】
後続セクションでは、図５に示された利点を実現する方法および処理を紹介する。具体的に言うと、線形符号として表すことができるＦＥＣ符号用のインプレースＦＥＣ符号化処理およびインプレースＦＥＣ復号化処理を紹介する。
【００３２】
線形演算子
例の実施形態をさらに示すために、環という数学的概念を利用する。次の説明では、さまざまな数学的な処理およびステップを、ハードウェアの動作、プログラム命令の実行、または類似物によって、コンピューティング／通信デバイスによって実行できることを理解されたい。
【００３３】
当業者に周知の通り、環は、２つの演算すなわち加算および乗算が定義され、これらの演算が分配法則を満足するようになっている集合である。さらに、加算だけについて検討される集合は、アーベル群を形成する、すなわち、加算の結果は、被加数の順序付けと独立であり、加算の単位元０があり、要素ごとに、その要素との和が０になるもう１つの要素がある。他の要件は、乗算が単位元１を有し、１との任意の要素の乗算が、その要素の値を変更しないようになっていることである。一般的な環について、非０要素が逆数を有することは要求されず、乗算が可換であることも要求されない。しかし、これらの条件の両方が満足されるときに、その環を”体”と呼ぶ。この表記法は、代数の分野で標準的な表記法である。
【００３４】
本明細書で使用される時に、”シンボル”は、通常はソースブロックより小さい１つのデータを指す。シンボルのサイズは、しばしば、ビット単位で測定され、シンボルは、Ｍビットのサイズを有し、シンボルは、２Ｍ個のシンボルのアルファベットから選択される。たとえば、パケットネットワークを介する情報の信頼できる伝送のアプリケーションにおいて、シンボルのサイズを、パケットサイズと等しいものとするか、それより小さいものとすることができ、その結果、各パケットが、１つまたは複数のシンボルを含むようになる。
【００３５】
写像（シンボルごとの合計）は、同一サイズのシンボルのペアをそのサイズの別のシンボルに写像する、ハードウェアおよび／またはソフトウェアなどで実施可能な論理構成である。
2008544610.tif 000003
によってこの写像を表し、シンボルのペア（Ｓ，Ｔ）に対するこの写像の像を
2008544610.tif 000004
によって表す。そのような写像の例が、ビット単位の排他的論理和（ＸＯＲ）である。
【００３６】
本明細書で使用されるもう１つの構成が、シンボルに対する特殊なタイプの集合の”アクション(action)”という概念である。Ａが、単位元を有し、すべての要素についてその反数を含む、可換加算演算”＋”を備えた集合であるものとする。そのような集合を、一般に、アーベル群とも呼ぶ。シンボルの集合に対するこの群の”アクション”は、群要素ｒおよびシンボルＳを含むペアを別のシンボルに写像する写像である。この像を、ｒ＊Ｓによって表すが、この写像が、この群においてすなわち、群Ａの要素ａおよびｂのすべてのペアについて、加算を尊重する場合に、
2008544610.tif 000005
である。Ａが環であり、アクションが、Ａでの乗算をも尊重する場合に（Ａでの乗算演算子は、”・”である、すなわち（ａ・ｂ）＊Ｓ＝ａ＊（ｂ＊Ｓ）である）、このアクションを、”演算”と呼ぶ。
【００３７】
シンボルに作用する環または体の例は、豊富にある。少数の例に、下で言及する。この例のリストは、例示のみを意図されており、網羅的なリストと考えてはならず、本発明の範囲を限定するものと解釈してもならない。
【００３８】
０および１からなり、排他的論理和（ＸＯＲ）である加算および論理演算ＡＮＤである乗算を有する体ＧＦ（２）は、１＊Ｓ＝Ｓおよび０＊Ｓ＝０を定義することによってシンボルの集合に作用し、ここで、Ｓは、任意のシンボルを表し、０は、完全に０からなるシンボルを表す。
【００３９】
体ＧＦ（４）は、４つの要素０、１、２、３からなり、ここで、加算は、整数の通常のＸＯＲであり、乗算は、表１を介して定義される。
【００４０】
【表１】
2008544610.tif 000006
【００４１】
ＧＦ（４）は、等しいサイズのシンボルに次の形で作用する。そのようなシンボルＳについて、それぞれその第１の半分および第２の半分をＳ［１］およびＳ［２］によって表し、その結果、Ｓ＝（Ｓ［１］，Ｓ［２］）である。次に、
2008544610.tif 000007
を定義する。
【００４２】
これが実際に有効な演算であることを、すばやく検証することができる。同一の体のもう１つの演算を、２ビットを有するシンボルに対して定義することができる。これらのシンボルを整数０、１、２、および３を用いて識別することによって、この体の乗算の表が、２ビットシンボルの場合に上で定義された演算と一致する演算を記述することがわかる。
【００４３】
より一般的に、Ｋが、次数ｄのＧＦ（２）の拡大体である場合に、この体の演算を、そのサイズがｄで割り切れるシンボルに対して定義することができる。そのような演算は、”Technical Report Number TR-95-048 of the International Computer Science Institute in Berkeley, CA(1995)”として出版された”Bloemer, et al., "An XOR-Based Erasure Resilient Coding Scheme"”に記載されている。この方式は、２進要素を有するｄ×ｄ行列としての体Ｋのいわゆる”正則表現”を使用する。
【００４４】
”線形変換”という概念は、シンボルの環の演算という概念を参照して定義することができる。所与の整数ｍおよびｎについて、この演算によって導入される線形変換は、指定された環に含まれる要素を有する行列の空間を使用して、ｎ個のシンボルのベクトルをｍ個のシンボルのベクトルに写像する。環Ｒ上の行列は、その要素がＲに属する、要素の２次元集合である。ある行列が、ｍ行ｎ列を有する場合に、その行列を、一般にｍ×ｎ行列と称する。ペア（ｍ，ｎ）を、その行列の”フォーマット”と呼ぶ。同一のフォーマットの行列は、基礎になる体または環の加算および減算を使用して、加算し、減算することができる。フォーマット（ｍ，ｎ）の行列は、一般に知られているとおり、フォーマット（ｎ，ｋ）の行列と乗算することができ、フォーマット（ｍ，ｋ）の行列を作る。
【００４５】
Ｂがそのような行列を表し、Ｂ［ｊ，ｋ］が、位置（ｊ，ｋ）のＢの要素を表し、この行列がベクトル（Ｓ［１］，Ｓ［２］，．．．，Ｓ［ｎ］）を変換し、（Ｘ［１］，Ｘ［２］，．．．，Ｘ［ｍ］）が変換されたベクトルを表す場合に、次の関係が有効である。
【００４６】
１からｍまでのすべてのｊについて、
2008544610.tif 000008
である。
【００４７】
Ｓが、Ｓ［１］，Ｓ［２］，．．．，Ｓ［ｎ］を含む列ベクトルを表し、Ｘが、シンボルＸ［１］，Ｘ［２］，．．．，Ｘ［ｍ］を含む列ベクトルを表す場合に、この変換を、
2008544610.tif 000009
と表すことができる。
【００４８】
上の公式は、”単純変換処理”と称する、符号化器または復号化器でＢおよびＳからＸを計算する処理を記述し、この処理は、
１．ｊに１をセットし、Ｘ［ｊ］に０をセットする。
【００４９】
２．１からｎまでのｋの値について、
2008544610.tif 000010
を行う。
【００５０】
３．ｊを１つインクリメントする。ｊがｍを超える場合には、停止し、そうでない場合にはステップ２に進む。
というステップによって実行することができる。
【００５１】
そのような線形変換は、さまざまなアプリケーションで平凡である。たとえば、１つのデータまたはソースブロックを符号化するのに線形符号を使用する時に、Ｓを、符号化されるソースブロックのソースシンボルとすることができ、Ｘを、Ｓの符号化された版とすることができ、Ｂを、符号に関する生成行列とすることができる。他のアプリケーションでは、たとえば、使用される符号が組織的である場合に、Ｘを、Ｓの符号化の冗長シンボルとすることができ、Ｂを、ソースシンボルに対する冗長シンボルの依存性を記述する行列とすることができる。もう１つのアプリケーションでは、Ｓを、変換の後に受け取られるシンボルの集合から得られるシンボルのベクトルとすることができ、Ｘは、完全に未知または部分的に未知のいずれかであるシンボルの集合に対応することができ、Ｂは、ＸとＳとの間の関係を記述することができる。たとえば、消去にもかかわらずまたはエラーにもかかわらずリードソロモン符号を復号化する場合がそうである。後者は、Ｓｈｏｋｒｏｌｌａｈｉ他の米国特許第６６３１１７２号、名称”Efficient List Decoding of Reed-Solomon Codes for Message Recovery in the Presence of High Noise Levels”に記載されている。
【００５２】
多くのアプリケーションで、上のベクトルＸは、Ｓを記憶するのに使用されるメモリを実質的に超えるメモリを使用せずに、Ｓから計算される必要がある場合がある。たとえば、シンボルがそれぞれ５１２バイトであり、ｍ＝ｎ＝１０２４である場合に、ＳおよびＸは、それぞれ５１２キロバイトのサイズを有する。変換が、６００キロバイトのメモリを有するデバイスで実施される場合に、追加メモリを使用せずにＳとＸとの両方を同時に保持するのに十分なメモリはないはずである。
【００５３】
そのような状況では、Ｓの変換をインプレースで達成する処理が必要である。ＸがＳより小さい場合に、これは、Ｓの最初のｍ個の要素が、Ｘによって置換されることを意味する可能性があり、あるいはより一般的には、Ｓのｍ個の位置の規定された集合が、Ｘの諸位置によって置換されることを意味する可能性がある。ＸがＳより大きい場合には、インプレース変換は、Ｓが変換後にＸの最初のｎ個の要素を含むこと、またはより一般的には、Ｓが変換後にＸのｎ個の要素の規定された集合を含むことと解釈することができ、残りのｍ−ｎ個の要素は、他所に記憶される。ＸおよびＳが同一の長さを有する場合には、インプレース変換は、ＸによってＳを置換することができる。アプリケーションでは、この処理が、その仕事を達成するために多すぎる追加メモリを使用してはならない。したがって、たとえば、Ｘが計算され、他所に記憶され、その後Ｓのメモリ位置にコピーされる解決策は、不適当な解決策になるはずである。
【００５４】
インプレース線形変換
これから、インプレース線形変換について処理を説明する。Ｂが、フォーマット（ｍ，ｎ）を有する行列であり、Ｓが、ｎ個のシンボルの列ベクトルであるものとする。ＢおよびＳを与えられて、次のように、Ｂ↓Ｓすなわち下向きでのＢによるＳのインプレース線形行列変換を定義する。
【００５５】
すべてのｉ＝１，２，．．．，ｍについて
Ｓ［ｉ］をＢの第ｉ行と現在のＳとの内積に置換する。
【００５６】
このインプレース演算を計算する処理を、図６を参照して説明する。ステップ６１０で、整数変数ｉを０に初期化する。ステップ６２０で、ｉの値をｎｅｘｔ（ｉ）に増やし、ここで、ｎｅｘｔ（ｉ）は、Ｂの行ｎｅｘｔ（ｉ）が少なくとも１つの非０要素を有する、ｉより大きい最小の整数であり、行ｉを超えるすべての行がすべて０の要素を有する場合には、ｎｅｘｔ（ｉ）にｍ＋１がセットされる。ステップ６３０で、ｉ＞ｍであるか否かを検査し、ｉ＞ｍである場合には、処理はステップ６４０で停止するが、ｉ≦ｍである場合には、処理はステップ６５０に進み、ここで、一時シンボル値Ｔに０をセットし、整数変数ｊに０をセットする。ステップ６６０で、ｊの値をｎｅｘｔ（ｉ，ｊ）に増やし、ここで、ｎｅｘｔ（ｉ，ｊ）は、Ｂの行ｉでＢ［ｉ，ｎｅｘｔ（ｉ，ｊ）］が非０要素になる、ｊより大きい最小の整数であり、Ｂ［ｉ，ｊ］行ｉを超えるすべての要素がすべて０である場合には、ｎｅｘｔ（ｉ，ｊ）にｎ＋１がセットされる。ステップ６７０で、ｊ＞ｎであるか否かを検査し、ｊ＞ｎである場合には、処理はステップ６８０に進み、ここで、シンボルＳ［ｉ］にＴをセットし、処理はステップ６２０に戻る。ステップ６７０でｊ≦ｎである場合には、処理はステップ６９０に進み、ここで、一時シンボル値Ｔを
2008544610.tif 000011
にリセットし、その後、処理はステップ６６０に戻る。
【００５７】
上の説明および図６から、Ｂ↓Ｓを計算するために必要なストレージ全体のシンボルの個数が、ｎ＋１個のシンボルであることが明らかである。
【００５８】
Ｂが、フォーマット（ｍ，ｎ）を有する行列であり、Ｓが、ｎ個のシンボルの列ベクトルであるものとする。ＢおよびＳを与えられて、次のように、Ｂ↑Ｓすなわち上向きでのＢによるＳのインプレース線形行列変換を定義する。
【００５９】
すべてのｉ＝ｍ，ｍ−１，．．．，１について
Ｓ［ｉ］をＢの第ｉ行と現在のＳとの内積に置換する。
【００６０】
このインプレース演算を計算する処理を、図７を参照して説明する。ステップ７１０で、整数変数ｉをｍ＋１に初期化する。ステップ７２０で、ｉの値をｐｒｅｖ（ｉ）に減らし、ここで、ｐｒｅｖ（ｉ）は、Ｂの行ｐｒｅｖ（ｉ）が少なくとも１つの非０要素を有する、ｉより小さい最大の整数であり、行ｉを超えるすべての行がすべて０の要素を有する場合には、ｐｒｅｖ（ｉ）に０がセットされる。ステップ７３０で、ｉ＜１であるか否かを検査し、ｉ＜１である場合には、処理はステップ７４０で停止するが、ｉ≧１である場合には、処理はステップ７５０に進み、ここで、一時シンボル値Ｔに０をセットし、整数変数ｊに０をセットする。ステップ７６０で、ｊの値をｎｅｘｔ（ｉ，ｊ）に増やし、ここで、ｎｅｘｔ（ｉ，ｊ）は、Ｂの行ｉでＢ［ｉ，ｎｅｘｔ（ｉ，ｊ）］が非０要素になる、ｊより大きい最小の整数であり、Ｂ［ｉ，ｊ］行ｉを超えるすべての要素がすべて０である場合には、ｎｅｘｔ（ｉ，ｊ）にｎ＋１がセットされる。ステップ７７０で、ｊ＞ｎであるか否かを検査し、ｊ＞ｎである場合には、処理はステップ７８０に進み、ここで、シンボルＳ［ｉ］にＴをセットし、処理はステップ７２０に戻る。ステップ７７０でｊ≦ｎである場合には、処理はステップ７９０に進み、ここで、一時シンボル値Ｔを
2008544610.tif 000012
にリセットし、その後、処理はステップ７６０に戻る。
【００６１】
上の説明および図７から、Ｂ↑Ｓを計算するために必要なストレージ全体のシンボルの個数が、ｎ＋１個のシンボルであることが明らかである。
【００６２】
Ｂが、すべてのｉ＝１，．．．，ｎについてＢ［ｉ，ｉ］≠０である、フォーマット（ｎ，ｎ）を有する行列であるものとする。行列
2008544610.tif 000013
は、次のようにＢから導出される行列である。
【００６３】
2008544610.tif 000014
2008544610.tif 000015
を、簡単にＢから計算でき、さらに、Ｂが疎な行列であり、効率的にアクセスできる場合に、
2008544610.tif 000016
も、疎な行列であり、効率的にアクセスできることに留意されたい。また、Ｂの要素がＧＦ（２）からのものである場合に、
2008544610.tif 000017
であることに留意されたい。定義したばかりの↑演算、↓演算、および〜演算は、次の特性を有する。Ｂが、すべてのｉ＝１，．．．，ｎについてＢ［ｉ，ｉ］≠０である、フォーマット（ｎ，ｎ）を有する行列であり、Ｓが、ｎ個のシンボルの列ベクトルであるものとする。Ｓ０が、変換を適用する前のＳの値を表すものとする、すなわち、当初にＳ＝Ｓ０である。すると、
2008544610.tif 000018
である。
【００６４】
したがって、たとえば、
2008544610.tif 000019
インプレース演算およびＢ↑インプレース演算は、上の意味で、互いの逆演算である。当業者が認めるであろうとおり、対称によって、たとえばＳ↓Ｂおよび
2008544610.tif 000020
の形のインプレース演算を定義することもでき、ここで、Ｓは、上で定義したものに類似する特性を有するｍ個のシンボルの行ベクトルである。
【００６５】
複数のクラスの行列に関するインプレース変換
これから、特殊な特性を有する線形変換のインプレース計算について処理を説明する。これらの線形変換は、その後に、より一般的な線形変換の計算用のインプレース処理を構成する基本構成要素として使用される。次では、Ｓは、ｍ個のシンボルの列ベクトルを表し、Ｂは、体Ｋ上のフォーマット（ｍ，ｎ）の行列を表し、Ｂは、たとえばＧＦ（２）の拡大体と考えることができ（しかし、この技法は、一般的なＫにも同等に良好に適用される）、この処理の終りで、シンボルＳのベクトルのストレージは、変換
2008544610.tif 000021
の結果を記憶する。
【００６６】
Ｂに必要なストレージをも最小化し、演算を計算するのに必要な全体的な計算を最小化するのに使用できる多数の技法があるが、一般に、これは、変換されるデータに必要なメモリより少ないメモリである。たとえば、Ｂが疎な行列である時に、Ｂの疎な表現が可能であり、この疎な表現は、すべての演算を実行するのに必要な全体的計算を最小化することもできる。たとえば、Ｂが疎な行列である時に、順次検索より効率的な、Ｂの特定の行または列内の次の非０要素を見つける形がある。このタイプの最適化は、本明細書で説明する技法と共に適用できる他の最適化と一緒に、この開示を読んだ後に当業者に明白になるに違いない。
【００６７】
２．１．順列行列
この事例では、Ｂは、フォーマット（ｎ，ｎ）の順列行列である、すなわち、Ｂは、各行および各列に正確に１つの非０要素を有し、その非０要素は１である。この行列は疎なので、すなわち、非０である非常に少数の要素を有するので、多くのアプリケーションで、これを行列ではなくリスト（または行列より少ないメモリを使用する別のオブジェクト）として表すことが望ましい。たとえば、Ｂをリスト（Ｂ［１］，．．．，Ｂ［ｎ］）として表すことができ、ここで、（ｊ，Ｂ［ｊ］）は、Ｂの非０要素の位置である。
【００６８】
Ｂを用いるＳの変換の処理を、これから図８を参照して説明する。２進ベクトルｖ［１］，．．．，ｖ［ｎ］が維持され、ここで、すべての成分が、最初に０に初期化される。この処理は、Ｔによって表される追加のシンボルを使用する。最初に、Ｔの値はすべて０である。
【００６９】
ステップ８０５で、変数ｃに０をセットする。この変数は、Ｂに対応する配列の位置のうちの何個を既に訪れたかをカウントする。ステップ８１０で、この変数の値を１つインクリメントし、ステップ８１５で、条件ｃ＜ｎ＋１とｖ［ｃ］＝１との両方が満足されるかどうかを検査する。そうである場合には、これは、配列の位置ｃを既に訪れており、調べるべき位置がまだあることを意味する。この処理は、ステップ８１０に戻る。そうでない場合には、ｃ＝ｎ＋１またはｖ［ｃ］＝０のいずれかである。前者の場合には、すべての位置を訪れており、この処理はステップ８２５で終了する。このテストは、ステップ８２０で実行される。ステップ８２０で、ｃがｎ＋１より小さい場合には、必ずｖ［ｃ］＝０である、すなわち、位置ｃはまだ訪れられていない。この場合には、ステップ８３０で、補助変数ｄにＢ［ｃ］をセットする。この値は、変換後にＳ［ｃ］がある位置と等しい。ステップ８３５で、テストを行って、ｄがｃと等しいかどうかを調べる。そうである場合には、それ以上の動作は不要であり、処理はステップ８６０にジャンプする。ステップ８６０では、値ｖ［ｃ］に１をセットし、カウンタｃを１つインクリメントする。ステップ８３５で、ｄがｃと等しくない場合には、ステップ８４０で、Ｔの値とＳ［ｃ］の値とを入れ替える。次に、ステップ８４５で、Ｔの値とＳ［ｄ］の値とを入れ替え、ｖ［ｄ］を、１と等しくなるようにセットし、ｄにＢ［ｄ］をセットする。ステップ８５０で、検査を行って、ｄの値がｃと等しいかどうかを調べ、これが偽である場合には、ステップ８４５および８５０からなるループをもう一度繰り返す。ｄがｃと等しい場合には、処理は、このループから出てジャンプし、ステップ８５５でＴの値とＳ［ｃ］の値とを入れ替える。ステップ８６０で、ｖ［ｃ］の値に１をセットし、プロセス全体は、ここでステップ８１０に戻り、ここで、ｃを１つインクリメントする。効果的に、説明された処理は、行列Ｂによって与えられる置換をサイクルに分解し、サイクルを１つずつ見つけ、処理する。
【００７０】
多くの場合に、Ｂを用いるＳのインプレース変換を計算するためにメモリ内でＳのシンボルをあちこちに移動するのではなく、メモリ内でＳのシンボルを移動せずにメモリ内のＳのシンボルの実際の位置に対するＳのシンボルの論理的順序付けの写像を記憶することで十分である。たとえば、次のように写像を維持することができる。ｐ［１］，．．．，ｐ［ｎ］が、Ｓの論理シンボルからメモリ内のそのシンボルの実際の位置への写像、すなわち、すべてのｉ＝１，．．．，ｎについて、ｐ［ｉ］が、Ｓの第ｉ論理シンボルのメモリ内の位置であるものとする。この写像を使用する時に、順列行列ＢによるＳの変換において、上で説明したようにＳ［１］，．．．，Ｓ［ｎ］に適用する代わりに、上で説明した処理をｐ［１］，．．．，ｐ［ｎ］に適用して、Ｓの論理対メモリ写像を再計算することができる。したがって、図８の処理を説明するために使用された変数Ｔは、シンボルＳ［ｃ］ではなくｐ［ｃ］の値を一時的に記憶するのに使用され、図８のシンボルのベクトルＳ［１］，．．．，Ｓ［ｎ］に適用される論理は、どのような論理であれ、その代わりにベクトルｐ［１］，．．．，ｐ［ｎ］に適用される。この表現は、有利である可能性がある。というのは、一般に、この表現が、通常ははるかにより大きいシンボル要素Ｓ［１］，．．．，Ｓ［ｎ］よりも通常ははるかに小さいｐ［１］，．．．，ｐ［ｎ］の要素をメモリ内で移動するためのＣＰＵ、メモリ帯域幅、および他のリソースに関してよりコストが低いであるからである。
【００７１】
単項行列(Monomial Matrix)
この場合に、Ｂは、すべての行およびすべての列に正確に１つの非０要素を有する、フォーマット（ｎ，ｎ）の行列である。順列行列は、単項行列の特殊事例である。単項行列のインプレース変換を計算する処理を、これから図９を参照して説明する。そのような行列は、リスト（Ｂ［１］，．．．，Ｂ［ｎ］；α［１］，．．．，α［ｎ］）によって簡潔に記述することができ、ここで、ｊのすべての関連する値について、Ｂ［ｊ］は、Ｂの行ｊの非０要素の位置であり、α［ｊ］は、その非０位置の値である。
【００７２】
Ｂに関するインプレース変換を計算する処理は、サブプロセスとしてＢの置換部分に関する線形変換を計算する処理を使用する。図９のステップ９０５で、この処理は、図８で説明した処理を使用して
2008544610.tif 000022
を計算し、ここで、Ｃは、Ｂの非０要素を１に置換することによって行列Ｂから得られる順列行列である。ステップ９１０で、整数変数ｉを０に初期化し、その後、ステップ９２０、９４０、および９５０で、ループを実行し、ここで、１とｎとの間のｉの値ごとに、Ｓ［ｉ］の値を、その位置に対するα［ｉ］の演算すなわちα［ｉ］＊Ｓ［ｉ］によって置換する。このループが完了した時に、処理はステップ９３０で停止する。当業者に明らかであるとおり、図９を参照して説明した処理は、
2008544610.tif 000023
を計算する。というのは、Ｂを、対角要素α［１］，．．．，α［ｎ］を有する対角行列と行列Ｃとの積として書くことができるからである。さらに、この処理中にシンボルに使用されるストレージは、ｎ＋１である。
【００７３】
上三角行列
Ｕが、上三角である（すべてのｊ＜ｉについてＵ［ｉ，ｊ］＝０）、フォーマット（ｎ，ｎ）の行列であるものとする。すると、
2008544610.tif 000024
である、すなわち、インプレース演算Ｕ↓Ｓは、ＳによるＵの乗算の結果と同一の、シンボルのｎ個のベクトルをもたらす。さらに、Ｕが可逆でもある（すべてのｉについてＵ［ｉ，ｉ］≠０）場合には、
2008544610.tif 000025
である、すなわち、インプレース演算
2008544610.tif 000026
は、ＳによるＵの逆行列の乗算の結果と同一の、シンボルのｎ個のベクトルをもたらす。したがって、行列乗算と逆行列乗算との両方を、上三角行列のインプレース演算を使用して達成することができる。Ｕが疎な行列である場合に、Ｕ↓Ｓと
2008544610.tif 000027
との両方が、疎な計算である、すなわち、Ｕによる乗算とＵの逆行列による乗算との両方を、Ｕ−１が必ずしも疎な行列ではない場合であっても疎なインプレース計算によって達成できることに留意されたい。
【００７４】
下三角行列
Ｌが、下三角である（すべてのｊ＞ｉについてＬ［ｉ，ｊ］＝０）、フォーマット（ｎ，ｎ）の行列であるものとする。すると、
2008544610.tif 000028
である、すなわち、インプレース演算Ｌ↑Ｓは、ＳによるＬの乗算の結果と同一の、シンボルのｎ個のベクトルをもたらす。さらに、Ｌが可逆でもある（すべてのｉについてＬ［ｉ，ｉ］≠０）場合には、
2008544610.tif 000029
である、すなわち、インプレース演算
2008544610.tif 000030
は、ＳによるＬの逆行列の乗算の結果と同一の、シンボルのｎ個のベクトルをもたらす。したがって、行列乗算と逆行列乗算との両方を、下三角行列のインプレース演算を使用して達成することができる。Ｌが疎な行列である場合に、Ｌ↑Ｓと
2008544610.tif 000031
との両方が、疎な計算である、すなわち、Ｌによる乗算とＬの逆行列による乗算との両方を、Ｌ−１が必ずしも疎な行列ではない場合であっても疎なインプレース計算によって達成できることに留意されたい。
【００７５】
積
この場合に、Ｂは、上で説明したタイプの行列の積である、すなわち、Ｂは、積Ｍ１・Ｍ２・．．．・Ｍｔであり、ここで、各Ｍｊは、順列行列、単項行列、上三角行列、または下三角行列のいずれかである。この行列の変換をインプレースで計算する処理は、Ｍｔを用いてＳを変換し、その後、Ｍｔ−１を用いて結果を変換することなどである。
【００７６】
一般的な正方行列
フォーマット（ｎ，ｎ）の行列Ｂについて、３つの行列Ｐ、Ｌ、およびＵの積へのＢの分解を計算することが可能であり、ここで、Ｐは順列行列であり、Ｌは主対角に１を有する下三角行列であり、Ｕは上三角行列である。そのような分解は、当業者に既知の通り、さまざまな処理によって計算することができる。これらの処理のうちの１つが、周知のガウス消去処理である。その場合に、ＢによるＳのインプレース変換すなわち、インプレース変換を使用する
2008544610.tif 000032
の計算は、単純に
2008544610.tif 000033
である。
【００７７】
任意の正方行列Ｂを用いるこのインプレース変換の計算の処理を、これから図１０を参照して詳細に説明する。ステップ１０１０で、ＢのＰＬＵ分解を計算する。上で述べたように、そのような分解は、さまざまな手段によって計算することができる。一般的な行列について、１つの可能な方法は、ガウス消去アルゴリズムを使用する。特殊な行列、たとえば疎な行列、コーシー行列などについて、当業者に既知の通り、より効率的な方法を使用することができる。ステップ１０２０で、シンボルのベクトルＳのインプレース変換Ｕ↓Ｓを、図６を参照して説明したように計算する。次に、ステップ１０３０で、シンボルの変換された組Ｓをもう一度変換し、今回は、図７を参照して説明したように、インプレース変換Ｌ↑Ｓを計算する。次に、ステップ１０４０で、シンボルの新しい変換された組Ｓをもう一度変換し、図８を参照して説明したように、順列行列ＰによるＳのインプレース変換を計算する。
【００７８】
Ｂが可逆である場合に、次の処理が、インプレース変換として
2008544610.tif 000034
を計算することに留意されたい。
【００７９】
2008544610.tif 000035
ここで、Ｐ−１は、Ｐの逆行列である順列行列である。
【００８０】
上で説明したインプレース変換処理を使用して
2008544610.tif 000036
を計算するのに必要な計算の量が、本質的に
2008544610.tif 000037
に関する計算量と同一であることに留意されたい。さらに、ＵとＬとの両方が、疎に表現され、たとえば、ｎ個の複数の非０要素において線形だけを有する場合に、
2008544610.tif 000038
と
2008544610.tif 000039
との両方を、上で説明したインプレース変換を使用して説明したとおりに、線形時間で計算することができる。この計算の任意の点でのシンボルの記憶に関する上で説明したインプレース変換の計算中に使用されるメモリまたはストレージの量は、ｎ＋１である。
【００８１】
本明細書で説明する処理が、非常に一般的であるが、重要なすべての場合において最も効率的な処理ではない場合があることに留意されたい。インプレース変換をこの一般的な事例より効率的に達成できる他の事例を、下で説明する。
【００８２】
非正方行列
フォーマット（ｍ，ｎ）の行列Ｂが正方行列ではない場合に、上で説明したものに似た方法を利用して、メモリの量を最小化する形で変換を計算することができる。たとえば、行列が、列より多数の行を有する（すなわち、ｍがｎより大きい）場合に、結果のベクトルの最初のｎ個の要素をインプレースで計算することだけが重要である。これは、次のように達成することができる。
【００８３】
Ｂ’が、Ｂの最初のｎ個の行によって形成される正方行列を識別し、Ｂ”が、Ｂの最後のｍ−ｎ個の行によって形成される行列を識別するものとする。Ｓが、変換されるシンボル値を当初に保持するｎ個のシンボルの列ベクトルであり、Ｓ’が、追加のｍ−ｎ個のシンボルの列ベクトルを識別するものとする。すると、
2008544610.tif 000040
を次のようにインプレースで計算することができる。
【００８４】
・Ｓ’を、上の”線形演算子”という題名のセクションで説明した”単純変換処理”などの単純な行列乗算を使用して、
2008544610.tif 000041
として計算する。
【００８５】
・Ｂ’＝Ｐ・Ｌ・ＵになるＰ、Ｌ、Ｕを計算し、ここで、Ｐは、順列行列であり、Ｌは、下三角行列であり、Ｕは、上三角行列である。
【００８６】
・インプレース変換
2008544610.tif 000042
を計算する。
【００８７】
行列Ｂ’が下三角である場合に、上の処理の最後の２ステップが、Ｂ’↑Ｓの計算に単純化され、行列Ｂ’が上三角である場合に、上の処理の最後の２ステップが、Ｂ’↓Ｓの計算に単純化されることに留意されたい。
【００８８】
同様に、ｎがｍより大きい場合に、類似する方法を使用して、次のようにベクトルＳの最初のｍ個の要素を置換する形で変換を計算することができる。Ｂ’が、Ｂの最初のｍ個の列によって形成される正方行列を識別し、Ｂ”が、Ｂの最後のｎ−ｍ個の列によって形成される行列を識別するものとする。Ｓが、変換されるシンボル値を当初に保持するｎ個のシンボルの列ベクトルであり、Ｓ’が、Ｓの最初のｍ個のシンボルを識別し、Ｓ”が、Ｓの最後のｎ−ｍ個のシンボルを識別するものとする。すると、
2008544610.tif 000043
を次のようにインプレースで計算することができる。
【００８９】
・Ｂ’＝Ｐ・Ｌ・ＵになるＰ、Ｌ、Ｕを計算し、ここで、Ｐは、順列行列であり、Ｌは、下三角行列であり、Ｕは、上三角行列である。
【００９０】
・インプレース変換
2008544610.tif 000044
を計算する。
【００９１】
・上の”線形演算子”という題名のセクションで説明した”単純変換処理”などの単純な行列乗算の小さい変形形態を使用して、
2008544610.tif 000045
の結果になるようにＳ’を更新する。
【００９２】
行列Ｂ’が下三角である場合に、上の処理の最初の２ステップが、Ｂ’↑Ｓ’の計算に単純化され、行列Ｂ’が上三角である場合に、上の処理の最初の２ステップが、Ｂ’↓Ｓ’の計算に単純化されることに留意されたい。
【００９３】
ほとんどの疎な行列に関する効率的なインプレース線形変換
Ｍが、図１１に示されたタイプのフォーマット（ｎ，ｎ）の正方行列であるものとする。図１１では、ｍ≦ｎであり、Ｌは、フォーマット（ｍ，ｍ）の下三角可逆行列であり、Ａは、フォーマット（ｍ，ｎ−ｍ）の行列であり、Ｂは、フォーマット（ｎ−ｍ，ｍ）の行列であり、Ｃは、フォーマット（ｎ−ｍ，ｎ−ｍ）の可逆行列である。
【００９４】
Ｓが、ｎ個のシンボルの列ベクトルであるものとする。下では、
2008544610.tif 000046
および
2008544610.tif 000047
を計算する効率的なインプレース変換を説明する。これらのインプレース変換は、効率的とインプレースとの両方である、後で説明するＦＥＣ符号化およびＦＥＣ復号化の方法および処理の一部の基礎を作る。タイプＭの行列が検討される、これらのＦＥＣ符号の一部について、Ｍは、疎な行列であり、たとえば、Ｍの非０要素の個数はｎ程度であり、ｎ−ｍは、ｎと比較して小さく、たとえば、ｎ−ｍはｎの平方根程度である。この例について、
2008544610.tif 000048
および
2008544610.tif 000049
を計算する、下で説明するインプレース変換を実行するのに必要な計算は、ｎシンボル演算程度であるが、この計算中にシンボルに使用される総空間または総メモリは、多くともｎ＋１である。
【００９５】
Ｍ’が、図１２に示されているようにＭから導出されるフォーマット（ｎ，ｎ）の正方行列であるものとする。図１２では、ＬおよびＢは、図１１に示されたＬおよびＢと同一の行列であり、最後のｎ−ｍ個の列および最初のｍ個の行によって形成される行列のすべての要素は、０であり、最後のｎ−ｍ個の列および最後のｎ−ｍ個の行によって形成される行列は、恒等行列である。Ｍ’が、可逆下三角行列であることに留意されたい。図１２には、Ｍ’の逆行列であるＭ’−１の形も示されている。
【００９６】
Ｄが、図１３Ａに示された、フォーマット（ｎ，ｎ−ｍ）の行列であるものとする。図１３Ａでは、ＡおよびＣが、図１１に示されたものと同一の行列ＡおよびＣである。行列Ｄは、ｎ個のシンボルの列ベクトルとみなすこともでき、各シンボルは、基礎になる体Ｋからのｎ−ｍ個の体要素の連結である。したがって、今説明したようにＤをｎ個のシンボルの列ベクトルとみなす時には、Ｄに対するフォーマット（ｎ，ｎ）の行列の演算を定義することができ、ｎ個のシンボルのベクトルとみなされるＤに対する行列の演算は、その行列と、行列とみなされる時のＤとの行列乗算と同一である。
【００９７】
今説明したように、Ｄをｎ個のシンボルの列ベクトルとみなすと、インプレース変換
2008544610.tif 000050
が、図１３Ｂに示された値を有するＤをもたらすことがわかり、ここで、Ｅをフォーマット（ｍ，ｎ−ｍ）の行列とみなす時に、Ｅ＝Ｌ−１・Ａであり、Ｆをフォーマット（ｎ−ｍ，ｎ−ｍ）の行列とみなす時に、Ｆ＝Ｃ−Ｂ・Ｌ−１・Ａである。ＣおよびＬは、両方とも可逆なので、Ｆも可逆であることを簡単に検証することができる。Ｐ、Λ、およびＹが、フォーマット（ｎ−ｍ，ｎ−ｍ）の行列であり、Ｆ＝Ｐ・Λ・Ｙであり、Ｐが順列行列であり、Λが下三角行列であり、Ｙが上三角行列であるものとする。この因数分解は、たとえば、周知のガウス消去法または類似する技法を使用して得ることができる。
【００９８】
Ｌ’が、図１４に示されたフォーマット（ｎ，ｎ）の正方行列であるものとする。図１４では、Ｌは、図１１に示された行列Ｌと同一の行列であり、最後のｎ−ｍ個の列および最初のｍ個の行によって形成される行列のすべての要素は、０であり、最後のｎ−ｍ個の行および最初のｍ個の列によって形成される行列のすべての要素は、０であり、最後のｎ−ｍ個の列および最後のｎ−ｍ個の行によって形成される行列は、恒等行列である。Ｌ’が、可逆下三角行列であることに留意されたい。図１４には、Ｌ’の逆行列であるＬ’−１の形も示されている。
【００９９】
Ｐ’、Λ’、およびＹ’が、それぞれ図１５Ａ、１５Ｂ、および１５Ｃに示されたフォーマット（ｎ−ｍ，ｎ−ｍ）の正方行列であるものとする。Ｐ、Λ、およびＹは、Ｆ＝Ｐ・Λ・Ｙである行列であり、Ｆは上で説明したものであり、Ｐ’、Λ’、およびＹ’のそれぞれで、最後のｎ−ｍ個の列および最初のｍ個の行によって形成される行列のすべての要素は、０であり、最後のｎ−ｍ個の行および最初のｍ個の列によって形成される行列のすべての要素は、０であり、最初のｍ個の行および最初のｍ個の列によって形成される行列は、恒等行列である。Ｐ’、Λ’、およびＹ’が、可逆行列であることに留意されたい。
【０１００】
Ｎ’が、図１６に示されたフォーマット（ｎ，ｎ）の正方行列であるものとする。図１６では、ＬおよびＡは、図１１に示されたものと同一の行列ＬおよびＡであり、最後のｎ−ｍ個の行および最初のｍ個の列によって形成される行列のすべての要素は、０であり、最後のｎ−ｍ個の列および最後のｎ−ｍ個の行によって形成される行列は、恒等行列である。Ｎ’が、可逆行列であり、文字どおりの下三角ではないが、Ｎ’↑Ｓがインプレースで
2008544610.tif 000051
の結果を計算することがわかることに留意されたい。図１６には、Ｎ’の逆行列であるＮ’−１の形も示されている。
2008544610.tif 000052
が、
2008544610.tif 000053
の結果をインプレースで計算することを検証することもできる。
【０１０１】
上で導入した表記に基づいて、入力ＭおよびＳに対するインプレース変換
2008544610.tif 000054
を計算する処理を、図１７を参照して説明する。ステップ１７１０で、インプレース変換Ｎ’↑Ｓを計算する。ステップ１７２０で、インプレース変換
2008544610.tif 000055
を計算し、ここで、Ｄは、上で説明したものであり、上で説明したように、行列Ｆ＝Ｃ−Ｂ・Ｌ−１・Ａは、変換の結果の最後のｎ−ｍ個の行である。ステップ１７３０で、上で説明したように、行列ＦをＰ、Λ、およびＹに因数分解する。ステップ１７４０で、インプレース変換Ｙ’↓Ｓを計算する。ステップ１７５０で、インプレース変換Λ’↑Ｓを計算する。ステップ１７６０で、インプレース変換
2008544610.tif 000056
を計算する。ステップ１７７０で、インプレース変換
2008544610.tif 000057
を計算する。ステップ１７８０で、インプレース変換Ｍ’↑Ｓを計算する。ステップ１７９０で、インプレース変換が完了するので、この処理は停止する。
【０１０２】
図１７で説明した処理の終りに、ベクトルＳに、ＭにオリジナルのベクトルＳを乗じた結果が格納されていることを検証することができる。この処理のどの点でも、シンボルに使用されるストレージが、多くともｎ＋１であり、すべてのステップにまたがって集計されたシンボル演算の回数が、Ｍの非０要素の個数と（ｎ−ｍ）２との合計で線形であることに留意されたい。
【０１０３】
さらなる効率および利点につなげることのできる、図１７で説明した処理の多数の変形形態がある。たとえば、インプレース演算中に、演算のうちで恒等部分行列に作用する部分は、結果を変更しないので、スキップすることができる、すなわち、Ｎ’↑Ｓを計算する時に、Ｎ’の最後のｎ−ｍ個の行を用いる演算は、このインプレース変換の結果に影響しないので、スキップすることができる。もう１つの変形形態の例として、ステップのいくつかを、結果に影響せずに並べ換えることができる。そのような変形形態の１つが、ステップ１７３０とステップ１７４０との間にステップ１７７０を実行することである。もう１つのそのような変形形態が、ステップ１７４０とステップ１７５０の間にステップ１７７０を実行することであり、この場合に、ステップ１７４０および１７７０を図２０に示された１つのインプレース変換に組み合わせ、ステップ１７５０および１７６０を図２１に示された１つのインプレース変換に組み合わせることが可能である。変形形態のもう１つの例として、ステップ１７３０、１７４０、１７５０、および１７６０を、Ｓの最後のｎ−ｍ個のシンボルを含む列ベクトルによるＦの乗算のステップおよびその結果によってＳの最後のｎ−ｍ個のシンボルを置換するステップに置換することができる。Ｆによる乗算は、たとえば、この開示で説明されるインプレース変換または標準行列乗算などの標準技法のいずれかを使用して実行することができる。
【０１０４】
上で導入した表記に基づいて、入力ＭおよびＳに対するインプレース変換
2008544610.tif 000058
を計算する処理を、図１８を参照して説明する。図１８を参照して説明するインプレース変換は、合計ｎ＋（ｎ−ｍ）＋１シンボル分のストレージを使用する、すなわち、図１７を参照して説明した処理よりｎ−ｍ個多いシンボルを使用し、シンボル演算の総数が、
2008544610.tif 000059
の単純な非インプレース計算で使用されるはずの演算の総数と同一であるという利益を有する。したがって、Ｍが疎である時に、図１８を参照して説明する処理は、わずかにより多いシンボルストレージを犠牲にして、図１７を参照して参照して説明した処理より少ない計算を行うことができる。後で説明するＦＥＣ符号への応用において、ｎ−ｍは、しばしば、ｎと比較して小さく、したがって、図１８を参照して説明する処理に必要なシンボルストレージの余分な量は、通常、図１７を参照して参照して説明した処理によって達成されるシンボルストレージの最小限の量と比較して、少ない。
【０１０５】
Ｗが、追加のｎ−ｍ個のシンボルの列ベクトルであるものとする。Ｑが、Ｍの最初のｍ個の行を含むフォーマット（ｍ，ｎ）の行列を識別し、Ｑ’が、Ｍの最後のｎ−ｍ個の行を含むフォーマット（ｎ−ｍ，ｎ）の行列を識別するものとする。図１８のステップ１８１０で、単純な行列乗算を使用して、
2008544610.tif 000060
を計算する。ステップ１８２０で、インプレース変換Ｑ↑Ｓを計算する。Ｑの最初のｍ個の列が、下三角行列Ｌを形成するので、ステップ１８２０で計算されるインプレース変換が、
2008544610.tif 000061
と等しいＳの最初のｍ個の要素をもたらすことに留意されたい。ステップ１８３０で、Ｓの最後のｎ−ｍ個のシンボルにＷをコピーする。ステップ１８４０で、インプレース変換が完了するので、この処理は停止する。
【０１０６】
上で導入した表記に基づいて、入力ＭおよびＳに対するインプレース変換
2008544610.tif 000062
を計算する処理を、図１９を参照して説明する。ステップ１９１０で、インプレース変換
2008544610.tif 000063
を計算する。ステップ１９２０で、インプレース変換Ｌ’↑Ｓを計算する。ステップ１９３０で、インプレース変換
2008544610.tif 000064
を計算し、ここで、Ｄは、上で説明したものであり、上で説明したように、行列Ｆ＝Ｃ−Ｂ・Ｌ−１・Ａは、変換の結果の最後のｎ−ｍ個の行である。ステップ１９４０で、上で説明したように、行列ＦをＰ、Λ、およびＹに因数分解する。ステップ１９５０で、インプレース変換
2008544610.tif 000065
を計算する。ステップ１９６０で、インプレース変換
2008544610.tif 000066
を計算する。ステップ１９７０で、インプレース変換
2008544610.tif 000067
を計算する。ステップ１９８０で、インプレース変換
2008544610.tif 000068
を計算する。ステップ１９９０で、インプレース変換が完了するので、この処理は停止する。
【０１０７】
図１９で説明した処理の終りに、ベクトルＳに、Ｍ−１にオリジナルのベクトルＳを乗じた結果が格納されていることを検証することができる。この処理のどの点でも、シンボルに使用されるストレージが、多くともｎ＋１であり、すべてのステップにまたがって集計されたシンボル演算の回数が、Ｍの非０要素の個数と（ｎ−ｍ）２との合計で線形であることに留意されたい。
【０１０８】
上で図１９を参照して説明したこの処理は、本質的に、図１７を参照して説明した処理の逆である。図１７を参照して説明した処理と同様に、さらなる効率および利点につなげることのできる、図１９で説明した処理の多数の変形形態がある。たとえば、ステップ１９４０、１９５０、１９６０、および１９７０を、Ｆ−１を判定するステップと、その後に、Ｓの最後のｎ−ｍ個のシンボルを含む列ベクトルをＦ−１に乗じるステップと、Ｓの最後のｎ−ｍ個のシンボルをその結果によって置換するステップとに置換することができる。Ｆ−１の判定およびこれによる乗算は、たとえば、この開示で説明されるインプレース変換または標準的なガウス消去法および行列乗算などの標準技法のいずれかを使用して実行することができる。このステップに標準行列乗算を使用する場合に、シンボル用のより多くのストレージ、たとえば、追加のｎ−ｍシンボル分のストレージが必要になる場合があり、その結果、たとえば、このインプレース変換中のシンボル用の最大ストレージが、２・ｎ−ｍ＋１シンボル分になるが、それでも、このインプレース変換全体の間でシンボルに使用されるストレージの全体的な量は、特にｍがｎに近い時に、標準技法が使用するはずの２・ｎより実質的に少ない。
【０１０９】
アプリケーション
リードソロモン符号
消去または破損の場合に伝送を保護する、ある線形符号クラスが、リードソロモン符号として知られている。循環符号、バンデルモンド行列に基づく符号、コーシー行列に基づく符号、または類似物など、この符号を記述する複数の同等の形がある。これらの場合のすべてで、符号化処理を、行列とのシンボルのベクトルの乗算によって記述することができる。ソースシンボルの個数がｋであり、出力シンボルの個数がｎであり、ｖが符号化されるｋ個のシンボルの列ベクトルを表し、ｗがｖの符号化を含むｎ個のシンボルの列ベクトルを表す場合に、この符号化処理を、
2008544610.tif 000069
と記述することができ、ここで、Ｍは、フォーマット（ｎ，ｋ）の行列であり、時々符号の生成行列とも呼ばれる。Ｍ’が、Ｍの最初のｋ個の行を含むフォーマット（ｋ，ｋ）の行列を識別し、Ｍ”が、Ｍの最後のｒ＝ｎ−ｋ個の行を含むフォーマット（ｒ，ｋ）の行列を識別するものとする。ｗ’が、ｗの最初のｋ個のシンボルを識別し、ｗ”が、ｗの最後のｒ個のシンボルを識別するものとする。
【０１１０】
符号が組織的である、すなわち、Ｍによるｖの行列乗算の後に結果ｗ’の最初のｋ個のシンボルがｖの要素と一致する場合に、Ｍ’は恒等行列である。組織的符号では、符号化されたベクトルｗ’の要素を、ソース位置と称する。その場合に、Ｍ”は、ｒ個の冗長なシンボルｗ”を計算するのに使用される。行列Ｍは、さまざまな形で表すことができる。たとえば、非組織的な版が望まれる場合に、Ｍをバンデルモンド行列とすることができる。組織的な場合に、Ｍ”が、コーシー行列を形成することができる。これらの表現は、例示のみのために言及されたものであり、決して網羅的なリストを形成するものではない。
【０１１１】
リードソロモン符号が非組織的である時に、図２０を参照して説明する処理は、その処理中に多くともｎ＋１個のシンボルのストレージを使用する符号化を作るインプレース変換を記述する。当初に、ｗ’は、符号化されるｋ個のシンボルを記憶する。この処理の終りに、ｗは、符号化の結果を記憶する、すなわち、ｗ’が、最初のｋ個の符号シンボルを記憶し、ｗ”が、生成された残りのｒ個の符号シンボルを記憶する。図２０のステップ２０１０で、単純な行列乗算、たとえば前に説明した”単純変換処理”を使用して、ｗ”を
2008544610.tif 000070
として計算する。ステップ２０２０で、Ｍ’をＰ、Ｌ、およびＵに因数分解し、ここで、これらの行列のそれぞれは、フォーマット（ｋ，ｋ）を有し、Ｐは、順列行列であり、Ｌは、下三角行列であり、Ｕは、上三角行列であり、したがってＭ’＝Ｐ・Ｌ・Ｕである。そのような分解は、さまざまな手法を用いて、たとえばガウス消去アルゴリズムを使用して計算することができ、あるいは、行列Ｍ’がコーシー行列である時には、このＰＬＵ分解を、ある公式を用いて計算することができ、これによって、この計算の計算の複雑さが減る。ステップ２０３０で、インプレース変換Ｕ↓ｗ’を計算する。ステップ２０４０で、インプレース変換Ｌ↑ｗ’を計算する。ステップ２０５０で、インプレース変換
2008544610.tif 000071
を計算する。ステップ２０６０で、インプレース変換が完了するので、この処理は停止する。符号シンボルが任意のシステム内で送られる順序が、それらの符号シンボルが記憶される順序である必要はなく、したがって、最後のステップ２０６０を実際に実行する必要がない場合があることに留意されたい。
【０１１２】
リードソロモン符号が組織的である時に、処理中に多くともｍ＋１個のシンボルのシンボルストレージを使用してｋ個のソースシンボルからｒ個の冗長シンボルを作るインプレース変換を、これから説明するが、ｍは、ｋおよびｒのうちの最大値である。この場合に、当初にｗ’に記憶されるソースシンボルは、生成される冗長シンボルによって、完全にまたは部分的にのいずれかで上書きされ、したがって、上書きされるソースシンボルは、一般に、ＦＥＣ符号化器を使用するアプリケーションによって制御される別のストレージ空間に保存され、あるいは、これらは、既に送信され、もはや記憶される必要がない。冗長シンボルの個数ｒが、ソースシンボルの個数ｋ以上である場合には、図２０で説明した処理のわずかな変形を使用して、多くともｒ＋１個のシンボルのストレージを使用して
2008544610.tif 000072
を計算するインプレース変換を使用して冗長シンボルを生成することができる。ｒ＜ｋの場合には、本明細書で図２１を参照して説明する処理を使用して、多くともｋ＋１個のシンボルのストレージを使用するインプレース変換を使用して冗長シンボルを生成することができる。ｖが、ｗ’の最初のｒ個のシンボルを識別し、ｖ’が、ｗ’の最後のｋ−ｒ個のシンボルを識別するものとする。当初に、ｗ’は、符号化されるｋ個のソースシンボルを記憶する。この処理の終りに、ｗ’の最初のｒ個の要素すなわちｖは、符号化のｒ個の冗長シンボルを記憶する。Ｂが、Ｍ”の最初のｒ個の列と同一である、フォーマット（ｒ，ｒ）の行列であり、Ｂ’が、Ｍ”の最後のｋ−ｒ個の列と同一である、フォーマット（ｒ，ｋ−ｒ）の行列であるものとする。図２１のステップ２１１０で、ＢをＰ、Ｌ、およびＵに因数分解し、ここで、これらの行列のそれぞれは、フォーマット（ｋ，ｋ）を有し、Ｐは、順列行列であり、Ｌは、下三角行列であり、Ｕは、上三角行列であり、したがって、Ｂ＝Ｐ・Ｌ・Ｕである。そのような分解は、さまざまな手法を用いて、たとえばガウス消去アルゴリズムを使用して計算することができ、あるいは、行列Ｂがコーシー行列である時には、このＰＬＵ分解を、ある公式を用いて計算することができ、これによって、この計算の計算の複雑さが減る。ステップ２１２０で、インプレース変換Ｕ↓ｖを計算する。ステップ２１３０で、インプレース変換Ｌ↑ｖを計算する。ステップ２１４０で、インプレース変換
2008544610.tif 000073
を計算する。ステップ２１５０で、上の”線形演算子”という題名のセクションで説明した”単純変換処理”などの単純な行列乗算の小さい変形形態を使用して、ｖを
2008544610.tif 000074
に更新する。ステップ２１６０で、インプレース変換が完了するので、この処理は停止する。
【０１１３】
送信されたシンボルが、受信の前に消去され得る通信チャネルでは、復号化の問題は、十分に多数の符号化されたシンボルの知識からすなわち、符号化が
2008544610.tif 000075
によって定義される場合に、ｗの十分に多数の要素の知識から、オリジナルのソースシンボルのベクトルｖを判定するという問題である。リードソロモン符号の場合に、”十分に多数のシンボル”は、アプリケーションならびに復号化に使用可能な計算リソースおよびストレージリソースに依存して、ｋ個もの少数のシンボルまたはｋ個を超えるシンボルと解釈される場合がある。
【０１１４】
次では、上で説明した一般的なインプレース変換方法の、組織的リードソロモン符号のインプレース復号化の問題への例示的適用を説明する。開示される方法は、この開示を読んだ後に、当業者によって、非組織的な版などのリードソロモン復号化の他の事例に簡単に一般化することができる。
【０１１５】
組織的リードソロモン符号のインプレース復号化の方法を、これから図２２および図２３を参照して説明する。図２２に示された例示的処理では、ステップ２２０５で、行列Ｍ”の列に関する、ｐ［１］，．．．，ｐ［ｅ］によって表される消去されたソースシンボル位置を識別し、ステップ２２１０で、行列Ｍ”の行に関する、受信された冗長シンボルの位置ｒ［１］，．．．，ｒ［ｅ］を識別する。図２２に示された例示的処理に関して、受信されたシンボルが、ｋ個のシンボルの列ベクトルｖに記憶されると仮定し、ここで、位置ｐ［１］，．．．，ｐ［ｅ］のシンボルは、受信された冗長シンボルであり、ｖの他のｋ−ｅ個の位置のシンボルは、その正しい位置にある、受信されたソースシンボルであり、復号化器の仕事は、位置ｐ［１］，．．．，ｐ［ｅ］で、ｖを欠けているソースシンボルに変換することである。変数ｉに基づく外側ループが、ステップ２２２０から２２５０までで定義され、効果的に、これらのステップが、１と消去されたソース位置の個数ｅとの間のｉの値について実行される。このループに入る前に、ステップ２２１５で、ｉの値を１に初期化する。ステップ２２２５から２２４０までのループは、１とｋとの間でｐ［１］，．．．，ｐ［ｅ］のいずれとも等しくないｊの値にわたって進み、そのようなｊごとに、ｖ［ｐ［ｉ］］の値をＭ”［ｒ［ｉ］，ｊ］＊ｖ［ｊ］の値に加算することによって、ｖ［ｐ［ｉ］］を更新する。
【０１１６】
図２３の処理では、ｖ［ｐ［１］］，．．．，ｖ［ｐ［ｅ］］によって形成されるベクトルをｚによって表し、行列Ｍ”の行ｒ［１］，．．．，ｒ［ｅ］および列ｐ［１］，．．．，ｐ［ｅ］によって形成される行列の逆行列をＴによって表す。リードソロモン符号の一般理論は、当業者に周知の通り、この行列が必ず可逆であることを示す。この逆行列およびそのＰＬＵ分解を、ステップ２３０５で計算する。そのようなＰＬＵ分解は、さまざまな手法を用いて、たとえばガウス消去アルゴリズムを使用して計算することができ、あるいは、行列Ｍ”がコーシー行列である時には、このＰＬＵ分解を、ある公式を用いて計算することができ、これによって、この計算の計算の複雑さが減る。ＴのＰＬＵ分解を、行列Ｔを必ずしも明示的に計算せずに、この処理によって直接に計算できることに留意されたい。ステップ２３１０で、図６で説明した処理を使用して、インプレース変換Ｕ↓ｚを計算する。ステップ２３２０で、図７の処理を使用して、Ｌ↑ｚを計算する。ステップ２３３０で、図８の処理を使用して、インプレース変換
2008544610.tif 000076
を計算する。ステップ２３４０では、リードソロモン符号のインプレース復号化が完了するので、この処理は停止する。
【０１１７】
図２３を参照して説明した全体的なインプレース変換は、処理中に多くともｋ＋１個のシンボルのストレージを使用する。
【０１１８】
本明細書でリードソロモン符号について説明した処理は、例示のみを目的とし、本発明の範囲を限定することは意図されていない。より一般的に、非常に似た方法を、代数幾何符号（略してＡＧ符号）、ＢＣＨ符号、または生成行列が明示的に知られている任意の他の符号クラスなど、類似する符号クラスのインプレース復号化に適用することができる。
【０１１９】
一般化リピートアキュミュレート（ＧＲＡ）符号
一般に、これは、組織的符号であり、ｋは、ソースシンボルの個数であり、ｒは、冗長シンボルの個数であり、したがって、ｎ＝ｋ＋ｒが、この符号化のシンボルの総数である。この場合に、ｒ個の冗長シンボルの列ベクトルｚは、ｋ個のソースシンボルの列ベクトルｖから、次のように構成される。フォーマット（ｒ，ｋ）の行列Ａを選択し、疎な上三角行列または疎な下三角行列である、フォーマット（ｒ，ｒ）のもう１つの行列Ｕを選択する。この例の説明について、Ｕは、上三角行列として任意に選択される。すると、
2008544610.tif 000077
である。
【０１２０】
文献で一般に見られる非正則リピートアキュミュレート（ＩＲＡ）符号の事例は、Ａが、各行および各列内の１の個数の規定された分布を有する行列の集合からランダムにサンプリングされた２進行列と仮定され、Ｕが、主対角上の１、主対角の真上の対角線上の１、および他のすべての要素の０を有する上三角行列であり、したがってＵが疎である、この構成の特殊事例である。この例について、Ｕ−１ｉが、主対角およびその上のすべての要素に１を有する密な上三角行列であることに留意されたい。したがって、Ａが、各行内の３つの１および各列内の３つの１を有するように選択された正方行列であると仮定する。この例では、計算される冗長シンボルは、ソースシンボルに対する非常に不規則な依存性を有し、たとえば、ｚの最後の冗長シンボルは、ｖのソースシンボルのうちの３つのＸＯＲであり、ｚの最後から２番目の冗長シンボルは、ｖのソースシンボルのうちの６つのＸＯＲであるなどである。
【０１２１】
ＧＲＡ符号のインプレース符号化処理を、これから図２４を参照して説明する。この説明について、ｒが、多くともｋである、すなわち、冗長シンボルの個数が、多くともソースシンボルの個数であると仮定する。ｒがｋより大きい場合について、行より多数の列を有する行列にシンボルの列ベクトルを乗算するインプレース処理ではなく、列より多数の行を有する行列にシンボルの列ベクトルを乗算するインプレース処理を使用することによって、この処理を変更することができる。Ａ’が、Ａの最初のｒ個の列によって形成される正方行列を識別し、Ａ”が、Ａの最後のｋ−ｒ個の列によって形成される行列を識別するものとする。ｖが、当初にソースシンボルを保持するｋ個のシンボルの列ベクトルであり、ｖ’が、ｖの最初のｒ個のシンボルを識別し、ｖ”が、ｖの最後のｋ−ｒ個のシンボルを識別するものとする。図２４のステップ２４１０で、行列Ａ’をＰ、Ｌ、Ｙに因数分解し、ここで、Ｐは、順列行列であり、Ｌは、下三角行列であり、Ｙは、上三角行列であり、Ａ’＝Ｐ・Ｌ・Ｙである。標準ガウス消去法の使用を含むさまざまな方法を使用して、この因数分解を実行することができる。ステップ２４２０で、インプレース変換Ｙ↓ｖ’を計算し、ステップ２４３０で、インプレース変換Ｌ↑ｖ’を計算し、ステップ２４４０で、インプレース変換
2008544610.tif 000078
を計算する。ステップ２４５０で、上の”線形演算子”という題名のセクションで説明した”単純変換処理”などの単純な行列乗算の小さい変形形態を使用して、インプレース変換
2008544610.tif 000079
を計算する。ステップ２４６０で、インプレース変換
2008544610.tif 000080
を計算する。ステップ２４７０で計算が停止し、結果のｒ個の冗長シンボルは、ｖの最初のｒ個のシンボルすなわちｖ’に記憶されている。
【０１２２】
図２４を参照して説明した処理の多数の変形形態がある。たとえば、ステップ２４１０、２４２０、２４３０、および２４４０を、米国特許第６８５６２６３号、名称”Systems and Processes for Decoding Chain Reaction Codes Through Inactivation”（以下、”Ｉｎａｃｔｉｖａｔｉｏｎ  Ｄｅｃｏｄｅｒ”）で開示されたものなどの、より洗練された手法に置換して、行列Ａを図１１に示されたものに類似する形で記述し、その後、図１７を参照して説明した処理の変形形態を使用して、インプレース変換を使用して
2008544610.tif 000081
を計算することができる。たとえば、Ａが、各行内の３つの１および各列内の３つの１を有するように選択された正方行列である、すなわち、ｒ＝ｋの場合に、Ａを図１１に示された形にすることが可能であり、ここで、部分行列Ｌは、約（０．８６ｋ，０．８６ｋ）のフォーマットを有し、部分行列Ｃは、約（０．１４ｋ，０．１４ｋ）のフォーマットを有する。この場合に、図１７を参照して説明したインプレース変換処理を使用することができ、これによって、処理中に記憶に使用されるシンボルの個数が最小化される。もう１つの変形形態として、図１８を参照して説明したインプレース変換処理を使用して、
2008544610.tif 000082
を計算することができ、これによって、３・ｋ回すなわち、単純な形で
2008544610.tif 000083
を計算するのに使用されるはずのシンボル演算と同一の回数のシンボル演算が使用されるが、１．１４・ｋ個のシンボルのストレージだけが使用される。
【０１２３】
連鎖符号のインプレース復号化
連鎖符号が、米国特許第６３０７４８７号、名称”Information Additive Code Generator and Decoder for Communications Systems”および米国特許出願第１０／０３２，１５６号、名称”Multi-Stage Code Generator and Decoder for Communications Systems”に記載されている。たとえば”Ｉｎａｃｔｉｖａｔｉｏｎ  Ｄｅｃｏｄｅｒ”で開示された復号化器など、複数の復号化器が、そのような符号用に設計されてきた。”Ｉｎａｃｔｉｖａｔｉｏｎ  Ｄｅｃｏｄｅｒ”で開示された復号化器では、復号化処理が、
2008544610.tif 000084
の形の線形連立方程式を解くことに変形され、ここで、Ｔは、ランクｎのフォーマット（ｓ，ｎ）の行列であり、ｓは少なくともｎであり、ｎは中間シンボルの個数であり、ｋはソースシンボルの個数であり、ｒは冗長シンボルの個数であり、したがって、ｎ＝ｋ＋ｒである。冗長シンボルの個数ｒが、連鎖符号のいくつかの実施形態について０であり、他の実施形態について、冗長シンボルの個数ｒが０より大きいことに留意されたい。Ｔの行は、動的な出力シンボルおよび冗長（プレコーディング（pre-coding））シンボルに対応し、ｘは、ソースシンボルおよび冗長（プレコーディング）シンボルを含む、それについて解く必要がある当初に未知の値を有するｎ個のシンボルのベクトルであり、ｚは、受信されたシンボルおよびプレコード（pre-code）のチェックシンボルを含む既知の値を有するｓ個のシンボルのベクトルである。いくつかのアプリケーションでは、チェックシンボルが０の値を有するが、他のアプリケーションでは、この値が０と異なる場合がある。チェックシンボル値がどのようにセットされるかにかかわりなく、チェックシンボル値は、符号化器と復号化器との間の以前の通信を介してまたは他のステップによってのいずれかで復号化器に知られる。
【０１２４】
”Ｉｎａｃｔｉｖａｔｉｏｎ  Ｄｅｃｏｄｅｒ”は、行列ＴをＴ＝Ｑ・Ｍ・Ｐの形に変換することによって未知のシンボルｘを解く処理を使用し、ここで、Ｑは、フォーマット（ｓ，ｓ）の順列行列であり、Ｐは、フォーマット（ｎ，ｎ）の順列行列であり、Ｍは、フォーマット（ｓ，ｎ）、ランクｎであり、ＢとＣとの両方がｎ−ｍ個の行ではなくｓ−ｍ個の行を有することを除いて図１１に示されたものに類似する形を有する行列である。その中で、行列Ｌは、フォーマット（ｍ，ｍ）の下三角２進行列であり、Ａ、Ｂ、およびＣは、適当な大きさの行列であり、好ましいアプリケーションでは、ＡおよびＬを疎な行列とすることができる、すなわち、ＡおよびＬを、多数の非０位置を有しないものとすることができる。この因数分解を使用すると、シンボルの受信されたベクトルｚから未知のベクトルｘを回復するという問題は、（ａ）好ましくは、結果もｚに記憶されるようにするためにインプレースで、
2008544610.tif 000085
を計算し、（ｂ）好ましくは、結果ｙがｚの最初のｎ個の要素に記憶されるようにするためにインプレースで、未知のベクトルｙについて、連立方程式
2008544610.tif 000086
を解き、（ｃ）好ましくは、結果ｘがｚの最初のｎ個の要素に記憶されるようにするためにインプレースで、連立方程式
2008544610.tif 000087
を解くことという問題に変形することができる。これらのステップは、互いと同時に実行することができる。作業（ａ）および（ｃ）は、上で本明細書の前の技術のセクションで説明され、たとえば、図８を参照して説明した処理が、インプレース変換を使用して作業（ａ）および（ｃ）を実行する１つの形である。
【０１２５】
ｚを与えられて未知のベクトルｙについて
2008544610.tif 000088
を解く処理の実施形態を、これから図１１、図１２、図１３Ａ、図１３Ｂ、図１４、図１５、図１６、および図１９を参照して提供し、ここで、Ｓは、この処理の始めにｚに記憶されたｓ個のシンボルのベクトルを識別し、Ｓの最初のｎ個のシンボルは、この処理の終りにベクトルｙと等しい。図１９を参照して説明した処理と現在の処理との間の１つの相違は、Ｍが、図１１に示されたｎ個の行ではなくｓ個の行を有することである。したがって、現在の実施形態の第１ステップは、一緒にランクｎの行列を形成する、Ｍのｎ個の行を判定し、次に、フォーマット（ｎ，ｎ）の結果のフルランク正方行列になるようにＭを再定義することである。現在の実施形態の残りのステップは、図１１、図１２、図１３Ａ、図１３Ｂ、図１４、図１５、および図１６を参照して、前に図１９を参照して説明した処理を実行することである。
【０１２６】
説明したばかりの実施形態に対する多数の変形形態がある。たとえば、第１ステップでフォーマット（ｓ，ｎ）のオリジナルの行列Ｍのどのｎ個の行を使用するかを判定するのではなく、処理が進行する際に、たとえば”Ｉｎａｃｔｉｖａｔｉｏｎ  Ｄｅｃｏｄｅｒ”に記載の方法を使用して、部分行列Ｌ、Ａ、Ｂ、およびＣを増分式に判定することができる。したがって、図１９のステップ１９１０および１９３０で説明した処理の変形形態を、”Ｉｎａｃｔｉｖａｔｉｏｎ  Ｄｅｃｏｄｅｒ”に記載の方法を使用して実行して、これらの行列を増分式に形成し、図１９のステップ１９１０および１９３０に記載のステップの同等物を実行することができる。これらのステップの終りに、ランクｎを有するＭのｎ個の行が、判定されており、Ｍのこれらの行が、図１１に示された形に論理的に操作されている。その後、図１９に示されたステップの残りを適当な順序で適用して、インプレース変換処理を完了することができる。
【０１２７】
当業者が認めるとおり、説明したばかりの２つの実施形態に対する多数の変形形態がある。たとえば、図１９を参照して説明した処理の変形形態を、この２つの実施形態に適用することもできる。
【０１２８】
連鎖符号のインプレース組織的符号化
Ｓｈｏｋｒｏｌｌａｈｉ他が出願した米国特許出願第１０／６７７，６２４号、名称”Systematic Encoding and Decoding of Chain Reaction Codes”（以下では”ＳｈｏｋｒｏｌｌａｈｉＩ”）に、連鎖符号、具体的にはマルチステージ連鎖符号の組織的符号化の方法が記載されている。この方法では、ソースシンボルが、まず、線形変換を使用して中間シンボルの組に変換される。この変換は、
2008544610.tif 000089
という形を有し、ここで、Ｔは、ソースシンボルおよび冗長（プレコーディング）シンボルに対応する行を有する、フォーマット（ｎ，ｎ）のフルランク行列であり、ｘは、それについて解かなければならない当初に未知の値を有する中間シンボルのベクトルであり、ｚは、ソースシンボルおよびプレコードのチェックシンボルに対応する既知の値を有するシンボルのベクトルである。
【０１２９】
この連立方程式は、Ｔが正方行列である時に、セクション”連鎖符号のインプレース復号化”で説明したより一般的な事例の特殊事例である。したがって、セクション”連鎖符号のインプレース復号化”で説明したインプレース変換の実施形態を使用して、インプレース変換を使用して既知のソースシンボルから中間シンボルを計算することができる。
【０１３０】
連鎖符号のインプレース組織的復号化
Ｓｈｏｋｒｏｌｌａｈｉ  Ｉに記載の方法は、一連のステップを実行して、ソースシンボルの一部および組織的符号化器によって生成された一部の出力シンボルの組合せから、すべてのソースシンボルを入手する。この方法の好ましい実施形態では、ソースシンボルの一部を含むすべての受信されたシンボルおよび他の出力シンボルを集め、復号化して、中間シンボルの組を入手する。次に、中間シンボルを変換して、欠けているソースシンボルを入手する。受信されたシンボルからの中間シンボルのインプレース計算は、上で見出し”連鎖符号のインプレース復号化”の下で説明したものと同一である。このセクションでは、中間シンボルからのソースシンボルのインプレース計算を説明する。ＳｈｏｋｒｏｌｌａｈｉＩから明白であるとおり、また、上で説明した事例に似て、この問題は、
2008544610.tif 000090
を計算するという問題に変形することができ、ここで、Ｔは、フルランクであるフォーマット（ｎ，ｎ）の行列であり、Ｓは、ｎ個の中間シンボルの列ベクトルである。行列Ｔは、
Ｔ＝Ｐ・Ｍ・Ｑ
と表すことができ、ここで、ＰおよびＱは、フォーマット（ｎ，ｎ）の順列行列であり、Ｍは、図１１に示された形のフォーマット（ｎ，ｎ）の行列である。
【０１３１】
2008544610.tif 000091
を計算するインプレース変換の実施形態は、図１１、図１２、図１３Ａ、図１３Ｂ、図１４、図１５Ａ〜Ｃ、図１６、および図１７をも参照する、図１７を参照して説明した処理である。この実施形態は、処理中に多くともｎ＋１個のシンボルのストレージを使用する。図１７を参照して説明した処理の変形形態も、この実施形態に適用される。
【０１３２】
2008544610.tif 000092
を計算するインプレース変換の第２の実施形態は、図１８を参照して説明した処理である。この実施形態は、処理中に多くともｎ＋（ｎ−ｍ）＋１のストレージを使用する。連鎖符号の好ましい実施形態では、ｎ−ｍは、ｎの値に対して相対的に小さく、したがって、この処理中に使用されるシンボルストレージの相対サイズは、ｎよりわずかに大きい。図１８を参照して説明した処理の変形形態も、この実施形態に適用される。
【０１３３】
インプレース変換処理を使用して、受信された出力シンボルから中間シンボルを計算する、上で説明した実施形態と、インプレース変換処理を使用して、回復された入力シンボルからソースシンボルを計算する、上で説明した実施形態とを組み合わせて、インプレース変換を使用して、受信された出力シンボルからソースシンボルを計算する全体的な実施形態を提供することができ、ここで、そのような２つの処理の組合せによって使用される、シンボルのストレージは、多くとも、各処理が個別に使用するシンボルのストレージである。
【０１３４】
上の説明は、説明だけを目的とし、本発明の範囲を限定することは意図されていない。多数の同等の版および方法が、本開示を読んだ時に可能である。たとえば、上の方法において、ステップ２での行列ＤのＬＵ分解の計算を、オフラインで行うことができる。
【０１３５】
ここまでで説明したように、線形変換演算を構成する新規のメモリ効率のよい手法が教示される。本明細書で示された例では、線形変換処理が、複数の出力要素を導出するために複数の入力要素に線形変換を適用する処理である。本明細書で説明する処理では、メモリは、線形変換処理に使用可能な入力要素を記憶するために割り振られ、そのメモリの少なくとも一部は、導出された出力要素を記憶するために再利用される。そのような手法を使用すると、複数の入力要素を保持するのに十分に大きいメモリおよび複数の出力要素を保持するのに十分に大きいメモリを必要とするのではなく、その複数の入力要素および複数の出力要素のうちの大きい方（必要な場合にはそれに加えて多少のオーバーヘッド）を保持するのに十分なメモリ役に立ち、貴重なメモリ空間が節約される。
【０１３６】
本明細書で説明した技法は、ＦＥＣ符号化またはＦＥＣ復号化、消去符号化または消去復号化、エラー訂正、あるいは類似物のための変換など、さまざまな線形変換に使用することができる。ＦＥＣ符号は、リードソロモン符号、連鎖符号、マルチステージ連鎖符号、または任意の他の線形符号などの符号を用いることができる。この変換を実行する論理は、入力要素を読み取って出力要素を生成し、使い果たされた入力要素のためのメモリを、生成された出力要素（または中間要素（この中間要素が、次に、使い果たされる可能性がある））を記憶するために再利用することができる。
【０１３７】
本発明を、例示的実施形態に関して説明してきたが、当業者は、多数の変更が可能であることを認めるであろう。たとえば、本明細書で説明した処理は、ハードウェア構成要素、ソフトウェア構成要素、および／またはその任意の組合せを使用して実施することができる。したがって、本発明を、例示的実施形態に関して説明したが、本発明が、添付の特許請求の範囲の範囲に含まれるすべての修正形態および同等物を含むことが意図されていることを了解されたい。
【０１３８】
関連出願の相互参照
本願は、参照によってその全体が組み込まれている２００５年６月１０日出願の米国仮出願第６０／６８９，６３２号の利益を主張し、その非仮出願である。
【図面の簡単な説明】
【０１３９】
【図１】本発明の実施形態によるＦＥＣ符号化を使用する通信システムを示す高水準の図である。
【図２】図１のシステムに類似するが、複数の送信機および受信機を有する通信システムを示す図である。
【図３】送信機および／または受信機を実施するのに使用できるハードウェアの例を示す図である。
【図４】従来のＦＥＣ復号化処理を示す図である。
【図５】本発明によるインプレースＦＥＣ復号化処理の実施形態を示す図である。
【図６】本発明の実施形態による変換処理を示すフローチャートである。
【図７】組織的リードソロモン符号のインプレース復号化の方法を示すフローチャートである。
【図８】組織的リードソロモン符号のインプレース復号化の方法をさらに示すフローチャートである。
【図９】ベクトル計算の方法を示すフローチャートである。
【図１０】ベクトル計算の方法を示すフローチャートである。
【図１１】復号化に使用可能な行列を示す図である。
【図１２】行列およびその変換を示す図である。
【図１３Ａ】処理に使用可能なデータ構造を示す図である。
【図１３Ｂ】処理に使用可能なデータ構造を示す図である。
【図１４】行列およびその変換を示す図である。
【図１５Ａ】行列およびその変換を示す図である。
【図１５Ｂ】行列およびその変換を示す図である。
【図１５Ｃ】行列およびその変換を示す図である。
【図１６】行列およびその変換を示す図である。
【図１７】ある方法を示すフローチャートである。
【図１８】ある方法を示すフローチャートである。
【図１９】ある方法を示すフローチャートである。
【図２０】ある方法を示すフローチャートである。
【図２１】ある方法を示すフローチャートである。
【図２２】ある方法を示すフローチャートである。
【図２３】ある方法を示すフローチャートである。
【図２４】ある方法を示すフローチャートである。
【図１】
2008544610.tif 000093
【図２】
2008544610.tif 000094
【図３】
2008544610.tif 000095
【図４】
2008544610.tif 000096
【図５】
2008544610.tif 000097
【図６】
2008544610.tif 000098
【図７】
2008544610.tif 000099
【図８】
2008544610.tif 000100
【図９】
2008544610.tif 000101
【図１０】
2008544610.tif 000102
【図１１】
2008544610.tif 000103
【図１２】
2008544610.tif 000104
【図１３Ａ】
2008544610.tif 000105
【図１３Ｂ】
2008544610.tif 000106
【図１４】
2008544610.tif 000107
【図１５Ａ】
2008544610.tif 000108
【図１５Ｂ】
2008544610.tif 000109
【図１５Ｃ】
2008544610.tif 000110
【図１６】
2008544610.tif 000111
【図１７】
2008544610.tif 000112
【図１８】
2008544610.tif 000113
【図１９】
2008544610.tif 000114
【図２０】
2008544610.tif 000115
【図２１】
2008544610.tif 000116
【図２２】
2008544610.tif 000117
【図２３】
2008544610.tif 000118
【図２４】
2008544610.tif 000119
【手続補正書】
【提出日】平成20年2月6日(2008.2.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のソースシンボルとして整列されたデータを複数の符号化シンボルに符号化する符号化器において、ソースシンボルから符号化シンボルへの変換を実行する方法であって、ここで、ｋ個のソースシンボルはｎ個の符号化シンボルに変換され、該方法は、
第１のメモリに格納された前記ｋ個のソースシンボルにアクセスするステップと、
出力シンボルの中間セットを提供するため、前記ｋ個のソースシンボルの行列演算を計算する第１の変換段階を実行するステップであって、少なくとも前記中間セットのいくつかは前記ｎ個の符号化シンボルのいくつかを含む、ステップと、
出力シンボルの前記中間セットを前記第１のメモリに格納し、前記ｋ個のソースシンボルの少なくともいくつかを置換するステップであって、前記中間セット内の出力シンボルの個数は前記ｎより少ない、ステップと、
前記第１のメモリが少なくとも前記ｎ個の符号化シンボルと前記ｋ個の全てよりは少ないソースシンボルとを含むようになるまで、実行する前記ステップと格納する前記ステップとを繰り返すステップと、
を含み、
前記ｋ個のソースシンボルから生成された前記ｎ個の符号化シンボルはエラー訂正で使用されることを特徴とする方法。
【請求項２】
変換処理において、前記第１のメモリ内のシンボルの最大数はｎ＋１およびｋ＋１のうち大きい方より大きくはないことを特徴とする請求項１に記載の方法。
【請求項３】
変換処理において、前記第１のメモリ内のシンボルの最大数はｋ＋ｎよりもｎ＋１およびｋ＋１のうち大きい方により近いことを特徴とする請求項１に記載の方法。
【請求項４】
ｎはｋと等しくないことを特徴とする請求項１に記載の方法。
【請求項５】
ｎはｋと等しいことを特徴とする請求項１に記載の方法。
【請求項６】
前記変換は、リードソロモン符号、ＧＲＡ符号、連鎖反応符号およびＬＤＰＣ符号の何れか１つを表すことを特徴とする請求項１に記載の方法。
【請求項７】
前記変換に使用されるシンボル演算の数は、前記行列の非ゼロ要素の個数または前記行列の逆行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項１に記載の方法。
【請求項８】
前記行列は、インプレース符号化が可能な符号化行列の分解を含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記行列は、効率的なインプレース符号化が可能な符号を表すことを特徴とする請求項１に記載の方法。
【請求項１０】
前記エラー訂正は、消去訂正であることを特徴とする請求項１に記載の方法。
【請求項１１】
複数の符号化ソースシンボルとして整列されたデータを複数の復号化シンボルに復号化する復号化器において、前記符号化シンボルから前記復号化シンボルへの変換を実行する方法であって、ここで、ｒ個の符号化シンボルはｄ個の復号化シンボルに変換され、該方法は、
第１のメモリに格納された前記ｒ個の符号化シンボルにアクセスするステップであって、該ｒ個の符号化シンボルはｋ個のソースシンボルからエラー訂正での使用のために生成される、ステップと、
行列演算を計算する第１の変換段階を実行するステップであって、該演算は符号化行列の逆行列であり、出力シンボルの中間セットを提供するため前記ｒ個の符号化シンボルに対し演算し、少なくとも前記中間セットのいくつかは前記ｄ個の復号化シンボルのいくつかを含む、ステップと、
出力シンボルの前記中間セットを前記第１のメモリに格納し、前記ｒ個の符号化シンボルの少なくともいくつかを置換するステップであって、前記中間セット内の出力シンボルの個数は前記ｄより少ない、ステップと、
前記第１のメモリが少なくとも前記ｄ個の復号化シンボルと前記ｒ個の全てよりは少ない符号化シンボルとを含むようになるまで、実行する前記ステップと格納する前記ステップとを繰り返すステップと、
を含むことを特徴とする方法。
【請求項１２】
変換処理において、前記第１のメモリ内のシンボルの最大数はｒ＋１およびｄ＋１のうち大きい方より大きくはないことを特徴とする請求項１１に記載の方法。
【請求項１３】
変換処理において、前記第１のメモリ内のシンボルの最大数はｒ＋ｄよりもｒ＋１およびｄ＋１のうち大きい方により近いことを特徴とする請求項１１に記載の方法。
【請求項１４】
前記変換は、リードソロモン復号、ＧＲＡ復号、連鎖反応復号およびＬＤＰＣ復号の何れか１つを表すことを特徴とする請求項１１に記載の方法。
【請求項１５】
前記変換に使用されるシンボル演算の数は、前記行列の非ゼロ要素の個数または前記行列の逆行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項１１に記載の方法。
【請求項１６】
前記行列は、インプレース復号化が可能な復号化行列の分解を含むことを特徴とする請求項１１に記載の方法。
【請求項１７】
前記行列は、効率的なインプレース復号化が可能な符号を表すことを特徴とする請求項１１に記載の方法。
【請求項１８】
前記エラー訂正は、消去訂正であることを特徴とする請求項１１に記載の方法。
【請求項１９】
通信システムであって、複数のｋ個のソースシンボルとして整列されたデータは送信機において複数のｎ個の符号化シンボルに変換され通信チャネルを介して送信され、送信された符号化シンボルの少なくともいくつかは受信機において複数のｒ個の受信シンボルとして受信され、ｄがｋ以上の場合該ｒ個の受信シンボルは前記ｋ個のソースシンボルを表す複数のｄ個の復号化シンボルに変換され、該通信システムは、
前記ｋ個のソースシンボルに必要なメモリサイズと前記ｎ個の符号化シンボルに必要なメモリサイズとの合計が送信バッファのサイズよりも大きいようなサイズを有する送信バッファと、
前記ｋ個のソースシンボルの符号化行列演算を計算することにより出力シンボルの中間セットを生成するための送信生成ロジックであって、少なくとも前記中間セットのいくつかは前記ｎ個の符号化シンボルのいくつかを含む、送信生成ロジックと、
出力シンボルの前記中間セットを前記送信バッファに格納し、前記ｋ個のソースシンボルの少なくともいくつかを置換するための送信格納ロジックであって、前記中間セット内の出力シンボルの個数は前記ｎより少ない、送信格納ロジックと、
前記送信生成ロジックに出力シンボルの他の中間セットを生成させ前記送信格納ロジックに出力シンボルの中間セットを格納させるためのフローロジックであって、前記送信バッファが少なくとも前記ｎ個の符号化シンボルと前記ｋ個の全てよりは少ないソースシンボルとを含むようになるまで前記ｋ個のソースシンボルの付加的なシンボルを置換し、前記ｋ個のソースシンボルから生成された前記ｎ個の符号化シンボルはエラー訂正で使用される、フローロジックと、
前記通信チャネルを介して前記ｎ個の符号化シンボルを送信するための送信回路と、
前記ｒ個の受信シンボルを受信するための受信回路であって、該ｒ個の受信シンボルは前記ｎ個の符号化シンボルを搬送する前記通信チャネルの結果である、受信回路と、
前記ｒ個の受信シンボルに必要なメモリサイズと前記ｄ個の復号化シンボルに必要なメモリサイズとの合計が受信バッファのサイズよりも大きいようなサイズを有する受信バッファと、
前記ｒ個の受信シンボルの復号化行列演算を計算することにより受信出力シンボル中間セットを生成するための受信生成ロジックであって、少なくとも前記受信出力シンボル中間セットのいくつかは前記ｄ個の復号化シンボルのいくつかを含む、受信生成ロジックと、
前記受信出力シンボル中間セットを前記受信バッファに格納し、前記ｒ個の受信シンボルの少なくともいくつかを置換するための受信格納ロジックであって、前記受信出力シンボル中間セット内の受信出力シンボルの個数は前記ｄより少ない、受信格納ロジックと、
前記受信生成ロジックに他の受信出力シンボル中間セットを生成させ前記受信格納ロジックに受信出力シンボル中間セットを格納させるためのフローロジックであって、前記受信バッファが少なくとも前記ｄ個の復号化シンボルと前記ｒ個の全てよりは少ない受信シンボルとを含むようになるまで前記ｒ個の受信シンボルの付加的なシンボルを置換する、フローロジックと、
を含むことを特徴とする通信システム。
【請求項２０】
前記ロジックは、プログラム可能プロセッサにより実行されるプログラムコード命令を含むことを特徴とする請求項１９に記載の通信システム。
【請求項２１】
前記復号化行列は、少なくとも前記受信シンボルにより定義される前記符号化行列の一部の逆行列であり、前記符号化行列の一部により乗算された前記復号化行列が単位行列となることを特徴とする請求項１９に記載の通信システム。
【請求項２２】
前記受信機は、少なくとも移動電話受信機であるか自動車での使用に適したものであることを特徴とする請求項１９に記載の通信システム。
【請求項２３】
前記送信機は、少なくとも移動電話送信機であるか自動車での使用に適したものであることを特徴とする請求項１９に記載の通信システム。
【請求項２４】
前記送信機はデジタルメディア送信機であり、前記受信機はデジタルメディア受信機であることを特徴とする請求項１９に記載の通信システム。
【請求項２５】
前記エラー訂正は、消去訂正であることを特徴とする請求項１９に記載の通信システム。
【国際調査報告】
2008544610.tif 000120