(57)【特許請求の範囲】
【請求項１】
垂直相関を有するデータ値を効率的に符号化するためのコンピュータ・プログラムであって、
各行が複数の列を有する複数の行として論理的に構造化された複数のデータ値にアクセスする機能と、
前記複数のデータ値を圧縮出力ストリームとして符号化する機能であって、該符号化する機能は、
いくつの連続する行が各列内に同じデータ値を有するかどうかを示すマーカ・バイトを作成する機能と、
変化したデータ値を有する各行に対するビット・マスクを作成し、前記ビット・マスク内の１つまたは複数のビットが、前記変化したデータ値のうちの１つを有する前記行内の各列に対してオンに設定される機能を有し、
前記出力ストリーム内に、前記マーカ・バイトおよび前記ビット・マスクを前記変化したデータ値とともに書き込む機能を、
コンピュータに実現させるプログラム。
【請求項２】
圧縮出力ストリームを受信側に送信する機能をさらに含む請求項１に記載のプログラム。
【請求項３】
送信された出力ストリームを受信側で受信する機能と、
前記受信した出力ストリームを前記複数の行と前記複数の列からなる前記論理構造に復号化する機能とをさらに含む請求項２に記載のプログラム。
【請求項４】
復号化された出力ストリームをアプリケーションに対する周期入力として使用する機能をさらに含む請求項３に記載のプログラム。
【請求項５】
アプリケーションが、リアルタイム・アプリケーションである請求項４に記載のプログラム。
【請求項６】
データ値が、バイト値である請求項１に記載のプログラム。
【請求項７】
各行がそれぞれ、周期的な１組のデータ値を表す請求項１に記載のプログラム。
【請求項８】
垂直相関を有するデータ値を効率的に符号化するためのシステムであって、
複数のデータ値にアクセスする手段であって、前記複数のデータ値は、各行が複数の列を有する複数の行として論理的に構造化される手段と、
前記複数のデータ値を圧縮出力ストリームとして符号化する手段であって、該符号化する手段は、
いくつの連続する行が各列内に同じデータ値を有するかどうかを示すマーカ・バイトを作成する手段と、
変化したデータ値を有する各行に対するビット・マスクを作成し、前記ビット・マスク内の１つまたは複数のビットが、前記変化したデータ値のうちの１つを有する前記行内の各列に対してオンに設定される手段を有し、
前記出力ストリーム内に、前記マーカ・バイトおよび前記ビット・マスクを前記変化したデータ値とともに書き込む手段を、
含むシステム
【請求項９】
圧縮出力ストリームを受信側に送信する手段をさらに含む請求項８に記載のシステム。
【請求項１０】
送信された出力ストリームを受信側で受信する手段と、
前記受信した出力ストリームを前記複数の行と前記複数の列からなる前記論理構造に復号化する手段とをさらに含む請求項９に記載のシステム。
【請求項１１】
復号化された出力ストリームをアプリケーションに対する周期入力として使用する手段をさらに含む請求項１０に記載のシステム。
【請求項１２】
アプリケーションが、リアルタイム・アプリケーションである請求項１１に記載のシステム。
【請求項１３】
データ値が、バイト値である請求項８に記載のシステム。
【請求項１４】
各行がそれぞれ、周期的な１組のデータ値を表す請求項８に記載のシステム。
【請求項１５】
垂直相関を有するデータ値を効率的に符号化する方法であって、
各行が複数の列を有する複数の行として論理的に構造化された複数のデータ値にアクセスするステップと、
前記複数のデータ値を圧縮出力ストリームとして符号化するステップであって、該符号化するステップは、いくつの連続する行が各列内に同じデータ値を有するかどうかを示すマーカ・バイトを作成するステップと、
変化したデータ値を有する各行に対するビット・マスクを作成し、前記ビット・マスク内の１つまたは複数のビットが、前記変化したデータ値のうちの１つを有する前記行内の各列に対してオンに設定されるステップを有し、
前記出力ストリーム内に、前記マーカ・バイトおよび前記ビット・マスクを前記変化したデータ値とともに書き込むステップを、
を含む方法。
【請求項１６】
圧縮出力ストリームを受信側に送信するステップをさらに含む請求項１５に記載の方法。
【請求項１７】
送信された出力ストリームを受信側で受信するステップと、
前記受信した出力ストリームを前記複数の行と前記複数の列からなる前記論理構造に復号化するステップとをさらに含む請求項１６に記載の方法。
【請求項１８】
復号化された出力ストリームをアプリケーションに対する周期入力として使用するステップをさらに含む請求項１７に記載の方法。
【請求項１９】
アプリケーションが、リアルタイム・アプリケーションである請求項１８に記載の方法。
【請求項２０】
データ値が、バイト値である請求項１５に記載の方法。
【請求項２１】
各行がそれぞれ、周期的な１組のデータ値を表す請求項１５に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ・システムに関し、より詳細には、垂直相関を有する（例えば、リアルタイム・システムまたはリソース制約のあるシステムで使用するため、より効率的に記憶でき、かつ／または電子的に伝送できるように）シーケンスの周期バイト値を符号化する（かつ後で復号化する）ための方法、システム、プログラム、およびコンピュータ・プログラム製品に関する。
【０００２】
【従来の技術】
電子的に伝送される情報の送達時間がクリティカルである多くのコンピュータ・アプリケーションが存在する。また、受信情報の処理時間も、こうしたアプリケーションでは、クリティカルであることがあり、さらには、処理時間は、送達時間が問題とされないアプリケーションでも、クリティカルとなることがある。送達時間と処理時間がともに、一般に特定の制約の影響を受けるコンピュータ・アプリケーションの例には、コンピュータ制御されたロボット、航空管制システムなどのリアルタイム・システムが含まれる。いくつかのコンピュータ装置では、コンピュータ・アプリケーションによって使用されるメモリおよび／または記憶リソース（以降、メモリ・リソースと呼ぶ）もまた、クリティカルな重要性を有し、特に、コンピュータ装置がますます小さくなる現在の傾向（ハンドヘルド・コンピュータやウェアラブル・コンピュータ、ウェブ機能付きセルラー電話機など）とともに、そうなっている。
【０００３】
概観すれば、リアルタイム・システムとは、実行中のアプリケーションが、（通常はアプリケーションに特有の）外部制約によって課される何らかの期間内に、着信イベントに応答しなければならないシステムである。例えば、コンピュータ制御されたロボットの場合、特定の位置でウィジェットがリリースされるのより前にロボットのアームがその位置まで移動するようにする必要があることがある。したがって、ロボットにそのアームを移動させるように告げる命令および目標の宛先を伝える位置情報を、ウィジェットがリリースされる時点までに受け取り、処理しなければならない。別の例として、コンピュータ生成の映画アニメーションなどのグラフィックスを多用するアプリケーション、仮想現実シミュレータ、または変化する気象条件をグラフィックス方式でシミュレートする時間変化気象図は、スムーズな遷移で、また不自然な「ぎこちなさ」なしに表示を生成するためには、新しい情報を非常に迅速に受け取り、処理する必要があることがある。
【０００４】
本発明では、情報の受取り、情報の処理、および／または情報の記憶に関して前述したタイプの制約を有するどのシステムおよびアプリケーションも、呼称を簡単にするため、これ以降、「リアルタイム・システム」および「リアルタイム・アプリケーション」と呼ぶことにする。さらに、「リアルタイム・アプリケーション」という用語と「リアルタイム・システム」という用語は、こうしたタイプのアプリケーションおよびそれらが実行されるシステムを参照するとき、特に明記がない限り、以降区別なく用いる。
【０００５】
アプリケーションが、情報受取り制約上および／または処理時間上の制約を有するとき、アプリケーションがそうした制約を確実に満たすようにするための一方式は、（例えば、より少ない頻度で伝送を行うことにより）それに送られる情報の量を低減することである。ただし、これは、常に実際的な解決法であるわけではない。例えば、ロボットの場合、情報の量を低減させることは、ぎこちない動きをもたらす可能性がある。ロボットが工場の床を掃除するように設計されている場合、この結果は許容可能であり得るが、ロボット方式で行われる外科手術など、他のアプリケーションでは受け入れられない。
【０００６】
リアルタイム・システムによって使用される１つの共通な尺度は、特定タスクの「周期」である。この周期は、そのタスクの実行の固有頻度を表す時間間隔である。例えば、仮想現実シミュレータの場合、アプリケーションは、毎秒、ある回数、情報を受け取り、それを処理するように設計することができ、その特定の回数は、シミュレーションが実際に現実の世界をモデル化していると、認識する人間のユーザに信じさせることができるように設計する。したがって、この特定の回数が、シミュレータ・アプリケーションの周期である。（あるアプリケーションによって使用される異なるタイプのデータ入力に対して、別々の周期が存在し得る。）周期を小さくすることができるとき、細分性のより細かい情報を、シミュレータが送り、処理することが可能となり、よりリアルな結果をもたらす。しかし、シミュレータ・アプリケーションが実行されるコンピュータ・システムが、非常に細かい情報に対する十分なストーレッジを有さないこともある。あるいは、伝送されるデータの量が、アプリケーションまたはシステムの処理能力をオーバーランすることもある。したがって、この仮想現実シナリオでは（また、他のリアルタイム・シナリオでも）、処理およびメモリ・リソースが効率的に使用できるように、入力（すなわち、制御）情報のフローを最適化することが重要である。
【０００７】
したがって、送達時間、処理時間、および／またはメモリに関して制約を受ける可能性のあるアプリケーションに情報を送る改良した技法が求められている。
【０００８】
【発明が解決しようとする課題】
本発明の一目的は、リソース制約を受ける可能性があるシステムおよびアプリケーションに情報を送る改良した技法を提供することである。
【０００９】
本発明の別の目的は、送達時間、処理時間、および／またはメモリ・リソースを最適化しなければならないシステムおよびアプリケーションに、情報を送る技法を提供することである。
【００１０】
本発明の別の目的は、情報を圧縮形式に効率的に符号化する技法を提供することである。
【００１１】
本発明の別の目的は、コンピュータ・システムに伝送され、そこで処理され、かつ／またはそこに記憶される情報を符号化する改良した技法を提供することである。
【００１２】
本発明の別の目的は、特定の値の間で垂直相関を有する情報を符号化する改良した技法を提供することである。
【００１３】
本発明の別の目的は、リソース制約のあるシステムが、細分性のより細かい情報を扱うことができるようにする符号化技法を提供することである。
【００１４】
本発明の他の目的および利点は、一部は、下記の説明および図面に提示され、また一部は、説明から明白となり、あるいは、本発明の実施によって知ることができる。
【００１５】
【課題を解決するための手段】
以上の目的を達成するため、本明細書に広義に記載する本発明の目的に従って、本発明は、垂直相関を有するデータ値のシーケンスを効率的に符号化する方法、システム、プログラム、およびコンピュータ・プログラム製品を提供する。この技法は、複数のデータ値にアクセスするステップであって、前記複数のデータ値は、各行が複数の列を有する複数の行として論理的に構造化されたステップと、複数のデータ値を圧縮出力ストリームとして符号化するステップとを含む。前記符号化するステップは、前記出力ストリームから、前記複数のデータ値のうち選択された値を除外するステップであって、前記選択した値は、１つの行内の１つの列から連続した次の行内の列へと繰り返されるデータ値であるステップと、情報内容の損失なしに、前記出力データ・ストリーム内での前記除外を示すステップとをさらに含む。
【００１６】
この技法は、圧縮出力ストリームを受信側に送信するステップをさらに含むことができる。この場合、この技法は、また、前記送信された出力ストリームを前記受信側で受信するステップと、前記受信した出力ストリームを前記複数の行と前記複数の列からなる前記論理構造に復号化するステップも含むことができる。次に、前記復号化した出力ストリームをアプリケーションに対する周期的入力として使用することができる。このアプリケーションは、リアルタイム・アプリケーションであることが可能である。
【００１７】
前記符号化するステップは、いくつの連続する行が各列内に同一データ値を有するかどうかを示すマーカ・バイトを作成するステップと、変更されたデータ値を有する各行に対するビット・マスクを作成するステップであって、前記変更されたデータ値のうちの１つを有する前記行内の各列に対して前記ビット・マスク内の１つまたは複数のビットをオンに設定するステップと、前記出力ストリーム内に、前記マーカ・バイトおよび前記ビット・マスクを前記変更されたデータ値とともに書き込むステップとをさらに含むことができる。
【００１８】
データ値は、バイト値であることが可能である。各行はそれぞれ、好ましくは、周期的な１組のデータ値を表す。
【００１９】
次に、本発明を下記の図面を参照して説明する。図面では、同じ参照番号は、全体を通じて、同じ要素を表す。
【００２０】
【発明の実施の形態】
図１は、本発明を実施することができる代表的コンピュータ装置を示している。通常、第１コンピュータ装置１０は、第２コンピュータ装置２０上で実行するアプリケーションに送られそれによって処理される情報を生成することになる。マシン間の伝送は、通常、ネットワーク４０を介して行われる。代替構成（図１では示さず）では、情報は、単一のマシン内で１つの処理から別の処理に送ることができ、あるいは代替方式で（通信チャネルに対する直接の接続も含め）、マシン間で伝送することも可能である。
【００２１】
コンピュータ装置１０は、好ましくは、市販の型の標準のコンピュータ装置であり、中央演算処理装置（ＣＰＵ）１２と、メモリ１４（これは、主メモリおよび／または副次メモリとすることができる）と、長期ストーレッジ１６（これは、ハード・ドライブ、ディスケット・ドライブ、テープ・ドライブなどのうちの１つまたは複数を含み得る）と、ネットワーク伝送機能１８とを備える。同様に、コンピュータ装置２０は、好ましくは、市販の標準のコンピュータ装置であり、やはり、ＣＰＵ２２と、メモリ２４（これは、主メモリおよび／または副次メモリとすることができる）と、１つまたは複数の型の長期ストーレッジ２６と、ネットワーク伝送機能２８とを備える。あるいは、コンピュータ装置２０は、ＲＯＭメモリ２４を使用し、長期ストーレッジ２６を含まないことも可能である。本発明を実施するコンピュータ・プログラム命令は、好ましくは、メモリ１４およびメモリ２４（および／またはストーレッジ１６、２６）内に記憶される。メモリ１４内に記憶されたプログラミング命令は、装置２０に伝送される情報を符号化する命令を含み、またメモリ２４内に記憶されたプログラミング命令は、装置１０から受信された情報を復号化する命令を含む。
【００２２】
コンピュータ装置１０は、サーバまたはメインフレーム、単一ユーザ・ワークステーション、または別の装置または処理に送るべき情報を有する他のどの型のコンピュータ装置であることも可能である。コンピュータ装置２０が別個の装置であるとき、それは、ロボット用のコントローラ、家庭内にある「スマート」機器内のマイクロプロセッサ、または情報を効率的に受け取り、それを処理する必要のある他の任意の型のコンピュータ装置など、リソース制約のある装置とすることができる。（さらに、本発明は、受信コンピュータ装置２０がリソース制約を受けていなくても、有利に使用することができる。）
【００２３】
ネットワーク４０は、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）とすることができる。あるいはコンピュータ装置１０および２０は、クライアント／サーバ・ネットワークまたはピアツーピア・ネットワーク内で動作することができ、または他のどの型のネットワーク構成で使用することもできる。そうした構成、ならびに適切な通信ハードウェアおよび通信ソフトウェアは、当技術分野では周知のものである。
【００２４】
図２は、本発明を実施することができるネットワーク構成４０の例を示している。ネットワーク４０は、ワイヤレス・ネットワーク４２およびネットワーク４４など、複数の個々のネットワークを含むことができ、そのそれぞれは、図１に関して記載した型の複数の個別コンピュータ装置を含むことができる。さらに、当分野の技術者には理解されるとおり、１つまたは複数のＬＡＮが含まれる（図示せず）ことが可能であり、ＬＡＮは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【００２５】
やはり図２を参照すると、ネットワーク４２および４４は、ゲートウェイ・コンピュータ４６やアプリケーション・サーバ４７（これは、データ・リポジトリ４８にアクセスすることができる）など、メインフレーム・コンピュータまたはサーバを含むことも可能である。ゲートウェイ・コンピュータ４６は、各ネットワーク４４に対するエントリ・ポイントの役割をする。ゲートウェイ４６は、好ましくは、通信リンク５０ａを介して別のネットワーク４２に結合することができる。また、ゲートウェイ４６は、通信リンク５０ｂ、５０ｃを使用して、１つまたは複数のワイヤド装置またはワイヤレス装置１０に直接に結合することも可能である。ゲートウェイ・コンピュータ４６は、インターナショナル・ビジネス・マシーンズ・コーポレーション（ＩＢＭ）から市販されるエンタープライズ・システムズ・アーキテクチャ／３７０、エンタープライズ・システムズ・アーキテクチャ／３９０コンピュータなどを利用して、実現することができる。アプリケーションに応じて、アプリケーション・システム／４００（ＡＳ／４００としても知られる）などのミッドレンジ・コンピュータを使用することも可能である。（「エンタープライズ・システムズ・アーキテクチャ／３７０」は、ＩＢＭの商標であり、「エンタープライズ・システムズ・アーキテクチャ／３９０」、「アプリケーション・システム／４００」、および「ＡＳ／４００」は、ＩＢＭの登録商標である。）
【００２６】
また、ゲートウェイ・コンピュータ４６は、記憶装置（データ・リポジトリ４８など）に結合する４９ことも可能である。さらに、ゲートウェイ４６は、１つまたは複数の装置１０に直接または間接に結合することができる。装置１０との通信のために、リアルタイム・システム５０およびリアルタイム・コントローラ５４（これらは、両者あいまって、図１の第２コンピュータ装置２０を構成することができる）はゲートウェイ４６に結合される。通常、システム５０は、直接接続５２を介してコントローラ５４に結合される。例えば、ロボットの場合、コントローラ５４はロボット・コントローラであり、通常、ロボット・アーム（図２に示さず）などロボットの可動部分に動作可能に結合されている。
【００２７】
当分野の技術者には、ネットワーク４２から地理的に遠く離れてゲートウェイ・コンピュータ４６を配置することが可能であり、また同様にネットワーク４２および４４から相当に離れて装置１０を配置できることが理解されよう。例えば、ネットワーク４２をカリフォルニア州に配置し、他方、ゲートウェイ４６をテキサス州に配置し、また１つまたは複数の装置１０をニューヨーク州に配置することができる。装置１０は、伝送制御プロトコル／インターネット・プロトコル（「ＴＣＰ／ＩＰ」）などのネットワーキング・プロトコルを使用し、セルラー電話機、無線周波数ネットワーク、サテライト・ネットワークなど、いくつかの代替接続媒体を介して、ワイヤレス・ネットワーク４２に接続することができる。ワイヤレス・ネットワーク４２は、好ましくは、ＩＰ、Ｘ．２５、Ｆｒａｍｅ  Ｒｅｌａｙ、ＩＳＤＮ（Ｉｎｔｅｇｒａｔｅｄ  Ｓｅｒｖｉｃｅｓ  Ｄｉｇｉｔａｌ  Ｎｅｔｗｏｒｋ  統合サービスディジタル網）、ＰＳＴＮ（Ｐｕｂｌｉｃ  Ｓｗｉｔｃｈｅｄ  Ｔｅｌｅｐｈｏｎｅ  Ｎｅｔｗｏｒｋ  公衆交換電話網）などを介し、ＴＣＰまたはＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ  ユーザ・データグラム・プロトコル）などのネットワーク接続５０ａを使用して、ゲートウェイ４６に接続する。あるいは、デバイス１０を、ダイヤル接続５０ｂまたは５０ｃを使用して、ゲートウェイ４６に直接に接続することもできる。さらに、ワイヤレス・ネットワーク４２およびネットワーク４４は、図２に示したのと同様の方式で、他の１つまたは複数のネットワーク（図示せず）に接続することもできる。
【００２８】
好ましい実施形態では、本発明は、コンピュータ・ソフトウェアで実施する。あるいは、本発明を、ハードウェアで、またはソフトウェアとハードウェアの組合せで実施することもできる。図２に示すとおり、ソフトウェア実施形態では、通常、本発明を実施するソフトウェア・プログラミング・コードが、ＣＤ−ＲＯＭドライブまたはハード・ドライブなど何らかの型の長期記憶媒体１６および２６から、ＣＰＵ１２および２２によって取り出され、メモリ１４および２４にロードされる。あるいは、ＲＯＭメモリ１４および２４から直接に、ソフトウェア・プログラミング・コードの一部または全部を取り出すこともできる。ソフトウェア・プログラミング・コードは、ディスケット、ハード・ドライブ、ＣＤ−ＲＯＭなど、コンピュータ・システムで使用する任意の様々な既知の媒体上で実施することができる。コードは、そうした媒体上で配布する、または何らかの型のネットワークを介して、１つのコンピュータ装置のメモリまたはストーレッジから他のコンピュータ装置に、そうした他の装置によって使用されるように配布することができる。あるいは、長期ストーレッジ１６および／または２６から直接プログラミング・コードにアクセスすることもできる。メモリ内、物理媒体上でソフトウェア・プログラミング・コードを実施し、かつ／またはネットワークを介してソフトウェア・コードを配布する技法および方法は、周知のものであり、本明細書では、これ以上詳しく論じない。
【００２９】
本明細書での議論は、第２コンピュータ装置に符号化された情報を伝送する第１コンピュータ装置に関して行っているが、これは、例示のためであり、限定するものではないことに留意されたい。他のシナリオも、本発明の範囲に含まれる。先に論じたとおり、他のそうしたシナリオには、単一のコンピュータ装置内で、１つの処理から別の処理に符号化された情報を伝送することが含まれる。さらに、第１コンピュータ装置（または処理）が、情報を符号化し、その符号化した情報を複数の目標装置（または処理）に送信することができる。これ以降、送信側または受信側コンピュータ装置との言及は、送信側処理または受信側処理、ならびに複数の受信側装置と受信側処理を含むものとする。
【００３０】
本発明は、データ値の間の垂直相関を利用して効率的な方式で情報を符号化することにより、１つのコンピュータ装置から別のコンピュータ装置にその情報を伝送する改良された技法を定義する。符号化された情報は、受信側装置で処理するため、効率的に復号化することができる。
【００３１】
垂直相関を有するデータの例として、多軸ロボットが、いくつかの独立した位置モータ・コントロールを有するものと想定する。各軸ごとに、特定時点での目標位置値を指定することができる。ロボットの動きを制御するため、通常、これらの位置値は、一様な間隔で伝送（および処理）される。いくつかの間隔に対する目標位置値の集合をデータのテーブルとして（概念的および物理的に）表すことができ、このテーブル中では、各列内の値は、そうした間隔のうちの個々の間隔における特定の位置に対する値であり、各行内の値は、ある時点における各位置に対する１組の値である。テーブルの行内の値は、一様な間隔でロボットの動きを制御するのに使用される情報に対応する。後述するとおり、本発明は、伝送しなければならないデータの量を抑えながら、情報内容を維持する効率的な技法を定義する。
【００３２】
垂直相関を有するデータの別の例は、ワイヤレス装置上の複数文字インディケータ（家庭内のスマート機器やディジタル電話機などのディスプレイなど）である。比較的短い間隔で、表示フィールドに定期更新を行うことが望ましいことがある。この例では、テーブルの列が、ディスプレイ上の複数文字位置を表し、その行は、各定期更新時に、そうした位置に表示される変化する値を表すことが可能である。あるいは、その列は、複数の位置、およびその位置に表示される文字の属性（カラーなど）を表すことが可能である。この場合、各行内の値は、好ましくは、そうした文字に対する１組の文字値および属性値を指定する。
【００３３】
こうしたタイプのシナリオで使用される多くの従来技術のシステムは、各行の全体を送信する。しかし、各間隔における値のすべてを送信するのは、通信帯域幅を浪費する非効率的な伝送技法であり、受信側装置の容量をオーバーランすることにつながる可能性がある。従来技術のシステムでこの問題に対処する１つの方式は、周期間隔を大きくすることであり、これにより、より少ない頻度でデータが伝送される。この手法の欠点については先に論じた。他の従来技術のシステムは、隣接データ値内の関係を探す、つまり水平に列間のデータの関係を探すことにより、伝送するデータの量を抑えようとするものである。例えば、周知のＬｅｍｐｅｌ−Ｚｉｖ圧縮技法は、データ・ストリーム内の隣接バイト間の関係を探し、そうした関係を使用してデータ・ストリームのサイズを縮減する。
【００３４】
記載した型のテーブルの行の間に垂直相関が存在するとき、つまり、固定された１組のパラメータまたは列に関して、周期的に変化する値を指定するデータが伝送されるとき、本発明の符号化技法を有利に使用して、伝送しなければならないデータの量を最小限に抑えることができる。具体的には、本発明は、位置値の変更だけを伝送する。この結果、入力／出力トラフィック、伝送時間、およびメモリ要件を抑えることができる。こうしてリソース要件を抑えることで、周期間隔を小さくすることができ、これにより（本発明を使用する特定のアプリケーションの特性に応じて）、細分性のより細かい情報を提供することができる。
【００３５】
好ましい実施形態では、最高で７列の独立したバイト値（すなわち、０から２５５までの１６進数の値）まで、本明細書に定義する新しい符号化技法を使用して圧縮することができる。当分野の技術者には、本明細書の教示に基づき、この符号化技法を拡張して、どのように（例えば、後述するビット・マスクとして、単一バイトの代わりに複数バイトを使用することにより）７列を超えるデータに対応することができるかは、明白であろう。
【００３６】
図３は、垂直相関を有する４つの行の周期データ値を有する例としてのテーブルを示す。各行は５つの列を有し、これらの値は、本発明の符号化技法の好ましい実施形態の動作を記述する入力として使用される。従来技術のシステムでは、通常、周期タスクは、適切な間隔で、出力ネットワーク・インターフェースまたはチャネルを介して、外部装置に１行のこうした値を送信するために作成される。このテーブルの例では、この従来技術の手法では、２０バイトの値が送信される。ただし、このテーブルの最初の２行は、同じであることに留意されたい。さらに、行２と行３の違いは、列２および列５内の変化した値だけであり、また行４は、行３と同じである。したがって、テーブル全体を伝送するのは、相当な量の冗長な情報を伝送することになる。
【００３７】
本発明の好ましい実施形態に従って図３のテーブル例を符号化することにより、この２０バイトを、図４に示す１１バイトに縮減することができる。（後に明白となるが、周期データが生成されるにつれて動的に成長し続けるテーブルを含めて、この例に示すものより多くの行を有するテーブルでは、相当な恩恵を得られることになる。）次に、この符号化技法がどのように動作して出力シーケンスを作成するかを一般的に説明する。その後、この符号化技法を実施するのに使用することができるアルゴリズムの論理を記述した図５および図６の疑似コードについて論じる。このアルゴリズムの動作は、図８から図１６の中間結果を参照して説明する。最後に、図７の疑似コードを参照して復号化技法を説明する。
【００３８】
入力テーブル内に表した各時間間隔で、テーブル内のゼロまたは複数の列の値が変化する。本発明の符号化技法は、出力ストリーム内にビット・マスク・バイトを置いて、変化した列を識別し、マーカ・バイトを置いて、変化のない行のブロックを縮小する。（データ例の間隔サイズと複雑さならびに特定のリアルタイム・アプリケーションの挙動に応じて、各間隔内で起きる変化の数は異なる。一般に、短い間隔と比較的頻度の低い変化の組合せは、間隔当り最も少ない更新しか必要としない。）
【００３９】
好ましい実施形態では、符号化された出力シーケンスの第１バイトが、テーブル内の列の数を定義する。図５および図６のアルゴリズムによれば、この値は、常に、下記のうちの１つである。
値（１６進数で）
０ｘ７Ｆ      入力値が７列の場合
０ｘ３Ｆ      ６列の場合
０ｘ１Ｆ      ５列の場合
０ｘ０Ｆ      ４列の場合
０ｘ０７      ３列の場合
０ｘ０３      ２列の場合
０ｘ０１      １列の場合
【００４０】
このバイトのすぐ後に、入力テーブルの列内でその値が現れるのと同じ順序で、各列の初期値が続く。すべての列は、１バイト値で表さなければならない。図３のテーブルの例では、出力ストリームに書き込まれる第１行を表すバイト・シーケンスは（１６進数で）、下記のとおりである。
１Ｆ  ８０  ＥＡ  ２９  ０Ｃ  Ｃ８
【００４１】
後続する間隔の符号化は、列間の垂直相関に基づき、１つの行と次の行の値の差を求めることから始まる。つまり、１つの行（前の間隔を表す）に対する特定列内の値を次の行（現在の間隔を表す）内のその列に対する値と比較する。各列について、この処理を繰り返す。すべての列に対する差が０である場合には、その行から（冗長な）値を伝送する必要はない。代わりに、少なくとも１つの列の値がそこで変化している行が見つかるまで、カウンタを増分する。そうした行が見つかると（またはテーブルの終り、もしくは伝送されるシーケンスの終りに達すると）変化していない行の数（すなわち、変化がそこで起きていない間隔の数）を示すマーカ・バイトを作成する。好ましい実施形態では、このマーカ・バイトの最上位ビットは、常にオンに設定する（すなわち、そのビットは、値１を有する）。残りの７ビットは、１６進数で、変化のない行の数を表す。変化のない行の数が１２７を超える場合、マーカ・バイトの累計が適切な行カウントに達するまで、さらなるマーカ・バイトを追加する。図３のデータ例では、第１行に対して第２行は変化していないが、第３行で変化が起きており、したがって、この時点での変化のない行のカウントは１である。したがって、マーカ・バイトは、０ｘ８１として符号化される（すなわち、「１０００  ０００１」Ｂ、ただし、最上位ビットの１は、これがマーカ・バイトであることを意味し、また最下位ビットの１は、１つの変化のない行のカウントを表している）。
【００４２】
少なくとも１つの列の値が変化している行に出会ったとき、出力ストリーム内に現れるこの変化した行に対する第１バイトは、どの列の値が変化したのかを示す。好ましい実施形態では、このバイト内のビット・パターンの解釈は、テーブル内の列の数に依存する。（こうしたビット・パターン内の適切なビットそれぞれの設定は、図５および６のアルゴリズムに従って行われる。）７列のテーブルの場合、下記のビットを使用する。
ビット
７      常に０に設定する（最上位ビット）
６      列１が変化しているかどうかを示す
５      列２が変化しているかどうかを示す
４      列３が変化しているかどうかを示す
３      列４が変化しているかどうかを示す
２      列５が変化しているかどうかを示す
１      列６が変化しているかどうかを示す
０      列７が変化しているかどうかを示す
【００４３】
図３に示すような５列のテーブルでは、下記のビットを使用する。
ビット
７      常に０に設定する（最上位ビット）
６      常に０に設定する（使用しない）
５      常に０に設定する（使用しない）
４      列１が変化しているかどうかを示す
３      列２が変化しているかどうかを示す
２      列３が変化しているかどうかを示す
１      列４が変化しているかどうかを示す
０      列５が変化しているかどうかを示す
【００４４】
このビット・マスク・バイトに続くバイトは、テーブル内でそれが現れる順序での（また、ビット・マスク内のビット設定によって示される順序での）、変化した行に対する新しい（すなわち、変化した）値である。この行内で変化しなかったどの列の値も、出力ストリームには書き込まれない。したがってこのテーブル例では、第３行は、下記のように符号化されることになる（１６進数で）。
０９  Ｂ２  Ｃ３
これらのバイトの第１バイト、０ｘ０９（「００００  １００１」Ｂ）は、前の行（および前の間隔）に対して、列２および列５内の値が変化していることを意味するビット・マスクである。これらのバイトのうち第２バイトおよび第３バイトは、変化した値を指定している。
【００４５】
したがって、図３のテーブル例の完全な符号化は、図４に示すとおり（１６進数で）、
１Ｆ  ８０  ＥＡ  ２９  ０Ｃ  Ｃ８  ８１  ０９  Ｂ２  Ｃ３  ８１
であり、図４では、様々なバイトの意味を示すため、出力ストリームに注釈を付けてある。
【００４６】
次に、図５および図６の疑似コード４００によって表されるアルゴリズムを参照し、図８から図１６の中間出力シーケンスを使用して図３の入力データ例に対するアルゴリズムの動作を示す。このアルゴリズムで使用される変数は、要素４１０に示すように定義される。変数「Ｎ」は、入力テーブル内の列の数を表す。図３のテーブル例では、Ｎは、値５を有する。１次元配列Ｐ［１］からＰ［Ｎ］を使用して、前の行、つまり前の間隔に対する列の値を記憶し、また１次元配列Ｘ［１］からＸ［Ｎ］は、現在の行に対する列の値を記憶する。変数「Ｉ」は、構成中の出力バッファ「ＯＢ」中へのインデックスとして使用される。変数「Ｋ」も、この出力バッファ内を指している。（各行の処理中、変数Ｉは、変化したバイトを出力バッファ内に記憶するため、次に利用可能な位置を指し、Ｋは、変数Ｉの場所より前にありマーカ・バイトまたはビット・マスク・バイトを記憶するために予約された位置を指す。）変数「Ｊ」は、各行の列の処理中、ループ・カウンタとして使用される。好ましくは、アルゴリズムの速度を最適化するため、変数Ｉ、Ｊ、Ｋに対して指標レジスタを使用する。変数「Ｂ」は、現在の行に対するビット・マスクを記憶し、変数「Ｃ」は、変化していない行の数のカウントを記憶する。変数「Ｄ」は、現在の行内で変化した列の数のカウントを記憶する。
【００４７】
図５および図６のアルゴリズムの論理が、要素４２０に示されている。出力バッファＯＢ（本明細書では、出力ストリームとも呼ぶ）は、好ましくは、ゼロ・ベースの１次元配列、つまりバイトのストリームとして定義される。このアルゴリズムは、すべての変数（要素４１０に記載される）をゼロに初期設定し、次に、Ｎをテーブル内の列の数（例えば、ここでは、Ｎ＝５）に設定することから始まる（要素４３０参照）。
【００４８】
次に、要素４４０に記載されるループが、各行ごとに実行され、テーブル内のすべての行が読み取られ処理されるまで、これが続く。このループは、Ｘ［１］からＸ［Ｎ］を現在の行からの列の値に設定することから始まる。４５０に示すループは、この行内にある（Ｊ＝１からＮ）個の列のそれぞれについて繰り返される。まず、ビット・マスクＢを１ビット位置だけ左に桁送りする。このようにして、列が変化したデータを含む場合、変化したのがどの列であるかにかかわらず、ビット・マスクに単に１を追加することにより、現在の（Ｊ番目の）列に対する変更フラッグ・ビットを設定することができる。次に、現在のＪ番目の列内のデータ値（Ｘ［Ｊ］内に記憶された）を前の行のＪ番目の列内のデータ値（Ｐ［Ｊ］内に記憶された）と比較する。これらの値が同じである場合、ループ４５０は、Ｊのこの値について完了し、次に、さらなる繰返しのためにＪを増分する（Ｎ個の列がすべて処理されるまで、これを続け、処理されると、制御は、４６０で開始するＩＦステートメントに移る）。しかし、値が同じでないときは、変化した列の数を増分し（変数Ｄで）、現在の列に関する変更ビットをオンに設定し（前述したとおり、変数Ｂを増分することにより）、出力バッファ内の次に利用可能な位置（これは、指標Ｉ＋Ｄの場所である）に変化した列のデータ値を書き込み、またこの変化したデータ値を、「前の行の値」バッファ内の位置Ｐ［Ｊ］に記憶する。
【００４９】
ループ４５０の各反復の完了が、現在の行内の変化を見つけ、それらをカウントし、それらを出力バッファに書き込み、次の行を処理するためにそれらを記憶し、それに応じて、前の行に対する変化した列を反映するようにビット・マスクを設定する。入力テーブルの第１行についてループ４５０が完了した時点で、出力バッファは、各行の初期値を含んでいる。（定義上、これらの列はそれぞれ、アルゴリズムが最初に動作したときの変化を表し、したがって、各列についてループ４５０のＩＦ文節内のステートメントが実行される。）ループ４５０の終りまでこのテーブル例の第１行を処理した後、出力バッファおよび変数は、図８に示すとおりである。
【００５０】
次に、４６０および４７０に示すＩＦ文節が実行される。ビット・マスクＢがゼロではない場合（すなわち、この行が変化した列を含んでいた場合）、ＩＦ文節４６０が実行される。そうでなければ、文節４７０が実行される。文節４６０または文節４７０のどちらかの完了後、制御は、ループ４４０の先頭に戻り、すべての行が既に処理済でない限り、次の行をＸ［１］からＸ［Ｎ］にロードして、この行を処理する。すべての行が処理済である場合、ＩＦ文節４９０の論理を実行して、出力バッファを完了する。
【００５１】
次に、４６０にあるＩＦ文節に移ると、Ｋは、少なくとも１つのマーカ・バイトを出力バッファに書き込むことが必要であったときだけ、非ゼロの値を有する。したがって、図３の例を処理する際に、４６５の埋込みＩＦ文節は、スキップすることになる。次に、Ｂに入っているビット・マスクを、出力バッファ内の、それが表す変化した値が既に書き込まれている場所より前の（変数Ｉによってインデックスされた）位置に書き込む。この例を参照すると、この時点で、出力バッファは、図９に示す値を有する。この第１行の５列はすべて変化していると考えられるので、第１ビット・マスクは、値０ｘ１Ｆ（「０００１  １１１１」Ｂ）を有する。次に、Ｉの現在の値に（Ｄ＋１）を追加することによって変数Ｉを増分し、出力バッファ内で最終の変化した列の値を越えて、次の利用可能な位置に移る。次に、ビット・マスクＢおよび変化した列のカウンタＤをリセットし、処理は、ループ４４０の先頭に戻る。出力バッファおよびテーブル例を処理した結果得られる変数は、図１０に示す値を有する。
【００５２】
ループ４５０の次の反復（図３のテーブルの第２行に対する）では、変化した列は検出されない。したがって、変数および出力バッファは、図１０に示したままとなる。後でＩＦステートメント４６０を実行する際に、ＥＬＳＥ文節４７０を処理することになる。というのは、Ｂが、値ゼロを有するからである（現在の行内で変化が検出されなかったため）。Ｋは、この時点で値０を有するので、４８０に示す埋込みＥＬＳＥ文節を実行して、Ｉがこの時点で指す出力バッファ内の位置にＫを設定する。次に、Ｉを次の連続する位置に移動し、変数Ｃを１に設定する（１つの変化していない行が検出されたことを示す）。この処理の結果は、図１１に反映されている。
【００５３】
次に、制御は、ループ４４０の先頭に戻り、入力テーブル例の第３行を処理し始める。ループ４５０で、列２および５内の変化を検出する。したがって、変化した列のカウンタＤを２に設定する。ビット・マスクＢを、０ｘ０９（「００００  １００１」Ｂ）に設定する。変化した値Ｂ２およびＣ３は、出力バッファ内の位置８および９に記憶され、これらの変化した値は、前の行のバッファ内のＰ［２］およびＰ［５］にも記憶される。この結果を、図１２に示す。
【００５４】
現在の行内で変化が検出されたので、ビット・マスクＢは、非ゼロの値を有し、したがって、次に、ＩＦ文節４６０を実行することになる。この時点で、Ｋも非ゼロの値を有する。というのは、変化していない行（行２）が前の反復で検出されているからである。したがって、４６５の埋込みＩＦステートメントを実行して、マーカ・バイトを作成する。Ｃに入っている変数内の変化していない行の既存のカウントをこのマーカ・バイトの基礎として使用する。このマーカ・バイトは、その最上位ビットが１に設定されて、それがマーカであることを表す。次に、マーカ・バイトの値（変数Ｃに入った）を出力バッファの位置Ｋに書き込む、つまり、マーカ・バイトを生成させた変化している行（この例では、行３）に関して書き出される情報より前の予約された位置に書き込む。次に、次のマーカ・バイトの場所（変数Ｋ）および変化していない行のカウント（変数Ｃ）をリセットする。したがって出力バッファおよび変数は、図１３に示す値を有する。
【００５５】
次に、変化した行に対するビット・マスクを、出力バッファ内の変数Ｉで示される位置に書き込む。次に、Ｉに（Ｄ＋１）を追加することによって、現在の（変化した）行に関する情報より先を指すようにし、この変数を増分し、ビット・マスクＢおよび変化した列のカウンタＤをゼロにリセットする。出力バッファおよび変数は、図１４に示すとおりである。
【００５６】
次にループ４５０で図３の入力テーブルの第４行を処理する。この場合、変化は全く検出されない。したがって、出力バッファおよび変数は、図１４に示したままである。この時点で、ビット・マスクＢは、値ゼロを有するので、次に、ＥＬＳＥ文節４７０を実行する。Ｋは、ゼロにリセットしているので、埋込みＥＬＳＥ文節４８０を実行し、ＫをＩが指していた位置に設定し、Ｉを増分し、次に、変化していない行が処理されたことを示すように変数Ｃを設定する。これに対応する出力バッファおよび変数の値については、図１５を参照されたい。
【００５７】
この時点で、入力テーブル例の４行がすべて処理されたので、制御は、４９０のＩＦステートメントに達する。変数Ｋは、非ゼロの値を有する。これは、（少なくとも）１つの変化していない行が検出されており、したがって、出力バッファにマーカ・バイトを書き込む必要があることを示す。したがって、その最上位ビットを１に設定することにより、変数Ｃに入っている変化していない行のカウンタをマーカ・バイトにする。次に、出力バッファ内のＫの値によって示される位置に、Ｃの値を書き込む。図３からのテーブル例全体の処理を反映する（かつ、このとき出力バッファが図４に示すものに一致することを示す）図１６を参照されたい。
【００５８】
変数Ｋが、ＩＦステートメント４９０に達した時点でゼロの値を有する場合、これは、入力テーブルの最終行が１つまたは複数の変化した列を含むことを示し、したがって、出力バッファ内にマーカ・バイトを書き込む必要はない。
【００５９】
この例は、ＥＬＳＥ文節４７０に埋め込まれたＩＦ文節４７５の処理を示していない。この論理は、現在の行内に変更がなく（すなわち、ビット・マスクＢ＝０）、かつ少なくとも１つの変化していない行が以前に検出されている（すなわち、Ｋが、マーカ・バイトのために予約された出力バッファ内にある何らかの非ゼロの場所を指す）とき、実行される。次に、変数Ｃに入っている変化のない行のカウントを増分し、オーバーフロー状態が起きていないかどうか、Ｃを検査する。変数Ｃのオーバーフローが存在するのは、１２８（またはその倍数）番目の連続する変化のない行が検出され、そのためＣのビット７が１に設定されたときである。この状態は、０ｘＦＦの値を有するマーカ・バイトを出力バッファに書き込み（この値は、それがマーカ・バイトであることを示すため、最上位位置の０ビットを１ビットで置き換えた後、１２７、つまり「０１１１  １１１１」Ｂというカウントを表す）、出力バッファ内の次に利用可能な場所を指すようにＫを増分し、それにより、次のマーカ・バイト用スペースを予約し、その追加のマーカ・バイトのための位置より先を指すようにＩを増分し、Ｃに入っている変化のない行のカウントを１にリセットすることによって対処する。
【００６０】
好ましくは、４４０に示したループは、入力テーブル内の次の行に対するポインタが、それ以上行が存在せず、したがって、テーブルの終りに達したことを示すかどうかを試験することによって終了する。この手法は、動的に成長する入力テーブルに対応する、このテーブルでは、以前に伝送済みの値からの変化だけを反映する値が伝送され続けることになる。（新しい周期間隔に対してデータ値が生成されるにつれて入力テーブルは成長するが、テーブルを保持するのに使用されるストーレッジは、必ずしも成長しないことに留意されたい。というのは、処理された行の関係のある内容がアルゴリズムによって記憶され、したがって、好ましくは、廃棄されるからである。）
【００６１】
出力バッファの実際の伝送は、図５および図６のアルゴリズムには反映されていない。伝送は、好ましくは、符号化された情報（またはその周期サブセット）が完成したときに行う。ロボットの例では、これは、通常、ロボットの動きに関する１組のコマンドの完了に対応する。したがって、動的なケース（または長い間隔にわたるケース）では、符号化された情報は、塊として送信し、受信側システム上のバッファに入れることができる。
【００６２】
図５および図６の符号化アルゴリズムによって行われる変換を逆に戻す復号化アルゴリズムの疑似コードを図７に示す。この論理は、受信側装置上で実行され、変数Ｎ、Ｉ、Ｊ、Ｃ、Ｄ（図７の要素５１０を参照）を使用する。この場合も、変数「Ｎ」は、処理されるテーブル内の列の数を反映する。変数Ｃは、変化のない行のカウントを保持する。変数Ｄは、行内の変化した列の数をカウントする。変数ＩおよびＪは、カウンタであり、好ましくは、指標レジスタに記憶される。変数Ｉは、入力バッファ「ＩＢ」中でインデックスするのに使用し、変数Ｊは、ループ反復カウンタである。
【００６３】
５２０に示すとおり、これらの変数は初期設定され、変数Ｎの値は、入力バッファＩＢ（これは、送信する装置から伝送された符号化済みデータを受信する）内に記憶された受信された符号化済みファイルからの第１バイトの値から分かる。次に、ループ５３０を実行して、この入力バッファによって反映されるすべての行を復号化する。復号化動作が開始したとき、Ｃは、ゼロに初期設定されたままであり、したがって、ＥＬＳＥ文節５４０が実行される。この時点で、入力バッファは、第Ｉ番位置の１２７より大きい値を有さない。というのは、変数Ｉが、依然として、入力の第１バイト（これは、第１行を表し、Ｎを設定するのに使用するビット・マスクである）を指しているからである。したがって、文５５０内の埋込みＥＬＳＥ文節が実行される。
【００６４】
文５５０内のこの埋込みＥＬＳＥ文節は、ループ５６０から始まり、このループは、（Ｊ＝１からＮ）回、実行を繰り返すことにより、復号化された入力バッファから可能性として最高でＮバイトまでのデータを取り出すように実行する。入力バッファの現在の（Ｉ番目の）位置に記憶されたビット・マスク内の各ビットを検査して、対応する列が変化したデータを有していないかどうかを確かめる。有している場合には、変数Ｄを増分して、入力バッファの位置（Ｉ＋Ｄ）に記憶された変化した列のデータを処理のために出力装置に（例えば、本発明をロボットで使用する場合、ロボット・アーム軸に）送信する。
【００６５】
現在の行に対してループ５６０が終了した後、変数Ｉが増分されて、Ｄが指していた入力バッファ内の（既に復号化済みの）場所を指すようになり、変数Ｄがリセットされて現在の（すなわち、次の）行内にもう変化した列が存在しないことを示すようになる。次に、変数Ｉが増分されて入力バッファ内の次のまだ復号化されていない場所を指すようになる（要素５７０を参照）。
【００６６】
入力バッファ内でマーカ・バイトに達した時点で、ＩＦステートメント５５０の先頭にあるテスト（ＩＢ［Ｉ］＞１２７）は真となる（というのは、その最上位ビットが設定されているバイトは、マーカ・バイトだけであり、したがって、他のどのバイトも値＞１２７を有さないからである）。この場合、このバイトの下位ビットから変化のない行のカウントを取り出し、変数Ｃの値として使用する。ループ５６０内の列取出し処理をバイパスし（マーカ・バイトの存在が、その間に行が変化しなかった少なくとも１つの周期を示しているため）、変数Ｉが動いて、そのマーカ・バイトの後のバイトを指すようになる（要素５７０を参照）。次に、ループ５３０の先頭に戻ったとき、Ｃはゼロより大きく、したがって、Ｃに入っている値が減分される。したがって、ループ５３０の繰返し処理は、Ｃが再びゼロに達するまで、Ｃを繰り返し減分するステップ（実際には、適切な数の変化のない行を通してカウント・ダウンするステップ）を含む。Ｃがゼロに達したとき、それは、対応する周期に対する列のデータが、少なくとも１つの変化を含んでいたことを示す。前述したとおり、ループ５６０中でこの変化したデータを取り出す。変化した列の値を取り出すこのステップ、かつ変化のない各行についてＣを減分するステップは、入力バッファ全体が復号化されるまで続行され、それが完了した時点で、図７で表される処理は終了する。
【００６７】
提示したとおり、本発明の符号化技法は、データ・ストリーム内容の損失なしに、データ・ストリームのサイズを縮小し、それによってシステム（特に、リアルタイム・システムおよび他のリソース制約のあるシステムを含めて）の入出力要件およびメモリ要件を抑える非常に効率的でコンパクトな処理を提供する。対応する復号化アルゴリズムもまた、効率的でコンパクトである。さらに、特定のアプリケーションでは、本発明の使用によって効率が上がるために、周期間隔を小さくすることが可能となり、それにより、（アプリケーションの動作を低下させることなしに）伝送される情報の細分性を高めることができる。
【００６８】
本発明の好ましい実施形態について説明してきたが、発明の基本概念を知れば、当分野の技術者なら、この実施形態のさらなる変形形態および変更形態を思いつくであろう。したがって、添付の特許請求の範囲は、好ましい実施形態、ならびに本発明の趣旨および範囲に含まれるすべての変形形態および変更形態を包含すると解釈すべきものとする。
【００６９】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００７０】
（１）垂直相関を有するデータ値を効率的に符号化するためのコンピュータ・プログラムであって、
各行が複数の列を有する複数の行として論理的に構造化された複数のデータ値にアクセスする機能と、
前記複数のデータ値を圧縮出力ストリームとして符号化する機能とを含み、前記複数のデータ値を圧縮出力ストリームとして符号化する機能がさらに、
前記複数のデータ値のうち選択されたデータ値を前記出力ストリームから除外する機能であって、前記選択されたデータ値が、１つの行内の１つの列から次の連続する行内のその列へと繰り返されるデータ値である機能と、
情報内容の損失なしに前記出力データ・ストリーム内での前記除外を示す機能を、コンピュータに実現させるプログラム。
（２）圧縮出力ストリームを受信側に送信する機能をさらに含む上記（１）に記載のプログラム。
（３）送信された出力ストリームを受信側で受信する機能と、
前記受信した出力ストリームを前記複数の行と前記複数の列からなる前記論理構造に復号化する機能とをさらに含む上記（２）に記載のプログラム。
（４）復号化された出力ストリームをアプリケーションに対する周期入力として使用する機能をさらに含む上記（３）に記載のプログラム。
（５）アプリケーションが、リアルタイム・アプリケーションである上記（４）に記載のプログラム。
（６）前記符号化する機能が、
いくつの連続する行が各列内に同じデータ値を有するかどうかを示すマーカ・バイトを作成する機能と、
変化したデータ値を有する各行に対するビット・マスクを作成する機能であって、前記ビット・マスク内の１つまたは複数のビットが、前記変化したデータ値のうちの１つを有する前記行内の各列に対してオンに設定される機能と、
前記出力ストリーム内に、前記マーカ・バイトおよび前記ビット・マスクを前記変化したデータ値とともに書き込む機能とをさらに含む上記（１）に記載のプログラム。
（７）データ値が、バイト値である上記（１）に記載のプログラム。
（８）各行がそれぞれ、周期的な１組のデータ値を表す上記（１）に記載のプログラム。
（９）垂直相関を有するデータ値を効率的に符号化するためのシステムであって、
複数のデータ値にアクセスする手段であって、前記複数のデータ値は、各行が複数の列を有する複数の行として論理的に構造化される手段と、
前記複数のデータ値を圧縮出力ストリームとして符号化する手段とを含み、前記複数のデータ値を圧縮出力ストリームとして符号化する手段がさらに、
前記複数のデータ値のうち選択されたデータ値を前記出力ストリームから除外する手段であって、前記選択されたデータ値が、１つの行内での１つの列から次の連続する行内のその列へと繰り返されるデータ値である手段と、
情報内容の損失なしに前記出力データ・ストリーム内での前記除外を示す手段とを含むシステム。
（１０）圧縮出力ストリームを受信側に送信する手段をさらに含む上記（９）に記載のシステム。
（１１）送信された出力ストリームを受信側で受信する手段と、
前記受信した出力ストリームを前記複数の行と前記複数の列からなる前記論理構造に復号化する手段とをさらに含む上記（１０）に記載のシステム。
（１２）復号化された出力ストリームをアプリケーションに対する周期入力として使用する手段をさらに含む上記（１１）に記載のシステム。
（１３）アプリケーションが、リアルタイム・アプリケーションである上記（１２）に記載のシステム。
（１４）前記符号化する手段が、
いくつの連続する行が各列内に同じデータ値を有するかどうかを示すマーカ・バイトを作成する手段と、
変化したデータ値を有する各行に対するビット・マスクを作成する手段であって、前記ビット・マスク内の１つまたは複数のビットが、前記変化したデータ値のうちの１つを有する前記行内の各列に対してオンに設定される手段と、
前記出力ストリーム内に、前記マーカ・バイトおよび前記ビット・マスクを前記変化したデータ値とともに書き込む手段とをさらに含む上記（９）に記載のシステム。
（１５）データ値が、バイト値である上記（９）に記載のシステム。
（１６）各行がそれぞれ、周期的な１組のデータ値を表す上記（９）に記載のシステム。
（１７）垂直相関を有するデータ値を効率的に符号化する方法であって、
複数のデータ値にアクセスするステップであって、前記複数のデータ値は、各行が複数の列を有する複数の行として論理的に構造化されたステップと、
前記複数のデータ値を圧縮出力ストリームとして符号化するステップとを含み、前記複数のデータ値を圧縮出力ストリームとして符号化するステップがさらに、
前記複数のデータ値のうち選択されたデータ値を前記出力ストリームから除外するステップであって、前記選択したデータ値が、１つの行内の１つの列から次の連続する行内のその列へと繰り返されるデータ値であるステップと、
情報内容の損失なしに前記出力データ・ストリーム内での前記除外を示すステップとを含む方法。
（１８）圧縮出力ストリームを受信側に送信するステップをさらに含む上記（１７）に記載の方法。
（１９）送信された出力ストリームを受信側で受信するステップと、
前記受信した出力ストリームを前記複数の行と前記複数の列からなる前記論理構造に復号化するステップとをさらに含む上記（１８）に記載の方法。
（２０）復号化された出力ストリームをアプリケーションに対する周期入力として使用するステップをさらに含む上記（１９）に記載の方法。
（２１）アプリケーションが、リアルタイム・アプリケーションである上記（２０）に記載の方法。
（２２）前記符号化するステップが、
いくつの連続する行が各列内に同じデータ値を有するかどうかを示すマーカ・バイトを作成するステップと、
変化したデータ値を有する各行に対するビット・マスクを作成するステップであって、前記ビット・マスク内の１つまたは複数のビットが、前記変化したデータ値のうちの１つを有する前記行内の各列に対してオンに設定されるステップと、
前記出力ストリーム内に、前記マーカ・バイトおよび前記ビット・マスクを前記変化したデータ値とともに書き込むステップとをさらに含む上記（１７）に記載の方法。
（２３）データ値が、バイト値である上記（１７）に記載の方法。
（２４）各行がそれぞれ、周期的な１組のデータ値を表す上記（１７）に記載の方法。
【図面の簡単な説明】
【図１】本発明を実施することができるコンピュータ装置を示すブロック図である。
【図２】本発明を実施することができるネットワーク化コンピュータ環境を示す図である。
【図３】本発明の好ましい実施形態の動作を示す、垂直相関を有する周期入力値の例を示す図である。
【図４】本発明の好ましい実施形態の動作を示す、図３の情報を符号化した結果を示す図である。
【図５】本発明の好ましい実施形態の符号化技法を実施するのに使用することができる論理を示す疑似コードである。
【図６】本発明の好ましい実施形態の符号化技法を実施するのに使用することができる論理を示す疑似コードである。
【図７】本発明の好ましい実施形態の復号化技法を実施するのに使用することができる論理を示す疑似コードである。
【図８】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【図９】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【図１０】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【図１１】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【図１２】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【図１３】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【図１４】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【図１５】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【図１６】図７に示す符号化技法を図３のデータ例に適用した動作の中間結果を示す図である。
【符号の説明】
１０  コンピュータ装置
１２  中央演算処理装置（ＣＰＵ）
１４  メモリ
１６  長期ストーレッジ
１８  ネットワーク伝送機能
２０  コンピュータ装置
２２  中央演算処理装置（ＣＰＵ）
２４  メモリ
２６  長期ストーレッジ
２８  ネットワーク伝送機能
４０  ネットワーク
４２  ネットワーク
４４  ネットワーク
４６  ゲートウェイ・コンピュータ
４７  アプリケーション・サーバ
４８  データ・リポジトリ
４９  結合
５０  リアルタイム・システム
５０ａ  通信リンク
５０ｂ  通信リンク
５０ｃ  通信リンク
５２  直接接続
５４  リアルタイム・コントローラ
【図１】
0003588347.tif 000002
【図２】
0003588347.tif 000003
【図３】
0003588347.tif 000004
【図４】
0003588347.tif 000005
【図５】
0003588347.tif 000006
【図６】
0003588347.tif 000007
【図７】
0003588347.tif 000008
【図８】
0003588347.tif 000009
【図９】
0003588347.tif 000010
【図１０】
0003588347.tif 000011
【図１１】
0003588347.tif 000012
【図１２】
0003588347.tif 000013
【図１３】
0003588347.tif 000014
【図１４】
0003588347.tif 000015
【図１５】
0003588347.tif 000016
【図１６】
0003588347.tif 000017