JP2008227949A - データ処理装置、データ処理方法、プログラム、及びデータ構造 - Google Patents

データ処理装置、データ処理方法、プログラム、及びデータ構造 Download PDF

Info

Publication number
JP2008227949A
JP2008227949A JP2007063863A JP2007063863A JP2008227949A JP 2008227949 A JP2008227949 A JP 2008227949A JP 2007063863 A JP2007063863 A JP 2007063863A JP 2007063863 A JP2007063863 A JP 2007063863A JP 2008227949 A JP2008227949 A JP 2008227949A
Authority
JP
Japan
Prior art keywords
code
symbol
byte code
value
byte
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.)
Withdrawn
Application number
JP2007063863A
Other languages
English (en)
Inventor
Akihiko Izumi
昭彦 泉
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 JP2007063863A priority Critical patent/JP2008227949A/ja
Publication of JP2008227949A publication Critical patent/JP2008227949A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】圧縮データを、元のデータに、高速に伸張する。
【解決手段】出現頻度算出部122は、圧縮の対象データを、2バイト単位で、符号化の対象であるシンボルとして、シンボル値の出現頻度を算出し、符号化部126は、出現頻度が上位のシンボル値を1バイト符号に、出現頻度が次に上位のシンボル値を2バイト符号に、残りのシンボル値を3バイト符号に、シンボル値0x0000の2個の連続を1バイトの特定値0xFFに、それぞれ符号化する符号化処理を行う。本発明は、例えば、コンピュータが実行可能なプログラムを圧縮し、伸張する場合に適用できる。
【選択図】図5

Description

本発明は、データ処理装置、データ処理方法、プログラム、及びデータ構造に関し、特に、例えば、データを圧縮した圧縮データを、元のデータに、高速に伸張することができるようにするデータ処理装置、データ処理方法、プログラム、及びデータ構造に関する。
データを圧縮する圧縮方法としては、種々の方法が知られている。広く普及している汎用の圧縮方法としては、例えば、zip形式やlzh形式に圧縮する方法がある。
また、データを圧縮した圧縮データを元のデータに伸張するのに要する処理時間を短縮する圧縮方法も提案されている(例えば、特許文献1や2を参照)。
特開2002-353818号公報 特表2004-507145号公報
従来の汎用的な圧縮方法では、ハフマン符号化を代表とする可変長符号化を利用していることが多い。
一般に、可変長符号化を利用して得られる圧縮データの伸張、展開、又は解凍と呼ばれる処理(伸張処理)では、圧縮データを、ビット単位で処理する、ビットシフトその他のビット演算が中心となる。そして、ビット演算は、コンピュータ(CPU(Central Processing Unit))のアーキテクチャにもよるが、負荷が大きい演算であるため、ビット演算に起因して、伸張処理に、時間を要することになる。
そして、伸張処理に時間を要することは、例えば、ユーザに煩わしさを感じさせることになる。
すなわち、電気製品の、いわゆるソフトウェア化が進み、例えば、テレビジョン放送を受信するテレビジョン受像機(以下、適宜、TV(Televison)という)等の電気製品は、CPUを内蔵し、そのCPUがプログラムを実行することにより、ユーザの操作に応じて各種の処理を行う起動状態となる。
このようなTVでは、CPUが実行するプログラムが、例えば、不揮発性メモリに記憶されているが、不揮発性メモリの記憶容量の節約のために、プログラムは、圧縮されて、不揮発性メモリに記憶される。
そして、TVの電源がオンにされると、CPUが、不揮発性メモリに記憶されたプログラムを伸張し、その結果得られるプログラムを実行することで、TVは起動状態となる。
したがって、不揮発性メモリに記憶されたプログラムの伸張に時間を要すると、TVが、電源がオンにされてから起動状態となるまでの時間である起動時間が長くなり、ユーザに煩わしさを感じさせることになる。
本発明は、このような状況に鑑みてなされたものであり、データを圧縮した圧縮データを、元のデータに、高速に伸張することができるようにするものである。
本発明の第1の側面のデータ処理装置、又は、プログラムは、データを圧縮して圧縮データを出力するデータ処理装置、又は、データ処理装置として、コンピュータを機能させるプログラムであり、データ処理装置は、圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出する出現頻度算出手段と、前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する符号化処理を行う符号化手段とを備える。
本発明の第1の側面のデータ処理方法は、データを圧縮して圧縮データを出力するデータ処理方法であり、圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する符号化処理を行うステップを含む。
以上のような第1の側面においては、圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとして、前記シンボルの値であるシンボル値の出現頻度が算出される。そして、前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する符号化処理が行われる。
本発明の第2の側面のデータ処理装置、又は、プログラムは、データを圧縮して得られる圧縮データを伸張するデータ処理装置、又は、データ処理装置として、コンピュータを機能させるプログラムであり、前記圧縮データは、圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化することにより得られる、符号値の系列を含み、データ処理装置は、前記符号値の系列のうちの、前記1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、2バイトのシンボル値に復号し、前記符号値の系列のうちの前記特定値を、値0x0000の2個の連続に復号する復号処理を行う復号手段を備える。
本発明の第2の側面のデータ処理方法は、データを圧縮して得られる圧縮データを伸張するデータ処理方法であり、前記圧縮データは、圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化することにより得られる、符号値の系列を含み、前記符号値の系列のうちの、前記1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、2バイトのシンボル値に復号し、前記符号値の系列のうちの前記特定値を、値0x0000の2個の連続に復号する復号処理を行うステップを含む。
以上のような第2の側面においては、前記圧縮データに含まれる前記符号値の系列のうちの、前記1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、2バイトのシンボル値に復号し、前記符号値の系列のうちの前記特定値を、値0x0000の2個の連続に復号する復号処理が行われる。
本発明の第3の側面のデータ構造は、データを圧縮して得られる圧縮データのデータ構造であり、前記圧縮データは、圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値を符号化した符号を含むデータであり、前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化した符号値と、前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化した符号値と、前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化した符号値と、前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化した、前記特定値である符号値とを含む。
第3の側面のデータ構造においては、前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化した符号値と、前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化した符号値と、前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化した符号値と、前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化した、前記特定値である符号値とが含まれる。
なお、プログラムは、伝送媒体を介して伝送し、又は、記録媒体に記録して配布することができる。
また、データ処理装置は、独立した装置であっても良いし、1つの装置を構成している内部ブロックであっても良い。
本発明の第1ないし第3の側面によれば、データを圧縮した圧縮データを、元のデータに、高速に伸張することができる。
以下に本発明の実施の形態を説明するが、本発明の構成要件と、明細書又は図面に記載の実施の形態との対応関係を例示すると、次のようになる。この記載は、本発明をサポートする実施の形態が、明細書又は図面に記載されていることを確認するためのものである。従って、明細書又は図面中には記載されているが、本発明の構成要件に対応する実施の形態として、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その構成要件に対応するものではないことを意味するものではない。逆に、実施の形態が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
本発明の第1の側面のデータ処理装置、又は、プログラムは、データを圧縮して圧縮データを出力するデータ処理装置(例えば、図5の圧縮装置101)、又は、データ処理装置として、コンピュータ(例えば、図17のCPU12)を機能させるプログラムであり、データ処理装置は、圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出する出現頻度算出手段(例えば、図5の出現頻度算出部122)と、
前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
符号化処理を行う符号化手段(例えば、図5の符号化部126)と
を備える。
前記1バイト符号の256個の符号値のうちの、前記特定値と、前記3バイト符号の符号値のプリフィクスとなる1バイトの値とを除く254個の符号値の中で、出現頻度が上位のシンボル値を割り当てる符号値の数である1バイト符号数を、X個とする場合において、
前記符号化手段には、
2バイトのシンボル値である65536個のシンボル値のうちの、出現頻度が上位X番目までの各シンボル値を、前記1バイト符号に符号化させ、
前記65536個のシンボル値のうちの、出現頻度が、次に上位の(254-X)×256個の各シンボル値を、前記2バイト符号に符号化させ、
残りの65536-X-(254-X)×256個の各シンボル値を、前記3バイト符号に符号化させることができ、
第1の側面のデータ処理装置には、
前記1バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和から、前記3バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和を減算した減算値を最大にするXを、前記1バイト符号数として算出する1バイト符号数算出手段(例えば、図5の1バイト符号数算出部123)をさらに設けることができる。
また、第1の側面のデータ処理装置には、
出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる前記1バイト符号のX個の符号値とを対応付ける1バイト符号対応表を作成する1バイト符号対応表作成手段(例えば、図5の1バイト符号対応表作成部124)と、
出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる前記2バイト符号の(254-X)×256個の符号値とを対応付ける2バイト符号対応表を作成する2バイト符号対応表作成手段(例えば、図5の2バイト符号対応表作成部125)と
をさらに設けることができ、
前記符号化手段には、
前記1バイト符号対応表において前記1バイト符号の符号値に対応付けられているシンボル値を、そのシンボル値に対応付けられている符号値に符号化させ、
前記2バイト符号対応表において前記2バイト符号の符号値に対応付けられているシンボル値を、そのシンボル値に対応付けられている符号値に符号化させることができる。
第1の側面のデータ処理装置には、
前記1バイト符号数Xと、前記1バイト符号対応表を作成するのに必要な1バイト符号情報と、前記2バイト符号対応表を作成するのに必要な2バイト符号情報とを含むヘッダ情報を生成するヘッダ生成手段(例えば、図5のヘッダ生成部127)と、
前記ヘッダ情報と、前記対象データをシンボル単位で符号化した符号値の系列とからなる前記圧縮データを生成する圧縮データ生成手段(例えば、図5の圧縮データ生成部129)と
をさらに設けることができる。
本発明の第1の側面のデータ処理方法は、
データを圧縮して圧縮データを出力するデータ処理方法であり、
圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し(例えば、図7のステップS101)、
前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
符号化処理を行う(例えば、図7のステップS106)ステップを含む。
本発明の第2の側面のデータ処理装置、又は、プログラムは、
データを圧縮して得られる圧縮データを伸張するデータ処理装置(例えば、図13の伸張装置103)、又は、データ処理装置として、コンピュータを機能させるプログラムであり、
前記圧縮データは、
圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
ことにより得られる、符号値の系列を含み、
データ処理装置は、
前記符号値の系列のうちの、前記1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、2バイトのシンボル値に復号し、
前記符号値の系列のうちの前記特定値を、値0x0000の2個の連続に復号する
復号処理を行う復号手段(例えば、図13の復号部205)を備える。
前記1バイト符号の256個の符号値のうちの、前記特定値と、前記3バイト符号の符号値のプリフィクスとなる1バイトの値とを除く254個の符号値の中で、出現頻度が上位のシンボル値を割り当てる符号値の数である1バイト符号数を、X個として、
2バイトのシンボル値である65536個のシンボル値のうちの、出現頻度が上位X番目までの各シンボル値が、前記1バイト符号に符号化され、
前記65536個のシンボル値のうちの、出現頻度が、次に上位の(254-X)×256個の各シンボル値が、前記2バイト符号に符号化され、
残りの65536-X-(254-X)×256個の各シンボル値が、前記3バイト符号に符号化されており、
前記1バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和から、前記3バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和を減算した減算値を最大にするXが、前記1バイト符号数とされている場合において、
前記圧縮データが、
1バイト符号数Xと、
出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる前記1バイト符号のX個の符号値とを対応付ける1バイト符号対応表を作成するのに必要な1バイト符号情報と、
出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる前記2バイト符号の(254-X)×256個の符号値とを対応付ける2バイト符号対応表を作成するのに必要な2バイト符号情報と
をさらに含んでいるときには、
第2の側面のデータ処理装置には、
前記1バイト符号対応表を作成する1バイト符号対応表作成手段(例えば、図13の1バイト符号対応表作成部203)と、
前記2バイト符号対応表を作成する2バイト符号対応表作成手段(例えば、図13の2バイト符号対応表作成部204)と
をさらに設けることができ、
前記復号手段には、
前記1バイト符号対応表において前記シンボル値に対応付けられている前記1バイト符号の符号値を、その符号値に対応付けられているシンボル値に復号させ、
前記2バイト符号対応表において前記シンボル値に対応付けられている前記2バイト符号の符号値を、その符号値に対応付けられているシンボル値に復号させることができる。
本発明の第2の側面のデータ処理方法は、
データを圧縮して得られる圧縮データを伸張するデータ処理方法であり、
前記圧縮データは、
圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
ことにより得られる、符号値の系列を含み、
前記符号値の系列のうちの、前記1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、1バイトのシンボル値に復号し、
前記符号値の系列のうちの前記特定値を、値0x0000の2個の連続に復号する
復号処理を行う(例えば、図14のステップS206)
ステップを含む。
以下、図面を参照して、本発明の実施の形態について説明する。
図1は、本発明を適用した圧縮伸張システム(システムとは、複数の装置が論理的に集合した物をいい、各構成の装置が同一筐体中にあるか否かは、問わない)の一実施の形態の構成例を示している。
図1の圧縮伸張システムは、圧縮装置101、提供媒体102、及び伸張装置103で構成され、圧縮の対象のデータである対象データを圧縮して圧縮データを出力し、また、圧縮データを伸張して、元の対象データを出力するようになっている。
すなわち、圧縮装置101には、例えば、コンピュータが実行可能なプログラム(のコード)や、プログラムに似た、後述する性質を有するデータが、対象データとして供給される。
圧縮装置101は、そこに供給される対象データを圧縮して圧縮データを出力するデータ処理装置であり、圧縮装置101が出力する圧縮データは、提供媒体102を介して、伸張装置103に供給される。
提供媒体102は、例えば、インターネットや、CATV(Cable Television)網、衛星若しくは地上放送網等の伝送媒体、又は、半導体メモリや、磁気ディスク、光ディスク等の記録媒体であり、圧縮装置101からの圧縮データは、提供媒体102において伝送又は記録され、伸張装置103に提供される。
伸張装置103は、圧縮データを伸張するデータ処理装置であり、提供媒体102を介して提供される圧縮データを、元の対象データに伸張して出力する。
以上のように構成される圧縮伸張システムでは、圧縮装置101が、そこに供給される対象データを符号化することにより圧縮する圧縮処理を行い、圧縮データを出力する。圧縮装置101が出力する圧縮データは、提供媒体102を介して伝送されて、又は提供媒体102に記録されて、伸張装置103に供給される。伸張装置103は、提供媒体102から供給される圧縮データを復号することにより、元の対象データに伸張する伸張処理を行い、元の対象データを出力する。
次に、圧縮装置101は、所定の圧縮ルールに従って、対象データを符号化することにより圧縮する。
圧縮装置101が従う圧縮ルールは、対象データを圧縮して得られる圧縮データを、高速に、元の対象データに展開することができるルールであり、以下、この、圧縮装置101が従う圧縮ルールについて説明する。
まず、圧縮ルールの概要について説明する。
なお、対象データを符号化することにより圧縮する場合において、対象データの符号化は、所定のデータ長のデータ単位で行われる。この、符号化の対象となるデータ単位を、以下、適宜、シンボルという。また、シンボルの値を、シンボル値という。
対象データを圧縮するには、対象データにおいて、出現頻度の高いシンボル値を、そのシンボル値よりも短い符号長の符号に符号化する必要がある。
なお、出現頻度の高いシンボル値を、そのシンボル値よりも短い符号長の符号に符号化する場合には、出現頻度の低いシンボル値は、長い符号長の符号に符号化されることになり、結果として、可変長符号化が行われることになる。
一方、対象データを圧縮した圧縮データの伸張において、ビット演算を行う必要がある場合には、伸張処理に時間を要することになる。
したがって、伸張処理を、ビット演算なしで行うことができれば、すなわち、例えば、伸張処理において、圧縮データをバイト単位で扱えば済むのであれば、伸張を、高速に行うことができる。
伸張処理において圧縮データをバイト単位で扱うには、圧縮処理において、シンボルを符号化した符号の符号長の最小単位を1バイトにする必要がある。
例えば、いま、シンボルを符号化した符号の最小の符号長を、1バイトとすると、シンボルのデータ長(以下、シンボル長ともいう)は、1バイトよりも大の整数のバイト数とする必要がある。シンボル長が1バイトでは、そのようなシンボルを1バイトの符号に符号化しても、圧縮にならないからである。
そこで、いま、シンボル長を、1バイトよりも大の整数のバイト数である、例えば、2バイトとする。
ところで、対象データを、例えば、上述したように、コンピュータが実行可能なプログラムとした場合、そのプログラムにおいて現れる2バイトのシンボル値の出現頻度に、大きな偏りがないと、圧縮データのデータ量を、対象データのデータ量よりも十分小さくすることができず、圧縮を行う意味がなくなる。
そこで、図2は、あるプログラムのシンボル値の出現頻度の累積値(以下、累積頻度ともいう)を示している。
すなわち、図2は、MIPS(Microprocessor without Interlocked Pipeline Stages)アーキテクチャの、ある32ビットプロセッサの、32ビット固定長の命令セットで記述されたプログラムのシンボル値の累積頻度を示している。
ここで、図2において、横軸は、シンボル値の出現頻度の順位を表しており、縦軸は、累積頻度、すなわち、横軸の順位までのシンボル値の出現頻度の総和を表している。
なお、縦軸の累積頻度は、すべてのシンボル値の出現頻度の総和で、横軸の順位までのシンボル値の出現頻度の総和を正規化した値であり、したがって、横軸の順位が大(下位)になるにつれて、1.0に収束していく。
また、より上位の順位のシンボル値の出現頻度がより大で、それより下の順位のシンボル値の出現頻度がより小であるほど、すなわち、シンボル値の出現頻度に偏りがあるほど、累積頻度は、より速く1.0に収束する。
図2左は、シンボル長を1バイトとした場合の累積頻度を示しており、図2右は、シンボル長を2バイトとした場合の累積頻度を示している。
図2左によれば、1バイトのシンボル値の出現頻度には、ある程度の大きな偏りがあることが分かる。また、図2右によれば、2バイトのシンボル値の出現頻度には、1バイトのシンボル値の出現頻度よりも大きな偏りがあることが分かる。
したがって、図2に示した出現頻度の偏りがある対象データについては、シンボル長を1バイトとするよりも、2バイトとする方が、圧縮率、すなわち、ここでは、対象データのデータ量Pから圧縮データのデータ量Qを減算した減算値P−Qを、対象データのデータ量Pで除算した値(P−Q)/Pを大にすることができる。
なお、32ビット固定長の命令セットで記述されたプログラムにおいて、1バイトのシンボル値の出現頻度よりも、2バイトのシンボル値の出現頻度の方に大きな偏りがあるのは、32ビット固定長の命令セットには、その上位又は下位16ビット(2バイト)の位置に区切りがあることが多いためである。
以上から、圧縮ルールの第1のルールとして、シンボル長を2バイトとする。そして、出現頻度が大(高)の2バイトのシンボル値には、それより短い符号長の1バイトの符号を、出現頻度が中の2バイトのシンボル値には、それと同一の符号長の2バイトの符号を、出現頻度が小(低)の2バイトのシンボル値には、それより長い符号長の3バイトの符号を、それぞれ割り当て、各シンボル値を符号化することとする。
ここで、符号長が1バイトの符号を、1バイト符号という。同様に、符号長が2バイト又は3バイトの符号を、それぞれ、2バイト符号又は3バイト符号という。
第1のルールによれば、1バイト符号に割り当てられるシンボル値の出現頻度の総和が、3バイト符号に割り当てられるシンボル値の出現頻度の総和よりも大であるほど、圧縮率は、大になる。
次に、図3は、32ビット固定長の命令セットで記述されたあるプログラムを対象として、2バイトのシンボル値である値0x0000(0xは、その後に続く値が16進数であることを表す)が出現する出現頻度と、シンボル値0x0000が2個以上の各個数だけ連続することが出現する出現頻度とを調査した調査結果を示している。
なお、調査の対象としたプログラムにおいて、2バイトのシンボルの数は、1807707個だけ存在し、したがって、プログラムのデータ量は、1807707×2バイトである。
調査の対象としたプログラムの1807707個のシンボルの中で、シンボル値0x0000が1個だけ単独で出現する出現頻度、すなわち、プログラムに存在するシンボル値0x0000のうちの、直前と直後のシンボルが0x0000でないシンボル値0x0000の出現頻度は、図3に示したように、49092回(個)であった。
ここで、シンボル値は2バイト(16ビット)であるから、シンボル値の総数(種類)は、65536(=216)個であり、その65536個の各シンボル値の出現頻度の中で、シンボル値0x0000が1個だけ単独で出現する出現頻度(以下、適宜、1個のシンボル値0x0000の出現頻度という)は、上位であった。
したがって、圧縮処理において、出現頻度が上位のシンボル値0x0000は、ほとんどの場合、最短の符号長の1バイト符号に符号化されることが予想される。
また、シンボル値0x0000の2個の連続(0x0000,0x0000)の出現頻度、すなわち、プログラムにおいて、2個だけ連続したシンボル値0x0000が出現する出現頻度は、図3に示したように、38243回であった。
シンボル値0x0000の2個の連続では、2つのシンボル値0x0000が連続して存在するから、1つのシンボル値0x0000と、他の1つのシンボル値0x0000とのそれぞれとして符号化することができる。
いま、仮に、上述したように、1個のシンボル値0x0000が、1バイト符号に符号化されるとすると、シンボル値0x0000の2個の連続は、2つの1バイト符号に符号化されることになり、この場合、4バイトが2バイトに圧縮されることになる。
しかしながら、図3に示したように、0x0000の2個の連続の出現頻度は、1個の0x0000の出現頻度ほどではないが、それでも、1個の0x0000の出現頻度と同一のオーダ(1万台)となっている。
したがって、シンボル値0x0000の2個の連続については、1個ずつのシンボル値0x0000に分けて、その1個ずつのシンボル値0x0000を1バイト符号に符号化するのではなく、シンボル値0x0000の2個の連続の全体を、最小の符号長の1バイト符号に符号化することにより、圧縮率が向上することが予想される。
また、図3によれば、シンボル値0x0000の3個以上の各個数の連続の出現頻度は、その個数が大になるにつれ、徐々に減少する傾向にあるが、それでも、3個以上の各個数の連続の出現頻度の総和は、ある程度大になる。
したがって、シンボル値0x0000の3個以上の各個数の連続については、1個ずつのシンボル値0x0000に分けて、その1個ずつのシンボル値0x0000を1バイト符号に符号化するのではなく、シンボル値0x0000の3個以上の個数の連続の全体に、他の符号を割り当てて、その符号に符号化することにより、圧縮率が向上することが予想される。
そこで、圧縮ルールの第2のルールとして、シンボル値0x0000の2個の連続に、最小の符号長の1バイト符号を割り当てることとする。
さらに、第2のルールとして、シンボル値0x0000の3個以上の連続には、いままでに割り当てが決まっている最大の符号長の符号である3バイト符号より符号長が大の最小のバイト数の符号、すなわち、符号長が4バイトの符号(以下、適宜、4バイト符号という)を割り当て、シンボル値0x0000の3個以上の連続は、4バイト符号に符号化することとする。
なお、4バイト符号としては、例えば、3バイトのプレフィクス(prefix)と、シンボル値0x0000が連続する個数を表す1バイトとの合計4バイトを採用する。
圧縮装置101では、以上のような、シンボル長を2バイトとし、出現頻度が大の2バイトのシンボル値には1バイト符号を、出現頻度が中のシンボル値には2バイト符号を、出現頻度が小のシンボル値には3バイト符号を、それぞれ割り当てる第1のルール、及び、シンボル値0x0000の2個の連続には1バイト符号を割り当て、シンボル値0x0000の3個以上の連続には4バイト符号を割り当てる第2のルールからなる圧縮ルールに従って圧縮処理が行われる。
次に、圧縮装置101が従う具体的な圧縮ルールについて説明する。
第2のルールによれば、シンボル値0x0000の2個の連続に、1バイト符号が割り当てられるが、本実施の形態では、シンボル値0x0000の2個の連続に対して、1バイト符号の符号値0x00ないし0xFFのうちの、例えば、符号値0xFFを割り当てることとする。ここで、シンボル値0x0000の2個の連続に対して割り当てられる1バイト符号の符号値0xFFを、以下、適宜、特定値ともいう。
また、第2のルールによれば、シンボル値0x0000の3個以上の連続には4バイト符号が割り当てられるが、本実施の形態では、シンボル値0x0000の3個以上の連続に対して割り当てる4バイト符号として、3バイトのプリフィクスを上位3バイトとし、シンボル値0x0000が連続する個数を表す1バイトを下位1バイトとする4バイトを採用する。なお、4バイト符号の上位3バイトのプリフィクスとしては、例えば、0xFE,0x00,0x00(0xFE0000)を採用する。
第1のルールによれば、出現頻度が小のシンボル値には、3バイト符号が割り当てられるが、本実施の形態では、出現頻度が小のシンボル値に対して割り当てる3バイト符号として、1バイトのプリフィクスを上位1バイトとし、2バイトのシンボル値そのものを下位2バイトとする3バイトを採用する。なお、3バイト符号の上位1バイトのプリフィクスとしては、例えば、4バイト符号の上位3バイトのプリフィクス0xFE,0x00,0x00の上位1バイトである0xFEを採用する。
ここで、シンボル値0x0000の3個以上の連続に対して、0xFE,0x00,0x00を上位3バイトのプリフィクスとする4バイト符号を割り当てること、及び、出現頻度が小のシンボル値に対して、0xFEを上位1バイトのプリフィクスとするとともに、2バイトのシンボル値そのものを下位2バイトとする3バイト符号を割り当てることは、シンボル値0x0000が、1バイト符号に割り当てられるか、最悪でも、2バイト符号に割り当てられ、3バイト符号には割り当てられないことを前提とする。
シンボル値0x0000が3バイト符号に割り当てられると、その符号値は、0xFE,0x00,0x00となり、4バイト符号の上位3バイトのプレフィクス0xFE,0x00,0x00と区別することができなくなるからである。
なお、対象データとしてのプログラムにおける1個の0x0000の出現頻度は、図3に示したように大であるので、上述の前提は、ほとんどの場合、成り立つ。言い換えれば、上述の前提が成り立たない対象データは、圧縮装置101による圧縮に適さない。
次に、第1のルールによれば、シンボル長を2バイトとして、出現頻度が大のシンボル値には1バイト符号が、出現頻度が中のシンボル値には2バイト符号が、出現頻度が小のシンボル値には3バイト符号が、それぞれ割り当てられるが、1バイト符号、2バイト符号、又は3バイト符号がそれぞれ割り当てられるシンボル値の個数は、以下のように決定される。
すなわち、まず、出現頻度が上位X番目までの各シンボル値、つまり、X個のシンボル値に対して、1バイト符号を割り当てるとすると、1バイト符号の256個の符号値0x00ないし0xFFのうちの、特定値である符号値0xFFと、プリフィクスに用いられる符号値0xFEとの2個は、シンボル値の符号値として使用することができないため、シンボル値に割り当てることができる符号値は、0x00ないし0xFDの254個である。したがって、1バイト符号に割り当てることができるシンボル値の個数Xは、(1以上)254個以下となる。
上述のように、出現頻度が、254以下の上位X番目までの各シンボル値に対して、1バイト符号が割り当てられる場合、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値に、2バイト符号が割り当てられる。
すなわち、2バイト符号の上位1バイトの256個の値0x00ないし0xFFのうちの、特定値として用いられる値0xFFと、プリフィクスに用いられる値0xFEとの2個は、2バイト符号の上位1バイトには使用することができない。さらに、2バイト符号の上位1バイトの256個の値0x00ないし0xFFのうちの、出現頻度が上位X番目までのシンボル値に割り当てられる1バイト符号の符号値に用いられるX個の値も、2バイト符号の上位1バイトには使用することができない。
したがって、2バイト符号の上位1バイトに使用することができるのは、1バイトで表現することができる256個の値から、特定値として用いられる値0xFF、プリフィクスに用いられる値0xFE、及び、1バイト符号の符号値に用いられるX個の値を除いた、例えば、値Xないし0xFDの254-X個の値となる。
また、2バイト符号の下位1バイトとしては、1バイトで表現することができる256個の値すべてを使用することができる。
以上から、2バイト符号の符号値として使用することができる値の個数は、(254-X)×256個となり、その(254-X)×256個の2バイト符号の符号値が、出現頻度が上位X+1番目から(254-X)×256個の各シンボル値に割り当てられる。
以上のように、出現頻度が、254以下の上位X番目までの各シンボル値に対して、1バイト符号が割り当てられ、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値に、2バイト符号が割り当てられると、符号が割り当てられていないシンボル値の個数は、65536-X-(254-X)×256個となり、この、65536-X-(254-X)×256個のシンボルに対して、3バイト符号が割り当てられる。
すなわち、2バイト(16ビット)のシンボル値の総数は、65536(=216)個であり、そのうちの、X個のシンボル値に、1バイト符号が割り当てられ、(254-X)×256個のシンボル値に、2バイト符号が割り当てられるから、符号が割り当てられていないシンボル値は、2バイトのシンボル値の総数である65536個から、1バイト符号が割り当てられるシンボル値の個数であるX個と、2バイト符号が割り当てられるシンボル値の個数である(254-X)×256個とを減算した65536-X-(254-X)×256個となる。この、65536-X-(254-X)×256個のシンボルに対して、3バイト符号が割り当てられる。
いま、1バイト符号が割り当てられる、出現頻度が上位X番目までの各シンボル値の出現頻度の総和をC1と表すとともに、3バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和をC2と表すこととすると、総和C1から総和C2を減算した減算値C1-C2を最大にするXが、圧縮率を最も高くするXとなり、このXが、1バイト符号が割り当てられるシンボル値の数(以下、適宜、1バイト符号数という)として決定される。なお、1バイト符号数Xは、上述したように254以下(かつ1以上)の値である。
さらに、(254-X)×256が、2バイト符号が割り当てられるシンボル値の数として決定され、65536-X-(254-X)×256が、3バイト符号が割り当てられるシンボル値の数として決定される。
次に、図4を参照して、以上の圧縮ルールに従った、圧縮装置101(図1)による圧縮処理の概要について説明する。
なお、ここでは、1バイト符号数Xと、対象データにおける2バイトのシンボルの各シンボル値の出現頻度とが、既に求まっていることとし、さらに、上述したように、シンボル値0x0000は、1バイト符号に割り当てられるか、最悪でも、2バイト符号に割り当てられ、3バイト符号には割り当てられないこととする。
出現頻度が上位X番目までのシンボル値については、そのシンボル値を、1バイト符号の符号値0x00ないしX-1のうちのいずれかに符号化する1バイト符号化が行われる。
ここで、1バイト符号化は、図4に示すように、出現頻度が上位X番目までの各シンボル値と、1バイト符号の符号値0x00ないしX-1とを対応付ける対応表である1バイト符号対応表が作成され、その1バイト符号対応表に従って行われる。
なお、出現頻度が上位X番目までの各シンボル値と、1バイト符号の符号値0x00ないしX-1とを、どのように対応付けるか、つまり、出現頻度が上位X番目までの各シンボル値に対して、1バイト符号の符号値のうちのいずれを割り当てるかは、特に限定されるものではないが、例えば、出現頻度がより上位のシンボル値と、より値が小さい符号値とを対応付けることができる。
出現頻度が上位X+1番目から、(254-X)×256個のシンボル値については、そのシンボル値を2バイト符号に符号化する2バイト符号化が行われる。
ここで、2バイト符号化は、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値と、2バイト符号の符号値とを対応付ける対応表である2バイト符号対応表が作成され、その2バイト符号対応表に従って行われる。
なお、2バイト符号の符号値は、上述したように、上位1バイトが、値Xないし0xFDの範囲の値をとり、下位1バイトが0x00ないし0xFFの範囲の値をとる。そして、2バイト符号対応表としては、図4に示すように、上位1バイトがとるXないし0xFDの範囲の各値ごとに、下位1バイトがとる値0x00ないし0xFFの範囲の各値と、シンボル値とを対応付ける、0xFD-X+1個の対応表が作成される。
ここで、0xFD-X+1個の2バイト符号対応表のうちの、上位バイトがn(n=X,X+1,・・・,0xFD)の2バイト符号対応表を、2バイト符号対応表#nとも記載する。
なお、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値と、2バイト符号の符号値との対応付け、つまり、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値に対する、2バイト符号の符号値の割り当ては、圧縮データの後述するヘッダ情報のデータ量を少なくするために、例えば、出現頻度順の(254-X)×256個のシンボル値を、昇順に並べ替え、より小さい値のシンボル値と、より値が小さい符号値とを対応付けるように行われる。
2バイトの65536個のシンボル値のうちの、出現頻度が上位X番目までのシンボル値と、出現頻度が上位X+1番目から(254-X)×256個のシンボル値とを除いた、残りの65536-X-(254-X)×256個のシンボル値については、そのシンボル値を3バイト符号に符号化する3バイト符号化が行われる。
3バイト符号化は、図4に示すように、1バイトのプレフィクス0xFEに続けて、2バイトのシンボル値を付加することにより行われる。
シンボル値0x0000の2個以上の個数の連続のうちの、シンボル値0x0000の2個の連続については、そのシンボル値0x0000の2個の連続を、1バイト符号の符号値のうちの特定値0xFFに符号化する1バイト符号化が行われ、シンボル値0x0000の3個以上のk個の連続については、そのシンボル値0x0000のk個の連続を、4バイト符号に符号化する4バイト符号化が行われる。
4バイト符号化は、図4に示すように、1バイトの値0xFEに続けて2バイトの0x00,0x00を付加した3バイトのプレフィクス0xFE,0x00,0x00に、さらに、シンボル値0x0000が連続する個数kを表す1バイトを、下位バイトとして付加することにより行われる。
なお、4バイト符号において、シンボル値0x0000が連続する個数kを表す下位バイトは1バイトであるため、255を越える値は、表すことができない。そこで、シンボル値0x0000が、255を越える個数kだけ連続する場合には、その、シンボル値0x0000のk個の連続は、シンボル値0x0000の255個の連続と、シンボル値0x0000のk-255個の連続とに分けられ、それぞれ4バイト符号化される。k-255が、255を越える場合には、シンボル値0x0000のk-255個の連続が、さらに、シンボル値0x0000の255個の連続と、シンボル値0x0000のk-255-255個の連続とに分けられ、それぞれ4バイト符号化される。
また、上述の場合には、説明を簡単にするために、シンボル値0x0000の3個以上のk個の連続については、そのシンボル値0x0000のk個の連続を、4バイト符号に符号化する4バイト符号化を行うようにしたが、値kが小の場合には、シンボル値0x0000のk個の連続は、4バイト符号に符号化するのではなく、1個のシンボル値0x0000と、シンボル値0x0000の2個の連続とに分けて、又は、複数の、シンボル値0x0000の2個の連続に分けて、1バイト符号化を行うようにすることができる。
このように、値kが小の場合に、シンボル値0x0000のk個の連続を、1個のシンボル値0x0000と、シンボル値0x0000の2個の連続とに分けて、又は、複数の、シンボル値0x0000の2個の連続に分けて、1バイト符号化を行うことにより、シンボル値0x0000のk個の連続を、4バイト符号化する場合に比較して、圧縮率を向上させることができる。
すなわち、例えば、値kが8以下の、例えば、8である場合、シンボル値0x0000の8個の連続を4バイト符号化すると、3バイトのプレフィクス0xFE,0x00,0x00を上位3バイトとし、かつ、シンボル値0x0000が連続する個数である8を表す1バイト0x08を下位1バイトとする4バイトの符号値0xFE,0x00,0x00,0x08に符号化される。
4バイト符号化では、値kが、8以下(かつ3以上)の他の値である7,6,5,4,3である場合も、同様に、シンボル値0x0000のk個の連続は、4バイトに符号化される。
一方、シンボル値0x0000の8個の連続は、例えば、4個の、シンボル値0x0000の2個の連続に分けることができるが、この4個の、シンボル値0x0000の2個の連続それぞれを1バイト符号化すると、4つの特定値0xFF,0xFF,0xFF,0xFF、つまり、4バイトに符号化される。
また、例えば、シンボル値0x0000の7個の連続は、例えば、1個のシンボル値0x0000と、3個の、シンボル値0x0000の2個の連続に分けることができる。
そして、いま、説明を簡単にするために、1個のシンボル値0x0000が、例えば、1バイト符号の符号値0x00に符号化されることとすると、シンボル値0x0000の7個の連続を分けて得られる1個のシンボル値0x0000と、3個の、シンボル値0x0000の2個の連続とは、それぞれ、符号値0x00,0xFF,0xFF,0xFFに符号化、つまり、4バイトに符号化される。
さらに、例えば、シンボル値0x0000の6個の連続は、例えば、3個の、シンボル値0x0000の2個の連続に分けることができるが、この3個の、シンボル値0x0000の2個の連続それぞれを1バイト符号化すると、3つの特定値0xFF,0xFF,0xFF、つまり、3バイトに符号化される。
以下、同様に、値kが8以下の場合には、シンボル値0x0000のk個の連続を、1個のシンボル値0x0000と、シンボル値0x0000の2個の連続とに分けて、又は、複数の、シンボル値0x0000の2個の連続に分けて、1バイト符号化を行うことにより、その符号化結果は、シンボル値0x0000のk個の連続を、4バイト符号化した場合の符号化結果である4バイト以下のバイト数となり、圧縮率を向上させること(4バイト符号化の場合よりも、圧縮率を劣化させないこと)ができる。
なお、言い換えれば、値kが8より大の場合には、シンボル値0x0000のk個の連続を、1個のシンボル値0x0000と、シンボル値0x0000の2個の連続とに分けて、又は、複数の、シンボル値0x0000の2個の連続に分けて、1バイト符号化を行うより、シンボル値0x0000のk個の連続を、そのまま4バイト符号化する方が、ランレングス符号化のように、圧縮率を向上させることができる。
次に、図5は、図1の圧縮装置101の構成例を示すブロック図である。
図5において、圧縮装置101は、記憶部121、出現頻度算出部122、1バイト符号数算出部123、1バイト符号対応表作成部124、2バイト符号対応表作成部125、符号化部126、ヘッダ生成部127、記憶部128、及び圧縮データ生成部129等から構成される。
記憶部121には、対象データが供給されるようになっている。記憶部121は、そこに供給される対象データを一時記憶する。
出現頻度算出部122は、記憶部121に記憶された対象データを、その先頭から、2バイトのシンボル単位で、順次、読み出し、シンボルの各シンボル値の出現頻度を算出して、1バイト符号数算出部123、1バイト符号対応表作成部124、及び、2バイト符号対応表作成部125に供給する。
1バイト符号数算出部123は、出現頻度算出部122からの各シンボル値の出現頻度に基づき、上述した1バイト符号数Xを算出して、1バイト符号対応表作成部124、2バイト符号対応表作成部125、及び、ヘッダ生成部127に供給する。
すなわち、1バイト符号数算出部123は、出現頻度算出部122からの各シンボル値の出現頻度に基づき、1バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和C1を算出するとともに、3バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和C2を算出する。さらに、1バイト符号数算出部123は、1バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和C1から、3バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和C2を減算した減算値C1-C2を最大にするXを、1バイト符号数として算出する。
1バイト符号対応表作成部124は、出現頻度算出部122からの各シンボル値の出現頻度と、1バイト符号数算出部123からの1バイト符号数Xとに基づき、出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる1バイト符号のX個の符号値とを対応付ける、図4で説明した1バイト符号対応表を作成して、符号化部126、及びヘッダ生成部127に供給する。
2バイト符号対応表作成部125は、出現頻度算出部122からの各シンボル値の出現頻度と、1バイト符号数算出部123からの1バイト符号数Xとに基づき、出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる2バイト符号の(254-X)×256個の符号値とを対応付ける、図4で説明した2バイト符号対応表を作成して、符号化部126、及びヘッダ生成部127に供給する。
符号化部126は、1バイト符号対応表作成部124からの1バイト符号対応表と、2バイト符号対応表作成部125からの2バイト符号対応表とを参照し、記憶部121に記憶された対象データにおけるシンボルのうちの、出現頻度が上位のシンボル値(のシンボル)を、1バイト符号に符号化し、出現頻度が次に上位のシンボル値を、2バイト符号に符号化し、残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、シンボル値0x0000の3個以上の各個数の連続を、1バイト符号の符号値のうちの、あらかじめ決定された特定値0xFFに符号化、又は4バイト符号化する。
すなわち、符号化部126は、1バイト符号対応表作成部124からの1バイト符号対応表において1バイト符号の符号値に対応付けられている、出現頻度が上位X番目までの各シンボル値を、1バイト符号対応表でシンボル値に対応付けられている1バイト符号の符号値に符号化する。
また、符号化部126は、2バイト符号対応表作成部125からの2バイト符号対応表において2バイト符号の符号値に対応付けられている、出現頻度が、次に上位の(254-X)×256個の各シンボル値を、2バイト符号対応表でシンボル値に対応付けられている2バイト符号の符号値に符号化する。
さらに、符号化部126は、1バイト符号対応表作成部124からの1バイト符号対応表にも、2バイト符号対応表作成部125からの2バイト符号対応表にもない、残りの65536-X-(254-X)×256個の各シンボル値を、3バイト符号の符号値に符号化する。
また、符号化部126は、シンボル値0x0000の2個の連続を、1バイト符号の符号値のうちの、あらかじめ決定された特定値0xFFに符号化する。
さらに、符号化部126は、シンボル値0x0000の3個以上のk個の連続を、上位3バイトをプリフィクス0xFE,0x00,0x00とし、下位1バイトをkとする4バイト符号の符号値に符号化する。
そして、符号化部126は、記憶部121に記憶された対象データをシンボルごとに符号化することにより得られる符号値の系列を、記憶部128に供給する。
ヘッダ生成部127は、1バイト符号数算出部123からの1バイト符号数X、1バイト符号対応表作成部124からの1バイト符号対応表、及び、2バイト符号対応表作成部125からの2バイト符号対応表に基づき、1バイト符号数Xと、1バイト符号対応表を作成するのに必要な1バイト符号情報と、2バイト符号対応表を作成するの必要な2バイト符号情報とを含むヘッダ情報を生成し、圧縮データ生成部129に供給する。
記憶部128は、符号化部126からの符号値の系列を記憶する。
圧縮データ生成部129は、記憶部128に記憶された符号値の系列に、ヘッダ生成部127からのヘッダ情報を付加することにより、ヘッダ情報と、対象データをシンボル単位で符号化した符号値の系列とからなる圧縮データを生成して出力する。
図6は、図5の圧縮装置101で得られる圧縮データのフォーマットを示している。
圧縮データは、ヘッダ部とボディ部とからなる。圧縮データにおいて、ヘッダ部には、ヘッダ生成部127で生成されたヘッダ情報が配置され、ボディ部には、符号化部126で得られて記憶部128に記憶された符号値の系列が配置される。
ヘッダ情報は、その先頭から、1バイト符号数X、1バイト符号情報、及び2バイト符号情報が順次配置されて構成される。
すなわち、ヘッダ生成部127(図5)において、ヘッダ情報の先頭から1バイト目には、1バイト符号数算出部123で算出された1バイト符号数Xが配置される。
また、ヘッダ生成部127では、ヘッダ情報の、1バイト符号数Xに続いて、2×Xバイトの1バイト符号情報が配置される。
すなわち、ヘッダ生成部127は、1バイト符号対応表作成部124からの1バイト符号対応表において、1バイト符号の1番目の符号値0x00に対応付けられている2バイトのシンボル値(以下、1番目のシンボル値という)を、1バイト符号数Xに続いて配置する。
さらに、ヘッダ生成部127は、1バイト符号対応表作成部124からの1バイト符号対応表において、1バイト符号の2番目の符号値0x01に対応付けられている2バイトのシンボル値を、1番目のシンボル値に続いて配置し、以下、同様にして、1バイト符号のX番目の符号値X-1に対応付けられている2バイトのシンボル値までを、1バイト符号情報として配置する。
したがって、1バイト符号情報は、1バイト符号対応表において、1バイト符号に対応付けられているX個のシンボル値である。
1バイト符号情報では、1バイト符号の符号値0x00ないしX-1に割り当てられたX個のシンボル値が、符号値0x00ないしX-1に割り当てられた順に並んでいるので、1バイト符号情報及び1バイト符号数Xから、元の1バイト符号対応表を復元することができる。
ここで、シンボル値は2バイトであり、1バイト符号対応表作成部124に存在するシンボル値の数、すなわち、1バイト符号化されるシンボル値の数は、1バイト符号数であるX個であるから、1バイト符号情報のデータ量は、上述したように、2×Xバイトとなる。
ヘッダ情報において、1バイト符号情報の後には、2バイト符号情報が配置される。
すなわち、ヘッダ生成部127は、2バイトのシンボル値の総数に等しい65536ビット(8kバイト)のビット列の各ビットを、2バイト符号対応表に基づいて、0又は1にセットし、その結果得られる65536ビットのビット列を、2バイト符号情報として、1バイト符号情報の後に配置する。
具体的には、ヘッダ生成部127は、2バイト符号対応表において、シンボル値0x0000が2バイト符号(の符号値)に対応付けられているかどうかに応じて、65536ビットのビット列のうちの、先頭から1ビット目を、0又は1にセットする。例えば、シンボル値0x0000が2バイト符号に対応付けられている場合には、1ビット目は、1にセットされ、シンボル値0x0000が2バイト符号に対応付けられていない場合には、1ビット目は、0にセットされる。
また、ヘッダ生成部127は、2バイト符号対応表において、シンボル値0x0001が2バイト符号に対応付けられているかどうかに応じて、65536ビットのビット列のうちの、先頭から2ビット目を、0又は1にセットし、以下、同様に、2バイト符号対応表において、シンボル値N-1が2バイト符号に対応付けられているかどうかに応じて、65536ビットのビット列のうちの、先頭からNビット目を、0又は1にセットする。
そして、ヘッダ生成部127は、2バイト符号対応表において、シンボル値0xFFFFが2バイト符号に対応付けられているかどうかに応じて、65536ビットのビット列のうちの、先頭から65536ビット目を、0又は1にセットし、その65536ビットのビット列を、2バイト符号情報として、1バイト符号情報の後に配置する。
したがって、2バイト符号情報は、2バイトの各シンボル値、つまり、65536個の各シンボル値が、2バイト符号対応表において、2バイト符号に対応付けられているかどうかを表す。
以上のように、2バイト符号情報の先頭からNビット目は、シンボル値N-1が2バイト符号に対応付けられているかどうかを表す。
また、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値と、2バイト符号の符号値との対応付けは、より小さい値のシンボル値と、2バイト符号の、より小さい符号値とを対応付けるように行われる。
そして、2バイト符号の符号値の最小値αは、上位1バイトが値Xで、下位1バイトが値0x00の2バイトである。
したがって、2バイト符号情報の先頭からNビット目が1である場合、つまり、シンボル値N-1が2バイト符号に対応付けられている場合に、そのシンボル値N-1に対応付けられている2バイト符号の符号値を求めることができる。
すなわち、2バイト符号情報の先頭からNビット目が1である場合に、そのNビット目の1が、2バイト符号情報の先頭から1のみをカウントしたときのβ個目の1であるとすると、シンボル値N-1に対応付けられている2バイト符号の符号値は、2バイト符号の符号値の最小値αに、β-1を加算した値α+β-1となる。
したがって、2バイト符号情報及び1バイト符号数Xから、元の2バイト符号対応表を復元することができる。
なお、1バイト符号情報として、1バイト符号対応表そのものを採用し、2バイト符号情報として、2バイト符号対応表そのものを採用することも可能であるが、その場合、図6で説明した1バイト符号情報及び2バイト符号情報を採用する場合に比較して、ヘッダ情報、ひいては、圧縮データ全体のデータ量が増加する。
次に、図7のフローチャートを参照して、図5の圧縮装置101が行う圧縮処理について説明する。
対象データが、記憶部121に供給され、記憶部121が、そこに供給される対象データを記憶すると、圧縮装置101は、圧縮処理を開始する。
すなわち、圧縮処理では、ステップS101において、出現頻度算出部122は、記憶部121に記憶された対象データを、その先頭から、2バイトのシンボル単位で、順次、読み出し、2バイトのシンボルの65536個の各シンボル値の出現頻度を算出して、1バイト符号数算出部123、1バイト符号対応表作成部124、及び、2バイト符号対応表作成部125に供給する。
その後、処理は、ステップS101からステップS102に進み、1バイト符号数算出部123は、出現頻度算出部122からの各シンボル値の出現頻度に基づき、1バイト符号数X、すなわち、圧縮率を最も高くする、1バイト符号化するシンボル値の数Xを、上述したように算出し、1バイト符号対応表作成部124、2バイト符号対応表作成部125、及び、ヘッダ生成部127に供給して、処理は、ステップS103に進む。
ステップS103では、1バイト符号対応表作成部124が、出現頻度算出部122からの各シンボル値の出現頻度と、1バイト符号数算出部123からの1バイト符号数Xとに基づき、1バイト符号対応表を作成し、符号化部126、及びヘッダ生成部127に供給して、処理は、ステップS104に進む。
ステップS104では、2バイト符号対応表作成部125が、出現頻度算出部122からの各シンボル値の出現頻度と、1バイト符号数算出部123からの1バイト符号数Xとに基づき、2バイト符号対応表を作成し、符号化部126、及びヘッダ生成部127に供給して、処理は、ステップS105に進む。
ステップS105では、ヘッダ生成部127が、1バイト符号数算出部123からの1バイト符号数X、1バイト符号対応表作成部124からの1バイト符号対応表、及び、2バイト符号対応表作成部125からの2バイト符号対応表に基づき、1バイト符号数Xと、1バイト符号対応表を作成するのに必要な1バイト符号情報と、2バイト符号対応表を作成するの必要な2バイト符号情報とを含む、図6の圧縮データのヘッダ部に配置されるヘッダ情報を生成し、圧縮データ生成部129に供給して、処理は、ステップS106に進む。
ステップS106では、符号化部126が、1バイト符号対応表作成部124からの1バイト符号対応表と、2バイト符号対応表作成部125からの2バイト符号対応表とを参照し、記憶部121に記憶された対象データにおける各シンボルのシンボル値を、1バイト符号、2バイト符号、3バイト符号、若しくは4バイト符号に符号化する符号化処理を行い、その符号化処理によって得られる符号値の系列を、記憶部128に供給して記憶させて、処理は、ステップS107に進む。
ステップS107では、圧縮データ生成部129が、ヘッダ生成部127からのヘッダ情報を、ヘッダ部に配置するとともに、記憶部128に記憶された符号値の系列を、ボディ部に配置した図6の圧縮データを生成して出力する。
次に、図8のフローチャートを参照して、図7のステップS101において、出現頻度算出部122(図5)が行う、シンボル値の出現頻度を算出する処理について説明する。
まず最初に、ステップS121において、出現頻度算出部122は、内蔵するメモリ(図示せず)に記憶されたシンボル出現頻度表を初期化する。
ここで、図9は、シンボル出現頻度表を示している。
シンボル出現頻度表は、2バイトの各シンボル値、すなわち、65536個のシンボル値0x0000ないし0xFFFFのそれぞれと、出現頻度とが対応付けられた対応表であり、出現頻度算出部122は、内蔵するメモリに、シンボル出現頻度表を記憶している。
ステップS121のシンボル出現頻度表の初期化では、シンボル出現頻度表のシンボル値が、例えば、昇順にソートされ、出現頻度が0にリセットされる。
図8に戻り、ステップS121の後、処理は、ステップS122に進み、出現頻度算出部122が、記憶部121に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出して、処理は、ステップS123に進む。
ステップS123では、出現頻度算出部122は、出現頻度表(図9)において、注目シンボルのシンボル値に対応付けられている出現頻度を1だけインクリメントして、処理は、ステップS124に進む。
ステップS124では、出現頻度算出部122は、記憶部121に記憶された対象データの最後のシンボルまでを、注目シンボルとしたかどうかを判定する。
ステップS124において、記憶部121に記憶された対象データの最後のシンボルまでを、まだ、注目シンボルとしていないと判定された場合、すなわち、記憶部121に記憶された対象データにおいて、まだ、注目シンボルとしていないシンボルがある場合、処理は、ステップS122に戻り、出現頻度算出部122は、上述したように、記憶部121に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出し、以下、同様の処理を行う。
また、ステップS124において、記憶部121に記憶された対象データの最後のシンボルまでを、注目シンボルとしたと判定された場合、処理は、ステップS125に進み、出現頻度算出部122は、出現頻度表(図9)のシンボル値及び出現頻度のセットを、例えば、出現頻度の大きい順に並べ替えて、その並べ替え後の出現頻度表を、1バイト符号数算出部123、1バイト符号対応表作成部124、及び、2バイト符号対応表作成部125に供給して、処理は、リターンする。
なお、図9に示した出現頻度表には、便宜上、シンボル値及び出現頻度のセットを、出現頻度の大きい順に並べ替えた後の、出現頻度の順位も、図示してある。
次に、図10のフローチャートを参照して、図7のステップS106において、符号化部126(図5)が行う符号化処理について説明する。
符号化処理では、ステップS131において、符号化部126が、シンボル値0x0000が連続する個数(回数)をカウントする変数ZEROに、初期値としての0をセットして、処理は、ステップS132に進む。
ステップS132では、符号化部126が、記憶部121に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出して、処理は、ステップS133に進む。
ステップS133では、符号化部126が、注目シンボルのシンボル値が、値0x0000であるかどうかを判定する。
ステップS133において、注目シンボルのシンボル値が、値0x0000であると判定された場合、処理は、ステップS134に進み、符号化部126が、変数ZEROを1だけインクリメントする。
そして、処理は、ステップS134からステップS132に戻り、符号化部126が、記憶部121に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出し、以下、ステップS133において、注目シンボルのシンボル値が、値0x0000でないと判定されるまで、ステップS132ないしS134の処理が繰り返される。
ここで、以上のように、ステップS132ないしS134の処理が繰り返されることにより、変数ZEROを用いて、シンボル値0x0000が連続する個数がカウントされる。
ステップS133において、注目シンボルのシンボル値が、値0x0000でないと判定された場合、処理は、ステップS135に進み、符号化部126は、変数ZEROが0より大であるかどうかを判定する。
ステップS135において、変数ZEROが0より大であると判定された場合、すなわち、対象データにおいて、注目シンボル以前に、注目シンボルを含んで、シンボル値が値0x0000のシンボルが、ZERO個だけ連続している場合、処理は、ステップS136に進み、符号化部126は、そのZERO個だけ連続するシンボル値0x0000の符号化を行い、処理は、ステップS137に進む。ここで、ステップS136で行われる、シンボル値0x0000の符号化の処理の詳細については、図11を参照して後述する。
一方、ステップS135において、変数ZEROが0より大でないと判定された場合、処理は、ステップS137に進み、符号化部126は、値0x0000以外の値のシンボル値の符号化を行い、処理は、ステップS138に進む。ここで、ステップS137で行われる、値0x0000以外の値のシンボル値の符号化の処理の詳細については、図12を参照して後述する。
ステップS138では、符号化部126は、記憶部121に記憶された対象データの最後のシンボルまでを、注目シンボルとしたかどうかを判定する。
ステップS138において、記憶部121に記憶された対象データの最後のシンボルまでを、まだ、注目シンボルとしていないと判定された場合、すなわち、記憶部121に記憶された対象データにおいて、まだ、注目シンボルとしていないシンボルがある場合、処理は、ステップS131に戻り、符号化部126は、上述したように、記憶部121に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出し、以下、同様の処理を行う。
また、ステップS138において、記憶部121に記憶された対象データの最後のシンボルまでを、注目シンボルとしたと判定された場合、すなわち、記憶部121に記憶された対象データのすべてが、シンボル単位で符号化され、その符号化によって得られる符号値の系列が、記憶部128(図5)に記憶された場合、処理は、リターンする。
次に、図11のフローチャートを参照して、図10のステップS136において、符号化部126(図5)が行う、シンボル値0x0000の符号化の処理について説明する。
ここで、シンボル値0x0000の符号化の処理が行われる場合というのは、図10で説明したように、対象データにおいて、注目シンボル以前に、注目シンボルを含んで、シンボル値が値0x0000のシンボルが、ZERO個だけ連続しており、シンボル値0x0000の符号化の処理では、そのZERO個だけ連続するシンボル値0x0000(シンボル値0x0000のZERO個の連続)の符号化が行われる。
また、ここでは、説明を簡単にするために、対象データにおいて、シンボル値0x0000の出現頻度が高く、シンボル値0x0000は、1バイト符号の符号値0x00に符号化される、すなわち、図7のステップS103で1バイト符号対応表作成部124が作成する1バイト符号対応表において、符号値0x00に対応付けられていることとする。
符号化部126は、ステップS151において、変数ZEROが、1バイトで表すことができる最大値255より大であるかどうかを判定する。
ステップS151において、変数ZEROが値255より大であると判定された場合、ステップS152に進み、符号化部126は、ZERO個だけ連続するシンボル値0x0000のうちの、先頭から255個のシンボル値0x0000を、4バイト符号0xFE,0x00,0x00,0xFF(255)に符号化し、すなわち、ZERO個だけ連続するシンボル値0x0000のうちの、先頭から255個のシンボル値0x0000の符号化結果として、4バイト符号0xFE,0x00,0x00,0xFFを出力し、記憶部128に供給して記憶させる。
ここで、4バイト符号に符号化することができるのは、最大で255個だけ連続するシンボル値0x0000であるため、255個を越えて連続するシンボル値0x0000は、まず、その先頭から255個のシンボル値0x0000が、プリフィクス0xFE,0x00,0x00である上位3バイトと、シンボル値0x0000が連続する個数である255(=0xFF)を表す下位1バイトとからなる4バイト符号0xFE,0x00,0x00,0xFFに符号化される。
ステップS152の後、処理は、ステップS153に進み、符号化部126は、変数ZEROから、直前のステップS152で符号化されたシンボル値0x0000の255個の連続における、シンボル0x0000が連続する個数である255を減算し、その減算値を、変数ZEROにセットして、処理は、ステップS151に戻る。
したがって、以下、直前のステップS152で行われた符号化の対象となっていない、シンボル値0x0000の連続を対象に、ステップS151以降の処理が行われる。
一方、ステップS151において、変数ZEROが値255より大でないと判定された場合、すなわち、1回以上行われたステップS153の処理によって、変数ZEROが値255以下となるか、又は、変数ZEROが、元から、値255以下である場合、処理は、ステップS154に進み、符号化部126は、変数ZEROが8より大であるかどうかを判定する。
ステップS154において、変数ZEROが8より大であると判定された場合、すなわち、図4で説明したように、シンボル値0x0000のZERO個の連続を、そのまま4バイト符号化した方が、1個のシンボル値0x0000と、シンボル値0x0000の2個の連続とに分けて、又は、複数の、シンボル値0x0000の2個の連続に分けて、1バイト符号化を行うよりも、圧縮率を向上させることができる場合、処理は、ステップS155に進み、符号化部126は、シンボル値0x0000のZERO個の連続を、プリフィクス0xFE,0x00,0x00である上位3バイトと、シンボル値0x0000が連続する個数ZEROを表す下位1バイトとからなるである4バイト符号0xFE,0x00,0x00,ZEROに符号化し、すなわち、シンボル値0x0000のZERO個の連続の符号化結果として、4バイト符号0xFE,0x00,0x00,ZEROを出力し、記憶部128に供給して記憶させる。そして、その後、処理は、リターンする。
また、ステップS154において、変数ZEROが8より大でないと判定された場合、すなわち、シンボル値0x0000のZERO個の連続を、1個のシンボル値0x0000と、シンボル値0x0000の2個の連続とに分けて、若しくは、複数の、シンボル値0x0000の2個の連続に分けて、1バイト符号化した方が、そのまま4バイト符号化するよりも圧縮率を向上させることができる場合、又は、変数ZEROが1であり、したがって、現在の符号化の対象が、1個のシンボル値0x0000である場合、処理は、ステップS156に進み、符号化部126は、変数ZEROが奇数であるかどうかを判定する。
ステップS156において、変数ZEROが奇数であると判定された場合、処理は、ステップS157に進み、符号化部126は、1バイト符号対応表作成部124からの1バイト符号対応表、さらには、必要に応じて、2バイト符号対応表作成部125からの2バイト符号対応表を参照し、対象データにおいて、注目シンボルからZERO-1個だけ前のシンボルのシンボル値0x0000を符号化する。
ここで、いまの場合、シンボル値0x0000は、1バイト符号対応表において、符号値0x00に対応付けられていることとしているので、ステップS157では、符号化部126は、1バイト符号対応表を参照することにより、注目シンボルからZERO-1個だけ前のシンボルのシンボル値0x0000を、1バイト符号対応表においてシンボル値0x0000と対応付けられている符号値0x00に符号化する。
そして、符号化部126は、注目シンボルからZERO-1個だけ前のシンボルのシンボル値0x0000を符号化した符号値0x00を、記憶部128に供給して記憶させ、処理は、ステップS157からステップS158に進む。
一方、ステップS156において、変数ZEROが奇数でないと判定された場合、すなわち、変数ZEROが偶数である場合、処理は、ステップS157をスキップして、ステップS158に進み、符号化部126は、変数ZEROを2で除算した除算値(但し、小数点以下切り捨て)を、変数iにセットすることにより、シンボル値0x0000のZERO個の連続を、1個のシンボル値0x0000と、シンボル値0x0000の2個の連続とに分けた場合、又は、シンボル値0x0000の2個の連続だけに分けた場合に得られる、シンボル値0x0000の2個の連続の個数i、つまり、シンボル値0x0000のZERO個の連続に含まれる、シンボル値0x0000の2個の連続の個数iを求めて、処理は、ステップS159に進む。
ステップS159では、符号化部126は、変数iが0であるかどうかを判定する。
ステップS159において、変数iが0でないと判定された場合、処理は、ステップS160に進み、符号化部126は、対象データにおいて、注目シンボルから2×i-1個だけ前のシンボルと、その次のシンボルとからなる、シンボル値0x0000の2個の連続を、1バイト符号の特定値である符号値0xFFに符号化し、すなわち、シンボル値0x0000の2個の連続の符号化結果として、符号値0xFFを出力し、記憶部128に供給して記憶させる。
その後、処理は、ステップS160からステップS161に進み、符号化部126は、変数iを1だけデクリメントし、処理は、ステップS159に戻る。
そして、ステップS159において、変数iが0であると判定された場合、すなわち、シンボル値0x0000の符号化の処理において符号化の対象であった、シンボル値0x0000のZERO個の連続の符号化がすべて終了した場合、処理は、リターンする。
次に、図12のフローチャートを参照して、図10のステップS137において、符号化部126(図5)が行う、値0x0000以外の値のシンボル値の符号化の処理について説明する。
ステップS181において、符号化部126は、注目シンボルのシンボル値が、1バイト符号対応表作成部124からの1バイト符号対応表にあるかどうかを検索し、処理は、ステップS182に進む。
ステップS182では、符号化部126は、ステップS181での1バイト符号対応表の検索の結果に基づき、1バイト符号対応表に、注目シンボルのシンボル値があったかどうかを判定する。
ステップS182において、1バイト符号対応表に、注目シンボルのシンボル値があったと判定された場合、処理は、ステップS183に進み、符号化部126は、注目シンボルのシンボル値を、1バイト符号対応表において、そのシンボル値に対応付けられている1バイト符号の符号値に符号化する。さらに、符号化部126は、注目シンボルのシンボル値を符号化した符号値を、記憶部128に供給して記憶させ、処理は、リターンする。
また、ステップS182において、1バイト符号対応表に、注目シンボルのシンボル値がなかったと判定された場合、処理は、ステップS184に進み、符号化部126は、注目シンボルのシンボル値が、2バイト符号対応表作成部125からの2バイト符号対応表にあるかどうかを検索して、処理は、ステップS185に進む。
ステップS185では、符号化部126は、ステップS184での2バイト符号対応表の検索の結果に基づき、2バイト符号対応表に、注目シンボルのシンボル値があったかどうかを判定する。
ステップS185において、2バイト符号対応表に、注目シンボルのシンボル値があったと判定された場合、処理は、ステップS186に進み、符号化部126は、注目シンボルのシンボル値を、2バイト符号対応表において、そのシンボル値に対応付けられている2バイト符号の符号値に符号化する。さらに、符号化部126は、注目シンボルのシンボル値を符号化した符号値を、記憶部128に供給して記憶させ、処理は、リターンする。
ここで、2バイト符号対応表としては、図4で説明したように、2バイト符号の上位1バイトがとるXないし0xFDの範囲の各値ごとに、下位1バイトがとる値0x00ないし0xFFの範囲の各値と、シンボル値とを対応付ける、0xFD-X+1個の対応表が存在する。
いま、注目シンボルのシンボル値があった2バイト符号対応表が、0xFD-X+1個の2バイト符号対応表のうちの、2バイト符号の上位バイトがn(n=X,X+1,・・・,0xFD)の2バイト符号対応表#nであったとすると、注目シンボルのシンボル値は、値nを上位1バイトとし、2バイト符号対応表#nにおいて注目シンボルのシンボル値と対応付けられている1バイトを下位1バイトとする2バイトが、注目シンボルの符号化した符号値となる。
一方、ステップS185において、2バイト符号対応表に、注目シンボルのシンボル値がなかったと判定された場合、処理は、ステップS187に進み、符号化部126は、注目シンボルを、1バイトのプレフィクス0xFEを上位1バイトとし、注目シンボルの2バイトのシンボル値を下位2バイトとする3バイト符号に符号化する。そして、符号化部126は、注目シンボルのシンボル値を符号化した符号値を、記憶部128に供給して記憶させ、処理は、リターンする。
次に、図13は、図1の伸張装置103の構成例を示すブロック図である。
図13において、伸張装置103は、記憶部201、読み出し制御部202、1バイト符号対応表作成部203、2バイト符号対応表作成部204、復号部205、及び記憶部206等から構成される。
記憶部201には、図5の圧縮装置101が出力する圧縮データが提供媒体102(図1)を介して供給される。記憶部201は、そこに供給される圧縮データを順次記憶する。
読み出し制御部202は、記憶部201に記憶された圧縮データ(図6)を、その先頭から、1バイトを最小単位として読み出し、1バイト符号対応表作成部203、2バイト符号対応表作成部204、又は復号部205に、必要に応じて供給する。
すなわち、読み出し制御部202は、記憶部201に記憶された圧縮データにおける先頭の1バイトの1バイト符号数X(図6)を読み出し、1バイト符号対応表作成部203、2バイト符号対応表作成部204、及び復号部205に供給する。
また、読み出し制御部202は、記憶部201に記憶された圧縮データにおける、1バイト符号数Xの直後の2×Xバイトの1バイト符号情報(図6)を読み出し、1バイト符号対応表作成部203に供給する。
さらに、読み出し制御部202は、記憶部201に記憶された圧縮データにおける、1バイト符号情報の直後の8kバイトの2バイト符号情報(図6)を読み出し、2バイト符号対応表作成部204に供給する。
また、読み出し制御部202は、記憶部201に記憶された圧縮データにおける、2バイト符号情報の直後のボディ部に配置された符号値の系列を、1バイトずつ読み出し、復号部205に供給する。
1バイト符号対応表作成部203は、読み出し制御部202からの1バイト符号数Xと1バイト符号情報とを用い、図4で説明した1バイト符号対応表を復元することにより作成して、復号部205に供給する。
2バイト符号対応表作成部204は、読み出し制御部202からの1バイト符号数Xと2バイト符号情報とを用い、図4で説明した2バイト符号対応表を復元することにより作成して、復号部205に供給する。
復号部205は、読み出し制御部202からの1バイト符号数X、1バイト符号対応表作成部203からの1バイト符号対応表、及び、2バイト符号対応表作成部204からの2バイト符号対応表に基づき、読み出し制御部202から、1バイトずつ供給される符号値の系列を、シンボル値(の系列)に復号する復号処理を行い、復号処理によって得られるシンボル値を、記憶部206に供給する。
すなわち、復号部205は、1バイト符号数X、及び1バイト符号対応表、さらには、必要に応じて、2バイト符号対応表を参照し、読み出し制御部202から、1バイトずつ供給される符号値の系列における、1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、1バイトのシンボル値に復号する。
また、復号部205は、1バイト符号の符号値のうちの特定値0xFFを、シンボル値0x0000の2個の連続に復号する。さらに、復号部205は、4バイト符号の符号値を、下位1バイトが表す個数だけのシンボル値0x0000の連続に復号する。
記憶部206は、復号部205から供給されるシンボル値を順次記憶することにより、元の対象データを再構成して出力する。
次に、図14のフローチャートを参照して、図13の伸張装置103が行う伸張処理について説明する。
圧縮データ(図6)が、記憶部201に供給され、記憶部201が、そこに供給される圧縮データを記憶すると、伸張装置103は、伸張処理を開始する。
すなわち、伸張処理では、ステップS201において、読み出し制御部202は、記憶部201に記憶された圧縮データにおける先頭の1バイトの1バイト符号数X(図6)を読み出し、1バイト符号対応表作成部203、2バイト符号対応表作成部204、及び復号部205に供給して、処理は、ステップS202に進む。
ステップS202では、読み出し制御部202は、記憶部201に記憶された圧縮データにおける、1バイト符号数Xの直後の2×Xバイトの1バイト符号情報(図6)を読み出し、1バイト符号対応表作成部203に供給して、処理は、ステップS203に進む。
ステップS203では、1バイト符号対応表作成部203は、読み出し制御部202からの1バイト符号数Xと1バイト符号情報とを用い、図4で説明した1バイト符号対応表を復元することにより作成して、復号部205に供給し、処理は、ステップS204に進む。
ステップS204では、読み出し制御部202は、記憶部201に記憶された圧縮データにおける、1バイト符号情報の直後の8kバイトの2バイト符号情報(図6)を読み出し、2バイト符号対応表作成部204に供給して、処理は、ステップS205に進む。
ステップS205では、2バイト符号対応表作成部204は、読み出し制御部202からの1バイト符号数Xと2バイト符号情報とを用い、図4で説明した2バイト符号対応表、すなわち、0xFD-X+1個の2バイト符号対応表#X,#X+1,・・・,#0xFDを復元することにより作成して、復号部205に供給し、処理は、ステップS206に進む。
ステップS206では、読み出し制御部202が、記憶部201に記憶された圧縮データにおける、2バイト符号情報の直後のボディ部に配置された符号値の系列を、1バイトずつ読み出して、復号部205に供給し、復号部205が、読み出し制御部202からの1バイト符号数X、1バイト符号対応表作成部203からの1バイト符号対応表、及び、2バイト符号対応表作成部204からの2バイト符号対応表に基づき、読み出し制御部202から、1バイトずつ供給される符号値の系列を、シンボル値に復号する復号処理を行う。そして、記憶部206が、復号部205の復号処理によって得られるシンボル値を順次記憶することにより、元の対象データを再構成して出力し、処理は、終了する。
次に、図15のフローチャートを参照して、復号部205が行う復号処理を含む、図14のステップS206の処理の詳細について説明する。
ステップS221において、読み出し制御部202は、記憶部201に記憶された圧縮データにおいて、まだ読み出していない、より先頭側に位置する1バイトを、注目バイトαとして読み出し、復号部205に供給して、処理は、ステップS222に進む。
ステップS222では、復号部205は、読み出し制御部202から注目バイトαが、特定値0xFFであるかどうかを判定する。
ステップS222において、注目バイトαが特定値0xFFであると判定された場合、処理は、ステップS223に進み、復号部205は、注目バイトαである特定値0xFFを、シンボル値0x0000の2個の連続に復号し、すなわち、復号結果として、値0x0000を2つだけ連続して出力し、記憶部206に供給して記憶させる。
一方、ステップS222において、注目バイトαが特定値0xFFでないと判定された場合、処理は、ステップS224に進み、復号部205は、注目バイトαが符号値0xFEであるかどうかを判定する。
ステップS224において、注目バイトαが符号値0xFEであると判定された場合、すなわち、注目バイトαが、3バイト符号の上位1バイトのプリフィクス0xFEであるか、又は、4バイト符号の上位3バイトのプリフィクス0xFE,0x00,0x00のうちの上位1バイトである場合、処理は、ステップS225に進み、読み出し制御部202は、記憶部201に記憶された圧縮データにおいて、注目バイトαの次に位置する1バイトβと、さらに次に位置する1バイトγとの2バイトを読み出し、復号部205に供給して、処理は、ステップS226に進む。
ステップS226では、復号部205が、読み出し制御部202からの1バイトβが値0x00であり、かつ、読み出し制御部202からの1バイトγが値0x00であるかどうかを判定する。
ステップS226において、バイトβ又はγのうちの少なくとも一方が、値0x00でないと判定された場合、すなわち、注目バイトα、その次の1バイトβ、及びさらに次の1バイトγの3バイトが、4バイト符号の上位3バイトのプリフィクス0xFE,0x00,0x00を構成しておらず、したがって、注目バイトα、その次の1バイトβ、及びさらに次のバイトγの3バイトが3バイト符号である場合、処理は、ステップ227に進み、復号部205は、注目バイトα、その次の1バイトβ、及びさらに次の1バイトγの3バイトからなる3バイト符号を、バイトβとγに復号し、すなわち、復号結果として、バイトβとγを順次出力し、記憶部206に供給して記憶させる。
また、ステップS226において、バイトβ及びγが、いずれも、値0x00であると判定された場合、すなわち、注目バイトα、その次の1バイトβ、及びさらに次の1バイトγの3バイトが、4バイト符号の上位3バイトのプリフィクス0xFE,0x00,0x00を構成し、したがって、注目バイトα、バイトβ、及びバイトγの3バイトに、バイトγの次の1バイトδを加えた4バイトが、4バイト符号を構成している場合、処理は、ステップ228に進み、読み出し制御部202は、記憶部201に記憶された圧縮データにおいて、バイトγの次に位置する1バイトδを読み出し、復号部205に供給して、処理は、ステップS229に進む。
ステップS229では、復号部205は、注目バイトα、バイトβ,γ,δの4バイト符号を、シンボル値0x0000のδ個の連続に復号し、すなわち、復号結果として、値0x0000をδ個だけ連続して出力し、記憶部206に供給して記憶させる。
一方、ステップS224において、注目バイトαが符号値0xFEでないと判定された場合、すなわち、注目バイトαが、特定値0xFF、及びプリフィクス0xFEのいずれでもない場合、処理は、ステップS230に進み、復号部205は、注目バイトαが、読み出し制御部202からステップS201(図14)で供給された1バイト符号数Xより小さいかどうかを判定する。
ステップS230において、注目バイトαが、1バイト符号数Xより小さいと判定された場合、すなわち、注目バイトαが、値X-1以下の値、つまり、1バイト符号の符号値である場合、処理は、ステップS231に進み、復号部205は、1バイト符号である注目バイトαを、1バイト符号対応表作成部203からステップS203(図14)で供給された1バイト符号対応表で対応付けられているシンボル値に復号し、すなわち、復号結果として、1バイト符号対応表において、注目バイトαに対応付けられているシンボル値を出力し、記憶部206に供給して記憶させる。
また、ステップS230において、注目バイトαが、1バイト符号数Xより小さくないと判定された場合、すなわち、注目バイトαと、その次の1バイトεとの2バイトが、2バイト符号を構成している場合、処理は、ステップ232に進み、読み出し制御部202は、記憶部201に記憶された圧縮データにおいて、注目バイトαの次に位置する1バイトεを読み出し、復号部205に供給して、処理は、ステップS233に進む。
ステップS233では、復号部205は、2バイト符号である注目バイトαと次の1バイトεとを、2バイト符号対応表作成部204からステップS205(図14)で供給された2バイト符号対応表で対応付けられているシンボル値に復号する。
すなわち、図14で説明したように、2バイト符号対応表作成部204は、ステップS205において、0xFD-X+1個の2バイト符号対応表#X,#X+1,・・・,#0xFD(図4)を、復号部205に供給する。
復号部205は、ステップS233において、2バイト符号対応表作成部204からの0xFD-X+1個の2バイト符号対応表#Xないし#0xFD(図4)のうちの、注目バイトαに対応する2バイト符号対応表#αを選択し、その2バイト符号対応表#αにおいて、注目バイトαと次の1バイトεとからなる2バイト符号の下位1バイトεと対応付けられているシンボル値を、復号結果として出力し、記憶部206に供給して記憶させる。
ステップS223,S227,S229,S231、又はS233の後、処理は、ステップS234に進み、読み出し制御部202は、記憶部201に記憶された圧縮データすべてを読み出したかどうかを判定する。
ステップS234において、記憶部201に記憶された圧縮データすべてを、まだ、読み出していないと判定された場合、処理は、ステップS221に戻り、読み出し制御部202は、記憶部201に記憶された圧縮データにおいて、まだ読み出していない、より先頭側に位置する1バイトを、注目バイトαとして読み出して、復号部205に供給し、以下、同様の処理が繰り返される。
また、ステップS234において、記憶部201に記憶された圧縮データすべてを読み出したと判定された場合、すなわち、記憶部206に、記憶部201に記憶された圧縮データを伸張した対象データが記憶された場合、処理は、リターンする。
以上のように、圧縮装置101において、対象データを、2バイト単位で、符号化の対象であるシンボルとして、シンボル値の出現頻度を算出し、出現頻度が上位のシンボル値を1バイト符号に、出現頻度が次に上位のシンボル値を2バイト符号に、残りのシンボル値を3バイト符号に、シンボル値0x0000の2個の連続を1バイトの特定値0xFFに、それぞれ符号化する符号化処理を行うので、伸張装置103では、その符号化処理で得られる符号値の系列のうちの、1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、2バイトのシンボル値に復号し、特定値0xFFを、0x0000の2個の連続に復号する復号処理を行うことで、圧縮データを元の対象データに伸張することができる。
すなわち、伸張装置103では、圧縮データを、バイト単位で扱い、ビット演算をすることなく、伸張処理をすることができる。したがって、ビット演算を要する伸張処理を行う場合に比較して、処理の負荷が小さく、処理に要する時間を短縮することができる。つまり、圧縮データを、元の対象データに、高速に伸張することができる。
ここで、以下、適宜、圧縮装置101による圧縮の方式、及び、伸張装置103による伸張の方式を、バイト方式という。
図16は、32ビット固定長の命令セットで記述されたプログラムを対象データとして、その対象データを、バイト方式と、gzip(GNU zip)方式とのそれぞれで圧縮した圧縮データを伸張したシミュレーションの結果を示している。
なお、シミュレーションは、伸張処理を行うプロセッサとして、2つのCPU#1と#2それぞれを用いて行った。
圧縮データのデータ量は、図16に示すように、バイト方式では、2492327であり、gzip方式では、1460510になった。したがって、バイト方式は、gzip方式と比較して、圧縮率が多少劣る。
一方、伸張処理に要する時間は、図16に示すように、バイト方式では、CPU#1による場合は0.080で、CPU#2による場合は0.80であり、gzip方式では、CPU#1による場合は0.130で、CPU#2による場合は1.53であった。したがって、バイト方式は、gzip方式と比較して、伸張処理に要する時間が格段に短い。
以上から、バイト方式は、圧縮率は多少劣るものの、圧縮データを、高速に伸張することができることが分かる。
次に、図17は、本発明を適用したTVの一実施の形態の構成例を示している。
図17において、TVは、バス11を介して相互に接続されているCPU12,ROM(Read Only Memory)13,RAM(Random Access Memory)14、HD(Hard Disk)(HDドライブ)15、不揮発性メモリ16、ドライブ17、受信部19、チューナ21、デスクランブラ22、デマルチプレクサ(Demux)23、デコーダ24、出力制御部25、および出力装置26から構成されている。
CPU12は、ROM13や、HD15、不揮発性メモリ16に記憶されたプログラムをバス11を介して読み出して実行することにより、TVを構成する各ブロックを制御する。
ROM13は、CPU12が実行するプログラム等を記憶している。RAM14は、CPU12が実行するプログラムや、CPU12の動作上必要なデータを一時的に記憶する。HD15には、CPU12が実行するプログラムや、プログラムを実行する上で必要なデータ等が記録される。
不揮発性メモリ16は、例えば、TVの電源がオフにされても保持する必要のあるデータを記憶する。ここで、TVの電源がオフにされても保持する必要のあるデータとしては、例えば、電源がオフにされる直前にチューナ21で選択(選局)されていたチャンネルを表すデータや、電源がオフにされる直前の音量を表すデータなどがある。TVの電源が次にオンにされたとき、不揮発性メモリに記憶されたデータに基づき、チャンネルの選択や音量の設定等が行われる。
さらに、不揮発性メモリ16は、CPU12が実行する各種のプログラムを記憶する。図17では、ブートローダ、OS(Operating System)、その他のアプリケーションプログラムが、不揮発性メモリ16に記憶されている。
ここで、不揮発性メモリ16において、ブートローダは、圧縮せずに記憶されているが、OS、及びアプリケーションプログラムは、バイト方式で圧縮され、圧縮データの状態で記憶されている。また、ブートローダは、CPU12を、図13の伸張装置として機能させるプログラムを含んでいる。
なお、不揮発性メモリ16は、その他、例えば、デスクランブラ22でのデスクランブルに使用される鍵などのデータも必要に応じて記憶する。
ドライブ17には、例えば、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory),MO(Magneto Optical)ディスク,DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体18の着脱が可能になっている。ドライブ17は、そこに装着されたリムーバブル記録媒体18に対するデータ等の読み書きを行う。
受信部19は、リモートコマンダ31から赤外線等によって送信されてくる操作信号を受信する。即ち、リモートコマンダ31は、ユーザによって操作されると、その操作に対応した操作信号を、例えば赤外線等の無線によって送信するようになっており、受信部19は、このようにしてリモートコマンダ31から送信されてくる操作信号を受信し、バス11を介して、CPU12に供給する。ここで、CPU12は、受信部19からの操作信号に応じて、チューナ21によるチャンネルの選択等を制御する。
チューナ21には、図示せぬアンテナで受信されたディジタル放送の放送信号が供給される。チューナ21は、バス11を介してのCPU12の制御にしたがい、そこに供給される放送信号から所望のチャンネルの放送信号を復調し、その復調の結果得られるパケット(の列)を、デスクランブラ22に供給する。
デスクランブラ22は、バス11を介してのCPU12の制御にしたがい、チューナ21から供給されるパケットにスクランブルがかけられている場合に、そのスクランブルを解くデスクランブルを必要に応じて行い、そのデスクランブル後のパケットを、デマルチプレクサ23に供給する。
デマルチプレクサ23は、バス11を介してのCPU12の制御にしたがい、デスクランブラ22から供給されるパケット(の列)から、必要なパケットを抽出し、画像データを含むパケットと音声データを含むパケットを、デコーダ24に供給するとともに、データ放送のデータを含むパケットを、バス11を介してCPU12に供給する。
デコーダ24は、ビデオデコーダ24Vとオーディオデコーダ24Aとを有し、バス11を介してのCPU12の制御にしたがい、デマルチプレクサ23からのパケットに含まれるデータを、例えば、MPEG(Moving Picture Experts Group)方式等にしたがってデコードして、出力制御部25に供給する。
即ち、デコーダ24において、ビデオデコーダ24Vは、デマルチプレクサ23からのパケットに含まれる画像データをデコードし、出力制御部25の出力画像制御部25Vに供給する。また、オーディオデコーダ24Aは、デマルチプレクサ23からのパケットに含まれる音声データをデコードし、出力制御部25の出力音声制御部25Aに供給する。
出力制御部25は、出力画像制御部25Vと出力音声制御部25Aとを有し、バス11を介してのCPU12の制御にしたがい、出力装置26への画像データと音声データの出力を制御する。
即ち、出力画像制御部25Vは、バス11を介してのCPU12の制御にしたがい、ビデオデコーダ24Vからの画像データを処理して、出力装置26の画像表示装置26Vに供給する。
出力音声制御部25Aは、バス11を介してのCPU12の制御にしたがい、オーディオデコーダ24Aからの音声データのレベルの調整等を行って、出力装置26の音声出力装置26Aに供給する。
出力装置26は、画像表示装置26Vと音声出力装置26Aとを有し、出力制御部25からの画像データに対応する画像を表示するとともに、出力制御部25からの音声データに対応する音声を出力する。
即ち、画像表示装置26Vは、例えば、CRT(Cathode Ray Tube)やLCD(Liquid Crystal Display)等のディスプレイで構成され、出力画像制御部25Vからの画像データに対応する画像を表示する。
音声出力装置26Aは、例えば、D/A(Digital/Analog)変換器とスピーカ等で構成され、出力音声制御部25Aからの音声データに対応する音声を出力する。
以上のように構成されるTVでは、TVの電源がオンにされると、CPU12が、不揮発性メモリ16に記憶されたブートローダを実行する。CPU12は、ブートローダを実行することにより、図13の伸張装置103として機能して、復号処理を含む図14で説明した処理を行うことにより、圧縮データとなっているOS、及び必要なアプリケーションプログラムを伸張し、そのOS、さらには、必要なアプリケーションプログラムを実行して、TVは起動状態となる。
TVが起動状態となると、チューナ21が、そこに供給される放送信号から所望のチャンネルの放送信号を復調し、その復調の結果得られるパケットを、デスクランブラ22に供給する。デスクランブラ22は、チューナ21から供給されるパケットに対し、必要に応じて、デスクランブル処理を施し、デマルチプレクサ23に供給する。
デマルチプレクサ23は、デスクランブラ22から供給されるパケットから、必要なパケットを抽出し、画像データを含むパケットをビデオデコーダ24Vに、音声データを含むパケットをオーディオデコーダ24Aに、データ放送のデータを含むパケットをCPU12に、それぞれ供給する。
ビデオデコーダ24Vは、デマルチプレクサ23からのパケットに含まれる画像データをデコードし、出力画像制御部25Vに供給する。オーディオデコーダ24Aは、デマルチプレクサ23からのパケットに含まれる音声データをデコードし、出力音声制御部25Aに供給する。
出力画像制御部25Vは、所定の画面モードで画像が表示されるように、ビデオデコーダ24Vからの画像データを処理し、画像表示装置26Vに供給する。これにより、画像表示装置26Vでは、画像が表示される。
また、出力音声制御部25Aは、オーディオデコーダ24Aからの音声データを処理し、音声出力装置26Aに供給する。これにより、音声出力装置26Aでは、音声が出力される。
上述したように、バイト方式の伸張処理は高速に行うことができるので、電源がオンにされてから、TVが起動状態となるまでの起動時間が短くなり、ユーザに煩わしさを感じさせることを防止することができる。
ここで、CPU12に実行させるプログラムは、ROM13や、HD15、不揮発性メモリ16に予め記録しておくことができる他、リムーバブル記録媒体18に、一時的あるいは永続的に格納(記録)し、いわゆるパッケージソフトウエアとして提供することができる。
また、プログラムは、上述したようなリムーバブル記録媒体18からTVにインストールする他、ダウンロードサイトから、ディジタル衛星放送用の人工衛星を介して、TVに無線で転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、TVに有線で転送し、TVでは、そのようにして転送されてくるプログラムを、図示せぬ通信インタフェースで受信し、内蔵するハードディスク15や不揮発性メモリ16にインストールすることができる。
ここで、本明細書において、コンピュータとしてのCPU12に各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしも、後述するフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理(例えば、並列処理あるいはオブジェクトによる処理)も含むものである。
また、プログラムは、1つのCPUにより処理されるものであっても良いし、複数のCPUによって分散処理されるものであっても良い。
さらに、バイト方式の圧縮処理も、バイト方式の伸張処理と同様に、CPU12を圧縮装置101として機能させるプログラムを、CPU12に実行させることによって行うことが可能である。
なお、バイト方式は、TVの他、例えば、STB(Set Top Box)等の、いわゆるディジタル家電その他の電気製品のブートローダで利用することができる。
また、バイト方式は、ブートローダの他、圧縮率を多少犠牲にしても、圧縮したプログラムその他のデータを高速に伸張することを優先したい用途に、特に有用である。
ここで、不揮発性メモリの記憶容量は、一般に、8MB(Mega Byte), 16MB, 32MB, ・・・といった2の累乗の値である。したがって、プログラム等を圧縮して、不揮発性メモリに記憶させる場合において、圧縮したプログラム等のサイズが、例えば、9MBであっても、16MBであっても、そのプログラム等を記憶させるには、16MBの不揮発性メモリが必要となる。
つまり、圧縮率は高いが、伸張にビット演算が必要な従来の圧縮方式で圧縮したプログラム等のサイズが、例えば、9MBである場合において、バイト方式で圧縮したプログラム等のサイズが、9MBよりも多少大きい、例えば、10MBや11MB等となっても、プログラム等を記憶させるためには、16MBの不揮発性メモリが必要となることに変わりはない。したがって、バイト方式は、圧縮率を多少犠牲にするが、そのことに起因して、圧縮後のプログラム等を記憶させるのに、必ずしも、容量の大きい不揮発性メモリが必要になるとは限らない。
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
すなわち、例えば、本実施の形態では、対象データとして、32ビット固定長の命令セットで記述されたプログラムを採用したが、対象データとしては、その他、32ビット固定長の命令セットで記述されたプログラムのように、シンボル長を2バイトとした場合に、1個のシンボル値0x0000の出現頻度が高く、かつ、シンボル値0x0000の2個の連続の出現頻度も高い性質を有するデータを採用することができる。
本発明を適用した圧縮伸張システムの一実施の形態の構成例を示すブロック図である。 プログラムにおける各シンボル値の出現頻度の累積値(累積頻度)を示す図である。 プログラムにおける1個のシンボル値0x0000の出現頻度と、シンボル値0x0000が複数個だけ連続することが出現する出現頻度とを調査した調査結果を示す図である。 1バイト符号対応表と2バイト符号対応表とを示す図である。 圧縮装置101の構成例を示すブロック図である。 圧縮データのフォーマットを示す図である。 圧縮処理を説明するフローチャートである。 シンボル値の出現頻度を算出する処理を説明するフローチャートである。 シンボル出現頻度表を示す図である。 符号化処理を説明するフローチャートである。 シンボル値0x0000の符号化の処理を説明するフローチャートである。 値0x0000以外の値のシンボル値の符号化の処理を説明するフローチャートである。 伸張装置103の構成例を示すブロック図である。 伸張処理を説明するフローチャートである。 復号処理を説明するフローチャートである。 シミュレーションの結果を示す図である。 本発明を適用したTVの一実施の形態の構成例を示すブロック図である。
符号の説明
11 バス, 12 CPU, 13 ROM, 14 RAM, 15 HD, 16 不揮発性メモリ, 17 ドライブ, 18 リムーバブル記録媒体, 19 受信部, 21
チューナ, 22 デスクランブラ, 23 デマルチプレクサ, 24 デコーダ,
24A オーディオデコーダ, 24V ビデオデコーダ, 25 出力制御部, 25A 出力音声制御部, 25V 出力画像制御部, 26 出力装置, 26A 音声出力装置, 26V 画像表示装置, 31 リモートコマンダ, 101 圧縮装置, 102 提供媒体, 103 伸張装置, 121 記憶部, 122 出現頻度算出部, 123 1バイト符号数算出部, 124 1バイト符号対応表作成部, 125 2バイト符号対応表作成部, 126 符号化部, 127 ヘッダ生成部, 128 記憶部, 129 圧縮データ生成部, 201 記憶部, 202 読み出し制御部, 203 1バイト符号対応表作成部, 204 2バイト符号対応表作成部, 205 復号部, 206 記憶部

Claims (16)

  1. データを圧縮して圧縮データを出力するデータ処理装置において、
    圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出する出現頻度算出手段と、
    前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
    前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
    前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
    前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
    符号化処理を行う符号化手段と
    を備えるデータ処理装置。
  2. 前記1バイト符号の256個の符号値のうちの、前記特定値と、前記3バイト符号の符号値のプリフィクスとなる1バイトの値とを除く254個の符号値の中で、出現頻度が上位のシンボル値を割り当てる符号値の数である1バイト符号数を、X個とする場合において、
    前記符号化手段は、
    2バイトのシンボル値である65536個のシンボル値のうちの、出現頻度が上位X番目までの各シンボル値を、前記1バイト符号に符号化し、
    前記65536個のシンボル値のうちの、出現頻度が、次に上位の(254-X)×256個の各シンボル値を、前記2バイト符号に符号化し、
    残りの65536-X-(254-X)×256個の各シンボル値を、前記3バイト符号に符号化し、
    前記1バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和から、前記3バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和を減算した減算値を最大にするXを、前記1バイト符号数として算出する1バイト符号数算出手段をさらに備える
    請求項1に記載のデータ処理装置。
  3. 出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる前記1バイト符号のX個の符号値とを対応付ける1バイト符号対応表を作成する1バイト符号対応表作成手段と、
    出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる前記2バイト符号の(254-X)×256個の符号値とを対応付ける2バイト符号対応表を作成する2バイト符号対応表作成手段と
    をさらに備え、
    前記符号化手段は、
    前記1バイト符号対応表において前記1バイト符号の符号値に対応付けられているシンボル値を、そのシンボル値に対応付けられている符号値に符号化し、
    前記2バイト符号対応表において前記2バイト符号の符号値に対応付けられているシンボル値を、そのシンボル値に対応付けられている符号値に符号化する
    請求項2に記載のデータ処理装置。
  4. 前記1バイト符号数Xと、前記1バイト符号対応表を作成するのに必要な1バイト符号情報と、前記2バイト符号対応表を作成するのに必要な2バイト符号情報とを含むヘッダ情報を生成するヘッダ生成手段と、
    前記ヘッダ情報と、前記対象データをシンボル単位で符号化した符号値の系列とからなる前記圧縮データを生成する圧縮データ生成手段と
    をさらに備える請求項3に記載のデータ処理装置。
  5. 前記1バイト符号情報は、前記1バイト符号対応表において、前記1バイト符号の符号値に対応付けられているX個のシンボル値であり、
    前記2バイト符号情報は、前記65536個の各シンボル値が、前記2バイト符号対応表において、前記2バイト符号の符号値に対応付けられているかどうかを表す情報である
    請求項4に記載のデータ処理装置。
  6. 前記対象データは、コンピュータが実行可能なプログラムである
    請求項1に記載のデータ処理装置。
  7. データを圧縮して圧縮データを出力するデータ処理方法において、
    圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
    前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
    前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
    前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
    前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
    符号化処理を行う
    ステップを含むデータ処理方法。
  8. データを圧縮して圧縮データを出力するデータ処理装置として、コンピュータを機能させるためのプログラムにおいて、
    圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出する出現頻度算出手段と、
    前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
    前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
    前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
    前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
    符号化処理を行う符号化手段と
    して、コンピュータを機能させるためのプログラム。
  9. データを圧縮して得られる圧縮データを伸張するデータ処理装置において、
    前記圧縮データは、
    圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
    前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
    前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
    前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
    前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
    ことにより得られる、符号値の系列を含み、
    前記符号値の系列のうちの、前記1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、2バイトのシンボル値に復号し、
    前記符号値の系列のうちの前記特定値を、値0x0000の2個の連続に復号する
    復号処理を行う復号手段を備える
    データ処理装置。
  10. 前記1バイト符号の256個の符号値のうちの、前記特定値と、前記3バイト符号の符号値のプリフィクスとなる1バイトの値とを除く254個の符号値の中で、出現頻度が上位のシンボル値を割り当てる符号値の数である1バイト符号数を、X個として、
    2バイトのシンボル値である65536個のシンボル値のうちの、出現頻度が上位X番目までの各シンボル値が、前記1バイト符号に符号化され、
    前記65536個のシンボル値のうちの、出現頻度が、次に上位の(254-X)×256個の各シンボル値が、前記2バイト符号に符号化され、
    残りの65536-X-(254-X)×256個の各シンボル値が、前記3バイト符号に符号化されており、
    前記1バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和から、前記3バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和を減算した減算値を最大にするXが、前記1バイト符号数とされている場合において、
    前記圧縮データは、
    1バイト符号数Xと、
    出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる前記1バイト符号のX個の符号値とを対応付ける1バイト符号対応表を作成するのに必要な1バイト符号情報と、
    出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる前記2バイト符号の(254-X)×256個の符号値とを対応付ける2バイト符号対応表を作成するのに必要な2バイト符号情報と
    をさらに含み、
    前記1バイト符号対応表を作成する1バイト符号対応表作成手段と、
    前記2バイト符号対応表を作成する2バイト符号対応表作成手段と
    をさらに備え、
    前記復号手段は、
    前記1バイト符号対応表において前記シンボル値に対応付けられている前記1バイト符号の符号値を、その符号値に対応付けられているシンボル値に復号し、
    前記2バイト符号対応表において前記シンボル値に対応付けられている前記2バイト符号の符号値を、その符号値に対応付けられているシンボル値に復号する
    請求項9に記載のデータ処理装置。
  11. 前記1バイト符号情報は、前記1バイト符号対応表において、前記1バイト符号の符号値に対応付けられているX個のシンボル値であり、
    前記2バイト符号情報は、前記65536個の各シンボル値が、前記2バイト符号対応表において、前記2バイト符号の符号値に対応付けられているかどうかを表す情報である
    請求項10に記載のデータ処理装置。
  12. 前記対象データは、コンピュータが実行可能なプログラムである
    請求項9に記載のデータ処理装置。
  13. 電源がオンにされたとき、
    前記復号手段は、前記復号処理を行い、
    前記復号処理によって得られるプログラムを実行する
    請求項12に記載のデータ処理装置。
  14. データを圧縮して得られる圧縮データを伸張するデータ処理方法において、
    前記圧縮データは、
    圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
    前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
    前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
    前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
    前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
    ことにより得られる、符号値の系列を含み、
    前記符号値の系列のうちの、前記1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、2バイトのシンボル値に復号し、
    前記符号値の系列のうちの前記特定値を、値0x0000の2個の連続に復号する
    復号処理を行う
    ステップを含むデータ処理方法。
  15. データを圧縮して得られる圧縮データを伸張するデータ処理装置として、コンピュータを機能させるためのプログラムにおいて、
    前記圧縮データは、
    圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
    前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化し、
    前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化し、
    前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化し、
    前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
    ことにより得られる、符号値の系列を含み、
    前記符号値の系列のうちの、前記1バイト符号、2バイト符号、又は3バイト符号それぞれの符号値を、2バイトのシンボル値に復号し、
    前記符号値の系列のうちの前記特定値を、値0x0000の2個の連続に復号する
    復号処理を行う復号手段
    として、コンピュータを機能させるためのプログラム。
  16. データを圧縮して得られる圧縮データのデータ構造において、
    前記圧縮データは、圧縮の対象のデータである対象データを、2バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値を符号化した符号を含むデータであり、
    前記対象データにおける出現頻度が上位のシンボル値を、1バイトの符号である1バイト符号に符号化した符号値と、
    前記対象データにおける出現頻度が次に上位のシンボル値を、2バイトの符号である2バイト符号に符号化した符号値と、
    前記対象データにおける残りのシンボル値を、3バイトの符号である3バイト符号に符号化した符号値と、
    前記対象データにおけるシンボル値のうちの、値0x0000の2個の連続を、前記1バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化した、前記特定値である符号値と
    を含むデータ構造。
JP2007063863A 2007-03-13 2007-03-13 データ処理装置、データ処理方法、プログラム、及びデータ構造 Withdrawn JP2008227949A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007063863A JP2008227949A (ja) 2007-03-13 2007-03-13 データ処理装置、データ処理方法、プログラム、及びデータ構造

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007063863A JP2008227949A (ja) 2007-03-13 2007-03-13 データ処理装置、データ処理方法、プログラム、及びデータ構造

Publications (1)

Publication Number Publication Date
JP2008227949A true JP2008227949A (ja) 2008-09-25

Family

ID=39846018

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007063863A Withdrawn JP2008227949A (ja) 2007-03-13 2007-03-13 データ処理装置、データ処理方法、プログラム、及びデータ構造

Country Status (1)

Country Link
JP (1) JP2008227949A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010279496A (ja) * 2009-06-03 2010-12-16 Fujifilm Corp データ転送システム、送信装置、受信装置、放射線画像転送システム、および放射線画像診断システム
WO2013132590A1 (ja) * 2012-03-06 2013-09-12 富士通株式会社 プログラム、情報処理装置およびデータ生成方法
WO2016140071A1 (ja) * 2015-03-03 2016-09-09 ソニー株式会社 圧縮符号化装置、圧縮符号化方法、復号装置、復号方法、およびプログラム
CN112417815A (zh) * 2020-11-18 2021-02-26 红有软件股份有限公司 一种大数据处理中类别组合数据的动态编码方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010279496A (ja) * 2009-06-03 2010-12-16 Fujifilm Corp データ転送システム、送信装置、受信装置、放射線画像転送システム、および放射線画像診断システム
WO2013132590A1 (ja) * 2012-03-06 2013-09-12 富士通株式会社 プログラム、情報処理装置およびデータ生成方法
WO2016140071A1 (ja) * 2015-03-03 2016-09-09 ソニー株式会社 圧縮符号化装置、圧縮符号化方法、復号装置、復号方法、およびプログラム
CN107431492A (zh) * 2015-03-03 2017-12-01 索尼公司 压缩编码设备、压缩编码方法、解码设备、解码方法和程序
JPWO2016140071A1 (ja) * 2015-03-03 2017-12-14 ソニー株式会社 圧縮符号化装置、圧縮符号化方法、復号装置、復号方法、およびプログラム
US10193565B2 (en) 2015-03-03 2019-01-29 Sony Corporation Compressive encoding apparatus, compressive encoding method, decoding apparatus, decoding method, and program
CN112417815A (zh) * 2020-11-18 2021-02-26 红有软件股份有限公司 一种大数据处理中类别组合数据的动态编码方法
CN112417815B (zh) * 2020-11-18 2024-01-23 红有软件股份有限公司 一种大数据处理中类别组合数据的动态编码方法

Similar Documents

Publication Publication Date Title
RU2682009C2 (ru) Способ и устройство для кодирования и декодирования исходных данных с использованием сжатия символов
JP5583106B2 (ja) データデコーディング
US5604498A (en) Huffman decoder
US7817864B2 (en) Coding apparatus and decoding apparatus
US6008745A (en) Variable length decoding using lookup tables
US20030085822A1 (en) High performance memory efficient variable-length coding decoder
US8350735B2 (en) Method for coding and an apparatus
CN1262837A (zh) 产生和处理广播的节目专用信息中使用的文本数据的系统
US5818368A (en) Method and apparatus for lossless digital data compression
CN1262839A (zh) 适于地面、有线或卫星广播的节目专用信息产生和处理系统
US7590832B2 (en) Information processing device, compressed program producing method, and information processing system
JP2008227949A (ja) データ処理装置、データ処理方法、プログラム、及びデータ構造
JP4098187B2 (ja) 可変長コード復号化装置及び方法
JPH1065549A (ja) 可変長符号化データ値の長さを決定する装置、可変長符号化データ値のデータストリームを復号化する装置および可変長符号化データ値の長さを決定する方法
TW200937875A (en) Compression system for a bit-plane
EP0708565A2 (en) Variable-length decoding apparatus using relative addressing
CN105306067A (zh) 算术编码的方法和设备
US6748520B1 (en) System and method for compressing and decompressing a binary code image
JP2002141806A (ja) 可変長符号復号装置
US11831886B2 (en) Methods, apparatuses, computer programs and computer-readable media for processing configuration data
US20170064321A1 (en) System and method for decoding a video digital data stream using a table of range values and probable symbols
CN109565598A (zh) 用于动态地拼接视频流的系统和方法
JP3429623B2 (ja) 高速可変長符号復号化装置
KR101541869B1 (ko) 가변길이코딩을 이용한 인코딩 방법, 디코딩 방법, 및 그 시스템
Bruns et al. Sample-parallel execution of EBCOT in fast mode

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20100601