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