(57)【特許請求の範囲】
【請求項１】
所定値である第１データと前記所定値以外の第２データとが繰り返し連続するデータ列を入力し、
入力した前記データ列の先頭から、連続する前記第１データの数である第１連続数と、連続する前記第２データの数である第２連続数とを順次求め、
求めた前記第１連続数と、求めた前記第２連続数と、求めた前記第２連続数分の前記第２データとを繰り返し配置して圧縮データを生成すること
を特徴するデータ圧縮方法。
【請求項２】
前記データ列に含まれる前記第１データの連続数の最大値である第１最大連続数を算出し、
算出した前記第１最大連続数を含むヘッダを、前記圧縮データが配置されるボディの前に配置し、
前記ボディに配置する前記第１連続数を、前記第１最大連続数を表現可能な最小のビット数で表わすこと
を特徴する請求項１に記載のデータ圧縮方法。
【請求項３】
前記データ列に含まれる前記第２データの連続数の最大値である第２最大連続数を算出し、
算出した前記第２最大連続数を前記ヘッダ内に配置し、
前記ボディに配置する前記第２連続数を、前記第２最大連続数を表現可能な最小のビット数で表わすこと
を特徴する請求項２に記載のデータ圧縮方法。
【請求項４】
出現可能な前記第１連続数の各々について、前記データ列に含まれる前記第１データの前記第１連続数として存在するか否かを示す存在情報を前記ヘッダ内に配置し、
存在する前記第１連続数に通し番号を割り当て、
前記第１連続数の代わりに前記ボディに前記通し番号を配置すること
を特徴する請求項２または請求項３に記載のデータ圧縮方法。
【請求項５】
出現可能な前記第１連続数を値が小さい順に複数の第１グループに分割し、出現可能な前記第１連続数の各々に、前記第１グループ毎にビット数が異なるコード値であって、値が小さい前記第１連続数を含む前記第１グループほどビット数が少ない第１コード値を割り当て、前記第１連続数の代わりに前記第１コード値を配置して前記圧縮データを生成する場合に、前記圧縮データのサイズが最も小さくなる前記第１グループの第１分割数と、前記第１グループの各々に割り当てる第１コード値のビット数との組み合わせを探索し、
探索により得られた前記第１分割数と、前記第１グループ毎の前記第１コード値のビット数を得るための第１ビット数情報とを含むヘッダを、前記圧縮データが配置されるボディの前に配置し、
前記第１連続数の代わりに前記ボディに前記第１コード値を配置すること
を特徴する請求項１に記載のデータ圧縮方法。
【請求項６】
出現可能な前記第２連続数を値が小さい順に複数の第２グループに分割し、出現可能な前記第２連続数の各々に、前記第２グループ毎にビット数が異なるコード値であって、値が小さい前記第２連続数を含む前記第２グループほどビット数が少ない第２コード値を割り当て、前記第２連続数の代わりに前記第２コード値を配置して前記圧縮データを生成する場合に、前記圧縮データのサイズが最も小さくなる前記第２グループの第２分割数と、前記第２グループの各々に割り当てる第２コード値のビット数との組み合わせを探索し、
探索により得られた前記第２分割数と、前記第２グループ毎の前記第２コード値のビット数を得るための第２ビット数情報とを含むヘッダを、前記圧縮データが配置されるボディの前に配置し、
前記第２連続数の代わりに前記ボディに前記第２コード値を配置すること
を特徴する請求項５に記載のデータ圧縮方法。
【請求項７】
前記データ列の先頭が前記第１データであるか前記第２データであるかを示す開始情報を前記ヘッダ内に配置し、
前記開始情報に応じて、前記第１連続数、前記第２連続数および前記第２データ、または、前記第２連続数、前記第２データおよび前記第１連続数を順次配置することで、前記圧縮データを生成すること
を特徴する請求項２ないし請求項６のいずれか１項に記載のデータ圧縮方法。
【請求項８】
前記データ列の末尾が前記第１データであるか前記第２データであるかを示す終了情報を前記ヘッダ内に配置し、
前記終了情報に応じて、前記圧縮データの末尾に前記第１連続数、または、前記第２連続数および前記第２データを配置し、
前記圧縮データの末尾がバイトデータにならない場合、前記圧縮データの末尾にパディングを付加すること、
を特徴する請求項７に記載のデータ圧縮方法。
【請求項９】
前記データ列は、更新前のデータと更新するデータとを比較することで得られる差分データであること
を特徴する請求項１ないし請求項８のいずれか１項に記載のデータ圧縮方法。
【請求項１０】
所定値である第１データと前記所定値以外の第２データとが繰り返し連続するデータ列を入力する入力部と、
前記入力部が入力した前記データ列の先頭から、連続する前記第１データの数である第１連続数と、連続する前記第２データの数である第２連続数とを順次求め、求めた前記第１連続数と、求めた前記第２連続数と、求めた前記第２連続数分の前記第２データとを繰り返し配置して圧縮データを生成する圧縮処理部と、
を有することを特徴するデータ圧縮装置。
【請求項１１】
所定値である第１データと前記所定値以外の第２データとが繰り返し連続するデータ列を入力し、
入力した前記データ列の先頭から、連続する前記第１データの数である第１連続数と、連続する前記第２データの数である第２連続数とを順次求め、
求めた前記第１連続数と、求めた前記第２連続数と、求めた前記第２連続数分の前記第２データとを繰り返し配置して圧縮データを生成する処理を
コンピュータに実行させることを特徴とするデータ圧縮プログラム。
【請求項１２】
所定値である第１データと前記所定値以外の第２データとが繰り返し連続するデータ列に基づいて、前記データ列の先頭から、連続する前記第１データの数である第１連続数と、連続する前記第２データの数である第２連続数と、前記第２連続数分の前記第２データとが繰り返し配置された圧縮データを伸長するデータ伸長方法であって、
前記圧縮データを入力し、
前記第１連続数が示す数の前記第１データを復元し、前記圧縮データ中の前記第２連続数分の前記第２データを前記圧縮データから取り出す処理を繰り返すことで、前記データ列を復元すること
を特徴とするデータ伸長方法。
【請求項１３】
前記圧縮データが配置されるボディの前に配置されるヘッダに含まれる、前記データ列に含まれる前記第１データの連続数の最大値である第１最大連続数を入力し、
前記第１最大連続数を表現可能な最小の第１ビット数を算出し、
算出した第１ビット数の前記第１連続数を前記圧縮データから取り出して前記第１データを復元すること
を特徴する請求項１２に記載のデータ伸長方法。
【請求項１４】
前記ヘッダに含まれる、前記データ列に含まれる前記第２データの連続数の最大値である第２最大連続数を入力し、
前記第２最大連続数を表現可能な最小の第２ビット数を算出し、
算出した第２ビット数の前記第２連続数を前記圧縮データから取り出し、
取り出した前記第２連続数分の前記第２データを前記圧縮データから取り出すこと
を特徴する請求項１３に記載のデータ伸長方法。
【請求項１５】
前記ヘッダに含まれる、出現可能な前記第１連続数の各々について、前記データ列に含まれる前記第１データの前記第１連続数として存在するか否かを示す存在情報を入力し、
前記存在情報に基づいて、存在する前記第１連続数に通し番号を割り当て、
前記ボディに含まれる前記通し番号に基づいて、前記第１連続数を抽出すること
を特徴する請求項１３または請求項１４に記載のデータ伸長方法。
【請求項１６】
前記圧縮データが配置されるボディの前に配置されるヘッダに含まれる、出現可能な前記第１連続数を値が小さい順に分割した複数の第１グループの第１分割数と、出現可能な前記第１連続数の各々に割り当てられた、前記第１グループ毎にビット数が異なるコード値であって、値が小さい前記第１連続数を含む前記第１グループほどビット数が少ない第１コード値のビット数を得るための第１ビット数情報とを入力し、
前記第１分割数と前記第１ビット数情報とを使用して、前記ボディに含まれる前記第１コード値から前記第１連続数を抽出すること
を特徴する請求項１２に記載のデータ伸長方法。
【請求項１７】
前記ヘッダに含まれる、出現可能な前記第２連続数を値が小さい順に分割した複数の第２グループの第２分割数と、出現可能な前記第２連続数の各々に割り当てられた、前記第２グループ毎にビット数が異なるコード値であって、値が小さい前記第２連続数を含む前記第２グループほどビット数が少ない第２コード値のビット数を得るための第２ビット数情報とを入力し、
前記第２分割数と前記第２ビット数情報とを使用して、前記ボディに含まれる前記第２コード値から前記第２連続数を抽出すること
を特徴する請求項１６に記載のデータ伸長方法。
【請求項１８】
所定値である第１データと前記所定値以外の第２データとが繰り返し連続するデータ列に基づいて、前記データ列の先頭から、連続する前記第１データの数である第１連続数と、連続する前記第２データの数である第２連続数と、前記第２連続数分の前記第２データとが繰り返し配置された圧縮データを伸長するデータ伸長装置であって、
前記圧縮データを入力する入力部と、
前記第１連続数が示す数の前記第１データを復元し、前記圧縮データ中の前記第２連続数分の前記第２データを前記圧縮データから取り出す処理を繰り返すことで、前記データ列を復元する伸長処理部と、
を有することを特徴とするデータ伸長装置。
【請求項１９】
所定値である第１データと前記所定値以外の第２データとが繰り返し連続するデータ列に基づいて、前記データ列の先頭から、連続する前記第１データの数である第１連続数と、連続する前記第２データの数である第２連続数と、前記第２連続数分の前記第２データとが繰り返し配置された圧縮データを伸長するデータ伸長プログラムであって、
前記圧縮データを入力し、
前記第１連続数が示す数の前記第１データを復元し、前記圧縮データ中の前記第２連続数分の前記第２データを前記圧縮データから取り出す処理を繰り返すことで、前記データ列を復元する処理を
コンピュータに実行させることを特徴とするデータ伸長プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮方法、データ圧縮装置、データ圧縮プログラム、データ伸長方法、データ伸長装置およびデータ伸長プログラムに関する。
【背景技術】
【０００２】
近年、ＩｏＴ（Internet of Things）技術により、様々な組込機器がネットワークに接続されるようになってきている。例えば、この種の組込機器は、ネットワークを介してファームウェアを更新する機能を有する（例えば、特許文献１参照）。
【０００３】
また、ネットワークを介してファームウェアを更新する場合のトラフィック量の増加を抑制する手法として、更新前後のファームウェアの差分データを配信する方式が知られている。代表的なバイナリデータの差分データの抽出方法として、ｄｉｆｆおよびｂｓｄｉｆｆ等が知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１２０４２６号公報
【特許文献２】特開２０１５−１３５６０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したように、ネットワークを介して更新前後のファームウェアの差分データを配信する場合、差分データを圧縮することで、トラフィック量の増加をさらに抑制することができる。しかしながら、ネットワークに接続されるスマートメータ等の組込機器には、ＭＣＵ（Micro Control Unit）等の小規模のコンピュータや、容量が比較的小さいメモリなど、演算リソースに乏しいものしか搭載されていない。このため、処理性能が高く、メモリ容量が大きいサーバ等の情報機器で使用されるｂｚｉｐ２やＬＺＭＡ（Lempel-Ziv-Markov chain-Algorithm）などの高度な圧縮アルゴリズムを、組込機器に適用することは困難である。
【０００６】
一方、比較的簡易な手法で圧縮が可能であり、小容量のワークメモリで伸長（解凍）が可能な圧縮アルゴリズムとしてランレングス符号が知られている。しかしながら、ランレングス符号の圧縮効率は、ｂｚｉｐ２やＬＺＭＡなどの圧縮効率に比べて低い。このため、ランレングス符号等を使用してネットワークに接続された組込機器にファームウェアの更新データを配信する場合、ネットワークのトラフィック量が増加するおそれがある。
【０００７】
上記の課題に鑑み、本発明は、データ列の圧縮効率を簡易な圧縮手法により向上させることで、圧縮データを配信する場合のトラフィック量を削減することを目的とする。
【課題を解決するための手段】
【０００８】
上記の目的を達成するため、一実施形態に係るデータ圧縮方法は、所定値である第１データと前記所定値以外の第２データとが繰り返し連続するデータ列を入力し、入力した前記データ列の先頭から、連続する前記第１データの数である第１連続数と、連続する前記第２データの数である第２連続数とを順次求め、求めた前記第１連続数と、求めた前記第２連続数と、求めた前記第２連続数分の前記第２データとを繰り返し配置して圧縮データを生成することを特徴する。
【発明の効果】
【０００９】
データ列の圧縮効率を簡易な圧縮手法により向上させることで、圧縮データを配信する場合のトラフィック量を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態におけるデータ配信システムの一例を示すブロック図である。
【図２】図１のデータ配信装置のハードウェア構成の一例を示すブロック図である。
【図３】図１のデータ配信装置の機能構成の一例を示すブロック図である。
【図４】図１の機器のハードウェア構成の一例を示すブロック図である。
【図５】図１の機器の機能構成の一例を示すブロック図である。
【図６】図１のデータ配信システムにおけるデータ配信装置による圧縮処理と機器による伸長処理との一例を示す説明図である。
【図７】図３のデータ配信装置の圧縮処理部による圧縮処理の一例を示すフロー図である。
【図８】図５の機器の伸長処理部による伸長処理の一例を示す説明図である。
【図９】本発明の第２の実施形態のデータ配信システムにおけるデータ配信装置による圧縮処理と機器による伸長処理との一例を示す説明図である。
【図１０】第２の実施形態のデータ配信装置の圧縮処理部による圧縮処理の一例を示すフロー図である。
【図１１】図１０の圧縮処理の続きを示すフロー図である。
【図１２】第２の実施形態の機器の伸長処理部による伸長処理の一例を示すフロー図である。
【図１３】図１２の伸長処理の続きを示すフロー図である。
【図１４】本発明の第３の実施形態のデータ配信システムにおけるデータ配信装置による圧縮処理と機器による伸長処理との一例を示す説明図である。
【図１５】第３の実施形態において、データ配信装置の差分データ生成部が生成する差分データの一例を示す説明図である。
【図１６】第３の実施形態のデータ配信装置の圧縮処理部による圧縮処理の一例を示すフロー図である。
【図１７】第３の実施形態の機器の伸長処理部による伸長処理の一例を示すフロー図である。
【図１８】本発明の第４の実施形態のデータ配信システムにおけるデータ配信装置による圧縮処理と機器による伸長処理との一例を示す説明図である。
【図１９】図１８に示すボディに格納する０値および非０値の連続数に対応するコード値の一例を示す説明図である。
【図２０】図１８に示すボディに格納する０値および非０値の連続数に対応するコード値の別の例を示す説明図である。
【図２１】機器の伸長処理部がコード値から連続数を抽出する場合に使用する数式の一例を示す説明図である。
【図２２】第４の実施形態のデータ配信装置の圧縮処理部による圧縮処理の一例を示すフロー図である。
【図２３】第４の実施形態の機器の伸長処理部による伸長処理の一例を示すフロー図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して実施の形態の説明を行う。なお、各図面において、同一構成部分には同一符号を付し、重複した説明を省略する場合がある。
【００１２】
（第１の実施形態）
図１は、本発明の第１の実施形態におけるデータ配信システムの一例を示すブロック図である。図１に示すデータ配信システムＳＹＳは、ネットワークＮＷを介して相互に接続されたデータ配信装置１００と少なくとも１つの機器２００とを有する。図１に示す例では、多数の機器２００がネットワークＮＷに接続されている。データ配信装置１００とネットワークＮＷとの接続、および各機器２００とネットワークＮＷとの接続は、有線でもよく無線でもよい。
【００１３】
例えば、データ配信装置１００は、汎用サーバまたはパーソナルコンピュータ等の情報処理装置であり、ネットワークＮＷを介して各機器２００にファームウェアの更新データを配信する機能を有する。この際、データ配信装置１００は、旧ファームウェアと新ファームウェアの差分データをデータ列として抽出し、抽出したデータ列を圧縮して各機器２００に配信する。例えば、各機器２００は、工場、プラント、または一般家庭等に設置されるスマートメータ（電力量計）等の情報端末である。なお、各機器２００は、スマートフォン、デジタル家電、カーナビゲーション端末等でもよい。
【００１４】
図２は、図１のデータ配信装置１００のハードウェア構成の一例を示すブロック図である。データ配信装置１００は、システムバスＳＢＵＳを介して相互に接続されたプロセッサ１０２、ＲＯＭ（Read Only Memory）１０４、ＲＡＭ（Random Access Memory）１０６および補助記憶装置１０８を有する。また、データ配信装置１００は、入力装置１１０、表示装置１１２、外部インタフェース部１１４および通信インタフェース部１１６を有する。プロセッサ１０２は、コンピュータの一例である。
【００１５】
プロセッサ１０２は、ＣＰＵ（Central Processing Unit）等の演算処理装置であり、データ配信装置１００の全体の動作を制御するとともに、各機器２００に配信するファームウェアの更新データ（圧縮データ）を生成する。例えば、プロセッサ１０２は、ＲＯＭ１０４または補助記憶装置１０８からＲＡＭ１０６に展開された制御プログラムおよびデータ圧縮プログラムを実行することで動作する。
【００１６】
プロセッサ１０２は、制御プログラムを実行することで、データ配信装置１００の全体の動作を制御し、データ圧縮プログラムを実行することで、各機器２００に配信するファームウェアの更新データを生成する。なお、ファームウェアの更新データの生成は、プロセッサ１０２に搭載されるＦＰＧＡ（Field-Programmable Gate Array）等のプログラマブルロジックにより実行されてもよい。あるいは、ファームウェアの更新データの生成は、システムバスＳＢＵＳに接続されたＦＰＧＡ等のプログラマブルロジックにより実行されてもよい。
【００１７】
ＲＯＭ１０４には、プロセッサ１０２が実行する各種プログラムだけでなく、データ配信装置１００で使用する各種パラメータが記憶されてもよい。ＲＡＭ１０６には、データ配信装置１００で使用するワークデータが記憶されてもよい。補助記憶装置１０８は、例えば、ＨＤＤ（Hard Disk Drive）またはＳＳＤ（Solid State Drive）等である。
【００１８】
入力装置１１０は、例えば、キーボード、マウスまたはタッチパネル等の少なくともいずれかである。表示装置１１２は、例えば、液晶ディスプレイ等である。外部インタフェース部１１４は、図示しない入出力ポートに接続された記録媒体１５０等の外部装置に対してデータを読み書きする機能を有する。特に限定されないが、記録媒体１５０は、例えば、フレキシブルディスク、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disk）、ＳＤメモリカード（Secure Digital memory card）、ＵＳＢ（Universal Serial Bus）メモリ等である。
【００１９】
通信インタフェース部１１６は、ネットワークＮＷに接続され、データ配信装置１００から図１に示した各機器２００にファームウェアの更新データを送信する機能を有する。なお、データ配信装置１００は、プリンタ等の出力装置、または、プリンタに接続される出力インタフェースを有してもよい。図２に示すデータ配信装置１００のハードウェア構成は一例であって、図２の構成に限定されない。
【００２０】
図３は、図１のデータ配信装置１００の機能構成の一例を示すブロック図である。データ配信装置１００は、差分データ生成部１２２、圧縮処理部１２４および通信部１２６を有する。図３に示す各機能部は、ハードウェアで実現されてもよく、ソフトウェア（データ圧縮プログラム）の実行により実現されてもよい。
【００２１】
差分データ生成部１２２は、旧ファームウェアＦＷ０と新ファームウェアＦＷ１とのバイナリデータを比較することで、旧ファームウェアＦＷ０と新ファームウェアＦＷ１との差分を示す差分データ列を作成する。例えば、旧ファームウェアＦＷ０と新ファームウェアＦＷ１とは、図２のＲＡＭ１０６または補助記憶装置１０８に格納されている。
【００２２】
圧縮処理部１２４は、図示しない入力部で差分データ列を入力し、入力した差分データ列を圧縮することで、圧縮データを生成する。圧縮処理部１２４は、データ圧縮装置の一例である。通信部１２６は、図２の通信インタフェース部１１６に対応しており、ネットワークＮＷを介して、ファームウェアの更新が必要な機器２００に圧縮データを送信する。
【００２３】
図４は、図１の機器２００のハードウェア構成の一例を示すブロック図である。機器２００は、バスＢＵＳを介して相互に接続されたＭＣＵ２０２、ＲＯＭ２０４、ＲＡＭ２０６、フラッシュメモリ２０８、入力インタフェース部２１０、入出力インタフェース部２１２および通信インタフェース部２１４を有する。ＭＣＵ２０２は、コンピュータの一例である。
【００２４】
ＭＣＵ２０２は、ＣＰＵコアと各種周辺機能を有し、ファームウェアを実行することで機器２００の全体の動作を制御する。また、ＭＣＵ２０２は、データ配信装置１００から受信したファームウェアの更新データに基づいて、ファームウェアを更新する機能を有する。例えば、ファームウェアの更新は、ＭＣＵ２０２の起動時に、ファームウェアの実行を開始する前にＭＣＵ２０２により実行される基本プログラム中のデータ伸長プログラムにより実施される。
【００２５】
例えば、ＭＣＵ２０２は、ＲＯＭ２０４に格納された基本プログラムと、フラッシュメモリ２０８に格納されたファームウェアを実行することで動作する。ＭＣＵ２０２は、データ伸長プログラムを実行することで、データ配信装置１００から受信した圧縮データ（ファームウェアの差分データ列）を使用して、フラッシュメモリ２０８に記憶されているファームウェアを更新する。
【００２６】
ＲＯＭ２０４には、ＭＣＵ２０２が実行する基本プログラムだけでなく、機器２００で使用する各種パラメータが記憶されてもよい。ＲＡＭ２０６には、機器２００で使用するワークデータが記憶されてもよい。
【００２７】
入力インタフェース部２１０は、例えば、電力量を示す電力情報を受信し、受信した電力情報をＭＣＵ２０２に出力する。なお、電力量を示すアナログ信号が、入力インタフェース部２１０を介さずに、ＭＣＵ２０２のアナログ入力端子に供給され、ＭＣＵ２０２に搭載されるＡＤＣ（Analog-to-Digital Converter）によりデジタル信号に変換されてもよい。
【００２８】
入出力インタフェース部２１２は、工場、プラント、または一般家庭等に設置済みの機器２００に対して各種情報を直接入出力する場合に使用される。通信インタフェース部２１４は、ネットワークＮＷに接続され、データ配信装置１００からファームウェアの更新データ等を受信する機能を有する。例えば、ファームウェアの更新データは、更新前のファームウェアと更新後のファームウェアとの差分データ列が圧縮された圧縮データである。通信インタフェース部２１４が受信したファームウェアの更新データは、ＲＡＭ２０６またはフラッシュメモリ２０８に格納されてもよく、ＭＣＵ２０２により取得されてもよい。なお、図４に示す機器２００のハードウェア構成は一例であって、図４の構成に限定されない。
【００２９】
図５は、図１の機器２００の機能構成の一例を示すブロック図である。機器２００は、通信部２２２、伸長処理部２２４および更新処理部２２６を有する。図５に示す各機能部は、ハードウェアで実現されてもよく、ソフトウェア（データ圧縮プログラム）の実行により実現されてもよい。
【００３０】
通信部２２２は、図４の通信インタフェース部２１４に対応しており、ネットワークＮＷを介してデータ配信装置１００から受信する圧縮データ（ファームウェアとの差分データ列）を入力する入力部の機能を有する。通信部２２２は、入力した圧縮データを伸長処理部２２４に出力する。
【００３１】
伸長処理部２２４は、通信部２２２から受信した圧縮データを伸長して、圧縮前の差分データ列を生成する。伸長処理部２２４は、生成した差分データ列を更新処理部２２６に出力する。伸長処理部２２４は、データ伸長装置の一例である。
【００３２】
更新処理部２２６は、伸長処理部２２４から受信した差分データ列に基づいて、図４のフラッシュメモリ２０８に記憶されているファームウェア（旧ファームウェア）を更新し、新ファームウェアとしてフラッシュメモリ２０８に格納する。なお、新ファームウェアは、図４のＲＡＭ２０６に格納された後、フラッシュメモリ２０８に格納されてもよい。
【００３３】
図６は、図１のデータ配信システムＳＹＳにおけるデータ配信装置１００による圧縮処理と機器２００による伸長処理との一例を示す説明図である。図６に示す２桁の数値は、１６進数で表記されている。また、図中の符号"ｈ"は、数値が１６進数であることを示す。図６では、説明を分かりやすくするために、ファームウェアの更新データのうち、６４バイトの差分データ列を圧縮および伸長する例を示し、１バイトの０値の連続数は、最大で２５５個であるとする。例えば、図３の差分データ生成部１２２は、ｂｓｄｉｆｆ等のバイナリ差分アルゴリズムを使用することで差分データ列を生成する。
【００３４】
図６に示す６４バイトの差分データ列のうち、点線の矩形枠で示すバイトデータは、差分データが"００ｈ"でない非０値を示す。非０値は、更新前の旧ファームウェアと更新後の新ファームウェアとが互いに相違するバイトデータを示す（更新あり）。点線の破線枠以外のバイトデータは、差分データが"００ｈ"である０値を示す。０値は、更新前の旧ファームウェアと更新後の新ファームウェアとが互いに同じバイトデータであることを示す（更新なし）。０値は、所定値である第１データの一例であり、非０値は、所定値以外の第２データの一例である。本実施形態および以降の実施形態において、０値の連続数は、第１連続数の一例であり、非０値の連続数は、第２連続数の一例である。
【００３５】
図６に示すように、一般にファームウェアの更新データは、旧ファームウェアに対する新ファームウェアの変更箇所が少なく、差分データ列は、０値のバイト数が非０値のバイト数に比べて多い。そこで、図３の圧縮処理部１２４は、差分データ生成部１２２が生成した差分データ列を、０値が連続する塊と非０値が連続する塊とで区切り、塊毎に圧縮する。
【００３６】
まず、圧縮処理部１２４は、差分データ列において、２０バイト（１４ｈバイト）の０値が連続するため、圧縮データとして"１４ｈ"を生成する。差分データが０値であるか非０値であるかに応じて圧縮データを生成することで、０値については、圧縮データ中に０値の連続数のみを配置すればよく、０値であることを示す情報を不要にすることができる。
【００３７】
次に、圧縮処理部１２４は、差分データ列において、値が１４ｈである１バイトの非０値があるため、圧縮データとして、破線枠で示すように"０１ｈ  １４ｈ"を生成する。"０１ｈ"は、非０値の連続数が１個（１バイト）であることを示し、"１４ｈ"は、１バイトの非０値自体を示す。次に、圧縮処理部１２４は、差分データ列において、２６バイト（１Ａｈバイト）の０値が連続するため、圧縮データとして"１Ａｈ"を生成する。
【００３８】
次に、圧縮処理部１２４は、差分データ列において、値がＦＦｈと０３ｈである２バイトの非０値があるため、圧縮データとして、破線枠で示すように"０２ｈ  ＦＦｈ  ０３ｈ"を生成する。"０２ｈ"は、非０値の連続数が２個（２バイト）であることを示し、"ＦＦｈ"および"０３ｈ"は、それぞれ１バイトの非０値自体を示す。次に、圧縮処理部１２４は、差分データ列において、１５バイト（０Ｆｈバイト）の０値が連続するため、圧縮データとして"０Ｆｈ"を生成する。
【００３９】
以上の圧縮処理により、６４バイトの差分データ列を８バイトに圧縮することができ、圧縮率は、"０．１２５"になる。これに対して、一般のランレングス符号では、"値"と"値の連続数"のペアが順次生成される。このため、生成された圧縮データは、０値であることを示す"００ｈ"を含む。また、生成された値が互いに異なる非０値が連続する場合（"ＦＦｈ"と"０３ｈ"）、各非０値の連続数である"０１ｈ"が生成された圧縮データに含まれる。この結果、一般のランレングス符号を使用した圧縮では、６４バイトの差分データ列を１２バイトにしか圧縮することができず、圧縮率は、"０．１８７５"になる。
【００４０】
すなわち、図６に示す例では、圧縮データを一般のランレングス符号で圧縮した場合の圧縮データの約６７％に削減することができ、圧縮効率を向上させることができる。この結果、機器２００のファームウェアの更新データをデータ配信装置１００から各機器２００に配信する場合に必要なネットワークＮＷのトラフィック量を、ランレングス符号で圧縮する場合に比べて約３分の２に削減することができる。
【００４１】
圧縮データの伸長は、圧縮と逆の手順で実行される。例えば、０値の連続数が示す数の０値を復元し、圧縮データ中の非０値の連続数分の非０値を圧縮データから取り出す処理を繰り返すことで、圧縮前のデータ列である差分データ列を復元することができる。伸長処理では、ランレングス符号と同様に、圧縮データを順次読み出しながら圧縮データを伸長することができる。このため、ＭＣＵ２０２が伸長時に使用するワークメモリの使用量を抑えることができる。
【００４２】
図７は、図３のデータ配信装置１００の圧縮処理部１２４による圧縮処理の一例を示すフロー図である。すなわち、図７は、データ配信装置１００により実行されるデータ圧縮方法の一例を示す。例えば、図７に示す処理は、データ配信装置１００のプロセッサ１０２が、データ圧縮プログラムを実行することで実現される。
【００４３】
まず、ステップＳ１００において、プロセッサ１０２は、ファームウェアの更新データ（差分データ）であるデータ列を差分データ生成部１２２から入力する。次に、ステップＳ１０２において、プロセッサ１０２は、データ列における０値の連続数をカウントする。次に、ステップＳ１０４において、プロセッサ１０２は、ステップＳ１０２でカウントした０値の連続数を１バイトの圧縮データとして出力する。なお、ステップＳ１０２で０値の連続数が０個であった場合、すなわち、データ列の先頭が非０値であった場合、プロセッサ１０２は、０値の連続数"００ｈ"を出力する。
【００４４】
次に、ステップＳ１０６において、プロセッサ１０２は、データ列が終了した場合、図７に示す処理を終了し、圧縮していないデータ列がある場合、ステップＳ１０８を実行する。ステップＳ１０８において、プロセッサ１０２は、データ列における１バイトの非０値の連続数をカウントする。次に、ステップＳ１１０において、プロセッサ１０２は、ステップＳ１０８でカウントした非０値の連続数を圧縮データとして出力する。次に、ステップＳ１１２において、プロセッサ１０２は、ステップＳ１０８でカウントした連続数分の非０値を順次出力する。次に、ステップＳ１１４において、プロセッサ１０２は、データ列が終了した場合、図７に示す処理を終了し、圧縮していないデータ列がある場合、ステップＳ１０２を実行する。
【００４５】
図８は、図５の機器２００の伸長処理部２２４による伸長処理の一例を示す説明図である。すなわち、図８は、機器２００により実行されるデータ伸長方法の一例を示す。例えば、図８に示す処理は、データ配信装置１００のＭＣＵ２０２が、データ伸長プログラムを実行することで実現される。
【００４６】
まず、ステップＳ２００において、ＭＣＵ２０２は、ネットワークＮＷを介してデータ配信装置１００からファームウェアの更新データ（差分データ）である圧縮データ（データ列）を受信（入力）する。例えば、ＭＣＵ２０２は、ステップＳ２０２からステップＳ２１０の処理を、データ列を受信しながら実行する。しかしながら、ＲＡＭ２０６等の記憶装置のメモリ容量に余裕がある場合、ＭＣＵ２０２は、ファームウェアの全ての更新データをステップＳ２００で受信した後、ステップＳ２０２以降の処理を実行してもよい。
【００４７】
次に、ステップＳ２０２において、ＭＣＵ２０２は、受信したデータ列から０値の連続数（１バイト）を取り出す。次に、ステップＳ２０４において、ＭＣＵ２０２は、ステップＳ２０２で取り出した０値の連続数分の０値を復元する。なお、データ列の先頭において、ステップＳ２０２で取り出した０値の連続数が"００ｈ"の場合、データ列の先頭は、非０値である。この場合、ＭＣＵ２０２は、ステップＳ２０４で０値を復元しない。
【００４８】
次に、ステップＳ２０６において、ＭＣＵ２０２は、データ列が終了した場合、図８に示す処理を終了し、伸長していないデータ列がある場合、ステップＳ２０８を実行する。ステップＳ２０８において、ＭＣＵ２０２は、データ列から非０値の連続数（１バイト）を取り出す。次に、ステップＳ２１０において、ＭＣＵ２０２は、ステップＳ２０８で取り出した連続数分の非０値をデータ列から取り出す。次に、ステップＳ２１２において、ＭＣＵ２０２は、データ列が終了した場合、図８に示す処理を終了し、伸長していないデータ列がある場合、ステップＳ２０２を実行する。
【００４９】
以上、第１の実施形態では、差分データが０値であるか非０値であるかに応じて圧縮データを生成することで、０値については、圧縮データ中に０値の連続数のみを配置すればよく、０値であることを示す情報を不要にすることができる。この結果、データ列である差分データの圧縮効率を向上させることができ、圧縮データを配信する場合のトラフィック量を削減することができる。また、ランレングス符号と同様に、圧縮データを順次読み出しながら伸長することができるため、ＭＣＵ２０２が伸長時に使用するワークメモリの使用量を抑えることができる。
【００５０】
（第２の実施形態）
図９は、本発明の第２の実施形態のデータ配信システムにおけるデータ配信装置による圧縮処理と機器による伸長処理との一例を示す説明図である。図６と同様の要素については、詳細な説明は省略する。この実施形態では、出現する連続数の最大値を表現可能な最小限のビット数を使用して、連続数を表すことで、圧縮データのサイズを削減する。また、先頭データが０値、非０値のいずれであるかを示す情報をヘッダに付加することで、表現可能な最大の連続数を増やす。さらに、最終データが０値、非０値のいずれであるかを示す情報をヘッダに付加することで、圧縮データの末尾に付加するパディングが０値の連続数と判断されることを抑止する。
【００５１】
図９に示す圧縮処理および伸長処理を実行するデータ配信システムＳＹＳの構成は、図１と同様である。すなわち、データ配信装置１００は、圧縮処理部１２４（図３）の機能が第１の実施形態と異なることを除き、図２および図３と同様である。機器２００は、伸長処理部２２４（図５）の機能が第１の実施形態と異なることを除き、図４および図５と同様である。
【００５２】
図９においても、図６と同様に、ファームウェアの更新データのうち、６４バイトの差分データ列を圧縮および伸長する例を示す。この実施形態では、図６に示した圧縮データであるボディの前にヘッダが配置される。すなわち、１バイト目の圧縮データの前にヘッダが配置される。
【００５３】
まず、圧縮処理部１２４は、圧縮データを生成する差分データ列（この例では、６４バイト）を読み出し、０値の連続数の最大値である第１最大連続数と、非０値の連続数の最大値である第２最大連続数とを算出する。図９に示す例では、第１最大連続数は、"１Ａｈ"であり、５ビットで表現可能である。第２最大連続数は、"０２ｈ"であり、２ビットで表現可能である。５ビットは、０値の第１最大連続数を表現可能な最小の第１ビット数の一例であり、２ビットは、非０値の第２最大連続数を表現可能な最小の第２ビット数の一例である。
【００５４】
そして、圧縮処理部１２４は、予め設定された８ビットで表した第１最大連続数と、予め設定された６ビットで表した第２最大連続数とをヘッダに順次配置する。なお、第１最大連続数を表すビット数は、８ビットに限定されず、圧縮する差分データ列に含まれる０値の最大連続数に基づいて予め決定される。同様に、第２最大連続数を表すビット数は、６ビットに限定されず、圧縮する差分データ列に含まれる非０値の最大連続数に基づいて予め決定される。
【００５５】
ここで、ファームウェアの更新データでは、差分データ列に含まれる第２最大連続数は、第１最大連続数より少ないことが統計的に分かっている。このため、第２最大連続数のビット数を第１最大連続数のビット数より小さくすることで、ヘッダのサイズを削減することができる。また、第２最大連続数をバイトではなくビットで表すことで、ヘッダのサイズを削減することができる。
【００５６】
圧縮処理部１２４は、差分データ列の先頭の１バイトデータが０値であるか非０値であるかを示す１ビットの開始情報を第２最大連続数の後ろに配置する。例えば、開始情報の"０"は、先頭データが０値であることを示し、開始情報の"１"は、先頭データが非０値であることを示す。ヘッダに開始情報を配置することで、先頭データが非０値である場合に、ボディの先頭に非０値の連続数と非０値の連続数分の非０値自体を配置することができる。すなわち、ボディの先頭の０値の連続数を"０"に設定しなくてよい。
【００５７】
このため、０値の連続数が"１"の場合、ボディに連続数"０"を配置し、０値の連続数が"１００ｈ"の場合、ボディに連続数"ＦＦ"を配置することができる。したがって、ボディに配置する０値の連続数の数（種類）を第１の実施形態に比べて増やすことができる。さらに、通常、ボディにおいて、０値の表現方法と非０値の表現方法とは統一されるため、ボディで表せる非０値の連続数も、第１の実施形態に比べて増やすことができる。
【００５８】
なお、図９では、説明が複雑になることを避けるため、ボディにおける０値の表現方法と非０値の表現方法は、第１の実施形態と同じとする。すなわち、例えば、０値および非０値の連続数が"１"の場合、ボディにそれぞれ連続数"１"が配置される。
【００５９】
次に、圧縮処理部１２４は、差分データ列の末尾の１バイトデータが０値であるか非０値であるかを示す１ビットの終了情報を開始情報の後ろに配置する。例えば、終了情報の"０"は、末尾データが０値であることを示し、終了情報の"１"は、末尾データが非０値であることを示す。
【００６０】
ボディがバイト単位でなくビット単位で表現される場合、ボディの最終バイトに、差分データでないパディングが付加される場合がある。このため、差分データの最後のデータが非０値であり、かつ、パディングが付加されている場合、伸長処理部２２４（図５）がパディングを０値の連続数と判断しない仕組みが必要である。
【００６１】
この実施形態では、ヘッダの終了情報で、末尾データが非０値であることが示された場合、伸長処理部２２４は、パディングを０値の連続数と判断せずに読み捨てることができる。この結果、ボディがビット単位で表される場合にも、圧縮データの伸長処理を正しく実行することができ、ファームウェアの更新処理を正常に実行することができる。
【００６２】
ヘッダを生成した後、圧縮処理部１２４は、ボディにおいて、０値の連続数を、第１最大連続数を表現可能な５ビットで表し、非０値の連続数を、第２最大連続数を表現可能な２ビットで表す。非０値の連続数の後に配置される非０値自体は、図６と同様に、１バイトで表される。
【００６３】
これにより、この実施形態では、ヘッダが追加されるものの、ボディに配置される０値および非０値の連続数の総ビット数を削減することができるため、圧縮データの圧縮効率を、図６に比べて向上させることができる。特に、０値と非０値とが繰り返される数が多いほど、圧縮効率を高くすることができる。この結果、機器２００のファームウェアの更新データをデータ配信装置１００から各機器２００に配信する場合に必要なネットワークＮＷのトラフィック量をさらに削減することができる。
【００６４】
図１０および図１１は、第２の実施形態のデータ配信装置１００の圧縮処理部１２４による圧縮処理の一例を示すフロー図である。すなわち、図１０および図１１は、データ配信装置１００により実行されるデータ圧縮方法の一例を示す。例えば、図１０および図１１に示す処理は、データ配信装置１００のプロセッサ１０２が、データ圧縮プログラムを実行することで実現される。図７と同様の処理については、詳細な説明は省略する。
【００６５】
まず、ステップＳ１２０において、プロセッサ１０２は、ファームウェアの更新データ（差分データ）であるデータ列を差分データ生成部１２２から入力する。次に、ステップＳ１２２において、プロセッサ１０２は、データ列における０値の連続数を全てカウントする。次に、ステップＳ１２４において、プロセッサ１０２は、ステップＳ１２２でカウントした０値の連続数の全てから最大の連続数である最大連続数を算出する。
【００６６】
次に、ステップＳ１２６において、プロセッサ１０２は、データ列における非０値の連続数を全てカウントする。次に、ステップＳ１２８において、プロセッサ１０２は、ステップＳ１２６でカウントした非０値の連続数の全てから最大の連続数である最大連続数を算出する。次に、ステップＳ１３０において、プロセッサ１０２は、ステップＳ１２４、Ｓ１２６で算出した０値と非０値の最大連続数をヘッダとして出力する。
【００６７】
次に、ステップＳ１３２において、プロセッサ１０２は、圧縮データを生成する差分データ列の先頭データが０値である場合、ステップＳ１３４を実行し、差分データ列の先頭データが非０値である場合、ステップＳ１３６を実行する。ステップＳ１３４おいて、プロセッサ１０２は、ヘッダの開始情報として、先頭データが０値であることを示す１ビットの"０"を出力し、ステップＳ１３８を実行する。ステップＳ１３６おいて、プロセッサ１０２は、ヘッダの開始情報として、先頭データが非０値であることを示す１ビットの"１"を出力し、ステップＳ１３８を実行する。
【００６８】
ステップＳ１３８において、プロセッサ１０２は、圧縮データを生成する差分データ列の末尾データが０値である場合、ステップＳ１４０を実行し、差分データ列の末尾データが非０値である場合、ステップＳ１４２を実行する。ステップＳ１４０おいて、プロセッサ１０２は、ヘッダの終了情報として、末尾データが０値であることを示す１ビットの"０"を出力し、図１１のステップＳ１４４を実行する。ステップＳ１４２おいて、プロセッサ１０２は、ヘッダの終了情報として、末尾データが非０値であることを示す１ビットの"１"を出力し、図１１のステップＳ１４４を実行する。
【００６９】
ステップＳ１４４において、プロセッサ１０２は、圧縮データを生成する差分データ列の先頭データが０値である場合、ステップＳ１４６を実行し、差分データ列の先頭データが非０値である場合、ステップＳ１５０を実行する。ステップＳ１４６において、プロセッサ１０２は、０値の連続数を圧縮データ（ボディ）として出力する。次に、ステップＳ１４８において、プロセッサ１０２は、データ列が終了した場合、図１０および図１１に示す処理を終了し、圧縮していないデータ列がある場合、ステップＳ１５０を実行する。
【００７０】
ステップＳ１５０において、プロセッサ１０２は、非０値の連続数を圧縮データとして出力する。次に、ステップＳ１５２において、プロセッサ１０２は、ステップＳ１５０で出力した連続数分の非０値を順次出力する。次に、ステップＳ１５４において、プロセッサ１０２は、データ列が終了した場合、図１０および図１１に示す処理を終了し、圧縮していないデータ列がある場合、ステップＳ１４６を実行する。なお、プロセッサ１０２は、データ列が終了した場合であって、ボディの最終バイトに値を定めていないビットがある場合、パディングを付加する。
【００７１】
図１２および図１３は、第２の実施形態の機器２００の伸長処理部２２４による伸長処理の一例を示すフロー図である。すなわち、図１２および図１３は、機器２００により実行されるデータ伸長方法の一例を示す。例えば、図１２および図１３に示す処理は、データ配信装置１００のＭＣＵ２０２が、データ伸長プログラムを実行することで実現される。図８と同様の処理については、詳細な説明は省略する。
【００７２】
まず、ステップＳ２２０において、ＭＣＵ２０２は、ネットワークＮＷを介してデータ配信装置１００からファームウェアの更新データ（差分データ）である圧縮データ（データ列）を受信する。すなわち、ＭＣＵ２０２は、０値の第１最大連続数、非０値の第２最大連続数、開始情報および終了情報を含むヘッダと、０値の連続数、非０値の連続数および非０値とを含むボディとを入力する。
【００７３】
例えば、ＭＣＵ２０２は、データ列からヘッダを受信した後、ボディを受信する前にステップＳ２２２からステップＳ２２８を実行してもよい。あるいは、ＭＣＵ２０２は、データ列からヘッダおよびボディを受信した後、ステップＳ２２２を開始してもよい。
【００７４】
ステップＳ２２２において、ＭＣＵ２０２は、受信したヘッダから０値の最大連続数を取り出し、ボディに格納された０値の連続数のビット数を算出する。次に、ステップＳ２２４において、ＭＣＵ２０２は、受信したヘッダから非０値の最大連続数を取り出し、ボディに格納された非０値の連続数のビット数を算出する。次に、ステップＳ２２６において、ＭＣＵ２０２は、受信したヘッダから開始情報を取り出す。次に、ステップＳ２２８において、ＭＣＵ２０２は、受信したヘッダから終了情報を取り出す。
【００７５】
次に、図１３のステップＳ２３０において、ＭＣＵ２０２は、図１２のステップＳ２２６で取り出した開始情報に基づいて、受信したデータ列（圧縮データ）のボディの先頭データが０値であるか否かを判定する。ＭＣＵ２０２は、先頭データが０値の場合、ステップＳ２３２を実行し、先頭データが非０値である場合、ステップＳ２３８を実行する。ステップＳ２３２からステップＳ２４２の処理は、図８のステップＳ２０２からステップＳ２１２の処理とそれぞれ同様である。
【００７６】
以上、第２の実施形態においても、第１の実施形態と同様に、０値については、圧縮データ中に０値の連続数のみを配置すればよく、０値であることを示す情報を不要にすることができる。さらに、第２の実施形態では、ボディに配置される０値および非０値の連続数を表すビット数を削減することで、ボディの総ビット数を削減することができる。これにより、圧縮データの圧縮効率を、第１の実施形態に比べて向上させることができる。この結果、機器２００のファームウェアの更新データをデータ配信装置１００から各機器２００に配信する場合に必要なネットワークＮＷのトラフィック量をさらに削減することができる。
【００７７】
ヘッダに開始情報を配置することで、先頭データが非０値である場合に、ボディの先頭の０値の連続数を"０"に設定しなくてよい。したがって、ボディに配置する０値の連続数の数（種類）を第１の実施形態に比べて増やすことができる。
【００７８】
また、ヘッダに終了情報を配置することで、伸長処理部２２４は、末尾データが非０値である場合、パディングを０値の連続数と判断せずに読み捨てることができる。この結果、ボディがビット単位で表される場合にも、圧縮データの伸長処理を正しく実行することができ、ファームウェアの更新処理を正常に実行することができる。
【００７９】
（第３の実施形態）
図１４は、本発明の第３の実施形態のデータ配信システムにおけるデータ配信装置による圧縮処理と機器による伸長処理の一例を示す説明図である。図６および図９と同様の要素については、詳細な説明は省略する。この実施形態では、圧縮データのボディに連続数を格納する代わりに、出現する連続数を示すコード値を格納することで、ボディのサイズを削減する。
【００８０】
図１４に示す圧縮処理および伸長処理を実行するデータ配信システムＳＹＳの構成は、図１と同様である。すなわち、データ配信装置１００は、圧縮処理部１２４（図３）の機能が第１の実施形態と異なることを除き、図２および図３と同様である。機器２００は、伸長処理部２２４（図５）の機能が第１の実施形態と異なることを除き、図４および図５と同様である。
【００８１】
この実施形態では、図９と同様に、圧縮データであるボディの前にヘッダが配置される。図示は省略するが、以下では、ファームウェアの更新データのうち、図６に示した６４バイトの差分データ列を圧縮および伸長する例を示す。
【００８２】
ヘッダは、図９に示した第１最大連続数、第２最大連続数、開始情報および終了情報に加えて、差分データ列で出現可能な０値の全ての連続数に対応して、連続数の出現の有無を示す存在情報を有する。存在情報の数は、例えば、データ配信システムの設計時に、過去のファームウェアの更新に使用した差分データ列の０値の連続数の統計情報に基づいて決められる。図１４に示す例では、出現可能な１個から７１５個の０値の連続数の各々の存在の有無を示す７１５個の存在情報（各々１ビット）がヘッダに格納される。
【００８３】
ボディは、０値の連続数を示すビット数が図９と異なることを除き、図９のボディと同じである。ボディに格納される０値の連続数は、実際に存在する０値の連続数の数（種類）を表現可能な最小限のビット数で示される。すなわち、ボディに格納される０値の連続数は、ヘッダにおいて"１"が設定された存在情報の総数を表現可能な最小限のビット数で示される。
【００８４】
なお、この実施形態においても、ヘッダに開始情報が含まれるため、第２の実施形態と同様に、０値の連続数および非０値の連続数は、それぞれボディの１バイトを使用して１個から２５６個まで表すことができる。しかしながら、図１４においても説明が複雑になることを避けるため、ボディにおける０値の表現方法と非０値の表現方法は、第１の実施形態と同じとする。すなわち、例えば、０値および非０値の連続数が"１"の場合、ボディにそれぞれ連続数"１"が配置される。
【００８５】
図１４に示す例では、出現する０値の連続数は、"１４ｈ"、"１Ａｈ"、"０Ｆｈ"の３種類であるため、ボディの格納される０値の連続数を示すコード値は、２ビットで表される。また、ボディに格納されるコード値は、連続数が小さい順に割り当てられる。図１４では、連続数"０Ｆｈ"、"１４ｈ"、"１Ａｈ"に対して、２ビットのコード値"００"、"０１"、"１０"がそれぞれ割り当てられる。コード値は、圧縮データに含まれる０値の連続数を示す通し番号の一例である。
【００８６】
図１５は、第３の実施形態において、データ配信装置１００の差分データ生成部１２２が生成する差分データの一例を示す説明図である。図１４で説明したように、０値の連続数の出現回数の最大値（７１５）は、過去のファームウェアの更新に使用した差分データ列の０値の連続数の統計情報に基づいて決定される。同様に、非０値の連続数の出現回数の最大値（１２）は、過去のファームウェアの更新に使用した差分データ列の非０値の連続数の統計情報に基づいて決定される。
【００８７】
例えば、差分データ生成部１２２が生成した差分データにおいて、０値の連続数が１８１通りあったとする（０ｈ〜Ｂ４ｈ）。この場合、ボディに格納する０値の連続数は、８ビットである。また、差分データにおいて、０値と非０値との組み合わせが８６０セットあったとする。
【００８８】
一方、コード値ではなく、０値の連続数自体をボディに格納する場合、７１５通り（００ｈ〜２ＣＡｈ）の連続数を表現するために使用するビット数は、１０ビットである。したがって、この実施形態では、ボディに０値の連続数自体を格納する場合に比べて、０値と非０値との組み合わせ毎に２ビットを削減することができる。
【００８９】
例えば、差分データにおいて、０値と非０値との組み合わせが８６０セットある場合、ボディのサイズを１７２０ビット（８６０×２ビット）削減することができる。一方、連続数が７１５通りある場合、図１４に示したように、ヘッダのサイズは、７１５ビット増加する。したがって、この実施形態では、ボディに０値の連続数自体を格納する場合に比べて、圧縮データのサイズを１２５バイト（１７２０−７１５＝１００５ビット）削減することができる。
【００９０】
なお、非０値の連続数の数（種類）は１２種類であり、０値の連続数の数に比べて少ない。このため、非０値の連続数の存在情報は、ヘッダに格納されない。このため、圧縮データのボディに格納される非０値の情報は、図９と同じである。なお、出現可能な非０値の連続数の数が、０値の連続数と同様に多い場合、非０値の連続数の存在情報をヘッダに格納してもよい。この場合、圧縮データのボディにおいて、非０値の出現個数は、実際に存在する連続数の数を表現可能な最小限のビット数で示される。
【００９１】
図１６は、第３の実施形態のデータ配信装置１００の圧縮処理部１２４による圧縮処理の一例を示すフロー図である。すなわち、図１６は、データ配信装置１００により実行されるデータ圧縮方法の一例を示す。例えば、図１６に示す処理は、データ配信装置１００のプロセッサ１０２が、データ圧縮プログラムを実行することで実現される。図７、図１０および図１１と同様の処理については、詳細な説明は省略する。
【００９２】
まず、ステップＳ１７０において、プロセッサ１０２は、図１０のステップＳ１２０からステップＳ１４２の処理を実行することで、圧縮データのヘッダの前半部を生成する。次に、ステップＳ１７２において、プロセッサ１０２は、図１０のステップＳ１２２での０値の連続数の全てのカウント結果を用いて、０値の全ての連続数の存在情報を生成し、ヘッダの後半部として出力する。
【００９３】
次に、ステップＳ１７４において、プロセッサ１０２は、実際に出現する０値の連続数の数に基づいて、圧縮データのボディに０値の連続数の代わりに格納するコード値のビット数を算出する。図１４の例では、２ビットに決定され、図１５の例では、コード値は８ビットに決定される。
【００９４】
次に、ステップＳ１７６において、プロセッサ１０２は、図１１のステップＳ１４４からステップＳ１５４の処理を実行することで、圧縮データのボディを生成し、生成したボディを出力し、図１６に示す圧縮処理を終了する。また、ステップＳ１７６で実行される図１１のステップＳ１４６では、プロセッサ１０２は、０値の実際の連続数を出力する代わりに、連続数を示すコード値を出力する。
【００９５】
図１７は、第３の実施形態の機器２００の伸長処理部２２４による伸長処理の一例を示すフロー図である。すなわち、図１７は、機器２００により実行されるデータ伸長方法の一例を示す。例えば、図１７に示す処理は、データ配信装置１００のＭＣＵ２０２が、データ伸長プログラムを実行することで実現される。図８、図１２および図１３と同様の処理については、詳細な説明は省略する。
【００９６】
まず、ステップＳ２６０において、ＭＣＵ２０２は、図１２のステップＳ２２０からステップＳ２２８の処理を実行することで、圧縮データのヘッダの前半部を取り出す。次に、ステップＳ２６２において、ＭＣＵ２０２は、圧縮データのヘッダの後半部から０値の全ての連続数の存在情報を取り出す。
【００９７】
次に、ステップＳ２６４において、ＭＣＵ２０２は、ステップＳ２６２で取り出した存在情報に基づいて、圧縮データのボディに格納されている０値の連続数を示すコード値のビット数を算出する。次に、ステップＳ２６６において、ＭＣＵ２０２は、ステップＳ２６２で取り出した存在情報に基づいて、実際に存在する０値の連続数とコード値との対応表を生成する。例えば、対応表は、図１４の右上の枠内に示した"連続数"と"連続数のコード値"との情報を含む。すなわち、ＭＣＵ２０２は、ヘッダから取り出した存在情報に基づいて、０値の存在する連続数に通し番号を割り当てる。
【００９８】
次に、ステップＳ２６８において、ＭＣＵ２０２は、図１３のステップＳ２３０からステップＳ２４２の処理を実行することで、圧縮データの伸長処理を実行し、図１７に示す処理を終了する。なお、ＭＣＵ２０２は、ステップＳ２６６で生成した対応表を参照し、ボディから取り出した通し番号であるコード値に基づいて０値の連続数を抽出する。
【００９９】
以上、第３の実施形態においても、上述した実施形態と同様に、０値については、圧縮データ中に０値の連続数のみを配置すればよく、０値であることを示す情報を不要にすることができる。また、圧縮データのヘッダに開始情報を配置することで、ボディに配置する０値の連続数の数（種類）を増やすことができる。さらに、圧縮データのヘッダに終了情報を配置することで、伸長処理部２２４は、末尾データが非０値である場合、パディングを０値の連続数と判断せずに読み捨てることができる。
【０１００】
さらに、第３の実施形態では、０値の連続数の代わりに、実際に存在する連続数をコード化したコード値をボディに格納する。これにより、０値の連続数の有無を格納するヘッダのサイズは増加するものの、上述した実施形態に比べて、圧縮データのサイズをさらに削減することができる。
【０１０１】
（第４の実施形態）
図１８は、本発明の第４の実施形態のデータ配信システムにおけるデータ配信装置による圧縮処理と機器による伸長処理との一例を示す説明図である。図６、図９および図１４と同様の要素については、詳細な説明は省略する。この実施形態では、連続数の出現頻度が高い範囲の連続数に割り当てるコード値のビット数を、連続数の出現頻度が低い範囲の連続数に割り当てるコード値のビット数より少なくすることで、圧縮データのボディのサイズを削減する。具体的には、連続数が小さい範囲ほど、連続数の代わりに割り当てるコード値のビット数を少なくし、連続数が大きい範囲ほど、連続数の代わりに割り当てるコード値のビット数を多くする。
【０１０２】
なお、この実施形態は、出現頻度の高いデータに短いコードを割り当てる点で、ハフマン符号に似ている。しかしながら、ハフマン符号では、データ量が大きいハフマン木を示す情報をヘッダに格納する必要があり、ボディのサイズを削減できても、ヘッダのサイズが大きいため、圧縮コード全体のサイズを削減できないおそれがある。さらに、圧縮データにヘッダを設ける場合、機器２００に、ヘッダの情報を記憶しておくメモリ領域を確保する必要がある。このため、ヘッダのサイズは、小さい方が好ましい。
【０１０３】
図１８に示す圧縮処理および伸長処理を実行するデータ配信システムＳＹＳの構成は、図１と同様である。すなわち、データ配信装置１００は、圧縮処理部１２４（図３）の機能が第１の実施形態と異なることを除き、図２および図３と同様である。機器２００は、伸長処理部２２４（図５）の機能が第１の実施形態と異なることを除き、図４および図５と同様である。
【０１０４】
この実施形態では、図９および図１４と同様に、圧縮データであるボディの前にヘッダが配置される。ヘッダは、図９に示した第１最大連続数、第２最大連続数、開始情報および終了情報に加えて、０値において出現可能な全ての連続数を複数の分割グループに分割したときの分割数Ｐｚと、所定数の閾値ｔｚとが配置される領域を有する。分割数Ｐｚは、第１分割数の一例であり、分割数Ｐｚにより分割される０値の連続数の分割グループは、第１グループの一例である。
【０１０５】
０値の閾値ｔｚの個数は、分割数Ｐｚより"１"少ない。分割数Ｐｚが３個以上の場合、閾値ｔｚは、第０閾値ｔｚ（０）から第Ｐｚ−２閾値ｔｚ（Ｐｚ−２）まで存在する。分割数Ｐｚが２個の場合、閾値ｔｚは、第０閾値ｔｚ（０）のみである。閾値ｔｚについては、図１９〜図２１で説明する。
【０１０６】
さらに、ヘッダは、非０値において出現可能な全ての連続数を複数の分割グループに分割したときの分割数Ｐｎと、閾値ｔｎとが配置される領域を有する。分割数Ｐｎは、第２分割数の一例であり、分割数Ｐｎにより分割される非０値の連続数の分割グループは、第２グループの一例である。
【０１０７】
非０値の閾値ｔｎの個数は、分割数Ｐｎより"１"少ない。分割数Ｐｎが３以上の場合、閾値ｔｎは、第０閾値ｔｎ（０）から第Ｐｚ−２閾値ｔｎ（Ｐｎ−２）まで存在する。分割数Ｐｎが２個の場合、閾値ｔｎは、第０閾値ｔｎ（０）のみである。閾値ｔｎについては、図１９〜図２１で説明する。
【０１０８】
添え字"ｚ"は、０値に関するパラメータであることを示し、添え字"ｎ"は、非０値に関するパラメータであることを示す。以下では、０値と非０値を区別せずにパラメータを示す場合、添え字"ｚ"または添え字"ｎ"が省略される場合がある。
【０１０９】
ボディは、０値の連続数を示すビット数と非０値の連続数を示すビット数とが図９と異なることを除き、図９および図１４のボディと同様である。ボディの枠外に示す符号"ｂ"は、数値が２進数であることを示す。データ配信装置１００の圧縮処理部１２４は、ボディに格納する０値および非０値の連続数を、後述する図１９および図２０に示すコード値として求める。例えば、ボディに格納された非０値のコード値は、図１９に示すコード値に対応する。
【０１１０】
この実施形態では、０値および非０値の連続数をそれぞれＰｚ個およびＰｎ個のグループに分割する。そして、出現可能な全ての連続数について、統計的に出現頻度が高いことが分かっている連続数が小さいグループほど、連続数を示すコード値を少ないビット数で表し、統計的に出現頻度が低いことが分かっている連続数が大きいグループほど、連続数を示すコード値を多いビット数で表現する。
【０１１１】
図１９および図２０は、図１８に示すボディに格納する０値または非０値の連続数ｍに対応するコード値の例を示す説明図である。０値の連続数ｍに対応するコード値は、第１コード値の一例である。非０値の連続数ｍに対応するコード値は、第２コード値の一例である。図１９および図２０は、０値と非０値とに共通であるため、０値を示す添え字"ｚ"と非０値を示す添え字"ｎ"とは省略される。
【０１１２】
図１９および図２０に示す符号"ｂ"は、数値が２進数であることを示し、その他の値は１０進数で示される。図１９および図２０では、説明を簡単にするために、存在しない連続数ｍ＝"０"にコード値"００ｂ"を割り当て、連続数ｍ＝"１２"まで対応可能にしている。しかし、実際には、連続数ｍ＝"１"にコード値＝"００ｂ"を割り当て、連続数ｍ＝"２"〜"１３"にコード値を順次割り当てることで、連続数ｍ＝"１３"まで対応させることができる。
【０１１３】
図１９は、分割数Ｐが２個の場合の例を示す。分割数Ｐが２個の場合、分割グループは２個である。図１９では、１個の閾値ｔ（０）＝"３"が使用される。図１９に網掛けで示す閾値ｔ（０）＝"３"は、連続数ｍを順次増加させ、データ値ｖ（１）を示す４ビットの使用が開始されるときのデータ値ｖ（０）＝"３"と等しい。
【０１１４】
第０分割グループは、連続数ｍ＝"１"、"２"を含み、データ値ｖ（０）で示される２ビットのコード値で表される。第１分割グループは、連続数ｍ＝"３"〜"１２"を含み、データ値ｖ（０）で示される２ビットとデータ値ｖ（１）で示される４ビットとを合わせた６ビットのコード値で表される。
【０１１５】
図２０は、分割数Ｐが３個の場合の例を示す。分割数Ｐが３個の場合、分割グループは３個である。図２０では、２個の閾値ｔ（０）＝"２"、ｔ（１）＝"１"が使用される。図２０に網掛けで示す閾値ｔ（０）＝"２"は、連続数ｍを順次増加させ、データ値ｖ（１）を示す１ビットの使用が開始されるときのデータ値ｖ（０）である。同様に、図２０に網掛けで示す閾値ｔ（１）＝"１"は、連続数ｍを順次増加させ、データ値ｖ（２）を示す３ビットの使用が開始されるときのデータ値ｖ（１）＝"１"に等しい。
【０１１６】
第０分割グループは、連続数ｍ＝"１"を含み、データ値ｖ（０）で示される２ビットのコード値で表される。第１分割グループは、連続数ｍ＝"２"、"３"を含み、データ値ｖ（０）で示される２ビットと、データ値ｖ（１）で示される１ビットとを合わせた３ビットのコード値で表される。第２分割グループは、連続数ｍ＝"４"〜"１２"を含み、データ値ｖ（０）で示される２ビットと、データ値ｖ（１）で示される１ビットと、データ値ｖ（２）で示される３ビットとを合わせた６ビットのコード値で表される。
【０１１７】
データ配信装置１００の圧縮処理部１２４は、差分データ中に出現する連続数ｍに応じて、２進数で示したコード値を圧縮データのボディに格納する。例えば、圧縮処理部１２４は、連続数ｍとコード値との対応表と検索することで、連続数ｍに対応するコード値を求める。
【０１１８】
なお、圧縮処理部１２４は、複数組の分割グループの分割数Ｐと閾値ｔ（ｐ）の中から、コード値の平均ビット数が最小となる組み合わせ（最適解）を探索により求める。この際、圧縮処理部１２４は、複数種の分割数Ｐと閾値ｔとに対応して予め設けられる連続数ｍとコード値とを含む複数の対応表の中から最適な対応表を選択してもよい。
【０１１９】
図１９および図２０に示すように、新旧のファームウェアのデータの差を示す差分データは、連続数ｍが少ない側での出現回数が多く、連続数ｍが多い側での出現回数が少ない場合がある。この場合に、小さい連続数ｍに対応する分割グループに割り当てるコード値のビット数を、大きい連続数ｍに対応する分割グループに割り当てるコード値のビット数より少なくすることで、連続数ｍを表すコード値の平均ビット数を削減することができる。この結果、圧縮データのボディのサイズを削減することができる。なお、圧縮処理部１２４は、最適解の探索により、図１９および図２０のうち、平均ビット数が少ない図１９を採用する。
【０１２０】
図２１は、機器２００の伸長処理部２２４がコード値から連続数を抽出する場合に使用する数式の一例を示す説明図である。図２１は、０値と非０値とに共通であるため、０値を示す添え字"ｚ"と非０値を示す添え字"ｎ"とは省略される場合がある。符号Ｍは、連続数ｍの最大値を示し、図１９および図２０では、Ｍ＝"１２"である。符号ｍは、連続数の各々を示し、"１"から"Ｍ"で表される。符号Ｐは、分割数を示す。符号ｐは、分割グループ番号を示し、"０"から"Ｐ−１"で表される。
【０１２１】
符号ｔ（ｐ）は、ｐ番目の閾値ｔを示し、図１９では、ｔ（０）のみであり、図２０では、ｔ（０）、ｔ（１）である。なお、０値における閾値ｔｚ（ｐ）は、分割グループ毎に割り当てられるコード値のビット数を得るための第１ビット数情報の一例である。非０値における閾値ｔｎ（ｐ）は、分割グループ毎に割り当てられるコード値のビット数を得るための第２ビット数情報の一例である。
【０１２２】
符号ｖ（ｐ）は、コード値を構成するデータ値を示し、"０〜閾値ｔ（ｐ）−１"で示される。コード値を構成するデータ値ｖ（ｐ）の個数は、分割グループの番号が増加し、データ値ｖ（ｐ）が閾値ｔ（ｐ）に到達する毎に１つずつ増加する。
【０１２３】
図１９では、閾値ｔ（０）＝"３"であるため、データ値ｖ（０）は、閾値ｔ（０）より１つ小さい"０"、"１"、"２"のいずれかであり、２ビットで表されることが分かる。なお、実際には、データ値ｖ（０）＝"０"は、使用されない。このため、第０分割グループの連続数ｍは、データ値ｖ（０）を使用して"１"、"２"のいずれかになる。
【０１２４】
また、図１９では、データ値ｖ（１）は、閾値ｔ（１）がないため、閾値ｔ（１）からは得られない。しかしながら、データ値ｖ（１）は、閾値ｔ（１）がないことから最後のデータ値ｖ（１）であることが分かる。最後のデータ値ｖ（１）は、例えば、連続数の最大値Ｍを表現可能なビット数（例えば、４ビット）で表される。データ値ｖ（１）は、第０分割グループで表されない連続数ｍ＝"３"から連続数の最大値Ｍ＝"１２"までに対応する"０"〜"９"のいずれかである。このため、第１分割グループの連続数ｍは、データ値ｖ（０）＝"３"とデータ値ｖ（１）＝"０"〜"９"とを使用して、"３"〜"１２"のいずれかになる。
【０１２５】
図２０では、閾値ｔ（０）＝"２"であるため、データ値ｖ（０）は、閾値ｔ（０）より１つ小さい"０"、"１"のいずれかであり、１ビットで表されることが分かる。このため、第０分割グループの連続数ｍは、データ値ｖ（０）を使用して"１"のみになる。
【０１２６】
また、図２０では、閾値ｔ（１）＝"１"であるため、データ値ｖ（１）は、閾値ｔ（０）より１つ小さい"０"のみであり、１ビットで表されることが分かる。このため、第１分割グループの連続数ｍは、データ値ｖ（０）とデータ値ｖ（１）とを使用して、"２"、"３"のいずれかになる。
【０１２７】
図２０では、データ値ｖ（２）は、閾値ｔ（２）がないため、閾値ｔ（２）からは得られない。しかしながら、データ値ｖ（２）は、閾値ｔ（２）がないことから最後のデータ値ｖ（２）であることが分かる。最後のデータ値ｖ（２）は、例えば、３ビットで表される。このため、第２分割グループの連続数ｍは、データ値ｖ（０）とデータ値ｖ（１）とデータ値ｖ（２）とを使用して、"４"〜"１２"のいずれかになる。
【０１２８】
符号ｒ（ｐ）は、数式を使用してコード値から連続数ｍを算出する場合に各データ値ｖ（１）、ｖ（２）に乗じる係数を示す。例えば、係数ｒ（ｐ）は、閾値ｔ（ｐ）を超える最小の２のべき乗から閾値ｔ（ｐ）を引くことで求められる。図１９では、係数ｒ（０）は、"１"である。図２０では、係数ｒ（０）は、"２"であり、係数ｒ（１）は、"１"である。
【０１２９】
伸長処理部２２４は、圧縮データに含まれる差分データを伸長する場合、まず、分割数Ｐと、分割数Ｐに応じた個数の閾値ｔ（ｐ）をヘッダから取得する。次に、伸長処理部２２４は、閾値ｔ（ｐ）から係数ｒ（ｐ）を算出する。そして、伸長処理部２２４は、閾値ｔ（ｐ）と算出した係数ｒ（ｐ）とを、予め保持している数式に当てはめ、分割グループ毎に割り当てられた連続数ｍを求める。
【０１３０】
実際には、伸長処理部２２４は、コード値に対応する連続数ｍを判定できるまで、連続数に対応するコード値をボディから１ビットずつ取り出す。例えば、分割数Ｐ＝"２"で、閾値ｔ（０）＝"３"の場合（図１９）、次のように、連続数を判定する。
【０１３１】
伸長処理部２２４は、コード値の最初の１ビット（第１ビット）が"０"の場合、連続数ｍ＝"１"と判定する。伸長処理部２２４は、コード値の第１ビットが"１"の場合、次のビット（第２ビット）を取り出す。伸長処理部２２４は、第２ビットが"０"の場合、連続数ｍ＝"２"と判定する。
【０１３２】
伸長処理部２２４は、第２ビットが"１"の場合、次の４ビット（第３ビット〜第６ビット）を取り出す。そして、伸長処理部２２４は、第３ビット〜第６ビットで示されるデータ値に応じて、連続数ｍを"３"〜"１２"のいずれかであると判定する。
【０１３３】
また、分割数Ｐ＝"３"で、閾値ｔ（０）＝"２"、閾値ｔ（１）＝"１"の場合（図２０）、次のように、連続数を判定する。伸長処理部２２４は、コード値の最初の１ビット（第１ビット）が"０"の場合、連続数ｍ＝"１"と判定する。伸長処理部２２４は、第１ビットが"１"の場合、次の２ビット（第２ビットと第３ビット）を取り出す。伸長処理部２２４は、第３ビットが"０"の場合、第２ビットの値に応じて連続数ｍ＝"２"または"３"と判定する。
【０１３４】
伸長処理部２２４は、第３ビットが"１"の場合、第４ビット〜第６ビットを取り出す。そして、伸長処理部２２４は、第２ビットと第４ビット〜第６ビットで示されるデータ値に応じて、連続数ｍを"４"〜"１２"のいずれかであると判定する。
【０１３５】
このように、伸長処理部２２４は、分割数Ｐと閾値ｔ（ｐ）とに基づいて決定される所定の規則に基づいて、連続数ｍが属する分割グループ毎に異なるコード値のビット値から連続数ｍを判定することができる。
【０１３６】
図２２は、第４の実施形態のデータ配信装置１００の圧縮処理部１２４による圧縮処理の一例を示すフロー図である。すなわち、図２２は、データ配信装置１００により実行されるデータ圧縮方法の一例を示す。例えば、図２２に示す処理は、データ配信装置１００のプロセッサ１０２が、データ圧縮プログラムを実行することで実現される。図７、図１０、図１１および図１６と同様の処理については、詳細な説明は省略する。
【０１３７】
まず、ステップＳ１８０において、プロセッサ１０２は、図１０のステップＳ１２０からステップＳ１４２の処理を実行することで、圧縮データのヘッダの前半部を生成する。次に、ステップＳ１８２において、プロセッサ１０２は、ステップＳ１２２（図１０）でカウントした０値の全ての連続数に基づいて、ヘッダに格納する０値の連続数の分割数Ｐｚと閾値ｔｚとの最適解を探索する。また、プロセッサ１０２は、ステップＳ１２６（図１０）でカウントした非０値の全ての連続数に基づいて、ヘッダに格納する非０値の連続数の分割数Ｐｎと閾値ｔｎとの最適解を探索する。
【０１３８】
次に、ステップＳ１８４において、プロセッサ１０２は、ステップＳ１８２で最適解として得た０値の分割数Ｐｚと閾値ｔｚおよび非０値の分割数Ｐｎと閾値ｔｎをヘッダの後半部として出力する。ここで、最適解は、０値と非０値毎に、圧縮データのサイズが最も小さくなる分割数Ｐｚおよび閾値ｔｚと、分割数Ｐｎおよび閾値ｔｎとである。
【０１３９】
次に、ステップＳ１８６において、プロセッサ１０２は、ステップ１８２の探索で得た０値の最適解に対応する連続数のコード値を生成する。また、プロセッサ１０２は、ステップ１８２の探索で得た非０値の最適解に対応する連続数のコード値を生成する。
【０１４０】
次に、ステップＳ１８８において、プロセッサ１０２は、図１１のステップＳ１４４からステップＳ１５４の処理を実行することで、圧縮データのボディを生成し、生成したボディを出力し、図２２に示す圧縮処理を終了する。
【０１４１】
なお、ステップＳ１８８で実行される図１１のステップＳ１４６、Ｓ１６２では、プロセッサ１０２は、０値の実際の連続数を出力する代わりに、０値の連続数を示すコード値を出力する。また、ステップＳ１８６で実行される図１１のステップＳ１５０およびステップＳ１５６では、プロセッサ１０２は、非０値の実際の連続数を出力する代わりに、非０値の連続数を示すコード値を出力する。
【０１４２】
図２３は、第４の実施形態の機器２００の伸長処理部２２４による伸長処理の一例を示すフロー図である。すなわち、図２３は、機器２００により実行されるデータ伸長方法の一例を示す。例えば、図２３に示す処理は、データ配信装置１００のＭＣＵ２０２が、データ伸長プログラムを実行することで実現される。図８、図１２、図１３および図１７と同様の処理については、詳細な説明は省略する。
【０１４３】
まず、ステップＳ２７０において、ＭＣＵ２０２は、図１２のステップＳ２２０からステップＳ２２８の処理を実行することで、圧縮データのヘッダの前半部である第１最大連続数、第２最大連続数、開始情報および終了情報を取り出す。次に、ステップＳ２７２において、ＭＣＵ２０２は、圧縮データのヘッダの後半部である０値の連続数の分割数Ｐｚおよび閾値ｔｚと、非０値の連続数の分割数Ｐｎおよび閾値ｔｎとを取り出す。
【０１４４】
次に、ステップＳ２７４において、ＭＣＵ２０２は、図１３のステップＳ２３０からステップＳ２４２の処理を実行することで、圧縮データの伸長処理を実行し、図２３に示す処理を終了する。なお、ステップＳ２７４で実行される図１３のステップＳ２３２では、ＭＣＵ２０２は、図２１で説明した手法により、０値の分割数Ｐｚと閾値ｔｚとに基づいて、ボディから取り出すコード値に対応する０値の連続数を得る。
【０１４５】
同様に、ステップＳ２７４で実行される図１３のステップＳ２３８では、ＭＣＵ２０２は、図２１で説明した手法により、非０値の分割数Ｐｎと閾値ｔｎとに基づいて、ボディから取り出すコード値に対応する非０値の連続数を得る。
【０１４６】
以上、第４の実施形態においても、上述した実施形態と同様に、０値については、圧縮データ中に０値の連続数のみを配置すればよく、０値であることを示す情報を不要にすることができる。また、圧縮データのヘッダに開始情報を配置することで、ボディに配置する０値の連続数の数（種類）を増やすことができる。さらに、圧縮データのヘッダに終了情報を配置することで、伸長処理部２２４は、末尾データが非０値である場合、パディングを０値の連続数と判断せずに読み捨てることができる。
【０１４７】
さらに、第４の実施形態では、経験的に出現頻度の高い連続数に対応するコード値のビット数を少なくすることで、ボディのサイズをさらに削減することができる。この際、連続数を小さい順から大きい順に複数のグループに分割し、連続数が小さい側のグループに割り当てるコード値のビット数を、連続数が大きい側のグループに割り当てるコード値のビット数より少なくする。これにより、連続数の代わりにボディに格納される０値と非０値のコード値のビット数を最小限にすることができ、ヘッダのサイズを最小限にすることができる。この結果、上述した実施形態に比べて、圧縮データのサイズをさらに削減することができる。
【０１４８】
なお、上述した第４の実施形態では、分割数Ｐｚ、Ｐｎと閾値ｔｚ、ｔｎとに基づいて、０値と非０値の両方の連続数に代わるコード値をそれぞれ生成する例について述べた。しかしながら、０値と非０値の一方の連続数に代わるコード値を生成してもよい。
【０１４９】
以上、各実施形態に基づき本発明の説明を行ってきたが、上記実施形態に示した要件に本発明が限定されるものではない。これらの点に関しては、本発明の主旨をそこなわない範囲で変更することができ、その応用形態に応じて適切に定めることができる。
【符号の説明】
【０１５０】
１００  データ配信装置
１０２  プロセッサ
１０４  ＲＯＭ
１０６  ＲＡＭ
１０８  補助記憶装置
１１０  入力装置
１１２  表示装置
１１４  外部インタフェース部
１１６  通信インタフェース部
１２２  差分データ生成部
１２４  圧縮処理部
１２６  通信部
１５０  記録媒体
２００  機器
２０２  ＭＣＵ
２０４  ＲＯＭ
２０６  ＲＡＭ
２０８  フラッシュメモリ
２１０  入力インタフェース部
２１２  入出力インタフェース部
２１４  通信インタフェース部
２２２  通信部
２２４  伸長処理部
２２６  更新処理部
ＢＵＳ  バス
ＦＷ０  旧ファームウェア
ＦＷ１  新ファームウェア
ＮＷ  ネットワーク
ＳＢＵＳ  システムバス
ＳＹＳ  データ配信システム
【要約】
【課題】データ列の圧縮効率を簡易な圧縮手法により向上させることで、圧縮データを配信する場合のトラフィック量を削減する。
【解決手段】データ圧縮方法は、所定値である第１データと前記所定値以外の第２データとが繰り返し連続するデータ列を入力し、入力した前記データ列の先頭から、連続する前記第１データの数である第１連続数と、連続する前記第２データの数である第２連続数とを順次求め、求めた前記第１連続数と、求めた前記第２連続数と、求めた前記第２連続数分の前記第２データとを繰り返し配置して圧縮データを生成することを特徴する。
【選択図】図６【図１】
0006835285.tif 000002
【図２】
0006835285.tif 000003
【図３】
0006835285.tif 000004
【図４】
0006835285.tif 000005
【図５】
0006835285.tif 000006
【図６】
0006835285.tif 000007
【図７】
0006835285.tif 000008
【図８】
0006835285.tif 000009
【図９】
0006835285.tif 000010
【図１０】
0006835285.tif 000011
【図１１】
0006835285.tif 000012
【図１２】
0006835285.tif 000013
【図１３】
0006835285.tif 000014
【図１４】
0006835285.tif 000015
【図１５】
0006835285.tif 000016
【図１６】
0006835285.tif 000017
【図１７】
0006835285.tif 000018
【図１８】
0006835285.tif 000019
【図１９】
0006835285.tif 000020
【図２０】
0006835285.tif 000021
【図２１】
0006835285.tif 000022
【図２２】
0006835285.tif 000023
【図２３】
0006835285.tif 000024