(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-05-22
(45)【発行日】2025-05-30
(54)【発明の名称】データ圧縮装置、データ復号装置、データ復号方法及びデータ復号プログラム
(51)【国際特許分類】
H03M 7/40 20060101AFI20250523BHJP
【FI】
H03M7/40
(21)【出願番号】P 2021014285
(22)【出願日】2021-02-01
【審査請求日】2024-01-10
(73)【特許権者】
【識別番号】000006013
【氏名又は名称】三菱電機株式会社
(74)【代理人】
【識別番号】100095407
【氏名又は名称】木村 満
(74)【代理人】
【氏名又は名称】八島 耕司
(74)【代理人】
【識別番号】100147924
【氏名又は名称】美恵 英樹
(74)【代理人】
【識別番号】100148149
【氏名又は名称】渡邉 幸男
(74)【代理人】
【識別番号】100181618
【氏名又は名称】宮脇 良平
(74)【代理人】
【識別番号】100174388
【氏名又は名称】龍竹 史朗
(72)【発明者】
【氏名】今川 正則
【審査官】吉江 一明
(56)【参考文献】
【文献】特開2019-036810(JP,A)
【文献】特開2001-094991(JP,A)
【文献】特開平08-079719(JP,A)
【文献】米国特許第10168909(US,B1)
【文献】特開平07-225667(JP,A)
【文献】特開2011-114525(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H03M 7/40
(57)【特許請求の範囲】
【請求項1】
現在の着目位置からの文字列が、予め定めた範囲において以前に出現した文字列と一致しているか否かを検索し、一致する文字列を発見した場合に、発見した文字列の位置を示す発見位置と、当該一致する文字列の長さを示す一致文字列長とを取得し、圧縮していない文字列の長さを示す未圧縮文字列長と、圧縮していない文字から構成される未圧縮文字列と、前記一致文字列長と、前記発見位置とが
、前記未圧縮文字列長、前記未圧縮文字列、前記一致文字列長及び前記発見位置の順に配置されたブロックを生成するデータ圧縮手段を備え、
前記発見位置は、12ビットで示され
、
前記データ圧縮手段によって生成される奇数番目のブロックには、前記未圧縮文字列長と、前記未圧縮文字列と、前記一致文字列長と、前記発見位置とが、前記未圧縮文字列長、前記未圧縮文字列、前記一致文字列長及び前記発見位置の順に配置されており、
前記データ圧縮手段によって生成される偶数番目のブロックには、前記発見位置と、前記未圧縮文字列長と、前記未圧縮文字列と、前記一致文字列長とが、前記発見位置、前記未圧縮文字列長、前記未圧縮文字列及び前記一致文字列長の順に配置されている、データ圧縮装置。
【請求項2】
現在の着目位置からの文字列が、予め定めた範囲において以前に出現した文字列と一致しているか否かを検索し、一致する文字列を発見した場合に、発見した文字列の位置を示す発見位置と、当該一致する文字列の長さを示す一致文字列長とを取得し、圧縮していない文字列の長さを示す未圧縮文字列長と、圧縮していない文字から構成される未圧縮文字列と、前記一致文字列長と、前記発見位置とが、前記未圧縮文字列長、前記未圧縮文字列、前記一致文字列長及び前記発見位置の順に配置されたブロックを生成するデータ圧縮手段を備え、
前記発見位置は、12ビットで示され、
前記データ圧縮手段は、圧縮していない文字列の長さが予め定めた上限に達した場合、前記未圧縮文字列長と、前記未圧縮文字列と、前記一致文字列長とが
、前記未圧縮文字列長、前記未圧縮文字列及び前記一致文字列長の順に配置されたブロックを生成する
、データ圧縮装置。
【請求項3】
現在の着目位置からの文字列が、予め定めた範囲において以前に出現した文字列と一致しているか否かを検索し、一致する文字列を発見した場合に、発見した文字列の位置を示す発見位置と、当該一致する文字列の長さを示す一致文字列長とを取得し、圧縮していない文字列の長さを示す未圧縮文字列長と、圧縮していない文字から構成される未圧縮文字列と、前記一致文字列長と、前記発見位置とが、前記未圧縮文字列長、前記未圧縮文字列、前記一致文字列長及び前記発見位置の順に配置されたブロックを生成するデータ圧縮手段を備え、前記発見位置は、12ビットで示される、データ圧縮装置によって圧縮されたデータを復号するデータ復号装置であって、
奇数番目のブロックについては、バイト単位で各項目のデータを読み取り、
偶数番目のブロックについては、4ビット演算によって各項目のデータを読み取る、データ復号手段を備える、データ復号装置。
【請求項4】
請求項
1に記載のデータ圧縮装置によって圧縮されたデータを復号するデータ復号装置であって、
前記発見位置については、4ビット演算によってデータを読み取り、
前記発見位置を除く他の項目については、バイト単位でデータを読み取る、データ復号手段を備える、データ復号装置。
【請求項5】
請求項
2に記載のデータ圧縮装置によって圧縮されたデータを復号するデータ復号装置であって、
ブロックの開始がバイト境界に揃っている場合、バイト単位で各項目のデータを読み取り、
ブロックの開始がバイト境界に揃っていない場合、4ビット演算によって各項目のデータを読み取る、データ復号手段を備える、データ復号装置。
【請求項6】
現在の着目位置からの文字列が、予め定めた範囲において以前に出現した文字列と一致しているか否かを検索し、一致する文字列を発見した場合に、発見した文字列の位置を示す発見位置と、当該一致する文字列の長さを示す一致文字列長とを取得し、圧縮していない文字列の長さを示す未圧縮文字列長と、圧縮していない文字から構成される未圧縮文字列と、前記一致文字列長と、前記発見位置とが、前記未圧縮文字列長、前記未圧縮文字列、前記一致文字列長及び前記発見位置の順に配置されたブロックを生成するデータ圧縮方法であって、前記発見位置は、12ビットで示される、データ圧縮方法によって圧縮されたデータを復号する際、
奇数番目のブロックについては、バイト単位で各項目のデータを読み取り、
偶数番目のブロックについては、4ビット演算によって各項目のデータを読み取る、データ復号方法。
【請求項7】
コンピュータを、
現在の着目位置からの文字列が、予め定めた範囲において以前に出現した文字列と一致しているか否かを検索し、一致する文字列を発見した場合に、発見した文字列の位置を示す発見位置と、当該一致する文字列の長さを示す一致文字列長とを取得し、圧縮していない文字列の長さを示す未圧縮文字列長と、圧縮していない文字から構成される未圧縮文字列と、前記一致文字列長と、前記発見位置とが、前記未圧縮文字列長、前記未圧縮文字列、前記一致文字列長及び前記発見位置の順に配置されたブロックを生成するデータ圧縮手段として機能し、前記発見位置は、12ビットで示される、コンピュータで圧縮されたデータを復号する際、
奇数番目のブロックについては、バイト単位で各項目のデータを読み取り、
偶数番目のブロックについては、4ビット演算によって各項目のデータを読み取る、データ復号手段として機能させる、データ復号プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ圧縮装置、データ復号装置、データ復号方法及びデータ復号プログラムに関する。
【背景技術】
【0002】
データ圧縮のアルゴリズムは数多く知られているが、一般的には、1977年に発表されたLZ77の派生アルゴリズムが多用されている。LZ77の派生アルゴリズムとして、2010年代に登場した、1バイト単位で演算することで圧縮及び復号速度を向上させたLZ4が知られており、また、LZ4に関連する技術も種々提案されている(例えば特許文献1)。
【0003】
LZ77系のデータ圧縮では、現在の着目位置からのバイト列と一致するバイト列が、現在の着目位置より前方に存在するか否かを検索し、一致するバイト列を発見した場合、当該バイト列を出力する代わりに、(発見位置、バイト列の長さ)のペアを出力する。コンピュータのリソースは有限であるため、上記の検索範囲には制限がかけられており、現在の着目位置から指定されたバイト長だけ前方の範囲が検索される。
【0004】
LZ77系のデータ圧縮における、この検索範囲は、スライド窓、あるいは、単に窓(ウィンドウ)と呼ばれる。LZ4以前のLZ77系のデータ圧縮では、スライド窓の大きさは、単にアルゴリズムのパラメータに過ぎず、任意の大きさであるが、LZ4では、バイト単位のアクセスに限定したことで、2バイト整数で表現可能な64キロバイトに固定されている。スライド窓の大きさを64キロバイトとすることで、上記の「発見位置」を2バイト整数として出力可能となる。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、組み込み機器で使用されることの多いマイクロコントローラ(以下、マイコンと略称する。)では、スライド窓用に64キロバイトのメモリ容量を確保するのは厳しいという問題がある。一方、LZ4以前のLZ77系のアルゴリズムでは、必要に応じてスライド窓を小さくすることでメモリ容量を減らすことができる。しかしながら、LZ4以前のLZ77系のアルゴリズムでは、1ビット単位での演算が必要となるため、CPU性能の低いマイコンでは処理速度が著しく低下し、採用し難いという問題がある。
【0007】
本開示は、上記問題を解決するためになされたものであり、データ復号時の処理速度の低下を極力抑えつつ、データ圧縮及び復号時に必要なメモリ容量を低減させることが可能なデータ圧縮装置、データ復号装置、データ復号方法及びデータ復号プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するため、本開示に係るデータ圧縮装置は、
現在の着目位置からの文字列が、予め定めた範囲において以前に出現した文字列と一致しているか否かを検索し、一致する文字列を発見した場合に、発見した文字列の位置を示す発見位置と、当該一致する文字列の長さを示す一致文字列長とを取得し、圧縮していない文字列の長さを示す未圧縮文字列長と、圧縮していない文字から構成される未圧縮文字列と、前記一致文字列長と、前記発見位置とが、前記未圧縮文字列長、前記未圧縮文字列、前記一致文字列長及び前記発見位置の順に配置されたブロックを生成するデータ圧縮手段を備え、
前記発見位置は、12ビットで示され、
前記データ圧縮手段によって生成される奇数番目のブロックには、前記未圧縮文字列長と、前記未圧縮文字列と、前記一致文字列長と、前記発見位置とが、前記未圧縮文字列長、前記未圧縮文字列、前記一致文字列長及び前記発見位置の順に配置されており、
前記データ圧縮手段によって生成される偶数番目のブロックには、前記発見位置と、前記未圧縮文字列長と、前記未圧縮文字列と、前記一致文字列長とが、前記発見位置、前記未圧縮文字列長、前記未圧縮文字列及び前記一致文字列長の順に配置されている。
【発明の効果】
【0009】
本開示によれば、データ復号時の処理速度の低下を極力抑えつつ、データ圧縮及び復号時に必要なメモリ容量を低減させることが可能となる。
【図面の簡単な説明】
【0010】
【
図1】実施の形態におけるマイコンのハードウェア構成を示すブロック図
【
図2】実施の形態におけるマイコンの機能構成を示す図
【
図3】従来の圧縮アルゴリズムについて説明するための図
【
図4】従来の圧縮アルゴリズムについて説明するための図
【
図5】従来の圧縮アルゴリズムについて説明するための図
【
図6】実施の形態における圧縮後のブロックのデータシーケンスを示す図
【
図7】実施の形態において、圧縮の際の奇数番目のブロックにおける発見位置の出力について説明するための図
【
図8】実施の形態において、復号の際の偶数番目のブロックにおける未圧縮文字列の取得について説明するための図
【
図9】実施の形態におけるデータ圧縮の際のブロック生成処理の手順を示すフローチャート
【
図10】実施の形態におけるデータ復号処理の手順を示すフローチャート
【
図11】実施の形態の変形例における圧縮後のブロックのデータシーケンスを示す図
【発明を実施するための形態】
【0011】
以下、本開示の実施の形態について図面を参照して詳細に説明する。
【0012】
図1は、本開示の実施の形態におけるマイコン1のハードウェア構成を示すブロック図である。マイコン1は、本開示に係るデータ圧縮装置の一例であり、また、本開示に係るデータ復号装置の一例である。
【0013】
マイコン1は、例えば、空調機を構成する室外機に内蔵され、当該室外機を統括的に制御するマイクロコントローラである。マイコン1は、
図1に示すように、CPU(Central Processing Unit)10と、ROM(Read Only Memory)11と、RAM(Random Access Memory)12と、補助記憶装置13と、入出力インタフェース14とを備える。これらの構成部は、バス15を介して相互に接続される。
【0014】
CPU10は、マイコン1を統括的に制御する。CPU10によって実現されるマイコン1の機能の詳細については後述する。ROM11は、起動プログラム及び起動プログラムの実行時に使用されるデータを記憶する。RAM12は、CPU10の作業領域として使用される。
【0015】
補助記憶装置13は、読み書き可能な不揮発性の半導体メモリ等で構成される。読み書き可能な不揮発性の半導体メモリは、例えば、EEPROM(Electrically Erasable Programmable Read-Only Memory)、フラッシュメモリ等である。補助記憶装置13には、空調用のプログラムであって、図示しない外部装置からダウンロードしたファームウェアと、当該外部装置とデータの送受信を行うためのプログラム(以下、データ送受信プログラムという。)とを含む各種のプログラムと、これらのプログラムの実行時に使用されるデータとが記憶される。外部装置は、本開示に係るデータ圧縮装置の一例であり、また、本開示に係るデータ復号装置の一例である。
【0016】
データ送受信プログラム及びデータ送受信プログラムを更新するための更新プログラムは、何れも、上記の外部装置又は他の装置からマイコン1にダウンロードすることができ、また、CD-ROM(Compact Disc Read Only Memory)、DVD(Digital Versatile Disc)、光磁気ディスク、USB(Universal Serial Bus)メモリ、HDD(Hard Disk Drive)、SSD(Solid State Drive)、メモリカード等のコンピュータ読み取り可能な記録媒体に格納して配布することも可能である。
【0017】
入出力インタフェース14は、当該室外機が備える他の構成部と通信するためのインタフェースである。他の構成部には、例えば、圧縮機、膨張弁、四方弁、ファン、各種のセンサ(電流センサ、温度センサ、圧力センサ、周波数センサ、加速度センサ等)、通信回路等が含まれる。
【0018】
図2に示すように、マイコン1は、機能的には、データ圧縮部100と、データ送信部101と、データ受信部102と、データ復号部103とを備える。これらの機能部は、CPU10が、補助記憶装置13に記憶されている、上記のデータ送受信プログラムを実行することで実現される。データ送受信プログラムは、本開示に係るデータ圧縮プログラムの一例であり、また、データ復号プログラムの一例である。
【0019】
データ圧縮部100は、本開示に係るデータ圧縮手段の一例であり、データの圧縮を行う。詳細には、データ圧縮部100は、上記の外部装置に対して送信するための運転状態データの圧縮を行う。運転状態データには、運転モード、設定温度、風量、各種センサの検出結果等が含まれる。データ圧縮部100の圧縮アルゴリズムについては後述する。
【0020】
データ送信部101は、データ圧縮部100によって圧縮された運転状態データを上記の外部装置に送信する。
【0021】
データ受信部102は、上記の外部装置から送信された、ファームウェア等のデータを受信する。データ復号部103は、データ受信部102によって受信されたデータを復号する。データ復号部103は、本開示に係るデータ復号手段の一例である。データ復号部103の復号アルゴリズムについては後述する。
【0022】
続いて、データ圧縮部100の圧縮アルゴリズム及びデータ復号部103の復号アルゴリズムについて説明する。本開示における特徴の理解を容易にするため、先ず、従来の圧縮アルゴリズムについて簡単に説明する。
【0023】
図3に、LZ77系アルゴリズムにおける基本的な圧縮後のデータシーケンスを示す。LZ77系アルゴリズムでは、指定されたサイズのスライド窓内において、現在の着目位置からのバイト列が以前に出現したバイト列と一致しているか否かを検索する。一致するバイト列が見つからなかった場合は、着目位置にある1バイト分のデータをそのまま「未圧縮文字」として出力し、着目位置を1バイト分進める。
【0024】
一方、着目位置からのバイト列が見つかった場合は、(発見位置、一致文字列長)のペアを出力し、着目位置を一致文字列長(換言すると一致文字数)分だけ進める。
【0025】
ところで、
図3のような圧縮後のデータシーケンスから元のデータを復号する場合、次のデータが、「未圧縮文字」であるのか、あるいは、(発見位置、一致文字列長)のペアであるのかが判別できないという問題がある。そのため、Lempel-Ziv-Storer-Szymanski (以下、LZSSと称する。)では、
図4に示すように、1ビットの識別フラグが追加され、この識別フラグが“0”であれば、次のデータは「未圧縮文字」、“1”であれば、次のデータは(発見位置、一致文字列長)のペアと判定される。
【0026】
LZSSでは、1バイトの未圧縮文字を出力するために、1ビットの識別フラグと合わせて9ビット必要になるため、最悪の場合、圧縮後のデータサイズが9/8倍に増加する可能性がある。一般に、単にLZ77アルゴリズムという場合、このLZSSアルゴリズムのことを指すことが多い。LZSSでは、原理的に、ビット単位の演算が必要となる。ビット単位の演算を前提とすることで、LZSSでは、スライド窓のサイズは2のべき乗であればよく、「発見位置」のビット数も任意のビット数とすることができる。
【0027】
上記のLZSSにおける1ビットの識別フラグをなくし、バイト単位アクセスに限定したものが、LZ4アルゴリズムとなる。LZ4では、
図3のデータシーケンスにおいて、(発見位置、一致文字列長)のペアで終端するブロックに分割し、ブロック内で連続している未圧縮文字列の長さをブロックの先頭に、「未圧縮文字列長」として追加する。
図5に、LZ4アルゴリズムにおける圧縮後のデータシーケンスを示す。
【0028】
LZ4では、ブロック単位で復号を行う。各ブロックは、「未圧縮文字列長」で始まり、判別がつかない箇所は存在しない。LZ4では、「未圧縮文字列長」、「発見位置」、「一致文字列長」が全てバイト単位の読み取りで復号可能となっている。このため、「発見位置」は、1バイト整数、2バイト整数、3バイト整数、…、である必要があり、スライド窓のサイズも、それぞれ、256バイト、64キロバイト、16384キロバイト、…となる必要がある。LZ77では、スライド窓のサイズが256バイトの場合、十分な圧縮効果を得られないことが経験的に分かっており、LZ4は、スライド窓のサイズが64キロバイトになっている。
【0029】
本開示では、圧縮後のデータシーケンスの内、「発見位置」を12ビット整数に制限する。12ビット整数で表現可能な最大の整数は4095であり、スライド窓のサイズは4キロバイトに削減できる。スライド窓のサイズが4キロバイトの場合、64キロバイトの場合と比べて、圧縮率が低下するものの、十分な圧縮効果が得られることが経験的に分かっている。12ビット整数は、4ビットの倍数であるため、データの読み取りにおいて、ニブル単位の演算が必要となるが、1ビット単位の演算よりも効率的である。
【0030】
図6に、データ圧縮部100による圧縮後のブロックのデータシーケンスを示す。
図6に示すように、本実施の形態におけるデータシーケンスでは、
図5に示すLZ4のデータシーケンスにおける(発見位置、一致文字列長)のペアを分離し、「一致文字列長」、「発見位置」としている。
【0031】
データ復号部103によって圧縮後のデータシーケンスが復号される際、最初のブロックは、バイト境界に揃っているため、「未圧縮文字列長」、「未圧縮文字列」、「一致文字列長」の3項目については、従来通り、バイト単位で読み取りすることが可能である。
【0032】
図7に、残りの12ビット分の「発見位置」の出力形式を示す。
図7に示すように、12ビットの下位8ビットは、そのまま1バイト出力し、12ビットの上位4ビットは、次のバイトの下位4ビットに出力する。当該バイトの上位4ビットは、次のブロック用となる。この出力された2バイトをリトルエンディアンの2バイト整数として読み取ると、丁度、下位12ビットが「発見位置」となる。なお、マイコン1のCPU10のアーキテクチャがビッグエンディアンの場合は、2バイト整数のバイトスワップを行うと同じ形式になる。
【0033】
上記の結果、2番目のブロックでは、各項目が4ビットずれて配置される。2番目のブロックの先頭に配置された「未圧縮文字列長」は、各ニブルからバイトを構築する方法、即ち、ビット演算により1バイト中のニブルを取り出し、隣のニブルと組み合わせて1バイトを再構築する方法で取得できる。その後に配置される「未圧縮文字列」を取得する方法について
図8を参照して説明する。
図8の例では、未圧縮文字列は「A、B、C、D、…」である。
【0034】
最初の「A」の下位4ビットは、「未圧縮文字列長」を構築した際の副産物として得られる。次のバイトからの4バイトをリトルエンディアンの4バイト整数として読み取り、4ビット左シフトを行うと、未圧縮文字列の内、「B」、「C」、「D」はバイト境界に揃う。
【0035】
4ビット左シフトの結果空いた4バイト整数の下位4ビットには、予め得られていた「A」の下位4ビットを挿入することで、「A」もバイト境界に揃う。「A、B、C、D」の未圧縮文字列から構成される4バイト整数をリトルエンディアンの4バイト整数として出力すれば、正規の順に並んだ4つの未圧縮文字列が得られる。なお、マイコン1のCPU10のアーキテクチャがビッグエンディアンの場合は、4バイト整数の読み取り時と、出力時にバイトスワップが必要になる。
【0036】
次の4バイトも同様に処理を行い、4ビット左シフトの結果空いた4バイト整数の下位4ビットには、
図8の後続の4ビットを挿入する。以下、必要なだけ繰り返すことで、未圧縮文字列全体を取得することができる。
【0037】
2番目のブロック内の後続の「一致文字列長」は、上述した各ニブルからバイトを構築する方法で取得すればよい。最後の12ビットの「発見位置」を取得すると、4ビットのズレがなくなり、次の3番目のブロックは、再び、バイト境界に揃う。
【0038】
つまり、奇数番目に配置されたブロックは、上述した最初のブロックと同様の処理を行い、偶数番目のブロックは、上述した2番目のブロックと同様の処理を行えばよく、「発見位置」を12ビットとした本実施形態における圧縮データを効率的に復号することが可能である。
【0039】
図9は、データ圧縮部100によって実行されるデータ圧縮処理において、一ブロックの生成処理であるブロック生成処理の手順を示すフローチャートである。
【0040】
(ステップS101)
データ圧縮部100は、現在の着目位置からの文字列が、4キロバイトのスライド窓内において、以前に出現した文字列と一致するか否かを検索する。一致する文字列を発見しなかった場合(ステップS101;NO)、データ圧縮部100の処理は、ステップS102に遷移する。一方、一致する文字列を発見した場合(ステップS101;YES)、データ圧縮部100の処理は、ステップS103に遷移する。
【0041】
(ステップS102)
データ圧縮部100は、着目位置にある1バイト分のデータを「未圧縮文字」として取得し、着目位置を1バイト分進める。その後、データ圧縮部100の処理は、ステップS101に戻る。
【0042】
(ステップS103)
データ圧縮部100は、未圧縮文字列長と、未圧縮文字列と、一致文字列長と、12ビットで示される発見位置とが順次配置されたブロックを生成し、ブロック生成処理を終了する。
【0043】
図10は、データ復号部103によって実行されるデータ復号処理の手順を示すフローチャートである。
【0044】
(ステップS201)
データ復号部103は、復号対象のブロックが奇数番目であるか否かを判定する。当該ブロックが奇数番目のブロックである場合(ステップS201;YES)、データ復号部103の処理は、ステップS202に遷移する。一方、当該ブロックが奇数番目のブロックでない、即ち、偶数番目のブロックである場合(ステップS201;NO)、データ復号部103の処理は、ステップS203に遷移する。
【0045】
(ステップS202)
データ復号部103は、当該ブロックからバイト単位で各項目のデータを読み取る。その後、データ復号部103の処理は、ステップS204に遷移する。
【0046】
(ステップS203)
データ復号部103は、当該ブロックから4ビット演算によって各項目のデータを読み取る。その後、データ復号部103の処理は、ステップS204に遷移する。
【0047】
(ステップS204)
データ復号部103は、読み取ったデータに基づいて元のデータを復号する。その後、データ復号部103の処理は、ステップS205に遷移する。
【0048】
(ステップS205)
データ復号部103は、次のブロックが存在するか否かを判定する。次のブロックが存在する場合(ステップS205;YES)、データ復号部103の処理は、ステップS201に戻る。一方、次のブロックが存在しない場合(ステップS205;NO)、データ復号部103は、データ復号処理を終了する。
【0049】
以上説明したように、本実施の形態のマイコン1における圧縮及び復号アルゴリズムによれば、スライド窓のサイズを4キロバイトに低減するため、空調機に内蔵されるマイコン1のようなメモリリソースの少ないマイコンにおいても使用することが可能となる。
【0050】
また、スライド窓のサイズの低減化に伴い、圧縮時において発見位置を12ビットで出力するため、従来のように2バイトで出力する場合と比較して4ビット分節約することができる。
【0051】
また、復号時において、ビット演算によるデータの読み取りが必要となるものの、4ビット(ニブル)単位の演算で済み、また、奇数ブロックの復号については、バイト単位で各項目のデータを読み取るため、処理能力が高くないマイコンのCPUであってもデータの復号処理を高速で実行することができる。
【0052】
なお、マイコン1のCPU10のアーキテクチャによっては、2バイト整数の読み書き時、2バイト境界に揃っていること、4バイト整数の読み書き時、4バイト境界に揃っていることを要求するものがある。この場合、例えば、1バイトずつ4回読み込み、4バイト整数を生成した上で、上述した
図8に示す手順を実行すればよい。
図7の2バイト整数を読み取る際にも同様の処理を行えばよい。
【0053】
本開示は、上記の実施の形態に限定されず、本開示の要旨を逸脱しない範囲での種々の変更は勿論可能である。
【0054】
例えば、
図11に示すように、データ圧縮部100によるデータ圧縮の際、奇数番目のブロックでは、上記の実施の形態と同様(
図6参照)、12ビットの「発見位置」をブロックの最後尾に配置し、偶数番目のブロックでは、12ビットの「発見位置」をブロックの先頭に配置するフォーマットにしてもよい。
【0055】
上記のフォーマットにすると、奇数番目のブロックを復号した直後に、偶数番目のブロックの12ビットが出現するため、「発見位置」のみニブル単位の演算による読み取りを行えば、他の項目は、バイト単位で高速に読み取ることが可能となる。
【0056】
上記実施の形態の圧縮アルゴリズムでは(従来のLZ4も同様)、一致文字列が見つかるまで、未圧縮文字をメモリに蓄積する必要がある。メモリリソースの豊富なパーソナルコンピュータ等(例えば、実施の形態における外部装置)の場合、必要に応じて、未圧縮文字の蓄積用メモリの再割り当てが可能である。しかし、メモリリソースの少ないマイコンで圧縮を行う場合、メモリの再割り当ては困難であるため、予め、固定サイズで未圧縮文字の蓄積用メモリを割り当てておくのが一般的である。
【0057】
以下、マイコン1において、固定サイズで未圧縮文字の蓄積用メモリを割り当てている場合、一致文字列が見つからずに、蓄積した未圧縮文字の長さが蓄積用メモリの上限に達した場合について説明する。この場合、データ圧縮部100は、蓄積した未圧縮文字の長さ(即ち、蓄積用メモリのサイズ)を
図6における「未圧縮文字列長」として出力する。また、この際、データ圧縮部100は、「一致文字列長」を0とし、12ビットの「発見位置」を出力しない。
【0058】
データ復号部103は、データ復号時に上記の「発見位置」が存在しないブロックを発見した場合、後続のブロックでは、12ビットの発見位置を起因とした4ビットのずれが存在しないため、直前のブロックのデータ読み取りと同様の手順で各項目のデータを読み取って復号すればよい。
【0059】
即ち、上記の実施の形態における奇数番目のブロックに「発見位置」が存在しなかった場合、データ復号部103は、後続のブロックについて、引き続き、奇数番目のブロックのデータ読み取り手順で各項目のデータを読み取ればよい。同様に、上記の実施の形態における偶数番目のブロックに「発見位置」が存在しなかった場合、データ復号部103は、後続のブロックについて、引き続き、偶数番目のブロックのデータ読み取り手順で各項目のデータを読み取ればよい。
【0060】
あるいは、データ復号部103は、ブロックの開始がバイト境界に揃っている場合では、上記の実施の形態における奇数番目のブロックのデータ読み取り手順で各項目のデータを読み取り、ブロックの開始がバイト境界に揃っていない場合(即ち値、4ビットのずれがある場合)では、上記の実施の形態における偶数番目のブロックのデータ読み取り手順で各項目のデータを読み取るようにしてもよい。
【0061】
また、マイコン1の機能部(
図2参照)の全部又は一部が、専用のハードウェアで実現されるようにしてもよい。専用のハードウェアとは、例えば、単一回路、複合回路、プログラム化されたプロセッサ、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)又はこれらの組み合わせである。
【符号の説明】
【0062】
1 マイコン、10 CPU、11 ROM、12 RAM、13 補助記憶装置、14 入出力インタフェース、15 バス、100 データ圧縮部、101 データ送信部、102 データ受信部、103 データ復号部