(57)【特許請求の範囲】
【請求項１】
２進データの無損失圧縮を行うシステムであって、ａ）各符号化対が０のランと１のランを表す、２進データのストリームを前記符号化対としてランレングス符号化する手段と、ｂ）前記符号化対の履歴を記憶する手段と、ｃ）現行符号化対を前記履歴内の少なくとも第１および第２の前の符号化対と比較する手段と、ｄ）ｉ）第１の接頭コードが付加された前記現行符号化対と、第１のコードと第２のコードはそこに付加された第２の接頭コードを有し、前記現行符号化対が前記第２の前の符号化対と一致し、前記第１の前の符号化対と一致しなかったことを示す前記第１のコードと前記現行符号化対が前記第２の前の符号化対および前記第１の前の符号化対と一致したことを示す前記第２のコードとのうちの１つと、のいずれか一方を選択する手段、ｉｉ）前記選択された一方と前記選択された一方の長さとを出力として生成する手段と、ｅ）前記出力を所定の長さを有するワードにパックする手段とを備えるシステム。
【請求項２】
前記ランレングス符号化手段が、ランレングス・エンコーダに入力源からデータを要求させて前記データを対に変換させるように動作するランレングス状態機械に結合されたランレングス・エンコーダを備え、各対の第１の要素が入力源から受け取った連続する０の数を示す数値であり、各対の第２の要素が入力源から受け取った連続する１の数を示す数値であり、前記ランレングス状態機械が各連続する０と連続する１との対の組合せの終わりを示す信号を発生するようにさらに動作することを特徴とする請求項１に記載のシステム。
【請求項３】
前記履歴格納手段が、第２のレジスタに結合された第１のレジスタと第２のレジスタに結合された第３のレジスタとを有するＦＩＦＯを備え、前記レジスタのそれぞれが２つの半分を有し、その一方に前記ランレングス・エンコーダ手段によって生成された連続する０が格納されその他方に前記ランレングス・エンコーダ手段によって生成された連続する１が格納されることを特徴とする請求項１に記載のシステム。
【請求項４】
前記比較器手段が、前記第１のレジスタの内容を前記第２のレジスタおよび前記第３のレジスタと比較し、前記比較の結果を示す対応する第１おび第２の比較信号を発生する比較器を備えることを特徴とする請求項３に記載のシステム。
【請求項５】
ａ）前記第１の接頭コードを前記現行符号化対の前に付加する接頭コード手段と、ｂ）前記第１および第２のコードを生成する反復コード手段とをさらに備える、請求項１に記載のシステム。
【請求項６】
前記選択手段が、ａ）前記比較器手段と前記履歴手段と前記ランレングス符号化手段とに結合されたダブル・ランレングス状態機械と、ｂ）前記第１の接頭コード手段と前記反復コード手段と前記ダブル・ランレングス状態機械とに結合され、前記ダブル・ランレングス状態機械から受け取った信号に基づいて、接頭コードを有する前記現行符号化対と、前記第２の接頭コードを伴った前記第１のコードと前記第２のコードとのうちの１つをその出力として選択するコード・エミッタ・マルチプレクサと、ｃ）前記マルチプレクサに結合され、前記選択された１つの出力の長さを生成する論理回路とを備えることを特徴とする請求項５に記載のシステム。
【請求項７】
前記パッキング手段が、ａ）前記論理回路に結合され、前記選択された１つの生成された長さを１つの入力として受け取り、合計および桁上げ出力を生成するアキュムレータと、ｂ）前記アキュムレータに結合され、前記アキュムレータの合計出力をその入力として受け取り、その内容を前記アキュムレータに第２の入力として供給するレジスタと、ｃ）前記コード・エミッタ・マルチプレクサに結合され、前記コード・エミッタ・マルチプレクサからの選択された出力をそのデータ入力として受け取るバレル・シフタと、ｄ）前記レジスタに結合され、前記レジスタの内容に基づいてマスク出力を生成するマスク生成器と、ｅ）前記バレル・シフタと前記マスク生成期手段とに結合され、それぞれが前記バレル・シフタの出力のうちの対応する１つを１つの入力として有する１組の２：１マルチプレクサと、ｆ）前記１組の２：１マルチプレクサに結合され、前記１組の２：１マルチプレクサへの対応する第２の入力として結合された出力を有する第２のレジスタとを備えることを特徴とする請求項６に記載のシステム。
【請求項８】
２進データの無損失圧縮を行う方法であって、ａ）各符号化対が０のランと１のランを表す２進データのストリームを符号化対としてランレングス符号化するステップと、ｂ）前記符号化対の履歴を記憶するステップと、ｃ）現行符号化対を前記履歴内の少なくとも第１および第２の前の符号化対と比較するステップと、ｄ）第１の接頭コードが付加されている前記現行符号化対と、第１のコードと第２のコードはそこに付加された第２の接頭コードを有し、前記現行符号化対が前記第２の前の符号化対と一致し、前記第１の前の符号化対と一致しなかったことを示す前記第１のコードと前記現行符号化対が前記第２の前の符号化対および前記第１の前の符号化対と一致したことを示す前記第２のコードとのうちの１つと、の一方を選択するステップと、ｅ）前記選択された一方と前記選択された一方の長さとを出力として生成するステップと、ｆ）前記出力を所定の長さを有するワードにパックするステップとを含む方法。
【請求項９】
前記ランレングス符号化ステップが、入力源からデータを要求して前記データを、各対の第１の要素が入力源から受信した連続する０の数を示す数値であり、各対の第２の要素が入力源から受け取った連続する１の数を示す数値である対に変換し、各連続する０と連続する１との対の組合せの終わりを示す信号を発生するステップを含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記履歴記憶ステップが、前記ランレングス・エンコーダ・ステップによって生成された前記連続する０および１を、第２のレジスタに結合された第１のレジスタと、前記第２のレジスタに結合された第３のレジスタとを有するＦＩＦＯに格納するステップを含み、前記レジスタのそれぞれが２つの半分を有し、そのうちの一方に連続する０が格納され、他方に連続する１が格納されることを特徴とする請求項９に記載の方法。
【請求項１１】
前記比較ステップが、前記第１のレジスタの内容を前記第２のレジスタおよび前記第３のレジスタと比較し、前記比較の結果を示す対応する第１および第２の比較信号を発生するステップを含むことを特徴とする請求項１０に記載のシステム。
【請求項１２】
ａ）前記第１の接頭コードを前記現行符号化対の前に付加するステップと、ｂ）前記第１および第２のコードを生成するステップとをさらに含む、請求項８に記載の方法。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、レーザ・プリンタまたはその他の連続ラスタ走査装置による印刷のために処理する際にグレースケール・データの圧縮に特に適用される本明細書でダブル・ランレングス符号化（ＤＲＬＥ）と呼ぶ２進データの無損失圧縮の方法に関する。
【０００２】
【従来の技術】
従来知られている圧縮技術にランレングス符号化（ＲＬＥ）がある。これはランを＜パターン、反復回数＞の形式の順序対として表す無損失圧縮方法であり、反復回数によってパターンの連続するオカレンス数が決まる。ランを適切な回数だけ繰り返されるパターンに伸長すると元の２進形式が再生されるため、ＲＬＥが実際に無損失変換であり、適合する大きさの反復パターンをきわめてよく圧縮する変換であることは容易に判断される。ここに、ランとは０又は１の連続した繰り返し生起するパターンである。
【０００３】
反復数の値は、それを表すために使用されるビット数によって制限される。Ｗビットを使用して反復数を表した場合、１つのＲＬＥ順序対の長さは
Ｌ（＜パターン、反復数＞）＝（Ｌ（パターン）＋Ｗ）
となる。
（反復数＊Ｌ（パターン））＞＞（Ｌ（パターン）＋Ｗ）
または
１＞＞（（１／反復数）＋（Ｗ／（反復数＊Ｌ（パターン））））
の場合、明らかにＲＬＥは有効な無損失圧縮方式である。
したがって、ＲＬＥは反復回数の多いパターンを持つデータには最適である。
【０００４】
【発明が解決しようとする課題】
本発明は、これを改良して更に効率のよい無損失圧縮技法を提供しようとするものである。
【０００５】
【課題を解決するための手段】
レーザ・プリンタまたはその他の連続ラスタ走査装置による印刷のために処理する際にグレースケール・データの圧縮に特に適用される、本明細書でダブル・ランレングス符号化（ＤＲＬＥ）と呼ぶ２進データの無損失圧縮の方法を開示する。ＤＲＬＥ方法は、計算の複雑さがほとんどなしに１と０の反復パターンを効率的に記録する。従来のランレングス符号化（ＲＬＥ）ではうまく圧縮することができないデータについて１桁以上高い圧縮比が得られる場合が多い。ＤＲＬＥは０と１の可変長パターンを示す順序対の順次履歴を使用し、次にそれらのパターンを、反復されるに従って効率的かつ適応的に符号化する。
【０００６】
ＤＲＬＥは、ディジタル・プリンタで印刷するページの２進イメージに特有のグレースケール・データの場合に高い圧縮比を実現する。ＤＲＬＥによって、従来のランレングス符号化（ＲＬＥ）では通常はうまく圧縮されない多くのページを、計算効率のよい方法で表すことができると同時に、それらのページを保持するのに必要な記憶量を大幅に低減することができる。この計算効率はリアルタイム制約のあるソフトウェアとハードウェアの両方の実施にきわめて有用であると同時に、高圧縮比は一般に、今日の低コスト高解像度モノクロームおよびカラーのインクジェットおよびレーザ・プリンタにとって理想的である。
【０００７】
ＤＲＬＥの理論的基礎とグレースケールへのその応用に関する説明とを示す。グレースケール画像処理は一般に、１カラー・プレーン当たり１ビット／画素のディジタル・モノクロームまたはプレーナ・カラー・プリンタに適用される。
【０００８】
【発明の実施の形態】
本発明によるダブル・ランレングス符号化（ＤＲＬＥ）には以下の３つの基本要素がある。
１．ダブル・ラン。
要素が、圧縮するデータ内の０のランと１のランとの連結を表す順序対。
２．リテラルおよびリピータの符号化。
ＤＲＬＥの出力形式は、ダブル・ランを表すリテラルと、ダブル・ランの循環インスタンスのリピータを含む。
３．パターン・マッチング。
ダブル・ランの循環可変長パターンを検出する適応型の方法。
【０００９】
上記の各要素について以下に詳述する。最初の２つの要素は、圧縮データを表すために使用するデータ構造体であり、ＤＲＬＥの主要構成要素である。圧縮程度は、パターン・マッチング・アルゴリズムによって異なる。グレースケール・データの場合、ＤＲＬＥは最新（ＭＲ）ダブル・ラン方式を採用する。その他の方式としては最新パターン変化（ＭＲＰＣ）と事前定義固定パターン（ＰＦＰ）があり、パターン内に埋め込まれたパターンを含むデータ、またはＤＲＬＥを適用する前に特定のパターンが存在することがわかっているデータにそれぞれ適用可能である。これらのパターン・マッチング方式のそれぞれについては以下で説明する。
【００１０】
以下では、無損失圧縮およびＤＲＬＥの形式モデルについて説明し、次にＤＲＬＥの例を示す。それによって、ＤＲＬＥがアルゴリズム的にどのように機能するかを例示し、特定の条件で圧縮比が数学的にどのように変化するかを例示する。その後でグレースケール・データへのＤＲＬＥの応用について説明する。
【００１１】
理論モデル
任意の２進データは、ゼロと１のランダムな順序とみなすことができる（図１の最上部を参照）。この説明では、ＲＬＥとＤＲＬＥを使用した無損失圧縮の形式を説明することが可能な表記と用語を採用する。
【００１２】
２進データの最小要素はビット（すなわちゼロまたは１）である。合計ビット数をデータの長さと呼ぶ。２進データの無損失圧縮とは、変換が可逆的（すなわち無損失）であるように当該データに適用される変換であり、より長さの短いデータを生成する（すなわち圧縮する）。
【００１３】
無損失圧縮
Ｔ（ｘ）＝ｙ
は２進データｘの変換Ｔを行って２進データｙを生成することを表すものとする。
【００１４】
変換Ｔ（ｘ）は、すべてのｘについて
Ｔ-1（Ｔ（ｘ））＝ｘ
になるＴ-1（ｙ）が存在する場合のみ無損失である。
Ｔ-1（ｙ）をＴ（ｘ）の逆変換と呼ぶ。無損失圧縮の用語では、Ｔ-1（ｙ）を圧縮解除または伸長変換と呼ぶ。
２進データｘの長さはｘを構成するビットの数（またはカウント）である。
Ｌ（ｘ）
はｘの長さを示すものとする。
ｘの無損失変換Ｔ（ｘ）は、
Ｌ（Ｔ（ｘ））＜Ｌ（ｘ）
の場合にのみ圧縮される。
Ｔ（ｘ）の圧縮比Ｒ（Ｔ（ｘ））は、
Ｒ（Ｔ（ｘ））＝Ｌ（ｘ）／Ｌ（Ｔ（ｘ））
のように定義される。
Ｔ（ｘ）の基本目標は、
Ｒ（Ｔ（ｘ））＞＞１となる場合である。
【００１５】
ランレングス符号化
ランとは介在データなしに繰り返し生起するパターンである。たとえば、「５個のゼロのラン」とは５個の連続したゼロのことを言う。
【００１６】
ランレングス符号化（ＲＬＥ）は、ランを＜パターン、反復回数＞の形式の順序対として表す公知の無損失圧縮方法であり、反復回数によってパターンの連続するオカレンス数が決まる。ランを適切な回数だけ繰り返されるパターンに伸長すると元の２進形式が再生されるため、ＲＬＥが実際に無損失変換であり、適合する大きさの反復パターンをきわめてよく圧縮する変換であることは容易に判断される。
【００１７】
反復数の値は、それを表すために使用されるビット数によって制限される。Ｗビットを使用して反復数を表した場合、１つのＲＬＥ順序対の長さは
Ｌ（＜パターン、反復数＞）＝（Ｌ（パターン）＋Ｗ）
となる。
（反復数＊Ｌ（パターン））＞＞（Ｌ（パターン）＋Ｗ）
または
１＞＞（（１／反復数）＋（Ｗ／（反復数＊Ｌ（パターン））））
の場合、明らかにＲＬＥは有効な無損失圧縮方式である。
したがって、ＲＬＥは反復回数の多いパターンを持つデータには最適である。
【００１８】
図１の中央に、図１の最上部にある２進データのＲＬＥの例を示す。この例では、パターンの長さは１ビットであり、それによってゼロまたは１の２つの可能なパターンを示す。図１のランレングス符号化例の各順序対は、パターンの後にパターンの連続インスタンス数が付いたものを示している。図１に示す７６ビットの２進データの特定のビット・パターンの場合、各順序対に４ビット（パターン０または１に１ビットと、０〜７の連続インスタンス数に３ビット）を要し、合計８０ビットに２０個の順序対を要するため、ＲＬＥ圧縮では利点がない。また、符号化形式で現れたときパターンが少なくとも１回生起するため、ＲＬＥのソフトウェアまたはハードウェア実施態様は、反復カウントに使用されるビット数にもう１回の反復を計算に入れることができるように、オカレンス数ではなく隣接反復数を記録することができることに留意されたい。この例では１ビット幅のパターンのみを符号化するが、ＲＬＥの応用例では一般にバイトまたはバイトのシーケンスなどより大きなパターンが可能であり、可変長パターンさえも可能な場合があるが、これは計算上かなり難しく、より多くのコストがかかる。ＤＲＬＥは基本的に可変長パターンを扱い、それを計算効率のよい方法で行うことに留意されたい。
【００１９】
ダブル・ランレングス符号化
ダブル・ランレングス符号化（ＤＲＬＥ）は、グレースケール・データについて高い圧縮比を実現する無損失圧縮変換である。グレースケール・データは、１とゼロの反復パターンの反復によってグレーの様々な陰影が表される２進データである。１が多くゼロがあまり多くないパターンは一般に濃いグレーを表し、１が少なくゼロが多いパターンは一般に明るいグレーを表す。
【００２０】
ＤＲＬＥのソフトウェアまたはハードウェア実施態様は、グレースケール・パターンを検出し、それらのパターンを圧縮形式で固有かつ効率的に符号化する。これは、ダブル・ランと呼ぶ、ゼロと１（グレースケールではそれぞれ白と黒の画素）の隣接ランを示す順序対の一時的履歴を記録し、それらのダブル・ランをリテラルとして符号化し、次にそれらのダブル・ランの隣接オカレンスをリピータとして符号化することによって行う。最もコンパクトな符号化を実現するように、リピータは最小のビット数を使用する。圧縮形式の長さは元の２進データよりも大幅に短くなる場合が多い。
【００２１】
ダブル・ラン、リテラル、およびリピータの概念に加えて、ＤＲＬＥは、小さなランを効率的に符号化することができるようにし、いくつかのパターンを同時に符号化できるようにすることによって、ＲＬＥを特有に拡張する。各ダブル・ランはゼロのランの後に１のランが続いたものを表し、履歴はダブル・ランの一時的シーケンスを表す。リピータによって、わずか２ビットで履歴の最新のサブシーケンスを効率的に符号化することができる。
【００２２】
図１ないし図５の例で、ＤＲＬＥのために以下の表記を使用したダブル・ランを示す。
｛Ｌ0，Ｌ1｝
上記で、Ｌ0はダブル・ラン内のゼロの数であり、Ｌ1はダブル・ラン内の１の数である。
【００２３】
符号化形式
ＤＲＬＥを使用して生成された２進データは、リテラルとリピータの２つの基本データ項目を使用する。以下はこれらのデータ項目の物理形式の説明である。リテラルまたはリピータの先頭ビットは、データ項目のタイプを決定するタグであり、リテラルの場合はゼロ、リピータの場合は１である。形式の残りの部分は、要素がリテラルであるかリピータであるかによって決まる。
【００２４】
リテラルの形式は、以下の形式の三つ組である。
｛０，Ｌ0，Ｌ1｝
最初の要素はタグ・ビットであり、０の場合はそのデータ項目がリテラルであることを示す。２番目の要素であるＬ0はパターン内の連続するゼロの数である。３番目の要素はゼロの直後の連続する１の数である。たとえば、「｛０，４，３｝」というリテラルは、「００００１１１」というパターンを表す。
【００２５】
リピータの形式は次の通りである。
｛１，ｎ｝
最初の要素はタグ・ビットであり、１の場合はデータ項目がリピータであることを示す。２番目の要素であるｎはパターン内のダブル・ランの数を示す。
【００２６】
リピータの２番目の要素は、ダブル・ランの一時履歴に関係する。ＤＲＬＥの一実施態様は、ダブル・ランのシーケンスを順序付けされた先入れ先出しリストの形で維持してパターン・マッチングに使用する。このシーケンスを維持する方法は様々あり、このような３通りの方法について以下に説明する。このリスト内のダブル・ランの実際の数は、後述するようにＤＲＬＥのサイジング・パラメータであり、圧縮比に影響を与える可能性がある。リピータの値ｎはこのリストへの相対オフセットである。パターンはその相対オフセットから始まる現行リスト内のダブル・ランの最新のサブシーケンスである。たとえば、最新ダブル・ランのリピータは「｛１，０｝」であるのに対して、２つの最新ダブル・ランのリピータは「｛１，１｝」である。一般には、ｎ個の最新ダブル・ランのリピータは「｛１，ｎ−１｝」である。
【００２７】
サイジング・パラメータ
リテラルとリピータのサイジング（すなわち、そのそれぞれが必要とするビット数）を制御するパラメータは以下の２つである。
Ｗ：ゼロのランまたは１のランの長さを表すために使用するビット数。
Ｎ：履歴内のダブル・ランの最大数。
【００２８】
値Ｗは、リテラル内のゼロのランと１のランの長さがそれぞれゼロから２W−１までの範囲であることが可能であることを意味する。Ｗによってランのサイズが決まるため、リテラルのサイズもＷによって制御される。
【００２９】
値Ｎは、リピータの２番目の要素（リテラル・オフセット）に必要なビット数を決定する。言い換えると、これによって履歴内で維持されるダブル・ランの数が決まる。これらのパラメータを使用すると、リテラルおよびリピータの固定長はそれぞれ、
Ｌ（リテラル）＝１＋（２＊Ｗ）
および
Ｌ（リピータ）＝１＋最高限界（ｌｏｇ２（Ｎ））
となり、上式で関数最高限界（ｒ）によって実数ｒ以上の最小整数が得られる。
【００３０】
これらのパラメータの効果を図２に示す。この図は、図１に示す例の要素の一部を強調したものであり、以下で「例１」として詳述する。
【００３１】
ＤＲＬＥ圧縮方法
概念的には、ＤＲＬＥの実施態様は一般に２進データを左から右に走査して、一度に１つのダブル・ランを引き出す。記録機構を使用してダブル・ランの履歴を維持する。この履歴内の要素数は最大Ｎ個である。
【００３２】
ダブル・ランの履歴を維持する機構は様々ある。たとえば、次の３つの方法を使用することができる。
１．最新（most recent, ＭＲ）
２．最新パターン変化（most recent pattern change, ＭＲＰＣ）
３．事前定義固定パターン（predefined fixed pattern, ＰＦＰ）
【００３３】
ＭＲ機構は２進データ内で遭遇したサイズＮのダブル・ランの現行リストを維持する。新しいランを入手するとそれがリストの前または先頭に追加される。これは図２に示す手法であり、グレースケール・データに最も適した手法である。
【００３４】
ＭＲＰＣ機構は、ＭＲ機構の変更版であり、パターン不一致が生起した場合のみ履歴を変更する。図３に、Ｎ＝２の場合のこの手法を示す。この手法は、パターンがより大きなパターン内に埋め込まれているデータに適している。
【００３５】
ＰＦＰ機構は、サイズＮの事前定義ダブル・ラン・パターンを使用し、このパターンのインスタンスまたはそのサブパターンのインスタンスのみを探す。履歴は変化しない。この例を図４に示す。この方式は、当該データについて事前の知識がある場合に適切である。一般には、ＰＦＰは、ＮおよびＷが良好な圧縮を実現するのに十分な大きさの有限のシーケンスが、完全な形または部分的な形で生起することがわかっているデータに適する。
【００３６】
ＤＲＬＥの結果は、ダブル・ランの履歴を維持するために使用した機構によって異なる場合があるため、この方法は圧縮解除方法への入力でもなければならない。したがって、理論的には変換ＤＲＬＥ（ｘ）およびＤＲＬＥ-1（ｙ）があるが、アルゴリズム的にはこれらのそれぞれが追加パラメータを有する。
【００３７】
履歴に加えて、ＤＲＬＥ実施態様は、リテラルもリピータも出されていない最新ダブル・ランの先読みバッファを維持する。最新履歴のサブシーケンスの完全一致がある場合、リピータが出される。そうでない場合は先読みバッファ内のダブル・ランのリテラルが最初の不一致まで出される。いずれの場合も、作用を受けたダブル・ランは先読みバッファから廃棄される。
【００３８】
初期状態
ダブル・ラン履歴の初期状態の適切な選定によって、圧縮比を向上させることができる。ＰＦＰの場合は間違いなく初期状態は事前定義固定パターンである。グレースケール・データの場合は、印刷するページは通常白い空間から始まり、大部分白い空間から成るため、履歴内の各リテラルについて「すべて白、黒なし」の初期状態が推奨される。より形式的には、グレースケール・データの場合、履歴内の各ダブル・ランの初期値は以下の通りでなければならない。
｛２Ｗ-1，０｝
【００３９】
例
最初の例では図２について説明する。図２および図３に、ＤＲＬＥのいくつかの境界条件、すなわちゼロのみの２進データ（空白ページ）と、１つの反復パターンから成る２進データを示す。
【００４０】
例１
図２に、ＭＲを使用したＷ＝５およびＮ＝２の場合のＤＲＬＥを例示する。この場合、リテラルの長さは１１ビットで、リピータの長さは２である。この例の結果は、４個のリテラルと４個のリピータで合計５２ビットの長さになり、圧縮比は７６／５２である。
【００４１】
Ｗの効果を示すために、リテラルの長さ要素の値を２進形式で示す。たとえば、「００１１１」および「００１１０」がそれぞれ７および６に相当する５ビットの２進数であるため、最初のダブル・ラン｛７，６｝の結果はリテラル｛０，００１１１，００１１０｝になる。
【００４２】
左から右に進むと、｛４，３｝の最初のインスタンスの結果はリテラルになる。しかし、｛４，３｝の２番目のインスタンスは２要素から成る履歴の先頭と一致し、したがって、値｛１，０｝のリピータになる。
【００４３】
続けて、｛４，３｝の３番目のインスタンスの結果はリピータになり、｛２，５｝の最初のインスタンスの結果はリテラルになる。
【００４４】
この時点で、次の２つのダブル・ランである｛４，３｝と｛２，５｝は一時履歴の最初の２つ（しかもただ２つ）の要素と一致する。したがって、結果は値｛１，１｝のリピータになる。これと同じパターンがもう１回繰り返され、したがって再び値｛１，１｝のリピータになる。
【００４５】
最後は、ダブル・ラン｛５，２｝のリテラルの結果になる。
【００４６】
例２
「すべて白、黒なし」のダブル・ラン（たとえば｛２W−１，０｝）が入っている履歴の初期状態を有する、まったくゼロだけから成る長さＬ（Ｓ）の２進データＳを考えてみる。このＳの形は完全レンダリングされた黒ページと似ている
。
【００４７】
この場合、連続した「すべて白、黒なし」ダブル・ランの各Ｎ個のオカレンスは、｛１，Ｎ−１｝の形のリピータに置き換えられる。
【００４８】
Ｓ内の「すべて白、黒なし」ダブル・ランの数をＭとする。ＭはＮで割り切れない場合がある。言い換えると、次のようになる場合がある。
（Ｍ  ｍｏｄ  Ｎ）＞０
上記で、「Ｍ  ｍｏｄ  Ｎ」は整数Ｎで割った場合の整数Ｍの整数剰余を示す。
Ｋ＝（Ｍ  ｍｏｄ  Ｎ）とする。
ＤＲＬＥ（Ｓ）は｛１，Ｎ−１｝の形式のいくつかの数のリピータ、すなわち
（Ｍ−Ｋ）／Ｎ
から成る。Ｋがゼロでない場合、これらのリピータの後には｛１，Ｋ−１｝の形のリピータが続く。さらに、Ｓは長さが
Ｒ＝Ｌ（Ｓ）  ｍｏｄ（２W−１）
のいくつかの残余ビットを有する場合があり、したがってＲがゼロでない場合、ＤＲＬＥ（Ｓ）は｛１，Ｒ，０｝の形のリテラルで終わることになる。
これらを使用すると、
Ｌ（ＤＲＬＥ（Ｓ））＝（（Ｍ−Ｋ）／Ｎ＊Ｌ（リピータ）＋残余＋Ｒ
となり、上式でＫがゼロの場合、残余は０であり、ゼロでない場合はＬ（リピータ）である。
【００４９】
典型的なディジタル印刷の場合、Ｌ（Ｓ）は大きいためＬ（ＤＲＬＥ（Ｓ））に対する影響は以下によって十分に概算される。
（Ｍ／Ｎ）＊Ｌ（リピータ）
Ｎ＝２の場合、上式は以下のようになり、
（Ｍ／２）＊２＝Ｍ
圧縮比は以下のようになる。
Ｒ（ＤＲＬＥ（Ｓ））＝Ｌ（Ｓ）／Ｍ
Ｌ（Ｓ）は
Ｍ＊（２W−１）
であり、したがってＮ＝２の場合は
Ｒ（ＤＲＬＥ（Ｓ））＝Ｍ＊（２W−１）／Ｍ＝２W−１
となることに留意されたい。Ｗ＝５の場合、Ｒ（ＤＲＬＥ（Ｓ））は３１である。
【００５０】
この計算は、Ｓがすべてゼロの２進値であることに基づいていることに留意されたい。また、長さが２W−１のダブル・ランの反復パターンの総合的結果によって、同じ圧縮比２W−１が得られることにも留意されたい。したがって、Ｗの選定はきわめて重要である。
【００５１】
例３
例２を概括すると、Ｎ＝２が２W−１の場合の長さ２W−１ビットの単一の反復ダブル・ランの可能な最善の圧縮比がわかる。この例では、Ｎ個のダブル・ランを有する反復パターンの最高の圧縮比を計算する。この場合も、Ｌ（Ｓ）は２進データのシーケンスＳの長さを示すものとし、Ｓは、Ｓ全体を通じてパターンとしてＭ回繰り返されるｎ個のダブル・ランＬ１、Ｌ２、．．．、Ｌｎを含むようになっているものとする。言い換えると、
Ｓ＝Ｌ１  Ｌ２  ．．．Ｌｎ  Ｌ１  Ｌ２  ．．．Ｌｎ  ．．．Ｌ１  Ｌ２  ．．．Ｌｎ  剰余
となる。例として、図２に３回生起する反復パターン｛４，３｝｛２，５｝を示す。
【００５２】
Ｌ（ＤＲＬＥ（Ｓ））は、リテラル、リピータ、および剰余のパターンの１つのインスタンスの累積長である。Ｌ（Ｓ）が大きい場合は重要ではないため説明を簡単にするために剰余はないものとする。
【００５３】
パターンの１インスタンスのリテラルの長さは、パターン内の各リテラルの長さの合計である。これは、
Ｌ（すべてのリテラル）＝ｎ＊（１＋２＊Ｗ）
となる。
【００５４】
パターンの残り（Ｍ−１）個のインスタンスはリピータによって表される。リピータの長さは以下のようになる。
Ｌ（すべてのリピータ）＝（Ｍ−１）＊（１＋最高限度（ｌｏｇ２  Ｎ））
したがって、以下のようになる。
Ｌ（ＤＲＬＥ（Ｓ））＝ｎ＊（１＋２＊Ｗ）＋（（Ｍ−１）＊（１＋最高限度（ｌｏｇ２  Ｎ））
Ｗ＝５およびＮ＝２の場合、上式は以下のようになる。
Ｌ（ＤＲＬＥ（Ｓ））＝１１＊ｎ＋２＊（Ｍ−１）
【００５５】
Ｍが大きくｎが小さい（たとえば２）の場合、これは２＊（Ｍ−１）に収束する。この結果は、ダブル・ランの長さに対して変化しないことに留意されたい。したがって、圧縮比は反復パターン内のダブル・ランが最大長の場合に最大化され、その逆の場合（すなわち各ダブル・ランが「０１」というパターンを表す場合）は最小化される。
【００５６】
任意のＷおよびＮのダブル・ランの最大長反復パターンは以下の形になる。
｛２W−１，２W−１｝｛２W−１，２W−１｝．．．．．｛２W−１，２W−１｝
上記で、このパターン内のダブル・ランの数は合計Ｎ個になる。
【００５７】
このパターンの長さは
Ｎ＊２＊（２W−１）
である。これを大きなＭとＮ＝２に当てはめると、以下の圧縮比が得られる。
Ｒ（ＤＲＬＥ（Ｓ））＝（Ｍ＊４＊（２W−１））／（２＊（Ｍ−１））
Ｍが大きい場合、（Ｍ−１）をＭに置き換えることができ、以下の概算結果が得られる。
２＊（２W−１）＝２W+1−２
これは、予測通り例２の結果の正確に２倍である。
【００５８】
したがって、Ｗ＝５の場合、Ｎ＝２について得られる最高の圧縮比は約６２である。
【００５９】
グレースケール・データへの適用
以下の説明では、以上の説明の結果をグレースケール・データに適用する。グレースケール・データは、一般にはインク・ジェット・プリンタまたはレーザ・プリンタで印刷される、モノクローム・ディジタル・イメージ、または１プレーン当たり１ビット／画素の複数プレーナ・ディジタル・カラー・イメージの単一プレーンを表す２進データである。
【００６０】
ディジタル・イメージでは、データの各ビットを画素と呼ぶ。画素の値１は一般にその画素が（たとえば黒色のインクまたはトナーで）「印刷」されることを意味し、値ゼロはその画素が印刷されない（すなわち白または印刷媒体の色）であることを意味する。
【００６１】
テキストとグラフィックスを混在させる典型的なソフトウェア・システムでは、ユーザはグレーの様々な陰影を使用することができる。たとえば、図の一部に２５％のグレーを使用し、別の部分に５０％のグレーを使用することができる。その他の部分にはグレーがなく、ある部分は完全に黒とすることができる（それぞれ０％および１００％のグレー）。
【００６２】
グレーの陰影が最終的に２進データにされると、グレーのパーセンテージはグレー領域上の印刷画素の割合によって概算され、その領域の上にそれらの印刷画素が分散される。分散プロセスでは一般にグレーを概算すると同時に、不快な可視パターン（すなわちモアレ・パターン）が生じる可能性を最小限にするように試みる。
【００６３】
分散は通常、ハーフトーンと呼ばれるパターンで表される。ハーフトーンは一般に、グレーの値を表し、ハーフトーン・セルと呼ばれる画素から成る小さい矩形である。セル内の合計画素数に対する印刷画素数によって、セルが表すグレーのパーセンテージが決まる。たとえば、４×４セルによって最大１７のグレーの陰影を表すことができる。
【００６４】
ハーフトーン・セルのサイズが通常小さいことは価値がない。１６×１６セルが一般的であり、それによって最大２５７個のグレー値を表すことができ、これはほとんどの用途で必要な数より多い。
【００６５】
図５（ａ）に、ディジタル・イメージの一部にあるハーフトーンの例を示す。このカットには１２本の走査線がある。走査線とはディジタル・イメージ内の画素から成る１本の線である。データのこの部分内には２５％のグレーを表すハーフトーン・パターンがある。この例では、最長のランでも７画素しかなく、最小は１画素である。１ビット・パターンの場合、ＲＬＥではこれを十分に扱えないことは明らかである。
【００６６】
図５（ｂ）に、各走査線にＭＲを個別に適用したＤＲＬＥを示す。全体的な圧縮に関して最大の柔軟性をもたせるように、一般には一度に１本の走査線に圧縮が適用される（グレースケール・データと写真画像が含まれているページを考えてみると、イメージ・データを有する走査線はＤＲＬＥではそれほど良好に圧縮することができず、他の何らかの形の圧縮を必要とすることがある）。この結果、合計長が以下の通りの３２個のリテラルと４８個のリピータになる。
（３２＊１１）＋（４８＊２）＝４４８ビット
【００６７】
この例では、走査線カットの幅は８３画素に過ぎず、そのような線が１２本ある。したがって、行イメージ・サイズは
（１２＊８３）＝９９６ビット
となる。
【００６８】
したがって、この例の圧縮比は
９９６／４４８＝２．２２
となる。
【００６９】
３００ドット／インチ（ｄｐｉ）のイメージでは、８３ビットの走査線は０．２８インチ（０．７１ｃｍ）に過ぎず、６００ｄｐｉでは０．１４（０．３６ｃｍ）インチに過ぎない。これらのｄｐｉレベルは今日のディジタル・プリンタに典型的なものである。したがって、現実には典型的な８  １／２×１１インチの用紙上の走査線は一般に３００ｄｐｉで２５５０画素、６００ｄｐｉで５１００画素である。反復パターンを含むグレースケール・データの典型的なカットは、０．２８インチ（０．７１ｃｍ）または０．１４インチ（０．３６ｃｍ）を超えつつある。したがって現実の例では、リピータの圧縮比に与える効果はこの例よりも大きな影響を持ち、圧縮比はこれより高くなる。
【００７０】
ハーフトーン・セルのサイズが小さいため、ハーフトーンのグレースケール・データは従来のＲＬＥでは十分に役立たない。これは、ランのサイズが小さく、ランの長さフィールドの長さがラン自体の長さとそれほど違わないため、圧縮比が小さくなるためである。または、ＲＬＥではそのデータをまったく圧縮することができず、実際にはそれを伸張する可能性がある。
【００７１】
ＤＲＬＥは、各パターンが小さい、１とゼロの可変長パターンを含むデータのクラスの場合、きわめて良好な圧縮を実現する適応型無損失圧縮方式である。ＤＲＬＥは、コンピュータで作成され、１プレーン当たり１ビット／画素のカラー・プリンタまたはモノクローム・プリンタを対象とする、テキストとグラフィックスを含む文書のディジタル表現では典型的なタイプのデータである、ハーフトーン化されたグレースケール・データに特に適切である。したがって、このタイプの文書を保持するのに必要な記憶容量が大幅に低減される。
【００７２】
圧縮による記憶量低減は、低コストの高解像度ディジタル画像処理システム、すなわち、インク・ジェット・プリンタおよびレーザ・プリンタの必須要素である。これは記憶装置が高価な機構であるために必要である。記憶量をなくしたり減らしたりすることは、コスト競争力のある製品を開発する有効な方法である。
【００７３】
レーザ・プリンタ内で、所与のページの用紙がプリンタを通過して移動し始めた後は、その用紙は連続的に移動する。この期間中、ソフトウェアとハードウェアはリアルタイム制約の下でレーザに走査線を送る必要がある。したがって、圧縮解除方式の計算効率が高いことが重要である。ＤＲＬＥの圧縮解除方式はきわめて単純であることは明白であろう。さらに、Ｎ＝２および最新履歴（ＭＲ）の場合、ＤＲＬＥの圧縮圧縮アルゴリズムも簡単である。したがって、ＤＲＬＥは、高い圧縮比を実現するだけでなく、実施がきわめて容易であり、リアルタイム環境におけるソフトウェアとハードウェアの両方の実施態様にとって効率上有用である。
【００７４】
ソフトウェア実施態様
ＤＲＬＥのソフトウェア実施態様の例を、本明細書に付属文書Ｉとして添付されており、これはＣ言語ソース・コードである。このプログラムの動作は以下のハードウェア実施態様の説明を読めば容易に明らかになろう。
【００７５】
ハードウェア実施態様
図６に、２進データのストリームを圧縮するのに必要なデータ経路と処理段階に焦点を絞ったＤＲＬＥのハードウェア実施態様を図示する。データの流れは左から右の方向である。システム・メモリ（たとえばＤＲＡＭ）から非圧縮ソース・データが読み取られ、入力ＦＩＦＯ  １０１を経由して圧縮器に入る。入力ＦＩＦＯは任意選択であるが、これによってメモリからソース・データをバーストで読み取ることができ、全体的なシステム・パフォーマンスを最適化することができる。後述するいくつかの処理段階１０３の後、圧縮されたデータ・ワードが出力ＦＩＦＯ  １０５に書き込まれる。出力ＦＩＦＯも任意選択であるが、この場合もこれによって圧縮データをメモリにバーストで書き込むことができる。
【００７６】
入力ＦＩＦＯ  １０１
入力ＦＩＦＯはＤＭＡ読取りＦＩＦＯとして実施することができる。このＦＩＦＯはシステム・メモリから読み取る要求と、システム・メモリから読み取ったデータをＦＩＦＯバッファに格納する要求を生成する論理回路を含む。
【００７７】
ダブル・ラン・エンコーダ  １０９
ダブル・ラン・エンコーダは、入力ＦＩＦＯからワードをアンロードする要求を出すエンコーダである。本明細書に記載の実施例では、データ・ワードのサイズは３２ビットである。しかし、異なるサイズのバッファとカウンタを使用してその他のサイズのデータ・ワードも扱うことができ、その特定の詳細は当業者なら容易にわかるであろう。ダブル・ラン・エンコーダの処理によって、３２ビットのデータ・ワードが５ビットのランレングス符号化に変換される。データは、ダブル・ラン・エンコーダに３２ビット・ワードとして入るかその他のサイズのワードとして入るかに関係なく、２進データの直列ストリームとみなされる。従来技術のランレングス・エンコーダ１０９ａを使用してこの直列ストリームを読み取り、５ビット・カウンタで連続ビットの数をカウントする。内部状態機械１０９ｂが、ランレングス・エンコーダの動作を制御し、最初にゼロ・ビットをカウントするように指示する。１に到達すると、ランレングス・エンコーダのゼロのカウントが、ダブル・ランＦＩＦＯ  １１１内のレジスタＨ２の上位半分にロードされる。ただし、Ｈ２は後述するように１０ビットのレジスタである。内部状態機械１０９ｂは次にランレングス・エンコーダ１０９ａに対して連続する１のビットをカウントするように指示する。ゼロに到達すると、ランレングス・エンコーダの１のカウントがレジスタＨ２の下位半分にロードされる。この時点で、レジスタＨ２には有効なダブル・ラン符号化が入れられ、ダブル・ラン・エンコーダの状態機械はこの事象を後述するＤＲＬＥ状態機械に通知する。
【００７８】
ダブル・ラン・エンコーダはこのストリームの処理中に２つの問題を処理しなければならない。第１に、ゼロのランまたは１のランがワード境界を越すことがある。ランレングス・エンコーダがワード内の最後のビットに到達すると、ダブル・ラン・エンコーダは入力ＦＩＦＯから別のワードを要求しなければならない。入力ＦＩＦＯが次のワードを供給すると、ランレングス・エンコーダ１０９ａは現行ランのカウントを再開する。
【００７９】
第２に、ソース・ストリームに、ランレングス・エンコーダの５ビット・カウンタが保持することができる最大値である３１ビットより大きいゼロのランまたは１のランが入っている場合がある。これが発生した場合、ダブル・ラン・エンコーダはそのランを２つ以上のダブル・ラン符号化に分割しなければならない。この特殊な事態はＲＬＥ状態機械１０９ｂが処理する。ランレングス・エンコーダは、１つのラン内の３２番目のビットに到達するとその事象をＲＬＥ状態機械に通知し、ＲＬＥ状態機械はＤＲＬＥ状態機械１１５に対してレジスタＨ２内の値が完結していることを通知する。レジスタＨ２内の値は、ゼロのランのカウント中に最大カウントに達した場合は｛３１，０｝であり、１のランのカウント中に最大カウントに達した場合は｛ｎ，３１｝である。ただし、ｎは直前のランでカウントされたゼロの数である。Ｈ２内の値が受け入れられると、ＲＬＥ状態機械１０９ｂはランレングス・エンコーダを再始動させ、ランレングス・エンコーダは前に中断したところからビットのカウントを再開する。
【００８０】
ＲＬＥ状態機械は、当業者に周知の技法による順序論理回路を使用して実施することができる。状態機械の機能も、論理ゲートを使用して個別論理回路として実施することができる。その具体的な詳細は本発明を理解するのに重要ではなく、当業者には周知である。
【００８１】
ダブル・ランＦＩＦＯ  １１１
ダブル・ランＦＩＦＯは、ダブル・ラン・エンコーダ１０９によって生成された最後の３つの結果を保持するＦＩＦＯとして構成された３個の１０ビット・レジスタに過ぎない。図７で、この３個のレジスタにはＨ２、Ｈ１、およびＨ０と符号が付けられている。圧縮開始時には、Ｈ２がゼロ・クリアされ、Ｈ１とＨ０はそれぞれ｛３１，０｝に初期設定される。この初期設定値によって、ゼロ・ランで始まるデータ・ストリームの圧縮度が向上する。ダブル・ラン・エンコーダがその最初の結果を生成すると、それらがＨ２にロードされる。Ｈ２、Ｈ１、およびＨ０内の値は履歴比較器１１３によって検査され、履歴比較器は後述するようにＤＲＬＥ状態機械にデータを供給する。ＤＲＬＥ状態機械が履歴比較器の結果に基づいて動作すると、レジスタＨ２およびＨ１内の値がそれぞれレジスタＨ１およびＨ０にシフト・ダウンされ、レジスタＨ２は再びゼロ・クリアされる。その後、レジスタＨ２を使用して次のダブル・ラン値を形成することができる。
【００８２】
履歴比較器１１３
履歴比較器は、２つの比較を行い、その結果はＤＲＬＥ状態機械が圧縮コードの生成を制御するために使用する。履歴比較器は、２つの１０ビット等価比較器を含む。第１の等価比較器はレジスタＨ２をレジスタＨ１と比較し、第２の等価比較器はレジスタＨ２とレジスタＨ０を比較する。これらの比較結果は、ＤＲＬＥ状態機械に供給され、コード・エミッタ１１７を制御する。
【００８３】
ＤＲＬＥ状態機械１１５
ＤＲＬＥ状態機械は、履歴比較器から結果を受け取り、その結果に基づいてコード・エミッタが生成するコードのタイプ、すなわち後述のようにＹかＺかを選択する。
【００８４】
ＤＲＬＥ状態機械は、３ステート有限状態機械（ＦＳＭ）として実施することができる。初期状態は、状態０であり、現行ダブル・ランについて検討中の前のダブル・ランがない状態である（前にＡ≠Ｃ、Ａ≠Ｂ）。この場合、現行ダブル・ランは、リテラルとして出されるか（履歴内のいずれとも一致しない場合、Ａ≠Ｃ、Ａ≠Ｂ）、履歴内の最新項目とのみ一致する場合（Ａ≠Ｃ、Ａ＝Ｂ）はリピータとして出され、現行ダブル・ランが最も古いものと一致する場合（Ａ＝Ｃ、Ａ≠Ｂ）（状態１）または履歴内の両方のダブル・ランと一致する場合（Ａ＝Ｃ、Ａ＝Ｂ）（状態２）は、状態を変化させる。
【００８５】
状態１は、前のダブル・ランが現行ランだったときに履歴比較機内の最も古いものと一致したが、最も新しいものとは一致しなかった場合（前にＡ＝Ｃ、Ａ≠Ｂ）に発生する。この場合、現行ダブル・ランが現行の最も古いものと一致する場合（Ａ＝Ｃ）、２要素リピータを出すことができる。そうでない場合は、前のリテラルを出さなければならず、現行のものはリテラル（Ａ≠Ｂ）または単一要素リピータ（Ａ＝Ｂ）として出される。
【００８６】
状態２は、前のダブル・ランが現行ダブル・ランだったときに履歴比較器内の両方の要素と一致した場合（前にＡ＝Ｃ、Ａ＝Ｂ）に発生する。この場合、現行ダブル・ランが現行の最も古いものと一致しする場合（Ａ＝Ｃ）、２要素リピータを出すことができる。そうでない場合（Ａ≠Ｃ）、前の単一リピータを出さなければならず、現行のものはリテラルとして出される。
【００８７】
ＤＲＬＥ状態機械は、付属文書１のソース・コードで表されるものとして前述したソフトウェア実施態様で説明している状態機械のコードを実施する状態機械である。
【００８８】
コード・エミッタ１１７
コード・エミッタはＹとＺの２つの出力を発生する。Ｙには、完全な１１ビットのリテラル・コードか、２ビットの単一反復コードか、または２ビットのダブル反復コードが入る。Ｚには、Ｙのコードのサイズ、すなわち２または１１が入る。コード・エミッタは、履歴比較器の結果に基づいてＤＲＬＥ状態機械１１５によって制御される。Ｈ２から１０ビットの値を取り出し、ＡＤＤ０論理回路１１４によって最上位ビットとして０を前に付加し、１１ビットの結果をＹ上に駆動することによって、リテラル・コードが生成される。それと並行して、値１１（２進数１０１１）がＺに駆動される。２進数１０をＹの最下位ビットに駆動し、値２（２進００１０）をＺに駆動するだけで単一反復コードが生成される。同様に、２進数１１をＹの最下位ビットに駆動し、Ｚに値２（２進００１０）を駆動することによって、ダブル反復コードが生成される。ＤＲＬＥ状態機械１１５からの出力信号は、コード・エミッタ１１７への３つの入力のうちの１つを選択し、前述のようにコード・エミッタはそれをＺ上の１１または２と共にＹに入れる。
【００８９】
ワード・パッカ１１９
ワード・パッカは、コード・エミッタ１１７からｎビットのコードを受け取り、それらを３２ビット・ワードにパックする。ワード・パッカはコード・エミッタから、コードすなわちＹからの値と、コードのサイズすなわちＺからの値の２つの値を受け取る。コード・エミッタは２ビットと１１ビットの２つのコード・サイズしか出力しない。コード・サイズに応じて、ワード・パッカは現行２ビット・コード値または１１ビット・コード値を、前に受け取った値と結合し、３２ビット・ワードを形成する。ワード・パッカは、ワード境界を越えるコードを適切に扱わなければならない。完全な３２ビット・ワードを形成するのに十分なコードが結合されると、ワード・パッカはその結果を出力ＦＩＦＯに渡す。ワード・パッカ１１９の機能を実施する回路は当業者なら容易にわかるであろう。図７は、ワード・パッカ・ブロック１１９のデータ経路の作用を示す、適合する一実施態様のブロック図である。ワード・パッカはコード・エミッタ１１７から一続きのｎビット・コードを受け取り、それらを一緒にパックして３２ビット・ワードにする。ワード・パッカはコード・エミッタから、コードすなわちＹからの値と、コードのサイズすなわちＺからの値の２つの値を受け取る。
【００９０】
図７のワード・パッカは、そのコアにある３２ビットのバレル・シフタ１３１を使用する。３２ビット・バレル・シフタは、Ｙで送られたコード値を回転させて適切な位置に入れ、３２ビット・レジスタ１３５に連結された前のコード値と結合することができるようにする。３２ビット幅の２：１マルチプレクサ１３７が、現行コード値を、前の連結コード・データのストリングと結合し、新しい連結を３２ビット・レジスタ１３５に保管する。３２ビット・レジスタが一杯になるかオーバーフローすると、ワード・パッカはその結果を出力ＦＩＦＯ  １０５に渡す。
【００９１】
Ｚ上の４ビット値は、Ｙ上のコードのサイズを示す。Ｚの値は５ビットのレジスタ１４１に累積され、このレジスタのＰａｋＳｈという符号が付けてある出力がバレル・シフタの動作を直接制御し、３２個の個別に制御可能な２：１マルチプレクサを含む３２ビット幅の２：１マルチプレクサ１３７の動作を間接的に制御する。ＰａｋＳｈ値は、マスク生成器１４５によって単純な５ビットの２進値から３２ビットのマスクに変換される。ＰａｋＳｈ値０ｘ００、０ｘ０１、０ｘ０２、．．．、０ｘ１Ｆによって、それぞれ３２ビットのマスク値０ｘ００００００００、０ｘ８０００００００、０ｘＣ０００００００、．．．、０ｘＦＦＦＦＦＦＦＦが生成される。次にこの３２ビット・マスクからのビット値によって、３２個の２：１マルチプレクサのそれぞれが直接、個別に制御されて、現行コード・データまたは前のコード・データが選択される。このようにして、３２ビット幅の２：１マルチプレクサ１３７は現行コード値をその直前のコード値のストリングと結合し、その新しい結合を３２ビット・レジスタ１３５にロードすることができるようにする。
【００９２】
上記で示していない小さい状態機械が、５ビットおよび３２ビットのレジスタ１４１および１３５のロードと、マスク生成器１４５のイネーブルとを制御する。また、これはＡＬＵ  １３１からの合計および桁上げ出力（図示せず）のモニタも行い、現行コードによって３２ビットが一杯になるかまたはオーバーフローするかどうかを判断する。この２つのいずれの場合も、３２ビット・レジスタ１３５にロードされた後、その結果を出力ＦＩＦＯ  １０５に渡さなければならない。後者の場合、次のコード値を結合する前に、現行回転コードのオーバーフロー部分を３２ビット・レジスタの開始ビット部分にロードしなければならない。この状態機械はこの順序付けを扱う。
【００９３】
出力ＦＩＦＯ  １０５
出力ＦＩＦＯはＤＭＡ書込みＦＩＦＯとして実施することができる。このＦＩＦＯは、ワード・パッカ１１７から受け取った３２ビット・ワードを格納し、そのワードをメモリに書き戻す。メモリに格納されている圧縮データはデコーダに渡され、デコーダの出力は元の入力ファイルと同じである。
【００９４】
デコーダは上述の処理を逆にたどる。適合するデコーダの実施態様の詳細は、当業者なら容易にわかるであろう。
【００９５】
以上、ダブル・ランレングス・エンコーダの特定の実施態様について説明したが、異なるワード・サイズを使用したり、３個のレジスタＨ１〜Ｈ２より多くのレジスタを設けたり、履歴比較による比較を３つより多くしたり、ＤＲＬＥ状態機械の状態を３つより多くしたり、０と１の代わりに１と０の対にして、リテラルを示す接頭コードとして０の代わりに１を使用し、１の代わりに０を使用してリピータを示したりするなど、特許請求の範囲に記載の本発明の精神および範囲から逸脱することなく多くの変更を加えることができる。
【図面の簡単な説明】
【図１】  ２進データの様々な表現を示す図である。
【図２】  最新（ＭＲ）履歴を使用したダブル・ランレングス符号化の例を示す図である。
【図３】  最新パターン変化（ＭＲＰＣ）を使用したダブル・ランレングス符号化の例を示す図である。
【図４】  事前定義固定パターン（ＰＦＰ）を使用したＤＲＬＥの例を示す図である。
【図５】  グレースケール・データのダブル・ランレングス符号化を示す図である。
【図６】  本発明のダブル・ランレングス符号化技法のハードウェア実施態様を示すブロック図である。
【図７】  本発明と共に使用するのに適したワード・パッカを示すブロック図である。
【符号の説明】
１０１  入力ＦＩＦＯ
１０３  処理段階
１０５  出力ＦＩＦＯ
１０９  ダブル・ラン・エンコーダ
１０９ａ  ランレングス・エンコーダ
１０９ｂ  内部状態機械
１１１  ダブル・ランＦＩＦＯ
１１３  履歴比較器
１１５  ＤＲＬＥ状態機械
１１７  コード・エミッタ
１１９  ワード・パッカ
１３１  バレル・シフタ
１３７  マルチプレクサ
１４５  マスク生成器
【図１】
0004094081.tif 000002
【図２】
0004094081.tif 000003
【図３】
0004094081.tif 000004
【図４】
0004094081.tif 000005
【図５】
0004094081.tif 000006
【図６】
0004094081.tif 000007
【図７】
0004094081.tif 000008