JP2011109361A - データ符号化プログラム、データ復号化プログラムおよび方法 - Google Patents

データ符号化プログラム、データ復号化プログラムおよび方法 Download PDF

Info

Publication number
JP2011109361A
JP2011109361A JP2009261649A JP2009261649A JP2011109361A JP 2011109361 A JP2011109361 A JP 2011109361A JP 2009261649 A JP2009261649 A JP 2009261649A JP 2009261649 A JP2009261649 A JP 2009261649A JP 2011109361 A JP2011109361 A JP 2011109361A
Authority
JP
Japan
Prior art keywords
bit string
data
encoding
matrix
processing unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009261649A
Other languages
English (en)
Other versions
JP5397179B2 (ja
Inventor
Hirosuke Kameyama
裕亮 亀山
Yuichi Sato
裕一 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009261649A priority Critical patent/JP5397179B2/ja
Priority to US12/947,475 priority patent/US8184024B2/en
Publication of JP2011109361A publication Critical patent/JP2011109361A/ja
Application granted granted Critical
Publication of JP5397179B2 publication Critical patent/JP5397179B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3761Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】符号化データのデータ量を効率よく抑制する。
【解決手段】符号化処理手段11は、符号化対象データと、符号化用ビット列3から得られる単位ビット列とから、符号化データを生成する。圧縮処理手段12は、符号化用ビット列3から符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する符号化データのビット列を、開始符号と、探索されたビット列の符号化用ビット列3における位置に関する位置情報とを組み合わせたビット列に置換する。伸張処理手段21は、圧縮データから開始符号を検出すると、開始符号の後の領域から位置情報を検出し、位置情報に基づく符号化用ビット列3の位置から置換ビット列を抽出し、開始符号を先頭とした置換範囲を置換ビット列に置換する。
【選択図】図1

Description

本発明は、データ符号化プログラムとその方法、および、データ復号化プログラムとその方法に関する。
ネットワークを通じたファイル送信を高速化する1つの方法として、送信前にファイルを圧縮する方法がある。仮に、送信するファイルのサイズが圧縮により半分になれば、送信に要する時間も半分になるため、結果として送信速度を2倍にすることができる。
一般的なファイル圧縮の方式としては、例えば、ZIP圧縮などが知られている。しかし、ZIP圧縮などの一般的なファイル圧縮方式は、ファイルの規則性を利用して圧縮を行っている。このため、静止画像や動画像などの規則性の少ないデータを圧縮した場合に、圧縮率が低くなることが多く、送信前に圧縮を行ってもファイルサイズが小さくならないことが多い。
また、ファイル送信を高速化する他の方法としては、例えば、ファイルを受信側でキャッシュしておく方法がある。この場合、送信側で同じデータの送信が発生した場合には、実データを送信しないようにすることで、ネットワークのトラフィックを軽減できる。さらに他の方法としては、例えば、前回送信したファイルとの差分データのみを送信側から送信し、受信側では前回受信したファイルと新たに受信した差分データとから送信されたファイルを復元する方法もある。しかし、これらのどちらの方法も、例えば、頻繁に更新されるファイルの送信時や複数の宛先へのファイルの送信時には、送信データのサイズを小さくする効果が得られるものの、初めてファイルを送信する場合には効果が得られない。
ところで、IP(Internet Protocol)ネットワークにおいて、データの送信に高信頼性が要求される場合には、TCP(Transmission Control Protocol)通信が行われることが多い。TCP通信では、送信側からパケットを送信すると、受信側はACKと呼ばれる受信確認信号を返信する。送信側は、ACKを受信すると次のパケットを送信するが、パケットの消失などによりACKが返信されなかった場合には、同じパケットを再送する。
TCP通信では、上記のような通信手順により受信側にパケットが確実に届くようにしている。しかしながら、このような通信手順では、例えば、ネットワーク上の距離が離れると、データの往復時間であるRTT(Round Time Trip)が大きくなり、実効通信速度が低下するという問題がある。
これに対して、UDP(User Datagram Protocol)通信では、送信側は、受信側からの受信確認信号を受信することなくパケットを送信する。このため、通信の信頼性は低下するものの、TCP通信と比較して実効通信速度が高められる。
また、UDP通信のように送達確認を行わない無手順方式の通信時にも、通信の信頼性を向上させる方法として、パケットが消失した場合でも受信側でエラーを訂正できるように、送信データを符号化する方法がある。例えば、転送元データをm個の分割データに分割し、mビットでn系列のデータ列におけるビット“1”の位置に対応する分割データを選択して排他的論理和データを求め、データ列と排他的論理和データとを符号化データとして送信する方法がある。
特開2006−271006号公報
しかしながら、受信側でエラー訂正が可能なように送信データを符号化する技術では、符号化データが大きくなり、その結果、データの送信速度が実質的に低下するという問題があった。また、このような例に限らず、データを符号化する技術においては、符号化データのデータ量を、効率のよい処理手順を用いてさらに抑制することが要求されていた。
本発明はこのような点に鑑みてなされたものであり、符号化データのデータ量を効率よく抑制できるようにしたデータ符号化プログラム、データ復号化プログラムおよびそれらの方法を提供することを目的とする。
上記目的を達成するために、データ符号化プログラムが提供される。このデータ符号化プログラムは、コンピュータに次のような処理を実行させる。データ符号化プログラムに従って、コンピュータは、符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順を実行し、前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順を実行する。
また、上記目的を達成するために、データ復号化プログラムが提供される。このデータ復号化プログラムは、コンピュータに次のような処理を実行させる。データ復号化プログラムに従って、コンピュータは、入力データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記入力データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順を実行し、置換後の前記入力データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順を実行する。
上記のデータ符号化プログラムおよびデータ復号化プログラムによれば、符号化データのデータ量が効率よく抑制される。
第1の実施の形態の情報処理装置の構成を示す図である。 第2の実施の形態のシステム構成例を示す図である。 情報処理装置のハードウェア構成例を示す図である。 送信側・受信側の各情報処理装置が備える機能を示すブロック図である。 符号化処理について説明する図である。 符号化処理部の処理手順の例を示すフローチャートである。 圧縮処理について説明する図である。 圧縮処理部の処理手順の例を示すフローチャートである。 ステップS45のビット列置換処理の手順の例を示すフローチャートである。 伸張処理部の処理手順の例を示すフローチャートである。 復号化処理について説明する図である。 復号化処理部の処理手順の例を示すフローチャートである。 図12のステップS113の処理手順の例を示すフローチャートである。 上三角行列化処理の具体例を説明する図である。 図12のステップS119の処理手順の例を示すフローチャートである。 符号化行列の生成手順の例を示すフローチャートである。 第3の実施の形態に係る送信側/受信側の情報処理装置の機能を示すブロック図である。 第3の実施の形態の符号化処理について説明する図である。 第3の実施の形態の復号化処理について説明する図である。 符号化処理部の処理手順の例を示すフローチャートである。 復号化処理部の処理手順の例を示すフローチャートである。
以下、実施の形態を図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態の情報処理装置の構成を示す図である。
図1に示す情報処理装置1は、符号化用ビット列3を用いて符号化対象データを符号化する符号化処理手段11と、同じ符号化用ビット列3を用いて、符号化処理手段11から出力された符号化データを圧縮する圧縮処理手段12とを有する。一方、情報処理装置2は、圧縮処理手段12から出力された圧縮データを符号化用ビット列3を用いて伸張する伸張処理手段21と、同じ符号化用ビット列3を用いて、伸張処理手段21により伸張された符号化データを復号化する復号化処理手段22とを有する。ここで、情報処理装置2での伸張処理および復号化処理で用いられる符号化用ビット列3は、情報処理装置1での符号化処理および圧縮処理で用いられたものと共通のビット列である。
なお、情報処理装置1,2は、例えば、ともにコンピュータとして実現される。この場合、情報処理装置1,2の各機能は、例えば、それぞれの装置が備えるCPU(Central Processing Unit)によって所定のプログラムが実行されることで、実現される。
また、圧縮処理手段12から出力された圧縮データは、例えば、ネットワークを介して、あるいは、可般型の記憶媒体を介して、情報処理装置2に受け渡される。また、情報処理装置2の伸張処理手段21および復号化処理手段22の各機能は、情報処理装置1に設けられていてもよい。この場合、例えば、圧縮処理手段12から出力された圧縮データは、一旦記憶媒体に記憶された後、そこから読み出されて伸張処理手段21に供給されればよい。
情報処理装置1において、符号化処理手段11は、符号化の対象である符号化対象データと、符号化用ビット列3から得られる単位ビット列とから、符号化データを生成する。圧縮処理手段12は、符号化用ビット列3から、生成された符号化データの一部分と一致するビット列を探索する。そして、探索されたビット列と一致する符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の符号化用ビット列3における位置に関する位置情報とを組み合わせたビット列に置換する。これにより、符号化データのデータ量が圧縮される。
なお、符号化用ビット列3は、例えば、行列として用意されてもよい。この場合、例えば、上記の単位ビット列は、行列の1行、または1行の中の一部として実現されればよい。また、位置情報は、例えば、行列の行数を示す情報、または、行数およびその行内の先頭からのビット数を示す情報とされればよい。
上記の情報処理装置1では、符号化データと符号化用ビット列3との間で一致するビット列が存在した場合に、符号化データのビット列を他の情報に置換するという簡単な方法で、符号化データのデータ量が抑制される。また、符号化処理で用いられた符号化用ビット列3が、符号化データに対する圧縮処理でも共通に用いられるため、例えば、圧縮処理のために専用のデータを用意する必要がない。従って、符号化データのデータ量を効率よく抑制できる。また、符号化データが送信される場合には、符号化データの実効的な送信速度が向上する。
なお、圧縮処理手段12において、符号化データの一部分と置換する情報としては、上記の開始符号および位置情報に加えて、例えば、置換される符号化データのビット列の長さを示す長さ情報が適用されてもよい。長さ情報を圧縮データに含めることで、例えば、符号化データと符号化用ビット列3との間で比較するビット列のビット数を可変とすることができる。この場合、符号化データと符号化用ビット列3との間で共通するビット列として、より大きなビット数のビット列を検出できるようになり、その結果、圧縮率を高めることができる。
一方、情報処理装置2において、伸張処理手段21は、入力された圧縮データから、上記の圧縮処理手段12によって開始符号や位置情報などに置換された置換範囲を検出し、この置換範囲を元のビット列に置換することで、符号化データを復元する。より具体的には、伸張処理手段21は、入力された圧縮データから、置換範囲の開始位置を示す開始符号を検出すると、この開始符号から開始される置換範囲から上記の位置情報を検出する。次に、検出した位置情報に基づく符号化用ビット列3の位置から置換ビット列を抽出する。この置換ビット列とは、圧縮処理手段12による圧縮処理時に、符号化データの一部分と一致するビット列として符号化用ビット列3から探索されたビット列である。伸張処理手段21は、圧縮データにおける開始符号および位置情報を含む置換範囲を、抽出した置換ビット列に置換する。
なお、伸張処理手段21は、例えば、圧縮データの置換範囲に長さ情報が含まれていた場合には、位置情報に基づく符号化用ビット列3の位置から、長さ情報に基づくビット数のビット列を、置換ビット列として抽出する。
復号化処理手段22は、伸張処理手段21によって復元された符号化データと、符号化用ビット列3から得られる単位ビット列とから、符号化対象データを復元する。
上記の情報処理装置2では、復号化処理で用いる符号化用ビット列3が、符号化データを復元する伸張処理でも共通に用いられるため、例えば、伸張処理のために専用のデータを用意する必要がない。また、伸張処理は、前述の圧縮処理とは逆の手順で、圧縮データの一部分を符号化用ビット列3のビット列に置換するという簡単な方法で実行される。
ところで、符号化処理手段11での符号化処理は、例えば、符号化対象データにエラー訂正機能を付加する処理として実現することができる。この場合、上記の情報処理装置1,2の各機能は、例えば、次のような処理を実行する。
符号化処理手段11は、符号化対象データを所定ビット数ごとに分割した分割データのそれぞれと、符号化用ビット列3から同一ビット数のビット列を切り出して得られる複数の単位ビット列のそれぞれとを組み合わせて、演算処理を行う。そして、各演算処理による演算結果と、これらのそれぞれの演算処理の際に使用された単位ビット列の符号化用ビット列3における位置を示す位置情報とを、符号化データに含める。以下、このとき符号化データに含められる位置情報を、“第1の位置情報”と呼ぶことにする。
ここで、分割データと単位ビット列との間で行われる演算処理としては、例えば、単位ビット列の各ビットの値に応じた排他的論理和演算や、単位ビット列の各ビットの値に応じた論理和演算などが適用可能である。後者の論理和演算処理は、例えば、プール代数の連立方程式に従って実行することもできる。
また、第1の位置情報の代わりに、単位ビット列自体が符号化データに含められてもよい。符号化データに、第1の位置情報と単位ビット列自体のどちらを含めるかは、例えば、生成される符号化データの大きさに応じて選択されればよい。すなわち、第1の位置情報と単位ビット列のうち、符号化データがより小さくなる方が符号化データに含められればよい。
圧縮処理手段12は、符号化処理手段11からの符号化データのうち、1つの単位ビット列と1つ以上の分割データとを用いて演算された演算結果が格納された演算結果領域ごとに、次のような圧縮処理を行う。圧縮処理手段12は、演算結果領域に含まれる任意のビット列である部分ビット列と一致するビット列を、符号化用ビット列3から探索する。そして、一致するビット列が探索された場合に、この演算結果領域の部分ビット列を、少なくとも、置換範囲の開始位置を示す開始符号と、探索されたビット列の符号化用ビット列3における位置を示す位置情報とによって置換する。以下、このとき部分ビット列を置換する位置情報を、“第2の位置情報”と呼ぶことにする。
なお、例えば、圧縮処理手段12から出力された圧縮データが、情報処理装置2に対して送信される場合には、圧縮データは、前述の演算結果領域ごとに1つの送信パケットに格納されてもよい。これにより、受信側の情報処理装置2では、受信した圧縮データから演算結果領域単位のデータを容易に取り込むことができるようになる。また、例えば、圧縮データが可搬型記憶媒体を介して情報処理装置2に受け渡される場合には、圧縮データは、演算結果領域ごとに区分されたデータとして可搬型記憶媒体に格納されてもよい。
また、演算結果領域には、例えば、1つの単位ビット列と1以上の分割データとを用いて符号化処理時に演算された演算結果に加えて、この演算結果の演算に使用された単位ビット列、または、これに対応する単位ビット列情報が格納されてもよい。また、別の例としては、単位ビット列、または、これに対応する単位ビット列情報は、圧縮データ中の演算結果とは別の領域に格納されてもよい。この場合、単位ビット列または単位ビット列情報が格納された領域は、圧縮処理手段12による圧縮処理の対象にはならず、この領域には、符号化処理手段11から出力されたデータがそのまま格納される。
伸張処理手段21は、入力された圧縮データから開始符号と、これに対応する第2の位置情報とを検出すると、検出した第2の位置情報に基づく符号化用ビット列3の位置から置換ビット列を抽出する。そして、入力された圧縮データにおける、検出した開始符号および第2の位置情報を含む圧縮領域を、符号化用ビット列3から抽出した置換ビット列によって置換し、圧縮データを伸張する。
復号化処理手段22は、伸張された符号化データから第1の位置情報を複数抽出し、これらの第1の位置情報に基づいて符号化用ビット列3から抽出した単位ビット列を用いて、符号化データを復号化する。より具体的には、復号化処理手段22は、第1の位置情報を符号化データから抽出するとともに、符号化対象データを所定ビット数ごとに分割した分割データと単位ビット列とを基に符号化処理時に演算された演算結果を、符号化データから抽出する。そして、複数の単位ビット列情報に基づいて符号化用ビット列3から抽出された単位ビット列、および、これら複数の単位ビット列と、同じ分割データとを基に演算された複数の演算結果を用いて、演算処理を行い、分割データを復元する。
なお、符号化データに、第1の位置情報の代わりに単位ビット列自体が含まれていた場合には、復号化処理手段22は、符号化用ビット列3を参照することなく、単位ビット列を符号化データから直接抽出できる。
復号化の際の演算処理としては、例えば、複数の単位ビット列を行列配置した第1の行列、および、これら複数の単位ビット列と、同じ分割データとを基に演算された演算結果を行列配置した第2の行列に対する、行同士の排他的論理和演算などを適用可能である。あるいは、符号化処理の際に前述の連立方程式が用いられた場合には、これら複数の単位ビット列と演算結果とを連立方程式に代入して、分割データに対応する変数の値を求める演算処理を適用することも可能である。
このような符号化処理および復号化処理が適用されることで、例えば、圧縮データが生成されてから伸張処理手段21に入力されるまでの間に、データの一部に欠落が生じた場合でも、復号化処理によりエラー訂正処理が行われる。従って、データの欠落が発生した場合でも、元の符号化対象データを正常に復元できることが多くなる。
また、符号化対象データを符号化した後、さらに圧縮処理することで、受け渡すデータのサイズを小さくすることができる。従って、例えば、データをネットワークを通じて受け渡す場合には、データ伝送の信頼性を確保しつつ、実効通信速度を高めることができる。また、データを可般型記憶媒体を介して受け渡す場合でも、可般型記憶媒体の読み書きの速度を向上させることができる。
次に、圧縮データがネットワークを通じて受け渡され、なおかつ、符号化用ビット列として符号化行列が用いられる場合の実施の形態について説明する。なお、以下の実施の形態では、送信側の装置において、符号化対象データに対してエラー訂正機能を付加するための符号化処理が実行される。
〔第2の実施の形態〕
図2は、第2の実施の形態のシステム構成例を示す図である。
図2において、情報処理装置100,200は、ネットワーク300を介して、互いにデータを送受信する。データの送信の際、送信側の情報処理装置は、送信対象データを符号化した後、さらに圧縮し、圧縮データを受信側の情報処理装置に送信する。ここで、送信対象データは、送信前に符号化されることにより、送信されたデータの一部が例えばネットワーク300上で消失した場合でも、消失したデータを受信側で復元し得る状態に変換される。すなわち、受信側の情報処理装置は、受信した圧縮データを伸張した後、得られた符号化データを復号化する。このとき、符号化データの一部が消失していた場合でも、受信した他の符号化データを基にエラー訂正することで、元の送信対象データを復元できる場合が多くなる。
本実施の形態では、情報処理装置100,200の間では、データがパケット化されて転送される。また、上記のようなエラー訂正機能が適用されることから、情報処理装置100,200の間の通信処理において、データの送達確認を行わない無手順方式の通信プロトコルを使用した場合でも、データ送信処理の信頼性が高められる。本実施の形態では、このような無手順方式の通信プロトコルとして、UDPが使用されるものとする。
無手順方式の通信プロトコルが使用されることで、TCPなど、データの送達確認が行われる通信プロトコルが使用された場合と比較して、実効通信速度を高めることができる。ただし、送信対象データの符号化処理により、送信対象データのデータ量は大きくなる。そこで、本実施の形態では、符号化データを、符号化処理の際に使用した符号化行列を用いて圧縮することで、送信されるデータのデータ量を削減する。すなわち、本実施の形態では、送信対象データの符号化および圧縮を行うことで、実効通信速度と、データ送信処理の信頼性の両方を向上させる。
図3は、情報処理装置のハードウェア構成例を示す図である。
情報処理装置100は、例えば、図3に示すようなコンピュータとして実現される。このコンピュータは、CPU111、RAM(Random Access Memory)112、HDD(Hard Disk Drive)113、グラフィック処理部114、入力インタフェース(I/F)115、書き込み/読み取り部116および通信インタフェース(I/F)117を備えており、これらの各部はバス118によって相互に接続されている。
CPU111は、HDD113などの記憶媒体に記憶された各種プログラムを実行することにより、このコンピュータ全体を統括的に制御する。RAM112は、CPU111に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。HDD113は、CPU111により実行されるプログラムやその実行に必要な各種のデータなどを記憶する。
グラフィック処理部114には、例えば、モニタ114aが接続されている。このグラフィック処理部114は、CPU111からの命令に従って、モニタ114aの画面上に画像を表示させる。入力インタフェース115には、例えば、キーボード115aやマウス115bが接続されている。入力インタフェース115は、キーボード115aやマウス115bからの信号を、バス118を介してCPU111に送信する。
書き込み/読み取り部116は、CPU111からバス118を介して受け取ったデータを、可搬型記憶媒体110に書き込む。また、可搬型記憶媒体110からデータを読み取り、バス118を介してCPU111に送信する。なお、可搬型記憶媒体110としては、例えば、光ディスク、フレキシブルディスク、USB(Universal Serial Bus)インタフェースなどを介して接続される半導体メモリなどを適用可能である。
通信インタフェース117は、ネットワーク300を介して、情報処理装置200などの外部装置との間でデータの送受信を行う。
なお、情報処理装置200についても、図3に示した情報処理装置100と同様のハードウェア構成によって実現可能である。
次に、情報処理装置100をデータの送信側装置とし、情報処理装置200をデータの受信側装置とした場合のデータ送受信処理について説明する。まず、図4は、送信側・受信側の各情報処理装置が備える機能を示すブロック図である。
送信側の情報処理装置100は、送信対象データを符号化する符号化処理部120と、生成された符号化データを圧縮する圧縮処理部130と、生成された圧縮データをネットワーク300に送信する送信処理部140とを備えている。これらの各機能は、例えば、情報処理装置100が有するCPU111によって所定のプログラムが実行されることで実現される。
符号化処理部120は、n行m列(ただし、nはm以上の整数)の符号化行列Aを用いて、送信対象データに対して符号化処理を施す。この符号化行列Aは、受信側の情報処理装置200での伸張処理および復号化処理でも共通に用いられるものである。なお、以下の説明において、例えば、符号化行列Aにおけるx列目のビット列axを選択することは、前述の符号化用ビット列における(x×m)ビット目から{(x+1)×m−1}ビット目までのビット列を選択することと同じ意味である。
符号化処理部120は、送信対象データを所定のビット数ごとに分割した分割データを、m個ごとに順に選択する。これとともに、選択したm個の分割データのそれぞれに対応付けて、符号化行列Aの各行に対応するn個のビット列を選択する。ここで、符号化行列Aの各行のビット列は、第1の実施の形態での“単位ビット列”の一例に対応する。
符号化処理部120は、選択した1行分のビット列におけるそれぞれのビットを、対応するm個の分割データのそれぞれに対応付ける。そして、1行分のビット列におけるビット1の位置に対応する分割データを選択して、選択した分割データの排他的論理和を演算する。ここで、排他的論理和の演算結果を“排他的論理和データ”と呼ぶ。
符号化処理部120は、1行分のビット列の符号化行列Aにおける位置を示す行番号と、このビット列を用いて算出された排他的論理和データとを結合する。ここで、1つの行番号と排他的論理和データとの組を“冗長データ”と呼ぶ。符号化処理部120は、選択したn個のビット列のそれぞれに対して冗長データを生成し、さらに、ここまでの処理を送信対象データの全体に亘って実行することで、符号化データを生成して出力する。
なお、符号化データにおける行番号および排他的論理和データの格納位置は、上記のような位置に限らない。例えば、同じ行のビット列に対応する行番号を符号化データに格納し、この行番号に続いて、m個の分割データを基に演算された排他的論理和データを順に格納していってもよい。ただし、この場合、行番号が格納された領域は、次の圧縮処理部130による圧縮処理の対象から除外される。
圧縮処理部130は、符号化処理部120から出力された符号化データを、上記の冗長データごとに取り込む。そして、冗長データに含まれる任意のビット列と一致するビット列を、符号化行列Aから探索する。一致するビット列が探索された場合、圧縮処理部130は、冗長データにおけるビット列を、少なくとも開始符号および位置情報を含むデータによって置換する。開始符号とは、冗長データ内のビット列における、上記各データに置換された範囲の開始位置を示す符号である。位置情報は、冗長データ内のビット列と一致したビット列の符号化行列Aにおける位置を示す情報であり、例えば、符号化行列Aにおける行番号と、行番号に対応する行の先頭からのビット数などを含む。
また、冗長データ内のビット列を置換する情報としては、上記の開始符号および位置情報の他に、一致したビット列の長さを示す長さ情報を加えてもよい。長さ情報は、例えば、圧縮処理において、冗長データと符号化行列Aとの間で照合するビット列の長さを可変とする場合に、置換する情報に加えられる。
送信処理部140は、圧縮処理部130からの圧縮データをパケット化し、ネットワーク300に対して送出する。本実施の形態では、送信処理部140は、UDPに従って圧縮データをパケット化して送出する。また、1つのパケットには、1つの冗長データに対応する圧縮データが格納される。なお、圧縮処理部130による置換処理により、冗長データのサイズは小さくなる可能性があり、パケットの長さは圧縮処理部130から出力された冗長データのサイズに応じて変化する場合がある。
一方、受信側の情報処理装置100は、ネットワークからデータを受信して圧縮データを出力する受信処理部220と、圧縮データを伸張して符号化データを出力する伸張処理部230と、符号化データを復号化して送信対象データを出力する復号化処理部240とを備えている。これらの各機能は、例えば、情報処理装置200が有するCPUによって所定のプログラムが実行されることで実現される。
受信処理部220は、ネットワーク300から受信したパケットから、圧縮データを取り出す。上記のように、1つのパケットからは、1つの冗長データに対応する圧縮データが抽出される。
伸張処理部230は、圧縮データ中の開始符号を探索し、開始符号が存在した場合には、開始符号の直後のデータから位置情報を抽出する。そして、符号化行列A内の位置情報に対応する位置から、所定ビット数分の部分ビット列を読み込み、開始符号および位置情報を部分ビット列で置換する。
復号化処理部240は、伸張処理部230により伸張された符号化データから、m個の分割データに対応する符号化データを順次抽出し、行番号および排他的論理和データを抽出する。次に、行番号を基に符号化行列Aから1行分のビット列を読み込み、読み込んだビット列と、これに対応する排他的論理和データとを、ともに行列配置する。次に、ビット列による行列を単位行列化するとともに、対応する排他的論理和データによる行列にも同様の処理を行い、処理後の排他的論理和データによる行列の各行の値を、符号化前のm個の分割データとして出力する。
次に、情報処理装置100,200における処理手順を、より詳細に説明する。まず、送信側の情報処理装置100における処理手順について説明する。図5は、符号化処理について説明する図である。
図5では、説明を簡単にするために、列数mを4という小さな数値とするが、実際には列数mの値は、例えば数バイトといったより大きな数値とされることが望ましい。また、図5の例では、n=6とする。
また、図5では、送信対象データは、まず、(m×p)ビット(ただし、pは1以上の整数)の部分ブロックに分割された後、さらに、各部分ブロックがpビットずつの分割データに分割されるものとする。図5では、送信対象データは、h個(ただし、hは1以上の整数)の部分ブロックD0,D1,・・・,Dh-1に分割されたものとする。なお、pの値は、例えば、送信処理部140から出力される1つのパケットに格納されるデータのサイズを基に決定されればよい。
ここでは例として、1番目の部分ブロックD1を基に符号化処理を行う場合について説明する。符号化処理部120は、部分ブロックD1を4つの分割データD10,D11,D12,D13に分割する。一方、符号化処理部120は、符号化行列Aの各行のビット列うち、m列以上の行のビット列を選択する。ここでは、6行分のビット列a0,a1,a2,a3,a4,a5が選択されるものとする。
符号化処理部120は、選択したビット列a0,a1,a2,a3,a4,a5におけるそれぞれのビットを、4つの分割データD10,D11,D12,D13のそれぞれに対応付ける。すなわち、ビット列a0,a1,a2,a3,a4,a5のそれぞれの上位から0桁目、1桁目、2桁目、3桁目を、それぞれ分割データD10,D11,D12,D13に対応付ける。
次に、符号化処理部120は、ビット列a0,a1,a2,a3,a4,a5のそれぞれにおけるビット1の位置に対応する分割データを選択し、選択した分割データの排他的論理和を演算して排他的論理和データを出力する。そして、処理に使用したビット列の符号化行列Aにおける行番号と、演算された排他的論理和データとを結合し、冗長データとする。
例えば、ビット列a0は“1100”であるので、ビット列a0に基づいて分割データD10,D11が選択され、分割データD10,D11の排他的論理和が演算される。従って、行番号0と、分割データD10,D11の排他的論理和とを結合したビット列が、冗長データE10として出力される。同様に、ビット列a1は“0110”であるので、ビット列a1に基づいて分割データD11,D12が選択され、分割データD11,D12の排他的論理和が演算される。従って、行番号1と、分割データD11,D12の排他的論理和とを結合したビット列が、冗長データE11として出力される。また、ビット列a5は“0001”であるので、ビット列a5に基づいて分割データD13のみが選択される。この場合には、分割データD13が演算結果としてそのまま出力され、行番号5と分割データD13とを結合したビット列が、冗長データE15として出力される。
以上の処理がすべての部分ブロックD0,D1,・・・,Dh-1について実行されることで、(6×h)個の冗長データE00,E01,・・・,E(h-1)5が生成され、これらが結合されたビット列が符号化データとして出力される。
なお、上記の符号化処理に用いる、符号化行列Aにおけるビット列は、例えば、符号化行列Aの各行の一部であってもよい。例えば、行数、列数がそれぞれn,mより大きい符号化行列Aの各行のうち、先頭からmビット分のビット列が、符号化処理に使用されてもよい。また、符号化処理に用いるビット列は、その数がm以上であれば、符号化行列A内のすべての行から選択されなくてもよい。
図6は、符号化処理部の処理手順の例を示すフローチャートである。
[ステップS11]符号化処理部120は、送信対象データを、それぞれ(m×p)サイズを有する部分ブロックに分割する。前述のように、mは符号化行列Aの列数であり、pは分割データのサイズである。
ここで、送信対象データの分割によりh個の部分ブロックD0,D1,・・・,Dh-1が生成されたものとする。なお、送信対象データの分割により、(m×p)以下のサイズを有する余剰データが生じた場合には、余剰データについては符号化処理を行わず、符号化処理により生成された後述する冗長データの最後尾に余剰データが付加されればよい。
[ステップS12]符号化処理部120は、変数lを0とする。
[ステップS13]符号化処理部120は、1つの部分ブロックDlを1つ選択し、それぞれ同じサイズpを有するm個の分割データDl0,Dl1,・・・,Dl(m-1)を生成する。
[ステップS14]符号化処理部120は、変数iを0とする。
[ステップS15]符号化処理部120は、符号化行列Aにおけるi行目のビット列aiを選択する。
[ステップS16]符号化処理部120は、変数jを0とし、一時データdを0とする。
[ステップS17]符号化処理部120は、ビット列aiのjビット目の値aijが1であるか否かを判定する。1であった場合、ステップS18の処理が実行され、0であった場合、ステップS19の処理が実行される。
[ステップS18]符号化処理部120は、ビット列aiのjビット目の値aijと一時データdとの排他的論理和を演算し、演算結果を一時データdに代入する。
[ステップS19]符号化処理部120は、変数jが(m−1)と一致するか否かを判定する。変数jが(m−1)と一致する場合には、ステップS21の処理が実行され、変数jが(m−1)より小さい場合には、ステップS20の処理が実行される。
[ステップS20]符号化処理部120は、変数jを1だけ増加させる。この後、ステップS17の処理が実行される。従って、ステップS17〜S19のループ処理は、変数jが0から(m−1)になるまでm回繰り返され、選択された1つのビット列aiの各ビットの値に応じて一時データdの値が更新される。
[ステップS21]符号化処理部120は、現在の行数を示す変数iの値と、現在の一時データdの値とを結合して、部分ブロックDlのi番目の冗長データEliを生成する。
[ステップS22]符号化処理部120は、変数iの値が(n−1)と一致するか否かを判定する。変数iが(n−1)と一致する場合には、ステップS24の処理が実行され、変数iが(n−1)より小さい場合には、ステップS23の処理が実行される。
[ステップS23]符号化処理部120は、変数iの値を1だけ増加させる。この後、ステップS15の処理が実行される。従って、ステップS15〜S21の処理はn回繰り返され、符号化行列Aから選択されたn個のビット列にそれぞれ対応する冗長データEl0,El1,・・・,El(n-1)が生成される。
[ステップS24]符号化処理部120は、変数lの値が(h−1)と一致するか否かを判定する。変数lが(h−1)より小さい場合には、ステップS25の処理が実行される。一方、変数lが(h−1)より小さい場合には、ステップS13〜S24の処理がh回繰り返されて、(h×q)個の冗長データE00,E01,・・・,E(h-1)(n-1)が出力された状態となり、処理が終了される。
[ステップS25]符号化処理部120は、変数lの値を1だけ増加させる。この後、ステップS13の処理が実行され、次の部分ブロックが選択されて分割データが生成され、生成された分割データを用いてステップS14〜S22の処理が実行される。
なお、以上の図6の処理では、ステップS11でh個の部分ブロックを生成した後、ステップS13で部分ブロックを1つずつ選択して分割データを生成していた。しかし、この他の例として、部分ブロックを生成せず、元の送信対象データから分割データをm個ずつ順番に生成してもよい。
また、上記のステップS21では、行数を示す変数iの値と一時データdとの組が、冗長データに格納されていた。しかし、他の例として、変数iの代わりに対応するビット列そのものが冗長データに格納されてもよい。ただし、符号化処理に用いるビット列の数が極端に大きくならない限り、ビット列そのものを冗長データに格納するよりも、変数iの値を冗長データに格納する方が、データサイズを小さくすることができる。また、冗長データにビット列そのものを格納した場合、このビット列の領域は、次の圧縮処理時に位置情報などに確実に置換されてしまう。従って、通常は、変数iの値を冗長データに格納する方が、処理効率の面でも有利と言える。
以上説明した符号化処理によれば、受信側の情報処理装置200において受信データの欠損があった場合でも、受信データを伸張後に復号化することで、元の送信対象データを復元することが可能になる。なお、上記の符号化処理では、処理に利用する符号化行列Aの行数nをより多くすることで、復号化の際に送信対象データを復元できる確率を高くすることができる。ただし、符号化行列A内の数値を、任意のm行を用いた行列が単位行列化しやすくなるように選択することで、復号化の際に送信対象データを復元できる確率を高めつつ、行数nを小さくして、符号化データのデータ量を減少させることができる。
次に、図7は、圧縮処理について説明する図である。
圧縮処理部130は、符号化処理部120から出力された冗長データに含まれる所定の長さのビット列が、符号化行列Aに含まれるビット列と一致するか否かを探索する。そして、両者が一致した場合には、冗長データの該当ビット列を、開始符号、位置情報および長さ情報によって置換する。これにより、データ量が圧縮される。
図7の例では、開始符号として“11110”が用いられている。また、図7の例では、冗長データ内のビット列と一致した符号化行列A内のビット列の位置情報は、10ビットの行番号と、行の先頭からのビット数を示す10ビットのビット数情報とを含み、図7では17行目の先頭から9ビット目を示している。また、図7の例では、長さ情報は10ビットのデータとされ、ビット数40を示している。
なお、冗長データと符号化行列Aとの間で一致するか否かを探索するビット列のビット数は、例えば、次の図8に示す処理のように可変とすることができる。逆に、このビット数を固定値とすることもできる。後者の場合には、圧縮データに、ビット列の長さ情報を含める必要はない。
ところで、圧縮データ内に開始符号が記述されることで、受信側の情報処理装置200では、受信データの中の圧縮された領域を判別することが可能になる。このため、符号化データ中の圧縮されていない領域に開始符号と同じビット列が含まれていると、受信側の情報処理装置200での伸張処理時に、圧縮領域であると間違って判別してしまう。そこで、圧縮処理部130は、符号化データから、このような誤判別が発生し得る部分を抽出し、その部分を誤判別が発生しないような別のビット列に置換する。
図8は、圧縮処理部の処理手順の例を示すフローチャートである。この図8のフローチャートの処理は、1つの冗長データが圧縮処理部130に読み込まれるたびに繰り返し実行される。
[ステップS41]圧縮処理部130は、変数rを0にし、変数sを所定の初期値とする。変数sの初期値は、例えば、開始符号の先頭から1が連続するビット数以上、冗長データのビット数以下とされればよい。本実施の形態では、開始符号は“11110”であることから、変数sの初期値は4以上の値に設定される。
[ステップS42]圧縮処理部130は、符号化処理部120から出力された冗長データの先頭からrビットの位置から、sビット分のビット列を選択する。
[ステップS43]圧縮処理部130は、ステップS42の処理でsビット分のビット列を選択できたか否かを判定する。sビット分のビット列が選択できた場合には、ステップS44の処理が実行される。一方、ステップS43では、冗長データの先頭からrビットの位置から最後尾までのビット数がs未満である場合、sビット分のビット列を選択できない。従って、この場合には、圧縮処理が終了される。
[ステップS44]圧縮処理部130は、ステップS42で選択したビット列と同一のビット列が、符号化行列Aに存在するか否かを探索する。なお、本実施の形態では、符号化行列Aを行に沿った方向にスキャンすることで、同一のビット列が存在するか否かを探索するものとする。同一のビット列が存在した場合には、ステップS45の処理が実行され、同一のビット列が存在しなかった場合には、ステップS46の処理が実行される。
[ステップS45]圧縮処理部130は、ステップS42で選択したビット列を含む冗長データの範囲を、開始符号、位置情報および長さ情報によって置換する処理を実行する。このとき、開始符号“11110”は、置換範囲の先頭に配置される。このステップS45の処理手順については、次の図9において説明することにする。なお、後述するように、ステップS45の処理の実行後には、置換されたビット数が変数rに加算された状態となる。この後、ステップS42の処理が実行される。
[ステップS46]圧縮処理部130は、ステップS42で選択したビット列の先頭から4ビットが“1111”であるか否かを判定する。先頭4ビットが“1111”である場合には、ステップS49の処理が実行され、先頭4ビットが“1111”でない場合には、ステップS47の処理が実行される。
[ステップS47]圧縮処理部130は、符号化データの先頭からrビットの位置から1ビット分を、圧縮データとして出力する。
[ステップS48]圧縮処理部130は、変数rに1を加算する。この後、ステップS42の処理が実行される。
[ステップS49]圧縮処理部130は、ステップS42で選択したビット列の先頭から4ビットのビット列“1111”の代わりに、識別符号“11111”を出力する。
[ステップS50]圧縮処理部130は、識別符号“11111”のビット数5を、変数rに加算する。この後、ステップS42の処理が実行される。
以上の図8の処理では、ステップS42において、冗長データからsビットのビット列が選択される。そして、選択されたビット列と同一のビット列が符号化行列Aに存在した場合には、ステップS45において、冗長データの一部が置換される。このとき、置換範囲の先頭に開始符号“11110”に置換される。その後、冗長データにおける置換範囲の次のビットを先頭にして、ステップS42からの処理が実行される。
また、ステップS42で選択されたビット列と同一のビット列が符号化行列Aに存在しない場合には、ステップS46において、sビットのビット列の先頭領域が開始符号の先頭4ビットであるビット列“1111”と一致するか否かが判定される。ビット列が“1111”と一致する場合には、符号化データにおけるビット列“1111”が識別符号“11111”に置換される。その後、冗長データにおけるビット列“1111”の次のビットを先頭にして、ステップS42からの処理が実行される。一方、ビット列が“1111”と一致しない場合には、冗長データにおける処理の先頭を1ビット後方にずらして、ステップS42からの処理が実行される。
ここで、上記のステップS49では、冗長データにおけるビット列“1111”が、よりビット数の大きい識別符号“11111”に置換される。また、識別符号の先頭から4ビット分のビット列は、開始符号の先頭から4ビット分のビット列と同じになる。一方、識別符号の先頭から5ビット目の値は、開始符号の先頭から5ビット目とは異なる値とされる。
このような処理により、例えば、圧縮前の符号化データに開始符号と同じビット列“11110”が存在した場合、このビット列は“111110”に置換される。また、圧縮前の符号化データにビット列“11111”が存在した場合、このビット列は“111111”に置換される。従って、冗長データに対応する圧縮データを先頭からスキャンしたときに、ビット列“11110”が現れた場合、このビット列が開始符号であることが保証される。これとともに、冗長データに対応する圧縮データを先頭からスキャンしたときに、1が5ビット分連続した場合、この5ビットのビット列が識別符号であることも保証される。すなわち、伸張処理時において、圧縮データから開始符号および識別符号を確実に識別できるようになる。
なお、開始符号および識別符号の各値は、上記の例に限らない。識別符号は、先頭から複数ビット数分のビット列が、開始符号の先頭から同じビット数分のビット列と同じとされる。なおかつ、識別符号のその次のビットの値が、開始符号の対応するビットの値とは異なる値とされる。そして、符号化データに、開始符号および識別符号の先頭側の共通ビット列が現れたときに、この共通ビット列が識別符号に置換される。
図9は、ステップS45のビット列置換処理の手順の例を示すフローチャートである。
[ステップS61]圧縮処理部130は、変数sに1を加算する。
[ステップS62]圧縮処理部130は、冗長データの先頭からrビットの位置から、sビット分のビット列を選択する。
[ステップS63]圧縮処理部130は、ステップS62の処理でsビット分のビット列を選択できたか否かを判定する。sビット分のビット列が選択できた場合には、ステップS64の処理が実行され、sビット分のビット列が選択できなかった場合には、ステップS65の処理が実行される。
[ステップS64]圧縮処理部130は、ステップS62で選択したビット列と同一のビット列が、符号化行列Aに存在するか否かを探索する。同一のビット列が存在した場合には、ステップS61の処理が実行され、同一のビット列が存在しなかった場合には、ステップS65の処理が実行される。
[ステップS65]圧縮処理部130は、冗長データの先頭からrビットの位置から(s−1)ビット分のビット列の代わりに、開始符号“11110”、位置情報および長さ情報を、圧縮データとして出力する。位置情報は、ステップS44(またはステップS64)で符号化行列Aから探索されたビット列の先頭位置を示す情報であり、そのビット列の符号化行列Aにおける行番号と、行番号に対応する行の先頭からのビット数を示すビット数情報とを含む。また、長さ情報は、(s−1)の値となる。
[ステップS66]圧縮処理部130は、変数rに(s−1)の値を加算する。この後、図8のステップS42の処理が実行される。
以上の図9の処理では、ステップS61〜S64のループ処理により、冗長データ内のビット列のビット数を1ビットずつ増加させながら、そのビット列と同一のビット列が符号化行列Aに存在するかを順次判定していく。そして、同一のビット列が符号化行列Aに存在しないと判定されるまで、ループ処理を繰り返す。このような処理により、符号化行列A内に同一のビット列が存在する符号化データ内のビット列として、できるだけビット数の大きいビット列を探索し、それらのビット列を開始符号、位置情報および長さ情報により置換する。これにより、圧縮データの圧縮率が高められる。
なお、同一のビット列を探索する際のビット列のビット数である変数sを固定値とする場合には、圧縮データに長さ情報を記述する必要はない。この場合、例えば、図8のステップS44において同一のビット列が存在すると判定された後に、符号化データのsビット分のビット列が、開始符号および位置情報によって置換されればよい。そして、変数rにsの値が加算された後、ステップS42の処理が実行されればよい。
また、上記の圧縮処理では、符号化行列Aを行に沿った方向にスキャンすることで、符号化データと同一のビット列を探索したが、これに限らず、例えば、符号化行列Aを列に沿った方向にスキャンしてもよい。あるいは、符号化行列Aを斜め方向にスキャンしてもよい。
さらに別の例として、符号化行列Aを複数の方向にスキャンすることで、冗長データと同一のビット列を探索してもよい。この場合、圧縮データに、どの方向にスキャンしたかを示す方向情報をさらに記述することで、冗長データを正しく伸張することができる。
以上説明した圧縮処理により圧縮データが生成されると、送信処理部140は、UDPに従って圧縮データをパケット化し、ネットワーク300を介して情報処理装置200に対して送信する。送信処理部140は、図8の処理により出力された1つの冗長データを、1つのパケットに格納してネットワーク300に送信させる。
次に、受信側の情報処理装置200における処理について説明する。まず、図10は、伸張処理部の処理手順の例を示すフローチャートである。
情報処理装置200において、受信処理部220は、ネットワーク300を通じて受信したパケットから圧縮データを抽出し、伸張処理部230に転送する。前述のように、圧縮データは、冗長データを単位としてパケットに格納されている。受信処理部220は、受信したパケットから1つの冗長データに基づく圧縮データを抽出し、伸張処理部230に供給する。
伸張処理部230は、受信処理部220からの圧縮データを冗長データを単位として受信する。そして、受信したデータを、HDDなどの記憶媒体にあらかじめ格納された符号化行列Aを参照しながら伸張し、符号化データを復元する。図10のフローチャートの処理は、例えば、1つの冗長データに基づく圧縮データを伸張処理部230が読み込むたびに実行される。
[ステップS81]伸張処理部230は、変数rを0にする。
[ステップS82]伸張処理部230は、1つの冗長データに基づく圧縮データの先頭からrビットの位置から4ビットのビット列を選択する。
[ステップS83]伸張処理部230は、ステップS82で4ビットのビット列が選択可能であったか否かを判定する。4ビットのビット列が選択できた場合には、ステップS85の処理が実行され、4ビットのビット列が選択できなかった場合には、ステップS84の処理が実行される。
[ステップS84]伸張処理部230は、冗長データに基づく圧縮データの先頭からrビットの位置以降の残りのビット列を、符号化データとしてそのまま出力する。ここで、上記のステップS83では、冗長データに基づく圧縮データの先頭からrビットの位置から最後尾までのビット数が4ビット未満である場合、ビット列を選択できない。この場合には、残りのビット列は圧縮されていないので、残りのビット列はそのまま出力される。この出力処理後、伸張処理が終了される。
[ステップS85]伸張処理部230は、ステップS82で選択したビット列が“1111”であるか否かを判定する。ビット列が“1111”である場合には、ステップS87の処理が実行され、ビット列が“1111”でない場合には、ステップS86の処理が実行される。
[ステップS86]伸張処理部230は、変数rに1を加算する。この後、ステップS82の処理が実行される。
ステップS86の処理時には、ステップS82で選択したビット列のうち少なくとも1ビット目は、圧縮処理時に符号化データを置換したものではないと考えられる。このため、圧縮データにおける判別対象とするビット列の先頭が1ビット分進められ、進められた先頭から4ビット分のビット列を判別対象として、ステップS82からの処理が実行される。
[ステップS87]伸張処理部230は、ステップS82で選択したビット列の次のビットが1であるか否かを判定する。次のビットが1である場合には、ステップS88の処理が実行され、次のビットが0である場合には、ステップS90の処理が実行される。
[ステップS88]伸張処理部230は、ステップS82で選択した4ビットのビット列を、符号化データとして出力する。
[ステップS89]伸張処理部230は、変数rに5を加算する。この後、ステップS82の処理が実行される。
上記のステップS88,S87によれば、ステップS82で選択されたビット列の次のビット“1”が削除され、元のビット列“1111”が復元される。
[ステップS90]冗長データに基づく圧縮データの先頭からrビットの位置から5ビット分のデータは、開始符号であると判定される。このため、伸張処理部230は、ステップS87での判別対象としたビット(すなわち、開始符号)に続く30ビット分のビット列から、位置情報および長さ情報を抽出する。
[ステップS91]伸張処理部230は、抽出した位置情報および長さ情報を基づくビット列を、符号化行列Aから読み込む。より具体的には、伸張処理部230は、位置情報に含まれる行番号から、符号化行列Aにおける行を特定し、位置情報に含まれるビット数情報から、特定した行の先頭からのビット数を特定する。次に、特定されたビット数の位置から、長さ情報に基づくビット数分のビット列を読み込む。
そして、伸張処理部230は、読み込んだビット列を、冗長データに基づく圧縮データの先頭からrビットの位置から5ビット分のビット列の代わりに、符号化データとして出力する。
[ステップS92]伸張処理部230は、開始符号、位置情報および長さ情報の総ビット数である35を、変数rに加算する。この後、ステップS82の処理が実行される。
上記のステップS90,S91の処理により、圧縮処理時に開始符号、位置情報および長さ情報と置換されていた元のビット列が復元される。そして、ステップS92の処理により、復元されたビット列の次の4ビットのビット列が判別対象とされて、ステップS82からの処理が実行される。
なお、本実施の形態では、ステップS91での符号化行列Aからのビット列の読み込みは、行に沿った方向に行うものとするが、これに限らず、例えば列に沿った方向に読み込む方法や、斜め方向に読み込む方法が採られてもよい。いずれの場合にも、ビット列をどの方向に読み込むかは、送信側の情報処理装置100との間に事前に決められている必要がある。
また、前述のように、符号化行列Aからのビット列の読み込み方向が可変とされていてもよい。この場合、圧縮データからは、開始符号の後の所定の領域に、読み込み方向を示す方向情報が記述されている。伸張処理部230は、位置情報に基づく符号化行列Aの位置から、方向情報に基づく方向に対して、長さ情報に基づくビット数分のビット列を読み込む。
次に、図11は、復号化処理について説明する図である。
復号化処理部240は、伸張処理部230から出力された符号化データから、冗長データを部分ブロック単位で選択して復号化する。例えば、前述の図5では、0番目から(h−1)番目の部分ブロックのうち、1番目の部分ブロックに含まれる4つの分割データD10,D11,D12,D13を基に、冗長データE10,E11,E12,E13,E14,E15を生成した。一方、4つの分割データD10,D11,D12,D13を復号化する際には、図11に示すように、伸張された符号化データから冗長データE10,E11,E12,E13,E14,E15が選択される。
1つの部分ブロック内の分割データを復号化する基本的な処理手順は、次のようになる。復号化処理部240は、まず、1つの部分ブロックに基づく冗長データのうち、符号化行列Aの列数であるm個の冗長データを選択する。次に、復号化処理部240は、選択した冗長データに含まれる行番号を基に、符号化処理の際に用いたビット列を符号化行列Aから読み込み、それらのビット列ad0,ad1,・・・,ad(m-1)を行列配置した行列Adを生成する。このとき、ビット列に対応する排他的論理和データdxor0,dxor1,・・・,dxor(m-1)も行列配置して、行列Dxorを生成する。図11の例ではm=4であるので、行列Adは、ビット列ad0,ad1,ad2,ad3を各行に持つ4行4列の行列となり、行列Dxorは、排他的論理和データdxor0,dxor1,dxor2,dxor3を各行に持つ4行4列の行列となる。
次に、復号処理部240は、行列Adを、各行の入れ替えや行同士の論理和演算などを行うことで、単位行列化する。例えば、行列Adを上三角行列に変換した後、変換された行列Adの右上側に存在する1の値を0にするように処理することで、単位行列化が行われる。また、復号処理部240は、行列Adを単位行列化する際に、行列Adに対して施した処理と同じ処理を、行列Dxorに対しても施す。
行列Adを単位行列化できた場合には、その時点での行列Dxorにおける各行のビット列が、それぞれ分割データとなる。図11の例では、ビット列ad0,ad1,ad2,ad3を各行に持つ行列Adが単位行列化されたときの、行列Dxorの各行のビット列を、それぞれdxor0’,dxor1’,dxor2’,dxor3’と表している。この場合、ビット列dxor0’,dxor1’,dxor2’,dxor3’は、それぞれ分割データD10,D11,D12,D13を表す。
また、符号化処理部240は、最初に選択したm個の冗長データに基づく行列Adが単位行列化できなかった場合には、同じ部分ブロックに基づく次の冗長データを基にビット列を復元し、このビット列を行列Adに加えて再度単位行列化を行う。このとき、復元されたビット列に対応する排他的論理和データも行列Dxorに加え、この行列に対して、ビット列が加えられた行列Adに施した処理と同じ処理を施す。ビット列が加えられた行列Adのうちm行分の行列を単位行列化できた場合には、単位行列の各行に対応する行列Dxorの行が、それぞれ分割データとなる。
ところで、符号化データが情報処理装置200に伝送されて伸張されるまでの間には、例えば、パケットの消失などによりデータの一部が欠落することがある。このため、伸張処理部230によって伸張された符号化データには、同一部分ブロックに基づいて符号化されたすべての冗長データが含まれるとは限らない。しかし、冗長データの欠落があった場合でも、同一部分ブロックに基づいて符号化された複数の冗長データのうち、少なくともm個の冗長データを基に生成した行列Adを単位行列化することができれば、部分ブロック内のすべての分割データを復元することができる。
次に、図12は、復号化処理部の処理手順の例を示すフローチャートである。なお、図12のフローチャートは、送信対象データの先頭からl番目の部分ブロックに含まれる分割データDl0,Dl1,・・・,Dl(m-1)を復号化する処理手順を示している。従って、送信対象データのすべてを復号化するためには、図12の処理が、部分ブロックの個数であるh回だけ繰り返される。
[ステップS111]復号化処理部240は、伸張された、同一部分ブロックに基づく冗長データのうち、m個の冗長データを選択する。そして、選択したm個の冗長データに記述された行番号を基に、符号化行列Aからm個のビット列を復元する。
[ステップS112]復号化処理部240は、m個の冗長データから復元したm個のビット列を行列配置した行列Ad(図12では“Admm”と表記)を生成する。これとともに、対応する冗長データから抽出したm個の排他的論理和データを行列配置した行列Dxor(図12では“行列Dxormm”と表記)を生成する。
[ステップS113]復号化処理部240は、行列Adを上三角行列化する。また、上三角行列化処理時に行列Adに施した処理と同じ処理を、行列Dxorにも施す。なお、このステップS113の処理については、後の図13においてさらに詳しく説明する。
[ステップS114]復号化処理部240は、行列Adを上三角行列化できたか否かを判定する。上三角行列化できた場合には、ステップS119の処理が実行され、上三角行列化できなかった場合には、ステップS115の処理が実行される。
[ステップS115]復号化処理部240は、伸張された、同一部分ブロックに基づく冗長データに、未選択の冗長データが残っているか否かを判定する。未選択の冗長データがある場合には、ステップS116の処理が実行され、未選択の冗長データがない場合には、ステップS121の処理が実行される。
[ステップS116]復号化処理部240は、未選択の冗長データの1つを選択し、選択した冗長データに記述された行番号を元に、符号化行列Aからビット列を復元する。
[ステップS117]復号化処理部240は、上三角化行列化処理が未完の状態の行列Adに対して、ステップS116で復元したビット列を新たな行として加え、行を加えた行列Adを上三角行列化する。これとともに、処理が未完の状態の行列Dxorに対して、ステップS116で選択した冗長データから抽出した排他的論理和データを新たな行として加え、行を加えた行列Dxorに対して、行列Adに施した処理と同じ処理を施す。
[ステップS118]復号化処理部240は、行列Adのうちm行分の行列を上三角行列化できたか否かを判定する。上三角行列化できた場合には、ステップS119の処理が実行され、上三角行列化できなかった場合には、ステップS115の処理が実行される。
[ステップS119]復号化処理部240は、行列Adを単位行列化するとともに、行列Adに施した処理と同じ処理を、行列Dxorに対して施す。
[ステップS120]復号化処理部240は、ステップS119による処理後の行列Dxorの各行のビット列のうち、行列Ad内の単位行列に対応するm行のビット列を、それぞれ分割データとして出力する。
[ステップS121]行列Adを上三角化行列化できない場合、この行列Adを単位行列化することもできない。このため、復号化処理部240は、復号化に失敗したと判定し、例えば、復号化に失敗したことを表示装置に表示させる。
なお、符号化処理時に、冗長データに行番号の代わりにビット列そのものが格納された場合には、復号化処理部240は、ステップS111,S116において、符号化行列Aを参照することなく、冗長データからビット列を直接抽出できる。
図13は、図12のステップS113の処理手順の例を示すフローチャートである。
[ステップS141]復号化処理部240は、変数iを0とする。変数iは、行列Adのうち処理対象とする行数を指定するものである。
[ステップS142]復号化処理部240は、変数jを0とする。変数jは、行列Adのうち比較対象とする行数を指定するものである。
[ステップS143]復号化処理部240は、jの値がiの値と一致するか否かを判定する。各値が一致する場合には、ステップS150の処理が実行され、各値が一致しない場合には、ステップS144の処理が実行される。
[ステップS144]復号化処理部240は、mビットの基準ビット列をjビットだけ右シフトし、比較ビット列cに設定する。基準ビット列は、mビットのうち最上位ビットのみ1とされ、他のビットが0とされたビット列である。
[ステップS145]復号化処理部240は、比較ビット列cと、行列Adのi行目のビット列adiとの論理積が、0であるか否かを判定する。論理積が0である場合には、ステップS149の処理が実行され、論理積が0以外の値である場合には、ステップS146の処理が実行される。
[ステップS146]復号化処理部240は、比較ビット列cと、行列Adのj行目のビット列adjとの論理積が、0であるか否かを判定する。論理積が0である場合には、ステップS147の処理が実行され、論理積が0以外の値である場合には、ステップS148の処理が実行される。
[ステップS147]復号化処理部240は、行列Adのi行目のビット列adiとj行目のビット列adjとを入れ替えるとともに、行列Dxorのi行目の排他的論理和データdxoriとj行目の排他的論理和データdxorjとを入れ替える。
[ステップS148]復号化処理部240は、行列Adのi行目のビット列adiとj行目のビット列adjとの排他的論理和を演算し、その演算結果によって、i行目のビット列adiを更新する。これとともに、行列Dxorのi行目の排他的論理和データdxoriとj行目の排他的論理和データdxorjとの排他的論理和を演算し、その演算結果によって、i行目の排他的論理和データdxoriを更新する。
[ステップS149]復号化処理部240は、変数jに1を加算する。この後、ステップS143の処理が実行される。
[ステップS150]復号化処理部240は、変数iに1を加算する。
[ステップS151]復号化処理部240は、変数iが(m−1)の値と一致するか否かを判定する。各値が一致する場合には、図12のステップS114が実行され、各値が一致しない場合には、ステップS142の処理が実行される。
なお、以上の図13では、あらかじめm個の冗長データを基にm行m列の行列を生成した後の処理手順を例示した。しかし、この他に例えば、冗長データを1つずつ読み込みながら、ステップS147の入れ替え処理や、ステップS148の排他的論理和演算処理が必要か否かを判定していき、m行m列の行列を順次生成していく処理手順としてもよい。この場合、復号化処理部240は、例えば、ステップS142の処理の直前に、新たな冗長データに基づくビット列adiおよび排他的論理和データdxoriを取得して、ステップS143以降の処理を実行する。また、ステップS150の直前において、ビット列adiおよび排他的論理和データdxoriを、それぞれ行列Adの最終行および行列Dxorの最終行に付加して、各行列の行数を更新する。
図14は、上三角行列化処理の具体例を説明する図である。
図14では、図5の例と同様に、符号化行列Aの列数mが4であったものとする。このとき、復号化処理部240は、送信側の情報処理装置100で生成された、図5に示した冗長データE10,E11,E12,E13,E14,E15のうち、冗長データE10,E12,E13,E14,E15を正常に取得できたとする。一方、冗長データE11については、正常に取得できなかったものとする。
復号化処理部240は、図12のステップS111において、まず、m個の冗長データE10,E11,E12,E13,を基に、それぞれビット列を復元し、ステップS112において、行列Adおよび行列Dxorを生成する。この状態では、行列Adの0行目のビット列ad0は“1100”、1行目のビット列ad1は“0011”、2行目のビット列ad2は“0101”、3行目のビット列ad3は“0111”となる。
このような行列Adが図13の処理に投入されると、まず、i=0のときは、ステップS143でj=iとなって、ステップS150の処理に移行し、行列Adは変化しない。次に、i=1のとき、j=0,1のいずれの場合でも、ステップS145での論理積が0となり、行列Adは変化しない。
次に、i=2となると、j=0のときはステップS145での論理積が0となり、行列Adは変化しない。次に、j=1のとき、ステップS145において、比較ビット列c(“0100”)とビット列ad2(“0101”)との論理積が0にならないため、ステップS146に移行する。ステップS146では、比較ビット列c(“0100”)とビット列ad1(“0011”)との論理積が0になるため、ステップS147に移行し、行列Adの1行目と2行目とが入れ替えられ、行列Adが更新される。このとき、行列Dxorについても同様に、1行目と2行目とが入れ替えられて、行列Dxorが更新される。
次に、i=3となると、j=0のときは行列Adは変化しない。次に、j=1のとき、比較ビット列c(“0100”)とビット列ad3(“0111”)との論理積が0にならないため、ステップS146に移行する。ステップS146では、比較ビット列c(“0100”)とビット列ad1(“0101”)との論理積が0にならないため、ステップS148に移行する。ステップS148では、行列Adの1行目と3行目との排他的論理和が演算され、その演算結果であるビット列“0010”によって3行目が更新される。すなわち、このステップS148では、行列Adの3行目の上位から1ビットの数値1が不要であるので、この数値を0に変換する処理が行われる。また、ステップS148では、行列Dxorについても同様に、1行目と3行目との排他的論理和が演算されて、その演算結果により3行目が更新される。
次に、j=2のとき、比較ビット列c(“0010”)とビット列ad3(“0010”)との論理積が0にならないため、ステップS146に移行する。ステップS146では、比較ビット列c(“0010”)とビット列ad2(“0011”)との論理積が0にならないため、ステップS148に移行する。ステップS148では、行列Adの2行目と3行目との排他的論理和が演算され、その演算結果であるビット列“0001”によって3行目が更新される。また、ステップS148では、行列Dxorについても同様に、2行目と3行目との排他的論理和が演算されて、その演算結果により3行目が更新される。
以上の処理の後、図12のステップS114では、行列Adの1行目の上位から0ビット、2行目の上位から0ビットおよび1ビット、3行目の上位から0ビット〜2ビットのすべての値が0であるか否かが判定される。図14の例では、これらのすべてが0であるので、行列Adは上三角行列に変換されたことになる。
なお、図14に示した処理例では、最初に選択したm個の冗長データE10,E12,E13,E14に基づく行列Adを、上三角行列に変換することができた。しかし、m個の冗長データに基づく行列Adを上三角行列に変換できなかった場合には、ステップS116に移行して、次の冗長データから求めたビット列および排他的論理和データが、それぞれ行列Adおよび行列Dxorに加えられる。ステップS117では、新たな冗長データから求めたビット列を“ビット列adiとして、図13のステップS142からステップS150までの処理が実行される。そして、ステップS118では、行列Adの0行目から(m−1)行目までが上三角行列であるか否かが判定される。
次に、図15は、図12のステップS119の処理手順の例を示すフローチャートである。
[ステップS171]復号化処理部240は、変数iを(m−2)とする。この処理により、比較対象の行が、上三角行列における最も下の行から1行目に設定される。
[ステップS172]復号化処理部240は、変数iが0であるか否かを判定する。変数iが1以上である場合、ステップS173の処理が実行され、変数iが0である場合、単位行列化処理が終了される。
[ステップS173]復号化処理部240は、前述の基準ビット列を(i+1)ビット分だけ右シフトし、比較ビット列cに設定する。
[ステップS174]復号化処理部240は、処理対象の行の行数を示す変数jに、変数iの値を設定する。
[ステップS175]復号化処理部240は、変数jの値が0以上であるか否かを判定する。変数jが0以上の場合には、ステップS177の処理が実行され、変数jが0未満の場合には、ステップS176の処理が実行される。
[ステップS176]復号化処理部240は、変数iを1減算し、比較対象の行を1つ上に移動させる。この後、ステップS172の処理が実行される。
[ステップS177]復号化処理部240は、比較ビット列cと行列Adのj行目のビット列adjとの論理積が、0であるか否かを判定する。論理積が0である場合、ステップS179の処理が実行され、論理積が0でない場合、ステップS178の処理が実行される。
[ステップS178]復号化処理部240は、行列Adのi行目のビット列adiとj行目のビット列adjとの排他的論理和を演算し、その演算結果によって、j行目のビット列adjを更新する。これにより、行列Adのj行目における上位からiビット目の1が、0に変換される。また、復号化処理部240は、行列Dxorのi行目の排他的論理和データdxoriとj行目の排他的論理和データdxorjとの排他的論理和を演算し、その演算結果によって、j行目の排他的論理和データdxorjを更新する。
[ステップS179]復号化処理部240は、変数jを1減算し、処理対象の行を1つ上に移動させる。この後、ステップS175の処理が実行される。
以上の図15の処理により、上三角行列に変換された行列Adの、y行y列(ただし、yは0から(m−1)までの整数)のビットを除く右上側半分のビットが、すべて0に変換されて、単位行列が生成される。
以上説明した第2の実施の形態では、送信対象データが情報処理装置100で符号化されることにより、例えば、伝送路上でのパケットの消失などが発生した場合でも、受信側の情報処理装置200において送信対象データを復元し得る。このため、UDPなどの無手順方式の通信プロトコルを使用して送信対象データを送信する際でも、データ伝送の信頼性を高めることができる。
また、送信対象データは、符号化された後さらに、符号化処理で用いたビット列を用いて圧縮されるので、送信されるデータのサイズを小さくすることができる。すなわち、無手順方式の通信プロトコルを使用し、なおかつ、送信されるデータのサイズが小さくされることで、実効通信速度を高めることができる。従って、データ伝送の信頼性を高め、なおかつ、通信速度を向上させることができる。
また、データの圧縮および伸張の処理時には、データの符号化および復号化で共通に用いる符号化ビット列が使用される。このため、送信側および受信側に圧縮および伸張のための特別なデータを事前に記憶しておくことや、送信側と受信側で圧縮および伸張のための特別なデータを事前に受け渡しておくことの必要がなくなる。従って、処理を効率化できるとともに、送信側および受信側の各装置のメモリ容量を節約できる。
なお、符号化行列Aは、例えば、次のような処理手順で生成することができる。図16は、符号化行列の生成手順の例を示すフローチャートである。この図16の処理は、例えば、送信側の情報処理装置100で実行される。また、生成された符号化行列Aは、実際のデータ転送処理の前に受信側の情報処理装置200に受け渡される。
[ステップS191]情報処理装置100は、n行m列の符号化行列Aを初期化する。
[ステップS192]情報処理装置100は、符号化行列Aにおけるt行目のtビット目の位置に1をセットする(ただし、tは0以上(t−1)以下の整数)。
[ステップS193]情報処理装置100は、変数uを0とする。
[ステップS194]情報処理装置100は、符号化行列Aのu列のランダムな位置に1をセットする。
[ステップS195]情報処理装置100は、u列における1の個数が(n−m+1)以上であるか否かを判定する。1の個数が(n−m+1)以上である場合には、ステップS196の処理が実行され、1の個数が(n−m+1)未満である場合には、ステップS194の処理が再度実行される。
[ステップS196]情報処理装置100は、符号化行列Aにおけるu列を除く他の列に、u列と同じ値を持つものがあるか否かを判定する。u列と同じ列がある場合には、ステップS197の処理が実行され、u列と同じ列がない場合には、ステップS198の処理が実行される。
[ステップS197]情報処理装置100は、符号化行列Aにおけるu行目のuビット目の位置以外の位置に0をセットして初期化する。この後、ステップS194の処理が実行される。
[ステップS198]情報処理装置100は、変数uに1を加算する。
[ステップS199]情報処理装置は、変数uの値が(m−1)と一致するか否かを判定する。(m−1)と一致する場合には、処理が終了され、(m−1)と一致しない場合には、ステップS194の処理が実行される。
以上の図16の処理によれば、t行目のtビット目の位置がすべて1になるとともに、すべての列が(n−m+1)以上の1を有し、なおかつ、すべての列の値が異なるものとなる。また、符号化行列Aの行数nを大きくするほど、符号化データを伝送する際の信頼性が高くなる。
ただし、信頼性をより高くするためには、符号化行列Aは、単位行列化が容易であることが望ましいが、図16の処理では、このような条件を満たすような符号化行列Aが生成されるとは限らない。また、n,mの値が大きくなるほど、単位行列化が容易になる行列を求めることは困難になる。従って、実際には例えば、図16の手順で複数の符号化行列Aを生成して、それぞれの符号化行列Aについて適当な回数だけランダムに行を間引きながら単位行列化処理を実行し、単位行列化される確率が最も高い符号化行列Aを採用する。
〔第3の実施の形態〕
次に、第3の実施の形態として、第2の実施の形態とは異なる符号化処理および復号化処理が行われる場合の例について説明する。
図17は、第3の実施の形態に係る送信側/受信側の情報処理装置の機能を示すブロック図である。なお、この図17では、図4に対応する機能については同じ符号を付して示している。
図17において、情報処理装置100a,200aは、それぞれ第2の実施の形態における情報処理装置100,200にそれぞれ対応する装置であり、情報処理装置100aから情報処理装置200aに対してデータが送信される。情報処理装置100a,200aは、例えば、図3に示したハードウェア構成を有し、図1に示したようにネットワークを通じて互いに接続されている。
送信側の情報処理装置100aは、符号化処理部120a、圧縮処理部130および送信処理部140を備えている。圧縮処理部130および送信処理部140は、第2の実施の形態の圧縮処理部130および送信処理部140と同じ処理を行う。ただし、符号化処理部120aから出力される符号化データの構成が異なることから、圧縮処理部130および送信処理部140での取り扱いの単位となる冗長データの内容は、第2の実施の形態とは異なるものとなる。
符号化処理部120aは、第2の実施の形態の符号化処理部120と同様に、送信されたデータがネットワーク上などで消失した場合でも、消失したデータを受信側で復元し得るように、送信対象データを符号化する。また、この符号化処理の際に、受信側と共有される符号化用ビット列が使用される点も、第2の実施の形態と同じである。ただし、符号化処理部120aにおける符号化処理の手順は、第2の実施の形態の符号化処理部120とは異なる。
符号化処理部120aは、送信対象データをmビット(ただし、mは1以上の整数)ごとに分割した分割データを、符号化処理の単位とする。一方、符号化用ビット列のビット数を(m×n)ビット(ただし、nはm以上の整数)とし、符号化用ビット列をmビットごとに分割してn個の単位ビット列を選択する。
符号化処理部120は、分割データと単位ビット列とをプール代数の連立方程式に代入し、その解を求める。そして、求めた解と、その解を求める際に使用した単位ビット列の符号化用ビット列における位置を示す情報とを結合し、符号化データとして出力する。
本実施の形態では、符号化用ビット列は、n行m列の符号化行列Aとして用意されるものとする。そして、単位ビット列の位置を示す情報としては、符号化行列Aの行番号が使用される。なお、本実施の形態におけるmおよびnの値は、第2の実施の形態におけるmおよびnの値とそれぞれ同一である必要はない。
受信側の情報処理装置200aは、受信処理部220、伸張処理部230および復号化処理部240aを備えている。受信処理部220および伸張処理部230は、第2の実施の形態の受信処理部220および伸張処理部230と同じ処理を行う。ただし、受信処理部220および伸張処理部230が取り扱う冗長データの内容は、第2の実施の形態とは異なっている。
復号化処理部240aは、伸張処理部230によって伸張されて得られた符号化データを復号化する。復号化処理部240aは、伸張された符号化データから抽出した位置情報に基づいて、符号化用ビット列(本実施の形態では符号化行列A)から単位ビット列を復元する。そして、復元した単位ビット列と、これに対応する解とを連立方程式に代入することで、送信対象データを復元する。
図18は、第3の実施の形態の符号化処理について説明する図である。
ここでは、1つの分割データの各ビットを上位から“b0,b1,・・・,bm-1”とする。また、符号化用ビット列として、n行m列の符号化行列Aを用いる。図18の例では、n=5,m=4である。そして、符号化行列Aのi行目(ただし、iは0以上の整数)のビット列aiの各ビットを上位から“ai0,ai1,・・・,ai(m-1)”とする。
送信側の情報処理装置100aにおいて、符号化処理部120aは、上記の分割データと、符号化行列Aのi行目のビット列aiとを用いて、次の式(1)に示すプール代数の連立方程式の解piを求める。また、このような演算を符号化行列Aの各行のビット列を用いて行い、解p0,p1,・・・,pn-1を求める。
0i0+b1i1+b2i2+・・・+bm-1i(m-1)=pi ・・・(1)
上記の式(1)は、分割データの1つのビットと、ビット列における対応するビットとの論理積を演算し、すべてのビットに基づく論理積を加算するものである。また、解piは、式(1)の左辺の演算結果が奇数のとき1とされ、偶数のとき0とされる。符号化処理部120aは、式(1)から求められた解p0,p1,・・・,pn-1と、解p0,p1,・・・,pn-1をそれぞれ求める際に使用されたビット列の符号化行列Aにおける行番号とを、符号化データに含める。
図18では、5行4列の符号化行列Aを基に4ビットの分割データを符号化する例を示している。この場合、符号化行列Aの各行に対応する式(1)の解p0,p1,p2,p3,p4として、それぞれ1,1,1,0,1が算出される。符号化処理部120aは、解p0,p1,p2,p3,p4のそれぞれと、対応する行の行番号との組を、符号化データに含める。このような処理が分割データの数だけ繰り返され、1つの行番号に対して分割データの数だけの解が求められ、それらの解が符号化データに記述される。
なお、後の図20で示す符号化処理手順の例では、一定個数の分割データと1つのビット列とを基に算出された解と、ビット列の符号化行列Aにおける行番号との組が、1つの冗長データとして出力される。
図19は、第3の実施の形態の復号化処理について説明する図である。
受信側の情報処理装置200aにおいて、復号化処理部240aは、伸張された符号化データから行番号を抽出して、この行番号を基に符号化行列Aからビット列a0,a1,・・・,a(n-1)を復元する。また、復号化処理部240aは、各ビット列に対応する解を先頭から順次選択することで、1つの分割データに基づく解を取得して、取得した解とビット列とを式(1)の連立方程式に代入する。すなわち、ビット列におけるビット1に対応するデータビットを有効とし、ビット0に対応するデータビットを消去した連立方程式を生成する。そして、復号化処理部240aは、生成した連立方程式を解くことで、mビットの分割データを復元する。
図19の例では、復号化処理部240aは、伸張されたデータから、行番号0,1,2,4と、これらの行番号に対応する解を取得できたものとする。ただし、行番号3と、これに対応する解は、パケットの消失などにより取得できなかったものとする。
この場合、行番号に基づいて、ビット列“1001”“0011”“1100”“0101”が符号化行列Aから復元され、これらのビット列と対応する解とが、連立方程式に代入される。そして、この連立方程式を解くことで、部分ブロックの各ビットb0,b1,b2,b3として、それぞれ0,1,0,1が得られる。このように、伸張されたデータに欠損が生じている場合でも、少なくともm個のビット列に対応する解が得られれば、分割データを復元できる場合がある。
ところで、符号化処理部120aによる連立方程式の計算は、分割データの各ビットbiとビット列aiの各ビットとの論理積を演算した後、その演算結果における1の数を数えること、すなわち、パリティビットを見ることと同等である。一方、復号化処理部240aによって連立方程式を解く処理は、第2の実施の形態とほぼ同様の排他的論理和演算を用いることで、効率よく実行できる。以下、このような処理を用いた場合の符号化処理および復号化処理の処理手順を、フローチャートを用いて説明する。
図20は、符号化処理部の処理手順の例を示すフローチャートである。
[ステップS211]符号化処理部120aは、変数iを0とする。
[ステップS212]符号化処理部120aは、変数jを0とする。
[ステップS213]符号化処理部120aは、変数kを0とする。
[ステップS214]符号化処理部120aは、mビット分の解に相当するmビット列pmjの各ビットを0で初期化する。このmビット列は、1つのビット列aiに対応する解のうち、m個の部分ブロックに基づく解を示すものである。
[ステップS215]符号化処理部120aは、(m×j+k)の値が、送信対象データのサイズ(ビット数)を超えたか否かを判定する。送信対象データのサイズを超えた場合には、送信対象データの末端まで処理が終了したと判定され、ステップS221の処理が実行される。一方、送信対象データのサイズを超えていない場合には、ステップS216の処理が実行される。
[ステップS216]符号化処理部120aは、(m×j+k)番目の分割データD’m*j+kと、符号化行列Aのi行目のビット列aiとの論理積を、一時データfに代入する。
[ステップS217]符号化処理部120aは、一時データfの各ビットの1の数を数える。1の数が奇数の場合には、ステップS218の処理が実行され、1の数が偶数の場合には、ステップS219の処理が実行される。
[ステップS218]符号化処理部120aは、mビット列pmjの上位からkビット目に1をセットする。
[ステップS219]符号化処理部120aは、変数kに1を加算する。
[ステップS220]符号化処理部120aは、変数kが(m−1)と一致するか否かを判定する。変数kが(m−1)より小さい場合には、ステップS215の処理が実行される。この場合、ステップS215からステップS216に移行すると、次の分割データとビット列aiとの間の比較処理が行われる。ステップS215〜S220のループ処理により、1つのビット列aiとm個の分割データとが比較され、分割データに基づく計数値がmビット列pmjの対応ビットにセットされる。一方、変数kが(m−1)に達した場合には、ステップS221の処理が実行される。
[ステップS221]符号化処理部120aは、変数jに1を加算する。この後、ステップS213の処理が実行され、次のm個分の分割データを基に新たなmビット列pmjが生成される。
[ステップS222]この時点では、1つのビット列aiとすべての分割データD’0,D’1,D’2・・・との比較処理が終了される。符号化処理部120aは、符号化行列Aにおけるビット列aiの行番号を示す変数iと、mビット列pm0,pm1,・・・,pmj-1のそれぞれとを結合して、冗長データを生成して出力する。すなわち、本実施の形態における1つの冗長データには、行番号(すなわち、変数i)と、m個の分割ブロックに基づく解(すなわち、1つのmビット列)とが格納される。
なお、第2の実施の形態と同様に、冗長データには、行番号の代わりにビット列そのものが格納されてもよい。
[ステップS223]符号化処理部120aは、変数iが(n−1)と一致するか否かを判定する。変数iが(n−1)より小さい場合には、ステップS224の処理が実行される。一方、変数iが(n−1)と一致した場合、符号化行列Aのすべての行を用いた処理が実行済みであるので、処理が終了される。
[ステップS224]符号化処理部120aは、変数iに1を加算する。この後、ステップS212以降の処理が実行され、新たなビット列を用いて解Pjが算出される。
以上の手順で出力された冗長データが、圧縮処理部130に順次供給され、図8に示した圧縮処理が実行される。そして、圧縮処理部130から出力された圧縮データは、送信処理部140によりパケット化される。このとき、1つの冗長データに対応するデータが、1つのパケットに格納される。
受信側の情報処理装置200aでは、受信処理部220によりパケットから冗長データが抽出され、この冗長データが伸張処理部230によって伸張された後、復号化処理部240aに供給される。
図21は、復号化処理部の処理手順の例を示すフローチャートである。
[ステップS241]復号化処理部240aは、伸張された符号化データから、m個の行番号、すなわち、図20のステップS222で出力された変数iのうちのm個を選択し、選択した行番号が格納されたすべての冗長データを読み込む。そして、冗長データに格納された行番号に対応するm個のビット列を、符号化行列Aから復元する。
なお、冗長データに行番号の代わりにビット列そのものが格納されている場合には、復号化処理部240aは、符号化行列Aを参照することなく、ビット列を冗長データから直接取得することが可能である。
[ステップS242]復号化処理部240aは、復元したm個のビット列を行列配置したm行m列の行列Ad(図21では“Admm”と表記)を生成する。これとともに、冗長データから抽出したmビット列pmを行列配置したm行の行列Pd(図21では“Pdm”と表記)を生成する。行列Pdでは、同一の行番号が格納された冗長データから順次抽出されたmビット列pmが、行に沿った方向に並べられる。また、列に沿った方向には、同じm個の分割データを基に生成されたmビット列pmが並べられる。
[ステップS243]復号化処理部240aは、行列Adを上三角行列化するとともに、上三角行列化処理時に行列Adに施した処理と同じ処理を、行列Pdにも施す。このステップS243での処理は、図12のステップS113において、行列Dxorを行列Pdに置き換えた場合の処理と同じである。
[ステップS244]復号化処理部240aは、行列Adを上三角行列化できたか否かを判定する。上三角行列化できた場合には、ステップS249の処理が実行され、上三角行列化できなかった場合には、ステップS245の処理が実行される。
[ステップS245]復号化処理部240aは、伸張された符号化データに未選択の行番号があるか否かを判定する。未選択の行番号がある場合には、ステップS246の処理が実行され、すべての行番号を選択済みの場合には、ステップS251の処理が実行される。
[ステップS246]復号化処理部240aは、未選択の行番号が格納された冗長データを選択し、行番号を基に符号化行列Aからビット列を復元する。
[ステップS247]復号化処理部240aは、上三角化行列化処理が未完の状態の行列Adに対して、ステップS246で復元したビット列を新たな行として加え、行を加えた行列Adを上三角行列化する。これとともに、処理が未完の状態の行列Pdに対して、ステップS246で選択した冗長データから抽出したすべてのmビット列pmを新たな行として加え、行を加えた行列Pdに対して、行列Adに施した処理と同じ処理を施す。なお、このステップS247の処理は、図12のステップS117において、行列Dxorを行列Pdに置き換えた場合の処理と同じである。
[ステップS248]復号化処理部240aは、行列Adのうちm行分の行列を上三角行列化できたか否かを判定する。上三角行列化できた場合には、ステップS249の処理が実行され、上三角行列化できなかった場合には、ステップS245の処理が実行される。
[ステップS249]復号化処理部240aは、行列Adを単位行列化するとともに、行列Adに施した処理と同じ処理を、行列Pdに対して施す。なお、このステップS249の処理は、図12のステップS119において、行列Dxorを行列Pdに置き換えた場合の処理と同じである。
[ステップS250]復号化処理部240aは、ステップS149による処理後の行列Pdのうち、行列Ad内の単位行列に対応するm行の行列における各列のビット列を、それぞれ分割データとして出力する。
[ステップS251]復号化処理部240aは、復号化に失敗したと判定し、例えば、復号化に失敗したことを表示装置に表示させる。
なお、以上の図21の処理では、すべての分割データに対応するmビット列が行列Adに組み込まれて、一度に演算の対象となっていた。しかし、分割データのうち1つあるいは複数の分割データに対応するmビット列ごとに、図21の処理が実行されてもよい。
また、上記処理において、図20のステップS222では、1つのビット列の行番号iが出力され、その後に、すべての分割データに基づくmビット列pm0,pm1,・・・,pmj-1が冗長データとして出力されてもよい。この場合、mビット列のそれぞれがm個分の解として1つの冗長データに格納され、圧縮処理時の処理単位とされる。一方、行番号iの領域は圧縮対象とされない。圧縮処理後の圧縮データは、例えば、行番号iが格納されるパケットと、mビット列を含む1つの冗長データが格納されるパケットとが、個別に生成される。
受信側の情報処理装置200aでは、受信処理部220によりパケットから行番号iとmビット列とが抽出され、mビット列のそれぞれが伸張処理部230により伸張される。これにより、m個の分割データを用いてそれぞれ演算された解(mビット列)が復元される。復号化処理では、行番号iに基づくビット列と、このビット列とすべての分割データとを用いて演算された解とが、行列Adと行列Pdの同じ行に配置されて、行列Adに対する単位行列化処理が行われる。
以上説明した第3の実施の形態の符号化処理によれば、受信側の情報処理装置200において受信データの欠損があった場合でも、受信データを伸張後に復号化することで、元の送信対象データを復元することが可能になる。
そして、第3の実施の形態では、上記の符号化処理により得られた符号化データが、符号化処理時に用いられた符号化用ビット列(例えば、符号化行列A)を基に圧縮される。また、受信側では、受信データを符号化用ビット列(例えば、符号化行列A)を基に伸張された後、上記の復号化処理が行われる。従って、情報処理装置間で伝送されるデータ量を小さくし、通信速度を高速化することができる。
なお、上記の各実施の形態で示した装置が有する機能は、コンピュータによって実現することができる。その場合には、上記機能の処理内容を記述したプログラムが提供される。そして、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録された光ディスクなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、そのプログラムを、サーバコンピュータからネットワークを介して他のコンピュータに転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、そのプログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) コンピュータに、
符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順、
前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順、
を実行させるデータ符号化プログラム。
(付記2) 前記置換手順では、前記符号化用ビット列から一致するビット列が探索されない前記符号化データの範囲に、前記開始符号と同じビット列が含まれていた場合には、当該ビット列を異なるビット列である識別符号に置換する、
付記1記載のデータ符号化プログラム。
(付記3) 前記開始符号と前記識別符号は、それぞれの先頭から複数ビット数分の部分ビット列が一致し、前記部分ビット列の次の値が互いに異なる値とされ、
前記置換手順では、前記符号化用ビット列から一致するビット列が探索されない前記符号化データの範囲に、前記部分ビット列が含まれていた場合に、当該部分ビット列を前記識別符号に置換する、
付記2記載のデータ符号化プログラム。
(付記4) 前記置換手順では、前記符号化用ビット列から探索する、前記符号化データの一部分と一致するビット列のビット数を可変とし、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と、前記位置情報と、探索されたビット列の長さを示す長さ情報とを組み合わせたビット列に置換する、
付記1〜3のいずれか1つに記載のデータ符号化プログラム。
(付記5) 前記符号化用ビット列は、前記単位ビット列を行の少なくとも一部として有する符号化行列として用意され、
前記置換手順では、前記符号化データの一部分と一致するビット列を前記符号化行列から探索する方向を可変とし、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と、前記位置情報と、前記符号化行列からのビット列の探索方向を示す方向情報とを組み合わせたビット列に置換する、
付記1〜3のいずれか1つに記載のデータ符号化プログラム。
(付記6) 前記符号化手順では、前記符号化対象データを所定ビット数ごとに分割した分割データのそれぞれと、前記符号化用ビット列から同一ビット数のビット列を切り出して得られる複数の前記単位ビット列のそれぞれとを組み合わせて演算処理を行い、前記各演算処理による演算結果と、前記演算処理の際に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかである単位ビット列情報とを含む符号化データを生成し、
前記置換手順では、前記符号化データのうち、一の前記単位ビット列と一以上の前記分割データとを用いて演算された前記演算結果が格納された演算結果領域ごとに、前記符号化データの一部分と一致するビット列を前記符号化用ビット列から探索し、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と前記位置情報とを組み合わせたビット列に置換する、
付記1〜5のいずれか1つに記載のデータ符号化プログラム。
(付記7) 前記コンピュータに、
前記置換手順で処理された前記符号化データを、前記演算結果領域ごとに1つの送信パケットに格納するパケット格納手順、
をさらに実行させる付記6記載のデータ符号化プログラム。
(付記8) 前記符号化手順では、それぞれmビットのn個の前記単位ビット列(ただし、mは1以上の整数であり、nはm以上の整数)のうち一の単位ビット列における各桁を、前記符号化対象データを分割した分割データをm個ごとに選択した分割データ群のうち一の分割データ群に含まれる前記分割データのそれぞれに対応付け、前記一の単位ビット列におけるビット1の位置に対応する前記分割データを選択して、選択した前記分割データの排他的論理和である排他的論理和データを算出し、n個の前記単位ビット列とすべての前記分割データ群との組み合わせごとに算出された前記排他的論理和データと、前記排他的論理和データの演算に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかとを含む前記符号化データを出力し、
前記置換手順では、前記符号化データのうち、一の前記排他的論理和データを少なくとも含むデータ領域ごとに、前記データ領域の一部分と一致するビット列を前記符号化用ビット列から探索する、
付記1〜7のいずれか1つに記載のデータ符号化プログラム。
(付記9) 前記符号化対象データをmビット(ただし、mは1以上の整数)ごとに分割した分割データのうち一の分割データのビット列をb0,b1,b2,・・・,bm-1とし、n個(ただし、nはm以上の整数)の前記単位ビット列のうちi番目の前記単位ビット列をai0,ai1,ai2,・・・,ai(m-1)とし、前記i番目の単位ビット列をプール代数の連立方程式である式(2)に代入したときの解をpiとすると、
前記符号化手順では、前記一の分割データと0番目から(n−1)番目までの前記単位ビット列とを前記式(2)に代入してn個の前記解piを求め、すべての前記分割データについてn個の前記解pjを求め、求めた前記解pjと、前記解pjのそれぞれの演算に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかとを含む前記符号化データを出力し、
前記置換手順では、前記符号化データのうち、一定個数の前記解piを少なくとも含むデータ領域ごとに、前記データ領域の一部分と一致するビット列を前記符号化用ビット列から探索する、
付記1〜7のいずれか1つに記載のデータ符号化プログラム。
0i0+b1i1+b2i2+・・・+bm-1i(m-1)=pi ・・・(2)
(付記10) コンピュータに、
入力データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記入力データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順、
置換後の前記入力データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順、
を実行させるデータ復号化プログラム。
(付記11) 前記置換手順では、前記入力データから、前記開始符号とは異なる所定のビット列である識別符号を検出すると、前記識別符号を前記開始符号と同じビット列に置換する、
付記10記載のデータ復号化プログラム。
(付記12) 前記開始符号と前記識別符号は、それぞれの先頭から複数ビット数分の部分ビット列が一致し、前記部分ビット列の次の値が互いに異なる値とされる、
付記11記載のデータ復号化プログラム。
(付記13) 前記置換手順では、前記位置情報と長さ情報とを前記入力データの前記置換範囲から検出し、検出した前記位置情報に基づく前記符号化用ビット列の位置から前記長さ情報に基づくビット数の前記置換ビット列を抽出する、
付記10〜12のいずれか1つに記載のデータ復号化プログラム。
(付記14) 前記符号化用ビット列は、前記単位ビット列を行の少なくとも一部として有する符号化行列として用意され、
前記置換手順では、前記位置情報と方向情報とを前記入力データの前記置換範囲から検出し、検出した前記位置情報に基づく前記符号化行列の位置から、検出した前記方向情報に基づく方向に並ぶビット列を前記置換ビット列として抽出する、
付記10〜12のいずれか1つに記載のデータ復号化プログラム。
(付記15) 前記復号化手順では、前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかを含む単位ビット列情報を、置換後の前記入力データから抽出するとともに、前記符号化対象データを所定ビット数ごとに分割した分割データと前記単位ビット列とを基に符号化処理時に演算された演算結果を、置換後の前記入力データから抽出し、複数の前記単位ビット列情報に基づく複数の前記単位ビット列、および、当該複数の単位ビット列と前記分割データのうち同じ分割データとを基に演算された複数の前記演算結果を用いて演算処理を行うことで、前記同じ分割データを復元する、
付記10〜14のいずれか1つに記載のデータ復号化プログラム。
(付記16) 前記コンピュータに、
前記入力データのうち、一の前記単位ビット列と一以上の前記分割データとを基に前記符号化処理時に演算された前記演算結果が格納された一の演算結果領域のデータを、一の受信パケットから抽出する受信手順、
をさらに実行させ、
前記置換手順では、前記一の受信パケットから抽出された前記演算結果領域のデータごとに、前記開始符号の検出を行う、
付記15記載のデータ復号化プログラム。
(付記17) 前記単位ビット列はmビット(ただし、mは1以上の整数)のビット列であり、
前記復号化手順では、m個の前記単位ビット列情報に基づくm個の前記単位ビット列を行列配置した第1の行列を単位行列化するとともに、当該m個の単位ビット列と前記同じ分割データとを基に符号化処理時に演算されたm個の前記演算結果を行列配置した第2の行列に対して、単位行列化処理の際に前記第1の行列に施した処理と同じ処理を施し、処理後の前記第2の行列から前記同じ分割データを復元する、
付記15または16に記載のデータ復号化プログラム。
(付記18) 前記一の分割データのビット列をb0,b1,b2,・・・,bm-1(ただし、mは1以上の整数)とし、m個の前記単位ビット列情報に基づくm個の前記単位ビット列のうちi番目(ただし、iは0以上の整数)の前記単位ビット列をai0,ai1,ai2,・・・,ai(m-1)とし、前記i番目の単位ビット列をプール代数の連立方程式である式(3)に代入したときの解をpiとすると、
前記符号化手順では、0番目から(m−1)番目までのm個の前記単位ビット列、および、当該m個の単位ビット列と前記一の分割データとを基に演算されたm個の前記解piを、前記式(3)に代入することで、前記一の分割データを復元する、
付記15または16に記載のデータ復号化プログラム。
0i0+b1i1+b2i2+・・・+bm-1i(m-1)=pi ・・・(3)
(付記19) 符号化処理手段が、符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順と、
置換処理手段が、前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順と、
を有するデータ符号化方法。
(付記20) 置換処理手段が、入力データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記入力データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順と、
復号化処理手段が、置換後の前記入力データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順と、
を有するデータ復号化方法。
1,2 情報処理装置
3 符号化ビット列
11 符号化処理手段
12 圧縮処理手段
21 伸張処理手段
22 復号化処理手段

Claims (8)

  1. コンピュータに、
    符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順、
    前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順、
    を実行させるデータ符号化プログラム。
  2. 前記置換手順では、前記符号化用ビット列から一致するビット列が探索されない前記符号化データの範囲に、前記開始符号と同じビット列が含まれていた場合には、当該ビット列を異なるビット列である識別符号に置換する、
    請求項1記載のデータ符号化プログラム。
  3. 前記置換手順では、前記符号化用ビット列から探索する、前記符号化データの一部分と一致するビット列のビット数を可変とし、探索されたビット列と一致する前記符号化データのビット列を、前記開始符号と、前記位置情報と、探索されたビット列の長さを示す長さ情報とを組み合わせたビット列に置換する、
    請求項1または2記載のデータ符号化プログラム。
  4. 前記符号化手順では、それぞれmビットのn個の前記単位ビット列(ただし、mは1以上の整数であり、nはm以上の整数)のうち一の単位ビット列における各桁を、前記符号化対象データを分割した分割データをm個ごとに選択した分割データ群のうち一の分割データ群に含まれる前記分割データのそれぞれに対応付け、前記一の単位ビット列におけるビット1の位置に対応する前記分割データを選択して、選択した前記分割データの排他的論理和である排他的論理和データを算出し、n個の前記単位ビット列とすべての前記分割データ群との組み合わせごとに算出された前記排他的論理和データと、前記排他的論理和データの演算に使用された前記単位ビット列、または、当該単位ビット列の前記符号化用ビット列における位置を示す情報のいずれかとを含む前記符号化データを出力し、
    前記置換手順では、前記符号化データのうち、一の前記排他的論理和データを少なくとも含むデータ領域ごとに、前記データ領域の一部分と一致するビット列を前記符号化用ビット列から探索する、
    請求項1〜3のいずれか1項に記載のデータ符号化プログラム。
  5. コンピュータに、
    入力データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記入力データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順、
    置換後の前記入力データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順、
    を実行させるデータ復号化プログラム。
  6. 前記置換手順では、前記入力データから、前記開始符号とは異なる所定のビット列である識別符号を検出すると、前記識別符号を前記開始符号と同じビット列に置換する、
    請求項5記載のデータ復号化プログラム。
  7. 符号化処理手段が、符号化対象データと、符号化用ビット列から得られる単位ビット列とから、符号化データを得る符号化手順と、
    置換処理手段が、前記符号化用ビット列から前記符号化データの一部分と一致するビット列を探索し、探索されたビット列と一致する前記符号化データのビット列を、置換範囲の開始位置を示す開始符号と、探索されたビット列の前記符号化用ビット列における位置に関する位置情報とを組み合わせたビット列に置換する置換手順と、
    を有するデータ符号化方法。
  8. 置換処理手段が、入力データから、置換範囲の開始位置を示す開始符号を検出すると、前記開始符号から開始される前記置換範囲から位置情報を検出し、検出した前記位置情報に基づく符号化用ビット列の位置から置換ビット列を抽出し、前記入力データにおける前記開始符号および前記位置情報を含む前記置換範囲を前記置換ビット列に置換する置換手順と、
    復号化処理手段が、置換後の前記入力データと、前記符号化用ビット列から得られる単位ビット列とから、符号化対象データを復元する復号化手順と、
    を有するデータ復号化方法。
JP2009261649A 2009-11-17 2009-11-17 データ符号化プログラム、データ復号化プログラムおよび方法 Active JP5397179B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009261649A JP5397179B2 (ja) 2009-11-17 2009-11-17 データ符号化プログラム、データ復号化プログラムおよび方法
US12/947,475 US8184024B2 (en) 2009-11-17 2010-11-16 Data encoding process, data decoding process, computer-readable recording medium storing data encoding program, and computer-readable recording medium storing data decoding program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009261649A JP5397179B2 (ja) 2009-11-17 2009-11-17 データ符号化プログラム、データ復号化プログラムおよび方法

Publications (2)

Publication Number Publication Date
JP2011109361A true JP2011109361A (ja) 2011-06-02
JP5397179B2 JP5397179B2 (ja) 2014-01-22

Family

ID=44010929

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009261649A Active JP5397179B2 (ja) 2009-11-17 2009-11-17 データ符号化プログラム、データ復号化プログラムおよび方法

Country Status (2)

Country Link
US (1) US8184024B2 (ja)
JP (1) JP5397179B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012049757A (ja) * 2010-08-26 2012-03-08 Fujitsu Ltd データ転送プログラム、データ転送方法及び情報処理装置

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8504847B2 (en) * 2009-04-20 2013-08-06 Cleversafe, Inc. Securing data in a dispersed storage network using shared secret slices
US10795766B2 (en) 2012-04-25 2020-10-06 Pure Storage, Inc. Mapping slice groupings in a dispersed storage network
US10621044B2 (en) 2012-04-25 2020-04-14 Pure Storage, Inc. Mapping slice groupings in a dispersed storage network
US9380032B2 (en) 2012-04-25 2016-06-28 International Business Machines Corporation Encrypting data for storage in a dispersed storage network
KR101613984B1 (ko) * 2013-06-14 2016-04-20 최수정 입력 데이터의 상대적 고밀도를 이용한 부호화 방법 및 장치
US20150007057A1 (en) * 2013-07-01 2015-01-01 Cisco Technlogy, Inc. System and Method for Application Sharing
EP3127110B1 (en) 2014-04-02 2018-01-31 Dolby International AB Exploiting metadata redundancy in immersive audio metadata
US10031806B2 (en) * 2016-11-01 2018-07-24 Cisco Technology, Inc. Efficient repair of erasure coded data based on coefficient matrix decomposition
US20210127125A1 (en) * 2019-10-23 2021-04-29 Facebook Technologies, Llc Reducing size and power consumption for frame buffers using lossy compression
CN117579078B (zh) * 2024-01-11 2024-04-12 央视国际网络有限公司 数据编码方法、数据解码方法、装置及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10271342A (ja) * 1997-03-26 1998-10-09 Ricoh Co Ltd 2値画像符号化方法
JP2003061095A (ja) * 2001-08-08 2003-02-28 Matsushita Electric Ind Co Ltd 画像符号化装置及び画像符号化方法
JP2003188735A (ja) * 2001-12-13 2003-07-04 Ntt Data Corp データ圧縮装置及び方法並びにプログラム
JP2006271006A (ja) * 2006-06-12 2006-10-05 Fujitsu Ltd データ配信方法、システム、伝送方法及びプログラム
JP2006295683A (ja) * 2005-04-13 2006-10-26 Canon Inc 画像符号化方法及び画像符号化装置
JP2008172617A (ja) * 2007-01-12 2008-07-24 Fujitsu Ltd 符号化装置、復号装置、符号化プログラム、復号プログラム、データ転送システム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4491934A (en) * 1982-05-12 1985-01-01 Heinz Karl E Data compression process
DE69615950T2 (de) * 1995-02-08 2002-05-29 Koninkl Philips Electronics Nv Kodierungsanordnung und -verfahren zur kodierung von (n-1)-bit informationsworten in n-bit kanalworte und dekodierungsanordnung und -verfahren zur dekodierung der kanalworte in informationsworte
JP2006211331A (ja) * 2005-01-28 2006-08-10 Nec Corp データ符号化装置、データ復号装置及びデータ符号化/復号システム
NZ548528A (en) * 2006-07-14 2009-02-28 Arc Innovations Ltd Text encoding system and method

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10271342A (ja) * 1997-03-26 1998-10-09 Ricoh Co Ltd 2値画像符号化方法
JP2003061095A (ja) * 2001-08-08 2003-02-28 Matsushita Electric Ind Co Ltd 画像符号化装置及び画像符号化方法
JP2003188735A (ja) * 2001-12-13 2003-07-04 Ntt Data Corp データ圧縮装置及び方法並びにプログラム
JP2006295683A (ja) * 2005-04-13 2006-10-26 Canon Inc 画像符号化方法及び画像符号化装置
JP2006271006A (ja) * 2006-06-12 2006-10-05 Fujitsu Ltd データ配信方法、システム、伝送方法及びプログラム
JP2008172617A (ja) * 2007-01-12 2008-07-24 Fujitsu Ltd 符号化装置、復号装置、符号化プログラム、復号プログラム、データ転送システム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6013033701; 亀山裕亮,佐沢真一,佐藤裕一: 'ミッドサイズな符号長に適した消失訂正符号の提案とクラウドコンピューティングでの高速データ転送への適用' 電子情報通信学会技術研報告 vol.109,no.190, 20090903, pp.47-52, 社団法人電子情報通信学会 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012049757A (ja) * 2010-08-26 2012-03-08 Fujitsu Ltd データ転送プログラム、データ転送方法及び情報処理装置

Also Published As

Publication number Publication date
US20110115654A1 (en) 2011-05-19
JP5397179B2 (ja) 2014-01-22
US8184024B2 (en) 2012-05-22

Similar Documents

Publication Publication Date Title
JP5397179B2 (ja) データ符号化プログラム、データ復号化プログラムおよび方法
US20220224353A1 (en) Methods and apparatus to parallelize data decompression
JP5675876B2 (ja) 連鎖的暗号化反応の系統的記号化および復号化
RU2377670C2 (ru) Сжатие данных
JP2021513141A (ja) 2次元バーコードの生成及び識別
US10270468B2 (en) Method for file updating and version control for linear erasure coded and network coded storage
JP4157041B2 (ja) 通信システムのための多段符号発生器及び復号器
US8819288B2 (en) Optimized data stream compression using data-dependent chunking
US11632125B2 (en) Compressively-accelerated read mapping framework for next-generation sequencing
US8937564B2 (en) System, method and non-transitory computer readable medium for compressing genetic information
JP5750786B2 (ja) Simd命令を用いるrdpビットマップハッシュアクセラレーション
US8872677B2 (en) Method and apparatus for compressing data-carrying signals
US8959155B1 (en) Data compression through redundancy removal in an application acceleration environment
US20110227764A1 (en) Systems and methods for compression of logical data objects for storage
CN111262876B (zh) 基于区块链的数据处理方法、装置、设备以及存储介质
CN101783955B (zh) 一种数据异常时的恢复方法和设备
WO2021179518A1 (en) Methods and apparatuses for oblivious transfer using trusted environment
US11762557B2 (en) System and method for data compaction and encryption of anonymized datasets
CN115408350A (zh) 日志压缩、日志还原方法、装置、计算机设备和存储介质
US20170048303A1 (en) On the fly statistical delta differencing engine
CN111061682A (zh) 一种数据缓存方法、读取方法、电子设备及存储介质
US11734012B2 (en) Systems and methods for efficient transfer of log data
BR102014006340B1 (pt) Método e aparelho para compressão e descompressão de dados por estágios
CN111600846B (zh) 一种网关设备的恢复方法和恢复系统
US20240154622A1 (en) System and method for extracting data from a compressed and encrypted data stream

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120720

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130703

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130709

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130905

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130924

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131007

R150 Certificate of patent or registration of utility model

Ref document number: 5397179

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150