(57)【特許請求の範囲】
【請求項１】
コンピュータに、
符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順、
前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順、
前記置換手順で処理された前記符号化データをパケットに格納するパケット格納手順、
を実行させ、
前記符号化手順では、前記符号化対象データを所定ビット数ごとに分割した分割データのそれぞれと、前記符号化用ビット列から同一ビット数のビット列を切り出して得られる複数の前記単位ビット列のそれぞれとを組み合わせて演算処理を行い、前記各演算処理による演算結果と、前記演算処理の際に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかである単位ビット列情報とを含む符号化データを生成し、
前記置換手順では、前記符号化データのうち、一の前記単位ビット列と一以上の前記分割データとを用いて演算された前記演算結果が格納された演算結果領域と、当該演算結果領域に対応する前記単位ビット列情報とを含むデータ領域ごとに、前記符号化データの一部分と一致するビット列を前記符号化用ビット列から探索し、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と前記位置情報とを組み合わせたビット列に置換し、
前記パケット格納手順では、前記置換手順で処理された前記符号化データを、前記データ領域ごとに１つの送信パケットに格納する、
データ符号化プログラム。
【請求項２】
前記置換手順では、前記符号化用ビット列から一致するビット列が探索されない前記符号化データの範囲に、前記開始符号と同じビット列が含まれていた場合には、当該ビット列を異なるビット列である識別符号に置換する、
請求項１記載のデータ符号化プログラム。
【請求項３】
前記置換手順では、前記符号化用ビット列から探索する、前記符号化データの一部分と一致するビット列のビット数を可変とし、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と、前記位置情報と、探索されたビット列の長さを示す長さ情報とを組み合わせたビット列に置換する、
請求項１または２記載のデータ符号化プログラム。
【請求項４】
前記符号化手順では、それぞれｍビットのｎ個の前記単位ビット列（ただし、ｍは１以上の整数であり、ｎはｍ以上の整数）のうち一の単位ビット列における各桁を、前記符号化対象データを分割した分割データをｍ個ごとに選択した分割データ群のうち一の分割データ群に含まれる前記分割データのそれぞれに対応付け、前記一の単位ビット列におけるビット１の位置に対応する前記分割データを選択して、選択した前記分割データの排他的論理和である排他的論理和データを前記演算結果として算出し、ｎ個の前記単位ビット列とすべての前記分割データ群との組み合わせごとに算出された前記排他的論理和データと、前記排他的論理和データの演算に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかである前記単位ビット列情報とを含む前記符号化データを出力する、
請求項１〜３のいずれか１項に記載のデータ符号化プログラム。
【請求項５】
コンピュータに、
パケットにより受信した受信データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記受信データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順、
置換後の前記受信データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順であって、前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかを含む単位ビット列情報を、置換後の前記受信データから抽出するとともに、前記符号化対象データを所定ビット数ごとに分割した分割データと前記単位ビット列とを基に符号化処理時に演算された演算結果を、置換後の前記受信データから抽出し、複数の前記単位ビット列情報に基づく複数の前記単位ビット列、および、当該複数の単位ビット列と前記分割データのうち同じ分割データとを基に演算された複数の前記演算結果を用いて演算処理を行うことで、前記同じ分割データを復元する復号化手順、
を実行させ、
前記置換手順は、受信したパケットごとに実行され、
前記復号化手順では、受信したパケットそれぞれから得られた置換後の前記受信データから、前記単位ビット列情報と前記演算結果とを一組ずつ抽出する、
データ復号化プログラム。
【請求項６】
前記置換手順では、前記受信データから、前記開始符号とは異なる所定のビット列である識別符号を検出すると、前記識別符号を前記開始符号と同じビット列に置換する、
請求項５記載のデータ復号化プログラム。
【請求項７】
データ符号化装置が、符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順と、
前記データ符号化装置が、前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順と、
前記データ符号化装置が、前記置換手順で処理された前記符号化データをパケットに格納するパケット格納手順と、
を有し、
前記符号化手順では、前記符号化対象データを所定ビット数ごとに分割した分割データのそれぞれと、前記符号化用ビット列から同一ビット数のビット列を切り出して得られる複数の前記単位ビット列のそれぞれとを組み合わせて演算処理を行い、前記各演算処理による演算結果と、前記演算処理の際に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかである単位ビット列情報とを含む符号化データを生成し、
前記置換手順では、前記符号化データのうち、一の前記単位ビット列と一以上の前記分割データとを用いて演算された前記演算結果が格納された演算結果領域と、当該演算結果領域に対応する前記単位ビット列情報とを含むデータ領域ごとに、前記符号化データの一部分と一致するビット列を前記符号化用ビット列から探索し、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と前記位置情報とを組み合わせたビット列に置換し、
前記パケット格納手順では、前記置換手順で処理された前記符号化データを、前記データ領域ごとに１つの送信パケットに格納する、
データ符号化方法。
【請求項８】
データ復号化装置が、パケットにより受信した受信データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記受信データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順と、
前記データ復号化装置が、置換後の前記受信データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順であって、前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかを含む単位ビット列情報を、置換後の前記受信データから抽出するとともに、前記符号化対象データを所定ビット数ごとに分割した分割データと前記単位ビット列とを基に符号化処理時に演算された演算結果を、置換後の前記受信データから抽出し、複数の前記単位ビット列情報に基づく複数の前記単位ビット列、および、当該複数の単位ビット列と前記分割データのうち同じ分割データとを基に演算された複数の前記演算結果を用いて演算処理を行うことで、前記同じ分割データを復元する復号化手順と、
を有し、
前記置換手順は、受信したパケットごとに実行され、
前記復号化手順では、受信したパケットそれぞれから得られた置換後の前記受信データから、前記単位ビット列情報と前記演算結果とを一組ずつ抽出する、
データ復号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ符号化プログラムとその方法、および、データ復号化プログラムとその方法に関する。
【背景技術】
【０００２】
ネットワークを通じたファイル送信を高速化する１つの方法として、送信前にファイルを圧縮する方法がある。仮に、送信するファイルのサイズが圧縮により半分になれば、送信に要する時間も半分になるため、結果として送信速度を２倍にすることができる。
【０００３】
一般的なファイル圧縮の方式としては、例えば、ＺＩＰ圧縮などが知られている。しかし、ＺＩＰ圧縮などの一般的なファイル圧縮方式は、ファイルの規則性を利用して圧縮を行っている。このため、静止画像や動画像などの規則性の少ないデータを圧縮した場合に、圧縮率が低くなることが多く、送信前に圧縮を行ってもファイルサイズが小さくならないことが多い。
【０００４】
また、ファイル送信を高速化する他の方法としては、例えば、ファイルを受信側でキャッシュしておく方法がある。この場合、送信側で同じデータの送信が発生した場合には、実データを送信しないようにすることで、ネットワークのトラフィックを軽減できる。さらに他の方法としては、例えば、前回送信したファイルとの差分データのみを送信側から送信し、受信側では前回受信したファイルと新たに受信した差分データとから送信されたファイルを復元する方法もある。しかし、これらのどちらの方法も、例えば、頻繁に更新されるファイルの送信時や複数の宛先へのファイルの送信時には、送信データのサイズを小さくする効果が得られるものの、初めてファイルを送信する場合には効果が得られない。
【０００５】
ところで、ＩＰ（Internet Protocol）ネットワークにおいて、データの送信に高信頼性が要求される場合には、ＴＣＰ（Transmission Control Protocol）通信が行われることが多い。ＴＣＰ通信では、送信側からパケットを送信すると、受信側はＡＣＫと呼ばれる受信確認信号を返信する。送信側は、ＡＣＫを受信すると次のパケットを送信するが、パケットの消失などによりＡＣＫが返信されなかった場合には、同じパケットを再送する。
【０００６】
ＴＣＰ通信では、上記のような通信手順により受信側にパケットが確実に届くようにしている。しかしながら、このような通信手順では、例えば、ネットワーク上の距離が離れると、データの往復時間であるＲＴＴ（Round Trip Time）が大きくなり、実効通信速度が低下するという問題がある。
【０００７】
これに対して、ＵＤＰ（User Datagram Protocol）通信では、送信側は、受信側からの受信確認信号を受信することなくパケットを送信する。このため、通信の信頼性は低下するものの、ＴＣＰ通信と比較して実効通信速度が高められる。
【０００８】
また、ＵＤＰ通信のように送達確認を行わない無手順方式の通信時にも、通信の信頼性を向上させる方法として、パケットが消失した場合でも受信側でエラーを訂正できるように、送信データを符号化する方法がある。例えば、転送元データをｍ個の分割データに分割し、ｍビットでｎ系列のデータ列におけるビット“１”の位置に対応する分割データを選択して排他的論理和データを求め、データ列と排他的論理和データとを符号化データとして送信する方法がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００６−２７１００６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、受信側でエラー訂正が可能なように送信データを符号化する技術では、符号化データが大きくなり、その結果、データの送信速度が実質的に低下するという問題があった。また、このような例に限らず、データを符号化する技術においては、符号化データのデータ量を、効率のよい処理手順を用いてさらに抑制することが要求されていた。
【００１１】
本発明はこのような点に鑑みてなされたものであり、符号化データのデータ量を効率よく抑制できるようにしたデータ符号化プログラム、データ復号化プログラムおよびそれらの方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、データ符号化プログラムが提供される。このデータ符号化プログラムは、コンピュータに次のような処理を実行させる。データ符号化プログラムに従って、コンピュータは、符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順を実行し、前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順を実行する。
【００１３】
また、上記目的を達成するために、データ復号化プログラムが提供される。このデータ復号化プログラムは、コンピュータに次のような処理を実行させる。データ復号化プログラムに従って、コンピュータは、入力データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記入力データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順を実行し、置換後の前記入力データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順を実行する。
【発明の効果】
【００１４】
上記のデータ符号化プログラムおよびデータ復号化プログラムによれば、符号化データのデータ量が効率よく抑制される。
【図面の簡単な説明】
【００１５】
【図１】第１の実施の形態の情報処理装置の構成を示す図である。
【図２】第２の実施の形態のシステム構成例を示す図である。
【図３】情報処理装置のハードウェア構成例を示す図である。
【図４】送信側・受信側の各情報処理装置が備える機能を示すブロック図である。
【図５】符号化処理について説明する図である。
【図６】符号化処理部の処理手順の例を示すフローチャートである。
【図７】圧縮処理について説明する図である。
【図８】圧縮処理部の処理手順の例を示すフローチャートである。
【図９】ステップＳ４５のビット列置換処理の手順の例を示すフローチャートである。
【図１０】伸張処理部の処理手順の例を示すフローチャートである。
【図１１】復号化処理について説明する図である。
【図１２】復号化処理部の処理手順の例を示すフローチャートである。
【図１３】図１２のステップＳ１１３の処理手順の例を示すフローチャートである。
【図１４】上三角行列化処理の具体例を説明する図である。
【図１５】図１２のステップＳ１１９の処理手順の例を示すフローチャートである。
【図１６】符号化行列の生成手順の例を示すフローチャートである。
【図１７】第３の実施の形態に係る送信側／受信側の情報処理装置の機能を示すブロック図である。
【図１８】第３の実施の形態の符号化処理について説明する図である。
【図１９】第３の実施の形態の復号化処理について説明する図である。
【図２０】符号化処理部の処理手順の例を示すフローチャートである。
【図２１】復号化処理部の処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、実施の形態を図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態の情報処理装置の構成を示す図である。
【００１７】
図１に示す情報処理装置１は、符号化用ビット列３を用いて符号化対象データを符号化する符号化処理手段１１と、同じ符号化用ビット列３を用いて、符号化処理手段１１から出力された符号化データを圧縮する圧縮処理手段１２とを有する。一方、情報処理装置２は、圧縮処理手段１２から出力された圧縮データを符号化用ビット列３を用いて伸張する伸張処理手段２１と、同じ符号化用ビット列３を用いて、伸張処理手段２１により伸張された符号化データを復号化する復号化処理手段２２とを有する。ここで、情報処理装置２での伸張処理および復号化処理で用いられる符号化用ビット列３は、情報処理装置１での符号化処理および圧縮処理で用いられたものと共通のビット列である。
【００１８】
なお、情報処理装置１，２は、例えば、ともにコンピュータとして実現される。この場合、情報処理装置１，２の各機能は、例えば、それぞれの装置が備えるＣＰＵ（Central Processing Unit）によって所定のプログラムが実行されることで、実現される。
【００１９】
また、圧縮処理手段１２から出力された圧縮データは、例えば、ネットワークを介して、あるいは、可般型の記憶媒体を介して、情報処理装置２に受け渡される。また、情報処理装置２の伸張処理手段２１および復号化処理手段２２の各機能は、情報処理装置１に設けられていてもよい。この場合、例えば、圧縮処理手段１２から出力された圧縮データは、一旦記憶媒体に記憶された後、そこから読み出されて伸張処理手段２１に供給されればよい。
【００２０】
情報処理装置１において、符号化処理手段１１は、符号化の対象である符号化対象データと、符号化用ビット列３から得られる単位ビット列とから、符号化データを生成する。圧縮処理手段１２は、符号化用ビット列３から、生成された符号化データの一部分と一致するビット列を探索する。そして、探索されたビット列と一致する符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の符号化用ビット列３における位置に関する位置情報とを組み合わせたビット列に置換する。これにより、符号化データのデータ量が圧縮される。
【００２１】
なお、符号化用ビット列３は、例えば、行列として用意されてもよい。この場合、例えば、上記の単位ビット列は、行列の１行、または１行の中の一部として実現されればよい。また、位置情報は、例えば、行列の行数を示す情報、または、行数およびその行内の先頭からのビット数を示す情報とされればよい。
【００２２】
上記の情報処理装置１では、符号化データと符号化用ビット列３との間で一致するビット列が存在した場合に、符号化データのビット列を他の情報に置換するという簡単な方法で、符号化データのデータ量が抑制される。また、符号化処理で用いられた符号化用ビット列３が、符号化データに対する圧縮処理でも共通に用いられるため、例えば、圧縮処理のために専用のデータを用意する必要がない。従って、符号化データのデータ量を効率よく抑制できる。また、符号化データが送信される場合には、符号化データの実効的な送信速度が向上する。
【００２３】
なお、圧縮処理手段１２において、符号化データの一部分と置換する情報としては、上記の開始符号および位置情報に加えて、例えば、置換される符号化データのビット列の長さを示す長さ情報が適用されてもよい。長さ情報を圧縮データに含めることで、例えば、符号化データと符号化用ビット列３との間で比較するビット列のビット数を可変とすることができる。この場合、符号化データと符号化用ビット列３との間で共通するビット列として、より大きなビット数のビット列を検出できるようになり、その結果、圧縮率を高めることができる。
【００２４】
一方、情報処理装置２において、伸張処理手段２１は、入力された圧縮データから、上記の圧縮処理手段１２によって開始符号や位置情報などに置換された置換範囲を検出し、この置換範囲を元のビット列に置換することで、符号化データを復元する。より具体的には、伸張処理手段２１は、入力された圧縮データから、置換範囲の開始位置を示す開始符号を検出すると、この開始符号から開始される置換範囲から上記の位置情報を検出する。次に、検出した位置情報に基づく符号化用ビット列３の位置から置換ビット列を抽出する。この置換ビット列とは、圧縮処理手段１２による圧縮処理時に、符号化データの一部分と一致するビット列として符号化用ビット列３から探索されたビット列である。伸張処理手段２１は、圧縮データにおける開始符号および位置情報を含む置換範囲を、抽出した置換ビット列に置換する。
【００２５】
なお、伸張処理手段２１は、例えば、圧縮データの置換範囲に長さ情報が含まれていた場合には、位置情報に基づく符号化用ビット列３の位置から、長さ情報に基づくビット数のビット列を、置換ビット列として抽出する。
【００２６】
復号化処理手段２２は、伸張処理手段２１によって復元された符号化データと、符号化用ビット列３から得られる単位ビット列とから、符号化対象データを復元する。
上記の情報処理装置２では、復号化処理で用いる符号化用ビット列３が、符号化データを復元する伸張処理でも共通に用いられるため、例えば、伸張処理のために専用のデータを用意する必要がない。また、伸張処理は、前述の圧縮処理とは逆の手順で、圧縮データの一部分を符号化用ビット列３のビット列に置換するという簡単な方法で実行される。
【００２７】
ところで、符号化処理手段１１での符号化処理は、例えば、符号化対象データにエラー訂正機能を付加する処理として実現することができる。この場合、上記の情報処理装置１，２の各機能は、例えば、次のような処理を実行する。
【００２８】
符号化処理手段１１は、符号化対象データを所定ビット数ごとに分割した分割データのそれぞれと、符号化用ビット列３から同一ビット数のビット列を切り出して得られる複数の単位ビット列のそれぞれとを組み合わせて、演算処理を行う。そして、各演算処理による演算結果と、これらのそれぞれの演算処理の際に使用された単位ビット列の符号化用ビット列３における位置を示す位置情報とを、符号化データに含める。以下、このとき符号化データに含められる位置情報を、“第１の位置情報”と呼ぶことにする。
【００２９】
ここで、分割データと単位ビット列との間で行われる演算処理としては、例えば、単位ビット列の各ビットの値に応じた排他的論理和演算や、単位ビット列の各ビットの値に応じた論理和演算などが適用可能である。後者の論理和演算処理は、例えば、プール代数の連立方程式に従って実行することもできる。
【００３０】
また、第１の位置情報の代わりに、単位ビット列自体が符号化データに含められてもよい。符号化データに、第１の位置情報と単位ビット列自体のどちらを含めるかは、例えば、生成される符号化データの大きさに応じて選択されればよい。すなわち、第１の位置情報と単位ビット列のうち、符号化データがより小さくなる方が符号化データに含められればよい。
【００３１】
圧縮処理手段１２は、符号化処理手段１１からの符号化データのうち、１つの単位ビット列と１つ以上の分割データとを用いて演算された演算結果が格納された演算結果領域ごとに、次のような圧縮処理を行う。圧縮処理手段１２は、演算結果領域に含まれる任意のビット列である部分ビット列と一致するビット列を、符号化用ビット列３から探索する。そして、一致するビット列が探索された場合に、この演算結果領域の部分ビット列を、少なくとも、置換範囲の開始位置を示す開始符号と、探索されたビット列の符号化用ビット列３における位置を示す位置情報とによって置換する。以下、このとき部分ビット列を置換する位置情報を、“第２の位置情報”と呼ぶことにする。
【００３２】
なお、例えば、圧縮処理手段１２から出力された圧縮データが、情報処理装置２に対して送信される場合には、圧縮データは、前述の演算結果領域ごとに１つの送信パケットに格納されてもよい。これにより、受信側の情報処理装置２では、受信した圧縮データから演算結果領域単位のデータを容易に取り込むことができるようになる。また、例えば、圧縮データが可搬型記憶媒体を介して情報処理装置２に受け渡される場合には、圧縮データは、演算結果領域ごとに区分されたデータとして可搬型記憶媒体に格納されてもよい。
【００３３】
また、演算結果領域には、例えば、１つの単位ビット列と１以上の分割データとを用いて符号化処理時に演算された演算結果に加えて、この演算結果の演算に使用された単位ビット列、または、これに対応する単位ビット列情報が格納されてもよい。また、別の例としては、単位ビット列、または、これに対応する単位ビット列情報は、圧縮データ中の演算結果とは別の領域に格納されてもよい。この場合、単位ビット列または単位ビット列情報が格納された領域は、圧縮処理手段１２による圧縮処理の対象にはならず、この領域には、符号化処理手段１１から出力されたデータがそのまま格納される。
【００３４】
伸張処理手段２１は、入力された圧縮データから開始符号と、これに対応する第２の位置情報とを検出すると、検出した第２の位置情報に基づく符号化用ビット列３の位置から置換ビット列を抽出する。そして、入力された圧縮データにおける、検出した開始符号および第２の位置情報を含む圧縮領域を、符号化用ビット列３から抽出した置換ビット列によって置換し、圧縮データを伸張する。
【００３５】
復号化処理手段２２は、伸張された符号化データから第１の位置情報を複数抽出し、これらの第１の位置情報に基づいて符号化用ビット列３から抽出した単位ビット列を用いて、符号化データを復号化する。より具体的には、復号化処理手段２２は、第１の位置情報を符号化データから抽出するとともに、符号化対象データを所定ビット数ごとに分割した分割データと単位ビット列とを基に符号化処理時に演算された演算結果を、符号化データから抽出する。そして、複数の単位ビット列情報に基づいて符号化用ビット列３から抽出された単位ビット列、および、これら複数の単位ビット列と、同じ分割データとを基に演算された複数の演算結果を用いて、演算処理を行い、分割データを復元する。
【００３６】
なお、符号化データに、第１の位置情報の代わりに単位ビット列自体が含まれていた場合には、復号化処理手段２２は、符号化用ビット列３を参照することなく、単位ビット列を符号化データから直接抽出できる。
【００３７】
復号化の際の演算処理としては、例えば、複数の単位ビット列を行列配置した第１の行列、および、これら複数の単位ビット列と、同じ分割データとを基に演算された演算結果を行列配置した第２の行列に対する、行同士の排他的論理和演算などを適用可能である。あるいは、符号化処理の際に前述の連立方程式が用いられた場合には、これら複数の単位ビット列と演算結果とを連立方程式に代入して、分割データに対応する変数の値を求める演算処理を適用することも可能である。
【００３８】
このような符号化処理および復号化処理が適用されることで、例えば、圧縮データが生成されてから伸張処理手段２１に入力されるまでの間に、データの一部に欠落が生じた場合でも、復号化処理によりエラー訂正処理が行われる。従って、データの欠落が発生した場合でも、元の符号化対象データを正常に復元できることが多くなる。
【００３９】
また、符号化対象データを符号化した後、さらに圧縮処理することで、受け渡すデータのサイズを小さくすることができる。従って、例えば、データをネットワークを通じて受け渡す場合には、データ伝送の信頼性を確保しつつ、実効通信速度を高めることができる。また、データを可般型記憶媒体を介して受け渡す場合でも、可般型記憶媒体の読み書きの速度を向上させることができる。
【００４０】
次に、圧縮データがネットワークを通じて受け渡され、なおかつ、符号化用ビット列として符号化行列が用いられる場合の実施の形態について説明する。なお、以下の実施の形態では、送信側の装置において、符号化対象データに対してエラー訂正機能を付加するための符号化処理が実行される。
【００４１】
〔第２の実施の形態〕
図２は、第２の実施の形態のシステム構成例を示す図である。
図２において、情報処理装置１００，２００は、ネットワーク３００を介して、互いにデータを送受信する。データの送信の際、送信側の情報処理装置は、送信対象データを符号化した後、さらに圧縮し、圧縮データを受信側の情報処理装置に送信する。ここで、送信対象データは、送信前に符号化されることにより、送信されたデータの一部が例えばネットワーク３００上で消失した場合でも、消失したデータを受信側で復元し得る状態に変換される。すなわち、受信側の情報処理装置は、受信した圧縮データを伸張した後、得られた符号化データを復号化する。このとき、符号化データの一部が消失していた場合でも、受信した他の符号化データを基にエラー訂正することで、元の送信対象データを復元できる場合が多くなる。
【００４２】
本実施の形態では、情報処理装置１００，２００の間では、データがパケット化されて転送される。また、上記のようなエラー訂正機能が適用されることから、情報処理装置１００，２００の間の通信処理において、データの送達確認を行わない無手順方式の通信プロトコルを使用した場合でも、データ送信処理の信頼性が高められる。本実施の形態では、このような無手順方式の通信プロトコルとして、ＵＤＰが使用されるものとする。
【００４３】
無手順方式の通信プロトコルが使用されることで、ＴＣＰなど、データの送達確認が行われる通信プロトコルが使用された場合と比較して、実効通信速度を高めることができる。ただし、送信対象データの符号化処理により、送信対象データのデータ量は大きくなる。そこで、本実施の形態では、符号化データを、符号化処理の際に使用した符号化行列を用いて圧縮することで、送信されるデータのデータ量を削減する。すなわち、本実施の形態では、送信対象データの符号化および圧縮を行うことで、実効通信速度と、データ送信処理の信頼性の両方を向上させる。
【００４４】
図３は、情報処理装置のハードウェア構成例を示す図である。
情報処理装置１００は、例えば、図３に示すようなコンピュータとして実現される。このコンピュータは、ＣＰＵ１１１、ＲＡＭ（Random Access Memory）１１２、ＨＤＤ（Hard Disk Drive）１１３、グラフィック処理部１１４、入力インタフェース（Ｉ／Ｆ）１１５、書き込み／読み取り部１１６および通信インタフェース（Ｉ／Ｆ）１１７を備えており、これらの各部はバス１１８によって相互に接続されている。
【００４５】
ＣＰＵ１１１は、ＨＤＤ１１３などの記憶媒体に記憶された各種プログラムを実行することにより、このコンピュータ全体を統括的に制御する。ＲＡＭ１１２は、ＣＰＵ１１１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。ＨＤＤ１１３は、ＣＰＵ１１１により実行されるプログラムやその実行に必要な各種のデータなどを記憶する。
【００４６】
グラフィック処理部１１４には、例えば、モニタ１１４ａが接続されている。このグラフィック処理部１１４は、ＣＰＵ１１１からの命令に従って、モニタ１１４ａの画面上に画像を表示させる。入力インタフェース１１５には、例えば、キーボード１１５ａやマウス１１５ｂが接続されている。入力インタフェース１１５は、キーボード１１５ａやマウス１１５ｂからの信号を、バス１１８を介してＣＰＵ１１１に送信する。
【００４７】
書き込み／読み取り部１１６は、ＣＰＵ１１１からバス１１８を介して受け取ったデータを、可搬型記憶媒体１１０に書き込む。また、可搬型記憶媒体１１０からデータを読み取り、バス１１８を介してＣＰＵ１１１に送信する。なお、可搬型記憶媒体１１０としては、例えば、光ディスク、フレキシブルディスク、ＵＳＢ（Universal Serial Bus）インタフェースなどを介して接続される半導体メモリなどを適用可能である。
【００４８】
通信インタフェース１１７は、ネットワーク３００を介して、情報処理装置２００などの外部装置との間でデータの送受信を行う。
なお、情報処理装置２００についても、図３に示した情報処理装置１００と同様のハードウェア構成によって実現可能である。
【００４９】
次に、情報処理装置１００をデータの送信側装置とし、情報処理装置２００をデータの受信側装置とした場合のデータ送受信処理について説明する。まず、図４は、送信側・受信側の各情報処理装置が備える機能を示すブロック図である。
【００５０】
送信側の情報処理装置１００は、送信対象データを符号化する符号化処理部１２０と、生成された符号化データを圧縮する圧縮処理部１３０と、生成された圧縮データをネットワーク３００に送信する送信処理部１４０とを備えている。これらの各機能は、例えば、情報処理装置１００が有するＣＰＵ１１１によって所定のプログラムが実行されることで実現される。
【００５１】
符号化処理部１２０は、ｎ行ｍ列（ただし、ｎはｍ以上の整数）の符号化行列Ａを用いて、送信対象データに対して符号化処理を施す。この符号化行列Ａは、受信側の情報処理装置２００での伸張処理および復号化処理でも共通に用いられるものである。なお、以下の説明において、例えば、符号化行列Ａにおけるｘ行目のビット列ａxを選択することは、前述の符号化用ビット列における（ｘ×ｍ）ビット目から｛（ｘ＋１）×ｍ−１｝ビット目までのビット列を選択することと同じ意味である。
【００５２】
符号化処理部１２０は、送信対象データを所定のビット数ごとに分割した分割データを、ｍ個ごとに順に選択する。これとともに、選択したｍ個の分割データのそれぞれに対応付けて、符号化行列Ａの各行に対応するｎ個のビット列を選択する。ここで、符号化行列Ａの各行のビット列は、第１の実施の形態での“単位ビット列”の一例に対応する。
【００５３】
符号化処理部１２０は、選択した１行分のビット列におけるそれぞれのビットを、対応するｍ個の分割データのそれぞれに対応付ける。そして、１行分のビット列におけるビット１の位置に対応する分割データを選択して、選択した分割データの排他的論理和を演算する。ここで、排他的論理和の演算結果を“排他的論理和データ”と呼ぶ。
【００５４】
符号化処理部１２０は、１行分のビット列の符号化行列Ａにおける位置を示す行番号と、このビット列を用いて算出された排他的論理和データとを結合する。ここで、１つの行番号と排他的論理和データとの組を“冗長データ”と呼ぶ。符号化処理部１２０は、選択したｎ個のビット列のそれぞれに対して冗長データを生成し、さらに、ここまでの処理を送信対象データの全体に亘って実行することで、符号化データを生成して出力する。
【００５５】
なお、符号化データにおける行番号および排他的論理和データの格納位置は、上記のような位置に限らない。例えば、同じ行のビット列に対応する行番号を符号化データに格納し、この行番号に続いて、ｍ個の分割データを基に演算された排他的論理和データを順に格納していってもよい。ただし、この場合、行番号が格納された領域は、次の圧縮処理部１３０による圧縮処理の対象から除外される。
【００５６】
圧縮処理部１３０は、符号化処理部１２０から出力された符号化データを、上記の冗長データごとに取り込む。そして、冗長データに含まれる任意のビット列と一致するビット列を、符号化行列Ａから探索する。一致するビット列が探索された場合、圧縮処理部１３０は、冗長データにおけるビット列を、少なくとも開始符号および位置情報を含むデータによって置換する。開始符号とは、冗長データ内のビット列における、上記各データに置換された範囲の開始位置を示す符号である。位置情報は、冗長データ内のビット列と一致したビット列の符号化行列Ａにおける位置を示す情報であり、例えば、符号化行列Ａにおける行番号と、行番号に対応する行の先頭からのビット数などを含む。
【００５７】
また、冗長データ内のビット列を置換する情報としては、上記の開始符号および位置情報の他に、一致したビット列の長さを示す長さ情報を加えてもよい。長さ情報は、例えば、圧縮処理において、冗長データと符号化行列Ａとの間で照合するビット列の長さを可変とする場合に、置換する情報に加えられる。
【００５８】
送信処理部１４０は、圧縮処理部１３０からの圧縮データをパケット化し、ネットワーク３００に対して送出する。本実施の形態では、送信処理部１４０は、ＵＤＰに従って圧縮データをパケット化して送出する。また、１つのパケットには、１つの冗長データに対応する圧縮データが格納される。なお、圧縮処理部１３０による置換処理により、冗長データのサイズは小さくなる可能性があり、パケットの長さは圧縮処理部１３０から出力された冗長データのサイズに応じて変化する場合がある。
【００５９】
一方、受信側の情報処理装置２００は、ネットワークからデータを受信して圧縮データを出力する受信処理部２２０と、圧縮データを伸張して符号化データを出力する伸張処理部２３０と、符号化データを復号化して送信対象データを出力する復号化処理部２４０とを備えている。これらの各機能は、例えば、情報処理装置２００が有するＣＰＵによって所定のプログラムが実行されることで実現される。
【００６０】
受信処理部２２０は、ネットワーク３００から受信したパケットから、圧縮データを取り出す。上記のように、１つのパケットからは、１つの冗長データに対応する圧縮データが抽出される。
【００６１】
伸張処理部２３０は、圧縮データ中の開始符号を探索し、開始符号が存在した場合には、開始符号の直後のデータから位置情報を抽出する。そして、符号化行列Ａ内の位置情報に対応する位置から、所定ビット数分の部分ビット列を読み込み、開始符号および位置情報を部分ビット列で置換する。
【００６２】
復号化処理部２４０は、伸張処理部２３０により伸張された符号化データから、ｍ個の分割データに対応する符号化データを順次抽出し、行番号および排他的論理和データを抽出する。次に、行番号を基に符号化行列Ａから１行分のビット列を読み込み、読み込んだビット列と、これに対応する排他的論理和データとを、ともに行列配置する。次に、ビット列による行列を単位行列化するとともに、対応する排他的論理和データによる行列にも同様の処理を行い、処理後の排他的論理和データによる行列の各行の値を、符号化前のｍ個の分割データとして出力する。
【００６３】
次に、情報処理装置１００，２００における処理手順を、より詳細に説明する。まず、送信側の情報処理装置１００における処理手順について説明する。図５は、符号化処理について説明する図である。
【００６４】
図５では、説明を簡単にするために、列数ｍを４という小さな数値とするが、実際には列数ｍの値は、例えば数バイトといったより大きな数値とされることが望ましい。また、図５の例では、ｎ＝６とする。
【００６５】
また、図５では、送信対象データは、まず、（ｍ×ｐ）ビット（ただし、ｐは１以上の整数）の部分ブロックに分割された後、さらに、各部分ブロックがｐビットずつの分割データに分割されるものとする。図５では、送信対象データは、ｈ個（ただし、ｈは１以上の整数）の部分ブロックＤ0，Ｄ1，・・・，Ｄh-1に分割されたものとする。なお、ｐの値は、例えば、送信処理部１４０から出力される１つのパケットに格納されるデータのサイズを基に決定されればよい。
【００６６】
ここでは例として、１番目の部分ブロックＤ1を基に符号化処理を行う場合について説明する。符号化処理部１２０は、部分ブロックＤ1を４つの分割データＤ10，Ｄ11，Ｄ12，Ｄ13に分割する。一方、符号化処理部１２０は、符号化行列Ａの各行のビット列うち、ｍ列以上の行のビット列を選択する。ここでは、６行分のビット列ａ0，ａ1，ａ2，ａ3，ａ4，ａ5が選択されるものとする。
【００６７】
符号化処理部１２０は、選択したビット列ａ0，ａ1，ａ2，ａ3，ａ4，ａ5におけるそれぞれのビットを、４つの分割データＤ10，Ｄ11，Ｄ12，Ｄ13のそれぞれに対応付ける。すなわち、ビット列ａ0，ａ1，ａ2，ａ3，ａ4，ａ5のそれぞれの上位から０桁目、１桁目、２桁目、３桁目を、それぞれ分割データＤ10，Ｄ11，Ｄ12，Ｄ13に対応付ける。
【００６８】
次に、符号化処理部１２０は、ビット列ａ0，ａ1，ａ2，ａ3，ａ4，ａ5のそれぞれにおけるビット１の位置に対応する分割データを選択し、選択した分割データの排他的論理和を演算して排他的論理和データを出力する。そして、処理に使用したビット列の符号化行列Ａにおける行番号と、演算された排他的論理和データとを結合し、冗長データとする。
【００６９】
例えば、ビット列ａ0は“１１００”であるので、ビット列ａ0に基づいて分割データＤ10，Ｄ11が選択され、分割データＤ10，Ｄ11の排他的論理和が演算される。従って、行番号０と、分割データＤ10，Ｄ11の排他的論理和とを結合したビット列が、冗長データＥ10として出力される。同様に、ビット列ａ1は“０１１０”であるので、ビット列ａ1に基づいて分割データＤ11，Ｄ12が選択され、分割データＤ11，Ｄ12の排他的論理和が演算される。従って、行番号１と、分割データＤ11，Ｄ12の排他的論理和とを結合したビット列が、冗長データＥ11として出力される。また、ビット列ａ5は“０００１”であるので、ビット列ａ5に基づいて分割データＤ13のみが選択される。この場合には、分割データＤ13が演算結果としてそのまま出力され、行番号５と分割データＤ13とを結合したビット列が、冗長データＥ15として出力される。
【００７０】
以上の処理がすべての部分ブロックＤ0，Ｄ1，・・・，Ｄh-1について実行されることで、（６×ｈ）個の冗長データＥ00，Ｅ01，・・・，Ｅ(h-1)5が生成され、これらが結合されたビット列が符号化データとして出力される。
【００７１】
なお、上記の符号化処理に用いる、符号化行列Ａにおけるビット列は、例えば、符号化行列Ａの各行の一部であってもよい。例えば、行数、列数がそれぞれｎ，ｍより大きい符号化行列Ａの各行のうち、先頭からｍビット分のビット列が、符号化処理に使用されてもよい。また、符号化処理に用いるビット列は、その数がｍ以上であれば、符号化行列Ａ内のすべての行から選択されなくてもよい。
【００７２】
図６は、符号化処理部の処理手順の例を示すフローチャートである。
［ステップＳ１１］符号化処理部１２０は、送信対象データを、それぞれ（ｍ×ｐ）サイズを有する部分ブロックに分割する。前述のように、ｍは符号化行列Ａの列数であり、ｐは分割データのサイズである。
【００７３】
ここで、送信対象データの分割によりｈ個の部分ブロックＤ0，Ｄ1，・・・，Ｄh-1が生成されたものとする。なお、送信対象データの分割により、（ｍ×ｐ）未満のサイズを有する余剰データが生じた場合には、余剰データについては符号化処理を行わず、符号化処理により生成された後述する冗長データの最後尾に余剰データが付加されればよい。
【００７４】
［ステップＳ１２］符号化処理部１２０は、変数ｌを０とする。
［ステップＳ１３］符号化処理部１２０は、１つの部分ブロックＤlを１つ選択し、それぞれ同じサイズｐを有するｍ個の分割データＤl0，Ｄl1，・・・，Ｄl(m-1)を生成する。
【００７５】
［ステップＳ１４］符号化処理部１２０は、変数ｉを０とする。
［ステップＳ１５］符号化処理部１２０は、符号化行列Ａにおけるｉ行目のビット列ａiを選択する。
【００７６】
［ステップＳ１６］符号化処理部１２０は、変数ｊを０とし、一時データｄを０とする。
［ステップＳ１７］符号化処理部１２０は、ビット列ａiのｊビット目の値ａijが１であるか否かを判定する。１であった場合、ステップＳ１８の処理が実行され、０であった場合、ステップＳ１９の処理が実行される。
【００７７】
［ステップＳ１８］符号化処理部１２０は、ｊ番目の分割データＤljと一時データｄとの排他的論理和を演算し、演算結果を一時データｄに代入する。
［ステップＳ１９］符号化処理部１２０は、変数ｊが（ｍ−１）と一致するか否かを判定する。変数ｊが（ｍ−１）と一致する場合には、ステップＳ２１の処理が実行され、変数ｊが（ｍ−１）より小さい場合には、ステップＳ２０の処理が実行される。
【００７８】
［ステップＳ２０］符号化処理部１２０は、変数ｊを１だけ増加させる。この後、ステップＳ１７の処理が実行される。従って、ステップＳ１７〜Ｓ１９のループ処理は、変数ｊが０から（ｍ−１）になるまでｍ回繰り返され、選択された１つのビット列ａiの各ビットの値に応じて一時データｄの値が更新される。
【００７９】
［ステップＳ２１］符号化処理部１２０は、現在の行数を示す変数ｉの値と、現在の一時データｄの値とを結合して、部分ブロックＤlのｉ番目の冗長データＥliを生成する。
［ステップＳ２２］符号化処理部１２０は、変数ｉの値が（ｎ−１）と一致するか否かを判定する。変数ｉが（ｎ−１）と一致する場合には、ステップＳ２４の処理が実行され、変数ｉが（ｎ−１）より小さい場合には、ステップＳ２３の処理が実行される。
【００８０】
［ステップＳ２３］符号化処理部１２０は、変数ｉの値を１だけ増加させる。この後、ステップＳ１５の処理が実行される。従って、ステップＳ１５〜Ｓ２１の処理はｎ回繰り返され、符号化行列Ａから選択されたｎ個のビット列にそれぞれ対応する冗長データＥl0，Ｅl1，・・・，Ｅl(n-1)が生成される。
【００８１】
［ステップＳ２４］符号化処理部１２０は、変数ｌの値が（ｈ−１）と一致するか否かを判定する。変数ｌが（ｈ−１）に等しい場合には、ステップＳ２５の処理が実行される。一方、変数ｌが（ｈ−１）より小さい場合には、ステップＳ１３〜Ｓ２４の処理がｈ回繰り返されて、（ｈ×ｑ）個の冗長データＥ00，Ｅ01，・・・，Ｅ(h-1)(n-1)が出力された状態となり、処理が終了される。
【００８２】
［ステップＳ２５］符号化処理部１２０は、変数ｌの値を１だけ増加させる。この後、ステップＳ１３の処理が実行され、次の部分ブロックが選択されて分割データが生成され、生成された分割データを用いてステップＳ１４〜Ｓ２２の処理が実行される。
【００８３】
なお、以上の図６の処理では、ステップＳ１１でｈ個の部分ブロックを生成した後、ステップＳ１３で部分ブロックを１つずつ選択して分割データを生成していた。しかし、この他の例として、部分ブロックを生成せず、元の送信対象データから分割データをｍ個ずつ順番に生成してもよい。
【００８４】
また、上記のステップＳ２１では、行数を示す変数ｉの値と一時データｄとの組が、冗長データに格納されていた。しかし、他の例として、変数ｉの代わりに対応するビット列そのものが冗長データに格納されてもよい。ただし、符号化処理に用いるビット列の数が極端に大きくならない限り、ビット列そのものを冗長データに格納するよりも、変数ｉの値を冗長データに格納する方が、データサイズを小さくすることができる。また、冗長データにビット列そのものを格納した場合、このビット列の領域は、次の圧縮処理時に位置情報などに確実に置換されてしまう。従って、通常は、変数ｉの値を冗長データに格納する方が、処理効率の面でも有利と言える。
【００８５】
以上説明した符号化処理によれば、受信側の情報処理装置２００において受信データの欠損があった場合でも、受信データを伸張後に復号化することで、元の送信対象データを復元することが可能になる。なお、上記の符号化処理では、処理に利用する符号化行列Ａの行数ｎをより多くすることで、復号化の際に送信対象データを復元できる確率を高くすることができる。ただし、符号化行列Ａ内の数値を、任意のｍ行を用いた行列が単位行列化しやすくなるように選択することで、復号化の際に送信対象データを復元できる確率を高めつつ、行数ｎを小さくして、符号化データのデータ量を減少させることができる。
【００８６】
次に、図７は、圧縮処理について説明する図である。
圧縮処理部１３０は、符号化処理部１２０から出力された冗長データに含まれる所定の長さのビット列が、符号化行列Ａに含まれるビット列と一致するか否かを探索する。そして、両者が一致した場合には、冗長データの該当ビット列を、開始符号、位置情報および長さ情報によって置換する。これにより、データ量が圧縮される。
【００８７】
図７の例では、開始符号として“１１１１０”が用いられている。また、図７の例では、冗長データ内のビット列と一致した符号化行列Ａ内のビット列の位置情報は、１０ビットの行番号と、行の先頭からのビット数を示す１０ビットのビット数情報とを含み、図７では１７行目の先頭から９ビット目を示している。また、図７の例では、長さ情報は１０ビットのデータとされ、ビット数４０を示している。
【００８８】
なお、冗長データと符号化行列Ａとの間で一致するか否かを探索するビット列のビット数は、例えば、次の図８に示す処理のように可変とすることができる。逆に、このビット数を固定値とすることもできる。後者の場合には、圧縮データに、ビット列の長さ情報を含める必要はない。
【００８９】
ところで、圧縮データ内に開始符号が記述されることで、受信側の情報処理装置２００では、受信データの中の圧縮された領域を判別することが可能になる。このため、符号化データ中の圧縮されていない領域に開始符号と同じビット列が含まれていると、受信側の情報処理装置２００での伸張処理時に、圧縮領域であると間違って判別してしまう。そこで、圧縮処理部１３０は、符号化データから、このような誤判別が発生し得る部分を抽出し、その部分を誤判別が発生しないような別のビット列に置換する。
【００９０】
図８は、圧縮処理部の処理手順の例を示すフローチャートである。この図８のフローチャートの処理は、１つの冗長データが圧縮処理部１３０に読み込まれるたびに繰り返し実行される。
【００９１】
［ステップＳ４１］圧縮処理部１３０は、変数ｒを０にし、変数ｓを所定の初期値とする。変数ｓの初期値は、例えば、開始符号の先頭から１が連続するビット数以上、冗長データのビット数以下とされればよい。本実施の形態では、開始符号は“１１１１０”であることから、変数ｓの初期値は４以上の値に設定される。
【００９２】
［ステップＳ４２］圧縮処理部１３０は、符号化処理部１２０から出力された冗長データの先頭からｒビットの位置から、ｓビット分のビット列を選択する。
［ステップＳ４３］圧縮処理部１３０は、ステップＳ４２の処理でｓビット分のビット列を選択できたか否かを判定する。ｓビット分のビット列が選択できた場合には、ステップＳ４４の処理が実行される。一方、ステップＳ４３では、冗長データの先頭からｒビットの位置から最後尾までのビット数がｓ未満である場合、ｓビット分のビット列を選択できない。従って、この場合には、圧縮処理が終了される。
【００９３】
［ステップＳ４４］圧縮処理部１３０は、ステップＳ４２で選択したビット列と同一のビット列が、符号化行列Ａに存在するか否かを探索する。なお、本実施の形態では、符号化行列Ａを行に沿った方向にスキャンすることで、同一のビット列が存在するか否かを探索するものとする。同一のビット列が存在した場合には、ステップＳ４５の処理が実行され、同一のビット列が存在しなかった場合には、ステップＳ４６の処理が実行される。
【００９４】
［ステップＳ４５］圧縮処理部１３０は、ステップＳ４２で選択したビット列を含む冗長データの範囲を、開始符号、位置情報および長さ情報によって置換する処理を実行する。このとき、開始符号“１１１１０”は、置換範囲の先頭に配置される。このステップＳ４５の処理手順については、次の図９において説明することにする。なお、後述するように、ステップＳ４５の処理の実行後には、置換されたビット数が変数ｒに加算された状態となる。この後、ステップＳ４２の処理が実行される。
【００９５】
［ステップＳ４６］圧縮処理部１３０は、ステップＳ４２で選択したビット列の先頭から４ビットが“１１１１”であるか否かを判定する。先頭４ビットが“１１１１”である場合には、ステップＳ４９の処理が実行され、先頭４ビットが“１１１１”でない場合には、ステップＳ４７の処理が実行される。
【００９６】
［ステップＳ４７］圧縮処理部１３０は、符号化データの先頭からｒビットの位置から１ビット分を、圧縮データとして出力する。
［ステップＳ４８］圧縮処理部１３０は、変数ｒに１を加算する。この後、ステップＳ４２の処理が実行される。
【００９７】
［ステップＳ４９］圧縮処理部１３０は、ステップＳ４２で選択したビット列の先頭から４ビットのビット列“１１１１”の代わりに、識別符号“１１１１１”を出力する。
［ステップＳ５０］圧縮処理部１３０は、識別符号 “１１１１”のビット数４を、変数ｒに加算する。この後、ステップＳ４２の処理が実行される。
【００９８】
以上の図８の処理では、ステップＳ４２において、冗長データからｓビットのビット列が選択される。そして、選択されたビット列と同一のビット列が符号化行列Ａに存在した場合には、ステップＳ４５において、冗長データの一部が置換される。このとき、置換範囲の先頭に開始符号“１１１１０”に置換される。その後、冗長データにおける置換範囲の次のビットを先頭にして、ステップＳ４２からの処理が実行される。
【００９９】
また、ステップＳ４２で選択されたビット列と同一のビット列が符号化行列Ａに存在しない場合には、ステップＳ４６において、ｓビットのビット列の先頭領域が開始符号の先頭４ビットであるビット列“１１１１”と一致するか否かが判定される。ビット列が“１１１１”と一致する場合には、符号化データにおけるビット列“１１１１”が識別符号“１１１１１”に置換される。その後、冗長データにおけるビット列“１１１１”の次のビットを先頭にして、ステップＳ４２からの処理が実行される。一方、ビット列が“１１１１”と一致しない場合には、冗長データにおける処理の先頭を１ビット後方にずらして、ステップＳ４２からの処理が実行される。
【０１００】
ここで、上記のステップＳ４９では、冗長データにおけるビット列“１１１１”が、よりビット数の大きい識別符号“１１１１１”に置換される。また、識別符号の先頭から４ビット分のビット列は、開始符号の先頭から４ビット分のビット列と同じになる。一方、識別符号の先頭から５ビット目の値は、開始符号の先頭から５ビット目とは異なる値とされる。
【０１０１】
このような処理により、例えば、圧縮前の符号化データに開始符号と同じビット列“１１１１０”が存在した場合、このビット列は“１１１１１０”に置換される。また、圧縮前の符号化データにビット列“１１１１１”が存在した場合、このビット列は“１１１１１１”に置換される。従って、冗長データに対応する圧縮データを先頭からスキャンしたときに、ビット列“１１１１０”が現れた場合、このビット列が開始符号であることが保証される。これとともに、冗長データに対応する圧縮データを先頭からスキャンしたときに、１が５ビット分連続した場合、この５ビットのビット列が識別符号であることも保証される。すなわち、伸張処理時において、圧縮データから開始符号および識別符号を確実に識別できるようになる。
【０１０２】
なお、開始符号および識別符号の各値は、上記の例に限らない。識別符号は、先頭から複数ビット数分のビット列が、開始符号の先頭から同じビット数分のビット列と同じとされる。なおかつ、識別符号のその次のビットの値が、開始符号の対応するビットの値とは異なる値とされる。そして、符号化データに、開始符号および識別符号の先頭側の共通ビット列が現れたときに、この共通ビット列が識別符号に置換される。
【０１０３】
図９は、ステップＳ４５のビット列置換処理の手順の例を示すフローチャートである。
［ステップＳ６１］圧縮処理部１３０は、変数ｓに１を加算する。
［ステップＳ６２］圧縮処理部１３０は、冗長データの先頭からｒビットの位置から、ｓビット分のビット列を選択する。
【０１０４】
［ステップＳ６３］圧縮処理部１３０は、ステップＳ６２の処理でｓビット分のビット列を選択できたか否かを判定する。ｓビット分のビット列が選択できた場合には、ステップＳ６４の処理が実行され、ｓビット分のビット列が選択できなかった場合には、ステップＳ６５の処理が実行される。
【０１０５】
［ステップＳ６４］圧縮処理部１３０は、ステップＳ６２で選択したビット列と同一のビット列が、符号化行列Ａに存在するか否かを探索する。同一のビット列が存在した場合には、ステップＳ６１の処理が実行され、同一のビット列が存在しなかった場合には、ステップＳ６５の処理が実行される。
【０１０６】
［ステップＳ６５］圧縮処理部１３０は、冗長データの先頭からｒビットの位置から（ｓ−１）ビット分のビット列の代わりに、開始符号“１１１１０”、位置情報および長さ情報を、圧縮データとして出力する。位置情報は、ステップＳ４４（またはステップＳ６４）で符号化行列Ａから探索されたビット列の先頭位置を示す情報であり、そのビット列の符号化行列Ａにおける行番号と、行番号に対応する行の先頭からのビット数を示すビット数情報とを含む。また、長さ情報は、（ｓ−１）の値となる。
【０１０７】
［ステップＳ６６］圧縮処理部１３０は、変数ｒに（ｓ−１）の値を加算する。この後、図８のステップＳ４２の処理が実行される。
以上の図９の処理では、ステップＳ６１〜Ｓ６４のループ処理により、冗長データ内のビット列のビット数を１ビットずつ増加させながら、そのビット列と同一のビット列が符号化行列Ａに存在するかを順次判定していく。そして、同一のビット列が符号化行列Ａに存在しないと判定されるまで、ループ処理を繰り返す。このような処理により、符号化行列Ａ内に同一のビット列が存在する符号化データ内のビット列として、できるだけビット数の大きいビット列を探索し、それらのビット列を開始符号、位置情報および長さ情報により置換する。これにより、圧縮データの圧縮率が高められる。
【０１０８】
なお、同一のビット列を探索する際のビット列のビット数である変数ｓを固定値とする場合には、圧縮データに長さ情報を記述する必要はない。この場合、例えば、図８のステップＳ４４において同一のビット列が存在すると判定された後に、符号化データのｓビット分のビット列が、開始符号および位置情報によって置換されればよい。そして、変数ｒにｓの値が加算された後、ステップＳ４２の処理が実行されればよい。
【０１０９】
また、上記の圧縮処理では、符号化行列Ａを行に沿った方向にスキャンすることで、符号化データと同一のビット列を探索したが、これに限らず、例えば、符号化行列Ａを列に沿った方向にスキャンしてもよい。あるいは、符号化行列Ａを斜め方向にスキャンしてもよい。
【０１１０】
さらに別の例として、符号化行列Ａを複数の方向にスキャンすることで、冗長データと同一のビット列を探索してもよい。この場合、圧縮データに、どの方向にスキャンしたかを示す方向情報をさらに記述することで、冗長データを正しく伸張することができる。
【０１１１】
以上説明した圧縮処理により圧縮データが生成されると、送信処理部１４０は、ＵＤＰに従って圧縮データをパケット化し、ネットワーク３００を介して情報処理装置２００に対して送信する。送信処理部１４０は、図８の処理により出力された１つの冗長データを、１つのパケットに格納してネットワーク３００に送信させる。
【０１１２】
次に、受信側の情報処理装置２００における処理について説明する。まず、図１０は、伸張処理部の処理手順の例を示すフローチャートである。
情報処理装置２００において、受信処理部２２０は、ネットワーク３００を通じて受信したパケットから圧縮データを抽出し、伸張処理部２３０に転送する。前述のように、圧縮データは、冗長データを単位としてパケットに格納されている。受信処理部２２０は、受信したパケットから１つの冗長データに基づく圧縮データを抽出し、伸張処理部２３０に供給する。
【０１１３】
伸張処理部２３０は、受信処理部２２０からの圧縮データを冗長データを単位として受信する。そして、受信したデータを、ＨＤＤなどの記憶媒体にあらかじめ格納された符号化行列Ａを参照しながら伸張し、符号化データを復元する。図１０のフローチャートの処理は、例えば、１つの冗長データに基づく圧縮データを伸張処理部２３０が読み込むたびに実行される。
【０１１４】
［ステップＳ８１］伸張処理部２３０は、変数ｒを０にする。
［ステップＳ８２］伸張処理部２３０は、１つの冗長データに基づく圧縮データの先頭からｒビットの位置から４ビットのビット列を選択する。
【０１１５】
［ステップＳ８３］伸張処理部２３０は、ステップＳ８２で４ビットのビット列が選択可能であったか否かを判定する。４ビットのビット列が選択できた場合には、ステップＳ８５の処理が実行され、４ビットのビット列が選択できなかった場合には、ステップＳ８４の処理が実行される。
【０１１６】
［ステップＳ８４］伸張処理部２３０は、冗長データに基づく圧縮データの先頭からｒビットの位置以降の残りのビット列を、符号化データとしてそのまま出力する。ここで、上記のステップＳ８３では、冗長データに基づく圧縮データの先頭からｒビットの位置から最後尾までのビット数が４ビット未満である場合、ビット列を選択できない。この場合には、残りのビット列は圧縮されていないので、残りのビット列はそのまま出力される。この出力処理後、伸張処理が終了される。
【０１１７】
［ステップＳ８５］伸張処理部２３０は、ステップＳ８２で選択したビット列が“１１１１”であるか否かを判定する。ビット列が“１１１１”である場合には、ステップＳ８７の処理が実行され、ビット列が“１１１１”でない場合には、ステップＳ８６の処理が実行される。
【０１１８】
［ステップＳ８６］伸張処理部２３０は、変数ｒに１を加算する。この後、ステップＳ８２の処理が実行される。
ステップＳ８６の処理時には、ステップＳ８２で選択したビット列のうち少なくとも１ビット目は、圧縮処理時に符号化データを置換したものではないと考えられる。このため、圧縮データにおける判別対象とするビット列の先頭が１ビット分進められ、進められた先頭から４ビット分のビット列を判別対象として、ステップＳ８２からの処理が実行される。
【０１１９】
［ステップＳ８７］伸張処理部２３０は、ステップＳ８２で選択したビット列の次のビットが１であるか否かを判定する。次のビットが１である場合には、ステップＳ８８の処理が実行され、次のビットが０である場合には、ステップＳ９０の処理が実行される。
【０１２０】
［ステップＳ８８］伸張処理部２３０は、ステップＳ８２で選択した４ビットのビット列を、符号化データとして出力する。
［ステップＳ８９］伸張処理部２３０は、変数ｒに５を加算する。この後、ステップＳ８２の処理が実行される。
【０１２１】
上記のステップＳ８８，Ｓ８７によれば、ステップＳ８２で選択されたビット列の次のビット“１”が削除され、元のビット列“１１１１”が復元される。
［ステップＳ９０］冗長データに基づく圧縮データの先頭からｒビットの位置から５ビット分のデータは、開始符号であると判定される。このため、伸張処理部２３０は、ステップＳ８７での判別対象としたビット（すなわち、開始符号）に続く３０ビット分のビット列から、位置情報および長さ情報を抽出する。
【０１２２】
［ステップＳ９１］伸張処理部２３０は、抽出した位置情報および長さ情報を基づくビット列を、符号化行列Ａから読み込む。より具体的には、伸張処理部２３０は、位置情報に含まれる行番号から、符号化行列Ａにおける行を特定し、位置情報に含まれるビット数情報から、特定した行の先頭からのビット数を特定する。次に、特定されたビット数の位置から、長さ情報に基づくビット数分のビット列を読み込む。
【０１２３】
そして、伸張処理部２３０は、読み込んだビット列を、冗長データに基づく圧縮データの先頭からｒビットの位置から５ビット分のビット列の代わりに、符号化データとして出力する。
【０１２４】
［ステップＳ９２］伸張処理部２３０は、開始符号、位置情報および長さ情報の総ビット数である３５を、変数ｒに加算する。この後、ステップＳ８２の処理が実行される。
上記のステップＳ９０，Ｓ９１の処理により、圧縮処理時に開始符号、位置情報および長さ情報と置換されていた元のビット列が復元される。そして、ステップＳ９２の処理により、復元されたビット列の次の４ビットのビット列が判別対象とされて、ステップＳ８２からの処理が実行される。
【０１２５】
なお、本実施の形態では、ステップＳ９１での符号化行列Ａからのビット列の読み込みは、行に沿った方向に行うものとするが、これに限らず、例えば列に沿った方向に読み込む方法や、斜め方向に読み込む方法が採られてもよい。いずれの場合にも、ビット列をどの方向に読み込むかは、送信側の情報処理装置１００との間に事前に決められている必要がある。
【０１２６】
また、前述のように、符号化行列Ａからのビット列の読み込み方向が可変とされていてもよい。この場合、圧縮データからは、開始符号の後の所定の領域に、読み込み方向を示す方向情報が記述されている。伸張処理部２３０は、位置情報に基づく符号化行列Ａの位置から、方向情報に基づく方向に対して、長さ情報に基づくビット数分のビット列を読み込む。
【０１２７】
次に、図１１は、復号化処理について説明する図である。
復号化処理部２４０は、伸張処理部２３０から出力された符号化データから、冗長データを部分ブロック単位で選択して復号化する。例えば、前述の図５では、０番目から（ｈ−１）番目の部分ブロックのうち、１番目の部分ブロックに含まれる４つの分割データＤ10，Ｄ11，Ｄ12，Ｄ13を基に、冗長データＥ10，Ｅ11，Ｅ12，Ｅ13，Ｅ14，Ｅ15を生成した。一方、４つの分割データＤ10，Ｄ11，Ｄ12，Ｄ13を復号化する際には、図１１に示すように、伸張された符号化データから冗長データＥ10，Ｅ11，Ｅ12，Ｅ13，Ｅ14，Ｅ15が選択される。
【０１２８】
１つの部分ブロック内の分割データを復号化する基本的な処理手順は、次のようになる。復号化処理部２４０は、まず、１つの部分ブロックに基づく冗長データのうち、符号化行列Ａの列数であるｍ個の冗長データを選択する。次に、復号化処理部２４０は、選択した冗長データに含まれる行番号を基に、符号化処理の際に用いたビット列を符号化行列Ａから読み込み、それらのビット列ａｄ0，ａｄ1，・・・，ａｄ(m-1)を行列配置した行列Ａｄを生成する。このとき、ビット列に対応する排他的論理和データｄｘｏｒ0，ｄｘｏｒ1，・・・，ｄｘｏｒ(m-1)も行列配置して、行列Ｄｘｏｒを生成する。図１１の例ではｍ＝４であるので、行列Ａｄは、ビット列ａｄ0，ａｄ1，ａｄ2，ａｄ3を各行に持つ４行４列の行列となり、行列Ｄｘｏｒは、排他的論理和データｄｘｏｒ0，ｄｘｏｒ1，ｄｘｏｒ2，ｄｘｏｒ3を各行に持つ４行４列の行列となる。
【０１２９】
次に、復号処理部２４０は、行列Ａｄを、各行の入れ替えや行同士の論理和演算などを行うことで、単位行列化する。例えば、行列Ａｄを上三角行列に変換した後、変換された行列Ａｄの右上側に存在する１の値を０にするように処理することで、単位行列化が行われる。また、復号処理部２４０は、行列Ａｄを単位行列化する際に、行列Ａｄに対して施した処理と同じ処理を、行列Ｄｘｏｒに対しても施す。
【０１３０】
行列Ａｄを単位行列化できた場合には、その時点での行列Ｄｘｏｒにおける各行のビット列が、それぞれ分割データとなる。図１１の例では、ビット列ａｄ0，ａｄ1，ａｄ2，ａｄ3を各行に持つ行列Ａｄが単位行列化されたときの、行列Ｄｘｏｒの各行のビット列を、それぞれｄｘｏｒ0’，ｄｘｏｒ1’，ｄｘｏｒ2’，ｄｘｏｒ3’と表している。この場合、ビット列ｄｘｏｒ0’，ｄｘｏｒ1’，ｄｘｏｒ2’，ｄｘｏｒ3’は、それぞれ分割データＤ10，Ｄ11，Ｄ12，Ｄ13を表す。
【０１３１】
また、符号化処理部２４０は、最初に選択したｍ個の冗長データに基づく行列Ａｄが単位行列化できなかった場合には、同じ部分ブロックに基づく次の冗長データを基にビット列を復元し、このビット列を行列Ａｄに加えて再度単位行列化を行う。このとき、復元されたビット列に対応する排他的論理和データも行列Ｄｘｏｒに加え、この行列に対して、ビット列が加えられた行列Ａｄに施した処理と同じ処理を施す。ビット列が加えられた行列Ａｄのうちｍ行分の行列を単位行列化できた場合には、単位行列の各行に対応する行列Ｄｘｏｒの行が、それぞれ分割データとなる。
【０１３２】
ところで、符号化データが情報処理装置２００に伝送されて伸張されるまでの間には、例えば、パケットの消失などによりデータの一部が欠落することがある。このため、伸張処理部２３０によって伸張された符号化データには、同一部分ブロックに基づいて符号化されたすべての冗長データが含まれるとは限らない。しかし、冗長データの欠落があった場合でも、同一部分ブロックに基づいて符号化された複数の冗長データのうち、少なくともｍ個の冗長データを基に生成した行列Ａｄを単位行列化することができれば、部分ブロック内のすべての分割データを復元することができる。
【０１３３】
次に、図１２は、復号化処理部の処理手順の例を示すフローチャートである。なお、図１２のフローチャートは、送信対象データの先頭からｌ番目の部分ブロックに含まれる分割データＤl0，Ｄl1，・・・，Ｄl(m-1)を復号化する処理手順を示している。従って、送信対象データのすべてを復号化するためには、図１２の処理が、部分ブロックの個数であるｈ回だけ繰り返される。
【０１３４】
［ステップＳ１１１］復号化処理部２４０は、伸張された、同一部分ブロックに基づく冗長データのうち、ｍ個の冗長データを選択する。そして、選択したｍ個の冗長データに記述された行番号を基に、符号化行列Ａからｍ個のビット列を復元する。
【０１３５】
［ステップＳ１１２］復号化処理部２４０は、ｍ個の冗長データから復元したｍ個のビット列を行列配置した行列Ａｄ（図１２では“Ａｄmm”と表記）を生成する。これとともに、対応する冗長データから抽出したｍ個の排他的論理和データを行列配置した行列Ｄｘｏｒ（図１２では“行列Ｄｘｏｒmm”と表記）を生成する。
【０１３６】
［ステップＳ１１３］復号化処理部２４０は、行列Ａｄを上三角行列化する。また、上三角行列化処理時に行列Ａｄに施した処理と同じ処理を、行列Ｄｘｏｒにも施す。なお、このステップＳ１１３の処理については、後の図１３においてさらに詳しく説明する。
【０１３７】
［ステップＳ１１４］復号化処理部２４０は、行列Ａｄを上三角行列化できたか否かを判定する。上三角行列化できた場合には、ステップＳ１１９の処理が実行され、上三角行列化できなかった場合には、ステップＳ１１５の処理が実行される。
【０１３８】
［ステップＳ１１５］復号化処理部２４０は、伸張された、同一部分ブロックに基づく冗長データに、未選択の冗長データが残っているか否かを判定する。未選択の冗長データがある場合には、ステップＳ１１６の処理が実行され、未選択の冗長データがない場合には、ステップＳ１２１の処理が実行される。
【０１３９】
［ステップＳ１１６］復号化処理部２４０は、未選択の冗長データの１つを選択し、選択した冗長データに記述された行番号を元に、符号化行列Ａからビット列を復元する。
［ステップＳ１１７］復号化処理部２４０は、上三角化行列化処理が未完の状態の行列Ａｄに対して、ステップＳ１１６で復元したビット列を新たな行として加え、行を加えた行列Ａｄを上三角行列化する。これとともに、処理が未完の状態の行列Ｄｘｏｒに対して、ステップＳ１１６で選択した冗長データから抽出した排他的論理和データを新たな行として加え、行を加えた行列Ｄｘｏｒに対して、行列Ａｄに施した処理と同じ処理を施す。
【０１４０】
［ステップＳ１１８］復号化処理部２４０は、行列Ａｄのうちｍ行分の行列を上三角行列化できたか否かを判定する。上三角行列化できた場合には、ステップＳ１１９の処理が実行され、上三角行列化できなかった場合には、ステップＳ１１５の処理が実行される。
【０１４１】
［ステップＳ１１９］復号化処理部２４０は、行列Ａｄを単位行列化するとともに、行列Ａｄに施した処理と同じ処理を、行列Ｄｘｏｒに対して施す。
［ステップＳ１２０］復号化処理部２４０は、ステップＳ１１９による処理後の行列Ｄｘｏｒの各行のビット列のうち、行列Ａｄ内の単位行列に対応するｍ行のビット列を、それぞれ分割データとして出力する。
【０１４２】
［ステップＳ１２１］行列Ａｄを上三角化行列化できない場合、この行列Ａｄを単位行列化することもできない。このため、復号化処理部２４０は、復号化に失敗したと判定し、例えば、復号化に失敗したことを表示装置に表示させる。
【０１４３】
なお、符号化処理時に、冗長データに行番号の代わりにビット列そのものが格納された場合には、復号化処理部２４０は、ステップＳ１１１，Ｓ１１６において、符号化行列Ａを参照することなく、冗長データからビット列を直接抽出できる。
【０１４４】
図１３は、図１２のステップＳ１１３の処理手順の例を示すフローチャートである。
［ステップＳ１４１］復号化処理部２４０は、変数ｉを０とする。変数ｉは、行列Ａｄのうち処理対象とする行数を指定するものである。
【０１４５】
［ステップＳ１４２］復号化処理部２４０は、変数ｊを０とする。変数ｊは、行列Ａｄのうち比較対象とする行数を指定するものである。
［ステップＳ１４３］復号化処理部２４０は、ｊの値がｉの値と一致するか否かを判定する。各値が一致する場合には、ステップＳ１５０の処理が実行され、各値が一致しない場合には、ステップＳ１４４の処理が実行される。
【０１４６】
［ステップＳ１４４］復号化処理部２４０は、ｍビットの基準ビット列をｊビットだけ右シフトし、比較ビット列ｃに設定する。基準ビット列は、ｍビットのうち最上位ビットのみ１とされ、他のビットが０とされたビット列である。
【０１４７】
［ステップＳ１４５］復号化処理部２４０は、比較ビット列ｃと、行列Ａｄのｉ行目のビット列ａｄiとの論理積が、０であるか否かを判定する。論理積が０である場合には、ステップＳ１４９の処理が実行され、論理積が０以外の値である場合には、ステップＳ１４６の処理が実行される。
【０１４８】
［ステップＳ１４６］復号化処理部２４０は、比較ビット列ｃと、行列Ａｄのｊ行目のビット列ａｄjとの論理積が、０であるか否かを判定する。論理積が０である場合には、ステップＳ１４７の処理が実行され、論理積が０以外の値である場合には、ステップＳ１４８の処理が実行される。
【０１４９】
［ステップＳ１４７］復号化処理部２４０は、行列Ａｄのｉ行目のビット列ａｄiとｊ行目のビット列ａｄjとを入れ替えるとともに、行列Ｄｘｏｒのｉ行目の排他的論理和データｄｘｏｒiとｊ行目の排他的論理和データｄｘｏｒjとを入れ替える。
【０１５０】
［ステップＳ１４８］復号化処理部２４０は、行列Ａｄのｉ行目のビット列ａｄiとｊ行目のビット列ａｄjとの排他的論理和を演算し、その演算結果によって、ｉ行目のビット列ａｄiを更新する。これとともに、行列Ｄｘｏｒのｉ行目の排他的論理和データｄｘｏｒiとｊ行目の排他的論理和データｄｘｏｒjとの排他的論理和を演算し、その演算結果によって、ｉ行目の排他的論理和データｄｘｏｒiを更新する。
【０１５１】
［ステップＳ１４９］復号化処理部２４０は、変数ｊに１を加算する。この後、ステップＳ１４３の処理が実行される。
［ステップＳ１５０］復号化処理部２４０は、変数ｉに１を加算する。
【０１５２】
［ステップＳ１５１］復号化処理部２４０は、変数ｉが（ｍ−１）の値と一致するか否かを判定する。各値が一致する場合には、図１２のステップＳ１１４が実行され、各値が一致しない場合には、ステップＳ１４２の処理が実行される。
【０１５３】
なお、以上の図１３では、あらかじめｍ個の冗長データを基にｍ行ｍ列の行列を生成した後の処理手順を例示した。しかし、この他に例えば、冗長データを１つずつ読み込みながら、ステップＳ１４７の入れ替え処理や、ステップＳ１４８の排他的論理和演算処理が必要か否かを判定していき、ｍ行ｍ列の行列を順次生成していく処理手順としてもよい。この場合、復号化処理部２４０は、例えば、ステップＳ１４２の処理の直前に、新たな冗長データに基づくビット列ａｄiおよび排他的論理和データｄｘｏｒiを取得して、ステップＳ１４３以降の処理を実行する。また、ステップＳ１５０の直前において、ビット列ａｄiおよび排他的論理和データｄｘｏｒiを、それぞれ行列Ａｄの最終行および行列Ｄｘｏｒの最終行に付加して、各行列の行数を更新する。
【０１５４】
図１４は、上三角行列化処理の具体例を説明する図である。
図１４では、図５の例と同様に、符号化行列Ａの列数ｍが４であったものとする。このとき、復号化処理部２４０は、送信側の情報処理装置１００で生成された、図５に示した冗長データＥ10，Ｅ11，Ｅ12，Ｅ13，Ｅ14，Ｅ15のうち、冗長データＥ10，Ｅ12，Ｅ13，Ｅ14，Ｅ15を正常に取得できたとする。一方、冗長データＥ11については、正常に取得できなかったものとする。
【０１５５】
復号化処理部２４０は、図１２のステップＳ１１１において、まず、ｍ個の冗長データＥ10，Ｅ11，Ｅ12，Ｅ13，を基に、それぞれビット列を復元し、ステップＳ１１２において、行列Ａｄおよび行列Ｄｘｏｒを生成する。この状態では、行列Ａｄの０行目のビット列ａｄ0は“１１００”、１行目のビット列ａｄ1は“００１１”、２行目のビット列ａｄ2は“０１０１”、３行目のビット列ａｄ3は“０１１１”となる。
【０１５６】
このような行列Ａｄが図１３の処理に投入されると、まず、ｉ＝０のときは、ステップＳ１４３でｊ＝ｉとなって、ステップＳ１５０の処理に移行し、行列Ａｄは変化しない。次に、ｉ＝１のとき、ｊ＝０，１のいずれの場合でも、ステップＳ１４５での論理積が０となり、行列Ａｄは変化しない。
【０１５７】
次に、ｉ＝２となると、ｊ＝０のときはステップＳ１４５での論理積が０となり、行列Ａｄは変化しない。次に、ｊ＝１のとき、ステップＳ１４５において、比較ビット列ｃ（“０１００”）とビット列ａｄ2（“０１０１”）との論理積が０にならないため、ステップＳ１４６に移行する。ステップＳ１４６では、比較ビット列ｃ（“０１００”）とビット列ａｄ1（“００１１”）との論理積が０になるため、ステップＳ１４７に移行し、行列Ａｄの１行目と２行目とが入れ替えられ、行列Ａｄが更新される。このとき、行列Ｄｘｏｒについても同様に、１行目と２行目とが入れ替えられて、行列Ｄｘｏｒが更新される。
【０１５８】
次に、ｉ＝３となると、ｊ＝０のときは行列Ａｄは変化しない。次に、ｊ＝１のとき、比較ビット列ｃ（“０１００”）とビット列ａｄ3（“０１１１”）との論理積が０にならないため、ステップＳ１４６に移行する。ステップＳ１４６では、比較ビット列ｃ（“０１００”）とビット列ａｄ1（“０１０１”）との論理積が０にならないため、ステップＳ１４８に移行する。ステップＳ１４８では、行列Ａｄの１行目と３行目との排他的論理和が演算され、その演算結果であるビット列“００１０”によって３行目が更新される。すなわち、このステップＳ１４８では、行列Ａｄの３行目の上位から１ビットの数値１が不要であるので、この数値を０に変換する処理が行われる。また、ステップＳ１４８では、行列Ｄｘｏｒについても同様に、１行目と３行目との排他的論理和が演算されて、その演算結果により３行目が更新される。
【０１５９】
次に、ｊ＝２のとき、比較ビット列ｃ（“００１０”）とビット列ａｄ3（“００１０”）との論理積が０にならないため、ステップＳ１４６に移行する。ステップＳ１４６では、比較ビット列ｃ（“００１０”）とビット列ａｄ2（“００１１”）との論理積が０にならないため、ステップＳ１４８に移行する。ステップＳ１４８では、行列Ａｄの２行目と３行目との排他的論理和が演算され、その演算結果であるビット列“０００１”によって３行目が更新される。また、ステップＳ１４８では、行列Ｄｘｏｒについても同様に、２行目と３行目との排他的論理和が演算されて、その演算結果により３行目が更新される。
【０１６０】
以上の処理の後、図１２のステップＳ１１４では、行列Ａｄの１行目の上位から０ビット、２行目の上位から０ビットおよび１ビット、３行目の上位から０ビット〜２ビットのすべての値が０であるか否かが判定される。図１４の例では、これらのすべてが０であるので、行列Ａｄは上三角行列に変換されたことになる。
【０１６１】
なお、図１４に示した処理例では、最初に選択したｍ個の冗長データＥ10，Ｅ12，Ｅ13，Ｅ14に基づく行列Ａｄを、上三角行列に変換することができた。しかし、ｍ個の冗長データに基づく行列Ａｄを上三角行列に変換できなかった場合には、ステップＳ１１６に移行して、次の冗長データから求めたビット列および排他的論理和データが、それぞれ行列Ａｄおよび行列Ｄｘｏｒに加えられる。ステップＳ１１７では、新たな冗長データから求めたビット列を“ビット列ａｄiとして、図１３のステップＳ１４２からステップＳ１５０までの処理が実行される。そして、ステップＳ１１８では、行列Ａｄの０行目から（ｍ−１）行目までが上三角行列であるか否かが判定される。
【０１６２】
次に、図１５は、図１２のステップＳ１１９の処理手順の例を示すフローチャートである。
［ステップＳ１７１］復号化処理部２４０は、変数ｉを（ｍ−２）とする。この処理により、比較対象の行が、上三角行列における最も下の行から２行目に設定される。
【０１６３】
［ステップＳ１７２］復号化処理部２４０は、変数ｉが０であるか否かを判定する。変数ｉが１以上である場合、ステップＳ１７３の処理が実行され、変数ｉが０である場合、単位行列化処理が終了される。
【０１６４】
［ステップＳ１７３］復号化処理部２４０は、前述の基準ビット列を（ｉ＋１）ビット分だけ右シフトし、比較ビット列ｃに設定する。
［ステップＳ１７４］復号化処理部２４０は、処理対象の行の行数を示す変数ｊに、変数ｉの値を設定する。
【０１６５】
［ステップＳ１７５］復号化処理部２４０は、変数ｊの値が０以上であるか否かを判定する。変数ｊが０以上の場合には、ステップＳ１７７の処理が実行され、変数ｊが０未満の場合には、ステップＳ１７６の処理が実行される。
【０１６６】
［ステップＳ１７６］復号化処理部２４０は、変数ｉを１減算し、比較対象の行を１つ上に移動させる。この後、ステップＳ１７２の処理が実行される。
［ステップＳ１７７］復号化処理部２４０は、比較ビット列ｃと行列Ａｄのｊ行目のビット列ａｄjとの論理積が、０であるか否かを判定する。論理積が０である場合、ステップＳ１７９の処理が実行され、論理積が０でない場合、ステップＳ１７８の処理が実行される。
【０１６７】
［ステップＳ１７８］復号化処理部２４０は、行列Ａｄのｉ行目のビット列ａｄiとｊ行目のビット列ａｄjとの排他的論理和を演算し、その演算結果によって、ｊ行目のビット列ａｄjを更新する。これにより、行列Ａｄのｊ行目における上位からｉビット目の１が、０に変換される。また、復号化処理部２４０は、行列Ｄｘｏｒのｉ行目の排他的論理和データｄｘｏｒiとｊ行目の排他的論理和データｄｘｏｒjとの排他的論理和を演算し、その演算結果によって、ｊ行目の排他的論理和データｄｘｏｒjを更新する。
【０１６８】
［ステップＳ１７９］復号化処理部２４０は、変数ｊを１減算し、処理対象の行を１つ上に移動させる。この後、ステップＳ１７５の処理が実行される。
以上の図１５の処理により、上三角行列に変換された行列Ａｄの、ｙ行ｙ列（ただし、ｙは０から（ｍ−１）までの整数）のビットを除く右上側半分のビットが、すべて０に変換されて、単位行列が生成される。
【０１６９】
以上説明した第２の実施の形態では、送信対象データが情報処理装置１００で符号化されることにより、例えば、伝送路上でのパケットの消失などが発生した場合でも、受信側の情報処理装置２００において送信対象データを復元し得る。このため、ＵＤＰなどの無手順方式の通信プロトコルを使用して送信対象データを送信する際でも、データ伝送の信頼性を高めることができる。
【０１７０】
また、送信対象データは、符号化された後さらに、符号化処理で用いたビット列を用いて圧縮されるので、送信されるデータのサイズを小さくすることができる。すなわち、無手順方式の通信プロトコルを使用し、なおかつ、送信されるデータのサイズが小さくされることで、実効通信速度を高めることができる。従って、データ伝送の信頼性を高め、なおかつ、通信速度を向上させることができる。
【０１７１】
また、データの圧縮および伸張の処理時には、データの符号化および復号化で共通に用いる符号化ビット列が使用される。このため、送信側および受信側に圧縮および伸張のための特別なデータを事前に記憶しておくことや、送信側と受信側で圧縮および伸張のための特別なデータを事前に受け渡しておくことの必要がなくなる。従って、処理を効率化できるとともに、送信側および受信側の各装置のメモリ容量を節約できる。
【０１７２】
なお、符号化行列Ａは、例えば、次のような処理手順で生成することができる。図１６は、符号化行列の生成手順の例を示すフローチャートである。この図１６の処理は、例えば、送信側の情報処理装置１００で実行される。また、生成された符号化行列Ａは、実際のデータ転送処理の前に受信側の情報処理装置２００に受け渡される。
【０１７３】
［ステップＳ１９１］情報処理装置１００は、ｎ行ｍ列の符号化行列Ａを初期化する。
［ステップＳ１９２］情報処理装置１００は、符号化行列Ａにおけるｔ行目のｔビット目の位置に１をセットする（ただし、ｔは０以上（ｍ−１）以下の整数）。
【０１７４】
［ステップＳ１９３］情報処理装置１００は、変数ｕを０とする。
［ステップＳ１９４］情報処理装置１００は、符号化行列Ａのｕ列のランダムな位置に１をセットする。
【０１７５】
［ステップＳ１９５］情報処理装置１００は、ｕ列における１の個数が（ｎ−ｍ＋１）以上であるか否かを判定する。１の個数が（ｎ−ｍ＋１）以上である場合には、ステップＳ１９６の処理が実行され、１の個数が（ｎ−ｍ＋１）未満である場合には、ステップＳ１９４の処理が再度実行される。
【０１７６】
［ステップＳ１９６］情報処理装置１００は、符号化行列Ａにおけるｕ列を除く他の列に、ｕ列と同じ値を持つものがあるか否かを判定する。ｕ列と同じ列がある場合には、ステップＳ１９７の処理が実行され、ｕ列と同じ列がない場合には、ステップＳ１９８の処理が実行される。
【０１７７】
［ステップＳ１９７］情報処理装置１００は、符号化行列Ａにおけるｕ行目のｕビット目の位置以外の位置に０をセットして初期化する。この後、ステップＳ１９４の処理が実行される。
【０１７８】
［ステップＳ１９８］情報処理装置１００は、変数ｕに１を加算する。
［ステップＳ１９９］情報処理装置は、変数ｕの値が（ｍ−１）と一致するか否かを判定する。（ｍ−１）と一致する場合には、処理が終了され、（ｍ−１）と一致しない場合には、ステップＳ１９４の処理が実行される。
【０１７９】
以上の図１６の処理によれば、ｔ行目のｔビット目の位置がすべて１になるとともに、すべての列が（ｎ−ｍ＋１）以上の１を有し、なおかつ、すべての列の値が異なるものとなる。また、符号化行列Ａの行数ｎを大きくするほど、符号化データを伝送する際の信頼性が高くなる。
【０１８０】
ただし、信頼性をより高くするためには、符号化行列Ａは、単位行列化が容易であることが望ましいが、図１６の処理では、このような条件を満たすような符号化行列Ａが生成されるとは限らない。また、ｎ，ｍの値が大きくなるほど、単位行列化が容易になる行列を求めることは困難になる。従って、実際には例えば、図１６の手順で複数の符号化行列Ａを生成して、それぞれの符号化行列Ａについて適当な回数だけランダムに行を間引きながら単位行列化処理を実行し、単位行列化される確率が最も高い符号化行列Ａを採用する。
【０１８１】
〔第３の実施の形態〕
次に、第３の実施の形態として、第２の実施の形態とは異なる符号化処理および復号化処理が行われる場合の例について説明する。
【０１８２】
図１７は、第３の実施の形態に係る送信側／受信側の情報処理装置の機能を示すブロック図である。なお、この図１７では、図４に対応する機能については同じ符号を付して示している。
【０１８３】
図１７において、情報処理装置１００ａ，２００ａは、それぞれ第２の実施の形態における情報処理装置１００，２００にそれぞれ対応する装置であり、情報処理装置１００ａから情報処理装置２００ａに対してデータが送信される。情報処理装置１００ａ，２００ａは、例えば、図３に示したハードウェア構成を有し、図１に示したようにネットワークを通じて互いに接続されている。
【０１８４】
送信側の情報処理装置１００ａは、符号化処理部１２０ａ、圧縮処理部１３０および送信処理部１４０を備えている。圧縮処理部１３０および送信処理部１４０は、第２の実施の形態の圧縮処理部１３０および送信処理部１４０と同じ処理を行う。ただし、符号化処理部１２０ａから出力される符号化データの構成が異なることから、圧縮処理部１３０および送信処理部１４０での取り扱いの単位となる冗長データの内容は、第２の実施の形態とは異なるものとなる。
【０１８５】
符号化処理部１２０ａは、第２の実施の形態の符号化処理部１２０と同様に、送信されたデータがネットワーク上などで消失した場合でも、消失したデータを受信側で復元し得るように、送信対象データを符号化する。また、この符号化処理の際に、受信側と共有される符号化用ビット列が使用される点も、第２の実施の形態と同じである。ただし、符号化処理部１２０ａにおける符号化処理の手順は、第２の実施の形態の符号化処理部１２０とは異なる。
【０１８６】
符号化処理部１２０ａは、送信対象データをｍビット（ただし、ｍは１以上の整数）ごとに分割した分割データを、符号化処理の単位とする。一方、符号化用ビット列のビット数を（ｍ×ｎ）ビット（ただし、ｎはｍ以上の整数）とし、符号化用ビット列をｍビットごとに分割してｎ個の単位ビット列を選択する。
【０１８７】
符号化処理部１２０ａは、分割データと単位ビット列とをプール代数の連立方程式に代入し、その解を求める。そして、求めた解と、その解を求める際に使用した単位ビット列の符号化用ビット列における位置を示す情報とを結合し、符号化データとして出力する。
【０１８８】
本実施の形態では、符号化用ビット列は、ｎ行ｍ列の符号化行列Ａとして用意されるものとする。そして、単位ビット列の位置を示す情報としては、符号化行列Ａの行番号が使用される。なお、本実施の形態におけるｍおよびｎの値は、第２の実施の形態におけるｍおよびｎの値とそれぞれ同一である必要はない。
【０１８９】
受信側の情報処理装置２００ａは、受信処理部２２０、伸張処理部２３０および復号化処理部２４０ａを備えている。受信処理部２２０および伸張処理部２３０は、第２の実施の形態の受信処理部２２０および伸張処理部２３０と同じ処理を行う。ただし、受信処理部２２０および伸張処理部２３０が取り扱う冗長データの内容は、第２の実施の形態とは異なっている。
【０１９０】
復号化処理部２４０ａは、伸張処理部２３０によって伸張されて得られた符号化データを復号化する。復号化処理部２４０ａは、伸張された符号化データから抽出した位置情報に基づいて、符号化用ビット列（本実施の形態では符号化行列Ａ）から単位ビット列を復元する。そして、復元した単位ビット列と、これに対応する解とを連立方程式に代入することで、送信対象データを復元する。
【０１９１】
図１８は、第３の実施の形態の符号化処理について説明する図である。
ここでは、１つの分割データの各ビットを上位から“ｂ0，ｂ1，・・・，ｂm-1”とする。また、符号化用ビット列として、ｎ行ｍ列の符号化行列Ａを用いる。図１８の例では、ｎ＝５，ｍ＝４である。そして、符号化行列Ａのｉ行目（ただし、ｉは０以上の整数）のビット列ａiの各ビットを上位から“ａi0，ａi1，・・・，ａi(m-1)”とする。
【０１９２】
送信側の情報処理装置１００ａにおいて、符号化処理部１２０ａは、上記の分割データと、符号化行列Ａのｉ行目のビット列ａiとを用いて、次の式（１）に示すプール代数の連立方程式の解ｐiを求める。また、このような演算を符号化行列Ａの各行のビット列を用いて行い、解ｐ0，ｐ1，・・・，ｐn-1を求める。
ｂ0ａi0＋ｂ1ａi1＋ｂ2ａi2＋・・・＋ｂm-1ａi(m-1)＝ｐi              ・・・（１）
上記の式（１）は、分割データの１つのビットと、ビット列における対応するビットとの論理積を演算し、すべてのビットに基づく論理積を加算するものである。また、解ｐiは、式（１）の左辺の演算結果が奇数のとき１とされ、偶数のとき０とされる。符号化処理部１２０ａは、式（１）から求められた解ｐ0，ｐ1，・・・，ｐn-1と、解ｐ0，ｐ1，・・・，ｐn-1をそれぞれ求める際に使用されたビット列の符号化行列Ａにおける行番号とを、符号化データに含める。
【０１９３】
図１８では、５行４列の符号化行列Ａを基に４ビットの分割データを符号化する例を示している。この場合、符号化行列Ａの各行に対応する式（１）の解ｐ0，ｐ1，ｐ2，ｐ3，ｐ4として、それぞれ１，１，１，０，１が算出される。符号化処理部１２０ａは、解ｐ0，ｐ1，ｐ2，ｐ3，ｐ4のそれぞれと、対応する行の行番号との組を、符号化データに含める。このような処理が分割データの数だけ繰り返され、１つの行番号に対して分割データの数だけの解が求められ、それらの解が符号化データに記述される。
【０１９４】
なお、後の図２０で示す符号化処理手順の例では、一定個数の分割データと１つのビット列とを基に算出された解と、ビット列の符号化行列Ａにおける行番号との組が、１つの冗長データとして出力される。
【０１９５】
図１９は、第３の実施の形態の復号化処理について説明する図である。
受信側の情報処理装置２００ａにおいて、復号化処理部２４０ａは、伸張された符号化データから行番号を抽出して、この行番号を基に符号化行列Ａからビット列ａ0，ａ1，・・・，ａ(n-1)を復元する。また、復号化処理部２４０ａは、各ビット列に対応する解を先頭から順次選択することで、１つの分割データに基づく解を取得して、取得した解とビット列とを式（１）の連立方程式に代入する。すなわち、ビット列におけるビット１に対応するデータビットを有効とし、ビット０に対応するデータビットを消去した連立方程式を生成する。そして、復号化処理部２４０ａは、生成した連立方程式を解くことで、ｍビットの分割データを復元する。
【０１９６】
図１９の例では、復号化処理部２４０ａは、伸張されたデータから、行番号０，１，２，４と、これらの行番号に対応する解を取得できたものとする。ただし、行番号３と、これに対応する解は、パケットの消失などにより取得できなかったものとする。
【０１９７】
この場合、行番号に基づいて、ビット列“１００１”“００１１”“１１００”“０１０１”が符号化行列Ａから復元され、これらのビット列と対応する解とが、連立方程式に代入される。そして、この連立方程式を解くことで、部分ブロックの各ビットｂ0，ｂ1，ｂ2，ｂ3として、それぞれ０，１，０，１が得られる。このように、伸張されたデータに欠損が生じている場合でも、少なくともｍ個のビット列に対応する解が得られれば、分割データを復元できる場合がある。
【０１９８】
ところで、符号化処理部１２０ａによる連立方程式の計算は、分割データの各ビットｂiとビット列ａiの各ビットとの論理積を演算した後、その演算結果における１の数を数えること、すなわち、パリティビットを見ることと同等である。一方、復号化処理部２４０ａによって連立方程式を解く処理は、第２の実施の形態とほぼ同様の排他的論理和演算を用いることで、効率よく実行できる。以下、このような処理を用いた場合の符号化処理および復号化処理の処理手順を、フローチャートを用いて説明する。
【０１９９】
図２０は、符号化処理部の処理手順の例を示すフローチャートである。
［ステップＳ２１１］符号化処理部１２０ａは、変数ｉを０とする。
［ステップＳ２１２］符号化処理部１２０ａは、変数ｊを０とする。
【０２００】
［ステップＳ２１３］符号化処理部１２０ａは、変数ｋを０とする。
［ステップＳ２１４］符号化処理部１２０ａは、ｍビット分の解に相当するｍビット列ｐｍjの各ビットを０で初期化する。このｍビット列は、１つのビット列ａiに対応する解のうち、ｍ個の部分ブロックに基づく解を示すものである。
【０２０１】
［ステップＳ２１５］符号化処理部１２０ａは、（ｍ×ｊ＋ｋ）の値が、送信対象データのサイズ（ビット数）を超えたか否かを判定する。送信対象データのサイズを超えた場合には、送信対象データの末端まで処理が終了したと判定され、ステップＳ２２１の処理が実行される。一方、送信対象データのサイズを超えていない場合には、ステップＳ２１６の処理が実行される。
【０２０２】
［ステップＳ２１６］符号化処理部１２０ａは、（ｍ×ｊ＋ｋ）番目の分割データＤ’m*j+kと、符号化行列Ａのｉ行目のビット列ａiとの論理積を、一時データｆに代入する。
［ステップＳ２１７］符号化処理部１２０ａは、一時データｆの各ビットの１の数を数える。１の数が奇数の場合には、ステップＳ２１８の処理が実行され、１の数が偶数の場合には、ステップＳ２１９の処理が実行される。
【０２０３】
［ステップＳ２１８］符号化処理部１２０ａは、ｍビット列ｐｍjの上位からｋビット目に１をセットする。
［ステップＳ２１９］符号化処理部１２０ａは、変数ｋに１を加算する。
【０２０４】
［ステップＳ２２０］符号化処理部１２０ａは、変数ｋが（ｍ−１）と一致するか否かを判定する。変数ｋが（ｍ−１）より小さい場合には、ステップＳ２１５の処理が実行される。この場合、ステップＳ２１５からステップＳ２１６に移行すると、次の分割データとビット列ａiとの間の比較処理が行われる。ステップＳ２１５〜Ｓ２２０のループ処理により、１つのビット列ａiとｍ個の分割データとが比較され、分割データに基づく計数値がｍビット列ｐｍjの対応ビットにセットされる。一方、変数ｋが（ｍ−１）に達した場合には、ステップＳ２２１の処理が実行される。
【０２０５】
［ステップＳ２２１］符号化処理部１２０ａは、変数ｊに１を加算する。この後、ステップＳ２１３の処理が実行され、次のｍ個分の分割データを基に新たなｍビット列ｐｍjが生成される。
【０２０６】
［ステップＳ２２２］この時点では、１つのビット列ａiとすべての分割データＤ’0，Ｄ’1，Ｄ’2・・・との比較処理が終了される。符号化処理部１２０ａは、符号化行列Ａにおけるビット列ａiの行番号を示す変数ｉと、ｍビット列ｐｍ0，ｐｍ1，・・・，ｐｍj-1のそれぞれとを結合して、冗長データを生成して出力する。すなわち、本実施の形態における１つの冗長データには、行番号（すなわち、変数ｉ）と、ｍ個の分割ブロックに基づく解（すなわち、１つのｍビット列）とが格納される。
【０２０７】
なお、第２の実施の形態と同様に、冗長データには、行番号の代わりにビット列そのものが格納されてもよい。
［ステップＳ２２３］符号化処理部１２０ａは、変数ｉが（ｎ−１）と一致するか否かを判定する。変数ｉが（ｎ−１）より小さい場合には、ステップＳ２２４の処理が実行される。一方、変数ｉが（ｎ−１）と一致した場合、符号化行列Ａのすべての行を用いた処理が実行済みであるので、処理が終了される。
【０２０８】
［ステップＳ２２４］符号化処理部１２０ａは、変数ｉに１を加算する。この後、ステップＳ２１２以降の処理が実行され、新たなビット列を用いて解が算出される。
以上の手順で出力された冗長データが、圧縮処理部１３０に順次供給され、図８に示した圧縮処理が実行される。そして、圧縮処理部１３０から出力された圧縮データは、送信処理部１４０によりパケット化される。このとき、１つの冗長データに対応するデータが、１つのパケットに格納される。
【０２０９】
受信側の情報処理装置２００ａでは、受信処理部２２０によりパケットから冗長データが抽出され、この冗長データが伸張処理部２３０によって伸張された後、復号化処理部２４０ａに供給される。
【０２１０】
図２１は、復号化処理部の処理手順の例を示すフローチャートである。
［ステップＳ２４１］復号化処理部２４０ａは、伸張された符号化データから、ｍ個の行番号、すなわち、図２０のステップＳ２２２で出力された変数ｉのうちのｍ個を選択し、選択した行番号が格納されたすべての冗長データを読み込む。そして、冗長データに格納された行番号に対応するｍ個のビット列を、符号化行列Ａから復元する。
【０２１１】
なお、冗長データに行番号の代わりにビット列そのものが格納されている場合には、復号化処理部２４０ａは、符号化行列Ａを参照することなく、ビット列を冗長データから直接取得することが可能である。
【０２１２】
［ステップＳ２４２］復号化処理部２４０ａは、復元したｍ個のビット列を行列配置したｍ行ｍ列の行列Ａｄ（図２１では“Ａｄmm”と表記）を生成する。これとともに、冗長データから抽出したｍビット列ｐｍを行列配置したｍ行の行列Ｐｄ（図２１では“Ｐｄm”と表記）を生成する。行列Ｐｄでは、同一の行番号が格納された冗長データから順次抽出されたｍビット列ｐｍが、行に沿った方向に並べられる。また、列に沿った方向には、同じｍ個の分割データを基に生成されたｍビット列ｐｍが並べられる。
【０２１３】
［ステップＳ２４３］復号化処理部２４０ａは、行列Ａｄを上三角行列化するとともに、上三角行列化処理時に行列Ａｄに施した処理と同じ処理を、行列Ｐｄにも施す。このステップＳ２４３での処理は、図１２のステップＳ１１３において、行列Ｄｘｏｒを行列Ｐｄに置き換えた場合の処理と同じである。
【０２１４】
［ステップＳ２４４］復号化処理部２４０ａは、行列Ａｄを上三角行列化できたか否かを判定する。上三角行列化できた場合には、ステップＳ２４９の処理が実行され、上三角行列化できなかった場合には、ステップＳ２４５の処理が実行される。
【０２１５】
［ステップＳ２４５］復号化処理部２４０ａは、伸張された符号化データに未選択の行番号があるか否かを判定する。未選択の行番号がある場合には、ステップＳ２４６の処理が実行され、すべての行番号を選択済みの場合には、ステップＳ２５１の処理が実行される。
【０２１６】
［ステップＳ２４６］復号化処理部２４０ａは、未選択の行番号が格納された冗長データを選択し、行番号を基に符号化行列Ａからビット列を復元する。
［ステップＳ２４７］復号化処理部２４０ａは、上三角化行列化処理が未完の状態の行列Ａｄに対して、ステップＳ２４６で復元したビット列を新たな行として加え、行を加えた行列Ａｄを上三角行列化する。これとともに、処理が未完の状態の行列Ｐｄに対して、ステップＳ２４６で選択した冗長データから抽出したすべてのｍビット列ｐｍを新たな行として加え、行を加えた行列Ｐｄに対して、行列Ａｄに施した処理と同じ処理を施す。なお、このステップＳ２４７の処理は、図１２のステップＳ１１７において、行列Ｄｘｏｒを行列Ｐｄに置き換えた場合の処理と同じである。
【０２１７】
［ステップＳ２４８］復号化処理部２４０ａは、行列Ａｄのうちｍ行分の行列を上三角行列化できたか否かを判定する。上三角行列化できた場合には、ステップＳ２４９の処理が実行され、上三角行列化できなかった場合には、ステップＳ２４５の処理が実行される。
【０２１８】
［ステップＳ２４９］復号化処理部２４０ａは、行列Ａｄを単位行列化するとともに、行列Ａｄに施した処理と同じ処理を、行列Ｐｄに対して施す。なお、このステップＳ２４９の処理は、図１２のステップＳ１１９において、行列Ｄｘｏｒを行列Ｐｄに置き換えた場合の処理と同じである。
【０２１９】
［ステップＳ２５０］復号化処理部２４０ａは、ステップＳ２４９による処理後の行列Ｐｄのうち、行列Ａｄ内の単位行列に対応するｍ行の行列における各列のビット列を、それぞれ分割データとして出力する。
【０２２０】
［ステップＳ２５１］復号化処理部２４０ａは、復号化に失敗したと判定し、例えば、復号化に失敗したことを表示装置に表示させる。
なお、以上の図２１の処理では、すべての分割データに対応するｍビット列が行列Ａｄに組み込まれて、一度に演算の対象となっていた。しかし、分割データのうち１つあるいは複数の分割データに対応するｍビット列ごとに、図２１の処理が実行されてもよい。
【０２２１】
また、上記処理において、図２０のステップＳ２２２では、１つのビット列の行番号ｉが出力され、その後に、すべての分割データに基づくｍビット列ｐｍ0，ｐｍ1，・・・，ｐｍj-1が冗長データとして出力されてもよい。この場合、ｍビット列のそれぞれがｍ個分の解として１つの冗長データに格納され、圧縮処理時の処理単位とされる。一方、行番号ｉの領域は圧縮対象とされない。圧縮処理後の圧縮データは、例えば、行番号ｉが格納されるパケットと、ｍビット列を含む１つの冗長データが格納されるパケットとが、個別に生成される。
【０２２２】
受信側の情報処理装置２００ａでは、受信処理部２２０によりパケットから行番号ｉとｍビット列とが抽出され、ｍビット列のそれぞれが伸張処理部２３０により伸張される。これにより、ｍ個の分割データを用いてそれぞれ演算された解（ｍビット列）が復元される。復号化処理では、行番号ｉに基づくビット列と、このビット列とすべての分割データとを用いて演算された解とが、行列Ａｄと行列Ｐｄの同じ行に配置されて、行列Ａｄに対する単位行列化処理が行われる。
【０２２３】
以上説明した第３の実施の形態の符号化処理によれば、受信側の情報処理装置２００において受信データの欠損があった場合でも、受信データを伸張後に復号化することで、元の送信対象データを復元することが可能になる。
【０２２４】
そして、第３の実施の形態では、上記の符号化処理により得られた符号化データが、符号化処理時に用いられた符号化用ビット列（例えば、符号化行列Ａ）を基に圧縮される。また、受信側では、受信データを符号化用ビット列（例えば、符号化行列Ａ）を基に伸張された後、上記の復号化処理が行われる。従って、情報処理装置間で伝送されるデータ量を小さくし、通信速度を高速化することができる。
【０２２５】
なお、上記の各実施の形態で示した装置が有する機能は、コンピュータによって実現することができる。その場合には、上記機能の処理内容を記述したプログラムが提供される。そして、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。
【０２２６】
プログラムを流通させる場合には、例えば、そのプログラムが記録された光ディスクなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、そのプログラムを、サーバコンピュータからネットワークを介して他のコンピュータに転送することもできる。
【０２２７】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、そのプログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０２２８】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  コンピュータに、
符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順、
前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順、
を実行させるデータ符号化プログラム。
【０２２９】
（付記２）  前記置換手順では、前記符号化用ビット列から一致するビット列が探索されない前記符号化データの範囲に、前記開始符号と同じビット列が含まれていた場合には、当該ビット列を異なるビット列である識別符号に置換する、
付記１記載のデータ符号化プログラム。
【０２３０】
（付記３）  前記開始符号と前記識別符号は、それぞれの先頭から複数ビット数分の部分ビット列が一致し、前記部分ビット列の次の値が互いに異なる値とされ、
前記置換手順では、前記符号化用ビット列から一致するビット列が探索されない前記符号化データの範囲に、前記部分ビット列が含まれていた場合に、当該部分ビット列を前記識別符号に置換する、
付記２記載のデータ符号化プログラム。
【０２３１】
（付記４）  前記置換手順では、前記符号化用ビット列から探索する、前記符号化データの一部分と一致するビット列のビット数を可変とし、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と、前記位置情報と、探索されたビット列の長さを示す長さ情報とを組み合わせたビット列に置換する、
付記１〜３のいずれか１つに記載のデータ符号化プログラム。
【０２３２】
（付記５）  前記符号化用ビット列は、前記単位ビット列を行の少なくとも一部として有する符号化行列として用意され、
前記置換手順では、前記符号化データの一部分と一致するビット列を前記符号化行列から探索する方向を可変とし、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と、前記位置情報と、前記符号化行列からのビット列の探索方向を示す方向情報とを組み合わせたビット列に置換する、
付記１〜３のいずれか１つに記載のデータ符号化プログラム。
【０２３３】
（付記６）  前記符号化手順では、前記符号化対象データを所定ビット数ごとに分割した分割データのそれぞれと、前記符号化用ビット列から同一ビット数のビット列を切り出して得られる複数の前記単位ビット列のそれぞれとを組み合わせて演算処理を行い、前記各演算処理による演算結果と、前記演算処理の際に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかである単位ビット列情報とを含む符号化データを生成し、
前記置換手順では、前記符号化データのうち、一の前記単位ビット列と一以上の前記分割データとを用いて演算された前記演算結果が格納された演算結果領域ごとに、前記符号化データの一部分と一致するビット列を前記符号化用ビット列から探索し、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と前記位置情報とを組み合わせたビット列に置換する、
付記１〜５のいずれか１つに記載のデータ符号化プログラム。
【０２３４】
（付記７）  前記コンピュータに、
前記置換手順で処理された前記符号化データを、前記演算結果領域ごとに１つの送信パケットに格納するパケット格納手順、
をさらに実行させる付記６記載のデータ符号化プログラム。
【０２３５】
（付記８）  前記符号化手順では、それぞれｍビットのｎ個の前記単位ビット列（ただし、ｍは１以上の整数であり、ｎはｍ以上の整数）のうち一の単位ビット列における各桁を、前記符号化対象データを分割した分割データをｍ個ごとに選択した分割データ群のうち一の分割データ群に含まれる前記分割データのそれぞれに対応付け、前記一の単位ビット列におけるビット１の位置に対応する前記分割データを選択して、選択した前記分割データの排他的論理和である排他的論理和データを算出し、ｎ個の前記単位ビット列とすべての前記分割データ群との組み合わせごとに算出された前記排他的論理和データと、前記排他的論理和データの演算に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかとを含む前記符号化データを出力し、
前記置換手順では、前記符号化データのうち、一の前記排他的論理和データを少なくとも含むデータ領域ごとに、前記データ領域の一部分と一致するビット列を前記符号化用ビット列から探索する、
付記１〜７のいずれか１つに記載のデータ符号化プログラム。
【０２３６】
（付記９）  前記符号化対象データをｍビット（ただし、ｍは１以上の整数）ごとに分割した分割データのうち一の分割データのビット列をｂ0，ｂ1，ｂ2，・・・，ｂm-1とし、ｎ個（ただし、ｎはｍ以上の整数）の前記単位ビット列のうちｉ番目の前記単位ビット列をａi0，ａi1，ａi2，・・・，ａi(m-1)とし、前記ｉ番目の単位ビット列をプール代数の連立方程式である式（２）に代入したときの解をｐiとすると、
前記符号化手順では、前記一の分割データと０番目から（ｎ−１）番目までの前記単位ビット列とを前記式（２）に代入してｎ個の前記解ｐiを求め、すべての前記分割データについてｎ個の前記解ｐjを求め、求めた前記解ｐjと、前記解ｐjのそれぞれの演算に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかとを含む前記符号化データを出力し、
前記置換手順では、前記符号化データのうち、一定個数の前記解ｐiを少なくとも含むデータ領域ごとに、前記データ領域の一部分と一致するビット列を前記符号化用ビット列から探索する、
付記１〜７のいずれか１つに記載のデータ符号化プログラム。
ｂ0ａi0＋ｂ1ａi1＋ｂ2ａi2＋・・・＋ｂm-1ａi(m-1)＝ｐi              ・・・（２）
（付記１０）  コンピュータに、
入力データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記入力データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順、
置換後の前記入力データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順、
を実行させるデータ復号化プログラム。
【０２３７】
（付記１１）  前記置換手順では、前記入力データから、前記開始符号とは異なる所定のビット列である識別符号を検出すると、前記識別符号を前記開始符号と同じビット列に置換する、
付記１０記載のデータ復号化プログラム。
【０２３８】
（付記１２）  前記開始符号と前記識別符号は、それぞれの先頭から複数ビット数分の部分ビット列が一致し、前記部分ビット列の次の値が互いに異なる値とされる、
付記１１記載のデータ復号化プログラム。
【０２３９】
（付記１３）  前記置換手順では、前記位置情報と長さ情報とを前記入力データの前記置換範囲から検出し、検出した前記位置情報に基づく前記符号化用ビット列の位置から前記長さ情報に基づくビット数の前記置換ビット列を抽出する、
付記１０〜１２のいずれか１つに記載のデータ復号化プログラム。
【０２４０】
（付記１４）  前記符号化用ビット列は、前記単位ビット列を行の少なくとも一部として有する符号化行列として用意され、
前記置換手順では、前記位置情報と方向情報とを前記入力データの前記置換範囲から検出し、検出した前記位置情報に基づく前記符号化行列の位置から、検出した前記方向情報に基づく方向に並ぶビット列を前記置換ビット列として抽出する、
付記１０〜１２のいずれか１つに記載のデータ復号化プログラム。
【０２４１】
（付記１５）  前記復号化手順では、前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかを含む単位ビット列情報を、置換後の前記入力データから抽出するとともに、前記符号化対象データを所定ビット数ごとに分割した分割データと前記単位ビット列とを基に符号化処理時に演算された演算結果を、置換後の前記入力データから抽出し、複数の前記単位ビット列情報に基づく複数の前記単位ビット列、および、当該複数の単位ビット列と前記分割データのうち同じ分割データとを基に演算された複数の前記演算結果を用いて演算処理を行うことで、前記同じ分割データを復元する、
付記１０〜１４のいずれか１つに記載のデータ復号化プログラム。
【０２４２】
（付記１６）  前記コンピュータに、
前記入力データのうち、一の前記単位ビット列と一以上の前記分割データとを基に前記符号化処理時に演算された前記演算結果が格納された一の演算結果領域のデータを、一の受信パケットから抽出する受信手順、
をさらに実行させ、
前記置換手順では、前記一の受信パケットから抽出された前記演算結果領域のデータごとに、前記開始符号の検出を行う、
付記１５記載のデータ復号化プログラム。
【０２４３】
（付記１７）  前記単位ビット列はｍビット（ただし、ｍは１以上の整数）のビット列であり、
前記復号化手順では、ｍ個の前記単位ビット列情報に基づくｍ個の前記単位ビット列を行列配置した第１の行列を単位行列化するとともに、当該ｍ個の単位ビット列と前記同じ分割データとを基に符号化処理時に演算されたｍ個の前記演算結果を行列配置した第２の行列に対して、単位行列化処理の際に前記第１の行列に施した処理と同じ処理を施し、処理後の前記第２の行列から前記同じ分割データを復元する、
付記１５または１６に記載のデータ復号化プログラム。
【０２４４】
（付記１８）  前記一の分割データのビット列をｂ0，ｂ1，ｂ2，・・・，ｂm-1（ただし、ｍは１以上の整数）とし、ｍ個の前記単位ビット列情報に基づくｍ個の前記単位ビット列のうちｉ番目（ただし、ｉは０以上の整数）の前記単位ビット列をａi0，ａi1，ａi2，・・・，ａi(m-1)とし、前記ｉ番目の単位ビット列をプール代数の連立方程式である式（３）に代入したときの解をｐiとすると、
前記符号化手順では、０番目から（ｍ−１）番目までのｍ個の前記単位ビット列、および、当該ｍ個の単位ビット列と前記一の分割データとを基に演算されたｍ個の前記解ｐiを、前記式（３）に代入することで、前記一の分割データを復元する、
付記１５または１６に記載のデータ復号化プログラム。
ｂ0ａi0＋ｂ1ａi1＋ｂ2ａi2＋・・・＋ｂm-1ａi(m-1)＝ｐi              ・・・（３）
（付記１９）  符号化処理手段が、符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順と、
置換処理手段が、前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順と、
を有するデータ符号化方法。
【０２４５】
（付記２０）  置換処理手段が、入力データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記入力データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順と、
復号化処理手段が、置換後の前記入力データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順と、
を有するデータ復号化方法。
【符号の説明】
【０２４６】
１，２  情報処理装置
３  符号化ビット列
１１  符号化処理手段
１２  圧縮処理手段
２１  伸張処理手段
２２  復号化処理手段
【図１】
0005397179.tif 000002
【図２】
0005397179.tif 000003
【図３】
0005397179.tif 000004
【図４】
0005397179.tif 000005
【図５】
0005397179.tif 000006
【図６】
0005397179.tif 000007
【図７】
0005397179.tif 000008
【図８】
0005397179.tif 000009
【図９】
0005397179.tif 000010
【図１０】
0005397179.tif 000011
【図１１】
0005397179.tif 000012
【図１２】
0005397179.tif 000013
【図１３】
0005397179.tif 000014
【図１４】
0005397179.tif 000015
【図１５】
0005397179.tif 000016
【図１６】
0005397179.tif 000017
【図１７】
0005397179.tif 000018
【図１８】
0005397179.tif 000019
【図１９】
0005397179.tif 000020
【図２０】
0005397179.tif 000021
【図２１】
0005397179.tif 000022