(57)【要約】  圧縮エンジンは、予め設定された第１圧縮規則にてデータの圧縮を開始すると共に、データの特性が所定の切り替え条件を満たすときは後続するデータを第２圧縮規則にて圧縮し、データの特性が切り替え条件を満たさなくなったときは第１圧縮規則に戻って該データ及び後続するデータを圧縮する。伸張エンジンは、第１圧縮規則に対応する第１伸張規則にて圧縮データの伸張を開始し、伸張後のデータの特性が上記切り替え条件を満たすときは後続する圧縮データを第２圧縮規則に対応する第２伸張規則にて伸張し、伸張後のデータの特性が切り替え条件を満たさなくなったときは第１伸張規則に戻って該データ及び後続する圧縮データを伸張する。
2009022531.tif 000002
【特許請求の範囲】
【請求項１】
圧縮エンジンにてデータを圧縮し、伸張エンジンにて圧縮されたデータを伸張するためのデータ圧縮伸張方法であって、
前記圧縮エンジンが、
予め設定された前記データの圧縮処理の開始時点で用いる第１圧縮規則にしたがってデータの圧縮を開始すると共に、該データの特性を解析し、
前記データの特性が予め設定された切り替え条件を満たすとき、後続するデータを前記第１圧縮規則と異なる第２圧縮規則にしたがって圧縮し、
前記データの特性が前記切り替え条件を満たさなくなったとき、前記第１圧縮規則にしたがって該データ及び後続するデータを圧縮し、
前記伸張エンジンが、
前記第１圧縮規則に対応する第１伸張規則にしたがって圧縮されたデータである圧縮データの伸張を開始し、
伸張後のデータの特性が前記切り替え条件を満たすとき、後続する圧縮データを前記第２圧縮規則に対応する第２伸張規則にしたがって伸張し、
前記伸張後のデータの特性が前記切り替え条件を満たさなくなったとき、前記第１伸張規則にしたがって該データ及び後続する圧縮データを伸張するデータ圧縮伸張方法。
【請求項２】
前記第１圧縮規則は、
辞書ベースの圧縮方法であり、
前記切り替え条件は、
同一のデータが複数回連続したときである請求項１記載のデータ圧縮伸張方法。
【請求項３】
前記第２圧縮規則は、
ランレングス符号化方法である請求項１または２記載のデータ圧縮伸張方法。
【請求項４】
前記圧縮エンジンは、
予め備えた複数種類の圧縮規則のなかから圧縮処理の開始時点で用いる第１圧縮規則が設定されると、
前記第１圧縮規則を示す情報を前記記憶装置に格納し、
前記伸張エンジンは、
前記記憶装置に格納された情報に基づいて、前記第１圧縮規則に対応する第１伸張処理にしたがって圧縮データの伸張を開始する請求項１から３のいずれか１項記載のデータ圧縮伸張方法。
【請求項５】
前記圧縮エンジンは、
予め備えた複数種類の圧縮規則のなかから圧縮処理の開始時点で用いる第１圧縮規則が設定されると、
前記第１圧縮規則を示す情報を圧縮データに付加し、
前記伸張エンジンは、
前記圧縮データに付加された情報に基づいて、前記第１圧縮規則に対応する第１伸張処理にしたがって圧縮データの伸張を開始する請求項１から３のいずれか１項記載のデータ圧縮伸張方法。
【請求項６】
前記圧縮エンジンは、
前記データの特性が前記切り替え条件を満たすとき、圧縮規則を前記第２圧縮規則に切り替えるための情報を圧縮データに付加し、
前記伸張エンジンは、
前記圧縮データに付加された情報に基づいて伸張規則を前記第１伸張規則から前記第２伸張規則に変更し、前記圧縮データを伸張する請求項１から５のいずれか１項記載のデータ圧縮伸張方法。
【請求項７】
前記伸張エンジンは、
先行する伸張後のデータが前記切り替え条件を満たすか否かを判定すると共に、後続する圧縮データを予め設定された伸張規則にしたがって伸張し、
前記先行する伸張後のデータが前記切り替え条件を満たさない場合は、後続する伸張後のデータを廃棄し、該データに対応する圧縮データを前記第１伸張規則にしたがって伸張し、
前記先行する伸張後のデータが前記切り替え条件を満たす場合は、後続する伸張後のデータをそのまま出力する請求項１から６のいずれか１項記載のデータ圧縮伸張方法。
【請求項８】
前記伸張エンジンは、
先行する伸張後のデータが前記切り替え条件を満たすか否かを判定すると共に、後続する圧縮データを予め設定された複数種類の伸張規則にしたがって伸張し、
前記後続する圧縮データに実施した複数種類の伸張規則による伸張後のデータのいずれか一つを、前記先行する伸張後のデータに対する前記切り替え条件を満たすか否かの判定結果に応じて出力する請求項１から６のいずれか１項記載のデータ圧縮伸張方法。
【請求項９】
前記圧縮エンジンは、
前記切り替え条件が、圧縮規則の切り替え回数に対して予め設定された規定値に到達したとき、前記切り替え条件を変更する請求項１から８のいずれか１項記載のデータ圧縮伸張方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを保持して参照する情報処理装置、例えばマイクロプロセッサ、ＳＯＣ（System  On  a  Chip）、ＡＳＩＣ等で用いて好適なデータ圧縮伸張方法に関する。
【背景技術】
【０００２】
情報処理に用いるプロセッサやＳＯＣ等では、オンチップまたはオフチップのＳＲＡＭやＳＤＲＡＭ、あるいはハードディスク装置やフラッシュメモリ等の記憶装置を用いてデータに所定の処理を実施する。【０００３】
情報処理が高度化すると、処理で必要な記憶容量も増大するため、オンチップあるいはオフチップのＳＲＡＭやＳＤＲＡＭ等の半導体メモリのコストも上昇する。また、所望の容量のメモリを一定の大きさのパッケージ内に収容するのも困難になる。そのため、処理対象のデータが持つ冗長性を利用してデータのサイズを縮小するデータ圧縮技術及び圧縮したデータを復元するデータ伸張技術は、高効率で高いコストパフォーマンスが要求される情報処理装置において必要不可欠である。【０００４】
代表的なデータ圧縮伸張処理としては、ＬＺ法（スライド辞書法）が従来から知られている。ＬＺ法では、辞書を検索して圧縮対象のデータがそれ以前に出現していたか否かを調べ、出現している場合は該データを辞書内の格納場所を示すエントリ番号と登録済のデータとの一致長を示す情報に置き換える。また、圧縮対象のデータがそれ以前に出現していない場合は、不一致データとして辞書に登録してそのまま出力する。【０００５】
ＬＺ法で用いる辞書は、新しいデータによって古いデータが追い出されつつ更新されるため、スライド辞書と呼ばれる。ＬＺ法は、辞書を用いて圧縮を行うため辞書ベースの圧縮方法とも呼ばれ、データの再出現性を利用した効率的な可逆圧縮が可能であるため、データ圧縮の分野で広く用いられている。この辞書ベースの圧縮方法の処理手順を図１に示す。【０００６】
図１は辞書ベースの圧縮方法の処理手順を示すフローチャートである。【０００７】
図１に示すように、辞書ベースの圧縮方法では、まずステップ４１にて圧縮対象の入力データをフェッチし、ステップ４２にて入力データと同一データが辞書内に存在するか否かを検索する。【０００８】
辞書内に入力データと同一データが存在する場合、ステップ４３に移行して入力データに付与された入力番号を辞書内の同一データの格納場所を示す番号（辞書エントリ番号）に置き換えると共に、該辞書エントリ番号と辞書に同一データが存在していたことを示すヒット識別子とを出力する。ここで、辞書エントリ番号の表現に要するビット数が入力データのサイズよりも小さい場合に上記圧縮処理が実施される。【０００９】
入力データと同一データが辞書内に存在しない場合は、ステップ４４へ移行して当該入力データを辞書へ登録し、ステップ４５にて辞書に同一データが存在しなかったことを示すヒットミス識別子を入力データに付加して出力する。【００１０】
データを伸張する場合は、上記ヒットミス識別子が付与されたデータから辞書を復元すると共に、ヒット識別子が付与された圧縮データ（辞書エントリ番号）を辞書内の対応するデータに置き換えることで元のデータを再生する。【００１１】
一方、ファクシミリ等の送信データには、ＲＬＥ（Run  Length  Encoding：ランレングス符号化）と呼ばれる圧縮手法が用いられる。ＲＬＥは、処理対象のデータを同一データパターンの繰り返し回数の情報に置き換えることで圧縮する手法である。このＲＬＥによる圧縮方法の処理手順を図２に示す。【００１２】
図２はＲＬＥによる圧縮方法の処理手順を示すフローチャートである。【００１３】
図２に示すように、ＲＬＥでは、まずステップ６１にて圧縮対象の入力データをフェッチし、ステップ６２にて入力データが前回データと同一であるか否かを判定する。前回データと同一である場合はステップ６３に移行して予め設けた反復回数カウンタの値に「１」を加算する。【００１４】
次に、ステップ６４にて反復回数カウンタの値が予め設定された規定値に到達したか否かを判定する。規定値に到達している場合は、ステップ６５にて入力データが前回データと同一であることを示すヒット識別子と反復回数カウンタの値を出力し、ステップ６６にて反復回数カウンタの値を「０」に戻す。【００１５】
また、ステップ６４にて反復回数カウンタの値が規定値に到達していない場合は、ステップ６１に戻って次の入力データをフェッチし、ステップ６２からの処理を繰り返す。【００１６】
ステップ６２にて入力データが前回データと同一ではないと判定した場合、ステップ６７にて反復回数カウンタの値が「０」であるか否かを確認する。反復回数カウンタの値が「０」でない場合は前回までの反復回数を出力する必要があるため、ステップ６８にてヒット識別子と反復回数カウンタの値を出力し、ステップ６９にて反復回数カウンタの値を「０」に戻す。また、反復回数カウンタの値が０の場合は、ステップ７０にて入力データが前回データと同一でないことを示すヒットミス識別子と入力データとをそのまま出力し、ステップ７１にて入力データを前回データとして保持してステップ６１の処理に戻る。【００１７】
このようにＲＬＥによる圧縮方法では、データ列が持つ単純な繰り返し特性を利用してデータを圧縮するため、画像データ等の圧縮には有効であるが、通常の計算データ等には、圧縮効率があまり上がらないため、有効とは言えない。したがって、ＲＬＥは圧縮対象のデータの種類を限定して利用することが好ましい。【００１８】
これらのことから、上記ＬＺ法とＲＬＥを組み合わせた圧縮方法が、例えば特表２００３−５２１１８９号公報（以下、特許文献１と称す）や特許３６５３２２６号公報（以下、特許文献２と称す）等で提案されている。【００１９】
特許文献１では、辞書ベースの圧縮処理を実行するメインコーダの後段に、ＲＬＥによる圧縮処理を実行するＲＬＥコーダを配置した構成を提案している。【００２０】
特許文献１では、図３に示すように辞書のデータ格納領域にＲＬＥ処理であることを示す情報が格納され、この領域を示すエントリ番号をＲＬＥによる圧縮処理の制御コードとして用いている。特許文献１に記載された技術では、ＲＬＥコーダを常に動作させる必要があり、辞書内の一部のエントリ（図３ではアドレス３のデータ格納領域）をＲＬＥコーダで占有してしまう問題がある。【００２１】
一方、特許文献２では、ＲＬＥによってデータを圧縮した後、ＬＺ法によってデータを圧縮する構成が記載されている。特許文献２では、ＲＬＥの圧縮効率が低いことや処理コストが高いことを指摘して、ＲＬＥを利用した新たな圧縮方法を提案している。【００２２】
しかしながら上述した辞書ベースの圧縮方法とそれ以外の圧縮方法（ＲＬＥ等）とを組み合わせる方法では、圧縮対象のデータに対して後者（ＲＬＥ等）の圧縮方法が有効でない場合でも、その圧縮処理を実行する処理回路（論理回路やＣＰＵ等）が常に動作しているため、電力を無駄に消費してしまう問題がある。【００２３】
また、辞書ベースの圧縮方法とＲＬＥの圧縮方法とを組み合わせる方法では、上述したように辞書の一部のエントリをＲＬＥコーダで占有するため、これがデータの圧縮効率の低下要因となる。特に、ＲＬＥによる圧縮方法が圧縮対象のデータに対して有効でない場合は圧縮効率が低下してしまう。
【発明の開示】
【００２４】
そこで、本発明は、様々な特性を持つデータに対して、圧縮効率を向上させてデータを圧縮・伸張できると共に消費電力を低減できるデータ圧縮伸張方法を提供することを目的とする。
【００２５】
上記の目的を達するため本発明では、圧縮エンジンが、
予め設定された前記データの圧縮処理の開始時点で用いる第１圧縮規則にしたがってデータの圧縮を開始すると共に、該データの特性を解析し、
前記データの特性が予め設定された切り替え条件を満たすとき、後続するデータを前記第１圧縮規則と異なる第２圧縮規則にしたがって圧縮し、
前記データの特性が前記切り替え条件を満たさなくなったとき、前記第１圧縮規則にしたがって該データ及び後続するデータを圧縮し、
伸張エンジンが、
前記第１圧縮規則に対応する第１伸張規則にしたがって圧縮されたデータである圧縮データの伸張を開始し、
伸張後のデータの特性が前記切り替え条件を満たすとき、後続する圧縮データを前記第２圧縮規則に対応する第２伸張規則にしたがって伸張し、
前記伸張後のデータの特性が前記切り替え条件を満たさなくなったとき、前記第１伸張規則にしたがって該データ及び後続する圧縮データを伸張する。
【図面の簡単な説明】
【００２６】
【図１】図１は、辞書ベースの圧縮方法の処理手順を示すフローチャートである。
【図２】図２は、ＲＬＥによる圧縮方法の処理手順を示すフローチャートである。
【図３】図３は、特許文献１に記載された圧縮処理で用いる辞書の構成例を示す模式図である。
【図４】図４は、本発明のデータ圧縮伸張方法が適用されるＳＯＣの一構成例を示すブロック図である。
【図５】図５は、図４に示した圧縮エンジンの一構成例を示すブロック図である。
【図６】図６は、図４に示した伸張エンジンの一構成例を示すブロック図である。
【図７】図７は、本発明の圧縮方法の処理手順の一例を示すフローチャートである。
【図８】図８は、本発明の伸張方法の処理手順の一例を示すフローチャートである。
【発明を実施するための最良の形態】
【００２７】
次に本発明について図面を参照して説明する。【００２８】
本発明では、データが持つ様々な特性に対応できるように複数種類の圧縮規則及びそれらに対応する伸張規則を用意する。また、データの特性に応じた圧縮規則の切り替え条件を定義する。そして、データを圧縮する場合は、データの特性を解析し、それが切り替え条件を満たす場合は後続するデータから圧縮規則を切り替える。具体的には同一のデータが複数回連続して入力された場合は圧縮規則を切り替える。一方、データを伸張する場合は、伸張後のデータの特性を解析し、圧縮処理時と同じ切り替え条件が成立する場合は、後続する圧縮データから伸張規則を切り替える。【００２９】
なお、本実施形態のデータ圧縮伸張方法は、ＳＯＣ（System  On  a  Chip）やＡＳＩＣ等のハードウェア、およびプログラムにしたがって処理を実行するマイクロプロセッサやコンピュータ装置でも実現可能であるが、以下では図４に示すＳＯＣ８１がデータの圧縮／伸張を行う場合を例にして説明する。【００３０】
図４は本発明のデータ圧縮伸張方法が適用されるＳＯＣの一構成例を示すブロック図である。【００３１】
図４に示すように、ＳＯＣ８１は、ＣＰＵ８２、ＤＳＰ８３、圧縮エンジン８４、伸張エンジン８５及びメモリコントローラ８６を備えている。【００３２】
ＣＰＵ８２、ＤＳＰ８３、圧縮エンジン８４、伸張エンジン８５は、システムバス８７に対してバスマスタとして接続されている。メモリコントローラ８６は、システムバス８７に対してバススレーブとして接続されている。メモリコントローラ８６は、ＳＯＣ８１とは独立して備える主記憶メモリ８８と接続されている。【００３３】
このような構成により、ＣＰＵ８２、ＤＳＰ８３、圧縮エンジン８４、伸張エンジン８５は、システムバス８７及びメモリコントローラ８６を介して主記憶メモリ８８に対するデータの読み出し／書き込みが可能である。すなわち、圧縮エンジン８４、伸張エンジン８５は、例えばＣＰＵ８２によって指定された主記憶メモリ８８のアドレスからデータを読み出し、該データに対して圧縮または伸張処理を行い、処理後のデータをＣＰＵ８２によって指定された主記憶メモリ８８のアドレスに書き込むことができる。【００３４】
図５は図４に示した圧縮エンジンの一構成例を示すブロック図であり、図６は図４に示した伸張エンジンの一構成例を示すブロック図である。図５に示す圧縮エンジン及び図６に示す伸張エンジンは、２種類の圧縮規則（第１圧縮規則、第２圧縮規則）にしたがってデータの圧縮／伸張を行う構成例である。【００３５】
本実施形態では、圧縮対象のデータに対して最初に実行する圧縮処理を、上述した辞書ベースの圧縮処理（第１圧縮規則）とし、処理の途中で切り替える圧縮処理をＲＬＥによる圧縮処理（第２圧縮規則）とする。【００３６】
図５に示すように、圧縮エンジン８４は、入力無圧縮データバッファ１０１、第１圧縮エンジン１０２、第２圧縮エンジン１０３、出力圧縮データバッファ１０４、データ特性解析ユニット１０５、圧縮規則選択テーブル１０６及びバスインタフェース１０７を備えている。【００３７】
バスインタフェース１０７は、例えばＣＰＵ８２が指定した主記憶メモリ８８のアドレスから圧縮対象のデータを読み出し、入力無圧縮データバッファ１０１に格納（フェッチ）する。入力無圧縮データバッファ１０１に格納されたデータは、第１圧縮エンジン１０２、第２圧縮エンジン１０３及びデータ特性解析ユニット１０５に出力される。【００３８】
データ特性解析ユニット１０５は、入力無圧縮データバッファ１０１から受け取ったデータを不図示のバッファに前回データとして格納し、該データの特性が予め設定された切り替え条件を満たすとき、すなわち入力無圧縮データバッファ１０１から同一データを２度連続して受け取った場合、圧縮規則選択テーブル１０６の値を変更して圧縮規則を切り替える。また、データの特性が切り替え条件を満たさなくなったとき、すなわち連続する同一データが異なるデータに変わった場合、圧縮規則選択テーブル１０６の値を元に戻すことで圧縮規則を切り替える。【００３９】
圧縮規則選択テーブル１０６は、上述した第１圧縮規則を示す値「Ａ」または第２の圧縮規則を示す値「Ｂ」を保持し、「Ａ」の値を保持している場合は第１圧縮エンジン１０２を活性化させ、「Ｂ」の値を保持している場合は第２圧縮エンジン１０３を活性化させる。【００４０】
活性化した第１圧縮エンジン１０２または第２圧縮エンジン１０３は、入力無圧縮データバッファ１０１から受け取ったデータをそれぞれの圧縮規則にしたがって圧縮し、圧縮後のデータを出力圧縮データバッファ１０４に格納する。第１圧縮エンジン１０２は、辞書を備え、上述した辞書ベースの圧縮処理（第１圧縮規則）でデータを圧縮する。第２圧縮エンジン１０３は、反復回数カウンタを備え、上述したＲＬＥによる圧縮処理（第２圧縮規則）でデータを圧縮する。出力圧縮データバッファ１０４に格納されたデータは、バスインタフェース１０７により、例えばＣＰＵ８２が指定した主記憶メモリ８８のアドレスに書き込まれる。【００４１】
図６に示すように、伸張エンジン８５は、入力圧縮データバッファ１２４、第１伸張エンジン１２２、第２伸張エンジン１２３、出力無圧縮データバッファ１２１、データ特性解析ユニット１２５、伸張規則選択テーブル１２６及びバスインタフェース１２７を備えている。【００４２】
バスインタフェース１２７は、例えばＣＰＵ８２が指定した主記憶メモリ８８のアドレスから伸張対象のデータ（圧縮データ）を読み出し、入力圧縮データバッファ１２４に格納（フェッチ）する。入力圧縮データバッファ１２４に格納されたデータは、第１伸張エンジン１２２及び第２伸張エンジン１２３に出力される。【００４３】
データ特性解析ユニット１２５は、第１伸張エンジン１２２または第２伸張エンジン１２３から出力された伸張後のデータを不図示のバッファに前回データとして格納し、該データの特性が予め設定された切り替え条件を満たすとき、すなわち同一データが２度連続した場合、伸張規則選択テーブル１２６で保持している値を変更して伸張規則を切り替える。また、データの特性が切り替え条件を満たさなくなったとき、すなわち連続する同一データが異なるデータに変わった場合、伸張規則選択テーブル１２６の値を元に戻すことで圧縮規則を切り替える。【００４４】
伸張規則選択テーブル１２６は、上述した第１伸張規則を示す値「Ａ」または第２伸張規則を示す値「Ｂ」を保持し、「Ａ」の値を保持している場合は第１伸張エンジン１２２を活性化させ、「Ｂ」の値を保持している場合は第２伸張エンジン１２３を活性化させる。【００４５】
活性化した第１伸張エンジン１２２または第２伸張エンジン１２３は、入力圧縮データバッファ１２４から受け取った圧縮データを伸張し、伸張後のデータを出力無圧縮データバッファ１２１に格納する。第１伸張エンジン１２２は、辞書を備え、上述した辞書ベースの圧縮処理（第１圧縮規則）に対応する第１伸張処理で圧縮データを復元する。第２伸張エンジン１２３は、反復回数カウンタを備え、上述したＲＬＥによる圧縮処理（第２圧縮規則）に対応する第２伸張処理で圧縮データを復元する。出力無圧縮データバッファ１２１に格納されたデータは、バスインタフェース１２７により、例えばＣＰＵ８２が指定した主記憶メモリ８８のアドレスに書き込まれる。【００４６】
なお、本実施形態では、ＳＯＣ８１内に圧縮エンジン８４及び伸張エンジン８５を個別のモジュールとして備える構成例を示しているが、圧縮エンジン８４及び伸張エンジン８５は、各種バッファやエンジン部のハードウェアを共有する構成であってもよい。【００４７】
次に本発明のデータ圧縮伸張方法の処理手順について図面を用いて説明する。【００４８】
まず、本発明のデータ圧縮方法の処理手順について図７を用いて説明する。【００４９】
図７は本発明の圧縮方法の処理手順の一例を示すフローチャートである。ここでは、下記表１に示すアドレス１〜１２のデータ（入力データ）をバイト単位で圧縮する例で説明する。圧縮後のデータ（圧縮データ）は表１の最右カラムに記載する。【００５０】
【表１】
2009022531.tif 000003
なお、本実施形態では圧縮処理の開始時点で上述した第１圧縮規則を用いるため、圧縮規則選択テーブル１０６には予め第１圧縮規則を示す値「Ａ」が格納されているものとする。【００５１】
圧縮処理を開始すると、まず圧縮エンジン８４は、ステップ２０１にてアドレス１の入力データ０ｘ３２を入力無圧縮データバッファ１０１にフェッチし、ステップ２０２にて圧縮規則が第１圧縮規則であるか否かを判定する。ここでは、圧縮規則選択テーブル１０６の値が「Ａ」であるため、第１圧縮エンジン１０２にて圧縮処理を開始する。【００５２】
第１圧縮エンジン１０２は、ステップ２１１にて辞書内に入力データと同一データが存在するか否かを判定する。圧縮開始時点では、辞書にデータが何も登録されていないため、ステップ２１３にて入力データ０ｘ３２を辞書に登録する。また、ステップ２１４にて辞書に同一データが存在しなかった（ヒットミスした）ことを示すヒットミス識別子（０ｂ０）を入力データ０ｘ３２に付加して出力圧縮データバッファ１０４に格納する。出力圧縮データバッファ１０４に格納された圧縮データ０ｂ０＋０ｘ３２はバスインタフェース１０７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００５３】
データ特性解析ユニット１０５は、ステップ２４３にてアドレス１の入力データ０ｘ３２を前回データとしてバッファに格納する。【００５４】
圧縮エンジン８４は、アドレス２の入力データ０ｘ２９に対しても同様の処理を実施し、第１圧縮エンジン１０２の辞書に入力データ０ｘ２９を登録し、圧縮データ０ｂ０＋０ｘ２９を主記憶メモリ８８の指定されたアドレスに格納する。また、データ特性解析ユニット１０５は、アドレス２の入力データ０ｘ２９を前回データとしてバッファに格納する。【００５５】
また、圧縮エンジン８４は、アドレス３の入力データ０ｘ９８に対しても同様の処理を実施し、第１圧縮エンジン１０２の辞書に入力データ０ｘ９８を登録し、圧縮データ０ｂ０＋０ｘ９８を主記憶メモリ８８の指定されたアドレスに格納する。また、データ特性解析ユニット１０５は、アドレス３の入力データ０ｘ９８を前回データとしてバッファに格納する。【００５６】
次に、圧縮エンジン８４は、ステップ２０１にてアドレス４の入力データ０ｘ３２を入力無圧縮データバッファ１０１にフェッチし、ステップ２０２にて圧縮規則が第１圧縮規則であるか否かを判定する。ここでは、圧縮規則選択テーブル１０６の値が「Ａ」であるため、第１圧縮エンジン１０２にて圧縮処理を開始する。【００５７】
第１圧縮エンジン１０２は、ステップ２１１にて辞書内に入力データと同一データが存在するか否かを判定する。ここでは、データ０ｘ３２が既に辞書に登録されているため、ステップ２１２にて辞書に同一データが存在した（ヒットした）ことを示すヒット識別子（０ｂ１）とデータ０ｘ３２に対応する辞書エントリ番号（０ｂ０）とを出力圧縮データバッファ１０４に格納する。出力圧縮データバッファ１０４に格納された圧縮データ０ｂ１＋０ｂ０は、バスインタフェース１０７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００５８】
データ特性解析ユニット１０５は、ステップ２４１にて入力データ０ｘ３２と前回データとが同じであるか否かを判定する。ここでは、前回データが０ｘ９８であるため、ステップ２４３にてアドレス４のデータ０ｘ３２を前回データとしてバッファに格納する。【００５９】
アドレス５の入力データ０ｘ９８に対しても同様の処理が実施され、ヒット識別子（０ｂ１）とデータ０ｘ９８に対応する辞書エントリ番号（０ｂ１）が出力圧縮データバッファ１０４に格納され、圧縮データ０ｂ１＋０ｂ０がバスインタフェース１０７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００６０】
データ特性解析ユニット１０５は、ステップ２４３にてアドレス５の入力データ０ｘ９８を前回データとしてバッファに格納する。【００６１】
次に、圧縮エンジン８４は、ステップ２０１にてアドレス６の入力データ０ｘ００を入力無圧縮データバッファ１０１にフェッチし、ステップ２０２にて圧縮規則が第１圧縮規則であるか否かを判定する。ここでは、圧縮規則選択テーブル１０６の値が「Ａ」であるため、第１圧縮エンジン１０２にて圧縮処理を開始する。【００６２】
第１圧縮エンジン１０２は、ステップ２１１にて辞書内に入力データと同一データが存在するか否かを判定する。ここでは、データ０ｘ００が辞書に登録されていないため、ステップ２１３にて入力データ０ｘ００を辞書に登録する。また、ステップ２１４にてヒットミス識別子（０ｂ０）を入力データ０ｘ００に付加し、出力圧縮データバッファ１０４に格納する。出力圧縮データバッファ１０４に格納された圧縮データ０ｂ１＋０ｘ００は、バスインタフェース１０７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００６３】
データ特性解析ユニット１０５は、ステップ２４１にて入力データ０ｘ００と前回データとが同じであるか否かを判定する。ここでは、前回データが０ｘ９８であるため、ステップ２４３にてアドレス６のデータ０ｘ００を前回データとしてバッファに格納する。【００６４】
次に、圧縮エンジン８４はステップ２０１にてアドレス７の入力データ０ｘ００を入力無圧縮データバッファ１０１にフェッチし、ステップ２０２にて圧縮規則が第１圧縮規則であるか否かを判定する。ここでは、圧縮規則選択テーブル１０６の値が「Ａ」であるため、第１圧縮エンジン１０２にて圧縮処理を開始する。【００６５】
第１圧縮エンジン１０２は、ステップ２１１にて辞書内に入力データと同一データが存在するか否かを判定する。ここでは、データ０ｘ００が既に辞書に登録されているため、ステップ２１２にてヒット識別子（０ｂ１）とデータ０ｘ００に対応する辞書エントリ番号（０ｂ２）とを出力圧縮データバッファ１０４に格納する。出力圧縮データバッファ１０４に格納された圧縮データ０ｂ１＋０ｂ２はバスインタフェース１０７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００６６】
データ特性解析ユニット１０５は、ステップ２４１にて入力データ０ｘ００と前回データとが同じであるか否かを判定する。ここでは、前回データも０ｘ００であるため、圧縮規則選択テーブル１０６の値を「Ｂ」に変更する。【００６７】
したがって、次のアドレス８のデータ０ｘ００に対する圧縮処理では、ステップ２０２にて圧縮規則選択テーブル１０６の値を「Ｂ」と判定するため、第２圧縮エンジン１０３にて入力データの圧縮を開始する。すなわち、本実施形態では、同一データが２回連続すると、圧縮規則が第１圧縮規則から第２圧縮規則へ自動的に変更される。【００６８】
第２圧縮エンジン１０３は、ステップ２２１にて入力データ０ｘ００とデータ特性解析ユニット１０５のバッファに格納された前回データとが同じであるか否かを判定する。ここでは、前回データも０ｘ００であるため、ステップ２２２にて反復回数カウンタの値が、予め設定された規定値に到達したか否かを判定する。ＲＬＥでは、同一データが連続して入力された場合、それと異なるデータが入力された時点で、それまでに入力された同一データの数を示す情報（反復回数カウンタの値）がヒット識別子（０ｂ１）と共に圧縮データとして出力される。本実施形態では、反復回数カウンタの値に上限値（上記規定値）を設け、同一データがその規定値以上連続して入力された場合は、その時点で反復回数カウンタの値を圧縮データとして出力する。規定値は、反復回数カウンタのビット長に応じて設定され、例えば反復回数カウンタのビット長が「４」の場合は「１５」となる。【００６９】
ここでは、反復回数カウンタの値が「０」であるため、第２圧縮エンジン１０３はステップ２２３にて反復回数カウンタの値に「１」を加算し、圧縮データを何も出力することなくステップ２０１の処理に戻ってアドレス９の入力データ０ｘ００をフェッチする。【００７０】
アドレス９の入力データ０ｘ００に対しても同様の処理が実施され、第２圧縮エンジン１０３は、反復回数カウンタの値を「２」とし、圧縮データを何も出力することなくステップ２０１の処理に戻ってアドレス１０の入力データ０ｘ４１をフェッチする。【００７１】
圧縮エンジン８４は、アドレス１０のデータ０ｘ４１をフェッチすると、ステップ２０２にて圧縮規則が第１圧縮規則であるか否かを判定する。ここでも圧縮規則選択テーブル１０６の値が「Ｂ」であるため、第２圧縮エンジン１０３にて入力データの圧縮を開始する。【００７２】
第２圧縮エンジン１０３は、ステップ２２１にて入力データ０ｘ４１とデータ特性解析ユニット１０５のバッファに格納された前回データとが同じであるか否かを判定する。ここでは、前回データが０ｘ００であるため、ステップ２２６にて反復回数カウンタの値が「０」であるか否かを判定する。ここでは、反復回数カウンタの値が「２」であるため、第２圧縮エンジン１０３は、ステップ２２７にて圧縮データとしてヒット識別子（０ｂ１）と反復回数カウンタの値「２」（＝０ｘ２）とを出力圧縮データバッファ１０４に格納し、ステップ２２８にて反復回数カウンタの値を「０」に戻す。出力圧縮データバッファ１０４に格納された圧縮データ０ｂ１＋０ｘ２は、バスインタフェース１０７を介して主記憶メモリ８８の指定されたアドレスに格納される。このステップ２２７にて第２圧縮エンジン１０３から出力される圧縮データ０ｂ１＋０ｘ２がアドレス８及び９の入力データの圧縮結果を示している。【００７３】
続いて、第２圧縮エンジン１０３は、ステップ２２９にてアドレス１０の入力データ０ｘ４１にヒットミス識別子（０ｂ０）を付与して出力圧縮データバッファ１０４に格納する。したがって、アドレス１０に対応する圧縮データは０ｂ１＋０ｘ２及び０ｂ０＋０ｘ４１となる。【００７４】
データ特性解析ユニット１０５は、ステップ２３０にてアドレス１０のデータ０ｘ４１を前回データとしてバッファに格納し、ステップ２４４にて圧縮規則選択テーブル１０６の値を「Ａ」に変更する。すなわち、本実施形態では、連続して入力されていた同一データがそれと異なる入力データに切り替わった時点で、圧縮規則が第２圧縮規則から第１圧縮規則へ自動的に変更される。【００７５】
続くアドレス１１のデータ０ｘ３２に対する圧縮処理では、ステップ２０２にて圧縮規則選択テーブル１０６の値を「Ａ」と判定し、第１圧縮エンジン１０２にて入力データを圧縮する。このとき、データ０ｘ３２は辞書に存在しているため、第１圧縮エンジン１０２はアドレス４のデータと同様の処理を実行する。また、アドレス１２のデータ０ｘ１６に対する圧縮処理では、ステップ２０２にて圧縮規則選択テーブル１０６の値を「Ａ」と判定し、第１圧縮エンジン１０２にて入力データを圧縮する。このとき、データ０ｘ１６は辞書に存在していないため、第１圧縮エンジン１０２はアドレス１のデータと同様の処理を実行する。【００７６】
次に、本発明のデータ伸張方法の処理手順について図８を用いて説明する。【００７７】
図８は本発明の伸張方法の処理手順の一例を示すフローチャートである。ここでは、図７に示した圧縮処理と同様に表１に示した圧縮データを元の入力データに伸張する例で説明する。【００７８】
なお、本実施形態では、伸張処理の開始時点では上述した第１圧縮規則に対応する第１伸張処理を用いるため、伸張規則選択テーブル１２６に予め第１伸張規則を示す値「Ａ」が格納されているものとする。【００７９】
伸張処理を開始すると、まず伸張エンジン８５は、ステップ２５１にてアドレス１に対応する圧縮データ０ｂ０＋０ｘ３２を入力圧縮データバッファ１２４にフェッチし、ステップ２５２にて伸張規則が第１伸張規則であるか否かを判定する。ここでは、伸張規則選択テーブル１２６に格納された値が「Ａ」であるため、第１伸張エンジン１２２にて伸張処理を開始する。【００８０】
第１伸張エンジン１２２は、ステップ２６１にて圧縮データにヒット識別子が含まれているか否かを判定する。ここでは、圧縮データにヒットミス識別子（０ｂ０）が含まれているため、ステップ２６３にてデータ０ｘ３２を辞書に登録し、ステップ２６４にて該データ０ｘ３２をそのまま出力無圧縮データバッファ１２１に格納する。出力無圧縮データバッファ１２１に格納されたデータ０ｘ３２は、バスインタフェース１２７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００８１】
データ特性解析ユニット１２５は、ステップ２９１にて伸張後のデータ０ｘ３２が前回データと同じであるか否かを判定する。伸張開始時点では前回データに何も登録されていないため、ステップ２９３にてデータ０ｘ３２を前回データとしてバッファに格納する。【００８２】
伸張エンジン８５は、アドレス２に対応する圧縮データ０ｂ０＋０ｘ２９に対しても同様の処理を実施し、辞書にデータ０ｘ２９を登録し、データ０ｘ２９を主記憶メモリ８８の指定されたアドレスに格納する。また、データ特性解析ユニット１２５はデータ０ｘ２９を前回データとしてバッファに格納する。【００８３】
また、伸張エンジン８５は、アドレス３に対応する圧縮データ０ｂ０＋０ｘ９８に対しても同様の処理を実施し、辞書にデータ０ｘ９８を登録し、データ０ｘ９８を主記憶メモリ８８の指定されたアドレスに格納する。また、データ特性解析ユニット１２５はデータ０ｘ９８を前回データとしてバッファに格納する。【００８４】
次に、伸張エンジン８５は、ステップ２５１にてアドレス４の圧縮データ０ｂ１＋０ｂ０を入力圧縮データバッファ１２４にフェッチし、ステップ２５２にて伸張規則が第１伸張規則であるか否かを判定する。ここでも伸張規則選択テーブル１２６の値が「Ａ」であるため、第１伸張エンジン１２２にて圧縮データの伸張処理を開始する。【００８５】
第１伸張エンジン１２２は、ステップ２６１にて圧縮データにヒット識別子が含まれているか否かを判定する。ここでは、圧縮データにヒット識別子（０ｂ１）が含まれているため、ステップ２６２にて辞書エントリ番号「０」（０ｂ０）に対応するデータ０ｘ３２を出力無圧縮データバッファ１２１に格納する。出力無圧縮データバッファ１２１に格納されたデータ０ｘ３２はバスインタフェース１２７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００８６】
データ特性解析ユニット１２５は、ステップ２９１にてデータ０ｘ３２と前回データとが同じであるか否かを判定する。ここでは、前回データが０ｘ９８であるため、ステップ２９３にてデータ０ｘ３２を前回データとしてバッファに格納する。【００８７】
伸張エンジン８５は、アドレス５に対応する圧縮データ０ｂ１＋０ｂ１に対しても同様の処理を実施し、辞書にデータ０ｘ９８を登録し、辞書エントリ番号「１」（０ｂ１）に対応するデータ０ｘ９８を主記憶メモリ８８の指定されたアドレスに格納する。また、データ特性解析ユニット１２５はデータ０ｘ９８を前回データとしてバッファに格納する。【００８８】
次に、伸張エンジン８５は、ステップ２５１にてアドレス６の圧縮データ０ｂ０＋０ｘ００を入力圧縮データバッファ１２４にフェッチし、ステップ２５２にて伸張規則が第１伸張規則であるか否かを判定する。ここでも伸張規則選択テーブル１２６の値が「Ａ」であるため、第１伸張エンジン１２２にて入力データの伸張処理を開始する。【００８９】
第１伸張エンジン１２２は、ステップ２６１にて圧縮データにヒット識別子が含まれているか否かを判定する。ここでは、圧縮データにヒットミス識別子（０ｂ０）が含まれているため、ステップ２６４にて該データ０ｘ００をそのまま出力無圧縮データバッファ１２１に格納する。出力無圧縮データバッファ１２１に格納されたデータ０ｘ００はバスインタフェース１２７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００９０】
データ特性解析ユニット１２５は、ステップ２９３にて伸張後のデータ０ｘ００が前回データと同じであるか否かを判定する。ここでは、前回データが０ｘ９８であるため、ステップ２９３にてデータ０ｘ００を前回データとしてバッファに格納する。【００９１】
次に、伸張エンジン８５は、ステップ２５１にてアドレス７の圧縮データ０ｂ１＋０ｂ２を入力圧縮データバッファ１２４にフェッチし、ステップ２５２にて伸張規則が第１伸張規則であるか否かを判定する。ここでも伸張規則選択テーブル１２６の値が「Ａ」であるため、第１伸張エンジン１２２にて入力データの伸張処理を開始する。【００９２】
第１伸張エンジン１２２は、ステップ２６１にて圧縮データにヒット識別子が含まれているか否かを判定する。ここでは、圧縮データにヒット識別子（０ｂ１）が含まれているため、ステップ２６２にて辞書エントリ番号「２」に対応するデータ０ｘ００を出力無圧縮データバッファ１２１に格納し、ステップ２９２にて圧縮規則選択テーブル１２６の値を「Ｂ」に変更する。出力無圧縮データバッファ１２１に格納されたデータ０ｘ００はバスインタフェース１２７を介して主記憶メモリ８８の指定されたアドレスに格納される。【００９３】
続いて、伸張エンジン８５は、ステップ２５１にてアドレス８に対応する圧縮データのフェッチに移行する。しかしながら、アドレス８に対応する圧縮データは無いため、伸張エンジン８５は何も処理することなくアドレス９に対応する圧縮データのフェッチに移行する。アドレス９に対応する圧縮データも無いため、伸張エンジン８５は何も処理することなくアドレス１０に対応する圧縮データのフェッチに移行する。【００９４】
伸張エンジン８５は、ステップ２５１にてアドレス１０のデータ０ｂ１＋０ｘ２を入力圧縮データバッファ１２４にフェッチすると、ステップ２５２にて伸張規則が第１伸張規則であるか否かを判定する。ここでは、伸張規則選択テーブル１２６の値が「Ｂ」であるため、第２伸張エンジン１２３にて入力データの伸張処理を開始する。【００９５】
第２伸張エンジン１２３は、ステップ２７１にて圧縮データにヒット識別子が含まれているか否かを判定する。ここでは、圧縮データにヒット識別子（０ｂ１）が含まれているため、それに続く圧縮データ０ｘ２に基づき反復回数カウンタの値を「２」に設定する（ステップ２７２）。【００９６】
続いて、第２伸張エンジン１２３は、ステップ２７３にて前回データ０ｘ００を出力無圧縮データバッファ１２１に格納し、ステップ２７４にて反復回数カウンタの値から「１」を減算し、ステップ２７５にて反復回数カウンタの値が「０」であるか否かを判定する。ここでは、反復回数カウンタの値が「１」であるため、ステップ２７３の処理に戻って前回データ０ｘ００を出力無圧縮データバッファ１２１に再び格納し、ステップ２７４及びステップ２７５の処理を繰り返す。出力無圧縮データバッファ１２１に格納された２つのデータ０ｘ００は、バスインタフェース１２７を介して主記憶メモリ８８のそれぞれ指定されたアドレスに格納される。【００９７】
ステップ２７５にて反復回数カウンタの値が「０」である場合、伸張エンジン８５はステップ２５１の処理に戻って圧縮データ０ｂ０＋０ｘ４１を入力圧縮データバッファ１２４にフェッチする。【００９８】
伸張エンジン８５は、ステップ２５１にてアドレス１０の圧縮データ０ｂ０＋０ｘ４１を入力圧縮データバッファ１２４にフェッチすると、ステップ２５２にて伸張規則が第１伸張規則であるか否かを判定する。ここでは、伸張規則選択テーブル１２６の値が「Ｂ」であるため、第２伸張エンジン１２３にて入力データの伸張処理を開始する。【００９９】
第２伸張エンジン１２３は、ステップ２７１にて圧縮データにヒット識別子が含まれているか否かを判定する。ここでは、圧縮データにヒットミス識別子（０ｂ０）が含まれているため、それに続くデータ０ｘ４１をそのまま出力無圧縮データバッファ１２１に格納し（ステップ２７６）、ステップ２７７にてデータ０ｘ４１を前回データとしてバッファに格納する。【０１００】
データ特性解析ユニット１２５は、ステップ２９４にて圧縮規則選択テーブル１２６の値を「Ａ」に変更する。出力無圧縮データバッファ１２１に格納されたデータ０ｘ４１はバスインタフェース１２７を介して主記憶メモリ８８の指定されたアドレスに格納される。【０１０１】
以降、先行するデータと同様に第１伸張規則によりアドレス１１及びアドレス１２に対応する圧縮データがそれぞれ伸張される。【０１０２】
なお、上記説明では、圧縮処理の開始時点で第１圧縮規則を用い、伸張処理の開始時点で第１圧縮規則に対応する第１伸張規則を用いる例を示しているが、圧縮規則選択テーブル１０６及び伸張規則選択テーブル１２６の値を処理開始前に設定することで、予め備えた複数種類の圧縮規則のなかから圧縮処理の開始時点で用いる圧縮規則及び伸張規則を任意に選択してもよい。このような処理は、例えば本発明のデータ圧縮伸張方法をプログラムにしたがって処理を実行するマイクロプロセッサによって実現していれば、圧縮規則選択テーブル１０６及び伸張規則選択テーブル１２６として任意のレジスタ（記憶装置）を割り当てることで容易に実現できる。【０１０３】
また、圧縮データの先頭に圧縮開始時点で用いた圧縮規則を示す情報を付加すれば、伸張処理の開始時に該圧縮規則に対応する伸張規則が選択されるため、操作者により伸張規則を設定する必要が無くなる。【０１０４】
さらに、圧縮規則を切り替えるための情報を圧縮対象のデータに付加しておけば、より柔軟に圧縮規則を切り替えることができる。例えば、図７に示すステップ２２６の処理にて反復回数カウンタの値が「０」であっても、第１圧縮規則へ切り替えるための情報がデータに付加されていれば、第１圧縮規則に切り替えてステップ２２９以降の処理が実行される。その場合、ステップ２２９で出力されたデータが第１圧縮規則で用いる辞書に存在していれば、該データも第１圧縮規則にしたがって圧縮されるため、圧縮率がより向上する。【０１０５】
ところで、図８に示したデータ伸張方法の処理手順では、伸張後のデータをデータ特性解析ユニット１２５で解析した後、伸張規則を切り替えるため、圧縮データの伸張が終了しないと後続する圧縮データの伸張規則を決定することができない。そのため、図８に示したデータ伸張方法の処理手順では、高速な伸張処理を実現する、例えば処理のパイプライン化が困難である。【０１０６】
したがって、伸張規則を変更する可能性がある場合は、先行する伸張後のデータの解析終了を待つことなく、後続する圧縮データに対して
（１）いずれか一つの伸張規則を用いて伸張する。【０１０７】
（２）複数の伸張規則で同時に伸張する。
のいずれかの方法を実行してもよい。【０１０８】
ここで、先行する伸張後のデータを解析した結果、後続する圧縮データに対して誤った伸張規則を適用して圧縮データを伸張したことが判明した場合、
（３）上記（１）を採用している場合は、圧縮規則に対応する正しい伸張規則で再度伸張処理を行う。【０１０９】
（４）上記（２）を採用している場合は、圧縮規則に対応する正しい伸張規則で復元したデータのみを出力する。
を実施すればよい。但し、（３）、（４）のいずれの場合も対応していない伸張処理で使用した辞書や各種の履歴データ（反復回数カウンタ等）を元の値に戻す必要があるため、その処理を実行するハードウェアまたはプログラムが必要となる。【０１１０】
また、図７に示したデータ圧縮方法の処理手順では、同一データが２回連続して入力されたとき第１圧縮規則から第２圧縮規則へ切り替えているが、例えば第１圧縮規則から第２圧縮規則に切り替えた直後にそれまでと異なるデータが入力されると、頻繁に圧縮規則を切り替えることになる。このような圧縮規則の切り替えが頻繁に起きる場合は、圧縮規則を切り替えるための条件として、同一データが連続して入力される回数に対して所定の規定回数を設定しておき、該規定回数の切り替え条件が発生した時点、例えば同一データが３回連続して入力されたときに第１圧縮規則から第２圧縮規則へ切り替えるようにしてもよい。このように切り替え条件を変更しても、伸張時も同じ条件によって伸張規則を変更すれば正しくデータを復元できる。【０１１１】
以上説明したように本発明のデータ圧縮伸張方法によれば、複数の異なる圧縮規則を暗黙的に切り替えてデータの圧縮／伸張を行うことができるため、様々な特性をもつデータを、その特性に適した圧縮規則を用いて効率的に圧縮できる。また、圧縮後のデータ内に余計な制御コードを埋め込むことなく、あるいは最小限の制御コードを埋め込むだけでデータの圧縮／伸張が可能になる。【０１１２】
また、圧縮規則を暗黙的に変更するため、変更回数が多い場合でも圧縮効率の悪化が抑制され、さらに圧縮効率が悪化するような圧縮規則の変更を避けることができる。【０１１３】
また、圧縮時や伸張時に複数の圧縮規則を実現する圧縮エンジンを同時に動かす必要がないため、消費電力を低減できる。【０１１４】
この出願は、２００７年８月１３日に出願された特願２００７−２１０７６１号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2009022531.tif 000004
【図２】
2009022531.tif 000005
【図３】
2009022531.tif 000006
【図４】
2009022531.tif 000007
【図５】
2009022531.tif 000008
【図６】
2009022531.tif 000009
【図７】
2009022531.tif 000010
【図８】
2009022531.tif 000011
【手続補正書】
【提出日】平成20年10月9日(2008.10.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
圧縮エンジンにてデータを圧縮し、伸張エンジンにて圧縮されたデータを伸張するためのデータ圧縮伸張方法であって、
前記圧縮エンジンが、
予め設定された前記データの圧縮処理の開始時点で用いる第１圧縮規則にしたがってデータの圧縮を開始すると共に、該データの特性を解析し、
前記データの特性が予め設定された切り替え条件を満たすとき、該データに後続するデータを前記第１圧縮規則と異なる第２圧縮規則にしたがって圧縮し、
前記データの特性が前記切り替え条件を満たさなくなったとき、前記第１圧縮規則にしたがって該データ及び後続するデータを圧縮し、
前記伸張エンジンが、
前記第１圧縮規則に対応する第１伸張規則にしたがって圧縮されたデータである圧縮データの伸張を開始し、
伸張後のデータの特性が前記切り替え条件を満たすとき、該データに後続する圧縮データを前記第２圧縮規則に対応する第２伸張規則にしたがって伸張し、
前記伸張後のデータの特性が前記切り替え条件を満たさなくなったとき、前記第１伸張規則にしたがって該データ及び後続する圧縮データを伸張するデータ圧縮伸張方法。
【請求項２】
前記第１圧縮規則は、
辞書ベースの圧縮方法であり、
前記切り替え条件は、
同一のデータが複数回連続したときである請求項１記載のデータ圧縮伸張方法。
【請求項３】
前記第２圧縮規則は、
ランレングス符号化方法である請求項１または２記載のデータ圧縮伸張方法。
【請求項４】
前記圧縮エンジンは、
予め備えた複数種類の圧縮規則のなかから圧縮処理の開始時点で用いる第１圧縮規則が設定されると、
前記第１圧縮規則を示す情報を前記記憶装置に格納し、
前記伸張エンジンは、
前記記憶装置に格納された情報に基づいて、前記第１圧縮規則に対応する第１伸張処理にしたがって圧縮データの伸張を開始する請求項１から３のいずれか１項記載のデータ圧縮伸張方法。
【請求項５】
前記圧縮エンジンは、
予め備えた複数種類の圧縮規則のなかから圧縮処理の開始時点で用いる第１圧縮規則が設定されると、
前記第１圧縮規則を示す情報を圧縮データに付加し、
前記伸張エンジンは、
前記圧縮データに付加された情報に基づいて、前記第１圧縮規則に対応する第１伸張処理にしたがって圧縮データの伸張を開始する請求項１から３のいずれか１項記載のデータ圧縮伸張方法。
【請求項６】
前記圧縮エンジンは、
前記データの特性が前記切り替え条件を満たすとき、圧縮規則を前記第２圧縮規則に切り替えるための情報を圧縮データに付加し、
前記伸張エンジンは、
前記圧縮データに付加された情報に基づいて伸張規則を前記第１伸張規則から前記第２伸張規則に変更し、前記圧縮データを伸張する請求項１から５のいずれか１項記載のデータ圧縮伸張方法。
【請求項７】
前記伸張エンジンは、
先行する伸張後のデータが前記切り替え条件を満たすか否かを判定すると共に、後続する圧縮データを予め設定された伸張規則にしたがって伸張し、
前記先行する伸張後のデータが前記切り替え条件を満たさない場合は、後続する伸張後のデータを廃棄し、該データに対応する圧縮データを前記第１伸張規則にしたがって伸張し、
前記先行する伸張後のデータが前記切り替え条件を満たす場合は、後続する伸張後のデータをそのまま出力する請求項１から６のいずれか１項記載のデータ圧縮伸張方法。
【請求項８】
前記伸張エンジンは、
先行する伸張後のデータが前記切り替え条件を満たすか否かを判定すると共に、後続する圧縮データを予め設定された複数種類の伸張規則にしたがって伸張し、
前記後続する圧縮データに実施した複数種類の伸張規則による伸張後のデータのいずれか一つを、前記先行する伸張後のデータに対する前記切り替え条件を満たすか否かの判定結果に応じて出力する請求項１から６のいずれか１項記載のデータ圧縮伸張方法。
【請求項９】
前記圧縮エンジンは、
前記切り替え条件が、圧縮規則の切り替え回数に対して予め設定された規定値に到達したとき、前記切り替え条件を変更する請求項１から８のいずれか１項記載のデータ圧縮伸張方法。
【国際調査報告】
2009022531.tif 000012
2009022531.tif 000013