In-place transformation with application to encoding and decoding of various code class

申请号 JP2008516032 申请日 2006-06-12 公开(公告)号 JP2008544610A 公开(公告)日 2008-12-04
申请人 デジタル ファウンテン, インコーポレイテッド; 发明人 エム. アミン ショックローライ,; マイケル, ジー. ルビー,;
摘要 メモリ制約を有するコンピューティングデバイスを使用してデータのシンボルを符号化する符号化器において、コンピューティングデバイスのメモリにソースブロックをロードすることと、ソースブロックのすべてよりは少ない中間変換を実行することと、メモリ内でソースブロックの一部を中間結果に置換することと、メモリに記憶された出 力 シンボルが符号化されたシンボルの組を形成するように変換を完了することとを含む、変換を実行する方法。 復号化器は、インプレース変換を実行することによって、受信されたデータおよび復号化されたソースデータの記憶に実質的に同一のメモリを使用することを可能にする順序で復号化ステップを実行することができる。 インプレース変換を使用することによって、受信されたデータが復号化されたソースデータに変換される時に、復号化されたソースデータ用のメモリの類似するサイズの大きい部分を必要とせずに、その受信されたデータのためにとっておかれるメモリの大きい部分を上書きすることができる。
权利要求
  • 複数のソースシンボルとして整列されたデータを複数の符号化シンボルに符号化する符号化器において、ソースシンボルから符号化シンボルへの変換を実行する方法であって、ここで、k個のソースシンボルはn個の符号化シンボルに変換され、該方法は、
    第1のメモリに格納された前記k個のソースシンボルにアクセスするステップと、
    出力シンボルの中間セットを提供するため、前記k個のソースシンボルの行列演算を計算する第1の変換段階を実行するステップであって、少なくとも前記中間セットのいくつかは前記n個の符号化シンボルのいくつかを含む、ステップと、
    出力シンボルの前記中間セットを前記第1のメモリに格納し、前記k個のソースシンボルの少なくともいくつかを置換するステップであって、前記中間セット内の出力シンボルの個数は前記nより少ない、ステップと、
    前記第1のメモリが少なくとも前記n個の符号化シンボルと前記k個の全てよりは少ないソースシンボルとを含むようになるまで、実行する前記ステップと格納する前記ステップとを繰り返すステップと、
    を含み、
    前記k個のソースシンボルから生成された前記n個の符号化シンボルはエラー訂正で使用されることを特徴とする方法。
  • 変換処理において、前記第1のメモリ内のシンボルの最大数はn+1およびk+1のうち大きい方より大きくはないことを特徴とする請求項1に記載の方法。
  • 変換処理において、前記第1のメモリ内のシンボルの最大数はk+nよりもn+1およびk+1のうち大きい方により近いことを特徴とする請求項1に記載の方法。
  • nはkと等しくないことを特徴とする請求項1に記載の方法。
  • nはkと等しいことを特徴とする請求項1に記載の方法。
  • 前記変換は、リードソロモン符号を表すことを特徴とする請求項1に記載の方法。
  • 前記変換は、GRA符号を表すことを特徴とする請求項1に記載の方法。
  • 前記変換は、連鎖反応符号を表すことを特徴とする請求項1に記載の方法。
  • 前記変換は、LDPC符号を表すことを特徴とする請求項1に記載の方法。
  • 前記変換に使用されるシンボル演算の数は、前記行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項1に記載の方法。
  • 前記変換に使用されるシンボル演算の数は、前記行列の逆行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項1に記載の方法。
  • 前記行列は、インプレース符号化が可能な符号化行列の分解を含むことを特徴とする請求項1に記載の方法。
  • 前記行列は、効率的なインプレース符号化が可能な符号を表すことを特徴とする請求項1に記載の方法。
  • 複数の符号化ソースシンボルとして整列されたデータを複数の復号化シンボルに復号化する復号化器において、前記符号化シンボルから前記復号化シンボルへの変換を実行する方法であって、ここで、r個の符号化シンボルはd個の復号化シンボルに変換され、該方法は、
    第1のメモリに格納された前記r個の符号化シンボルにアクセスするステップであって、該r個の符号化シンボルはk個のソースシンボルからエラー訂正での使用のために生成される、ステップと、
    行列演算を計算する第1の変換段階を実行するステップであって、該演算は符号化行列の逆行列であり、出力シンボルの中間セットを提供するため前記r個の符号化シンボルに対し演算し、少なくとも前記中間セットのいくつかは前記d個の復号化シンボルのいくつかを含む、ステップと、
    出力シンボルの前記中間セットを前記第1のメモリに格納し、前記r個の符号化シンボルの少なくともいくつかを置換するステップであって、前記中間セット内の出力シンボルの個数は前記dより少ない、ステップと、
    前記第1のメモリが少なくとも前記d個の復号化シンボルと前記r個の全てよりは少ない符号化シンボルとを含むようになるまで、実行する前記ステップと格納する前記ステップとを繰り返すステップと、
    を含むことを特徴とする方法。
  • 変換処理において、前記第1のメモリ内のシンボルの最大数はr+1およびd+1のうち大きい方より大きくはないことを特徴とする請求項14に記載の方法。
  • 変換処理において、前記第1のメモリ内のシンボルの最大数はr+dよりもr+1およびd+1のうち大きい方により近いことを特徴とする請求項14に記載の方法。
  • rはdと等しくないことを特徴とする請求項14に記載の方法。
  • rはdと等しいことを特徴とする請求項14に記載の方法。
  • 前記変換は、リードソロモン復号を表すことを特徴とする請求項14に記載の方法。
  • 前記変換は、GRA復号を表すことを特徴とする請求項14に記載の方法。
  • 前記変換は、連鎖反応復号を表すことを特徴とする請求項14に記載の方法。
  • 前記変換は、LDPC復号を表すことを特徴とする請求項14に記載の方法。
  • 前記変換に使用されるシンボル演算の数は、前記行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項14に記載の方法。
  • 前記変換に使用されるシンボル演算の数は、前記行列の逆行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項14に記載の方法。
  • 前記行列は、インプレース復号化が可能な復号化行列の分解を含むことを特徴とする請求項14に記載の方法。
  • 前記行列は、効率的なインプレース復号化が可能な符号を表すことを特徴とする請求項14に記載の方法。
  • 通信システムであって、複数のk個のソースシンボルとして整列されたデータは送信機において複数のn個の符号化シンボルに変換され通信チャネルを介して送信され、送信された符号化シンボルの少なくともいくつかは受信機において複数のr個の受信シンボルとして受信され、dがk以上の場合該r個の受信シンボルは前記k個のソースシンボルを表す複数のd個の復号化シンボルに変換され、該通信システムは、
    前記k個のソースシンボルに必要なメモリサイズと前記n個の符号化シンボルに必要なメモリサイズとの合計が送信バッファのサイズよりも大きいようなサイズを有する送信バッファと、
    前記k個のソースシンボルの符号化行列演算を計算することにより出力シンボルの中間セットを生成するための送信生成ロジックであって、少なくとも前記中間セットのいくつかは前記n個の符号化シンボルのいくつかを含む、送信生成ロジックと、
    出力シンボルの前記中間セットを前記送信バッファに格納し、前記k個のソースシンボルの少なくともいくつかを置換するための送信格納ロジックであって、前記中間セット内の出力シンボルの個数は前記nより少ない、送信格納ロジックと、
    前記送信生成ロジックに出力シンボルの他の中間セットを生成させ前記送信格納ロジックに出力シンボルの中間セットを格納させるためのフローロジックであって、前記送信バッファが少なくとも前記n個の符号化シンボルと前記k個の全てよりは少ないソースシンボルとを含むようになるまで前記k個のソースシンボルの付加的なシンボルを置換し、前記k個のソースシンボルから生成された前記n個の符号化シンボルはエラー訂正で使用される、フローロジックと、
    前記通信チャネルを介して前記n個の符号化シンボルを送信するための送信回路と、
    前記r個の受信シンボルを受信するための受信回路であって、該r個の受信シンボルは前記n個の符号化シンボルを搬送する前記通信チャネルの結果である、受信回路と、
    前記r個の受信シンボルに必要なメモリサイズと前記d個の復号化シンボルに必要なメモリサイズとの合計が受信バッファのサイズよりも大きいようなサイズを有する受信バッファと、
    前記r個の受信シンボルの復号化行列演算を計算することにより受信出力シンボル中間セットを生成するための受信生成ロジックであって、少なくとも前記受信出力シンボル中間セットのいくつかは前記d個の復号化シンボルのいくつかを含む、受信生成ロジックと、
    前記受信出力シンボル中間セットを前記受信バッファに格納し、前記r個の受信シンボルの少なくともいくつかを置換するための受信格納ロジックであって、前記受信出力シンボル中間セット内の受信出力シンボルの個数は前記dより少ない、受信格納ロジックと、
    前記受信生成ロジックに他の受信出力シンボル中間セットを生成させ前記受信格納ロジックに受信出力シンボル中間セットを格納させるためのフローロジックであって、前記受信バッファが少なくとも前記d個の復号化シンボルと前記r個の全てよりは少ない受信シンボルとを含むようになるまで前記r個の受信シンボルの付加的なシンボルを置換する、フローロジックと、
    を含むことを特徴とする通信システム。
  • 前記ロジックは、プログラム可能プロセッサにより実行されるプログラムコード命令を含むことを特徴とする請求項27に記載の通信システム。
  • 前記ロジックは、ハードウェア回路を含むことを特徴とする請求項27に記載の通信システム。
  • 前記ロジックは、部分的にプログラム可能プロセッサにより実行されるプログラムコード命令を含み、部分的にハードウェア回路を含むことを特徴とする請求項27に記載の通信システム。
  • 前記復号化行列は、少なくとも前記受信シンボルにより定義される前記符号化行列の一部の逆行列であり、前記符号化行列の一部により乗算された前記復号化行列が単位行列となることを特徴とする請求項27に記載の通信システム。
  • 前記受信機は、移動電話受信機であることを特徴とする請求項27に記載の通信システム。
  • 前記受信機は、自動車での使用に適したものであることを特徴とする請求項27に記載の通信システム。
  • 前記送信機は、移動電話送信機であることを特徴とする請求項27に記載の通信システム。
  • 前記送信機は、自動車での使用に適したものであることを特徴とする請求項27に記載の通信システム。
  • 前記送信機はデジタルメディア送信機であり、前記受信機はデジタルメディア受信機であることを特徴とする請求項27に記載の通信システム。
  • 前記エラー訂正は、消去訂正であることを特徴とする請求項1に記載の方法。
  • 前記エラー訂正は、消去訂正であることを特徴とする請求項14に記載の方法。
  • 前記エラー訂正は、消去訂正であることを特徴とする請求項27に記載の通信システム。
  • 说明书全文

    本発明は、全般的にはデータの符号化および復号化に関し、具体的には、大量の追加メモリの使用を必要としない、データの線形変換の計算に関する。

    多数のアプリケーションが、以下では”ソースブロック”と称する、データの所与のブロックを変換することによって結果を達成する。 本明細書で使用される用語”ソースブロック”は、1つまたは複数のソースで格納される任意のデータを指す。 したがって、ファイルサーバまたはコンピュータストレージデバイスからの文書、画像、およびファイルのすべてが、ソースブロックの例である。 ソースブロックは、未知のサイズを有するものとすることができ(ストリーミングソースの出からとられるソースブロックなど)、あるいは、ソースブロックは、既知のサイズを有するものとすることができる(ハードディスクに格納された1メガバイトの画像など)。 どの形でも、ソースブロックは、1つまたは複数のソースシンボルのシーケンスであり、各ソースシンボルは、ソースブロック内の位置および値を有する、ソースブロック内の1つのデータである。

    本明細書では、ソースブロックの変換は、ある結果を達成するためにそのソースブロックに対して実行されるアクションを指す。 たとえば、ソースブロックが、カメラなどの外部デバイスによって取り込まれる場合に、1つの可能な変換は、より小さいストレージデバイスでのそのソースブロックの格納を容易にするための、あるいは1つまたは複数の可能な所期の受け取り側へのより高速の伝送を可能にするための、かなりより小さいサイズへのそのソースブロックの圧縮とすることができる。 もう1つの例として、ソースブロックを、コンピュータネットワークなどのチャネルまたは破損もしくは消失の見込みがあるチャネルを介して転送されるものと指定することができる。 その場合に、そのソースブロックを、伝送エラーに関する堅牢性を高めるために、伝送の前に変換することができる。

    ソースブロックの変換を必要とする多数のアプリケーションのうちで特に重要なものが、伝送においてこうむるエラーに対するソースブロックの堅牢性を高めるために変換を実行するアプリケーションである。 伝送とは、ソースブロックを配送するために1つまたは複数の送信機からチャネルを介して1つまたは複数の受け取り側へソースブロックを送る処理である。 1つの送信機が、完全なチャネルによって任意の個数の受け取り側に接続される場合に、受信されるデータは、すべてのデータが正しく受信されるので、オリジナルのソースブロックの正確なコピーとすることができる。 しかし、ほとんどの実世界のチャネルについてそうであるようにチャネルが完全ではない場合に、または一部のシステムについてそうであるようにデータが複数の送信機から発する場合に、受信されるものが、正確なコピーではない場合がある。

    チャネルの不完全性は、データ消去、データ不完全性、またはデータ破損を指す可能性がある。 データ伝送という行為は、地理的に離れた位置の間でのデータの伝送だけを指すのではなく、伝送には、データが絶対に物理的には移動されない場合をも含めることができる。 たとえば、欠陥の可能性がある記憶媒体に格納されたソースブロックが、伝送の一形態を構成することができる。 というのは、そのソースブロックがもう一度アクセスされる時に、データ破損の可能性があるからである。

    可能な伝送エラーに対するソースブロックの保護の一般的な処理が、符号化の処理である。 符号化を用いると、ソースブロックが変換され、あるいは、データの新しい組(時々”冗長”データまたは”リペア”データと呼ばれる)がソースブロックから計算される。 変換されたソースブロックは、しばしば、オリジナルのソース符号から計算された冗長情報を含み、内部冗長性を使用して、伝送中にこうむるエラーに関する情報を入手し、そのようなエラーを訂正するという目標を有する。 符号を設計し、使用する理論および実践に関する大量の文献がある。

    符号の選択は、特定のアプリケーションと、その上で伝送が行われる通信チャネルとに依存する。 しばしば、選択される符号は、ある線形性特性を有する。 たとえば、ソースブロックが、ビットのグループである1つまたは複数のソースシンボルからなる場合に、線形性条件は、2つのソースブロックのシンボルごとの合計(写像)の符号化が、ソースブロックの符号化のシンボルごとの合計(写像)と等しいことを保証するはずである。 そのような線形性条件は、符号化処理および復号化処理を記述し、計算するのに非常に有利に使用することができる。 実際に使用される符号の大きいサブクラスが、そのような線形性条件を満足する。

    ソースブロックの符号化につながる変換に対する逆処理が、復号化処理である。 この処理では、符号化されたソースブロックの(おそらくは破損された)版が、伝送の前のソースブロックのオリジナルの状態のよい(または、時々、最良の可能な)推定値を得る形で処理される。

    線形符号化方式の多数の利益のうちの1つが、符号化処理および復号化処理を行列によって説明できるという事実である。 行列は、2次元配列の形で要素を含む数学的物体である。 当業者に周知の通り、行列は、物体の間、たとえばソースブロックを構成するシンボルの集合の間の線形写像を表すのに便利に使用することができる。

    しばしば、符号化処理および復号化処理が、中間結果を記憶するのに追加メモリを使用することから利益を得る場合がある。 たとえば、一部の復号化処理は、復号化されたソースブロックに加えて、受信されたデータのコピーを保持することを必要とする場合がある。 復号化処理および符号化処理に必要な追加メモリの量は、限られたメモリを有するデバイスにおいて多すぎる場合がある。 たとえば、デバイスが、携帯電話機または携帯情報端末(PDA)などの移動体受信デバイスである場合に、デバイス上のメモリが少ない場合があり、かつ/またはメモリが、そのデバイスでの実行を意図された他のアプリケーションのために予約されている場合がある。 そのような情況では、復号化処理および符号化処理は、メモリを効率的に使用しなければならないが、時々、これを実施するのが難しい。

    本発明の諸態様による復号化器の実施形態では、復号化器は、受信されたデータおよび復号化されたソースブロックの記憶に実質的に同一のメモリを使用し、インプレース変換として実行することを可能にする順番で復号化ステップを実行するようにプログラムされる。 インプレース変換を使用することによって、受信されたデータのためのメモリの大きい部分および復号化されたソースデータのためのメモリの類似するサイズの大きい部分を必要とせずに、受信されたデータが復号化されたソースデータに変換される時に、受信されたデータのためにとっておかれるメモリの大きい部分を上書きすることができる。

    しばしば、インプレース変換の使用は、プロセスがメモリのアクセスにより短い時間を費やすので、特定の処理の実行時間の減少につながり、減らされたメモリ要件を超える利益をもたらす。 これは、記憶されるデータの総サイズが大きすぎる場合に、処理ユニットがより低速の二次ストレージデバイスにアクセスすることを強制される可能性があるという問題を防ぐ。

    本発明の実施形態は、大量の追加メモリの使用を必要としないインプレース線形変換を実行する方法および処理を使用する。 これらの方法および処理は、ソースブロックのFEC符号化変換およびFEC復号化変換と共に使用することができる。

    次の詳細な説明は、添付図面と一緒に、本発明の性質および利点のよりよい理解をもたらす。

    本明細書のテキストおよび式は、本発明の諸態様を例示するものである。

    受信されたデータおよび復号化されたソースブロックの記憶に実質的に同一のメモリを使用する処理を、しばしば、インプレース(in-place)変換と称する。 しばしば、インプレース変換の使用は、プロセスがメモリのアクセスにより短い時間を費やすので、特定のプロセスの実行時間の減少につながる。 これは、特に重要である。 というのは、記憶されるデータの総サイズが大きすぎる場合に、処理ユニットがより低速の二次ストレージデバイスにアクセスすることを強制される可能性があるからである。 本発明の実施形態は、大量の追加メモリの使用を必要としないインプレース線形変換を実行する方法および処理を使用する。 これらの方法および処理は、特に、ソースブロックのFEC(前方エラー訂正)符号化変換およびFEC復号化変換に適用可能である。

    本発明は、多数のデバイスに適用可能であるが、そのすべてが本明細書で明示的に説明されるわけではない。 限定ではなく例に、携帯電話機、コンピュータ、ハンドヘルドコンピューティングデバイス、メディアプレイヤ、通信デバイス、ならびに/あるいはこれらのデバイスを実施するハードウェアおよび/またはソフトウェアが含まれる。

    概要
    送信機110でのFEC符号化および受信機140でのFEC復号化を使用する通信システムの高準の図を図1に示す。 送信機110および受信機140が、広い範囲のデバイスを含むことができることを理解されたい。 多くの実施形態で、送信機および受信機は、単一のトランシーバデバイス内に含まれ、複数のそのようなデバイスが、それら自体の間で通信することができる。

    図1では、送信機110は、FEC符号化器120を含み、FEC符号化器120は、通信チャネル130を介してFEC復号化器150を含む受信機140に送信されるデータに保護を追加するのに使用される。 送信機110は、たとえばインターネットプロトコル(IP)パケットまたは他の形のパケットなどのパケット内で、FEC符号化器120によって生成されたデータを送信することができ、このパケットは、各パケット内に、そのパケットがどのように生成されたかおよび/またはそのパケットが送信されるデータのどの部分を表すかを受信機140が判定できるようにする識別する情報を含む。

    チャネル130は、ネットワークチャネル、無線チャネル、PSTNチャネル、または他のチャネルとすることができる。 通常、チャネル130は、その下である条件についてデータが失われる、ある制約を有する。 通常、パケットネットワークについて、受信されたパケットの一部が読み取り可能ではない場合に、パケット全体が破棄される。 したがって、送信機110から送信されたパケットが、受信機140で受信されないと考えられる状況があり、したがって、そのような消失から回復するための機構が必要である。

    受信機140は、受信されたパケットのうちで必要な個数をFEC復号化器150に供給し、FEC復号化器150は、データのすべてまたは一部を回復する。 FEC(前方エラー訂正)は、エラーが発生した場合にエラー訂正を可能にする、順方向チャネルで前もって提供される機構を提供する。 エラーは、必要ではなく、その場合に、FECの労力は、単なるバックアップであり、いくつかの場合には、FECを使用して回復できるものより多数のエラーが発生する場合があり、その場合には、通信が失敗するか、再送信などを要求するサイド通信が発生する。

    伝送がポイントツーポイントである必要はない。 図2に示されているように、1つのシステムが、複数の送信機および複数の受信機を有することができる。 図2は、それぞれがFEC符号化器(211)、FEC復号化器(232、242)、またはその両方(222、221)を含む、送信機210、受信機230および240、ならびに送信機/受信機220を含むシステムを示す。 図2に示された例では、すべての送信機、送信機/受信機、および受信機が、チャネル250を介して通信することができ、チャネル250には、一体化されたIPネットワーク、ばらばらのネットワークの組合せ、またはネットワークの他の類似する組合せを含めることができる。

    図3に、送信機および/または受信機を実施するのに使用できるハードウェアの例をより詳細に示す。 この図に示されているように、FEC符号化器/復号化器305は、動作を実行するのに使用されるCPU 310、超高速アクセスを有する一時メモリをCPU 310に提供するキャッシュ320、比較的高速のアクセスを有するより大量のメモリをCPU 310に提供するRAM 330、および適度なアクセス速度を有する大量の永久メモリをCPU 310に提供するディスク340を含む。

    この実施形態の多数の他の変形形態が可能である。 たとえば、キャッシュ320を、CPUによる処理の準備をするために他のメモリデバイスからデータをプリロードするためすなわち直接メモリアクセス(DMA)動作のために、オペレーティングシステム(OS)によって制御される部分と、FEC符号化/復号化処理の制御の下の部分とに区分することができる。 他の例として、複数のレベルキャッシュを設けることができ、フラッシュなどの他のタイプのストレージデバイスを設けることができ、ストレージタイプの一部、たとえばディスクストレージをなくすことができる。

    より一般的に、メモリを有するコンピューティングデバイスは、しばしば、さまざまな種別のメモリを有する。 一部の種別のメモリは、より近いメモリがプロセッサに物理的により近いかより高速の応答レートを有することができるという点で他の種別より”近い”と考えられ、これは、プロセッサが”近い”メモリを遠くのより長いリードを必要とするすなわちより低速のメモリより高速に読み取り、かつ/または書き込むことを可能にする。 より一般的に言っても、ある種別のメモリは、待ち時間、応答レート、メモリの位置を読み取り/書き込むのに必要なエネルギの量、メモリ内の情報を維持するエネルギの量、ビットあたりのコスト、および他の考慮事項のゆえに、別の種別のメモリより好ましいものとすることができる。 メモリの種別は、通常、好ましさによって順序付けることができ、最高速の最も強力で効率的なメモリが、好ましい。 通常、工学的制約および設計制約が、複数の種別のメモリの使用を命ずる場合がある。 たとえば、永続ストレージが可能ではないことからRAMキャッシュメモリだけが求められることはなく、プロセッサアクセスが低速なのでディスクメモリだけが求められることはない。

    上で説明したように、あるデバイスが、複数の種別のメモリを有することができ、これらの種別は、好ましさによって順序付けられる。 最も好ましいメモリが、特定の計算動作の結果を含むのに十分に大きくはない場合に、より好ましくない種別のメモリへのスワップアウトなど、メモリ管理が必要になる場合がある。 そのような動作は、特にある種のデバイスおよびある種の動作において、待ち時間、計算コスト、電力使用量に関するオーバーヘッドを追加し、したがって、効率的なインプレース変換に関して本明細書で説明される方法および装置は、デバイスの動作に対する大きい利益をもたらす。

    図3の図示では、FEC符号化器/復号化器305は、さまざまなメモリユニットを制御することができ、FEC符号化器/復号化器305を使用しているアプリケーションの制御の下の他の部分がある場合がある。 したがって、たとえば、FEC符号化を実行する時に、アプリケーションが、符号化されるソースブロックのそれ自体のコピーを制御する場合があり、FEC符号化器が、別々のメモリ位置に、アプリケーションによってそのFEC符号化器に渡されたソースブロックのそれ自体のコピーを有する場合がある。

    この例では、アプリケーションによって使用される他のメモリにかかわりなく、FEC符号化器によって使用されるメモリを最小化することが重要である可能性があり、また、この例では、FEC符号化器が、ソースブロックのリペアシンボルの計算中にソースブロックの一部またはすべてを上書きできる可能性もある。 というのは、アプリケーションが、ソースブロックのそれ自体の別々のコピーを有するからであり、かつ/またはアプリケーションが、ソースブロックの一部を既にチャネルに送信済みであり、ソースブロックのその部分のコピーを保持することをもやや必要としない場合があるからである。 もう1つの例として、一般に、FEC復号化中には、符号シンボルのコピーがソースブロックのオリジナルのソースシンボルを回復するのに使用されたならば、その符号シンボルのコピーを維持することは、重要ではない。

    図4に、メモリ420に記憶される受信された符号シンボル440からソースシンボル430のソースブロックを生成するのにCPU 405を使用することができる従来のFEC復号化処理410(おそらくはプログラムコードとして実施される)を示すが、メモリ420は、図3に示されたタイプまたは他のタイプを含むことができる。 図示されているように、シンボル記憶のためにFEC復号化処理410が必要とするメモリの量は、通常、ソースブロックの総サイズと符号シンボルの総サイズとの合計である。 類似するコメントが、従来のFEC符号化処理にあてはまる。

    図5に、本発明によるインプレースFEC復号化処理の実施形態を示す。 開始時のインプレースFEC復号化処理のスナップショット510は、メモリ520に記憶された受信された符号シンボル530を処理するCPU 505を示し、メモリ520には、図3に示されたタイプまたは他のタイプを含めることができる。 終了時のインプレースFEC復号化処理のスナップショット515は、受信された符号シンボル530によって最初に占められていたものと同一のメモリ520に記憶されたソースブロックの回復されたソースシンボル540を作るのに使用されたCPU 505を示す。 さらに、FEC復号化処理の中間ステップ中に、シンボルに使用されるメモリは、受信された符号シンボル530を記憶するのに必要なメモリの量および回復されたソースシンボル540を記憶するのに必要なメモリの量のうちの最大値より大きい、少ない量である。 したがって、ソースブロックを回復するのに必要な符号シンボルの総サイズが、ソースブロックのサイズ程度なので、インプレースFEC復号化処理510および515は、復号化中にシンボルストレージに従来のFEC復号化処理410のメモリの約半分を使用する。 類似するコメントが、インプレースFEC符号化処理にあてはまる。

    後続セクションでは、図5に示された利点を実現する方法および処理を紹介する。 具体的に言うと、線形符号として表すことができるFEC符号用のインプレースFEC符号化処理およびインプレースFEC復号化処理を紹介する。

    線形演算子
    例の実施形態をさらに示すために、環という数学的概念を利用する。 次の説明では、さまざまな数学的な処理およびステップを、ハードウェアの動作、プログラム命令の実行、または類似物によって、コンピューティング/通信デバイスによって実行できることを理解されたい。

    当業者に周知の通り、環は、2つの演算すなわち加算および乗算が定義され、これらの演算が分配法則を満足するようになっている集合である。 さらに、加算だけについて検討される集合は、アーベル群を形成する、すなわち、加算の結果は、被加数の順序付けと独立であり、加算の単位元0があり、要素ごとに、その要素との和が0になるもう1つの要素がある。 他の要件は、乗算が単位元1を有し、1との任意の要素の乗算が、その要素の値を変更しないようになっていることである。 一般的な環について、非0要素が逆数を有することは要求されず、乗算が可換であることも要求されない。 しかし、これらの条件の両方が満足されるときに、その環を”体”と呼ぶ。 この表記法は、代数の分野で標準的な表記法である。

    本明細書で使用される時に、”シンボル”は、通常はソースブロックより小さい1つのデータを指す。 シンボルのサイズは、しばしば、ビット単位で測定され、シンボルは、Mビットのサイズを有し、シンボルは、2 個のシンボルのアルファベットから選択される。 たとえば、パケットネットワークを介する情報の信頼できる伝送のアプリケーションにおいて、シンボルのサイズを、パケットサイズと等しいものとするか、それより小さいものとすることができ、その結果、各パケットが、1つまたは複数のシンボルを含むようになる。

    写像(シンボルごとの合計)は、同一サイズのシンボルのペアをそのサイズの別のシンボルに写像する、ハードウェアおよび/またはソフトウェアなどで実施可能な論理構成である。

    によってこの写像を表し、シンボルのペア(S,T)に対するこの写像の像を


    によって表す。 そのような写像の例が、ビット単位の排他的論理和(XOR)である。

    本明細書で使用されるもう1つの構成が、シンボルに対する特殊なタイプの集合の”アクション(action)”という概念である。 Aが、単位元を有し、すべての要素についてその反数を含む、可換加算演算”+”を備えた集合であるものとする。 そのような集合を、一般に、アーベル群とも呼ぶ。 シンボルの集合に対するこの群の”アクション”は、群要素rおよびシンボルSを含むペアを別のシンボルに写像する写像である。 この像を、r*Sによって表すが、この写像が、この群においてすなわち、群Aの要素aおよびbのすべてのペアについて、加算を尊重する場合に、

    である。 Aが環であり、アクションが、Aでの乗算をも尊重する場合に(Aでの乗算演算子は、”・”である、すなわち(a・b)*S=a*(b*S)である)、このアクションを、”演算”と呼ぶ。

    シンボルに作用する環または体の例は、豊富にある。 少数の例に、下で言及する。 この例のリストは、例示のみを意図されており、網羅的なリストと考えてはならず、本発明の範囲を限定するものと解釈してもならない。

    0および1からなり、排他的論理和(XOR)である加算および論理演算ANDである乗算を有する体GF(2)は、1*S=Sおよび0*S=0を定義することによってシンボルの集合に作用し、ここで、Sは、任意のシンボルを表し、0は、完全に0からなるシンボルを表す。

    体GF(4)は、4つの要素0、1、2、3からなり、ここで、加算は、整数の通常のXORであり、乗算は、表1を介して定義される。

    GF(4)は、等しいサイズのシンボルに次の形で作用する。 そのようなシンボルSについて、それぞれその第1の半分および第2の半分をS[1]およびS[2]によって表し、その結果、S=(S[1],S[2])である。 次に、

    を定義する。

    これが実際に有効な演算であることを、すばやく検証することができる。 同一の体のもう1つの演算を、2ビットを有するシンボルに対して定義することができる。 これらのシンボルを整数0、1、2、および3を用いて識別することによって、この体の乗算の表が、2ビットシンボルの場合に上で定義された演算と一致する演算を記述することがわかる。

    より一般的に、Kが、次数dのGF(2)の拡大体である場合に、この体の演算を、そのサイズがdで割り切れるシンボルに対して定義することができる。 そのような演算は、”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"”に記載されている。 この方式は、2進要素を有するd×d行列としての体Kのいわゆる”正則表現”を使用する。

    ”線形変換”という概念は、シンボルの環の演算という概念を参照して定義することができる。 所与の整数mおよびnについて、この演算によって導入される線形変換は、指定された環に含まれる要素を有する行列の空間を使用して、n個のシンボルのベクトルをm個のシンボルのベクトルに写像する。 環R上の行列は、その要素がRに属する、要素の2次元集合である。 ある行列が、m行n列を有する場合に、その行列を、一般にm×n行列と称する。 ペア(m,n)を、その行列の”フォーマット”と呼ぶ。 同一のフォーマットの行列は、基礎になる体または環の加算および減算を使用して、加算し、減算することができる。 フォーマット(m,n)の行列は、一般に知られているとおり、フォーマット(n,k)の行列と乗算することができ、フォーマット(m,k)の行列を作る。

    Bがそのような行列を表し、B[j,k]が、位置(j,k)のBの要素を表し、この行列がベクトル(S[1],S[2],...,S[n])を変換し、(X[1],X[2],...,X[m])が変換されたベクトルを表す場合に、次の関係が有効である。

    1からmまでのすべてのjについて、

    である。

    Sが、S[1],S[2],. . . ,S[n]を含む列ベクトルを表し、Xが、シンボルX[1],X[2],. . . ,X[m]を含む列ベクトルを表す場合に、この変換を、

    と表すことができる。

    上の公式は、”単純変換処理”と称する、符号化器または復号化器でBおよびSからXを計算する処理を記述し、この処理は、
    1. jに1をセットし、X[j]に0をセットする。

    2.1からnまでのkの値について、

    を行う。

    3. jを1つインクリメントする。 jがmを超える場合には、停止し、そうでない場合にはステップ2に進む。
    というステップによって実行することができる。

    そのような線形変換は、さまざまなアプリケーションで平凡である。 たとえば、1つのデータまたはソースブロックを符号化するのに線形符号を使用する時に、Sを、符号化されるソースブロックのソースシンボルとすることができ、Xを、Sの符号化された版とすることができ、Bを、符号に関する生成行列とすることができる。 他のアプリケーションでは、たとえば、使用される符号が組織的である場合に、Xを、Sの符号化の冗長シンボルとすることができ、Bを、ソースシンボルに対する冗長シンボルの依存性を記述する行列とすることができる。 もう1つのアプリケーションでは、Sを、変換の後に受け取られるシンボルの集合から得られるシンボルのベクトルとすることができ、Xは、完全に未知または部分的に未知のいずれかであるシンボルの集合に対応することができ、Bは、XとSとの間の関係を記述することができる。 たとえば、消去にもかかわらずまたはエラーにもかかわらずリードソロモン符号を復号化する場合がそうである。 後者は、Shokrollahi他の米国特許第6631172号、名称”Efficient List Decoding of Reed-Solomon Codes for Message Recovery in the Presence of High Noise Levels”に記載されている。

    多くのアプリケーションで、上のベクトルXは、Sを記憶するのに使用されるメモリを実質的に超えるメモリを使用せずに、Sから計算される必要がある場合がある。 たとえば、シンボルがそれぞれ512バイトであり、m=n=1024である場合に、SおよびXは、それぞれ512キロバイトのサイズを有する。 変換が、600キロバイトのメモリを有するデバイスで実施される場合に、追加メモリを使用せずにSとXとの両方を同時に保持するのに十分なメモリはないはずである。

    そのような状況では、Sの変換をインプレースで達成する処理が必要である。 XがSより小さい場合に、これは、Sの最初のm個の要素が、Xによって置換されることを意味する可能性があり、あるいはより一般的には、Sのm個の位置の規定された集合が、Xの諸位置によって置換されることを意味する可能性がある。 XがSより大きい場合には、インプレース変換は、Sが変換後にXの最初のn個の要素を含むこと、またはより一般的には、Sが変換後にXのn個の要素の規定された集合を含むことと解釈することができ、残りのm−n個の要素は、他所に記憶される。 XおよびSが同一の長さを有する場合には、インプレース変換は、XによってSを置換することができる。 アプリケーションでは、この処理が、その仕事を達成するために多すぎる追加メモリを使用してはならない。 したがって、たとえば、Xが計算され、他所に記憶され、その後Sのメモリ位置にコピーされる解決策は、不適当な解決策になるはずである。

    インプレース線形変換
    これから、インプレース線形変換について処理を説明する。 Bが、フォーマット(m,n)を有する行列であり、Sが、n個のシンボルの列ベクトルであるものとする。 BおよびSを与えられて、次のように、B↓Sすなわち下向きでのBによるSのインプレース線形行列変換を定義する。

    すべてのi=1,2,. . . ,mについて S[i]をBの第i行と現在のSとの内積に置換する。

    このインプレース演算を計算する処理を、図6を参照して説明する。 ステップ610で、整数変数iを0に初期化する。 ステップ620で、iの値をnext(i)に増やし、ここで、next(i)は、Bの行next(i)が少なくとも1つの非0要素を有する、iより大きい最小の整数であり、行iを超えるすべての行がすべて0の要素を有する場合には、next(i)にm+1がセットされる。 ステップ630で、i>mであるか否かを検査し、i>mである場合には、処理はステップ640で停止するが、i≦mである場合には、処理はステップ650に進み、ここで、一時シンボル値Tに0をセットし、整数変数jに0をセットする。 ステップ660で、jの値をnext(i,j)に増やし、ここで、next(i,j)は、Bの行iでB[i,next(i,j)]が非0要素になる、jより大きい最小の整数であり、B[i,j]行iを超えるすべての要素がすべて0である場合には、next(i,j)にn+1がセットされる。 ステップ670で、j>nであるか否かを検査し、j>nである場合には、処理はステップ680に進み、ここで、シンボルS[i]にTをセットし、処理はステップ620に戻る。 ステップ670でj≦nである場合には、処理はステップ690に進み、ここで、一時シンボル値Tを

    にリセットし、その後、処理はステップ660に戻る。

    上の説明および図6から、B↓Sを計算するために必要なストレージ全体のシンボルの個数が、n+1個のシンボルであることが明らかである。

    Bが、フォーマット(m,n)を有する行列であり、Sが、n個のシンボルの列ベクトルであるものとする。 BおよびSを与えられて、次のように、B↑Sすなわち上向きでのBによるSのインプレース線形行列変換を定義する。

    すべてのi=m,m−1,. . . ,1について S[i]をBの第i行と現在のSとの内積に置換する。

    このインプレース演算を計算する処理を、図7を参照して説明する。 ステップ710で、整数変数iをm+1に初期化する。 ステップ720で、iの値をprev(i)に減らし、ここで、prev(i)は、Bの行prev(i)が少なくとも1つの非0要素を有する、iより小さい最大の整数であり、行iを超えるすべての行がすべて0の要素を有する場合には、prev(i)に0がセットされる。 ステップ730で、i<1であるか否かを検査し、i<1である場合には、処理はステップ740で停止するが、i≧1である場合には、処理はステップ750に進み、ここで、一時シンボル値Tに0をセットし、整数変数jに0をセットする。 ステップ760で、jの値をnext(i,j)に増やし、ここで、next(i,j)は、Bの行iでB[i,next(i,j)]が非0要素になる、jより大きい最小の整数であり、B[i,j]行iを超えるすべての要素がすべて0である場合には、next(i,j)にn+1がセットされる。 ステップ770で、j>nであるか否かを検査し、j>nである場合には、処理はステップ780に進み、ここで、シンボルS[i]にTをセットし、処理はステップ720に戻る。 ステップ770でj≦nである場合には、処理はステップ790に進み、ここで、一時シンボル値Tを

    にリセットし、その後、処理はステップ760に戻る。

    上の説明および図7から、B↑Sを計算するために必要なストレージ全体のシンボルの個数が、n+1個のシンボルであることが明らかである。

    Bが、すべてのi=1,. . . ,nについてB[i,i]≠0である、フォーマット(n,n)を有する行列であるものとする。 行列

    は、次のようにBから導出される行列である。

    を、簡単にBから計算でき、さらに、Bが疎な行列であり、効率的にアクセスできる場合に、


    も、疎な行列であり、効率的にアクセスできることに留意されたい。 また、Bの要素がGF(2)からのものである場合に、


    であることに留意されたい。 定義したばかりの↑演算、↓演算、および〜演算は、次の特性を有する。 Bが、すべてのi=1,. . . ,nについてB[i,i]≠0である、フォーマット(n,n)を有する行列であり、Sが、n個のシンボルの列ベクトルであるものとする。 S

    が、変換を適用する前のSの値を表すものとする、すなわち、当初にS=S

    である。 すると、


    である。

    したがって、たとえば、

    インプレース演算およびB↑インプレース演算は、上の意味で、互いの逆演算である。 当業者が認めるであろうとおり、対称によって、たとえばS↓Bおよび


    の形のインプレース演算を定義することもでき、ここで、Sは、上で定義したものに類似する特性を有するm個のシンボルの行ベクトルである。

    複数のクラスの行列に関するインプレース変換
    これから、特殊な特性を有する線形変換のインプレース計算について処理を説明する。 これらの線形変換は、その後に、より一般的な線形変換の計算用のインプレース処理を構成する基本構成要素として使用される。 次では、Sは、m個のシンボルの列ベクトルを表し、Bは、体K上のフォーマット(m,n)の行列を表し、Bは、たとえばGF(2)の拡大体と考えることができ(しかし、この技法は、一般的なKにも同等に良好に適用される)、この処理の終りで、シンボルSのベクトルのストレージは、変換

    の結果を記憶する。

    Bに必要なストレージをも最小化し、演算を計算するのに必要な全体的な計算を最小化するのに使用できる多数の技法があるが、一般に、これは、変換されるデータに必要なメモリより少ないメモリである。 たとえば、Bが疎な行列である時に、Bの疎な表現が可能であり、この疎な表現は、すべての演算を実行するのに必要な全体的計算を最小化することもできる。 たとえば、Bが疎な行列である時に、順次検索より効率的な、Bの特定の行または列内の次の非0要素を見つける形がある。 このタイプの最適化は、本明細書で説明する技法と共に適用できる他の最適化と一緒に、この開示を読んだ後に当業者に明白になるに違いない。

    2.1. 順列行列 この事例では、Bは、フォーマット(n,n)の順列行列である、すなわち、Bは、各行および各列に正確に1つの非0要素を有し、その非0要素は1である。 この行列は疎なので、すなわち、非0である非常に少数の要素を有するので、多くのアプリケーションで、これを行列ではなくリスト(または行列より少ないメモリを使用する別のオブジェクト)として表すことが望ましい。 たとえば、Bをリスト(B[1],...,B[n])として表すことができ、ここで、(j,B[j])は、Bの非0要素の位置である。

    Bを用いるSの変換の処理を、これから図8を参照して説明する。 2進ベクトルv[1],. . . ,v[n]が維持され、ここで、すべての成分が、最初に0に初期化される。 この処理は、Tによって表される追加のシンボルを使用する。 最初に、Tの値はすべて0である。

    ステップ805で、変数cに0をセットする。 この変数は、Bに対応する配列の位置のうちの何個を既に訪れたかをカウントする。 ステップ810で、この変数の値を1つインクリメントし、ステップ815で、条件c<n+1とv[c]=1との両方が満足されるかどうかを検査する。 そうである場合には、これは、配列の位置cを既に訪れており、調べるべき位置がまだあることを意味する。 この処理は、ステップ810に戻る。 そうでない場合には、c=n+1またはv[c]=0のいずれかである。 前者の場合には、すべての位置を訪れており、この処理はステップ825で終了する。 このテストは、ステップ820で実行される。 ステップ820で、cがn+1より小さい場合には、必ずv[c]=0である、すなわち、位置cはまだ訪れられていない。 この場合には、ステップ830で、補助変数dにB[c]をセットする。 この値は、変換後にS[c]がある位置と等しい。 ステップ835で、テストを行って、dがcと等しいかどうかを調べる。 そうである場合には、それ以上の動作は不要であり、処理はステップ860にジャンプする。 ステップ860では、値v[c]に1をセットし、カウンタcを1つインクリメントする。 ステップ835で、dがcと等しくない場合には、ステップ840で、Tの値とS[c]の値とを入れ替える。 次に、ステップ845で、Tの値とS[d]の値とを入れ替え、v[d]を、1と等しくなるようにセットし、dにB[d]をセットする。 ステップ850で、検査を行って、dの値がcと等しいかどうかを調べ、これが偽である場合には、ステップ845および850からなるループをもう一度繰り返す。 dがcと等しい場合には、処理は、このループから出てジャンプし、ステップ855でTの値とS[c]の値とを入れ替える。 ステップ860で、v[c]の値に1をセットし、プロセス全体は、ここでステップ810に戻り、ここで、cを1つインクリメントする。 効果的に、説明された処理は、行列Bによって与えられる置換をサイクルに分解し、サイクルを1つずつ見つけ、処理する。

    多くの場合に、Bを用いるSのインプレース変換を計算するためにメモリ内でSのシンボルをあちこちに移動するのではなく、メモリ内でSのシンボルを移動せずにメモリ内のSのシンボルの実際の位置に対するSのシンボルの論理的順序付けの写像を記憶することで十分である。 たとえば、次のように写像を維持することができる。 p[1],. . . ,p[n]が、Sの論理シンボルからメモリ内のそのシンボルの実際の位置への写像、すなわち、すべてのi=1,. . . ,nについて、p[i]が、Sの第i論理シンボルのメモリ内の位置であるものとする。 この写像を使用する時に、順列行列BによるSの変換において、上で説明したようにS[1],. . . ,S[n]に適用する代わりに、上で説明した処理をp[1],. . . ,p[n]に適用して、Sの論理対メモリ写像を再計算することができる。 したがって、図8の処理を説明するために使用された変数Tは、シンボルS[c]ではなくp[c]の値を一時的に記憶するのに使用され、図8のシンボルのベクトルS[1],. . . ,S[n]に適用される論理は、どのような論理であれ、その代わりにベクトルp[1],. . . ,p[n]に適用される。 この表現は、有利である可能性がある。 というのは、一般に、この表現が、通常ははるかにより大きいシンボル要素S[1],. . . ,S[n]よりも通常ははるかに小さいp[1],. . . ,p[n]の要素をメモリ内で移動するためのCPU、メモリ帯域幅、および他のリソースに関してよりコストが低いであるからである。

    単項行列(Monomial Matrix)
    この場合に、Bは、すべての行およびすべての列に正確に1つの非0要素を有する、フォーマット(n,n)の行列である。 順列行列は、単項行列の特殊事例である。 単項行列のインプレース変換を計算する処理を、これから図9を参照して説明する。 そのような行列は、リスト(B[1],...,B[n];α[1],...,α[n])によって簡潔に記述することができ、ここで、jのすべての関連する値について、B[j]は、Bの行jの非0要素の位置であり、α[j]は、その非0位置の値である。

    Bに関するインプレース変換を計算する処理は、サブプロセスとしてBの置換部分に関する線形変換を計算する処理を使用する。 図9のステップ905で、この処理は、図8で説明した処理を使用して

    を計算し、ここで、Cは、Bの非0要素を1に置換することによって行列Bから得られる順列行列である。 ステップ910で、整数変数iを0に初期化し、その後、ステップ920、940、および950で、ループを実行し、ここで、1とnとの間のiの値ごとに、S[i]の値を、その位置に対するα[i]の演算すなわちα[i]*S[i]によって置換する。 このループが完了した時に、処理はステップ930で停止する。 当業者に明らかであるとおり、図9を参照して説明した処理は、


    を計算する。 というのは、Bを、対要素α[1],. . . ,α[n]を有する対角行列と行列Cとの積として書くことができるからである。 さらに、この処理中にシンボルに使用されるストレージは、n+1である。

    上三角行列
    Uが、上三角である(すべてのj<iについてU[i,j]=0)、フォーマット(n,n)の行列であるものとする。 すると、

    である、すなわち、インプレース演算U↓Sは、SによるUの乗算の結果と同一の、シンボルのn個のベクトルをもたらす。 さらに、Uが可逆でもある(すべてのiについてU[i,i]≠0)場合には、


    である、すなわち、インプレース演算


    は、SによるUの逆行列の乗算の結果と同一の、シンボルのn個のベクトルをもたらす。 したがって、行列乗算と逆行列乗算との両方を、上三角行列のインプレース演算を使用して達成することができる。 Uが疎な行列である場合に、U↓Sと


    との両方が、疎な計算である、すなわち、Uによる乗算とUの逆行列による乗算との両方を、U

    −1が必ずしも疎な行列ではない場合であっても疎なインプレース計算によって達成できることに留意されたい。

    下三角行列
    Lが、下三角である(すべてのj>iについてL[i,j]=0)、フォーマット(n,n)の行列であるものとする。 すると、

    である、すなわち、インプレース演算L↑Sは、SによるLの乗算の結果と同一の、シンボルのn個のベクトルをもたらす。 さらに、Lが可逆でもある(すべてのiについてL[i,i]≠0)場合には、


    である、すなわち、インプレース演算


    は、SによるLの逆行列の乗算の結果と同一の、シンボルのn個のベクトルをもたらす。 したがって、行列乗算と逆行列乗算との両方を、下三角行列のインプレース演算を使用して達成することができる。 Lが疎な行列である場合に、L↑Sと


    との両方が、疎な計算である、すなわち、Lによる乗算とLの逆行列による乗算との両方を、L

    −1が必ずしも疎な行列ではない場合であっても疎なインプレース計算によって達成できることに留意されたい。


    この場合に、Bは、上で説明したタイプの行列の積である、すなわち、Bは、積M ・M ・. . . ・M であり、ここで、各M は、順列行列、単項行列、上三角行列、または下三角行列のいずれかである。 この行列の変換をインプレースで計算する処理は、M を用いてSを変換し、その後、M t−1を用いて結果を変換することなどである。

    一般的な正方行列
    フォーマット(n,n)の行列Bについて、3つの行列P、L、およびUの積へのBの分解を計算することが可能であり、ここで、Pは順列行列であり、Lは主対角に1を有する下三角行列であり、Uは上三角行列である。 そのような分解は、当業者に既知の通り、さまざまな処理によって計算することができる。 これらの処理のうちの1つが、周知のガウス消去処理である。 その場合に、BによるSのインプレース変換すなわち、インプレース変換を使用する

    の計算は、単純に


    である。

    任意の正方行列Bを用いるこのインプレース変換の計算の処理を、これから図10を参照して詳細に説明する。 ステップ1010で、BのPLU分解を計算する。 上で述べたように、そのような分解は、さまざまな手段によって計算することができる。 一般的な行列について、1つの可能な方法は、ガウス消去アルゴリズムを使用する。 特殊な行列、たとえば疎な行列、コーシー行列などについて、当業者に既知の通り、より効率的な方法を使用することができる。 ステップ1020で、シンボルのベクトルSのインプレース変換U↓Sを、図6を参照して説明したように計算する。 次に、ステップ1030で、シンボルの変換された組Sをもう一度変換し、今回は、図7を参照して説明したように、インプレース変換L↑Sを計算する。 次に、ステップ1040で、シンボルの新しい変換された組Sをもう一度変換し、図8を参照して説明したように、順列行列PによるSのインプレース変換を計算する。

    Bが可逆である場合に、次の処理が、インプレース変換として

    を計算することに留意されたい。

    ここで、P

    −1は、Pの逆行列である順列行列である。

    上で説明したインプレース変換処理を使用して

    を計算するのに必要な計算の量が、本質的に


    に関する計算量と同一であることに留意されたい。 さらに、UとLとの両方が、疎に表現され、たとえば、n個の複数の非0要素において線形だけを有する場合に、



    との両方を、上で説明したインプレース変換を使用して説明したとおりに、線形時間で計算することができる。 この計算の任意の点でのシンボルの記憶に関する上で説明したインプレース変換の計算中に使用されるメモリまたはストレージの量は、n+1である。

    本明細書で説明する処理が、非常に一般的であるが、重要なすべての場合において最も効率的な処理ではない場合があることに留意されたい。 インプレース変換をこの一般的な事例より効率的に達成できる他の事例を、下で説明する。

    非正方行列
    フォーマット(m,n)の行列Bが正方行列ではない場合に、上で説明したものに似た方法を利用して、メモリの量を最小化する形で変換を計算することができる。 たとえば、行列が、列より多数の行を有する(すなわち、mがnより大きい)場合に、結果のベクトルの最初のn個の要素をインプレースで計算することだけが重要である。 これは、次のように達成することができる。

    B'が、Bの最初のn個の行によって形成される正方行列を識別し、B”が、Bの最後のm−n個の行によって形成される行列を識別するものとする。Sが、変換されるシンボル値を当初に保持するn個のシンボルの列ベクトルであり、S'が、追加のm−n個のシンボルの列ベクトルを識別するものとする。すると、

    を次のようにインプレースで計算することができる。

    ・S'を、上の”線形演算子”という題名のセクションで説明した”単純変換処理”などの単純な行列乗算を使用して、

    として計算する。

    ・B'=P・L・UになるP、L、Uを計算し、ここで、Pは、順列行列であり、Lは、下三角行列であり、Uは、上三角行列である。

    ・インプレース変換

    を計算する。

    行列B'が下三角である場合に、上の処理の最後の2ステップが、B'↑Sの計算に単純化され、行列B'が上三角である場合に、上の処理の最後の2ステップが、B'↓Sの計算に単純化されることに留意されたい。

    同様に、nがmより大きい場合に、類似する方法を使用して、次のようにベクトルSの最初のm個の要素を置換する形で変換を計算することができる。 B'が、Bの最初のm個の列によって形成される正方行列を識別し、B”が、Bの最後のn−m個の列によって形成される行列を識別するものとする。Sが、変換されるシンボル値を当初に保持するn個のシンボルの列ベクトルであり、S'が、Sの最初のm個のシンボルを識別し、S”が、Sの最後のn−m個のシンボルを識別するものとする。 すると、

    を次のようにインプレースで計算することができる。

    ・B'=P・L・UになるP、L、Uを計算し、ここで、Pは、順列行列であり、Lは、下三角行列であり、Uは、上三角行列である。

    ・インプレース変換

    を計算する。

    ・上の”線形演算子”という題名のセクションで説明した”単純変換処理”などの単純な行列乗算の小さい変形形態を使用して、

    の結果になるようにS'を更新する。

    行列B'が下三角である場合に、上の処理の最初の2ステップが、B'↑S'の計算に単純化され、行列B'が上三角である場合に、上の処理の最初の2ステップが、B'↓S'の計算に単純化されることに留意されたい。

    ほとんどの疎な行列に関する効率的なインプレース線形変換
    Mが、図11に示されたタイプのフォーマット(n,n)の正方行列であるものとする。 図11では、m≦nであり、Lは、フォーマット(m,m)の下三角可逆行列であり、Aは、フォーマット(m,n−m)の行列であり、Bは、フォーマット(n−m,m)の行列であり、Cは、フォーマット(n−m,n−m)の可逆行列である。

    Sが、n個のシンボルの列ベクトルであるものとする。 下では、

    および


    を計算する効率的なインプレース変換を説明する。 これらのインプレース変換は、効率的とインプレースとの両方である、後で説明するFEC符号化およびFEC復号化の方法および処理の一部の基礎を作る。 タイプMの行列が検討される、これらのFEC符号の一部について、Mは、疎な行列であり、たとえば、Mの非0要素の個数はn程度であり、n−mは、nと比較して小さく、たとえば、n−mはnの平方根程度である。 この例について、


    および


    を計算する、下で説明するインプレース変換を実行するのに必要な計算は、nシンボル演算程度であるが、この計算中にシンボルに使用される総空間または総メモリは、多くともn+1である。

    M'が、図12に示されているようにMから導出されるフォーマット(n,n)の正方行列であるものとする。 図12では、LおよびBは、図11に示されたLおよびBと同一の行列であり、最後のn−m個の列および最初のm個の行によって形成される行列のすべての要素は、0であり、最後のn−m個の列および最後のn−m個の行によって形成される行列は、恒等行列である。 M'が、可逆下三角行列であることに留意されたい。 図12には、M'の逆行列であるM' −1の形も示されている。

    Dが、図13Aに示された、フォーマット(n,n−m)の行列であるものとする。 図13Aでは、AおよびCが、図11に示されたものと同一の行列AおよびCである。 行列Dは、n個のシンボルの列ベクトルとみなすこともでき、各シンボルは、基礎になる体Kからのn−m個の体要素の連結である。 したがって、今説明したようにDをn個のシンボルの列ベクトルとみなす時には、Dに対するフォーマット(n,n)の行列の演算を定義することができ、n個のシンボルのベクトルとみなされるDに対する行列の演算は、その行列と、行列とみなされる時のDとの行列乗算と同一である。

    今説明したように、Dをn個のシンボルの列ベクトルとみなすと、インプレース変換

    が、図13Bに示された値を有するDをもたらすことがわかり、ここで、Eをフォーマット(m,n−m)の行列とみなす時に、E=L

    −1・Aであり、Fをフォーマット(n−m,n−m)の行列とみなす時に、F=C−B・L

    −1・Aである。 CおよびLは、両方とも可逆なので、Fも可逆であることを簡単に検証することができる。 P、Λ、およびYが、フォーマット(n−m,n−m)の行列であり、F=P・Λ・Yであり、Pが順列行列であり、Λが下三角行列であり、Yが上三角行列であるものとする。 この因数分解は、たとえば、周知のガウス消去法または類似する技法を使用して得ることができる。

    L'が、図14に示されたフォーマット(n,n)の正方行列であるものとする。 図14では、Lは、図11に示された行列Lと同一の行列であり、最後のn−m個の列および最初のm個の行によって形成される行列のすべての要素は、0であり、最後のn−m個の行および最初のm個の列によって形成される行列のすべての要素は、0であり、最後のn−m個の列および最後のn−m個の行によって形成される行列は、恒等行列である。 L'が、可逆下三角行列であることに留意されたい。 図14には、L'の逆行列であるL' −1の形も示されている。

    P'、Λ'、およびY'が、それぞれ図15A、15B、および15Cに示されたフォーマット(n−m,n−m)の正方行列であるものとする。 P、Λ、およびYは、F=P・Λ・Yである行列であり、Fは上で説明したものであり、P'、Λ'、およびY'のそれぞれで、最後のn−m個の列および最初のm個の行によって形成される行列のすべての要素は、0であり、最後のn−m個の行および最初のm個の列によって形成される行列のすべての要素は、0であり、最初のm個の行および最初のm個の列によって形成される行列は、恒等行列である。 P'、Λ'、およびY'が、可逆行列であることに留意されたい。

    N'が、図16に示されたフォーマット(n,n)の正方行列であるものとする。 図16では、LおよびAは、図11に示されたものと同一の行列LおよびAであり、最後のn−m個の行および最初のm個の列によって形成される行列のすべての要素は、0であり、最後のn−m個の列および最後のn−m個の行によって形成される行列は、恒等行列である。 N'が、可逆行列であり、文字どおりの下三角ではないが、N'↑Sがインプレースで

    の結果を計算することがわかることに留意されたい。 図16には、N'の逆行列であるN'

    −1の形も示されている。


    が、


    の結果をインプレースで計算することを検証することもできる。

    上で導入した表記に基づいて、入力MおよびSに対するインプレース変換

    を計算する処理を、図17を参照して説明する。 ステップ1710で、インプレース変換N'↑Sを計算する。 ステップ1720で、インプレース変換


    を計算し、ここで、Dは、上で説明したものであり、上で説明したように、行列F=C−B・L

    −1・Aは、変換の結果の最後のn−m個の行である。 ステップ1730で、上で説明したように、行列FをP、Λ、およびYに因数分解する。 ステップ1740で、インプレース変換Y'↓Sを計算する。 ステップ1750で、インプレース変換Λ'↑Sを計算する。 ステップ1760で、インプレース変換


    を計算する。 ステップ1770で、インプレース変換


    を計算する。 ステップ1780で、インプレース変換M'↑Sを計算する。 ステップ1790で、インプレース変換が完了するので、この処理は停止する。

    図17で説明した処理の終りに、ベクトルSに、MにオリジナルのベクトルSを乗じた結果が格納されていることを検証することができる。 この処理のどの点でも、シンボルに使用されるストレージが、多くともn+1であり、すべてのステップにまたがって集計されたシンボル演算の回数が、Mの非0要素の個数と(n−m) との合計で線形であることに留意されたい。

    さらなる効率および利点につなげることのできる、図17で説明した処理の多数の変形形態がある。 たとえば、インプレース演算中に、演算のうちで恒等部分行列に作用する部分は、結果を変更しないので、スキップすることができる、すなわち、N'↑Sを計算する時に、N'の最後のn−m個の行を用いる演算は、このインプレース変換の結果に影響しないので、スキップすることができる。 もう1つの変形形態の例として、ステップのいくつかを、結果に影響せずに並べ換えることができる。 そのような変形形態の1つが、ステップ1730とステップ1740との間にステップ1770を実行することである。 もう1つのそのような変形形態が、ステップ1740とステップ1750の間にステップ1770を実行することであり、この場合に、ステップ1740および1770を図20に示された1つのインプレース変換に組み合わせ、ステップ1750および1760を図21に示された1つのインプレース変換に組み合わせることが可能である。 変形形態のもう1つの例として、ステップ1730、1740、1750、および1760を、Sの最後のn−m個のシンボルを含む列ベクトルによるFの乗算のステップおよびその結果によってSの最後のn−m個のシンボルを置換するステップに置換することができる。 Fによる乗算は、たとえば、この開示で説明されるインプレース変換または標準行列乗算などの標準技法のいずれかを使用して実行することができる。

    上で導入した表記に基づいて、入力MおよびSに対するインプレース変換

    を計算する処理を、図18を参照して説明する。 図18を参照して説明するインプレース変換は、合計n+(n−m)+1シンボル分のストレージを使用する、すなわち、図17を参照して説明した処理よりn−m個多いシンボルを使用し、シンボル演算の総数が、


    の単純な非インプレース計算で使用されるはずの演算の総数と同一であるという利益を有する。 したがって、Mが疎である時に、図18を参照して説明する処理は、わずかにより多いシンボルストレージを犠牲にして、図17を参照して参照して説明した処理より少ない計算を行うことができる。 後で説明するFEC符号への応用において、n−mは、しばしば、nと比較して小さく、したがって、図18を参照して説明する処理に必要なシンボルストレージの余分な量は、通常、図17を参照して参照して説明した処理によって達成されるシンボルストレージの最小限の量と比較して、少ない。

    Wが、追加のn−m個のシンボルの列ベクトルであるものとする。 Qが、Mの最初のm個の行を含むフォーマット(m,n)の行列を識別し、Q'が、Mの最後のn−m個の行を含むフォーマット(n−m,n)の行列を識別するものとする。 図18のステップ1810で、単純な行列乗算を使用して、

    を計算する。 ステップ1820で、インプレース変換Q↑Sを計算する。 Qの最初のm個の列が、下三角行列Lを形成するので、ステップ1820で計算されるインプレース変換が、


    と等しいSの最初のm個の要素をもたらすことに留意されたい。 ステップ1830で、Sの最後のn−m個のシンボルにWをコピーする。 ステップ1840で、インプレース変換が完了するので、この処理は停止する。

    上で導入した表記に基づいて、入力MおよびSに対するインプレース変換

    を計算する処理を、図19を参照して説明する。 ステップ1910で、インプレース変換


    を計算する。 ステップ1920で、インプレース変換L'↑Sを計算する。 ステップ1930で、インプレース変換


    を計算し、ここで、Dは、上で説明したものであり、上で説明したように、行列F=C−B・L

    −1・Aは、変換の結果の最後のn−m個の行である。 ステップ1940で、上で説明したように、行列FをP、Λ、およびYに因数分解する。 ステップ1950で、インプレース変換


    を計算する。 ステップ1960で、インプレース変換


    を計算する。 ステップ1970で、インプレース変換


    を計算する。 ステップ1980で、インプレース変換


    を計算する。 ステップ1990で、インプレース変換が完了するので、この処理は停止する。

    図19で説明した処理の終りに、ベクトルSに、M −1にオリジナルのベクトルSを乗じた結果が格納されていることを検証することができる。 この処理のどの点でも、シンボルに使用されるストレージが、多くともn+1であり、すべてのステップにまたがって集計されたシンボル演算の回数が、Mの非0要素の個数と(n−m) との合計で線形であることに留意されたい。

    上で図19を参照して説明したこの処理は、本質的に、図17を参照して説明した処理の逆である。 図17を参照して説明した処理と同様に、さらなる効率および利点につなげることのできる、図19で説明した処理の多数の変形形態がある。 たとえば、ステップ1940、1950、1960、および1970を、F −1を判定するステップと、その後に、Sの最後のn−m個のシンボルを含む列ベクトルをF −1に乗じるステップと、Sの最後のn−m個のシンボルをその結果によって置換するステップとに置換することができる。 F −1の判定およびこれによる乗算は、たとえば、この開示で説明されるインプレース変換または標準的なガウス消去法および行列乗算などの標準技法のいずれかを使用して実行することができる。 このステップに標準行列乗算を使用する場合に、シンボル用のより多くのストレージ、たとえば、追加のn−mシンボル分のストレージが必要になる場合があり、その結果、たとえば、このインプレース変換中のシンボル用の最大ストレージが、2・n−m+1シンボル分になるが、それでも、このインプレース変換全体の間でシンボルに使用されるストレージの全体的な量は、特にmがnに近い時に、標準技法が使用するはずの2・nより実質的に少ない。

    アプリケーション
    リードソロモン符号
    消去または破損の場合に伝送を保護する、ある線形符号クラスが、リードソロモン符号として知られている。 循環符号、バンデルモンド行列に基づく符号、コーシー行列に基づく符号、または類似物など、この符号を記述する複数の同等の形がある。 これらの場合のすべてで、符号化処理を、行列とのシンボルのベクトルの乗算によって記述することができる。 ソースシンボルの個数がkであり、出力シンボルの個数がnであり、vが符号化されるk個のシンボルの列ベクトルを表し、wがvの符号化を含むn個のシンボルの列ベクトルを表す場合に、この符号化処理を、

    と記述することができ、ここで、Mは、フォーマット(n,k)の行列であり、時々符号の生成行列とも呼ばれる。 M'が、Mの最初のk個の行を含むフォーマット(k,k)の行列を識別し、M”が、Mの最後のr=n−k個の行を含むフォーマット(r,k)の行列を識別するものとする。w'が、wの最初のk個のシンボルを識別し、w”が、wの最後のr個のシンボルを識別するものとする。

    符号が組織的である、すなわち、Mによるvの行列乗算の後に結果w'の最初のk個のシンボルがvの要素と一致する場合に、M'は恒等行列である。 組織的符号では、符号化されたベクトルw'の要素を、ソース位置と称する。 その場合に、M”は、r個の冗長なシンボルw”を計算するのに使用される。 行列Mは、さまざまな形で表すことができる。 たとえば、非組織的な版が望まれる場合に、Mをバンデルモンド行列とすることができる。 組織的な場合に、M”が、コーシー行列を形成することができる。これらの表現は、例示のみのために言及されたものであり、決して網羅的なリストを形成するものではない。

    リードソロモン符号が非組織的である時に、図20を参照して説明する処理は、その処理中に多くともn+1個のシンボルのストレージを使用する符号化を作るインプレース変換を記述する。 当初に、w'は、符号化されるk個のシンボルを記憶する。 この処理の終りに、wは、符号化の結果を記憶する、すなわち、w'が、最初のk個の符号シンボルを記憶し、w”が、生成された残りのr個の符号シンボルを記憶する。図20のステップ2010で、単純な行列乗算、たとえば前に説明した”単純変換処理”を使用して、w”を

    として計算する。 ステップ2020で、M'をP、L、およびUに因数分解し、ここで、これらの行列のそれぞれは、フォーマット(k,k)を有し、Pは、順列行列であり、Lは、下三角行列であり、Uは、上三角行列であり、したがってM'=P・L・Uである。 そのような分解は、さまざまな手法を用いて、たとえばガウス消去アルゴリズムを使用して計算することができ、あるいは、行列M'がコーシー行列である時には、このPLU分解を、ある公式を用いて計算することができ、これによって、この計算の計算の複雑さが減る。 ステップ2030で、インプレース変換U↓w'を計算する。 ステップ2040で、インプレース変換L↑w'を計算する。 ステップ2050で、インプレース変換


    を計算する。 ステップ2060で、インプレース変換が完了するので、この処理は停止する。 符号シンボルが任意のシステム内で送られる順序が、それらの符号シンボルが記憶される順序である必要はなく、したがって、最後のステップ2060を実際に実行する必要がない場合があることに留意されたい。

    リードソロモン符号が組織的である時に、処理中に多くともm+1個のシンボルのシンボルストレージを使用してk個のソースシンボルからr個の冗長シンボルを作るインプレース変換を、これから説明するが、mは、kおよびrのうちの最大値である。 この場合に、当初にw'に記憶されるソースシンボルは、生成される冗長シンボルによって、完全にまたは部分的にのいずれかで上書きされ、したがって、上書きされるソースシンボルは、一般に、FEC符号化器を使用するアプリケーションによって制御される別のストレージ空間に保存され、あるいは、これらは、既に送信され、もはや記憶される必要がない。 冗長シンボルの個数rが、ソースシンボルの個数k以上である場合には、図20で説明した処理のわずかな変形を使用して、多くともr+1個のシンボルのストレージを使用して

    を計算するインプレース変換を使用して冗長シンボルを生成することができる。 r<kの場合には、本明細書で図21を参照して説明する処理を使用して、多くともk+1個のシンボルのストレージを使用するインプレース変換を使用して冗長シンボルを生成することができる。 vが、w'の最初のr個のシンボルを識別し、v'が、w'の最後のk−r個のシンボルを識別するものとする。 当初に、w'は、符号化されるk個のソースシンボルを記憶する。 この処理の終りに、w'の最初のr個の要素すなわちvは、符号化のr個の冗長シンボルを記憶する。 Bが、M”の最初のr個の列と同一である、フォーマット(r,r)の行列であり、B'が、M”の最後のk−r個の列と同一である、フォーマット(r,k−r)の行列であるものとする。 図21のステップ2110で、BをP、L、およびUに因数分解し、ここで、これらの行列のそれぞれは、フォーマット(k,k)を有し、Pは、順列行列であり、Lは、下三角行列であり、Uは、上三角行列であり、したがって、B=P・L・Uである。 そのような分解は、さまざまな手法を用いて、たとえばガウス消去アルゴリズムを使用して計算することができ、あるいは、行列Bがコーシー行列である時には、このPLU分解を、ある公式を用いて計算することができ、これによって、この計算の計算の複雑さが減る。 ステップ2120で、インプレース変換U↓vを計算する。 ステップ2130で、インプレース変換L↑vを計算する。 ステップ2140で、インプレース変換


    を計算する。 ステップ2150で、上の”線形演算子”という題名のセクションで説明した”単純変換処理”などの単純な行列乗算の小さい変形形態を使用して、vを


    に更新する。 ステップ2160で、インプレース変換が完了するので、この処理は停止する。

    送信されたシンボルが、受信の前に消去され得る通信チャネルでは、復号化の問題は、十分に多数の符号化されたシンボルの知識からすなわち、符号化が

    によって定義される場合に、wの十分に多数の要素の知識から、オリジナルのソースシンボルのベクトルvを判定するという問題である。 リードソロモン符号の場合に、”十分に多数のシンボル”は、アプリケーションならびに復号化に使用可能な計算リソースおよびストレージリソースに依存して、k個もの少数のシンボルまたはk個を超えるシンボルと解釈される場合がある。

    次では、上で説明した一般的なインプレース変換方法の、組織的リードソロモン符号のインプレース復号化の問題への例示的適用を説明する。 開示される方法は、この開示を読んだ後に、当業者によって、非組織的な版などのリードソロモン復号化の他の事例に簡単に一般化することができる。

    組織的リードソロモン符号のインプレース復号化の方法を、これから図22および図23を参照して説明する。 図22に示された例示的処理では、ステップ2205で、行列M”の列に関する、p[1],...,p[e]によって表される消去されたソースシンボル位置を識別し、ステップ2210で、行列M”の行に関する、受信された冗長シンボルの位置r[1],. . . ,r[e]を識別する。 図22に示された例示的処理に関して、受信されたシンボルが、k個のシンボルの列ベクトルvに記憶されると仮定し、ここで、位置p[1],. . . ,p[e]のシンボルは、受信された冗長シンボルであり、vの他のk−e個の位置のシンボルは、その正しい位置にある、受信されたソースシンボルであり、復号化器の仕事は、位置p[1],. . . ,p[e]で、vを欠けているソースシンボルに変換することである。 変数iに基づく外側ループが、ステップ2220から2250までで定義され、効果的に、これらのステップが、1と消去されたソース位置の個数eとの間のiの値について実行される。 このループに入る前に、ステップ2215で、iの値を1に初期化する。 ステップ2225から2240までのループは、1とkとの間でp[1],. . . ,p[e]のいずれとも等しくないjの値にわたって進み、そのようなjごとに、v[p[i]]の値をM”[r[i],j]*v[j]の値に加算することによって、v[p[i]]を更新する。

    図23の処理では、v[p[1]],. . . ,v[p[e]]によって形成されるベクトルをzによって表し、行列M”の行r[1],...,r[e]および列p[1],...,p[e]によって形成される行列の逆行列をTによって表す。リードソロモン符号の一般理論は、当業者に周知の通り、この行列が必ず可逆であることを示す。この逆行列およびそのPLU分解を、ステップ2305で計算する。そのようなPLU分解は、さまざまな手法を用いて、たとえばガウス消去アルゴリズムを使用して計算することができ、あるいは、行列M”がコーシー行列である時には、このPLU分解を、ある公式を用いて計算することができ、これによって、この計算の計算の複雑さが減る。 TのPLU分解を、行列Tを必ずしも明示的に計算せずに、この処理によって直接に計算できることに留意されたい。 ステップ2310で、図6で説明した処理を使用して、インプレース変換U↓zを計算する。 ステップ2320で、図7の処理を使用して、L↑zを計算する。 ステップ2330で、図8の処理を使用して、インプレース変換

    を計算する。 ステップ2340では、リードソロモン符号のインプレース復号化が完了するので、この処理は停止する。

    図23を参照して説明した全体的なインプレース変換は、処理中に多くともk+1個のシンボルのストレージを使用する。

    本明細書でリードソロモン符号について説明した処理は、例示のみを目的とし、本発明の範囲を限定することは意図されていない。 より一般的に、非常に似た方法を、代数幾何符号(略してAG符号)、BCH符号、または生成行列が明示的に知られている任意の他の符号クラスなど、類似する符号クラスのインプレース復号化に適用することができる。

    一般化リピートアキュミュレート(GRA)符号
    一般に、これは、組織的符号であり、kは、ソースシンボルの個数であり、rは、冗長シンボルの個数であり、したがって、n=k+rが、この符号化のシンボルの総数である。 この場合に、r個の冗長シンボルの列ベクトルzは、k個のソースシンボルの列ベクトルvから、次のように構成される。 フォーマット(r,k)の行列Aを選択し、疎な上三角行列または疎な下三角行列である、フォーマット(r,r)のもう1つの行列Uを選択する。 この例の説明について、Uは、上三角行列として任意に選択される。 すると、

    である。

    文献で一般に見られる非正則リピートアキュミュレート(IRA)符号の事例は、Aが、各行および各列内の1の個数の規定された分布を有する行列の集合からランダムにサンプリングされた2進行列と仮定され、Uが、主対角上の1、主対角の真上の対角線上の1、および他のすべての要素の0を有する上三角行列であり、したがってUが疎である、この構成の特殊事例である。 この例について、U −1 iが、主対角およびその上のすべての要素に1を有する密な上三角行列であることに留意されたい。 したがって、Aが、各行内の3つの1および各列内の3つの1を有するように選択された正方行列であると仮定する。 この例では、計算される冗長シンボルは、ソースシンボルに対する非常に不規則な依存性を有し、たとえば、zの最後の冗長シンボルは、vのソースシンボルのうちの3つのXORであり、zの最後から2番目の冗長シンボルは、vのソースシンボルのうちの6つのXORであるなどである。

    GRA符号のインプレース符号化処理を、これから図24を参照して説明する。 この説明について、rが、多くともkである、すなわち、冗長シンボルの個数が、多くともソースシンボルの個数であると仮定する。 rがkより大きい場合について、行より多数の列を有する行列にシンボルの列ベクトルを乗算するインプレース処理ではなく、列より多数の行を有する行列にシンボルの列ベクトルを乗算するインプレース処理を使用することによって、この処理を変更することができる。 A'が、Aの最初のr個の列によって形成される正方行列を識別し、A”が、Aの最後のk−r個の列によって形成される行列を識別するものとする。vが、当初にソースシンボルを保持するk個のシンボルの列ベクトルであり、v'が、vの最初のr個のシンボルを識別し、v”が、vの最後のk−r個のシンボルを識別するものとする。 図24のステップ2410で、行列A'をP、L、Yに因数分解し、ここで、Pは、順列行列であり、Lは、下三角行列であり、Yは、上三角行列であり、A'=P・L・Yである。 標準ガウス消去法の使用を含むさまざまな方法を使用して、この因数分解を実行することができる。 ステップ2420で、インプレース変換Y↓v'を計算し、ステップ2430で、インプレース変換L↑v'を計算し、ステップ2440で、インプレース変換

    を計算する。 ステップ2450で、上の”線形演算子”という題名のセクションで説明した”単純変換処理”などの単純な行列乗算の小さい変形形態を使用して、インプレース変換


    を計算する。 ステップ2460で、インプレース変換


    を計算する。 ステップ2470で計算が停止し、結果のr個の冗長シンボルは、vの最初のr個のシンボルすなわちv'に記憶されている。

    図24を参照して説明した処理の多数の変形形態がある。 たとえば、ステップ2410、2420、2430、および2440を、米国特許第6856263号、名称”Systems and Processes for Decoding Chain Reaction Codes Through Inactivation”(以下、”Inactivation Decoder”)で開示されたものなどの、より洗練された手法に置換して、行列Aを図11に示されたものに類似する形で記述し、その後、図17を参照して説明した処理の変形形態を使用して、インプレース変換を使用して

    を計算することができる。 たとえば、Aが、各行内の3つの1および各列内の3つの1を有するように選択された正方行列である、すなわち、r=kの場合に、Aを図11に示された形にすることが可能であり、ここで、部分行列Lは、約(0.86k,0.86k)のフォーマットを有し、部分行列Cは、約(0.14k,0.14k)のフォーマットを有する。 この場合に、図17を参照して説明したインプレース変換処理を使用することができ、これによって、処理中に記憶に使用されるシンボルの個数が最小化される。 もう1つの変形形態として、図18を参照して説明したインプレース変換処理を使用して、


    を計算することができ、これによって、3・k回すなわち、単純な形で


    を計算するのに使用されるはずのシンボル演算と同一の回数のシンボル演算が使用されるが、1.14・k個のシンボルのストレージだけが使用される。

    連鎖符号のインプレース復号化
    連鎖符号が、米国特許第6307487号、名称”Information Additive Code Generator and Decoder for Communications Systems”および米国特許出願第10/032,156号、名称”Multi-Stage Code Generator and Decoder for Communications Systems”に記載されている。 たとえば”Inactivation Decoder”で開示された復号化器など、複数の復号化器が、そのような符号用に設計されてきた。 ”Inactivation Decoder”で開示された復号化器では、復号化処理が、

    の形の線形連立方程式を解くことに変形され、ここで、Tは、ランクnのフォーマット(s,n)の行列であり、sは少なくともnであり、nは中間シンボルの個数であり、kはソースシンボルの個数であり、rは冗長シンボルの個数であり、したがって、n=k+rである。 冗長シンボルの個数rが、連鎖符号のいくつかの実施形態について0であり、他の実施形態について、冗長シンボルの個数rが0より大きいことに留意されたい。 Tの行は、動的な出力シンボルおよび冗長(プレコーディング(pre-coding))シンボルに対応し、xは、ソースシンボルおよび冗長(プレコーディング)シンボルを含む、それについて解く必要がある当初に未知の値を有するn個のシンボルのベクトルであり、zは、受信されたシンボルおよびプレコード(pre-code)のチェックシンボルを含む既知の値を有するs個のシンボルのベクトルである。 いくつかのアプリケーションでは、チェックシンボルが0の値を有するが、他のアプリケーションでは、この値が0と異なる場合がある。 チェックシンボル値がどのようにセットされるかにかかわりなく、チェックシンボル値は、符号化器と復号化器との間の以前の通信を介してまたは他のステップによってのいずれかで復号化器に知られる。

    ”Inactivation Decoder”は、行列TをT=Q・M・Pの形に変換することによって未知のシンボルxを解く処理を使用し、ここで、Qは、フォーマット(s,s)の順列行列であり、Pは、フォーマット(n,n)の順列行列であり、Mは、フォーマット(s,n)、ランクnであり、BとCとの両方がn−m個の行ではなくs−m個の行を有することを除いて図11に示されたものに類似する形を有する行列である。 その中で、行列Lは、フォーマット(m,m)の下三角2進行列であり、A、B、およびCは、適当な大きさの行列であり、好ましいアプリケーションでは、AおよびLを疎な行列とすることができる、すなわち、AおよびLを、多数の非0位置を有しないものとすることができる。 この因数分解を使用すると、シンボルの受信されたベクトルzから未知のベクトルxを回復するという問題は、(a)好ましくは、結果もzに記憶されるようにするためにインプレースで、

    を計算し、(b)好ましくは、結果yがzの最初のn個の要素に記憶されるようにするためにインプレースで、未知のベクトルyについて、連立方程式


    を解き、(c)好ましくは、結果xがzの最初のn個の要素に記憶されるようにするためにインプレースで、連立方程式


    を解くことという問題に変形することができる。 これらのステップは、互いと同時に実行することができる。 作業(a)および(c)は、上で本明細書の前の技術のセクションで説明され、たとえば、図8を参照して説明した処理が、インプレース変換を使用して作業(a)および(c)を実行する1つの形である。

    zを与えられて未知のベクトルyについて

    を解く処理の実施形態を、これから図11、図12、図13A、図13B、図14、図15、図16、および図19を参照して提供し、ここで、Sは、この処理の始めにzに記憶されたs個のシンボルのベクトルを識別し、Sの最初のn個のシンボルは、この処理の終りにベクトルyと等しい。 図19を参照して説明した処理と現在の処理との間の1つの相違は、Mが、図11に示されたn個の行ではなくs個の行を有することである。 したがって、現在の実施形態の第1ステップは、一緒にランクnの行列を形成する、Mのn個の行を判定し、次に、フォーマット(n,n)の結果のフルランク正方行列になるようにMを再定義することである。 現在の実施形態の残りのステップは、図11、図12、図13A、図13B、図14、図15、および図16を参照して、前に図19を参照して説明した処理を実行することである。

    説明したばかりの実施形態に対する多数の変形形態がある。 たとえば、第1ステップでフォーマット(s,n)のオリジナルの行列Mのどのn個の行を使用するかを判定するのではなく、処理が進行する際に、たとえば”Inactivation Decoder”に記載の方法を使用して、部分行列L、A、B、およびCを増分式に判定することができる。 したがって、図19のステップ1910および1930で説明した処理の変形形態を、”Inactivation Decoder”に記載の方法を使用して実行して、これらの行列を増分式に形成し、図19のステップ1910および1930に記載のステップの同等物を実行することができる。 これらのステップの終りに、ランクnを有するMのn個の行が、判定されており、Mのこれらの行が、図11に示された形に論理的に操作されている。 その後、図19に示されたステップの残りを適当な順序で適用して、インプレース変換処理を完了することができる。

    当業者が認めるとおり、説明したばかりの2つの実施形態に対する多数の変形形態がある。 たとえば、図19を参照して説明した処理の変形形態を、この2つの実施形態に適用することもできる。

    連鎖符号のインプレース組織的符号化
    Shokrollahi他が出願した米国特許出願第10/677,624号、名称”Systematic Encoding and Decoding of Chain Reaction Codes”(以下では”ShokrollahiI”)に、連鎖符号、具体的にはマルチステージ連鎖符号の組織的符号化の方法が記載されている。 この方法では、ソースシンボルが、まず、線形変換を使用して中間シンボルの組に変換される。 この変換は、

    という形を有し、ここで、Tは、ソースシンボルおよび冗長(プレコーディング)シンボルに対応する行を有する、フォーマット(n,n)のフルランク行列であり、xは、それについて解かなければならない当初に未知の値を有する中間シンボルのベクトルであり、zは、ソースシンボルおよびプレコードのチェックシンボルに対応する既知の値を有するシンボルのベクトルである。

    この連立方程式は、Tが正方行列である時に、セクション”連鎖符号のインプレース復号化”で説明したより一般的な事例の特殊事例である。 したがって、セクション”連鎖符号のインプレース復号化”で説明したインプレース変換の実施形態を使用して、インプレース変換を使用して既知のソースシンボルから中間シンボルを計算することができる。

    連鎖符号のインプレース組織的復号化
    Shokrollahi Iに記載の方法は、一連のステップを実行して、ソースシンボルの一部および組織的符号化器によって生成された一部の出力シンボルの組合せから、すべてのソースシンボルを入手する。 この方法の好ましい実施形態では、ソースシンボルの一部を含むすべての受信されたシンボルおよび他の出力シンボルを集め、復号化して、中間シンボルの組を入手する。 次に、中間シンボルを変換して、欠けているソースシンボルを入手する。 受信されたシンボルからの中間シンボルのインプレース計算は、上で見出し”連鎖符号のインプレース復号化”の下で説明したものと同一である。 このセクションでは、中間シンボルからのソースシンボルのインプレース計算を説明する。 ShokrollahiIから明白であるとおり、また、上で説明した事例に似て、この問題は、

    を計算するという問題に変形することができ、ここで、Tは、フルランクであるフォーマット(n,n)の行列であり、Sは、n個の中間シンボルの列ベクトルである。 行列Tは、


    T=P・M・Q


    と表すことができ、ここで、PおよびQは、フォーマット(n,n)の順列行列であり、Mは、図11に示された形のフォーマット(n,n)の行列である。

    を計算するインプレース変換の実施形態は、図11、図12、図13A、図13B、図14、図15A〜C、図16、および図17をも参照する、図17を参照して説明した処理である。 この実施形態は、処理中に多くともn+1個のシンボルのストレージを使用する。 図17を参照して説明した処理の変形形態も、この実施形態に適用される。

    を計算するインプレース変換の第2の実施形態は、図18を参照して説明した処理である。 この実施形態は、処理中に多くともn+(n−m)+1のストレージを使用する。 連鎖符号の好ましい実施形態では、n−mは、nの値に対して相対的に小さく、したがって、この処理中に使用されるシンボルストレージの相対サイズは、nよりわずかに大きい。 図18を参照して説明した処理の変形形態も、この実施形態に適用される。

    インプレース変換処理を使用して、受信された出力シンボルから中間シンボルを計算する、上で説明した実施形態と、インプレース変換処理を使用して、回復された入力シンボルからソースシンボルを計算する、上で説明した実施形態とを組み合わせて、インプレース変換を使用して、受信された出力シンボルからソースシンボルを計算する全体的な実施形態を提供することができ、ここで、そのような2つの処理の組合せによって使用される、シンボルのストレージは、多くとも、各処理が個別に使用するシンボルのストレージである。

    上の説明は、説明だけを目的とし、本発明の範囲を限定することは意図されていない。 多数の同等の版および方法が、本開示を読んだ時に可能である。 たとえば、上の方法において、ステップ2での行列DのLU分解の計算を、オフラインで行うことができる。

    ここまでで説明したように、線形変換演算を構成する新規のメモリ効率のよい手法が教示される。 本明細書で示された例では、線形変換処理が、複数の出力要素を導出するために複数の入力要素に線形変換を適用する処理である。 本明細書で説明する処理では、メモリは、線形変換処理に使用可能な入力要素を記憶するために割り振られ、そのメモリの少なくとも一部は、導出された出力要素を記憶するために再利用される。 そのような手法を使用すると、複数の入力要素を保持するのに十分に大きいメモリおよび複数の出力要素を保持するのに十分に大きいメモリを必要とするのではなく、その複数の入力要素および複数の出力要素のうちの大きい方(必要な場合にはそれに加えて多少のオーバーヘッド)を保持するのに十分なメモリ役に立ち、貴重なメモリ空間が節約される。

    本明細書で説明した技法は、FEC符号化またはFEC復号化、消去符号化または消去復号化、エラー訂正、あるいは類似物のための変換など、さまざまな線形変換に使用することができる。 FEC符号は、リードソロモン符号、連鎖符号、マルチステージ連鎖符号、または任意の他の線形符号などの符号を用いることができる。 この変換を実行する論理は、入力要素を読み取って出力要素を生成し、使い果たされた入力要素のためのメモリを、生成された出力要素(または中間要素(この中間要素が、次に、使い果たされる可能性がある))を記憶するために再利用することができる。

    本発明を、例示的実施形態に関して説明してきたが、当業者は、多数の変更が可能であることを認めるであろう。 たとえば、本明細書で説明した処理は、ハードウェア構成要素、ソフトウェア構成要素、および/またはその任意の組合せを使用して実施することができる。 したがって、本発明を、例示的実施形態に関して説明したが、本発明が、添付の特許請求の範囲の範囲に含まれるすべての修正形態および同等物を含むことが意図されていることを了解されたい。

    関連出願の相互参照
    本願は、参照によってその全体が組み込まれている2005年6月10日出願の米国仮出願第60/689,632号の利益を主張し、その非仮出願である。

    本発明の実施形態によるFEC符号化を使用する通信システムを示す高水準の図である。

    図1のシステムに類似するが、複数の送信機および受信機を有する通信システムを示す図である。

    送信機および/または受信機を実施するのに使用できるハードウェアの例を示す図である。

    従来のFEC復号化処理を示す図である。

    本発明によるインプレースFEC復号化処理の実施形態を示す図である。

    本発明の実施形態による変換処理を示すフローチャートである。

    組織的リードソロモン符号のインプレース復号化の方法を示すフローチャートである。

    組織的リードソロモン符号のインプレース復号化の方法をさらに示すフローチャートである。

    ベクトル計算の方法を示すフローチャートである。

    ベクトル計算の方法を示すフローチャートである。

    復号化に使用可能な行列を示す図である。

    行列およびその変換を示す図である。

    処理に使用可能なデータ構造を示す図である。

    処理に使用可能なデータ構造を示す図である。

    行列およびその変換を示す図である。

    行列およびその変換を示す図である。

    行列およびその変換を示す図である。

    行列およびその変換を示す図である。

    行列およびその変換を示す図である。

    ある方法を示すフローチャートである。

    ある方法を示すフローチャートである。

    ある方法を示すフローチャートである。

    ある方法を示すフローチャートである。

    ある方法を示すフローチャートである。

    ある方法を示すフローチャートである。

    ある方法を示すフローチャートである。

    ある方法を示すフローチャートである。

    QQ群二维码
    意见反馈