説明

さまざまな符号クラスの符号化および復号化への応用を有するインプレース変換

【課題】インプレース変換を使用する、ソースブロックのFEC符号化変換およびFEC復号化変換を提供する。
【解決手段】メモリ制約を有するコンピューティングデバイスを使用してデータのシンボルを符号化する符号化器において、コンピューティングデバイスのメモリにソースブロックをロードし、ソースブロックのすべてよりは少ない中間変換を実行し、メモリ内でソースブロックの一部を中間結果に置換し、メモリに記憶された出力シンボルが符号化されたシンボルの組を形成するように変換を完了する。復号化器は、インプレース変換によって、受信されたデータおよび復号化されたソースデータの記憶に実質的に同一のメモリを使用することを可能にする順序で復号化ステップを実行する。インプレース変換によって、受信されたデータが復号化されたソースデータに変換される時に、その受信されたデータのためにとっておかれるメモリの大きい部分を上書きする。

【発明の詳細な説明】
【技術分野】
【0001】
[発明の詳細な説明]
関連出願の相互参照
本願は、参照によってその全体が組み込まれている2005年6月10日出願の米国仮出願第60/689,632号の利益を主張し、その非仮出願である。
【0002】
本発明は、全般的にはデータの符号化および復号化に関し、具体的には、大量の追加メモリの使用を必要としない、データの線形変換の計算に関する。
【背景技術】
【0003】
多数のアプリケーションが、以下では”ソースブロック”と称する、データの所与のブロックを変換することによって結果を達成する。本明細書で使用される用語”ソースブロック”は、1つまたは複数のソースで格納される任意のデータを指す。したがって、ファイルサーバまたはコンピュータストレージデバイスからの文書、画像、およびファイルのすべてが、ソースブロックの例である。ソースブロックは、未知のサイズを有するものとすることができ(ストリーミングソースの出力からとられるソースブロックなど)、あるいは、ソースブロックは、既知のサイズを有するものとすることができる(ハードディスクに格納された1メガバイトの画像など)。どの形でも、ソースブロックは、1つまたは複数のソースシンボルのシーケンスであり、各ソースシンボルは、ソースブロック内の位置および値を有する、ソースブロック内の1つのデータである。
【0004】
本明細書では、ソースブロックの変換は、ある結果を達成するためにそのソースブロックに対して実行されるアクションを指す。たとえば、ソースブロックが、カメラなどの外部デバイスによって取り込まれる場合に、1つの可能な変換は、より小さいストレージデバイスでのそのソースブロックの格納を容易にするための、あるいは1つまたは複数の可能な所期の受け取り側へのより高速の伝送を可能にするための、かなりより小さいサイズへのそのソースブロックの圧縮とすることができる。もう1つの例として、ソースブロックを、コンピュータネットワークなどのチャネルまたは破損もしくは消失の見込みがあるチャネルを介して転送されるものと指定することができる。その場合に、そのソースブロックを、伝送エラーに関する堅牢性を高めるために、伝送の前に変換することができる。
【0005】
ソースブロックの変換を必要とする多数のアプリケーションのうちで特に重要なものが、伝送においてこうむるエラーに対するソースブロックの堅牢性を高めるために変換を実行するアプリケーションである。伝送とは、ソースブロックを配送するために1つまたは複数の送信機からチャネルを介して1つまたは複数の受け取り側へソースブロックを送る処理である。1つの送信機が、完全なチャネルによって任意の個数の受け取り側に接続される場合に、受信されるデータは、すべてのデータが正しく受信されるので、オリジナルのソースブロックの正確なコピーとすることができる。しかし、ほとんどの実世界のチャネルについてそうであるようにチャネルが完全ではない場合に、または一部のシステムについてそうであるようにデータが複数の送信機から発する場合に、受信されるものが、正確なコピーではない場合がある。
【0006】
チャネルの不完全性は、データ消去、データ不完全性、またはデータ破損を指す可能性がある。データ伝送という行為は、地理的に離れた位置の間でのデータの伝送だけを指すのではなく、伝送には、データが絶対に物理的には移動されない場合をも含めることができる。たとえば、欠陥の可能性がある記憶媒体に格納されたソースブロックが、伝送の一形態を構成することができる。というのは、そのソースブロックがもう一度アクセスされる時に、データ破損の可能性があるからである。
【0007】
可能な伝送エラーに対するソースブロックの保護の一般的な処理が、符号化の処理である。符号化を用いると、ソースブロックが変換され、あるいは、データの新しい組(時々”冗長”データまたは”リペア”データと呼ばれる)がソースブロックから計算される。変換されたソースブロックは、しばしば、オリジナルのソース符号から計算された冗長情報を含み、内部冗長性を使用して、伝送中にこうむるエラーに関する情報を入手し、そのようなエラーを訂正するという目標を有する。符号を設計し、使用する理論および実践に関する大量の文献がある。
【0008】
符号の選択は、特定のアプリケーションと、その上で伝送が行われる通信チャネルとに依存する。しばしば、選択される符号は、ある線形性特性を有する。たとえば、ソースブロックが、ビットのグループである1つまたは複数のソースシンボルからなる場合に、線形性条件は、2つのソースブロックのシンボルごとの合計(写像)の符号化が、ソースブロックの符号化のシンボルごとの合計(写像)と等しいことを保証するはずである。そのような線形性条件は、符号化処理および復号化処理を記述し、計算するのに非常に有利に使用することができる。実際に使用される符号の大きいサブクラスが、そのような線形性条件を満足する。
【0009】
ソースブロックの符号化につながる変換に対する逆処理が、復号化処理である。この処理では、符号化されたソースブロックの(おそらくは破損された)版が、伝送の前のソースブロックのオリジナルの状態のよい(または、時々、最良の可能な)推定値を得る形で処理される。
【0010】
線形符号化方式の多数の利益のうちの1つが、符号化処理および復号化処理を行列によって説明できるという事実である。行列は、2次元配列の形で要素を含む数学的物体である。当業者に周知の通り、行列は、物体の間、たとえばソースブロックを構成するシンボルの集合の間の線形写像を表すのに便利に使用することができる。
【0011】
しばしば、符号化処理および復号化処理が、中間結果を記憶するのに追加メモリを使用することから利益を得る場合がある。たとえば、一部の復号化処理は、復号化されたソースブロックに加えて、受信されたデータのコピーを保持することを必要とする場合がある。復号化処理および符号化処理に必要な追加メモリの量は、限られたメモリを有するデバイスにおいて多すぎる場合がある。たとえば、デバイスが、携帯電話機または携帯情報端末(PDA)などの移動体受信デバイスである場合に、デバイス上のメモリが少ない場合があり、かつ/またはメモリが、そのデバイスでの実行を意図された他のアプリケーションのために予約されている場合がある。そのような情況では、復号化処理および符号化処理は、メモリを効率的に使用しなければならないが、時々、これを実施するのが難しい。
【発明の概要】
【0012】
本発明の諸態様による復号化器の実施形態では、復号化器は、受信されたデータおよび復号化されたソースブロックの記憶に実質的に同一のメモリを使用し、インプレース変換として実行することを可能にする順番で復号化ステップを実行するようにプログラムされる。インプレース変換を使用することによって、受信されたデータのためのメモリの大きい部分および復号化されたソースデータのためのメモリの類似するサイズの大きい部分を必要とせずに、受信されたデータが復号化されたソースデータに変換される時に、受信されたデータのためにとっておかれるメモリの大きい部分を上書きすることができる。
【0013】
しばしば、インプレース変換の使用は、プロセスがメモリのアクセスにより短い時間を費やすので、特定の処理の実行時間の減少につながり、減らされたメモリ要件を超える利益をもたらす。これは、記憶されるデータの総サイズが大きすぎる場合に、処理ユニットがより低速の二次ストレージデバイスにアクセスすることを強制される可能性があるという問題を防ぐ。
【0014】
本発明の実施形態は、大量の追加メモリの使用を必要としないインプレース線形変換を実行する方法および処理を使用する。これらの方法および処理は、ソースブロックのFEC符号化変換およびFEC復号化変換と共に使用することができる。
【0015】
次の詳細な説明は、添付図面と一緒に、本発明の性質および利点のよりよい理解をもたらす。
【0016】
本明細書のテキストおよび式は、本発明の諸態様を例示するものである。
【図面の簡単な説明】
【0017】
【図1】本発明の実施形態によるFEC符号化を使用する通信システムを示す高水準の図である。
【図2】図1のシステムに類似するが、複数の送信機および受信機を有する通信システムを示す図である。
【図3】送信機および/または受信機を実施するのに使用できるハードウェアの例を示す図である。
【図4】従来のFEC復号化処理を示す図である。
【図5】本発明によるインプレースFEC復号化処理の実施形態を示す図である。
【図6】本発明の実施形態による変換処理を示すフローチャートである。
【図7】組織的リードソロモン符号のインプレース復号化の方法を示すフローチャートである。
【図8】組織的リードソロモン符号のインプレース復号化の方法をさらに示すフローチャートである。
【図9】ベクトル計算の方法を示すフローチャートである。
【図10】ベクトル計算の方法を示すフローチャートである。
【図11】復号化に使用可能な行列を示す図である。
【図12】行列およびその変換を示す図である。
【図13A】処理に使用可能なデータ構造を示す図である。
【図13B】処理に使用可能なデータ構造を示す図である。
【図14】行列およびその変換を示す図である。
【図15A】行列およびその変換を示す図である。
【図15B】行列およびその変換を示す図である。
【図15C】行列およびその変換を示す図である。
【図16】行列およびその変換を示す図である。
【図17】ある方法を示すフローチャートである。
【図18】ある方法を示すフローチャートである。
【図19】ある方法を示すフローチャートである。
【図20】ある方法を示すフローチャートである。
【図21】ある方法を示すフローチャートである。
【図22】ある方法を示すフローチャートである。
【図23】ある方法を示すフローチャートである。
【図24】ある方法を示すフローチャートである。
【発明を実施するための形態】
【0018】
受信されたデータおよび復号化されたソースブロックの記憶に実質的に同一のメモリを使用する処理を、しばしば、インプレース(in-place)変換と称する。しばしば、インプレース変換の使用は、プロセスがメモリのアクセスにより短い時間を費やすので、特定のプロセスの実行時間の減少につながる。これは、特に重要である。というのは、記憶されるデータの総サイズが大きすぎる場合に、処理ユニットがより低速の二次ストレージデバイスにアクセスすることを強制される可能性があるからである。本発明の実施形態は、大量の追加メモリの使用を必要としないインプレース線形変換を実行する方法および処理を使用する。これらの方法および処理は、特に、ソースブロックのFEC(前方エラー訂正)符号化変換およびFEC復号化変換に適用可能である。
【0019】
本発明は、多数のデバイスに適用可能であるが、そのすべてが本明細書で明示的に説明されるわけではない。限定ではなく例に、携帯電話機、コンピュータ、ハンドヘルドコンピューティングデバイス、メディアプレイヤ、通信デバイス、ならびに/あるいはこれらのデバイスを実施するハードウェアおよび/またはソフトウェアが含まれる。
【0020】
概要
送信機110でのFEC符号化および受信機140でのFEC復号化を使用する通信システムの高水準の図を図1に示す。送信機110および受信機140が、広い範囲のデバイスを含むことができることを理解されたい。多くの実施形態で、送信機および受信機は、単一のトランシーバデバイス内に含まれ、複数のそのようなデバイスが、それら自体の間で通信することができる。
【0021】
図1では、送信機110は、FEC符号化器120を含み、FEC符号化器120は、通信チャネル130を介してFEC復号化器150を含む受信機140に送信されるデータに保護を追加するのに使用される。送信機110は、たとえばインターネットプロトコル(IP)パケットまたは他の形のパケットなどのパケット内で、FEC符号化器120によって生成されたデータを送信することができ、このパケットは、各パケット内に、そのパケットがどのように生成されたかおよび/またはそのパケットが送信されるデータのどの部分を表すかを受信機140が判定できるようにする識別する情報を含む。
【0022】
チャネル130は、ネットワークチャネル、無線チャネル、PSTNチャネル、または他のチャネルとすることができる。通常、チャネル130は、その下である条件についてデータが失われる、ある制約を有する。通常、パケットネットワークについて、受信されたパケットの一部が読み取り可能ではない場合に、パケット全体が破棄される。したがって、送信機110から送信されたパケットが、受信機140で受信されないと考えられる状況があり、したがって、そのような消失から回復するための機構が必要である。
【0023】
受信機140は、受信されたパケットのうちで必要な個数をFEC復号化器150に供給し、FEC復号化器150は、データのすべてまたは一部を回復する。FEC(前方エラー訂正)は、エラーが発生した場合にエラー訂正を可能にする、順方向チャネルで前もって提供される機構を提供する。エラーは、必要ではなく、その場合に、FECの労力は、単なるバックアップであり、いくつかの場合には、FECを使用して回復できるものより多数のエラーが発生する場合があり、その場合には、通信が失敗するか、再送信などを要求するサイド通信が発生する。
【0024】
伝送がポイントツーポイントである必要はない。図2に示されているように、1つのシステムが、複数の送信機および複数の受信機を有することができる。図2は、それぞれがFEC符号化器(211)、FEC復号化器(232、242)、またはその両方(222、221)を含む、送信機210、受信機230および240、ならびに送信機/受信機220を含むシステムを示す。図2に示された例では、すべての送信機、送信機/受信機、および受信機が、チャネル250を介して通信することができ、チャネル250には、一体化されたIPネットワーク、ばらばらのネットワークの組合せ、またはネットワークの他の類似する組合せを含めることができる。
【0025】
図3に、送信機および/または受信機を実施するのに使用できるハードウェアの例をより詳細に示す。この図に示されているように、FEC符号化器/復号化器305は、動作を実行するのに使用されるCPU 310、超高速アクセスを有する一時メモリをCPU 310に提供するキャッシュ320、比較的高速のアクセスを有するより大量のメモリをCPU 310に提供するRAM 330、および適度なアクセス速度を有する大量の永久メモリをCPU 310に提供するディスク340を含む。
【0026】
この実施形態の多数の他の変形形態が可能である。たとえば、キャッシュ320を、CPUによる処理の準備をするために他のメモリデバイスからデータをプリロードするためすなわち直接メモリアクセス(DMA)動作のために、オペレーティングシステム(OS)によって制御される部分と、FEC符号化/復号化処理の制御の下の部分とに区分することができる。他の例として、複数のレベルキャッシュを設けることができ、フラッシュなどの他のタイプのストレージデバイスを設けることができ、ストレージタイプの一部、たとえばディスクストレージをなくすことができる。
【0027】
より一般的に、メモリを有するコンピューティングデバイスは、しばしば、さまざまな種別のメモリを有する。一部の種別のメモリは、より近いメモリがプロセッサに物理的により近いかより高速の応答レートを有することができるという点で他の種別より”近い”と考えられ、これは、プロセッサが”近い”メモリを遠くのより長いリードを必要とするすなわちより低速のメモリより高速に読み取り、かつ/または書き込むことを可能にする。より一般的に言っても、ある種別のメモリは、待ち時間、応答レート、メモリの位置を読み取り/書き込むのに必要なエネルギの量、メモリ内の情報を維持するエネルギの量、ビットあたりのコスト、および他の考慮事項のゆえに、別の種別のメモリより好ましいものとすることができる。メモリの種別は、通常、好ましさによって順序付けることができ、最高速の最も強力で効率的なメモリが、好ましい。通常、工学的制約および設計制約が、複数の種別のメモリの使用を命ずる場合がある。たとえば、永続ストレージが可能ではないことからRAMキャッシュメモリだけが求められることはなく、プロセッサアクセスが低速なのでディスクメモリだけが求められることはない。
【0028】
上で説明したように、あるデバイスが、複数の種別のメモリを有することができ、これらの種別は、好ましさによって順序付けられる。最も好ましいメモリが、特定の計算動作の結果を含むのに十分に大きくはない場合に、より好ましくない種別のメモリへのスワップアウトなど、メモリ管理が必要になる場合がある。そのような動作は、特にある種のデバイスおよびある種の動作において、待ち時間、計算コスト、電力使用量に関するオーバーヘッドを追加し、したがって、効率的なインプレース変換に関して本明細書で説明される方法および装置は、デバイスの動作に対する大きい利益をもたらす。
【0029】
図3の図示では、FEC符号化器/復号化器305は、さまざまなメモリユニットを制御することができ、FEC符号化器/復号化器305を使用しているアプリケーションの制御の下の他の部分がある場合がある。したがって、たとえば、FEC符号化を実行する時に、アプリケーションが、符号化されるソースブロックのそれ自体のコピーを制御する場合があり、FEC符号化器が、別々のメモリ位置に、アプリケーションによってそのFEC符号化器に渡されたソースブロックのそれ自体のコピーを有する場合がある。
【0030】
この例では、アプリケーションによって使用される他のメモリにかかわりなく、FEC符号化器によって使用されるメモリを最小化することが重要である可能性があり、また、この例では、FEC符号化器が、ソースブロックのリペアシンボルの計算中にソースブロックの一部またはすべてを上書きできる可能性もある。というのは、アプリケーションが、ソースブロックのそれ自体の別々のコピーを有するからであり、かつ/またはアプリケーションが、ソースブロックの一部を既にチャネルに送信済みであり、ソースブロックのその部分のコピーを保持することをもやや必要としない場合があるからである。もう1つの例として、一般に、FEC復号化中には、符号シンボルのコピーがソースブロックのオリジナルのソースシンボルを回復するのに使用されたならば、その符号シンボルのコピーを維持することは、重要ではない。
【0031】
図4に、メモリ420に記憶される受信された符号シンボル440からソースシンボル430のソースブロックを生成するのにCPU 405を使用することができる従来のFEC復号化処理410(おそらくはプログラムコードとして実施される)を示すが、メモリ420は、図3に示されたタイプまたは他のタイプを含むことができる。図示されているように、シンボル記憶のためにFEC復号化処理410が必要とするメモリの量は、通常、ソースブロックの総サイズと符号シンボルの総サイズとの合計である。類似するコメントが、従来のFEC符号化処理にあてはまる。
【0032】
図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符号化処理にあてはまる。
【0033】
後続セクションでは、図5に示された利点を実現する方法および処理を紹介する。具体的に言うと、線形符号として表すことができるFEC符号用のインプレースFEC符号化処理およびインプレースFEC復号化処理を紹介する。
【0034】
線形演算子
例の実施形態をさらに示すために、環という数学的概念を利用する。次の説明では、さまざまな数学的な処理およびステップを、ハードウェアの動作、プログラム命令の実行、または類似物によって、コンピューティング/通信デバイスによって実行できることを理解されたい。
【0035】
当業者に周知の通り、環は、2つの演算すなわち加算および乗算が定義され、これらの演算が分配法則を満足するようになっている集合である。さらに、加算だけについて検討される集合は、アーベル群を形成する、すなわち、加算の結果は、被加数の順序付けと独立であり、加算の単位元0があり、要素ごとに、その要素との和が0になるもう1つの要素がある。他の要件は、乗算が単位元1を有し、1との任意の要素の乗算が、その要素の値を変更しないようになっていることである。一般的な環について、非0要素が逆数を有することは要求されず、乗算が可換であることも要求されない。しかし、これらの条件の両方が満足されるときに、その環を”体”と呼ぶ。この表記法は、代数の分野で標準的な表記法である。
【0036】
本明細書で使用される時に、”シンボル”は、通常はソースブロックより小さい1つのデータを指す。シンボルのサイズは、しばしば、ビット単位で測定され、シンボルは、Mビットのサイズを有し、シンボルは、2M個のシンボルのアルファベットから選択される。たとえば、パケットネットワークを介する情報の信頼できる伝送のアプリケーションにおいて、シンボルのサイズを、パケットサイズと等しいものとするか、それより小さいものとすることができ、その結果、各パケットが、1つまたは複数のシンボルを含むようになる。
【数1】

【数2】

【0037】
シンボルに作用する環または体の例は、豊富にある。少数の例に、下で言及する。この例のリストは、例示のみを意図されており、網羅的なリストと考えてはならず、本発明の範囲を限定するものと解釈してもならない。
【0038】
0および1からなり、排他的論理和(XOR)である加算および論理演算ANDである乗算を有する体GF(2)は、1*S=Sおよび0*S=0を定義することによってシンボルの集合に作用し、ここで、Sは、任意のシンボルを表し、0は、完全に0からなるシンボルを表す。
【0039】
体GF(4)は、4つの要素0、1、2、3からなり、ここで、加算は、整数の通常のXORであり、乗算は、表1を介して定義される。
【表1】

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

【0041】
これが実際に有効な演算であることを、すばやく検証することができる。同一の体のもう1つの演算を、2ビットを有するシンボルに対して定義することができる。これらのシンボルを整数0、1、2、および3を用いて識別することによって、この体の乗算の表が、2ビットシンボルの場合に上で定義された演算と一致する演算を記述することがわかる。
【0042】
より一般的に、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のいわゆる”正則表現”を使用する。
【0043】
”線形変換”という概念は、シンボルの環の演算という概念を参照して定義することができる。所与の整数mおよびnについて、この演算によって導入される線形変換は、指定された環に含まれる要素を有する行列の空間を使用して、n個のシンボルのベクトルをm個のシンボルのベクトルに写像する。環R上の行列は、その要素がRに属する、要素の2次元集合である。ある行列が、m行n列を有する場合に、その行列を、一般にm×n行列と称する。ペア(m,n)を、その行列の”フォーマット”と呼ぶ。同一のフォーマットの行列は、基礎になる体または環の加算および減算を使用して、加算し、減算することができる。フォーマット(m,n)の行列は、一般に知られているとおり、フォーマット(n,k)の行列と乗算することができ、フォーマット(m,k)の行列を作る。
【0044】
Bがそのような行列を表し、B[j,k]が、位置(j,k)のBの要素を表し、この行列がベクトル(S[1],S[2],...,S[n])を変換し、(X[1],X[2],...,X[m])が変換されたベクトルを表す場合に、次の関係が有効である。

【数4】

【数5】

【0045】
そのような線形変換は、さまざまなアプリケーションで平凡である。たとえば、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”に記載されている。
【0046】
多くのアプリケーションで、上のベクトルXは、Sを記憶するのに使用されるメモリを実質的に超えるメモリを使用せずに、Sから計算される必要がある場合がある。たとえば、シンボルがそれぞれ512バイトであり、m=n=1024である場合に、SおよびXは、それぞれ512キロバイトのサイズを有する。変換が、600キロバイトのメモリを有するデバイスで実施される場合に、追加メモリを使用せずにSとXとの両方を同時に保持するのに十分なメモリはないはずである。
【0047】
そのような状況では、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のメモリ位置にコピーされる解決策は、不適当な解決策になるはずである。
【0048】
インプレース線形変換
これから、インプレース線形変換について処理を説明する。Bが、フォーマット(m,n)を有する行列であり、Sが、n個のシンボルの列ベクトルであるものとする。BおよびSを与えられて、次のように、B↓Sすなわち下向きでのBによるSのインプレース線形行列変換を定義する。
【0049】
すべてのi=1,2,...,mについて
S[i]をBの第i行と現在のSとの内積に置換する。
【0050】
このインプレース演算を計算する処理を、図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を
【数6】

【0051】
Bが、フォーマット(m,n)を有する行列であり、Sが、n個のシンボルの列ベクトルであるものとする。BおよびSを与えられて、次のように、B↑Sすなわち上向きでのBによるSのインプレース線形行列変換を定義する。
【0052】
すべてのi=m,m−1,...,1について
S[i]をBの第i行と現在のSとの内積に置換する。
【0053】
このインプレース演算を計算する処理を、図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を
【数7】

【数8】

【数9】

【数10】

【0054】
Bに必要なストレージをも最小化し、演算を計算するのに必要な全体的な計算を最小化するのに使用できる多数の技法があるが、一般に、これは、変換されるデータに必要なメモリより少ないメモリである。たとえば、Bが疎な行列である時に、Bの疎な表現が可能であり、この疎な表現は、すべての演算を実行するのに必要な全体的計算を最小化することもできる。たとえば、Bが疎な行列である時に、順次検索より効率的な、Bの特定の行または列内の次の非0要素を見つける形がある。このタイプの最適化は、本明細書で説明する技法と共に適用できる他の最適化と一緒に、この開示を読んだ後に当業者に明白になるに違いない。
【0055】
2.1.順列行列
この事例では、Bは、フォーマット(n,n)の順列行列である、すなわち、Bは、各行および各列に正確に1つの非0要素を有し、その非0要素は1である。この行列は疎なので、すなわち、非0である非常に少数の要素を有するので、多くのアプリケーションで、これを行列ではなくリスト(または行列より少ないメモリを使用する別のオブジェクト)として表すことが望ましい。たとえば、Bをリスト(B[1],...,B[n])として表すことができ、ここで、(j,B[j])は、Bの非0要素の位置である。
【0056】
Bを用いるSの変換の処理を、これから図8を参照して説明する。2進ベクトルv[1],...,v[n]が維持され、ここで、すべての成分が、最初に0に初期化される。この処理は、Tによって表される追加のシンボルを使用する。最初に、Tの値はすべて0である。
【0057】
ステップ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つずつ見つけ、処理する。
【0058】
多くの場合に、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、メモリ帯域幅、および他のリソースに関してよりコストが低いであるからである。
【0059】
単項行列(Monomial Matrix)
この場合に、Bは、すべての行およびすべての列に正確に1つの非0要素を有する、フォーマット(n,n)の行列である。順列行列は、単項行列の特殊事例である。単項行列のインプレース変換を計算する処理を、これから図9を参照して説明する。そのような行列は、リスト(B[1],...,B[n];α[1],...,α[n])によって簡潔に記述することができ、ここで、jのすべての関連する値について、B[j]は、Bの行jの非0要素の位置であり、α[j]は、その非0位置の値である。
【数11】

【数12】

【数13】

【0060】

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

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

【数16】

【0062】
本明細書で説明する処理が、非常に一般的であるが、重要なすべての場合において最も効率的な処理ではない場合があることに留意されたい。インプレース変換をこの一般的な事例より効率的に達成できる他の事例を、下で説明する。
【0063】
非正方行列
フォーマット(m,n)の行列Bが正方行列ではない場合に、上で説明したものに似た方法を利用して、メモリの量を最小化する形で変換を計算することができる。たとえば、行列が、列より多数の行を有する(すなわち、mがnより大きい)場合に、結果のベクトルの最初のn個の要素をインプレースで計算することだけが重要である。これは、次のように達成することができる。
【数17】

【数18】

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

【0065】
M’が、図12に示されているようにMから導出されるフォーマット(n,n)の正方行列であるものとする。図12では、LおよびBは、図11に示されたLおよびBと同一の行列であり、最後のn−m個の列および最初のm個の行によって形成される行列のすべての要素は、0であり、最後のn−m個の列および最後のn−m個の行によって形成される行列は、恒等行列である。M’が、可逆下三角行列であることに留意されたい。図12には、M’の逆行列であるM’−1の形も示されている。
【0066】
Dが、図13Aに示された、フォーマット(n,n−m)の行列であるものとする。図13Aでは、AおよびCが、図11に示されたものと同一の行列AおよびCである。行列Dは、n個のシンボルの列ベクトルとみなすこともでき、各シンボルは、基礎になる体Kからのn−m個の体要素の連結である。したがって、今説明したようにDをn個のシンボルの列ベクトルとみなす時には、Dに対するフォーマット(n,n)の行列の演算を定義することができ、n個のシンボルのベクトルとみなされるDに対する行列の演算は、その行列と、行列とみなされる時のDとの行列乗算と同一である。
【数20】

【0067】
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の形も示されている。
【0068】
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’が、可逆行列であることに留意されたい。
【数21】

【数22】

【0069】
図17で説明した処理の終りに、ベクトルSに、MにオリジナルのベクトルSを乗じた結果が格納されていることを検証することができる。この処理のどの点でも、シンボルに使用されるストレージが、多くともn+1であり、すべてのステップにまたがって集計されたシンボル演算の回数が、Mの非0要素の個数と(n−m)との合計で線形であることに留意されたい。
【0070】
さらなる効率および利点につなげることのできる、図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による乗算は、たとえば、この開示で説明されるインプレース変換または標準行列乗算などの標準技法のいずれかを使用して実行することができる。
【数23】

【数24】

【数25】

【0071】
図19で説明した処理の終りに、ベクトルSに、M−1にオリジナルのベクトルSを乗じた結果が格納されていることを検証することができる。この処理のどの点でも、シンボルに使用されるストレージが、多くともn+1であり、すべてのステップにまたがって集計されたシンボル演算の回数が、Mの非0要素の個数と(n−m)との合計で線形であることに留意されたい。
【0072】
上で図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より実質的に少ない。
【0073】
アプリケーション
リードソロモン符号
消去または破損の場合に伝送を保護する、ある線形符号クラスが、リードソロモン符号として知られている。循環符号、バンデルモンド行列に基づく符号、コーシー行列に基づく符号、または類似物など、この符号を記述する複数の同等の形がある。これらの場合のすべてで、符号化処理を、行列とのシンボルのベクトルの乗算によって記述することができる。ソースシンボルの個数がkであり、出力シンボルの個数がnであり、vが符号化されるk個のシンボルの列ベクトルを表し、wがvの符号化を含むn個のシンボルの列ベクトルを表す場合に、この符号化処理を、
【数26】

【0074】
M’が、Mの最初のk個の行を含むフォーマット(k,k)の行列を識別し、M”が、Mの最後のr=n−k個の行を含むフォーマット(r,k)の行列を識別するものとする。w’が、wの最初のk個のシンボルを識別し、w”が、wの最後のr個のシンボルを識別するものとする。
【0075】
符号が組織的である、すなわち、Mによるvの行列乗算の後に結果w’の最初のk個のシンボルがvの要素と一致する場合に、M’は恒等行列である。組織的符号では、符号化されたベクトルw’の要素を、ソース位置と称する。その場合に、M”は、r個の冗長なシンボルw”を計算するのに使用される。行列Mは、さまざまな形で表すことができる。たとえば、非組織的な版が望まれる場合に、Mをバンデルモンド行列とすることができる。組織的な場合に、M”が、コーシー行列を形成することができる。これらの表現は、例示のみのために言及されたものであり、決して網羅的なリストを形成するものではない。
【0076】
リードソロモン符号が非組織的である時に、図20を参照して説明する処理は、その処理中に多くともn+1個のシンボルのストレージを使用する符号化を作るインプレース変換を記述する。当初に、w’は、符号化されるk個のシンボルを記憶する。この処理の終りに、wは、符号化の結果を記憶する、すなわち、w’が、最初のk個の符号シンボルを記憶し、w”が、生成された残りのr個の符号シンボルを記憶する。図20のステップ2010で、単純な行列乗算、たとえば前に説明した”単純変換処理”を使用して、w”を
【数27】

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

【0078】
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で、インプレース変換
【数29】

【0079】
次では、上で説明した一般的なインプレース変換方法の、組織的リードソロモン符号のインプレース復号化の問題への例示的適用を説明する。開示される方法は、この開示を読んだ後に、当業者によって、非組織的な版などのリードソロモン復号化の他の事例に簡単に一般化することができる。
【0080】
組織的リードソロモン符号のインプレース復号化の方法を、これから図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]]を更新する。
【0081】
図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の処理を使用して、インプレース変換
【数30】

【0082】
図23を参照して説明した全体的なインプレース変換は、処理中に多くともk+1個のシンボルのストレージを使用する。
【0083】
本明細書でリードソロモン符号について説明した処理は、例示のみを目的とし、本発明の範囲を限定することは意図されていない。より一般的に、非常に似た方法を、代数幾何符号(略してAG符号)、BCH符号、または生成行列が明示的に知られている任意の他の符号クラスなど、類似する符号クラスのインプレース復号化に適用することができる。
【0084】
一般化リピートアキュミュレート(GRA)符号
一般に、これは、組織的符号であり、kは、ソースシンボルの個数であり、rは、冗長シンボルの個数であり、したがって、n=k+rが、この符号化のシンボルの総数である。この場合に、r個の冗長シンボルの列ベクトルzは、k個のソースシンボルの列ベクトルvから、次のように構成される。フォーマット(r,k)の行列Aを選択し、疎な上三角行列または疎な下三角行列である、フォーマット(r,r)のもう1つの行列Uを選択する。この例の説明について、Uは、上三角行列として任意に選択される。すると、
【数31】

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

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

【0088】
連鎖符号のインプレース復号化
連鎖符号が、米国特許第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”で開示された復号化器では、復号化処理が、
【数34】

【0089】
冗長シンボルの個数rが、連鎖符号のいくつかの実施形態について0であり、他の実施形態について、冗長シンボルの個数rが0より大きいことに留意されたい。Tの行は、動的な出力シンボルおよび冗長(プレコーディング(pre-coding))シンボルに対応し、xは、ソースシンボルおよび冗長(プレコーディング)シンボルを含む、それについて解く必要がある当初に未知の値を有するn個のシンボルのベクトルであり、zは、受信されたシンボルおよびプレコード(pre-code)のチェックシンボルを含む既知の値を有するs個のシンボルのベクトルである。いくつかのアプリケーションでは、チェックシンボルが0の値を有するが、他のアプリケーションでは、この値が0と異なる場合がある。チェックシンボル値がどのようにセットされるかにかかわりなく、チェックシンボル値は、符号化器と復号化器との間の以前の通信を介してまたは他のステップによってのいずれかで復号化器に知られる。
【0090】
”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を回復するという問題は、
【数35】

【数36】

【0091】
説明したばかりの実施形態に対する多数の変形形態がある。たとえば、第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に示されたステップの残りを適当な順序で適用して、インプレース変換処理を完了することができる。
【0092】
当業者が認めるとおり、説明したばかりの2つの実施形態に対する多数の変形形態がある。たとえば、図19を参照して説明した処理の変形形態を、この2つの実施形態に適用することもできる。
【0093】
連鎖符号のインプレース組織的符号化
Shokrollahi他が出願した米国特許出願第10/677,624号、名称”Systematic Encoding and Decoding of Chain Reaction Codes”(以下では”ShokrollahiI”)に、連鎖符号、具体的にはマルチステージ連鎖符号の組織的符号化の方法が記載されている。この方法では、ソースシンボルが、まず、線形変換を使用して中間シンボルの組に変換される。この変換は、
【数37】

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

【0096】
インプレース変換処理を使用して、受信された出力シンボルから中間シンボルを計算する、上で説明した実施形態と、インプレース変換処理を使用して、回復された入力シンボルからソースシンボルを計算する、上で説明した実施形態とを組み合わせて、インプレース変換を使用して、受信された出力シンボルからソースシンボルを計算する全体的な実施形態を提供することができ、ここで、そのような2つの処理の組合せによって使用される、シンボルのストレージは、多くとも、各処理が個別に使用するシンボルのストレージである。
【0097】
上の説明は、説明だけを目的とし、本発明の範囲を限定することは意図されていない。多数の同等の版および方法が、本開示を読んだ時に可能である。たとえば、上の方法において、ステップ2での行列DのLU分解の計算を、オフラインで行うことができる。
【0098】
ここまでで説明したように、線形変換演算を構成する新規のメモリ効率のよい手法が教示される。本明細書で示された例では、線形変換処理が、複数の出力要素を導出するために複数の入力要素に線形変換を適用する処理である。本明細書で説明する処理では、メモリは、線形変換処理に使用可能な入力要素を記憶するために割り振られ、そのメモリの少なくとも一部は、導出された出力要素を記憶するために再利用される。そのような手法を使用すると、複数の入力要素を保持するのに十分に大きいメモリおよび複数の出力要素を保持するのに十分に大きいメモリを必要とするのではなく、その複数の入力要素および複数の出力要素のうちの大きい方(必要な場合にはそれに加えて多少のオーバーヘッド)を保持するのに十分なメモリ役に立ち、貴重なメモリ空間が節約される。
【0099】
本明細書で説明した技法は、FEC符号化またはFEC復号化、消去符号化または消去復号化、エラー訂正、あるいは類似物のための変換など、さまざまな線形変換に使用することができる。FEC符号は、リードソロモン符号、連鎖符号、マルチステージ連鎖符号、または任意の他の線形符号などの符号を用いることができる。この変換を実行する論理は、入力要素を読み取って出力要素を生成し、使い果たされた入力要素のためのメモリを、生成された出力要素(または中間要素(この中間要素が、次に、使い果たされる可能性がある))を記憶するために再利用することができる。
【0100】
本発明を、例示的実施形態に関して説明してきたが、当業者は、多数の変更が可能であることを認めるであろう。たとえば、本明細書で説明した処理は、ハードウェア構成要素、ソフトウェア構成要素、および/またはその任意の組合せを使用して実施することができる。したがって、本発明を、例示的実施形態に関して説明したが、本発明が、添付の特許請求の範囲の範囲に含まれるすべての修正形態および同等物を含むことが意図されていることを了解されたい。

【特許請求の範囲】
【請求項1】
複数のソースシンボルとして整列されたデータを複数の符号化シンボルに符号化する符号化器において、ソースシンボルから符号化シンボルへの変換を実行する方法であって、
ここで、k個のソースシンボルはn個の符号化シンボルに変換され、該方法は、
第1のメモリに格納された前記k個のソースシンボルにアクセスするステップと、
出力シンボルの中間セットを提供するため、前記k個のソースシンボルの行列演算を計算する第1の変換段階を実行するステップであって、少なくとも前記中間セットのいくつかは前記n個の符号化シンボルのいくつかを含む、ステップと、
出力シンボルの前記中間セットを前記第1のメモリに格納し、前記k個のソースシンボルの少なくともいくつかを置換するステップであって、前記中間セット内の出力シンボルの個数は前記nより少ない、ステップと、
前記第1のメモリが少なくとも前記n個の符号化シンボルと前記k個の全てよりは少ないソースシンボルとを含むようになるまで、実行する前記ステップと格納する前記ステップとを繰り返すステップと、
を含み、
前記k個のソースシンボルから生成された前記n個の符号化シンボルはエラー訂正で使用されることを特徴とする方法。
【請求項2】
変換処理において、前記第1のメモリ内のシンボルの最大数はn+1およびk+1のうち大きい方より大きくはないことを特徴とする請求項1に記載の方法。
【請求項3】
変換処理において、前記第1のメモリ内のシンボルの最大数はk+nよりもn+1およびk+1のうち大きい方により近いことを特徴とする請求項1に記載の方法。
【請求項4】
nはkと等しくないことを特徴とする請求項1に記載の方法。
【請求項5】
nはkと等しいことを特徴とする請求項1に記載の方法。
【請求項6】
前記変換は、リードソロモン符号を表すことを特徴とする請求項1に記載の方法。
【請求項7】
前記変換は、GRA符号を表すことを特徴とする請求項1に記載の方法。
【請求項8】
前記変換は、連鎖反応符号を表すことを特徴とする請求項1に記載の方法。
【請求項9】
前記変換は、LDPC符号を表すことを特徴とする請求項1に記載の方法。
【請求項10】
前記変換に使用されるシンボル演算の数は、前記行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項1に記載の方法。
【請求項11】
前記変換に使用されるシンボル演算の数は、前記行列の逆行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項1に記載の方法。
【請求項12】
前記行列は、インプレース符号化が可能な符号化行列の分解を含むことを特徴とする請求項1に記載の方法。
【請求項13】
前記行列は、効率的なインプレース符号化が可能な符号を表すことを特徴とする請求項1に記載の方法。
【請求項14】
複数の符号化ソースシンボルとして整列されたデータを複数の復号化シンボルに復号化する復号化器において、前記符号化シンボルから前記復号化シンボルへの変換を実行する方法であって、ここで、r個の符号化シンボルはd個の復号化シンボルに変換され、該方法は、
第1のメモリに格納された前記r個の符号化シンボルにアクセスするステップであって、該r個の符号化シンボルはk個のソースシンボルからエラー訂正での使用のために生成される、ステップと、
行列演算を計算する第1の変換段階を実行するステップであって、該演算は符号化行列の逆行列であり、出力シンボルの中間セットを提供するため前記r個の符号化シンボルに対し演算し、少なくとも前記中間セットのいくつかは前記d個の復号化シンボルのいくつかを含む、ステップと、
出力シンボルの前記中間セットを前記第1のメモリに格納し、前記r個の符号化シンボルの少なくともいくつかを置換するステップであって、前記中間セット内の出力シンボルの個数は前記dより少ない、ステップと、
前記第1のメモリが少なくとも前記d個の復号化シンボルと前記r個の全てよりは少ない符号化シンボルとを含むようになるまで、実行する前記ステップと格納する前記ステップとを繰り返すステップと、
を含むことを特徴とする方法。
【請求項15】
変換処理において、前記第1のメモリ内のシンボルの最大数はr+1およびd+1のうち大きい方より大きくはないことを特徴とする請求項14に記載の方法。
【請求項16】
変換処理において、前記第1のメモリ内のシンボルの最大数はr+dよりもr+1およびd+1のうち大きい方により近いことを特徴とする請求項14に記載の方法。
【請求項17】
rはdと等しくないことを特徴とする請求項14に記載の方法。
【請求項18】
rはdと等しいことを特徴とする請求項14に記載の方法。
【請求項19】
前記変換は、リードソロモン復号を表すことを特徴とする請求項14に記載の方法。
【請求項20】
前記変換は、GRA復号を表すことを特徴とする請求項14に記載の方法。
【請求項21】
前記変換は、連鎖反応復号を表すことを特徴とする請求項14に記載の方法。
【請求項22】
前記変換は、LDPC復号を表すことを特徴とする請求項14に記載の方法。
【請求項23】
前記変換に使用されるシンボル演算の数は、前記行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項14に記載の方法。
【請求項24】
前記変換に使用されるシンボル演算の数は、前記行列の逆行列の非ゼロ要素の個数にほぼ比例することを特徴とする請求項14に記載の方法。
【請求項25】
前記行列は、インプレース復号化が可能な復号化行列の分解を含むことを特徴とする請求項14に記載の方法。
【請求項26】
前記行列は、効率的なインプレース復号化が可能な符号を表すことを特徴とする請求項14に記載の方法。
【請求項27】
通信システムであって、複数の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個の受信シンボルの付加的なシンボルを置換する、フローロジックと、
を含むことを特徴とする通信システム。
【請求項28】
前記ロジックは、プログラム可能プロセッサにより実行されるプログラムコード命令を含むことを特徴とする請求項27に記載の通信システム。
【請求項29】
前記ロジックは、ハードウェア回路を含むことを特徴とする請求項27に記載の通信システム。
【請求項30】
前記ロジックは、部分的にプログラム可能プロセッサにより実行されるプログラムコード命令を含み、部分的にハードウェア回路を含むことを特徴とする請求項27に記載の通信システム。
【請求項31】
前記復号化行列は、少なくとも前記受信シンボルにより定義される前記符号化行列の一部の逆行列であり、前記符号化行列の一部により乗算された前記復号化行列が単位行列となることを特徴とする請求項27に記載の通信システム。
【請求項32】
前記受信機は、移動電話受信機であることを特徴とする請求項27に記載の通信システム。
【請求項33】
前記受信機は、自動車での使用に適したものであることを特徴とする請求項27に記載の通信システム。
【請求項34】
前記送信機は、移動電話送信機であることを特徴とする請求項27に記載の通信システム。
【請求項35】
前記送信機は、自動車での使用に適したものであることを特徴とする請求項27に記載の通信システム。
【請求項36】
前記送信機はデジタルメディア送信機であり、前記受信機はデジタルメディア受信機であることを特徴とする請求項27に記載の通信システム。
【請求項37】
前記エラー訂正は、消去訂正であることを特徴とする請求項1に記載の方法。
【請求項38】
前記エラー訂正は、消去訂正であることを特徴とする請求項14に記載の方法。
【請求項39】
前記エラー訂正は、消去訂正であることを特徴とする請求項27に記載の通信システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13A】
image rotate

【図13B】
image rotate

【図14】
image rotate

【図15A】
image rotate

【図15B】
image rotate

【図15C】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate


【公開番号】特開2012−249305(P2012−249305A)
【公開日】平成24年12月13日(2012.12.13)
【国際特許分類】
【外国語出願】
【出願番号】特願2012−155062(P2012−155062)
【出願日】平成24年7月10日(2012.7.10)
【分割の表示】特願2008−516032(P2008−516032)の分割
【原出願日】平成18年6月12日(2006.6.12)
【出願人】(501114844)デジタル ファウンテン, インコーポレイテッド (25)
【Fターム(参考)】