[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP2006295853A - 符号化装置、復号装置、および、符号化方法ならびに復号方法 - Google Patents

符号化装置、復号装置、および、符号化方法ならびに復号方法 Download PDF

Info

Publication number
JP2006295853A
JP2006295853A JP2005117604A JP2005117604A JP2006295853A JP 2006295853 A JP2006295853 A JP 2006295853A JP 2005117604 A JP2005117604 A JP 2005117604A JP 2005117604 A JP2005117604 A JP 2005117604A JP 2006295853 A JP2006295853 A JP 2006295853A
Authority
JP
Japan
Prior art keywords
code
internal state
length
match
decoding
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.)
Pending
Application number
JP2005117604A
Other languages
English (en)
Inventor
Hiroaki Sakaguchi
浩章 坂口
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.)
Sony Corp
Original Assignee
Sony Corp
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 Sony Corp filed Critical Sony Corp
Priority to JP2005117604A priority Critical patent/JP2006295853A/ja
Priority to US11/279,526 priority patent/US7253752B2/en
Priority to CN2006100754409A priority patent/CN1848692B/zh
Publication of JP2006295853A publication Critical patent/JP2006295853A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】 符号化における一致長とその一致長符号との関係を動的に変化させて、一致長符号により表現可能な長さを自立的に切り替える。
【解決手段】 データバッファ110におけるスライド窓を辞書として、文字列検索部130は入力データの部分文字列と一致する文字列を検索する。内部状態保持部140に保持された内部状態に対応して、一致長拡張テーブル150は一致長とその一致長符号との関係を保持している。一致長符号化部160は内部状態に基づいて一致長拡張テーブル150を参照して、一致長とその一致長符号との対応付けを動的に決定する。文字列符号化部170はスライド窓における相対位置と一致長符号により符号列を生成する。
【選択図】 図1

Description

本発明は、LZSS(Lempel-Ziv-Storer-Szymanski)符号に基づく符号化装置ならびに復号装置に関し、特に符号化における一致長とその符号との関係を動的に変化させる符号化装置、復号装置、および、これらにおける処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
LZSS符号は、辞書に基づいた符号化による符号の一つであり、可逆なデータ圧縮を提供するものである(例えば、非特許文献1参照。)。このLZSS符号による符号化では、符号化対象の入力データを固定長Mビットの記号(例えば、文字。以下では、文字として統一的に説明する。)として区切り、その文字を最小単位として扱う。データは1つの長い文字列であり、文字列中の一部の連続して並んだ文字を部分文字列として扱う。データ全体を複数の部分文字列へと分解し、部分文字列毎に符号CODEを割り当てる。各部分文字列に割り当てられる符号CODEには2種類あり、符号化済みデータQencにおいて一致する部分文字列を参照する符号PTRと文字そのものを対応させた符号RAWとがある。そして、PTRまたはRAWのどちらの符号であるかを示す1ビットの符号FLGが設けられる。符号FLGと符号CODEとが対になって1つの部分文字列の符号となる。
入力データの最初の文字から順番に各部分文字列の長さを確定していくことで各部分文字列の分解が徐々に進行する。分解された部分文字列は互いに重なる部分はなく、1つの部分文字列が分解されたとき、その部分文字列の末尾文字の直後に位置する文字が次の部分文字列の先頭文字となるように分解される。分解された部分文字列は次々と符号化される。分解される前には部分文字列の先頭文字Hのみが確定しており長さは未定であるが、次のような手順で分解されて長さが決定される。
まず、分解対象の部分文字列sの先頭文字Hと一致する文字を符号化済みのデータQencから探索する。この符号化済みデータQencは入力データの最初の文字から分解済み部分文字列の末尾文字までの入力データに等しい文字列である。符号化済みデータQencには予め決められた範囲Qewinが設定されており、分解対象の部分文字列sからの相対的な位置により範囲が決まる。符号化済みデータQencは範囲Qewin内にある文字のみが参照できるようになっている。この範囲Qewinは、スライド窓もしくはスライド辞書などと呼称される。
符号化済みデータQencの範囲Qewinを検索して先頭文字Hと一致する文字が1つ以上発見されたとき、その各文字を先頭文字とした部分文字列のすべてを比較対象として、分解対象の部分文字列sの長さを徐々に増やしては比較して一致するものがあるか探索する。そして、一致する最長の部分文字列が最長一致文字列mstrとなり、その長さが最長一致長mlenとなる。範囲Qewinは、分解対象の部分文字列sの先頭文字Hからの相対的な位置により特定される。この位置がNPビットで表されるとすると、範囲Qewinは最大で「2のNP乗」個の文字を格納できる。この範囲Qewinに格納可能な文字の上限値を以下ではNで表す。
LZSS符号の符号化の際は、最長一致長mlenと、ある閾値PTHとが比較されて、以下の要領で実現される。まず、「最長一致長mlenが閾値PTHより大きいとき」には、その最長一致長mlenが一致長符号で表現できる最大の長さlmax以下なら、一致長lenにmlenを設定する。一方、その最長一致長mlenがlmaxより大きければ、一致長lenにはlmaxを設定する。このようにして一致長lenが設定されると、Hを先頭として一致長lenの部分文字列sが分解されて、mstrの先頭文字mHの位置mposを示す番号をNPビットで表した符号pと、一致長lenをNCビットで表した符号cとを合わせた(NP+NC)ビットが符号PTRとなる。このとき、符号FLGは「0」を示す。
例えば、閾値PTHを「2」とすると、図43(a)のように、3文字の部分文字列「fgh」がデータバッファ110内のスライド窓111に存在することが探索された場合、一致長は「3」となる。また、この例ではスライド窓111における先頭文字「f」の相対位置が「4」であることから、符号PTRは、(4,3)となる。また、符号FLGは「0」となる。
これに対し、「最長一致長mlenが閾値PTH以下のとき」または「符号化済みデータに一致するものがないとき」には、部分文字列として先頭文字Hのみが分解され、先頭文字HがそのままMビットの符号RAWとなる。このとき、符号FLGは「1」を示す。
例えば、図43(b)のように、先頭文字「k」に一致する文字がスライド窓111に存在しない場合、その先頭文字「k」そのものが符号RAWとなる。また、符号FLGは「1」となる。
一方、LZSS符号の復号は、符号化時に生成された順番に入力符号の最初から最後まで符号に対応した全ての部分文字列を復号する。復号された部分文字列は復号済みデータQdecとしてQdecの末尾に連結されて、元のデータが1つの長い文字列として徐々に復号されていく。復号済みデータQdecは、符号化のときの符号化済みデータQencと同様に、復号時に復号対象の部分文字列sからの相対的な位置を示す番号で参照される。入力符号の各符号FLGが「0」か「1」かによって、それぞれに対応した符号CODEがPTRかRAWのどちらの符号であるかを判断する。符号RAWであるとき、符号CODEを1文字の部分文字列として復号済みデータQdecに連結される。符号PTRであるとき、符号pから一致部分文字列の先頭文字位置が復号され、符号cから一致長が復号されることにより、復号済みデータQdec内から部分文字列が特定される。そして、その部分文字列が先頭文字から一文字ずつ複製され、復号済みデータQdecに連結されて、符号CODEに対応した部分文字列が復号される。先頭から1文字ずつ複製して連結されることによって、一致文字列と復号対象の文字列に重なる部分があっても正しく復号される。一致長符号cはNCビットで表されるため、対応する一致長は(PTH+1)から((2のNC乗)+PTH)の値となる。
植松友彦著,「文書データ圧縮アルゴリズム入門」,CQ出版株式会社,1994年10月15日,p.131−148
このように、LZSS符号の符号PTRは、データバッファ上の位置mposを示す番号と一致部分文字列の長さlenに対応した符号からなる。長さlenを固定ビット長NCの符号に1対1で対応させることを考えると、NCが短いビット長であれば限られた少ない長さしか割り当てることができないが、NCが長いビット長であればそれだけ多くの長さを対応させることができる。その一方で、同じ情報を表すならば、なるべくビット長が短い方が圧縮の効果が高い。
符号化済みデータの検索範囲Qewinは、8000文字くらいが良いと一般的にいわれている(例えば、上述の非特許文献1参照。)。この検索範囲Qewinによって、位置mposのビット数NPが決定される。例えばこの範囲Qewinを4092文字とすれば、12ビットでちょうど表現できる。しかし、1000文字などの長い一致長に分解される部分文字列は頻出するわけではなく、むしろ短い部分文字列に分解される頻度の方が高い。それゆえ、位置mposと比べて長さlenのビット数は少なく設定されることが多く、検索範囲Qewinが4092文字のときに仮に1000文字の部分文字列を見つけることができたとしても、長さlenのビット数から制限された一致長の最大値の長さの部分文字列までしか分解できない。例えば、一致長符号が4ビットで、閾値PTHを2とすると、この一致長符号で表現できるのは「3」乃至「18」の16通りの長さとなる。したがって、最大一致長が1000文字であっても、結局、18文字ごとに分解して符号化することになる。
このような無駄を避けるための方法として、16通りのうちの1つの一致長符号に長さを拡張することを示すエスケープコードを割り当てて、エスケープコードを復号したときはさらに別の固定長ビットを読むようにして、段階的にビット長を増やす可変ビット長の符号を使うことも考えられる。しかし、それでも1000文字のような長い文字まで拡張するには、数個のエスケープコードで数段階の拡張をした符号になるため、やはりあまり短い符号を割り当てることができず、しかも処理が複雑になるという問題もある。
そこで、本発明は、符号化における一致長とその符号との関係を動的に変化させて、一致長符号により表現可能な長さを自立的に切り替えることを目的とする。
本発明は、上記課題を解決するためになされたものであり、その第1の側面は、入力データを保持するデータバッファの所定の検索範囲において上記入力データの符号化対象の部分記号列との一致を検索する検索手段と、所定の内部状態を保持する内部状態保持手段と、上記内部状態保持手段に保持された内部状態に従って上記検索手段において一致が検索された上記部分記号列の一致長に一致長符号を割り当てた後で当該一致長に応じて上記内部状態保持手段に保持された内部状態を更新する一致長符号化手段と、上記検索部において一致が検索された上記部分記号列の位置と上記一致長符号化手段によって割り当てられた上記一致長符号とに基づいて上記部分記号列を符号化する記号列符号化手段とを具備することを特徴とする符号化装置である。これにより、内部状態に従って割り当てられた一致長符号に基づいて部分記号列が符号化されるという作用をもたらす。
また、この第1の側面において、上記一致長符号化手段は、上記一致長符号が所定の閾値に満たない場合には上記内部状態保持手段に保持された内部状態を最も低い段階にリセットし、上記一致長符号がその最大値を示している場合には上記内部状態保持手段に保持された内部状態をより高い段階に遷移させ、上記一致長符号が上記閾値を満たしながら上記最大値に満たない場合には上記内部状態保持手段に保持された内部状態をより低い段階に遷移させるという内部状態の状態遷移を制御することができる。これにより、部分記号列の一致の状況に応じて内部状態を遷移させるという作用をもたらす。
また、この第1の側面において、上記一致長符号化手段は、上記一致長符号が所定の閾値に満たない場合には上記内部状態保持手段に保持された内部状態に依らず上記一致長ごとに定められた符号を上記一致長符号として割り当て、上記一致長符号が上記閾値を満たす場合には上記内部状態および上記一致長によって定められる符号を上記一致長符号として割り当てることができる。これにより、一致長符号と閾値との関係に応じて、一致長符号の決定の際に内部状態を考慮するか否かを決定させるという作用をもたらす。
また、この第1の側面において、上記内部状態保持手段に保持された上記内部状態に対応して上記一致長符号に割り当てるべき一致長をそれぞれ定める一致長拡張手段をさらに具備し、上記一致長符号化手段が、上記一致長符号が所定の閾値に満たない場合には上記内部状態保持手段に保持された内部状態に依らず上記一致長ごとに定められた符号を上記一致長符号として割り当て、上記一致長符号が上記閾値を満たす場合には上記一致長拡張手段に定められた符号を上記一致長符号として割り当てるようにすることができる。これにより、一致長符号に割り当てるべき一致長を内部状態に対応して定める一致長拡張手段を設け、一致長符号と閾値との関係に応じてこの一致長拡張手段を参照という作用をもたらす。
また、本発明の第2の側面は、符号列から復号された部分記号列を保持する復号バッファと、上記符号列を保持する符号バッファから上記部分記号列の位置と一致長符号とを含む部分記号列符号を取得する符号取得手段と、所定の内部状態を保持する内部状態保持手段と、上記内部状態保持手段に保持された内部状態に従って上記一致長符号に対応する部分記号列の長さを一致長として復号した後で当該一致長に応じて上記内部状態保持手段に保持された内部状態を更新する一致長復号手段と、上記部分記号列の位置および上記一致長に基づいて上記復号バッファを参照して上記部分記号列符号に対応する部分記号列を復号する記号列復号手段とを具備することを特徴とする復号装置である。これにより、内部状態に従って割り当てられた一致長符号に基づいて部分記号列が復号されるという作用をもたらす。
また、この第2の側面において、上記一致長復号手段は、上記一致長符号が所定の閾値に満たない場合には上記内部状態保持手段に保持された内部状態を最も低い段階にリセットし、上記一致長符号がその最大値を示している場合には上記内部状態保持手段に保持された内部状態をより高い段階に遷移させ、上記一致長符号が上記閾値を満たしながら上記最大値に満たない場合には上記内部状態保持手段に保持された内部状態をより低い段階に遷移させるという内部状態の状態遷移を制御することができる。これにより、部分記号列の一致の状況に応じて内部状態を遷移させるという作用をもたらす。
また、この第2の側面において、上記一致長復号手段は、上記一致長符号が所定の閾値に満たない場合には上記内部状態保持手段に保持された内部状態に依らず上記一致長符号ごとに定められた部分記号列の長さを一致長として復号し、上記一致長符号が上記閾値を満たす場合には上記内部状態および上記一致長符号によって定められる部分記号列の長さを一致長として復号することができる。これにより、一致長符号と閾値との関係に応じて、一致長符号の決定の際に内部状態を考慮するか否かを決定させるという作用をもたらす。
また、この第2の側面において、上記内部状態保持手段に保持された上記内部状態に対応して上記一致長符号に割り当てるべき一致長をそれぞれ定める一致長拡張手段をさらに具備し、上記一致長復号手段は、上記一致長符号が所定の閾値に満たない場合には上記内部状態保持手段に保持された内部状態に依らず上記一致長符号ごとに定められた部分記号列の長さを一致長として復号し、上記一致長符号が上記閾値を満たす場合には上記一致長拡張手段に定められた値を一致長として復号することができる。これにより、一致長符号に割り当てるべき一致長を内部状態に対応して定める一致長拡張手段を設け、一致長符号と閾値との関係に応じてこの一致長拡張手段を参照という作用をもたらす。
また、この第2の側面において、上記符号バッファに上記符号列を所定のブロックを単位として供給するよう制御する符号バッファ制御手段をさらに具備し、上記一致長復号手段が、上記ブロックを復号するたびに次に行うべき処理を記憶しておいて、前回記憶しておいた上記次に行うべき処理に従って次のブロックを復号するよう制御してもよい。これにより、小容量の符号バッファでも符号列をブロック毎に区切りながら復号させるという作用をもたらす。
また、本発明の第3の側面は、圧縮プログラムから伸張された部分記号列を保持する伸張プログラムバッファと、上記圧縮プログラムを保持する圧縮プログラムバッファから上記部分記号列の位置と一致長符号とを含む部分記号列符号を取得する符号取得手段と、所定の内部状態を保持する内部状態保持手段と、上記内部状態保持手段に保持された内部状態に従って上記一致長符号に対応する部分記号列の長さを一致長として復号した後で当該一致長に応じて上記内部状態保持手段に保持された内部状態を更新する一致長復号手段と、上記部分記号列の位置および上記一致長に基づいて上記伸張プログラムバッファを参照して上記部分記号列符号に対応する部分記号列を復号する記号列復号手段とを具備することを特徴とする圧縮プログラムの伸張装置である。これにより、内部状態に従って割り当てられた一致長符号に基づいて圧縮プログラム中の部分記号列が復号されるという作用をもたらす。
また、本発明の第4の側面は、入力データを保持するデータバッファの所定の検索範囲において上記入力データの符号化対象の部分記号列との一致を検索する手順と、所定の内部状態に従って上記一致が検索された上記部分記号列の一致長に一致長符号を割り当てる手順と、当該一致長に応じて上記内部状態を更新する手順と、上記部分記号列の上記データバッファにおける相対アドレスと上記一致長符号とに基づいて上記部分記号列を符号化する手順とを具備することを特徴とする符号化方法またはこれら手順をコンピュータに実行させるプログラムである。これにより、内部状態に従って割り当てられた一致長符号に基づいて部分記号列が符号化されるという作用をもたらす。
また、本発明の第5の側面は、符号バッファに保持された符号列を復号して、復号された部分記号列を復号バッファに保持させる復号方法において、上記符号バッファから上記部分記号列における相対アドレスと一致長符号とを含む部分記号列符号を取得する手順と、所定の内部状態に従って上記一致長符号に対応する部分記号列の長さを一致長として復号する手順と、上記復号された一致長に応じて上記内部状態を更新する手順と、上記部分記号列における相対アドレスおよび上記一致長に基づいて上記復号バッファを参照して上記部分記号列符号に対応する部分記号列を復号する手順とを具備することを特徴とする復号方法。またはこれら手順をコンピュータに実行させるプログラムである。これにより、内部状態に従って割り当てられた一致長符号に基づいて部分記号列が復号されるという作用をもたらす。
本発明によれば、符号化における一致長とその符号との関係を動的に変化させて、一致長符号により表現可能な長さを自立的に切り替えるという優れた効果を奏し得る。
次に本発明の実施の形態について図面を参照して詳細に説明する。
図1は、本発明の実施の形態における符号化装置100の一構成例を示す図である。この符号化装置100は、データバッファ110と、データバッファ制御部120と、文字列検索部130と、内部状態保持部140と、一致長拡張テーブル150と、一致長符号化部160と、文字列符号化部170とを備えている。
データバッファ110は、符号化対象である入力データを適宜保持するバッファである。このデータバッファ110に保持された入力データは、符号化された後もすぐには消去されず、検索のために符号化済みデータとして一時的に保持され続ける。この符号化済みデータの検索範囲は、スライド窓またはスライド辞書等と呼ばれる。
データバッファ制御部120は、符号化の進行状況に応じてデータバッファ110に関する制御を行うものである。具体的には、データバッファ制御部120は、データバッファ110に対する入力データの入力処理や符号化済みデータの出力処理、および、スライド窓の管理等を行う。
文字列検索部130は、データバッファ110におけるスライド窓の直後に位置する部分文字列について、その部分文字列と一致する文字列をスライド窓において検索するものである。この文字列検索部130によって一致する所定の長さ以上の文字列が検索された場合には、その文字列のスライド窓における位置およびその一致長が生成される。一方、部分文字列の先頭文字に一致する文字が検索されなかった場合や、検索された文字列が所定の長さに満たない場合には、スライド窓の直後に位置する先頭文字がそのまま供給される。
内部状態保持部140は、本発明の実施の形態における内部状態を保持するものである。この内部状態は、後述のように符号化の進行状況に応じて状態遷移するものであり、所定条件下において一致長とその符号との間の関係を定める一因となるものである。
一致長拡張テーブル150は、一致長とその符号との間の関係を、内部状態保持部140に保持された内部状態に応じて定めるものである。
一致長符号化部160は、文字列検索部130において生成された一致長に一致長符号を割り当てるものである。すなわち、一致長符号化部160は、一致長拡張テーブル150を参照して、内部状態保持部140に保持された内部状態に対応した一致長符号を割り当てる。但し、一致長符号が一定の閾値に満たない場合には、内部状態保持部140に保持された内部状態に依らずに、一致長に対応する一致長符号が割り当てられる。
文字列符号化部170は、部分文字列を符号化するものであり、文字列検索部130によって一致する所定の長さ以上の文字列が検索された場合には、その文字列のスライド窓における位置および一致長符号化部160に割り当てられた一致長符号をその文字列の符号として供給する。一方、部分文字列の先頭文字に一致する文字が検索されなかった場合や、検索された文字列が所定の長さに満たない場合には、スライド窓の直後に位置する先頭文字がその文字の符号としてそのまま供給される。
図2は、本発明の実施の形態における符号のデータ構造を示す図である。図2(a)のように、符号CODEには符号PTRおよび符号RAWの2種類の形式が存在する。符号PTRは、スライド窓において一致する文字列の先頭文字の位置pとその一致長符号cから成る。また、符号RAWは文字データそのものを示す。
符号FLGは、符号CODEが何れの形式であるかを示すものであり、ここでは符号FLGが"0"の場合に符号CODEが符号PTRであることを示し、符号FLGが"1"の場合に符号CODEが符号RAWであることを示している。
符号FLGのビット幅が1ビットで、符号CODEのビット幅が16ビットであると想定すると、これら符号FLGおよび符号CODEのメモリ上の配置は図2(b)のようにすることが考えられる。すなわち、16個の符号CODE#0乃至15のそれぞれに対応する16個の符号FLG#0乃至15をまとめて配置することにより、メモリの断片化を回避している。なお、この配置は一例に過ぎず、対応する符号FLGと符号CODEを隣合せに配置してもよく、また、例えば32個以上の符号FLGをまとめて配置するようにしてもよい。
図3は、本発明の実施の形態における内部状態の状態遷移の一例を示す図である。内部状態stateは、0からSMAXの「SMAX+1」個の状態をとり得る。内部状態stateは、符号化における一致長符号cに応じて状態が遷移する。
現在の内部状態stateをstとすると、1つ前の部分文字列の一致長符号cによって、内部状態stateを0、st−1、st+1、または、SMAXの何れかへと遷移させる。内部状態stateが大きくなるにつれ、一致長符号cにはより長い一致長が割り当てられていることを意味する。
一致長符号cは、0からCMAXの「CMAX+1」個の値をとり得る。ここで、一致長符号cにおいて、0≦CTH<CMAXを満たす閾値CTHを想定する。一致長符号cに対応する一致長は、0≦c≦CTHの場合は内部状態に依存しないL(c)により表される。これは、LZSS符号と同様の割当て方法である。一方、CTH<c≦CMAXの場合はそのときの内部状態に依存するL(c)[st]により表される。これは、実際に一致した長さが長い部分文字列の後には短い文字列を符号化することが多いことや、単純なデータでない限り短い文字列の頻度が多いと予想されることによるものである。
内部状態stateの初期状態は0であり、このとき一致長符号cはLZSS符号のように短い長さが割り当てられている。部分文字列が1つ符号化されたときの一致長が状態stにおける最大値のL(CMAX)[st]を示している場合、実際に一致した長さ(最長一致長mlen)より短い一致長に符号化されていると考えられる。そこで、この場合、L(CMAX)[st]を長くして次の処理でより長い一致長に対応できるように、内部状態stateを1つ大きい状態へ遷移させる。
また、一致長がL(CMAX)[st]より短く、L(CTH)[st]以上であれば、緩やかにL(CMAX)[st]を短くしていくように内部状態stateを1つ小さい状態へと遷移させる。
さらに、一致長がL(CTH)[st]より短いときは、長い部分文字列の頻度が少ないと考えられるため、直ちに初期状態の割り当てに戻すために内部状態stateを0へと遷移させる。また、RAW符号のとき一致長は0と解釈し、このときも直ちに内部状態stateを0へと遷移させる。
なお、以下の本発明の実施の形態においては、一致長符号cのビット幅NCを4ビット、位置pのビット幅NPを12ビット、一致長符号cの閾値CTHを13、一致長符号cの最大値CMAXを15、内部状態stateの最大値SMAXを3と想定して説明する。
図4は、本発明の実施の形態における一致長符号cと一致長lenとの関係の一例を示す図である。図4(a)に示すように、一致長符号cが0から13(CTH)の場合には内部状態に依存しない一定値(c+PTH+1)が割り当てられ、一致長符号cがCTHを超える14および15の場合には内部状態に依存した値が割り当てられている。ここで、PTHは一致長が短すぎる場合には一致長符号を割り当てないようにするために設けられた閾値であり、ここではPTH=2としている。従って、ここでは一致長が2以下の場合には、一致長符号が割り当てられず、符号RAWに文字そのものが割り当てられることになる。
図4(b)は、内部状態stateに対応して一致長lenを決定するためのL(c)[state]の値を定めるテーブルであり、図1における一致長拡張テーブル150に相当する。このテーブルにおける値は、任意のxおよびyについて以下の条件を満たせばよい。すなわち、「x>CTH」においてL(x)[y]は、「L(CTH)<L(x)[y]、かつ、L(x)[y]<L(x+1)[y]、かつ、L(x)[y]<L(x)[y+1]」の条件を満たす整数であればよい。つまり、xまたはyが増加するとL(x)[y]が長くなるように値が決められている必要がある。この図4の例では、内部状態が3の場合には、一致長符号c=15に対して最大で「1792」の一致長が割り当てられることになる。
図5は、本発明の実施の形態における復号装置200の一構成例を示す図である。この復号装置200は、符号バッファ210と、符号バッファ制御部220と、符号取得部230と、内部状態保持部240と、一致長拡張テーブル250と、一致長復号部260と、文字列復号部270と、復号バッファ280とを備える。
符号バッファ210は、復号対象である符号列を適宜保持するバッファである。この符号バッファ210に対して符号列を保持させるには、符号列全体を一括して保持させる方法と、所定のブロックに分割して保持させる方法とが考えられる。
符号バッファ制御部220は、復号の進行状況に応じて符号バッファ210に関する制御を行うものである。具体的には、符号バッファ制御部220は、符号列を一括して、もしくは分割して保持させる制御を行う。
符号取得部230は、符号バッファ210から所望の符号を取得して、符号FLGに応じて符号CODEを解釈するものである。すなわち、符号FLGが"0"を示す場合には符号PTRから位置pおよび一致長符号cを抽出し、符号FLGが"1"を示す場合には符号RAWから文字データを抽出する。
内部状態保持部240は、本発明の実施の形態における内部状態を保持するものであり、図1により説明した符号化装置100の内部状態保持部140と同様の働きを行う。また、一致長拡張テーブル250は、一致長とその符号との間の関係を、内部状態保持部140に保持された内部状態に応じて定めるものであり、図1により説明した符号化装置100の一致長拡張テーブル150と同様の働きを行う。
一致長復号部260は、符号取得部230において抽出された一致長符号からその一致長符号に対応する一致長を決定するものである。すなわち、一致長復号部260は、一致長拡張テーブル250を参照して、内部状態保持部240に保持された内部状態に対応した一致長に復号する。但し、一致長符号が一定の閾値に満たない場合には、内部状態保持部240に保持された内部状態に依らずに、一致長符号に対応する一致長に復号する。
文字列復号部270は、文字または文字列を復号して、復号された文字または文字列を復号バッファ280に保持させるものである。すなわち、符号PTRであれば符号取得部230から供給された位置および一致長復号部260から供給された一致長に基づいて復号バッファ280を参照して文字列を復号する。また、符号RAWであればその文字データにより文字を復号する。
復号バッファ280は、文字列復号部270によって復号された文字または文字列を保持するものである。この復号バッファ280に保持された文字列は、復号データとして出力されるとともに、文字列復号部270における復号に用いられる。
次に本発明の実施の形態における符号化装置100および復号装置200の動作について図面を参照して説明する。
図6は、以下の説明で用いられる本発明の実施の形態におけるデータバッファ110とスライド窓111との関係を示す図である。図6(a)に示すように、この例では、データバッファ110として「2N+FMAX+1」個の文字を格納する容量を有するものと想定する。ここで、Nはスライド窓111の最大容量であり、FMAXは一致長の最大値(L(CMAX)[SMAX])である。
図6(b)に示すように、スライド窓111は最初にデータバッファ110の先頭に配置される。このスライド窓111は、データバッファ110の有効領域の開始アドレスbstartから「r−1」の範囲として位置付けられる。ここで、変数rはスライド窓111の直後の先頭文字の位置である。
符号化処理が進むに従って、スライド窓111は右方向に移動していく。そして、図6(c)に示すように変数rが2N以上になると、スライド窓111は左方向にN個戻されて、図6(d)に示すように位置付けられる。以下、このような動作を前提として符号化について説明する。
図7は、本発明の実施の形態における符号化処理のメインフローを示す流れ図である。まず、符号化処理に用いられる変数が初期化され(ステップS710)、データバッファ110が初期化される(ステップS720)。そして、変数rがデータバッファ110の有効領域の終了アドレスbendよりも小さいことを条件として、以下の処理が繰り返される。
変数rにおける先頭文字を基準として、スライド窓111において一致する文字列が検索される(ステップS730)。これにより、実際に一致した長さ(最長一致長mlen)が閾値PTHより長ければ符号PTRに符号化され(ステップS750)、閾値PTH以下であれば符号RAWに符号化される(ステップS760)。符号RAWの符号化の場合には、これに先立って変数flgMの下位から変数flag_countビット目に"1"が設定される(ステップS702)。この変数flgMは、M個の符号FLGをLSB(Least Significant Bit)から順番に一つにまとめたMビットのデータである。また、変数flag_countは、符号FLGの個数を計数するカウンタである。
変数flag_countが「M−1」になると(ステップS703)、変数flgMにM個の符号FLGを設定し終わったことになるため、M個の符号FLGおよび符号CODEを出力する(ステップS770)。その後、次の処理のために変数flgMはリセットされる(ステップS704)。
そして、変数flag_countは1つ加算される(ステップS705)。このとき、Mによる剰余算が行われるため、加算により変数flag_countがMになった場合には、結果的にゼロにリセットされる。
また、データバッファ110の有効領域の開始アドレスbstartおよび変数rに、それぞれ最長一致長mlenに1を加えたものが加算される(ステップS706)。これにより、符号化済みとなった部分文字列の長さ分、スライド窓111が移動する。
そして、変数rが2N以上になると、図6(d)によって説明したようにスライド窓111が左方向にN個戻されて、データバッファ110が更新される(ステップS780)。
以上の処理を繰り返した後、変数flag_countが0でなければ未だ出力されていない符号が存在することになるため、残りの符号FLGおよび符号CODEを出力して(ステップS790)、符号化処理を終了する。
図8は、本発明の実施の形態における符号化処理変数の初期化処理の手順を示す流れ図である。この符号化処理変数の初期化処理は、図7の符号化処理におけるステップS710に相当するものである。
まず、符号FLGの個数を計数する変数flag_countおよびM個の符号FLGをまとめた変数flgMがそれぞれ0にリセットされる(ステップS711)。そして、部分文字列を検索する長さの最大値を表すFMAXに、この例における最大値であるL(15)[3]が設定される(ステップS712)。また、内部状態stateが0にリセットされる(ステップS713)。
そして、データバッファ110の有効領域の開始アドレスbstartが0にリセットされるとともに、スライド窓111の直後の先頭文字の位置を示す変数rに「N−L(15)[0]+1」が設定される(ステップS713)。図6(b)によって説明したようにスライド窓111は、この開始アドレスbstartから「r−1」の範囲として位置付けられる。
なお、これらの符号化処理変数の初期化処理において、ステップS712乃至S714は、本発明の実施の形態に特有の処理である。
図9は、本発明の実施の形態におけるデータバッファ110の初期化処理の手順を示す流れ図である。このデータバッファ初期化処理は、図7の符号化処理におけるステップS720に相当するものである。
まず、データバッファ110の有効領域の終了アドレスbendが0にリセットされる(ステップS721)。そして、この終了アドレスbendが変数r以上になるまで1つずつ加算されながら(ステップS723)、データバッファ110の各要素data_buffer[bend]に0が設定されていく(ステップS722)。
このようにして当初のスライド窓111に0が設定されると、データバッファ110の残りの部分に入力データが読み込まれる(ステップS729)。
図10は、本発明の実施の形態におけるデータ入力処理の手順を示す流れ図である。このデータ入力処理は、図9のデータバッファ初期化処理におけるステップS729および後述する図16のデータバッファ更新処理におけるステップS789に相当するものである。
このデータ入力処理では、終了アドレスbendがデータバッファ110の終端になるまで、すなわち「2N+FMAX」になるまで、1つずつ加算されながら(ステップS7298)、以下の処理が繰り返される。まず、入力データを1文字入力して(ステップS7291)、入力データの状況を示す変数data_statusがデータ終了の旨を示していなければ(ステップS7296)データバッファ110の要素data_buffer[bend]にその1文字のデータが設定される(ステップS7297)。
図11は、本発明の実施の形態における1文字入力処理の手順を示す流れ図である。この1文字入力処理は、図10のデータ入力処理におけるステップS7291に相当するものである。
まず、データバッファ110に入力データが残っているかチェックして(ステップS7292)、入力データがあればその入力データのMビット分を読み進めて、その値を変数dataに保持して(ステップS7293)、変数data_statusにデータ有効の旨を設定する(ステップS7294)。一方、入力データがなければ、変数data_statusにデータ終了の旨を設定する(ステップS7295)。
図12は、本発明の実施の形態における最長一致文字列検索処理の手順を示す流れ図である。この最長一致文字列検索処理は、図7の符号化処理におけるステップS730に相当するものである。
まず、変数rdにデータバッファ110の有効領域の終了アドレスbendと変数rの差分を求め(ステップS731)、変数rdの値がFMAX以上であれば変数ffにFMAXを設定し(ステップS734)、変数rdの値がFMAX未満であれば変数ffに変数rdの値を設定する(ステップS733)。すなわち、この変数ffには最長一致長の検索範囲が設定されることになる。
続いて、一致文字列の先頭位置を表す変数mposおよび最長一致長を表す変数mlenが0にリセットされる(ステップS735)。そして、変数iにスライド窓の境界を表す「r−1」が設定された後に(ステップS736)、変数iがデータバッファ110の有効領域の開始アドレスbstartより小さくなるまで1つずつ減算されながら(ステップS744)、以下の処理が繰り返される。
この繰返し処理において、data_buffer[i]とdata_buffer[r]が一致する場合には(ステップS737)、変数jに0が設定された後(ステップS738)、変数jが変数ff以上になるまで1つずつ加算されながら(ステップS743)、さらに次の処理が繰り返される。すなわち、data_buffer[i+j+1]とdata_buffer[r+j+1]が一致し(ステップS739)、かつ、変数jが最長一致長mlenよりも大きければ(ステップS741)新たな先頭位置として変数mposに変数iの値が設定され、新たな最長一致長として変数mlenに変数jの値が設定される(ステップS742)。
この最長一致文字列検索処理により、スライド窓においてスライド窓の直後の先頭文字と同じ文字があるかが検索され、あればその文字が先頭文字となる最長一致文字列が検索される。最長一致文字列が検索されると、「一致長−1」が変数mlenに、その文字のデータバッファにおける位置が変数mposにそれぞれ設定される。また、スライド窓にそのような文字が検索されないときは、変数mlenに0が設定された状態で次の処理に進むことになる。
図13は、本発明の実施の形態におけるPTR符号化処理の手順を示す流れ図である。このPTR符号化処理は、図7の符号化処理におけるステップS750に相当するものである。
後述するように、一致長符号決定処理(ステップS751)において、一致長符号cが決定され、また、内部状態stateの遷移が行われる。そして、変数rのNによる剰余算の結果が変数rNに設定され、変数mposのNによる剰余算の結果が変数posに設定される(ステップS753)。その結果、変数rNの値が変数posの値よりも大きければ(ステップS754)、変数rNの値から変数posの値を減算した値が変数pに設定される(ステップS755)。一方、変数rNの値が変数posの値以下であれば(ステップS754)、Nと変数rNの値とを加えた値から変数posの値を減算した値が変数pに設定される(ステップS756)。これにより、変数pにはスライド窓における一致文字列の先頭の相対位置が設定される。
このようにして得られた相対位置pの下位12ビットと一致長符号cの下位4ビットとを上位側から結合した計16ビットの値が配列CPTR[flag_count]に設定される(ステップS757)。この配列CPTR[flag_count]は変数flag_countに相当する符号PTRを保持する配列である。
図14は、本発明の実施の形態における一致長符号決定処理の手順を示す流れ図である。この一致長符号決定処理は、図13のPTR符号化処理におけるステップS751に相当するものである。
まず、一致長符号cに最長一致長mlenから閾値PTHを減算した値が設定される(ステップS7511)。これは、LZSS符号と同様の符号割当て方法であり、本発明の実施の形態においては、最長一致長mlenが「13+PTH」よりも小さい場合(ステップS7512)にこの符号割当てが採用される。この場合、内部状態stateは0に初期化される(ステップS7521)。また、本発明の実施の形態に特有な処理として、以下の処理が行われる。
最長一致長mlenが「13+PTH」以上で、かつ、「L(14)[state]」よりも小さい場合(ステップS7513)、最長一致長mlenが「13+PTH」に設定されるとともに、一致長符号cが13に決定される(ステップS7515)。この場合、内部状態stateが0より大きければ(ステップS7522)、1つ小さい値になるよう状態遷移が行われる(ステップS7523)。
最長一致長mlenが「L(14)[state]」以上で、かつ、「L(15)[state]」よりも小さい場合(ステップS7514)、最長一致長mlenが「L(14)[state]」に設定されるとともに、一致長符号cが14に決定される(ステップS7516)。この場合も、内部状態stateが0より大きければ(ステップS7522)、1つ小さい値になるよう状態遷移が行われる(ステップS7523)。
最長一致長mlenが「L(15)[state]」以上である場合(ステップS7514)、最長一致長mlenが「L(15)[state]」に設定されるとともに、一致長符号cが15に決定される(ステップS7517)。この場合、内部状態stateが最大値SMAXより小さければ(ステップS7524)、1つ大きい値になるよう状態遷移が行われる(ステップS7525)。
このようにして、一致長符号cが決定するとともに、内部状態stateの状態遷移が行われる。
図15は、本発明の実施の形態におけるRAW符号化処理の手順を示す流れ図である。このRAW符号化処理は、図7の符号化処理におけるステップS760に相当するものである。
ここでは、文字データそのものが利用されるため、スライド窓の直後の文字data_buffer[r]が配列CRAW[flag_count]に設定される(ステップS761)。この配列CRAW[flag_count]は変数flag_countに相当する符号RAWを保持する配列である。この場合、最長一致長mlenは0に設定される(ステップS762)。また、本発明の実施の形態に特有な処理として、内部状態stateが0に初期化される(ステップS763)。
図16は、本発明の実施の形態におけるデータバッファ更新処理の手順を示す流れ図である。このデータバッファ更新処理は、図7の符号化処理におけるステップS780に相当するものである。
ここでは、変数iが0に設定された上で(ステップS781)、「N+FMAX」以下である間、1つずつ加算されながら(ステップS783)、data_buffer[i]にdata_buffer[i+N]の値が繰り返し移動されていく(ステップS782)。そして、データバッファ110の有効領域の開始アドレスbstart、終了アドレスbend、および、変数rがそれぞれN減算される(ステップS784)。これにより、スライド窓111は左方向にN個戻されて、図6(d)に示すように位置付けられる。その後、図10により説明したデータ入力処理により、データバッファ110の残りの部分に入力データが読み込まれる(ステップS789)。
図17は、本発明の実施の形態における符号出力処理の手順を示す流れ図である。この符号出力処理は、図7の符号化処理におけるステップS770およびS790に相当するものである。
ここでは、最初に符号FLGが出力された後(ステップS791)、変数kが0に設定された上で(ステップS792)、Mより小さい間、1つずつ加算されながら(ステップS796)、以下の処理が繰り返し行われる。すなわち、flgMの下位からkビット目が"1"であれば(ステップS793)符号RAWが出力され(ステップS794)、"0"であれば符号PTRが出力される(ステップS795)。
図18は、本発明の実施の形態におけるFLG符号出力処理の手順を示す流れ図である。このFLG符号出力処理は、図17の符号出力処理におけるステップS791に相当するものである。ここでは、flgMの下位Mビットが出力先へ出力される(ステップS7911)。
図19は、本発明の実施の形態におけるRAW符号出力処理の手順を示す流れ図である。このRAW符号出力処理は、図17の符号出力処理におけるステップS794に相当するものである。ここでは、配列CRAW[k]の下位Mビットが出力先へ出力される(ステップS7941)。
図20は、本発明の実施の形態におけるPTR符号出力処理の手順を示す流れ図である。このPTR符号出力処理は、図17の符号出力処理におけるステップS795に相当するものである。
このPTR符号出力処理は、Mが8の場合と16の場合とで処理内容が以下のように異なる。Mが8の場合、配列CPTR[k]の下位Mビットが先に出力先に出力され(ステップS7951)、その後、配列CPTR[k]の下位2Mビットの上位Mビットが出力先に出力される(ステップS7952)。一方、Mが16の場合、配列CPTR[k]の下位Mビットが出力先に出力される(ステップS7953)。
以上のようにして入力データは符号列に符号化される。このようにして符号化された符号列を復号する際、符号列の全てを一度に復号する方法と、符号列におけるB個の文字をブロックとしてブロック毎に復号する方法とが考えられる。ここでは、最初に符号列の全てを一度に復号する一括復号処理について説明する。
図21は、本発明の実施の形態における一括復号処理のメインフローを示す流れ図である。符号列が符号バッファ210に転送された後(ステップS801)、符号に関する情報が初期化され(ステップS810)、復号のための変数が初期化される(ステップS820)。そして、復号すべき符号が終了するまで(ステップS830およびS802)、以下の処理が繰り返される。
符号FLG(変数flag)が取得され(ステップS840)、変数flagが"1"であれば、符号RAWを復号するために、Mビットの符号が取得された後で(ステップS850)符号RAWの復号処理が行われる(ステップS860)。一方、変数flagが"0"であれば、符号PTRを復号するために、符号PTRが取得された後で(ステップS880)符号PTRの復号処理が行われる(ステップS890)。なお、符号PTRの取得に先立って、復号すべき符号が終了いないか判定が行われる(ステップS870およびS804)。
図22は、本発明の実施の形態における符号情報初期化処理の手順を示す流れ図である。この符号情報初期化処理は、図21の一括復号処理におけるステップS810および図33の分割復号初期化処理におけるステップS910に相当するものである。
ここでは、処理済の符号文字数を計数する変数code_countが0にリセットされるとともに(ステップS811)、符号FLGの数を計数する変数flag_countが0にリセットされる(ステップS812)。また、変数code_lengthに復号すべき符号の全体の長さが設定される(ステップS813)。なお、ここにいう符号の長さは、Mビットからなる文字の符号列における文字数として表現される。
図23は、本発明の実施の形態における復号初期化処理の手順を示す流れ図である。この復号初期化処理は、図21の一括復号処理におけるステップS820および図33の分割復号初期化処理におけるステップS920に相当するものである。
ここでは、復号されたデータの格納先配列dstのアドレスが設定される(ステップS821)。そして、復号対象の先頭文字の位置を示す変数rが0に設定され(ステップS822)、また、内部状態stateが0に初期化される(ステップS823)。
図24は、本発明の実施の形態における符号終了判定処理の手順を示す流れ図である。この符号終了判定処理は、図21の一括復号処理におけるステップS830および図34の分割復号処理におけるステップS930に相当するものである。
ここでは、変数code_countと変数code_lengthが比較されて(ステップS831)、変数code_countが変数code_lengthよりも小さければ変数code_statusに符号が未だ有る旨が設定され(ステップS832)、変数code_countが変数code_length以上になると変数code_statusに符号が終了した旨が設定される(ステップS833)。すなわち、復号された符号の数を計数しておくことにより、復号処理の終了判定が行われる。
図25は、本発明の実施の形態におけるFLG符号取得処理の手順を示す流れ図である。このFLG符号取得処理は、図21の一括復号処理におけるステップS840および図34の分割復号処理におけるステップS940に相当するものである。
変数flag_countが0でなければ(ステップS841)、変数flagに変数flagMのLSBの値が設定され(ステップS842)、変数flagMはLSB方向に1ビットシフトされる(ステップS843)。また、変数flag_countは1つ減算される(ステップS844)。
変数flag_countが0であれば(ステップS841)、Mビットの符号(変数code)が取得された後(ステップS845)、その取得された変数codeが変数flagMに設定され(ステップS846)、変数flag_countに値Mが設定される(ステップS847)。
図26は、本発明の実施の形態におけるMBIT符号取得処理の手順を示す流れ図である。このMBIT符号取得処理は、図21の一括復号処理におけるステップS850および図25のFLG符号取得処理におけるステップS845に相当するものである。
ここでは、変数code_bufferの示す符号バッファの要素code_buffer[code_count]が変数codeに設定される(ステップS851)。そして、変数code_countが1つ加算される(ステップS852)。
図27は、本発明の実施の形態におけるRAW符号取得処理の手順を示す流れ図である。このRAW符号取得処理は、図21の一括復号処理におけるステップS860ならびに図38の選択復号処理におけるステップS9792およびS9782に相当するものである。
ここでは、変数codeの内容が格納先配列dst[r]に格納された後(ステップS861)、変数rが1つ加算される(ステップS862)。また、内部状態stateが0に初期化される(ステップS863)。
図28は、本発明の実施の形態におけるPTR符号取得処理の手順を示す流れ図である。このPTR符号取得処理は、図21の一括復号処理におけるステップS880に相当するものである。
このPTR符号取得処理は、Mが8の場合と16の場合とで処理内容が以下のように異なる。Mが8の場合、まず、変数code0にcode_buffer[code_count]の値が設定され(ステップS881)、変数code1にcode_buffer[code_count+1]の値が設定される(ステップS882)。また、code_countは2つ加算される(ステップS883)。そして、変数code1の下位Mビットと変数code0の下位Mビットとを上位側から並べて結合した計2Mビットが変数codeに設定される(ステップS884)。
一方、Mが16の場合、変数codeにcode_buffer[code_count]の値が設定され(ステップS885)、また、code_countは1つ加算される(ステップS886)。
図29は、本発明の実施の形態におけるPTR符号取得処理の手順を示す流れ図である。このPTR符号取得処理は、図21の一括復号処理におけるステップS890ならびに図38の選択復号処理におけるステップS9797およびS9787に相当するものである。
変数codeの上位12ビットが変数iに設定され(ステップS891)、変数codeの下位4ビットが変数jに設定される(ステップS892)。そして、一致長符号が復号され(ステップS893)、また、符号化されていた部分文字列が複製により復号される(ステップS895)。
図30は、本発明の実施の形態における一致長復号処理の手順を示す流れ図である。この一致長復号処理は、図29のPTR復号処理におけるステップS893に相当するものである。
まず、変数jの値(一致長符号に相当)に閾値PTHを加算した値が変数jに設定される(ステップS8931)。これにより、LZSS符号と同様の復号により変数jに「一致長−1」が設定される。本発明の実施の形態においては、一致長符号が13以下の場合にこの符号割当てが採用される。また、本発明の実施の形態に特有な処理として、以下の処理が行われる。
変数jの値が「15+PTH」の場合(ステップS8932)、変数jには「L(15)[state]」が設定される(ステップS8933)。この場合、内部状態stateが最大値より小さければ(ステップS8941)内部状態stateが1つ加算される(ステップS8942)。
変数jの値が「14+PTH」の場合(ステップS8934)、変数jには「L(14)[state]」が設定される(ステップS8935)。
また、変数jの値が「15+PTH」より小さい場合(ステップS8932)、変数jの値が「13+PTH」以上で、かつ、内部状態stateが0より大きければ(ステップS8943)内部状態stateから1つ減算され(ステップS8944)、それ以外であれば内部状態stateが0に初期化される(ステップS8945)。
このような一致長復号処理により、変数jに「一致長−1」が設定され、内部状態stateの状態遷移が行われる。
図31は、本発明の実施の形態における複製処理の手順を示す流れ図である。この複製処理は、図29のPTR復号処理におけるステップS895に相当するものである。
変数kには変数rから変数iを減算した値が設定され(ステップS8951)、変数endには変数kに変数jを加算した値が設定される(ステップS8952)。これにより、変数kには複製すべき部分文字列の先頭の位置が設定され、変数endには複製すべき部分文字列の末尾の位置が設定される。
そして、変数kおよび変数rがそれぞれ1つずつ加算されながら(ステップS8956)、変数kが変数endの値以下である間、配列dst[k]の値が配列dst[r]に複製される(ステップS8955)。但し、変数kの値が0であれば(ステップS8953)、配列dst[r]には0が設定される(ステップS8954)。
以上のようにして符号列は一括して復号される。次に、符号列におけるB個の文字をブロックとして、ブロック毎に復号する分割復号処理について説明する。
図32は、本発明の実施の形態における分割復号処理のメインフローを示す流れ図である。分割復号のための初期化処理が行われた後(ステップS901)、復号すべき符号が終了するまで(ステップS904)、繰り返しB個の符号が符号バッファ210に転送されて(ステップS903)、分割復号処理が行われる(ステップS970)。
図33は、本発明の実施の形態における分割復号初期化処理の手順を示す流れ図である。この分割復号初期化処理は、図32の分割復号のメインフローにおけるステップS901に相当するものである。
ここでは、図21の一括復号処理と同様に、符号に関する情報が初期化され(ステップS910)、復号のための変数が初期化される(ステップS920)。そして、次におこなうべき処理を保持する変数opに符号FLGの取得処理を意味する値OP_FLGが設定される(ステップS902)。
図34は、本発明の実施の形態における分割復号処理の手順を示す流れ図である。この分割復号処理は、図32の分割復号のメインフローにおけるステップS970に相当するものである。
ここでは、まずブロック符号情報の初期化が行われ(ステップS971)、復号状況を保持する変数decode_statusに復号途中である旨が設定される(ステップS972)。そして、符号バッファ210が空になるか(ステップS973およびS974)、復号すべき符号が終了するまで(ステップS930およびS975)、以下の処理が繰り返される。
変数opに値OP_FLGが設定されている場合(ステップS978)、符号FLG(変数flag)が取得されて(ステップS940)、変数flagが"1"であれば(ステップS987)変数opに値OP_RAWが設定され(ステップS988)、"0"であれば変数opに値OP_PTRが設定される(ステップS989)。
また、変数opに値OP_FLG以外が設定されている場合(ステップS978)、Mビットの符号が取得されて(ステップS950)、復号処理の進行状況に合わせて選択的に復号処理が行われる(ステップS979)。
復号すべき符号が終了すると(ステップS975)、変数decode_statusに復号完了の旨が設定され(ステップS976)、符号情報として復号処理済の符号文字数を計数する変数code_countが更新される(ステップS977)。
図35は、本発明の実施の形態におけるブロック符号情報初期化処理の手順を示す流れ図である。このブロック符号情報初期化処理は、図34の分割復号処理におけるステップS971に相当するものである。ここでは、符号バッファ210の読出し位置を示す変数code_offsetが0にリセットされる(ステップS9711)。
図36は、本発明の実施の形態におけるバッファ空判定処理の手順を示す流れ図である。このバッファ空判定処理は、図34の分割復号処理におけるステップS973に相当するものである。
ここでは、変数code_offsetがブロックサイズBよりも小さければ(ステップS9731)変数code_statusにデータが未だ有る旨が設定され(ステップS9732)、変数code_offsetがブロックサイズB以上であれば変数code_statusにデータが空である旨が設定される(ステップS9733)。
図37は、本発明の実施の形態におけるMBIT符号取得処理の手順を示す流れ図である。このMBIT符号取得処理は、図34の分割復号処理におけるステップS950に相当するものである。
ここでは、変数code_bufferの示す符号バッファの要素code_buffer[code_offset]が変数codeに設定される(ステップS951)。そして、変数code_offsetが1つ加算される(ステップS952)。
図38は、本発明の実施の形態における選択復号処理の手順を示す流れ図である。この選択復号処理は、図34の分割復号処理におけるステップS979に相当するものである。
この選択復号処理は、Mが8の場合と16の場合とで処理内容が以下のように異なる。すなわち、符号PTRはMによって2文字か1文字になるため、符号取得と復号の処理は、2文字のときはOP_PTRとOP_PTR2の2つの処理に分割され、1文字のときはOP_PTRのみで処理される。
Mが8の場合、変数opに値OP_RAWが設定されていれば(ステップS9791)、符号RAWの復号が行われた後に(ステップS9792)変数opに値OP_FLGが設定される(ステップS9793)。変数opに値OP_PTRが設定されていれば(ステップS9791)、変数code0に変数codeの下位Mビットが設定された後に(ステップS9794)変数opに値OP_PTR2が設定される(ステップS9795)。また、変数opに値OP_PTR2が設定されていれば(ステップS9791)、変数codeの下位Mビットと変数code0の下位Mビットとが上位側から結合された計2Mビットが変数codeに設定された後に(ステップS9796)、符号PTRの復号が行われ(ステップS9797)、変数opに値OP_FLGが設定される(ステップS9798)。
一方、Mが16の場合、変数opに値OP_RAWが設定されていれば(ステップS9782)、符号RAWの復号が行われた後に(ステップS9792)変数opに値OP_FLGが設定される(ステップS9783)。また、変数opに値OP_PTRが設定されていれば(ステップS9781)、符号PTRの復号が行われた後に(ステップS9787)、変数opに値OP_FLGが設定される(ステップS9788)。
図39は、本発明の実施の形態における符号情報更新処理の手順を示す流れ図である。この符号情報更新処理は、図34の分割復号処理におけるステップS977に相当するものである。ここでは、変数code_countに変数code_offsetの値が加算される(ステップS9771)。これにより、変数code_countには復号処理済の符号文字数が保持される。
以上のようにして、符号列はB個の文字をブロックとして、ブロック毎に復号される。なお、複数の符号バッファを設けて、それらを切り替えて利用するようにしてもよい。この場合には、次のブロックの読込みをしている間に前のブロックの復号処理を行うことができる。
次に本発明の実施の形態における符号化により達成される圧縮率の具体例について説明する。
図40は、本発明の実施の形態における部分文字列の圧縮率を示す図である。ここでは、符号CODEの内容毎に1つの部分文字列の圧縮率が2種類示されている。一方は一文字が8ビット(M=8)で閾値PTHが2(一致長符号"0"に一致長"3"を割り当てる)の場合であり、他方は一文字が16ビット(M=16)で閾値PTHが1(一致長符号"0"に一致長"2"を割り当てる)の場合である。
符号FLGの1ビットと符号CODEのビット数を合わせたものが1つの部分文字列の符号長である。その符号長を部分文字列の長さで割って求めているため、小さいほど効率がよいことを示す。従来法では「一致長−PTH−1」が15までしか表現できないため、最も良い圧縮率は、M=8で11.81%、M=16で6.25%でしかなかった。
そこで、本発明の実施の形態により一致長を長くすると、この例では、M=8で0.12%、M=16で0.06%にまで小さくすることができる。但し、長い一致長の文字列が元々存在しなければこの符号に割り当てることができないため、長い一致長の文字列が存在するような入力データである必要がある。
プログラムは命令コードと変数の初期値などのデータから構成されており、一般的に命令コードとデータは管理しやすいように分離されてメモリに配置されている。通常の場合、命令コードのすぐ後にデータが配置される。命令コードは命令1つが短い部分文字列と把握することができるため、短い最長一致文字列の頻度が多いことが予想される。またC言語などのコンパイラによって生成される命令コードはある程度テンプレート化されており、近似した処理は近似した命令コードとして生成される。それゆえ、似たような関数は命令コードもほとんど変わらないこともしばしばある。このような場合には長い一致文字列で分解できることが期待できる。
また、データについて、変数の初期値には0が多いことなどから、比較的長い一致文字列に分解できることが多い。このような特徴をもつプログラムには本発明の符号割り当てによって圧縮率を向上させることが期待できる。
図41は、本発明の実施の形態における部分文字列の最長一致長の分布例を示す図である。ここでは、相対位置NPを12ビット、一致長符号NCを11ビット、文字幅Mを8ビット、閾値PTHを2として、2000文字ほどの一致長でも分解できるようにして、あるプログラムをLZSS方式で分解したときの、それぞれの部分文字列の最長一致長を順番にプロットしたものである。すなわち、横方向にプログラムにおける部分文字列の出現順序、縦方向にその部分文字列の最長一致長を示している。
プログラムは189520バイトのサイズであり、52590個の部分文字列に分解されている。20文字以下の一致長がほとんどであるが、100文字を超えるものもあるのがわかる。特に、最後の部分にはデータ領域が配置されており、このデータ領域において長い一致長を示していることがわかる。
このプログラムをM=8、PTH=2、NC=4、NP=12で符号化したとき、従来のLZSS法による圧縮率は46.20%であるが、本発明による圧縮率は43.78%になる。このように、長い最長一致長で分解可能なプログラムにおいては、圧縮率の向上が実現できる。特に、単純なデータの繰り返しが非常に多い場合には圧縮率が20%以上改善されることも期待できる。
なお、ここで説明した符号のビット数の例として、NC=4、NP=12が選択された。これにより、符号PTRは16ビットとなる。符号FLGはMビットごとにパックされており、8ビットまたは16ビットである。符号RAWは文字そのままであり、これも8ビットまた16ビットである。このようにすべての符号が8の倍数になるように符号のビット数を決めておくと、余計なビット操作が不要になるため、ソフトウエア処理などに適している。本発明の実施の形態では、NC=4のままで、一致長符号cに対する一致長の割り当てだけを変更しているため、長い一致長で符号化可能であることに加え、符号を8の倍数のビット数単位で処理できるため、高速なソフトウエア処理が可能である。
図42は、コンピュータシステムによる圧縮プログラムの伸張処理への本発明の実施の形態の適用例を示す図である。このコンピュータシステムでは、プロセッサ310と、RAM320と、ROM330とがシステムバス340により相互に接続されていると想定する。
プロセッサ310はRAM320を作業領域としてプログラムの実行を行う。RAM320には高速大容量なSRAM等が用いられることが多く、一方、ROM330には比較的小容量なフラッシュメモリ等が用いられることが多い。
ROM330には圧縮されたプログラム(以下、プログラムAと呼ぶ。)が圧縮プログラムコード332として格納されているものとする。この圧縮プログラムコード332はRAM320の圧縮プログラムバッファ322に一旦転送される。RAM320には、プログラムAを伸張するためのプログラム(以下、プログラムXと呼ぶ。)が伸張処理用プログラム321として予め保持されているものとする。プロセッサ310は、プログラムXを実行することにより、圧縮プログラムバッファ322に保持されたプログラムAを伸張して、伸張プログラムバッファ323に格納する。
この伸張処理用プログラム321における伸張処理には、本発明の実施の形態による復号処理を適用することができる。すなわち、本発明の実施の形態により符号化されたプログラムAを保持する圧縮プログラムバッファ322を符号バッファ210として、伸張プログラムバッファ323を復号バッファ280とすれば、本発明の実施の形態に係る復号方法を実行する伸張処理用プログラム321(プログラムX)によってプログラムAを伸張することができる。
このように、プログラムをフラッシュメモリなどの外部メモリに保存しておいて、これを内部の高速なメモリに転送してからプロセッサで実行して起動する装置においては、外部メモリからの読出しにかかる処理が起動時間に支配的な影響を与える。そこで、外部メモリに圧縮された状態でプログラムを保存しておいて転送後に伸張すれば、より高速な処理が可能となる。この際、伸張処理に要する時間よりも、圧縮により短縮される時間の方が一般に長いことから、全体として起動時間が短縮されることが期待できる。また、ネットワーク配信などによりプログラムが転送されてから起動するような装置においても同様に通信時間が短縮でき、起動時間が短縮されることが期待できる。
以上説明したように、本発明の実施の形態によれば、内部状態保持部140および240に保持された内部状態に応じて一致長拡張テーブル150および250を参照することにより、一致長符号化部160および一致長復号部260で一致長とその一致長符号との対応付けを動的に決定して、一致長符号により表現可能な長さを自立的に切り替えることができる。
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
すなわち、請求項1において、検索手段は例えば文字列検索部130に対応する。また、内部状態保持手段は例えば内部状態保持部140に対応する。また、一致長符号化手段は例えば一致長符号化部160に対応する。また、記号列符号化手段は例えば文字列符号化部170に対応する。
また、請求項4において、一致長拡張手段は例えば一致長拡張テーブル150に対応する。
また、請求項5において、復号バッファは例えば復号バッファ280に対応する。また、符号取得手段は例えば符号取得部230に対応する。また、内部状態保持手段は例えば内部状態保持部240に対応する。また、一致長復号手段は例えば一致長復号部260に対応する。また、記号列復号手段は例えば文字列復号部270に対応する。
また、請求項8において、一致長拡張手段は例えば一致長拡張テーブル250に対応する。
また、請求項9において、符号バッファ制御手段は例えば符号バッファ制御部220に対応する。
また、請求項10において、伸張プログラムバッファは例えば伸張プログラムバッファ323に対応する。また、圧縮プログラムバッファは例えば圧縮プログラムバッファ322に対応する。また、符号取得手段は例えば符号取得部230に対応する。また、内部状態保持手段は例えば内部状態保持部240に対応する。また、一致長復号手段は例えば一致長復号部260に対応する。また、記号列復号手段は例えば文字列復号部270に対応する。
また、請求項11または13において、入力データを保持するデータバッファの所定の検索範囲において前記入力データの符号化対象の部分記号列との一致を検索する手順は例えばステップS730に対応する。また、所定の内部状態に従って一致が検索された部分記号列の一致長に一致長符号を割り当てる手順は例えばステップS7511乃至S7517に対応する。また、当該一致長に応じて内部状態を更新する手順は例えばステップS7521乃至S7525に対応する。また、部分記号列のデータバッファにおける相対アドレスと一致長符号とに基づいて部分記号列を符号化する手順は例えばステップS757に対応する。
また、請求項12または14において、符号バッファから部分記号列における相対アドレスと一致長符号とを含む部分記号列符号を取得する手順は例えばステップS880に対応する。また、所定の内部状態に従って一致長符号に対応する部分記号列の長さを一致長として復号する手順は例えばステップS8931乃至S8935に対応する。また、復号された一致長に応じて内部状態を更新する手順は例えばステップS8941乃至S8945に対応する。また、部分記号列における相対アドレスおよび一致長に基づいて復号バッファを参照して部分記号列符号に対応する部分記号列を復号する手順は例えばステップS895に対応する。
なお、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。
本発明の実施の形態における符号化装置100の一構成例を示す図である。 本発明の実施の形態における符号のデータ構造を示す図である。 本発明の実施の形態における内部状態の状態遷移の一例を示す図である。 本発明の実施の形態における一致長符号cと一致長lenとの関係の一例を示す図である。 本発明の実施の形態における復号装置200の一構成例を示す図である。 以下の説明で用いられる本発明の実施の形態におけるデータバッファ110とスライド窓111との関係を示す図である。 本発明の実施の形態における符号化処理のメインフローを示す流れ図である。 本発明の実施の形態における符号化処理変数の初期化処理の手順を示す流れ図である。 本発明の実施の形態におけるデータバッファ110の初期化処理の手順を示す流れ図である。 本発明の実施の形態におけるデータ入力処理の手順を示す流れ図である。 本発明の実施の形態における1文字入力処理の手順を示す流れ図である。 本発明の実施の形態における最長一致文字列検索処理の手順を示す流れ図である。 本発明の実施の形態におけるPTR符号化処理の手順を示す流れ図である。 本発明の実施の形態における一致長符号決定処理の手順を示す流れ図である。 本発明の実施の形態におけるRAW符号化処理の手順を示す流れ図である。 本発明の実施の形態におけるデータバッファ更新処理の手順を示す流れ図である。 本発明の実施の形態における符号出力処理の手順を示す流れ図である。 本発明の実施の形態におけるFLG符号出力処理の手順を示す流れ図である。 本発明の実施の形態におけるRAW符号出力処理の手順を示す流れ図である。 本発明の実施の形態におけるPTR符号出力処理の手順を示す流れ図である。 本発明の実施の形態における一括復号処理のメインフローを示す流れ図である。 本発明の実施の形態における符号情報初期化処理の手順を示す流れ図である。 本発明の実施の形態における復号初期化処理の手順を示す流れ図である。 本発明の実施の形態における符号終了判定処理の手順を示す流れ図である。 本発明の実施の形態におけるFLG符号取得処理の手順を示す流れ図である。 本発明の実施の形態におけるMBIT符号取得処理の手順を示す流れ図である。 本発明の実施の形態におけるRAW符号取得処理の手順を示す流れ図である。 本発明の実施の形態におけるPTR符号取得処理の手順を示す流れ図である。 本発明の実施の形態におけるPTR符号取得処理の手順を示す流れ図である。 本発明の実施の形態における一致長復号処理の手順を示す流れ図である。 本発明の実施の形態における複製処理の手順を示す流れ図である。 本発明の実施の形態における分割復号処理のメインフローを示す流れ図である。 本発明の実施の形態における分割復号初期化処理の手順を示す流れ図である。 本発明の実施の形態における分割復号処理の手順を示す流れ図である。 本発明の実施の形態におけるブロック符号情報初期化処理の手順を示す流れ図である。 本発明の実施の形態におけるバッファ空判定処理の手順を示す流れ図である。 本発明の実施の形態におけるMBIT符号取得処理の手順を示す流れ図である。 本発明の実施の形態における選択復号処理の手順を示す流れ図である。 本発明の実施の形態における符号情報更新処理の手順を示す流れ図である。 本発明の実施の形態における部分文字列の圧縮率を示す図である。 本発明の実施の形態における部分文字列の最長一致長の分布例を示す図である。 コンピュータシステムによる圧縮プログラムの伸張処理への本発明の実施の形態の適用例を示す図である。 LZSS符号による符号化の例を示す図である。
符号の説明
100 符号化装置
110 データバッファ
111 スライド窓
120 データバッファ制御部
130 文字列検索部
140 内部状態保持部
150 一致長拡張テーブル
160 一致長符号化部
170 文字列符号化部
200 復号装置
210 符号バッファ
220 符号バッファ制御部
230 符号取得部
240 内部状態保持部
250 一致長拡張テーブル
260 一致長復号部
270 文字列復号部
280 復号バッファ
310 プロセッサ
321 伸張処理用プログラム
322 圧縮プログラムバッファ
323 伸張プログラムバッファ
332 圧縮プログラムコード
340 システムバス

Claims (14)

  1. 入力データを保持するデータバッファの所定の検索範囲において前記入力データの符号化対象の部分記号列との一致を検索する検索手段と、
    所定の内部状態を保持する内部状態保持手段と、
    前記内部状態保持手段に保持された内部状態に従って前記検索手段において一致が検索された前記部分記号列の一致長に一致長符号を割り当てた後で当該一致長に応じて前記内部状態保持手段に保持された内部状態を更新する一致長符号化手段と、
    前記検索部において一致が検索された前記部分記号列の位置と前記一致長符号化手段によって割り当てられた前記一致長符号とに基づいて前記部分記号列を符号化する記号列符号化手段と
    を具備することを特徴とする符号化装置。
  2. 前記一致長符号化手段は、前記一致長符号が所定の閾値に満たない場合には前記内部状態保持手段に保持された内部状態を最も低い段階にリセットし、前記一致長符号がその最大値を示している場合には前記内部状態保持手段に保持された内部状態をより高い段階に遷移させ、前記一致長符号が前記閾値を満たしながら前記最大値に満たない場合には前記内部状態保持手段に保持された内部状態をより低い段階に遷移させることを特徴とする請求項1記載の符号化装置。
  3. 前記一致長符号化手段は、前記一致長符号が所定の閾値に満たない場合には前記内部状態保持手段に保持された内部状態に依らず前記一致長ごとに定められた符号を前記一致長符号として割り当て、前記一致長符号が前記閾値を満たす場合には前記内部状態および前記一致長によって定められる符号を前記一致長符号として割り当てることを特徴とする請求項1記載の符号化装置。
  4. 前記内部状態保持手段に保持された前記内部状態に対応して前記一致長符号に割り当てるべき一致長をそれぞれ定める一致長拡張手段をさらに具備し、
    前記一致長符号化手段は、前記一致長符号が所定の閾値に満たない場合には前記内部状態保持手段に保持された内部状態に依らず前記一致長ごとに定められた符号を前記一致長符号として割り当て、前記一致長符号が前記閾値を満たす場合には前記一致長拡張手段に定められた符号を前記一致長符号として割り当てることを特徴とする請求項1記載の符号化装置。
  5. 符号列から復号された部分記号列を保持する復号バッファと、
    前記符号列を保持する符号バッファから前記部分記号列の位置と一致長符号とを含む部分記号列符号を取得する符号取得手段と、
    所定の内部状態を保持する内部状態保持手段と、
    前記内部状態保持手段に保持された内部状態に従って前記一致長符号に対応する部分記号列の長さを一致長として復号した後で当該一致長に応じて前記内部状態保持手段に保持された内部状態を更新する一致長復号手段と、
    前記部分記号列の位置および前記一致長に基づいて前記復号バッファを参照して前記部分記号列符号に対応する部分記号列を復号する記号列復号手段と
    を具備することを特徴とする復号装置。
  6. 前記一致長復号手段は、前記一致長符号が所定の閾値に満たない場合には前記内部状態保持手段に保持された内部状態を最も低い段階にリセットし、前記一致長符号がその最大値を示している場合には前記内部状態保持手段に保持された内部状態をより高い段階に遷移させ、前記一致長符号が前記閾値を満たしながら前記最大値に満たない場合には前記内部状態保持手段に保持された内部状態をより低い段階に遷移させることを特徴とする請求項5記載の復号装置。
  7. 前記一致長復号手段は、前記一致長符号が所定の閾値に満たない場合には前記内部状態保持手段に保持された内部状態に依らず前記一致長符号ごとに定められた部分記号列の長さを一致長として復号し、前記一致長符号が前記閾値を満たす場合には前記内部状態および前記一致長符号によって定められる部分記号列の長さを一致長として復号することを特徴とする請求項5記載の復号装置。
  8. 前記内部状態保持手段に保持された前記内部状態に対応して前記一致長符号に割り当てるべき一致長をそれぞれ定める一致長拡張手段をさらに具備し、
    前記一致長復号手段は、前記一致長符号が所定の閾値に満たない場合には前記内部状態保持手段に保持された内部状態に依らず前記一致長符号ごとに定められた部分記号列の長さを一致長として復号し、前記一致長符号が前記閾値を満たす場合には前記一致長拡張手段に定められた値を一致長として復号することを特徴とする請求項5記載の復号装置。
  9. 前記符号バッファに前記符号列を所定のブロックを単位として供給するよう制御する符号バッファ制御手段をさらに具備し、
    前記一致長復号手段は、前記ブロックを復号するたびに次に行うべき処理を記憶しておいて、前回記憶しておいた前記次に行うべき処理に従って次のブロックを復号することを特徴とする請求項5記載の復号装置。
  10. 圧縮プログラムから伸張された部分記号列を保持する伸張プログラムバッファと、
    前記圧縮プログラムを保持する圧縮プログラムバッファから前記部分記号列の位置と一致長符号とを含む部分記号列符号を取得する符号取得手段と、
    所定の内部状態を保持する内部状態保持手段と、
    前記内部状態保持手段に保持された内部状態に従って前記一致長符号に対応する部分記号列の長さを一致長として復号した後で当該一致長に応じて前記内部状態保持手段に保持された内部状態を更新する一致長復号手段と、
    前記部分記号列の位置および前記一致長に基づいて前記伸張プログラムバッファを参照して前記部分記号列符号に対応する部分記号列を復号する記号列復号手段と
    を具備することを特徴とする圧縮プログラムの伸張装置。
  11. 入力データを保持するデータバッファの所定の検索範囲において前記入力データの符号化対象の部分記号列との一致を検索する手順と、
    所定の内部状態に従って前記一致が検索された前記部分記号列の一致長に一致長符号を割り当てる手順と、
    当該一致長に応じて前記内部状態を更新する手順と、
    前記部分記号列の前記データバッファにおける相対アドレスと前記一致長符号とに基づいて前記部分記号列を符号化する手順と
    を具備することを特徴とする符号化方法。
  12. 符号バッファに保持された符号列を復号して、復号された部分記号列を復号バッファに保持させる復号方法において、
    前記符号バッファから前記部分記号列における相対アドレスと一致長符号とを含む部分記号列符号を取得する手順と、
    所定の内部状態に従って前記一致長符号に対応する部分記号列の長さを一致長として復号する手順と、
    前記復号された一致長に応じて前記内部状態を更新する手順と、
    前記部分記号列における相対アドレスおよび前記一致長に基づいて前記復号バッファを参照して前記部分記号列符号に対応する部分記号列を復号する手順と
    を具備することを特徴とする復号方法。
  13. 入力データを保持するデータバッファの所定の検索範囲において前記入力データの符号化対象の部分記号列との一致を検索する手順と、
    所定の内部状態に従って前記一致が検索された前記部分記号列の一致長に一致長符号を割り当てる手順と、
    当該一致長に応じて前記内部状態を更新する手順と、
    前記部分記号列の前記データバッファにおける相対アドレスと前記一致長符号とに基づいて前記部分記号列を符号化する手順と
    をコンピュータに実行させることを特徴とするプログラム。
  14. 符号バッファに保持された符号列を復号して、復号された部分記号列を復号バッファに保持させるプログラムであって、
    前記符号バッファから前記部分記号列における相対アドレスと一致長符号とを含む部分記号列符号を取得する手順と、
    所定の内部状態に従って前記一致長符号に対応する部分記号列の長さを一致長として復号する手順と、
    前記復号された一致長に応じて前記内部状態を更新する手順と、
    前記部分記号列における相対アドレスおよび前記一致長に基づいて前記復号バッファを参照して前記部分記号列符号に対応する部分記号列を復号する手順と
    をコンピュータに実行させることを特徴とするプログラム。
JP2005117604A 2005-04-14 2005-04-14 符号化装置、復号装置、および、符号化方法ならびに復号方法 Pending JP2006295853A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2005117604A JP2006295853A (ja) 2005-04-14 2005-04-14 符号化装置、復号装置、および、符号化方法ならびに復号方法
US11/279,526 US7253752B2 (en) 2005-04-14 2006-04-12 Coding apparatus, decoding apparatus, coding method, decoding method and program
CN2006100754409A CN1848692B (zh) 2005-04-14 2006-04-14 编码设备、解码设备、编码方法和解码方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005117604A JP2006295853A (ja) 2005-04-14 2005-04-14 符号化装置、復号装置、および、符号化方法ならびに復号方法

Publications (1)

Publication Number Publication Date
JP2006295853A true JP2006295853A (ja) 2006-10-26

Family

ID=37078087

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005117604A Pending JP2006295853A (ja) 2005-04-14 2005-04-14 符号化装置、復号装置、および、符号化方法ならびに復号方法

Country Status (3)

Country Link
US (1) US7253752B2 (ja)
JP (1) JP2006295853A (ja)
CN (1) CN1848692B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009095956A1 (ja) * 2008-01-31 2009-08-06 Fujitsu Limited データ圧縮・復元方法及び圧縮・復元プログラム

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012069886A1 (en) * 2010-11-26 2012-05-31 Nokia Corporation Coding of strings
KR102470831B1 (ko) 2014-10-01 2022-11-28 주식회사 케이티 비디오 신호 처리 방법 및 장치
US9564917B1 (en) * 2015-12-18 2017-02-07 Intel Corporation Instruction and logic for accelerated compressed data decoding
CN107066116B (zh) * 2017-04-13 2021-07-30 海信视像科技股份有限公司 字符串生成方法、字符解析方法及装置
CN109428603A (zh) * 2017-08-30 2019-03-05 前海中科芯片控股(深圳)有限公司 一种数据编码方法、装置以及存储介质
CN110868222B (zh) * 2019-11-29 2023-12-15 中国人民解放军战略支援部队信息工程大学 Lzss压缩数据误码检测方法及装置
CN114138279B (zh) * 2021-11-30 2024-10-18 上海安势信息技术有限公司 一种代码片段的指纹特征生成方法及匹配方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05134847A (ja) * 1991-11-14 1993-06-01 Fujitsu Ltd データ圧縮方法
JPH05197519A (ja) * 1991-06-12 1993-08-06 Sony Corp データ圧縮方法及び装置
JPH07261977A (ja) * 1994-03-16 1995-10-13 Fujitsu Ltd データ圧縮方法および装置ならびにデータ復元方法および装置
JPH0946235A (ja) * 1994-10-04 1997-02-14 Nec Corp データ圧縮装置
JPH0964753A (ja) * 1995-08-29 1997-03-07 Casio Comput Co Ltd データ圧縮装置、及びデータ伸長装置
JPH09153818A (ja) * 1995-09-29 1997-06-10 Kyocera Corp データ圧縮・伸長装置
JP2000124810A (ja) * 1998-08-13 2000-04-28 Fujitsu Ltd 符号化装置及び復号化装置
JP2000188692A (ja) * 1998-12-22 2000-07-04 Toshiba Corp データ処理方法
JP2004120251A (ja) * 2002-09-25 2004-04-15 Kawasaki Microelectronics Kk データ圧縮方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2077271C (en) * 1991-12-13 1998-07-28 David J. Craft Method and apparatus for compressing data
US5564045A (en) * 1994-07-28 1996-10-08 Motorola, Inc. Method and apparatus for string searching in a linked list data structure using a termination node at the end of the linked list
JP3889762B2 (ja) * 2002-12-26 2007-03-07 富士通株式会社 データ圧縮方法、プログラム及び装置
US7609722B2 (en) * 2003-02-14 2009-10-27 Atheros Communications, Inc. Method and apparatus for transmitting and receiving compressed frame of data over a wireless channel

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05197519A (ja) * 1991-06-12 1993-08-06 Sony Corp データ圧縮方法及び装置
JPH05134847A (ja) * 1991-11-14 1993-06-01 Fujitsu Ltd データ圧縮方法
JPH07261977A (ja) * 1994-03-16 1995-10-13 Fujitsu Ltd データ圧縮方法および装置ならびにデータ復元方法および装置
JPH0946235A (ja) * 1994-10-04 1997-02-14 Nec Corp データ圧縮装置
JPH0964753A (ja) * 1995-08-29 1997-03-07 Casio Comput Co Ltd データ圧縮装置、及びデータ伸長装置
JPH09153818A (ja) * 1995-09-29 1997-06-10 Kyocera Corp データ圧縮・伸長装置
JP2000124810A (ja) * 1998-08-13 2000-04-28 Fujitsu Ltd 符号化装置及び復号化装置
JP2000188692A (ja) * 1998-12-22 2000-07-04 Toshiba Corp データ処理方法
JP2004120251A (ja) * 2002-09-25 2004-04-15 Kawasaki Microelectronics Kk データ圧縮方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6010000879, 植松友彦, 文書データ圧縮アルゴリズム入門, 19941015, p.131−154, JP, CQ出版株式会社 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009095956A1 (ja) * 2008-01-31 2009-08-06 Fujitsu Limited データ圧縮・復元方法及び圧縮・復元プログラム
GB2469955A (en) * 2008-01-31 2010-11-03 Fujitsu Ltd Data compression/decompression method,and compression/decompression program
JP4814999B2 (ja) * 2008-01-31 2011-11-16 富士通株式会社 データ圧縮・復元方法及び圧縮・復元プログラム
US8164490B2 (en) 2008-01-31 2012-04-24 Fujitsu Limited Data compression/decompression method and computer readable storage medium storing compression/decompression program
GB2469955B (en) * 2008-01-31 2012-09-12 Fujitsu Ltd Data compression/decompression method,and compression/decompression program

Also Published As

Publication number Publication date
US7253752B2 (en) 2007-08-07
CN1848692A (zh) 2006-10-18
CN1848692B (zh) 2012-07-18
US20070146173A1 (en) 2007-06-28

Similar Documents

Publication Publication Date Title
KR100527891B1 (ko) 허프만 디코딩을 수행하는 방법
JP6009676B2 (ja) データ圧縮装置およびデータ伸張装置
CN1848692B (zh) 编码设备、解码设备、编码方法和解码方法
JPH0869370A (ja) データ圧縮方法およびシステム
JP6679874B2 (ja) 符号化プログラム、符号化装置、符号化方法、復号化プログラム、復号化装置および復号化方法
JPH09505707A (ja) データ圧縮
US7375660B1 (en) Huffman decoding method
JP2019036810A (ja) データ圧縮装置、データ復元装置、データ圧縮プログラム、データ復元プログラム、データ圧縮方法、およびデータ復元方法
US6834283B1 (en) Data compression/decompression apparatus using additional code and method thereof
US20210288662A1 (en) Compression device, decompression device, and method
JP2006092725A (ja) 圧縮システム及び方法
JP3256121B2 (ja) データ符号化装置およびデータ復号装置およびその方法
JP2007043595A (ja) 可変長符号復号化方法および装置ならびにデータ伸長装置
JP4309344B2 (ja) 送信ノイズに関連したデジタルデータ圧縮ロバスト
WO2021173874A1 (en) System and method for data compression
CN111384962B (zh) 数据压缩解压装置和数据压缩方法
JP4953145B2 (ja) 文字列データ圧縮装置及びその方法並びに文字列データ復元装置及びその方法
JP7584579B2 (ja) 受信したデータを処理する装置
JP2016134808A (ja) データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置
US12019921B2 (en) Apparatus for processing received data
CN111384963A (zh) 数据压缩解压装置和数据解压方法
JP4049137B2 (ja) 半静的エントロピー符号化システム、半静的エントロピー復号化システム、半静的エントロピー符号化方法および半静的エントロピー復号化方法
JP2004013680A (ja) 文字コード圧縮・復元装置および同方法
JP2005175926A (ja) 復号装置及び方法
CN111384964A (zh) 数据压缩解压装置和数据压缩方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080129

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100119

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100218

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100427