(57)【特許請求の範囲】
【請求項１】
「所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列について、個々の実データに対応する数値データを復元するための数値データ列の復号化方法であって、
複数Ｍ台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
個々の識別コードに対応する特定のビット長を示す符号化テーブルを入力するテーブル入力段階と、
それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を行う機能を有する複数Ｍ台の復号処理ユニットに対して、前記符号化データ列の一部を部分データとして分配するデータ分配段階と、
前記Ｍ台の復号処理ユニットによる並列処理により、前記符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う復号処理段階と、
前記Ｍ台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された前記復号化データ列を出力するデータ出力段階と、
を実行し、
前記データ分配段階では、前記符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、前記符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
前記復号処理段階では、前記Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
前記データ編成段階では、１回の並列処理によって前記Ｍ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
【請求項２】
請求項１に記載の復号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することを特徴とする数値データ列の復号化方法。
【請求項３】
請求項１に記載の復号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行うことを特徴とする数値データ列の復号化方法。
【請求項４】
請求項１に記載の復号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのうち、第１台目〜第（Ｍ−１）台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行い、第Ｍ台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することを特徴とする数値データ列の復号化方法。
【請求項５】
請求項１〜４のいずれかに記載の復号化方法において、
符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルが与えられたときに、
データ入力段階において、前記データファイルから符号化データ列を抽出する処理を行い、
テーブル入力段階において、前記データファイルから符号化テーブルを抽出する処理を行うことを特徴とする数値データ列の復号化方法。
【請求項６】
請求項１〜４のいずれかに記載の復号化方法において、
符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルが与えられたときに、
データ入力段階において、前記データファイルから符号化データ列を抽出する処理を行い、
テーブル入力段階において、前記データファイルからテーブル特定情報を抽出する処理を行った後、当該テーブル特定情報によって特定されるテーブルを選択して利用することを特徴とする数値データ列の復号化方法。
【請求項７】
請求項１〜６のいずれかに記載の復号化方法において、
データ分配段階では、Ｍ≧１＋Ｌ／Ｎとなるような複数Ｍ台の復号処理ユニットに部分データの分配を行い、
復号処理段階では、これらＭ台の復号処理ユニットによる並列処理を行うことを特徴とする数値データ列の復号化方法。
【請求項８】
「所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列について、個々の実データに対応する数値データを復元する復号化装置であって、
復号化の対象となる符号化データ列を入力して格納するデータ格納部と、
個々の識別コードに対応する特定のビット長を示す符号化テーブルを格納するテーブル格納部と、
それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を並列して行う複数Ｍ台の復号処理ユニットと、
前記Ｍ台の復号処理ユニットに対して、前記データ格納部に格納されている符号化データ列の一部を部分データとして分配するデータ分配部と、
前記Ｍ台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成部と、
生成された前記復号化データ列を出力するデータ出力部と、
を備え、
前記データ分配部は、前記符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、前記符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
前記Ｍ台の復号処理ユニットは、前記符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う機能を有し、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
前記データ編成部は、１回の並列処理によって前記Ｍ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化装置。
【請求項９】
請求項８に記載の復号化装置において、
Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することを特徴とする数値データ列の復号化装置。
【請求項１０】
請求項８に記載の復号化装置において、
Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行うことを特徴とする数値データ列の復号化装置。
【請求項１１】
請求項８に記載の復号化装置において、
Ｍ台の復号処理ユニットのうち、第１台目〜第（Ｍ−１）台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行い、第Ｍ台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することを特徴とする数値データ列の復号化装置。
【請求項１２】
請求項８〜１１のいずれかに記載の復号化装置において、
符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルが与えられたときに、
データ格納部が、前記データファイルから符号化データ列を抽出して格納する処理を行い、
テーブル格納部が、前記データファイルから符号化テーブルを抽出して格納する処理を行うことを特徴とする数値データ列の復号化装置。
【請求項１３】
請求項８〜１１のいずれかに記載の復号化装置において、
符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルが与えられたときに、
データ格納部が、前記データファイルから符号化データ列を抽出して格納する処理を行い、
テーブル格納部が、前記データファイルからテーブル特定情報を抽出する処理を行った後、当該テーブル特定情報によって特定されるテーブルを外部から読み込んで格納する処理を行うことを特徴とする数値データ列の復号化装置。
【請求項１４】
請求項８〜１３のいずれかに記載の復号化装置において、
Ｍ≧１＋Ｌ／Ｎとなるような複数Ｍ台の復号処理ユニットを設けたことを特徴とする数値データ列の復号化装置。
【請求項１５】
請求項８〜１４のいずれかに記載の復号化装置において、
各復号処理ユニットが、データ編成部に対して、正常な復号処理によって得られた情報と、当該正常な復号処理に関与したビット数を示す正常処理ビット長とを報告する機能を有し、
データ編成部が、報告された前記正常処理ビット長に基づいて採択ユニットを決定し、報告された前記情報を用いて復号化データ列を生成することを特徴とする数値データ列の復号化装置。
【請求項１６】
請求項１５に記載の復号化装置において、
データ編成部が、１回の並列処理によってＭ台の復号処理ユニットからの処理結果が得られるたびに、各採択ユニットから報告された正常処理ビット長を合計することにより既復号化部を認識し、これをデータ分配部に対して報告する機能を有し、
データ分配部が、前記報告に基づいて、次回の並列処理のための未復号化部の認識を行うことを特徴とする数値データ列の復号化装置。
【請求項１７】
請求項８〜１６のいずれかに記載の数値データ列の復号化装置としてコンピュータを機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化し、逆に、復号化する技術に関する。
【背景技術】
【０００２】
デジタルデータファイルに対するデータ圧縮・伸張の技術は、情報量を維持しつつ、ファイルサイズを縮小する手法として様々な分野で利用されている。特に、音声・画像・映像といったデータファイルは、情報の冗長度が高いため、データ圧縮した状態でデータファイルを取り扱うことが一般化している。
【０００３】
データ圧縮技術の重要な基本原理の１つは、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化することである。８ビット、１６ビットという固定長ビットのデータは、ＣＰＵによる演算処理には向いているが、冗長ビットが多く含まれているため、データ容量が大きくなるという問題がある。そこで、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化し、冗長ビットを削除すれば、情報量を維持しつつ、データ容量を圧縮することができる。
【０００４】
データ圧縮技術のもうひとつの重要な基本原理は、ランレングスを用いた表現形式の採用である。たとえば、０を示す数値データについて、ランレングス表現形式を採用した場合、連続した０の個数をカウントし、当該カウント値を情報として記録することにより、データ容量の削減を図ることができる。特に、画像データや映像データの圧縮には、このランレングスを用いた表現形式が有効である。
【０００５】
現在、主流となっているＪＰＥＧ方式、ＭＰＥＧ方式、ＬＨＡ方式などのデータ圧縮方式では、可変長符号であるハフマン符号を利用した符号化技術が採用されている。一般的に利用されているベースラインＪＰＥＧ方式では、画像を８×８画素のブロックに分け、個々のブロックごとに離散コサイン変換（ＤＣＴ）、量子化、ハフマン符号化という処理が順次行われる。この場合、ハフマン符号化では、ＤＣ成分とＡＣ成分とに分けた処理が行われる、いずれの場合も、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化することにより、冗長ビットの削減が行われる。ＡＣ成分については、更に、０を示す数値データについて、ランレングス表現形式が採用され、データ容量の大幅な削減が図られる。
【０００６】
たとえば、下記の特許文献１，２には、ハフマン符号を利用してＪＰＥＧ方式で画像データの圧縮を行う符号化装置が開示されている。また、下記の特許文献３には、ＪＰＥＧ方式で圧縮された画像データを効率良く復号化する復号化装置が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−１１０８６３号公報
【特許文献２】特開平５−１１４２４０号公報
【特許文献３】特開平８−３１６８４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述したとおり、可変長のビット列を用いて符号化したデータ列は、ＣＰＵによる取り扱いに不適当であるため、実際に利用する際には、復号化を行って、元の固定長ビットからなる数値データ列へ戻す必要がある。ところが、可変長のビット列からなる符号化データは、区切りとなるビット位置が固定ではないため、処理単位の境界が不明確であり、従来の一般的な方法では、並列処理による復号化を行うことができない。すなわち、１台の復号処理ユニットを用いて、先頭から順に復号処理を行わざるを得ない。このため、復号処理に時間がかかり、特にリアルタイムでの表示処理を要求される映像データなどの場合、スムーズな再生が阻害されるなどの問題が生じる。
【０００９】
前掲の特許文献３には、このような問題の一解決法として、初回の復号処理時に、符号化データ列の処理単位の境界を特定する境界情報を作成する作業を行っておき、２回目以降の復号処理時には、当該境界情報に基づいて符号化データ列を複数の部分データに分割し、複数台の復号処理ユニットを用いた並列処理により復号化を行う技術が開示されている。この技術を利用すれば、２回目以降の復号処理時には、並列処理による効率的な復号化が可能になる。しかしながら、初回の復号処理時には、依然として並列処理を行うことができず、当該技術は、根本的な解決策を提示するものではない。
【００１０】
そこで本発明は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化しつつ、復号化の段階において、並列処理が可能になる特殊な符号化の技術を提供することを目的とする。また、本発明は、当該符号化技術によって符号化されたデータを複数台の復号処理ユニットを用いた並列処理によって復号化する技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
(1)   本発明の第１の態様は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する数値データ列の符号化方法において、
演算処理装置が、特定の数値データを可変長のビット列を用いて表現した実データを生成し、この実データの先頭に、少なくとも当該実データのビット長を示す情報をもった識別コードを付加することにより、少なくとも上記特定の数値データ自身を示す情報をもった単位符号データを生成し、生成された複数の単位符号データを順番に並べて符号化データ列として出力する処理を実行し、
付加する識別コードを選択する際に、少なくとも「所定範囲内の複数通りのビット長と、当該ビット長に対応する識別コードとの対応関係」を示す符号化テーブルを用いるようにし、かつ、当該テーブルが、当該テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルであるようにしたものである。
【００１２】
(2)   本発明の第２の態様は、上述した第１の態様に係る数値データ列の符号化方法において、
演算処理装置が、
符号化の対象となる数値データ列を入力するデータ入力段階と、
個々のビット長に対応する固有の識別コードを示す符号化テーブルを入力するテーブル入力段階と、
入力した数値データ列から個々の数値データを順番に抽出するデータ抽出段階と、
抽出した数値データから冗長なビットを削除することにより実データを生成する実データ生成段階と、
符号化テーブルを参照して、生成された実データのビット長に対応する識別コードを選択する識別コード選択段階と、
生成された実データの先頭に、選択された識別コードを付加することにより、抽出した数値データを示す単位符号データを生成する単位符号データ生成段階と、
データ抽出段階、実データ生成段階、識別コード選択段階、単位符号データ生成段階を、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行する段階と、
生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力段階と、
を実行するようにし、
符号化テーブルが、
実データを表現するのに十分な所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係を示すテーブルであり、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルであるようにしたものである。
【００１３】
(3)   本発明の第３の態様は、上述した第２の態様に係る数値データ列の符号化方法において、
実データ生成段階で、抽出した数値データを示す実データとして、当該数値データが０を示すデータである場合にはビット長が０である仮想のビット列を、正の値を示すデータである場合には先頭に０を含まない可変長のビット列を、負の値を示すデータである場合には先頭に１を含まない可変長のビット列を、それぞれ生成するようにしたものである。
【００１４】
(4)   本発明の第４の態様は、上述した第１の態様に係る数値データ列の符号化方法において、
演算処理装置が、
符号化の対象となる数値データ列を入力するデータ入力段階と、
個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルを入力するテーブル入力段階と、
入力した数値データ列から個々の数値データを順番に抽出するデータ抽出段階と、
抽出した数値データが０を示すデータであり、かつ、これまでのカウント値が最大値Ｒmaxに達していない場合に、０を示す数値データが連続して抽出された回数をランレングス値としてカウントするランレングス値カウント段階と、
抽出した数値データが正の値を示すデータである場合に、当該数値データを示す実データとして先頭に０を含まない可変長のビット列を生成し、抽出した数値データが負の値を示すデータである場合に、当該数値データを示す実データとして先頭に１を含まない可変長のビット列を生成し、抽出した数値データが０を示すデータであり、かつ、カウント値が最大値Ｒmaxに達していた場合に、ビット長が０である仮想のビット列を実データとして生成する実データ生成段階と、
二次元符号化テーブルを参照して、生成された実データのビット長と、当該実データが生成された時のランレングス値と、の組み合わせに対応する識別コードを選択し、カウント値を０にリセットする識別コード選択段階と、
生成された実データの先頭に、選択された識別コードを付加することにより、抽出した数値データを示す単位符号データを生成する単位符号データ生成段階と、
データ抽出段階を、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行するとともに、ランレングス値カウント段階、実データ生成段階、識別コード選択段階および単位符号データ生成段階を、必要に応じて繰り返し実行する段階と、
生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力段階と、
を実行するようにし、
符号化テーブルが、予め定められた所定の最大ランレングス値をＲmaxとしたときに、実データを表現するのに十分な所定範囲内の複数通りのビット長と、Ｒmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示すテーブルであり、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルであるようにしたものである。
【００１５】
(5)   本発明の第５の態様は、上述した第４の態様に係る数値データ列の符号化方法において、
データ抽出段階で、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて０であるというゼロ永続状態」か否かを調べる調査処理を実行し、当該調査処理によりゼロ永続状態であることが確認された場合に、
実データ生成段階では、ビット長が０である仮想のビット列を実データとして生成し、識別コード選択段階では、ゼロ永続状態を示す終端コードを識別コードとして選択するようにしたものである。
【００１６】
(6)   本発明の第６の態様は、上述した第１〜第５の態様に係る数値データ列の符号化方法において、
実データのビット長ｂの出現頻度、もしくは、ビット長ｂとランレングス値Ｒとの組み合わせの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている符号化テーブルを用いるようにしたものである。
【００１７】
(7)   本発明の第７の態様は、上述した第６の態様に係る数値データ列の符号化方法において、
符号化の対象となる数値データ列について、実データのビット長ｂの出現頻度、もしくは、ビット長ｂとランレングス値Ｒとの組み合わせの出現頻度を集計する頻度集計段階と、
既存の標準符号化テーブル内の、基準ビット長Ｎの整数倍の差をもつビット長ｂ相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長ｂの出現頻度、もしくは、ビット長ｂとランレングス値Ｒとの組み合わせの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている修正した符号化テーブルを生成するテーブル修正段階と、
を更に実行し、
識別コード選択段階で、修正した符号化テーブルを参照して、識別コードの選択を行うようにしたものである。
【００１８】
(8)   本発明の第８の態様は、上述した第１〜第７の態様に係る数値データ列の符号化方法において、
データ出力段階において、符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルを出力するようにしたものである。
【００１９】
(9)   本発明の第９の態様は、上述した第１〜第７の態様に係る数値データ列の符号化方法において、
データ出力段階において、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルを出力するようにしたものである。
【００２０】
(10)  本発明の第１０の態様は、上述した第２の態様に係る数値データ列の符号化方法によって符号化された符号化データ列について、符号化の対象となった数値データ列を復元する数値データ列の復号化方法において、
複数Ｍ台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
符号化に用いられた符号化テーブルを入力するテーブル入力段階と、
それぞれＬビット（但し、ＬはＮの整数倍、かつ、単位符号データの最大ビット長をＵmaxとした場合に、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を行う機能を有する複数Ｍ台の復号処理ユニットに対して、符号化データ列の一部を部分データとして分配するデータ分配段階と、
Ｍ台の復号処理ユニットによる並列処理により、符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う復号処理段階と、
Ｍ台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された復号化データ列を出力するデータ出力段階と、
を実行するようにし、
データ分配段階では、符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
復号処理段階では、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
データ編成段階では、１回の並列処理によってＭ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成するようにしたものである。
【００２１】
(11)  本発明の第１１の態様は、上述した第４の態様に係る数値データ列の符号化方法によって符号化された符号化データ列について、符号化の対象となった数値データ列を復元する数値データ列の復号化方法において、
複数Ｍ台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
符号化に用いられた二次元符号化テーブルを入力するテーブル入力段階と、
それぞれＬビット（但し、ＬはＮの整数倍、かつ、単位符号データの最大ビット長をＵmaxとした場合に、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を行う機能を有する複数Ｍ台の復号処理ユニットに対して、符号化データ列の一部を部分データとして分配するデータ分配段階と、
Ｍ台の復号処理ユニットによる並列処理により、二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、０を示す数値データを羅列する回数を示すランレングス値と、当該０を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う復号処理段階と、
Ｍ台の復号処理ユニットによる復号処理の結果を取捨選択して、０を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された復号化データ列を出力するデータ出力段階と、
を実行するようにし、
データ分配段階では、符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
復号処理段階では、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
データ編成段階では、１回の並列処理によってＭ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された情報に基いて数値データを並べることにより復号化データ列を生成するようにしたものである。
【００２２】
(12)  本発明の第１２の態様は、「少なくとも所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ」を、複数組並べることにより構成された符号化データ列について、少なくとも個々の実データに対応する数値データを復元する数値データ列の復号化方法において、
符号化データ列をＮビットの整数倍の単位で分割して複数の部分データを生成し、各部分データを複数Ｍ台の復号処理ユニットに分配し、
複数Ｍ台の復号処理ユニットの並列処理により、分配された部分データに対する復号処理を行い、
正常に復号化が行われた数値データを並べることにより復号化データ列を生成するようにしたものである。
【００２３】
(13)  本発明の第１３の態様は、上述した第１２の態様に係る数値データ列の復号化方法において、
「所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列について、個々の実データに対応する数値データを復元するために、
複数Ｍ台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
個々の識別コードに対応する特定のビット長を示す符号化テーブルを入力するテーブル入力段階と、
それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を行う機能を有する複数Ｍ台の復号処理ユニットに対して、符号化データ列の一部を部分データとして分配するデータ分配段階と、
Ｍ台の復号処理ユニットによる並列処理により、符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う復号処理段階と、
Ｍ台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された復号化データ列を出力するデータ出力段階と、
を実行するようにし、
データ分配段階では、符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
復号処理段階では、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
データ編成段階では、１回の並列処理によってＭ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成するようにしたものである。
【００２４】
(14)  本発明の第１４の態様は、上述した第１３の態様に係る数値データ列の符号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
【００２５】
(15)  本発明の第１５の態様は、上述した第１３の態様に係る数値データ列の符号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行うようにしたものである。
【００２６】
(16)  本発明の第１６の態様は、上述した第１３の態様に係る数値データ列の符号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのうち、第１台目〜第（Ｍ−１）台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行い、第Ｍ台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
【００２７】
(17)  本発明の第１７の態様は、上述した第１２の態様に係る数値データ列の復号化方法において、
「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、０を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列について、０を示す数値データおよび個々の実データを並べてなる元のデータ列を復元するために、
複数Ｍ台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを入力するテーブル入力段階と、
それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を行う機能を有する複数Ｍ台の復号処理ユニットに対して、符号化データ列の一部を部分データとして分配するデータ分配段階と、
Ｍ台の復号処理ユニットによる並列処理により、二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、０を示す数値データを羅列する回数を示すランレングス値と、当該０を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う復号処理段階と、
Ｍ台の復号処理ユニットによる復号処理の結果を取捨選択して、０を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された復号化データ列を出力するデータ出力段階と、
を実行するようにし、
データ分配段階では、符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
復号処理段階では、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
データ編成段階では、１回の並列処理によってＭ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列を生成するようにしたものである。
【００２８】
(18)  本発明の第１８の態様は、上述した第１７の態様に係る数値データ列の復号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
【００２９】
(19)  本発明の第１９の態様は、上述した第１７の態様に係る数値データ列の復号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行うようにしたものである。
【００３０】
(20)  本発明の第２０の態様は、上述した第１７の態様に係る数値データ列の復号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのうち、第１台目〜第（Ｍ−１）台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行い、第Ｍ台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
【００３１】
(21)  本発明の第２１の態様は、上述した第１７〜第２０の態様に係る数値データ列の復号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのそれぞれが、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、
データ編成段階で、復元されたデータを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
【００３２】
(22)  本発明の第２２の態様は、上述した第１７〜第２０の態様に係る数値データ列の復号化方法において、
復号処理段階で、Ｍ台の復号処理ユニットのそれぞれが、取り出したランレングス値および実データに対応する数値データをそのまま出力する処理を実行し、
データ編成段階で、各採択ユニットから収集した情報に基づいて、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
【００３３】
(23)  本発明の第２３の態様は、上述した第１３〜第２２の態様に係る数値データ列の復号化方法において、
符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルが与えられたときに、
データ入力段階において、データファイルから符号化データ列を抽出する処理を行い、
テーブル入力段階において、データファイルから符号化テーブルを抽出する処理を行うようにしたものである。
【００３４】
(24)  本発明の第２４の態様は、上述した第１３〜第２２の態様に係る数値データ列の復号化方法において、
符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルが与えられたときに、
データ入力段階において、データファイルから符号化データ列を抽出する処理を行い、
テーブル入力段階において、データファイルからテーブル特定情報を抽出する処理を行った後、当該テーブル特定情報によって特定されるテーブルを選択して利用するようにしたものである。
【００３５】
(25)  本発明の第２５の態様は、上述した第１３〜第２４の態様に係る数値データ列の復号化方法において、
データ分配段階では、Ｍ≧１＋Ｌ／Ｎとなるような複数Ｍ台の復号処理ユニットに部分データの分配を行い、
復号処理段階では、これらＭ台の復号処理ユニットによる並列処理を行うようにしたものである。
【００３６】
(26)  本発明の第２６の態様は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する数値データ列の符号化装置において、
符号化の対象となる数値データ列を入力して格納するデータ格納部と、
個々のビット長に対応する固有の識別コードを示す符号化テーブルを格納するテーブル格納部と、
データ格納部に格納されている数値データ列から個々の数値データを順番に抽出するデータ抽出部と、
抽出した数値データから冗長なビットを削除することにより実データを生成する実データ生成部と、
符号化テーブルを参照して、生成された実データのビット長に対応する識別コードを選択する識別コード選択部と、
生成された実データの先頭に、選択された識別コードを付加することにより、抽出した数値データを示す単位符号データを生成する単位符号データ生成部と、
生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力部と、
を設け、
符号化テーブルが、
実データを表現するのに十分な所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係を示すテーブルであり、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルであるようにしたものである。
【００３７】
(27)  本発明の第２７の態様は、上述した第２６の態様に係る数値データ列の符号化装置において、
実データ生成部が、抽出した数値データを示す実データとして、当該数値データが０を示すデータである場合にはビット長が０である仮想のビット列を、正の値を示すデータである場合には先頭に０を含まない可変長のビット列を、負の値を示すデータである場合には先頭に１を含まない可変長のビット列を、それぞれ生成するようにしたものである。
【００３８】
(28)  本発明の第２８の態様は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する数値データ列の符号化装置において、
符号化の対象となる数値データ列を入力して格納するデータ格納部と、
個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルを格納するテーブル格納部と、
データ格納部に格納されている数値データ列から個々の数値データを順番に抽出するデータ抽出部と、
抽出した数値データが０を示すデータであり、かつ、これまでのカウント値が最大値Ｒmaxに達していない場合には、０を示す数値データが連続して抽出された回数をランレングス値としてカウントする処理を行い、抽出した数値データが正の値を示すデータである場合には、当該数値データを示す実データとして先頭に０を含まない可変長のビット列を生成する処理を行い、抽出した数値データが負の値を示すデータである場合には、当該数値データを示す実データとして先頭に１を含まない可変長のビット列を生成する処理を行い、抽出した数値データが０を示すデータであり、かつ、カウント値が最大値Ｒmaxに達していた場合には、ビット長が０である仮想のビット列を実データとして生成する実データ生成部と、
二次元符号化テーブルを参照して、生成された実データのビット長と、当該実データが生成された時のランレングス値と、の組み合わせに対応する識別コードを選択し、カウント値を０にリセットする識別コード選択部と、
生成された実データの先頭に、選択された識別コードを付加することにより、抽出した数値データを示す単位符号データを生成する単位符号データ生成部と、
生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力部と、
を設け、
符号化テーブルが、予め定められた所定の最大ランレングス値をＲmaxとしたときに、実データを表現するのに十分な所定範囲内の複数通りのビット長と、Ｒmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示すテーブルであり、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルであるようにしたものである。
【００３９】
(29)  本発明の第２９の態様は、上述した第２８の態様に係る数値データ列の符号化装置において、
データ抽出部が、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて０であるというゼロ永続状態」か否かを調べる調査処理を実行し、
実データ生成部が、調査処理によりゼロ永続状態であることが確認された場合に、ビット長が０である仮想のビット列を実データとして生成し、
識別コード選択部が、調査処理によりゼロ永続状態であることが確認された場合に、ゼロ永続状態を示す終端コードを識別コードとして選択するようにしたものである。
【００４０】
(30)  本発明の第３０の態様は、上述した第２６〜第２９の態様に係る数値データ列の符号化装置において、
テーブル格納部に格納されている符号化テーブルが、実データのビット長ｂの出現頻度、もしくは、ビット長ｂとランレングス値Ｒとの組み合わせの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている符号化テーブルであるようにしたものである。
【００４１】
(31)  本発明の第３１の態様は、上述した第３０の態様に係る数値データ列の符号化装置において、
データ格納部に格納されている数値データ列について、実データのビット長ｂの出現頻度、もしくは、ビット長ｂとランレングス値Ｒとの組み合わせの出現頻度を集計する頻度集計部と、
既存の標準符号化テーブル内の、基準ビット長Ｎの整数倍の差をもつビット長ｂ相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長ｂの出現頻度、もしくは、ビット長ｂとランレングス値Ｒとの組み合わせの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている修正した符号化テーブルを生成し、これをテーブル格納部に格納するテーブル修正部と、
を更に設けたものである。
【００４２】
(32)  本発明の第３２の態様は、上述した第２６〜第３１の態様に係る数値データ列の符号化装置において、
データ出力部が、符号化データ列とともに、テーブル格納部に格納されている符号化テーブルもしくは当該符号化テーブルを特定するテーブル特定情報を出力するようにしたものである。
【００４３】
(33)  本発明の第３３の態様は、「所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列について、個々の実データに対応する数値データを復元する数値データ列の復号化装置であって、
復号化の対象となる符号化データ列を入力して格納するデータ格納部と、
個々の識別コードに対応する特定のビット長を示す符号化テーブルを格納するテーブル格納部と、
それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を並列して行う複数Ｍ台の復号処理ユニットと、
Ｍ台の復号処理ユニットに対して、データ格納部に格納されている符号化データ列の一部を部分データとして分配するデータ分配部と、
Ｍ台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成部と、
生成された復号化データ列を出力するデータ出力部と、
を設け、
データ分配部は、符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
Ｍ台の復号処理ユニットは、符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う機能を有し、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
データ編成部は、１回の並列処理によってＭ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成するようにしたものである。
【００４４】
(34)  本発明の第３４の態様は、上述した第３３の態様に係る数値データ列の復号化装置において、
Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
【００４５】
(35)  本発明の第３５の態様は、上述した第３３の態様に係る数値データ列の復号化装置において、
Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行うようにしたものである。
【００４６】
(36)  本発明の第３６の態様は、上述した第３３の態様に係る数値データ列の復号化装置において、
Ｍ台の復号処理ユニットのうち、第１台目〜第（Ｍ−１）台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行い、第Ｍ台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
【００４７】
(37)  本発明の第３７の態様は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、０を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列について、０を示す数値データおよび個々の実データを並べてなる元のデータ列を復元する数値データ列の復号化装置において、
復号化の対象となる符号化データ列を入力して格納するデータ格納部と、
個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを格納するテーブル格納部と、
それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を並列して行う複数Ｍ台の復号処理ユニットと、
Ｍ台の復号処理ユニットに対して、データ格納部に格納されている符号化データ列の一部を部分データとして分配するデータ分配部と、
Ｍ台の復号処理ユニットによる復号処理の結果を取捨選択して、０を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成部と、
生成された復号化データ列を出力するデータ出力部と、
を設け、
データ分配部は、符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
Ｍ台の復号処理ユニットは、二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、０を示す数値データを羅列する回数を示すランレングス値と、当該０を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う機能を有し、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
データ編成部は、１回の並列処理によってＭ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列を生成するようにしたものである。
【００４８】
(38)  本発明の第３８の態様は、上述した第３７の態様に係る数値データ列の復号化装置において、
Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
【００４９】
(39)  本発明の第３９の態様は、上述した第３７の態様に係る数値データ列の復号化装置において、
Ｍ台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行うようにしたものである。
【００５０】
(40)  本発明の第４０の態様は、上述した第３７の態様に係る数値データ列の復号化装置において、
Ｍ台の復号処理ユニットのうち、第１台目〜第（Ｍ−１）台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行い、第Ｍ台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
【００５１】
(41)  本発明の第４１の態様は、上述した第３７〜第４０の態様に係る数値データ列の復号化装置において、
Ｍ台の復号処理ユニットのそれぞれが、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータをデータ編成部に与え、
データ編成部が、各復号処理ユニットから与えられたデータを並べることにより復号化データ列を生成するようにしたものである。
【００５２】
(42)  本発明の第４２の態様は、上述した第３７〜第４０の態様に係る数値データ列の復号化装置において、
Ｍ台の復号処理ユニットのそれぞれが、取り出したランレングス値および実データに対応する数値データをそのままデータ編成部に与え、
データ編成部が、各採択ユニットから与えられた情報に基づいて、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータを並べることにより復号化データ列を生成するようにしたものである。
【００５３】
(43)  本発明の第４３の態様は、上述した第３３〜第４２の態様に係る数値データ列の復号化装置において、
符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルが与えられたときに、
データ格納部が、データファイルから符号化データ列を抽出して格納する処理を行い、
テーブル格納部が、データファイルから符号化テーブルを抽出して格納する処理を行うようにしたものである。
【００５４】
(44)  本発明の第４４の態様は、上述した第３３〜第４２の態様に係る数値データ列の復号化装置において、
符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルが与えられたときに、
データ格納部が、データファイルから符号化データ列を抽出して格納する処理を行い、
テーブル格納部が、データファイルからテーブル特定情報を抽出する処理を行った後、当該テーブル特定情報によって特定されるテーブルを外部から読み込んで格納する処理を行うようにしたものである。
【００５５】
(45)  本発明の第４５の態様は、上述した第３３〜第４４の態様に係る数値データ列の復号化装置において、
Ｍ≧１＋Ｌ／Ｎとなるような複数Ｍ台の復号処理ユニットを設けるようにしたものである。
【００５６】
(46)  本発明の第４６の態様は、上述した第３３〜第４５の態様に係る数値データ列の復号化装置において、
各復号処理ユニットが、データ編成部に対して、正常な復号処理によって得られた情報と、当該正常な復号処理に関与したビット数を示す正常処理ビット長とを報告する機能を有し、
データ編成部が、報告された正常処理ビット長に基づいて採択ユニットを決定し、報告された情報を用いて復号化データ列を生成するようにしたものである。
【００５７】
(47)  本発明の第４７の態様は、上述した第４６の態様に係る数値データ列の復号化装置において、
データ編成部が、１回の並列処理によってＭ台の復号処理ユニットからの処理結果が得られるたびに、各採択ユニットから報告された正常処理ビット長を合計することにより既復号化部を認識し、これをデータ分配部に対して報告する機能を有し、
データ分配部が、当該報告に基づいて、次回の並列処理のための未復号化部の認識を行うようにしたものである。
【００５８】
(48)  本発明の第４８の態様は、上述した第２６〜第４７の態様に係る数値データ列の符号化装置もしくは復号化装置を、コンピュータにプログラムを組み込むことによって構成したものである。
【００５９】
(49)  本発明の第４９の態様は、上述した第２６の態様に係る数値データ列の符号化装置をＤＣ成分の数値データの符号化手段として用い、上述した第２８の態様に係る数値データ列の符号化装置をＡＣ成分の数値データ列の符号化手段として用いることにより、ＪＰＥＧ画像用圧縮処理装置を構成したものである。
【００６０】
(50)  本発明の第５０の態様は、上述した第３３〜第３６の態様に係る数値データ列の復号化装置をＤＣ成分の数値データの復号化手段として用い、上述した第３７〜第４２の態様に係る数値データ列の復号化装置をＡＣ成分の数値データ列の復号化手段として用いることにより、ＪＰＥＧ画像用伸張処理装置を構成したものである。
【００６１】
(51)  本発明の第５１の態様は、固定長ビットからなる数値データ列を、演算処理装置が、少なくともビット長と識別コードとの対応関係を示すハフマン符号化テーブルを用いて、可変長ビットからなる符号化データ列に符号化するハフマン符号化方法において、
ハフマン符号化テーブルとして、識別コード自身のビット長をａとし、当該識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルを用いるようにしたものである。
【００６２】
(52)  本発明の第５２の態様は、可変長ビットからなる符号化データ列を、演算処理装置が、少なくともビット長と識別コードとの対応関係を示すハフマン符号化テーブルを用いて、固定長ビットからなる数値データ列に復号化するハフマン復号化方法において、
ハフマン符号化テーブルとして、識別コード自身のビット長をａとし、当該識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルを用いるようにしたものである。
【００６３】
(53)  本発明の第５３の態様は、所定のビット長を示す識別コードに後続して当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ（最大ビット長Ｕmax）を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長を示す符号化テーブルと、を含むデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
【００６４】
(54)  本発明の第５４の態様は、所定のビット長を示す識別コードに後続して当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ（最大ビット長Ｕmax）を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長を示す符号化テーブルを特定するテーブル特定情報と、を含むデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
【００６５】
(55)  本発明の第５５の態様は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、０を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ（最大ビット長Ｕmax）」を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルと、を含むデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
【００６６】
(56)  本発明の第５６の態様は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、０を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ（最大ビット長Ｕmax）」を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを特定するテーブル特定情報と、を含むデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
【００６７】
(57)  本発明の第５７の態様は、上述した第６または第７の態様に係る数値データ列の符号化方法で出力されたデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
【００６８】
(58)  本発明の第５８の態様は、数値データ列を可変長のビット列を用いて符号化する符号化方法に用いるテーブルであって、
所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係が示されており、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
【００６９】
(59)  本発明の第５９の態様は、数値データ列を可変長のビット列を用いて符号化する符号化方法に用いるテーブルであって、
所定範囲内の複数通りのビット長と所定範囲内の複数通りのランレングス値とについて、個々のビット長と個々のランレングス値との各組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係が示されており、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
【発明の効果】
【００７０】
本発明に係る数値データの符号化では、数値データそのものを可変長のビット列を用いて表現した実データの先頭に、当該実データのビット長を示す情報をもった識別コードを付加することにより、当該特定の数値データ自身を示す情報をもった単位符号データが生成される。しかも、当該識別コード自身のビット長をａとし、当該実データのビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件が満足されるようにする。
【００７１】
このため、単位符号データのビット長は、必ずＮの整数倍になるので、符号化データ列の処理単位の境界は、必ず先頭からＮの整数倍のビット位置になる。したがって、符号化データ列をその先頭からＮの整数倍のビット位置で複数の部分データに分割し、複数台の復号処理ユニットを用いた並列処理で復号化を行うことが可能になる。ｋの値が任意の整数であるため、Ｎの整数倍のビット位置は、必ずしも処理単位の境界として正しい位置になるとは限らないが、処理単位の境界は、必ずＮの整数倍のビット位置にくるので、複数台の復号処理ユニットのうち、正しい処理単位で復号処理を行ったユニットの処理結果だけを選択して並べることにより、正しい復号化データ列を得ることができる。
【００７２】
かくして、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化しつつ、復号化の段階において、並列処理が可能になる特殊な符号化を行うことが可能になる。また、当該符号化によって作成された符号化データ列を、複数台の復号処理ユニットを用いた並列処理によって復号化することが可能になる。
【図面の簡単な説明】
【００７３】
【図１】固定長ビットで表現された数値データの一例を示す図である。
【図２】図１に示す数値データを表現する固定長ビット列を示す図である。
【図３】図２に示す固定長ビット列から冗長な０を削除して得られる可変長ビット列を示す図である。
【図４】図３に示す可変長ビット列に、ビット長を示す情報（丸数字）を挿入した状態を示す図である。
【図５】可変長のビット列を用いて符号化されたデータを構成する単位符号データの基本構造を示す図である。
【図６】図２に示す固定長ビット列で表現された数値データ列を、固定長符号化テーブルを用いて符号化するプロセスを示す図である。
【図７】図２に示す固定長ビット列で表現された数値データ列を、可変長符号化テーブルを用いて符号化するプロセスを示す図である。
【図８】図２に示す固定長ビット列で表現された数値データ列を、ハフマン符号化テーブルを用いて符号化するプロセスを示す図である。
【図９】図２に示す固定長ビット列で表現された数値データ列を、本発明に係る符号化テーブルを用いて符号化するプロセスを示す図である。
【図１０】図９(c) に示す符号化データ列を、本発明に係る復号化方法を用いて、８台の復号処理ユニットによる並列処理で復号化する原理を示す第１の図である。
【図１１】図９(c) に示す符号化データ列を、本発明に係る復号化方法を用いて、８台の復号処理ユニットによる並列処理で復号化する原理を示す第２の図である。
【図１２】図９(c) に示す符号化データ列を、本発明に係る復号化方法を用いて、８台の復号処理ユニットによる並列処理で復号化する原理を示す第３の図である。
【図１３】図９(c) に示す符号化データ列を、本発明に係る復号化方法を用いて、８台の復号処理ユニットによる並列処理で復号化する原理を示す第４の図である。
【図１４】本発明に係る数値データ列の符号化方法の基本手順を示す流れ図である。
【図１５】本発明に係る数値データ列の符号化方法で作成される符号化データファイルの構造の一例を示すブロック図である。
【図１６】本発明に係る数値データ列の符号化方法で作成される符号化データファイルの構造の別な一例を示すブロック図である。
【図１７】本発明に係る数値データ列の復号化方法の基本手順を示す流れ図である。
【図１８】本発明に係る数値データ列の符号化装置の基本構成を示すブロック図である。
【図１９】本発明に係る数値データ列の復号化装置の基本構成を示すブロック図である。
【図２０】符号化の対象となる別な数値データ列の一例を示す図である。
【図２１】図２０に示す数値データ列に対して、本発明に係る一次元符号化テーブルを用いた符号化方法を実施するプロセスを示す図である。
【図２２】本発明に係る二次元符号化テーブルを用いた符号化方法の基本原理を示す図である。
【図２３】図２０に示す数値データ列に対して、本発明に係る二次元符号化テーブルを用いた符号化方法を実施するプロセスを示す図である。
【図２４】本発明に係る二次元符号化テーブルを用いた符号化方法の基本手順を示す流れ図である。
【図２５】一般的なＪＰＥＧ画像用の圧縮・伸張処理装置の構成を示すブロック図である。
【図２６】ＪＰＥＧ方式の圧縮を行う際の量子化後の８×８画素ブロックを構成する画素配列を示す平面図である。
【図２７】ＪＰＥＧ方式の圧縮処理の対象となる量子化後の画素ブロックの画素値分布の一例を示す平面図である。
【図２８】図２７に示す画素ブロックから抽出したＤＣ成分およびＡＣ成分の数値データを示す図である。
【図２９】本発明に係るＤＣ成分用符号化テーブル（一次元符号化テーブル）の一例を示す図である。
【図３０】図２９に示すテーブルを利用して図２８に示すＤＣ成分を符号化した結果を示す図である。
【図３１】本発明に係るＡＣ成分用符号化テーブル（二次元符号化テーブル）の一例を示す図である。
【図３２】図３１に示すテーブルを利用して図２８に示すＡＣ成分を符号化するプロセスを示す図である。
【図３３】図３１に示すテーブルを利用して図２８に示すＡＣ成分を符号化した結果を示す図である。
【図３４】図３３に示す符号化データ列を、本発明に係る復号化方法を用いて、７台の復号処理ユニットによる並列処理で復号化する原理を示す第１の図である。
【図３５】図３３に示す符号化データ列を、本発明に係る復号化方法を用いて、７台の復号処理ユニットによる並列処理で復号化する原理を示す第２の図である。
【図３６】本発明に係るハフマン符号化テーブルを用いる符号化装置の基本構成を示すブロック図である。
【図３７】一次元ハフマン符号化テーブルを作成するための頻度集計結果の一例を示す図である。
【図３８】本発明に係る一次元ハフマン符号化テーブルを作成する具体的な方法を示す図である。
【図３９】二次元ハフマン符号化テーブルを作成するための頻度集計結果（輝度成分と色差成分）の一例を示す図である。
【図４０】図３１に示すテーブルを修正することによって作成された二次元ハフマン符号化テーブルの一例（輝度成分用）を示す図である。
【図４１】図３１に示すテーブルを修正することによって作成された二次元ハフマン符号化テーブルの別な一例（色差成分用）を示す図である。
【図４２】基準ビット長Ｎの設定時に考慮するパラメータを示すグラフである。
【図４３】図１１に示す復号化原理の変形例を示す図である。
【図４４】図１２に示す復号化原理の変形例を示す図である。
【図４５】図１３に示す復号化原理の変形例を示す図である。
【図４６】図３１に示す符号化テーブルより作成された復号化用第１参照テーブルを示す図である。
【図４７】図３１に示す符号化テーブルより作成された復号化用第２参照テーブルを示す図である。
【図４８】図４６および図４７に示す復号化用第１および第２参照テーブルを用いた復号化処理の原理を示す図である。
【発明を実施するための形態】
【００７４】
以下、本発明を図示する実施形態に基づいて説明する。
【００７５】
＜＜＜  §１．従来の符号化／復号化方法の基本原理  ＞＞＞
本発明は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化し、これを元に戻す復号化を行う技術に関するものである。そこで、このような固定長ビット列と可変長ビット列との間の変換を伴う、従来の符号化／復号化方法の基本原理を簡単に説明する。
【００７６】
いま、図１に示すような固定長ビットで表現された数値データ列Ｄ１，Ｄ２，Ｄ３，Ｄ４，Ｄ５，...を考えてみる。ここでは、これらの各数値データが、いずれも８ビットで表現可能な０〜２５５の範囲内の値であり、具体的には、１０進表記で、２８，２５１，１，１３，３，...という値をとるものとしよう。この場合、２進表記では、図示の表に示すとおり、いずれも８ビットのビット列で表現される。
【００７７】
図２は、図１に示す数値データを表現する固定長ビット列を示す図である。どの数値データも、その大小に関係なく、すべて８ビットのビット列で表される。このため、データの区切りは必ず８ビット周期で現れ、所望の数値データにランダムアクセスが可能であり、ＣＰＵによる演算処理には適している。しかしながら、各数値データの先頭部分の０は冗長なビットになる。たとえば、数値データＤ３の場合、本来の数値を示す実データの部分は末尾の「１」のみであり、先頭に付された７個の「０」は冗長なビットということになる。
【００７８】
図３は、図２に示す固定長ビット列から冗長な０を削除して得られる可変長ビット列を示す図である。いずれの数値データも、先頭の０が削除され、実データを示すビット列のみが残されている。たとえば、数値データＤ３は１ビットの実データ「１」のみで表現されている。このように、固定長ビット列で表現されていた数値データ列を、可変長ビット列で表現すれば、データ容量を削減することができる。
【００７９】
しかしながら、図３に示す可変長ビット列からは、個々の数値データを取り出すことはできない。これは、各数値データの区切りの情報が逸失し、このビット列をどこで区切って１つの数値として取り扱うかが不明になるためである。図２，図３では、説明の便宜上、１つの数値データを示すビット列を矩形枠で囲って示しているが、実際には、このような矩形枠は存在しない。したがって、図２に示す固定長ビット列の場合は、８ビット単位でビット列を区切ることにより、個々の数値データを取り出すことができるが、図３に示す可変長ビット列の場合、区切り位置が不明であり、個々の数値データを認識することができない。
【００８０】
結局、固定長ビット列を可変長ビット列へ変換する場合、数値データの区切りを示す何らかの情報を付加する必要がある。そこで、通常は、各数値を示す実データの先頭に、当該実データのビット長を示す情報を付加する手法が採られる。図４は、図３に示す可変長ビット列に、ビット長を示す情報を挿入した状態を示す図である。図に丸数字で示す情報が、後続する実データのビット長を示す識別コードになっている。たとえば、先頭の識別コードＣ１（丸数字５）は、後続する実データＤ１のビット長が「５」であることを示しており、続く識別コードＣ２（丸数字８）は、後続する実データＤ２のビット長が「８」であることを示している。
【００８１】
結局、図４に示すデータビット列は、図５に示すような基本構造をもった単位符号データＵを並べたものになる。すなわち、単位符号データＵは、識別コードＣと、これに後続する実データＤ（可変長ビット列）とによって構成され、識別コードＣは、後続する実データＤのビット長ｂを示すコードということになる。図４に示すデータビット列から、各数値データを取り出すには、まず、先頭の識別コードＣ１の部分を解析して、後続する実データＤ１のビット長が「５」であることを認識し、実データＤ１として５ビットの情報を取り出せばよい。次に、識別コードＣ２の部分を解析して、後続する実データＤ２のビット長が「８」であることを認識し、実データＤ２として８ビットの情報を取り出せばよい。以下、同様である。
【００８２】
図５に示すように、単位符号データＵは、ビット長ａをもった識別コードＣの部分と、ビット長ｂをもった実データＤの部分とによって構成されており、図４，図５では、説明の便宜上、識別コードＣの部分と実データＤの部分とをそれぞれ矩形枠で囲って示した。しかしながら、実際には、このような矩形枠は存在しない。したがって、識別コードＣの部分と識別コードＤの部分との区切り位置を何らかの方法で認識できるようにする必要がある。
【００８３】
最も簡単な方法は、識別コードＣのビット長ａを固定長にする方法である。たとえば、ビット長ａを３ビットに固定しておけば、常に単位符号データＵの先頭３ビットが識別コードＣということになるので、識別コードＣと実データＤとの区切りは明確になる。そこで、この３ビットの識別コードＣに基づいて、後続する実データＤのビット長ｂを認識すれば、実データＤを正しく取り出すことができる。
【００８４】
識別コードＣとしては、ビット長ｂに対応するデジタル値そのものを用いることができる。たとえば、ビット長ｂ＝「５」を示す識別コードＣには、「５」を示す３ビットのビット列「１０１」をそのまま用いることができる。もっとも、識別コードＣとビット長ｂとの対応関係が明確になっていれば、識別コードＣには、どのようなビット列を用いてもかまわない。
【００８５】
図６は、図２に示す固定長ビット列で表現された数値データ列を、固定長符号化テーブルを用いて符号化するプロセスを示す図である。図６(a) は、図４と同じ図であり、図３に示す可変長ビット列に、ビット長を示す情報（丸数字）を挿入した状態を示している。図６(b) は、固定長符号化テーブルであり、識別コードＣとビット長ｂとの対応関係を示すテーブルである。この例の場合、識別コードＣは、対応するビット長ｂのデジタル値にはなっていない。たとえば、ビット長ｂ＝「１」を示す３ビットのビット列は「００１」であるが、図示のテーブルの場合、ビット長ｂ＝「１」に対応する識別コードＣは「０００」になっている。それでも、このテーブルを参照することにより、識別コードＣ「０００」に対応するビット長ｂは「１」であることを認識することができるので、支障は生じない。
【００８６】
図６(c) は、図６(a) における丸数字のビット長を示す各識別コードＣ１，Ｃ２，...の部分に、図６(b) の固定長符号化テーブルで定義された固有の識別コードＣを当てはめることにより得られる符号化データ列を示している。この図６(c) に示す符号化データ列と、図６(b) に示す固定長符号化テーブルとを用いれば、図２に示す元の固定長ビットの数値データ列の復元が可能である。
【００８７】
すなわち、図６(c) の符号化データ列の先頭３ビットにある識別コードＣ１「１００」について、図６(b) のテーブルを参照すれば、対応するビット長ｂ＝「５」が得られるので、続く５ビットのデータ「１１１００」を実データＤ１として認識すれば、８ビットのデータ「０００１１１００」を復元することができる。続いて、図６(c) の符号化データ列の第９〜１１ビット目にある識別コードＣ２「１１１」について、図６(b) のテーブルを参照すれば、対応するビット長ｂ＝「８」が得られるので、続く８ビットのデータ「１１１１１０１１」を実データＤ２として認識できる。以下、同様である。
【００８８】
図６(b) のテーブルでは、３ビットに固定された識別コードＣによって、８通りのビット長ｂ＝１〜８を示すことができる。これは、実データのビット長が最小１ビット、最大８ビットである場合を想定したものである。結局、図６に示す例では、実データＤは１〜８ビットの可変長になるが、識別コードＣは３ビットの固定長になる。なお、実データのビット長ｂ＝０を定義する場合は（たとえば、数値データ「００００００００」の実データを、１桁のビット「０」ではなく、ビット長が０である０桁の仮想データ、すなわち、実質的に実データを示すビットを配置しない状態で表現するような場合は）、ビット長ｂ＝０に対応する識別コードＣも定義する必要がある。
【００８９】
一方、識別コードＣのビット長ａを可変長にする方法も知られている。図７は、図２に示す固定長ビット列で表現された数値データ列を、可変長符号化テーブルを用いて符号化するプロセスを示す図である。図７(a) は、図４と同じ図であり、図３に示す可変長ビット列に、ビット長を示す情報（丸数字）を挿入した状態を示している。図７(b) は、可変長符号化テーブルであり、可変長の識別コードＣとビット長ｂとの対応関係を示すテーブルである。図６(b) に示す固定長符号化テーブルでは、識別コードＣが３ビットの固定長になっていたのに対して、図７(b) に示す可変長符号化テーブルでは、識別コードＣが１〜７ビットの可変長になっている。
【００９０】
図７(c) は、図７(a) における丸数字のビット長を示す各識別コードＣ１，Ｃ２，...の部分に、図７(b) の可変長符号化テーブルで定義された固有の識別コードＣを当てはめることにより得られる符号化データ列を示している。この図７(c) に示す符号化データ列と、図７(b) に示す可変長符号化テーブルとを用いれば、図２に示す元の固定長ビットの数値データ列の復元が可能である。ただ、識別コードが可変長であるため、符号化データ列を先頭から１ビットずつチェックしながら、可変長符号化テーブルを参照し、合致するコードが存在するか否かを調べる処理が必要になる。
【００９１】
具体的には、まず、図７(c) の符号化データ列の第１ビット目のビット「１」について、合致する識別コードＣの有無を調べる。図７(b) のテーブルには合致する識別コードは存在しない。そこで、次に第１〜２ビット目のビット列「１１」について、合致する識別コードＣの有無を調べるが、やはり合致する識別コードは存在しない。更に、第１〜３ビット目のビット列「１１１」について、合致する識別コードＣの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を１ビットずつ伸ばしてゆくと、第１〜５ビット目のビット列「１１１１０」について、はじめて合致する識別コードが見つかる。かくして、先頭から５ビットのビット列「１１１１０」の部分が識別コードＣであることが認識できる。
【００９２】
図７(b) のテーブルによると、識別コード「１１１１０」に対応するビット長ｂは「５」であるから、第６〜１０ビット目のビット列「１１１００」を実データＤ１として取り出すことができ、８ビットのデータ「０００１１１００」を復元することができる。
【００９３】
続いて、図７(c) の符号化データ列の第１１ビット目のビットから、前述した合致判定プロセスを続けてゆく。まず、第１１ビット目のビット「１」について、合致する識別コードＣの有無を調べるが、合致する識別コードは存在しない。そこで、次に第１１〜１２ビット目のビット列「１１」について、合致する識別コードＣの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を１ビットずつ伸ばしてゆくと、第１１〜１７ビット目のビット列「１１１１１１１」について、はじめて合致する識別コードが見つかる。かくして、当該７ビットのビット列「１１１１１１１」の部分が識別コードＣであることが認識できる。
【００９４】
図７(b) のテーブルによると、識別コード「１１１１１１１」に対応するビット長ｂは「８」であるから、第１８〜２５ビット目のビット列「１１１１１０１１」を実データＤ２として取り出すことができる。以下、同様である。
【００９５】
このように、識別コードＣを可変長コードにする場合は、テーブルを構成する識別コードに条件が課されることになる。すなわち、「テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という条件である。
【００９６】
たとえば、図７(b) のテーブルにおける識別コード「０」に着目すると、ビット長ａ＝１であるから、上記条件は「先頭１ビットの部分が０となる別な識別コードは存在しない」という条件になる。実際、このテーブル内には、０で始まる識別コードは他には存在しない。同様に、図７(b) のテーブルにおける識別コード「１０」に着目すると、ビット長ａ＝２であるから、上記条件は「先頭２ビットの部分が１０となる別な識別コードは存在しない」という条件になる。実際、このテーブル内には、１０で始まる識別コードは他には存在しない。
【００９７】
このような条件が必要な理由は、前述した合致判定プロセスのアルゴリズムを考えれば、容易に理解できよう。すなわち、当該条件が満たされていないと、識別コードの誤認識が生じてしまうことになる。たとえば、識別コード「１０」と同じ「１０」で始まる別な識別コード「１００」，「１０１」，「１０００」などが同じテーブル内に存在したとしても、ビット列「１０」についての合致判定プロセスで「合致」の判定がなされてしまうため、識別コード「１００」，「１０１」，「１０００」などについての合致判定は行われなくなってしまう。
【００９８】
ところで、図７(c) に示す符号化データ列を、図６(c) に示す符号化データ列と比較すると、前者の方が後者よりも全ビット長が増えていることがわかる。これは、図６(b) に示す固定長符号化テーブルでは、識別コードＣが常に３ビットであるのに対して、図７(b) に示す可変長符号化テーブルでは、識別コードＣのビット長は１ビットですむこともあるものの、場合によっては７ビットを必要とするためである。そこで、実用上は、各実データについてのビット長ｂの出現頻度を集計し、実データのビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている符号化テーブルを用いるようにする。このように、出現頻度を考慮して作成した可変長符号化テーブルは、一般に、ハフマン符号化テーブルと呼ばれており、このハフマン符号化テーブルを用いた符号化は、ハフマン符号化と呼ばれている。
【００９９】
図８は、図２に示す固定長ビット列で表現された数値データ列を、ハフマン符号化テーブルを用いて符号化するプロセスを示す図である。図８(a) は、図４と同じ図であり、図３に示す可変長ビット列に、ビット長を示す情報（丸数字）を挿入した状態を示している。図８(b) は、ハフマン符号化テーブルであり、可変長の識別コードＣとビット長ｂとの対応関係を示す可変長符号化テーブルである。ここでは、説明の便宜上、このハフマン符号化テーブルの左側の破線欄に出現頻度を示してある。この出現頻度は、符号化の対象となる数値データ（ここに示す例の場合、図２に示す数値データＤ１，Ｄ２，...）の各実データについてのビット長ｂの出現頻度を示すものである。図示の例の場合、ビット長ｂ＝「４」の出現頻度が「６８５」となり第一位となっている。
【０１００】
図示のテーブルは、ビット長ｂをその出現頻度順にソートして示したものである。ここで、識別コードＣの欄を見ると、識別コードＣも短い順にソートされていることがわかる。すなわち、ビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられていることになる。このようなハフマン符号化テーブルを用いた符号化を行えば、より短い識別コードＣがより高い頻度で利用されることになるので、得られる符号化データ列の全ビット長を短縮することができ、データ容量の削減を図ることができる。たとえば、図８(b) のテーブルにおける「１１１１１１０」や「１１１１１１１」といった７ビットからなる識別コードＣは、用いられる頻度が極めて小さくなるので、これら長い識別コードの存在によって、全ビット長が増大する影響は小さい。
【０１０１】
図８(c) は、図８(a) における丸数字のビット長を示す各識別コードＣ１，Ｃ２，...の部分に、図８(b) のハフマン符号化テーブルで定義された固有の識別コードＣを当てはめることにより得られる符号化データ列を示している。この図８(c) に示す符号化データ列と、図８(b) に示すハフマン符号化テーブルとを用いれば、図２に示す元の固定長ビットの数値データ列の復元が可能である点は、図７の例と全く同様である。また、符号化データ列を先頭から１ビットずつチェックしながら、ハフマン符号化テーブルを参照し、合致するコードが存在するか否かを調べる処理を行う点も、図７の例と全く同様である。
【０１０２】
したがって、このハフマン符号化テーブルにおいても、「テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という条件が必要な点に変わりはない。ハフマン符号化テーブルの特徴は、「実データのビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている」という点であり、それ以外は、図７で述べた一般的な可変長符号化テーブルと変わりはない。別言すれば、図８(b) に示すハフマン符号化テーブルは、ビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられるように、図７(b) に示す可変長符号化テーブルの識別コードＣの部分を相互に入れ替える操作を行うことによって得られたテーブルということができる。
【０１０３】
図８(c) に示す符号化データ列を、図７(c) に示す符号化データ列と比較すると、前者の方が後者よりも全ビット長が減少していることがわかる。図には、たかだか５個の数値データの部分しか示されていないが、実際には、図８(b) の破線欄に示すような出現頻度で各数値データのビット長が出現することになるので、ハフマン符号化テーブルを用いた場合のデータ容量の削減効果はより顕著なものになる。前掲の特許文献１，２には、このようなハフマン符号化テーブルを利用してＪＰＥＧ方式で画像データの圧縮を行う技術が開示されている。
【０１０４】
＜＜＜  §２．本発明の着想の根源  ＞＞＞
さて、§１で述べた方法で作成された符号化データ列（可変長ビット）を、ＣＰＵによる演算処理に適した元の数値データ（固定長ビット）に戻すためには、復号化を行う必要がある。ところが、可変長のビット列からなる符号化データは、区切りとなるビット位置が固定ではないため、処理単位の境界が不明確であり、従来の一般的な方法では、並列処理による復号化を行うことができない。
【０１０５】
たとえば、図６(c) に示す符号化データ列は、識別コードＣの部分は３ビットに固定されているものの、実データＤの部分は可変長であるため、各単位符号データＵの境界は、データ列の先頭から順に復号処理を行ってゆくことによって、はじめて認識可能である。実際、各単位符号データＵ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５の境界は不規則であり、このビット列を先頭から順に解析してゆかない限り、境界を認識することはできない。これは、この図６(c) に示す符号化データ列を復号化する際には、１台の復号処理ユニットを用いて、先頭から順に復号処理を行わざるを得ないことを意味する。このため、復号処理に時間がかかり、特にリアルタイムでの表示処理を要求される映像データなどの場合、スムーズな再生が阻害されるなどの問題が生じることは、既に述べたとおりである。
【０１０６】
このような事情は、図７(c) に示す符号化データ列（可変長符号化テーブルを用いた符号化処理によって得られたもの）や、図８(c) に示す符号化データ列（ハフマン符号化テーブルを用いた符号化処理によって得られたもの）についても全く同じである。
【０１０７】
このような問題に対処するための一手法として、本願発明者は、次のような着想を得ることができた。いま、図８(c) に示す符号化データを復号化する際に、このデータ列を所定位置で分割し、個々の部分データを複数台の復号処理ユニットに与えて並列処理を行うことを考えよう。複数台の復号処理ユニットによる並列処理が実現できれば、それだけ復号処理に必要な時間は短縮され、スムーズな動画再生などが可能になる。
【０１０８】
ただ、各復号処理ユニットによって正しい復号処理が実行されるようにするためには、各部分データを正しい位置で切り出す必要がある。具体的には、各単位符号データＵ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５の境界で分割する必要がある。ところが、単位符号データＵを構成する実データＤのビット長が可変であるため、単位符号データＵの境界は不確定である。そこで、本願発明者は、実データＤのビット長の不確定さを、識別コードＣのビット長で補完することができるのではないか、という第１の着想を得た。
【０１０９】
図５に示すように、単位符号データＵのビット長は、識別コードＣ自身のビット長ａと実データＤのビット長ｂとの和「ａ＋ｂ」になる。しかも、用いる識別コードＣは、後続する実データＤのビット長ｂに基づいて定められる。そこで本願発明者は、識別コードＣを、図７(b) や図８(b) に示すような可変長の符号化テーブルによって定義するようにし、かつ、識別コードＣ自身のビット長ａを、当該識別コードＣに対応するビット長ｂに応じて定めるようにすれば、ビット長の和「ａ＋ｂ」を一定にすることができるのではないかと考えた。
【０１１０】
たとえば、図５に示す単位符号データＵのビット長を固定値Ｎに定めるようにし、常に「ａ＋ｂ＝Ｎ」が成り立つような運用が可能になれば、単位符号データＵの境界は、常にＮビット周期で現れることになるので、このＮビット周期の位置で部分データの切り出しを行うようにすれば、各部分データの先頭は、単位符号データＵの先頭に一致し、各復号処理ユニットは正しい復号処理を行うことができる。
【０１１１】
ところが、常に「ａ＋ｂ＝Ｎ」が成り立つような可変長符号化テーブルを実際に設計すると、ビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードを対応づけたハフマン符号化テーブルへの適用を行うことができなくなってしまう。たとえば、図７(b) に示す可変長符号化テーブルを改変して、常に「ａ＋ｂ＝Ｎ」が成り立つようにすることを考えてみよう。ここで、たとえば、Ｎ＝９に固定したとすると、ａ＝９−ｂが成り立つようなビット長ａをもった識別コードＣをテーブルの各欄に掲載すればよいことになる。したがって、ビット長ｂ＝１に対応する識別コードは８ビットの長さをもったコード、ビット長ｂ＝２に対応する識別コードは７ビットの長さをもったコード、ビット長ｂ＝３に対応する識別コードは６ビットの長さをもったコード、... 、ビット長ｂ＝８に対応する識別コードは１ビットの長さをもったコードということになり、一応、条件を満たす可変長符号化テーブルを作成することは可能である。
【０１１２】
しかしながら、ビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードを対応づけるような入れ替えを行って、ハフマン符号化テーブルを作成すると、「ａ＋ｂ＝Ｎ」という条件は必ずしも満足されなくなってしまう。結局、「ａ＋ｂ＝Ｎ」という条件を満たす可変長符号化テーブルは、ビット長ｂと識別コードＣとの対応関係の自由度が著しく制限され、出現頻度を考慮したハフマン符号化テーブルへの適用は一切できなくなり、実用上、利用価値が極めて低いものにならざるを得ない。
【０１１３】
そこで、本願発明者は、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足する符号化テーブルを用いるようにし、識別コードＣのビット長ａにある程度の自由度をもたせる、という第２の着想を得るに至った。上記条件であれば、ｋの値を調整することにより、ビット長ａを基準ビット長Ｎの単位で増減することができるので、ビット長ｂの出現頻度に応じてビット長ａを設定することができる。
【０１１４】
もっとも、単位符号データＵのビット長「ａ＋ｂ」について、「ａ＋ｂ＝ｋ×Ｎ」なる条件設定を行うと、単位符号データＵのビット長は、固定値にはならない。したがって、単位符号データＵの境界が確定しない、という問題が再び浮上してくる。しかしながら、上記条件設定を行えば、単位符号データＵの境界は全く不規則になるわけではなく、必ず基準ビット長Ｎの整数倍の位置になる。そこで、本願発明者は、復号化を行う際に、符号化データ列を、とりあえず基準ビット長Ｎの整数倍の位置で分割して部分データを作成し、各部分データを複数の復号処理ユニットに与えて、復号化を並列処理で行い、正しい復号処理が行われたユニットの処理結果だけを採用すれば、正しい復号化データ列を得ることができる、という第３の着想を得るに至ったのである。
【０１１５】
ｋの値が任意の整数であるため、Ｎの整数倍のビット位置は、必ずしも単位符号データＵの境界として正しい位置になるとは限らないが、単位符号データＵの境界は、必ずＮの整数倍のビット位置にくる。したがって、複数台の復号処理ユニットのうちの何台かは、単位符号データＵの途中から誤った復号処理を開始することになるが、別な何台かは、単位符号データＵの先頭から正しい復号処理を開始することになる。最終的に、正しい復号処理の結果だけを採用し、誤った復号処理の結果を捨ててしまえば、誤った復号処理のプロセスは無駄になるものの、並列処理による復号化に要する時間短縮の効果は得られる。
【０１１６】
こうして、本発明によれば、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化しつつ、復号化の段階において、符号化されたデータを複数台の復号処理ユニットを用いた並列処理によって復号化することが可能になる。続く§３では、このような本発明の基本原理を、具体例を挙げながら詳述する。
【０１１７】
＜＜＜  §３．本発明に係る符号化方法の基本原理  ＞＞＞
図９は、図２に示す固定長ビット列で表現された数値データ列を、本発明に係る符号化テーブルを用いて符号化するプロセスを示す図である。図９(a) は、図４と同じ図であり、図３に示す可変長ビット列に、ビット長を示す情報（丸数字）を挿入した状態を示している。図９(b) は、本発明に用いる符号化テーブルである。
【０１１８】
このテーブルは、ビット長ｂの出現頻度は考慮していないので、ハフマン符号化テーブルではないが、可変長の識別コードＣとビット長ｂとの対応関係を示す可変長符号化テーブルである。ここでは、説明の便宜上、この符号化テーブルの右側の破線欄に、識別コードＣ自身のビット長ａと、当該識別コードＣを含む単位符号データＵのビット長「ａ＋ｂ」を示してある（この破線欄の内容は、説明の便宜のために示すものであって、この符号化テーブルの一部ではない）。
【０１１９】
この図９(b) のテーブルでは、ｂ＝０〜８の９通りのビット長について、それぞれ対応する識別コードＣが定義されている。§１で述べた各符号化テーブルでは、ｂ＝１〜８の８通りのビット長について、それぞれ対応する識別コードＣが定義されていたが、図９(b) のテーブルでは、更に、ｂ＝０の場合についても識別コードの定義が行われている。これは、以下に述べる実施形態では、実データのビット長ｂ＝０を定義する方法を採っているためである。具体的には、数値データ「００００００００」の実データは、１桁のビット「０」ではなく、ビット長が０である０桁の仮想データ、すなわち、実質的に実データを示すビットを配置しない状態で表現される（この場合、単位符号データＵは、実質的に、識別コードＣを構成するビットのみから構成される）。
【０１２０】
図９(b) のテーブルは、§２で説明した「ａ＋ｂ＝ｋ×Ｎ」なる条件を満足する符号化テーブルになっている。具体的には、基準ビット長Ｎ＝４に設定した例であり、整数ｋの値は、１，２，３，４のいずれかである。たとえば、テーブルの１行目には、ビット長ｂ＝０を示す識別コードＣとして「１０００」なる４ビットからなるコードが示されている。ここでビット長ｂ＝０は、上述したように、数値データ「００００００００」の実データを、長さ０ビットの仮想ビットによって表現するときに用いられ、実質的に、実データＤを構成するビットは存在しない。したがって、この場合の、単位符号データＵのビット長「ａ＋ｂ」は４になる。
【０１２１】
一方、テーブルの２行目には、ビット長ｂ＝１を示す識別コードＣとして「０１０」なる３ビットからなるコードが示されている。この場合の、単位符号データＵのビット長「ａ＋ｂ」はやはり４になる。テーブルの３行目には、ビット長ｂ＝２を示す識別コードＣとして「００」なる２ビットからなるコードが示されている。この場合の、単位符号データＵのビット長「ａ＋ｂ」はやはり４になる。また、テーブルの４行目には、ビット長ｂ＝３を示す識別コードＣとして「１０１００」なる５ビットからなるコードが示されている。この場合の、単位符号データＵのビット長「ａ＋ｂ」は８になる。以下同様に続き、最後に、テーブルの９行目には、ビット長ｂ＝８を示す識別コードＣとして「１０１１１０１０」なる８ビットからなるコードが示されている。この場合の、単位符号データＵのビット長「ａ＋ｂ」は１６になる。
【０１２２】
結局、この図９(b) に示す符号化テーブルを用いて符号化を行った場合、単位符号データＵのビット長「ａ＋ｂ」は４，８，１２，１６のいずれかになる。すなわち、必ず基準ビット長Ｎ＝４の整数倍になり、最大ビット長Ｕmax ＝１６である。もちろん、この符号化テーブルは、基本的には、図７(b) に示すテーブルと同様に、可変長符号化テーブルであるから、テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない、という条件も満たしている。
【０１２３】
図９(c) は、図９(a) における丸数字のビット長を示す各識別コードＣ１，Ｃ２，...の部分に、図９(b) の符号化テーブルで定義された固有の識別コードＣを当てはめることにより得られる符号化データ列を示している。この図９(c) に示す符号化データ列と、図９(b) に示す符号化テーブルとを用いれば、図２に示す元の固定長ビットの数値データ列の復元が可能である点は、図７の例と全く同様である。すなわち、復号化を行う際には、符号化データ列を先頭から１ビットずつチェックしながら、符号化テーブルを参照し、合致するコードが存在するか否かを調べる処理を行うことになる。
【０１２４】
具体的には、まず、図９(c) の符号化データ列の第１ビット目のビット「０」について、合致する識別コードＣの有無を調べる。図９(b) のテーブルには合致する識別コードは存在しない。そこで、次に第１〜２ビット目のビット列「０１」について、合致する識別コードＣの有無を調べるが、やはり合致する識別コードは存在しない。更に、第１〜３ビット目のビット列「０１１」について、合致する識別コードＣの有無を調べると、ようやくビット長「５」に対応する識別コードが見つかることになる。よって、先頭から３ビットのビット列「０１１」の部分が識別コードＣであることが認識でき、これに後続する５ビットのビット列「１１１００」を実データＤ１として取り出すことができ、８ビットのデータ「０００１１１００」を復元することができる。
【０１２５】
続いて、図９(c) の符号化データ列の第９ビット目のビットから、同様の合致判定プロセスを続けてゆく。まず、第９ビット目のビット「１」について、合致する識別コードＣの有無を調べるが、合致する識別コードは存在しない。そこで、次に第９〜１０ビット目のビット列「１０」について、合致する識別コードＣの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を１ビットずつ伸ばしてゆくと、第９〜１６ビット目のビット列「１０１１１０１０」について、はじめて合致する識別コードが見つかる。かくして、当該ビット列「１０１１１０１０」の部分が識別コードＣであることが認識できる。図９(b) のテーブルによると、識別コード「１０１１１０１０」に対応するビット長ｂは「８」であるから、第１７〜２４ビット目のビット列「１１１１１０１１」を実データＤ２として取り出すことができる。
【０１２６】
次に、図９(c) の符号化データ列の第２５ビット目のビットから、同様の合致判定プロセスを続けてゆくと、第２５〜２７ビット目のビット列「０１０」について、はじめて合致する識別コードが見つかる。かくして、当該ビット列「０１０」の部分が識別コードＣであることが認識できる。図９(b) のテーブルによると、識別コード「０１０」に対応するビット長ｂは「１」であるから、第２８ビット目のビット「１」を実データＤ３として取り出すことができ、８ビットのデータ「０００００００１」を復元することができる。
【０１２７】
続いて、図９(c) の符号化データ列の第２９ビット目のビットから、同様の合致判定プロセスを続けてゆくと、第２９〜３２ビット目のビット列「１００１」について、はじめて合致する識別コードが見つかる。かくして、当該ビット列「１００１」の部分が識別コードＣであることが認識できる。図９(b) のテーブルによると、識別コード「１００１」に対応するビット長ｂは「４」であるから、第３３〜３６ビット目のビット「１１０１」を実データＤ４として取り出すことができ、８ビットのデータ「００００１１０１」を復元することができる。
【０１２８】
最後に、図９(c) の符号化データ列の第３７ビット目のビットから、同様の合致判定プロセスを続けてゆくと、第３７〜３８ビット目のビット列「００」について、はじめて合致する識別コードが見つかる。かくして、当該ビット列「００」の部分が識別コードＣであることが認識できる。図９(b) のテーブルによると、識別コード「００」に対応するビット長ｂは「２」であるから、第３９〜４０ビット目のビット「１１」を実データＤ５として取り出すことができ、８ビットのデータ「００００００１１」を復元することができる。
【０１２９】
なお、図９(b) に示す符号化テーブルは、対応するビット長ｂの差がＮ（この例では、Ｎ＝４）の整数倍となるような２つの識別コードを入れ替えても、「ａ＋ｂ＝ｋ×Ｎ」という条件は維持されたままになる。たとえば、ビット長ｂ＝「２」に対応する識別コード「００」と、ビット長ｂ＝「６」に対応する識別コード「１０１１００」とを相互に入れ替えても、上記条件は維持されたままになる（ｋの値は変わる）。同様に、たとえば、ビット長ｂ＝「４」に対応する識別コード「１００１」と、ビット長ｂ＝「８」に対応する識別コード「１０１１１０１０」とを相互に入れ替えても、上記条件は維持されたままになる（ｋの値は変わる）。このような入れ替えを行えば、ビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられているハフマン符号化テーブルを作成することも可能である。
【０１３０】
＜＜＜  §４．本発明に係る復号化方法の基本原理  ＞＞＞
§３では、本発明に係る符号化方法と、当該符号化方法によって作成された図９(c) に示す具体的な符号化データ列を、１台の復号処理ユニットを用いて、先頭から順番に処理しながら復号化を行う手順を述べた。しかしながら、１台の復号処理ユニットを用いた復号化を前提とする場合、図９に示す符号化処理を行う特有のメリットは生かされない。実際、図９(c) に示す符号化データ列は、図７(c) に示す符号化データ列よりも若干データ容量が大きくなっており、データ容量をより削減するというメリットは得られない。図９に示す符号化処理を行う特有のメリットは、並列処理による復号化が可能になり、復号化に要する時間を短縮できるという点である。以下、このメリットについて、具体的な復号処理手順を示しながら説明する。
【０１３１】
図９(c) の符号化データ列を構成する各単位符号データＵ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５のデータ長は、図示のとおり、８ビット，１６ビット，４ビット，８ビット，４ビットになっており、いずれも基準ビット長Ｎ＝４の整数倍になっている。したがって、この符号化データ列を４ビットごとに区切ったとすれば、当該区切りは、必ずしも単位符号データＵの境界になるとは限らないが、単位符号データＵの境界は、必ず当該区切りの位置にくることになる。したがって、区切り位置を先頭から４ビットずつずらした複数通りの部分データを作成し、これらをそれぞれ複数台の復号処理ユニットに与えれば、何台かの復号処理ユニットには、先頭が単位符号データＵの境界位置に一致した部分データが与えられることになり、これらの復号処理ユニットは、正しい復号処理を実行できる。
【０１３２】
ここでは、図９(c) に示す符号化データ列について、８台の復号処理ユニットによる並列処理で復号化する原理を、図１０〜図１４を参照しながら具体的に説明しよう。図１０の上段に示すデータ列は、図９(c) に示す符号化データ列を、４ビットずつのブロックＢ１〜Ｂ１１に分割して示したものである。なお、ブロックＢ１１には「＊＊＊＊」なるビット列が示されているが、これは図９(c) には、単位符号データＵ５に後続するビット列が明記されていないための便宜であり、実際には、「＊＊＊＊」なる部分には何らかのビット列（単位符号データＵ６を構成するビット列）が入ることになる。
【０１３３】
ここでは、８台の復号処理ユニットを、それぞれユニットＱ１〜Ｑ８と呼ぶ。いずれの復号処理ユニットも、単位符号データＵの最大ビット長Ｕmaxに相当する１６ビットの連続ビットデータを収容し、先頭から順次、復号処理を実行する機能を有している。但し、この８台の復号処理ユニットには、Ｎビット（この例では、４ビット）ずつずらした部分データが与えられる。図において、８台の復号処理ユニットＱ１〜Ｑ８が、４ビットずつずらして描かれているのは、与えられる部分データが４ビットずつずれていることを明確に示すためである。
【０１３４】
すなわち、第１の復号処理ユニットＱ１には、第１〜１６ビット目のビット列（ブロックＢ１〜Ｂ４）が与えられ、第２の復号処理ユニットＱ２には、第５〜２０ビット目のビット列（ブロックＢ２〜Ｂ５）が与えられ、第３の復号処理ユニットＱ３には、第９〜２４ビット目のビット列（ブロックＢ３〜Ｂ６）が与えられ、... 以下同様である。
【０１３５】
さて、この８台の復号処理ユニットＱ１〜Ｑ８が並行して、それぞれ復号処理を開始したものとしよう。図１１は、各ユニットにおける復号処理の結果を示している。図において、太線の楕円は、合致判定プロセスにより、図９(b) に示す符号化テーブル内の識別コードと合致したビット列を示しており、当該楕円から上方へ向かう矢印の先に記載された丸数字は、合致した識別コードに対応するビット長ｂを示している。
【０１３６】
たとえば、第１の復号処理ユニットＱ１が行う復号処理は、まず、第１ビット目のビット「０」について、合致する識別コードＣの有無を調べる。図９(b) のテーブルには合致する識別コードは存在しない。そこで、次に第１〜２ビット目のビット列「０１」について、合致する識別コードＣの有無を調べるが、やはり合致する識別コードは存在しない。更に、第１〜３ビット目のビット列「０１１」について、合致する識別コードＣの有無を調べると、ようやくビット長「５」に対応する識別コードが合致するコードとして見つかることになる。図のユニットＱ１の行に示されている楕円「０１１」とその上方の丸数字「５」は、このような合致認識が行われることを示している。ビット長「５」の認識が行われたため、これに後続する５ビットのビット列「１１１００」が実データとして取り出され、８ビットのデータ「０００１１１００」が復元される。図のユニットＱ１の行の右側に示されている［２８］は、この８ビットのデータ「０００１１１００」の１０進表記である。
【０１３７】
続いて、第１の復号処理ユニットＱ１は、第９ビット目のビット「１」について、合致する識別コードＣの有無を調べるが、合致する識別コードは存在しない。そこで、次に第９〜１０ビット目のビット列「１０」について、合致する識別コードＣの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を１ビットずつ伸ばしてゆくと、第９〜１６ビット目のビット列「１０１１１０１０」について、ようやくビット長「８」に対応する識別コードが合致するコードとして見つかる。図のユニットＱ１の行に示されている楕円「１０１１１０１０」とその上方の丸数字「８」は、このような合致認識が行われることを示している。ここで、ビット長「８」の認識が行われたため、これに後続する８ビットのビット列を実データとして取り出そうとするが、第１の復号処理ユニットＱ１には、ブロックＢ５以降のビット列は取り込まれていないため、処理は失敗に終わる。図のユニットＱ１の行の右側に示されている［２８］に後続する［ＥＲＲ］は、次の実データの復号処理に失敗したことを示している。
【０１３８】
結局、第１の復号処理ユニットＱ１による復号処理は、最初の実データ［２８］の復号化には成功するが、次の実データの復号化には失敗する（［ＥＲＲ］）。こうして、復号処理に失敗した場合、そこで処理は終了する。図のユニットＱ１の行の右端の「Ｐ１＝８」なる記述は、正常処理ビット長Ｐ１が「８」であることを示している。ここで、正常処理ビット長とは、正常な復号処理に関与したビット列の長さを言う。上例の場合、正常に処理が行われたのは、数値［２８］を復元する処理までであるから、この数値［２８］の復元に関与した第１〜８ビット目までのビット長が、正常処理ビット長Ｐ１ということになる。
【０１３９】
次に、第２の復号処理ユニットＱ２が行う復号処理を見てみよう。ユニットＱ２は、まず、第１ビット目のビット「１」について、合致する識別コードＣの有無を調べる。図９(b) のテーブルには合致する識別コードは存在しない。そこで、次に第１〜２ビット目のビット列「１１」について、合致する識別コードＣの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を１ビットずつ伸ばしてゆくが、結局、いつまで経っても、合致する識別コードは見つからない。よって、正常な復号処理は全く行われないことになる。図のユニットＱ２の行の右側に示されている［ＥＲＲ］および「Ｐ２＝０」なる記述は、正常な復号処理は全く行われず、正常処理ビット長Ｐ２が「０」であることを示している。
【０１４０】
次に、第３の復号処理ユニットＱ３が行う復号処理を見てみよう。ユニットＱ３が、合致判定対象となるビット列を１ビットずつ伸ばしながら、合致する識別コードを見つける処理を繰り返してゆくと、第１〜８ビット目のビット列「１０１１１０１０」について、ようやくビット長「８」に対応する識別コードが合致するコードとして見つかる。図のユニットＱ３の行に示されている楕円「１０１１１０１０」とその上方の丸数字「８」は、このような合致認識が行われることを示している。ここで、ビット長「８」の認識が行われたため、これに後続する８ビットのビット列「１１１１１０１１」が実データとして取り出され、８ビットのデータ「１１１１１０１１」が復元される。図のユニットＱ３の行の右側に示されている［２５１］は、この８ビットのデータ「１１１１１０１１」の１０進表記である。この時点で、第３の復号処理ユニットＱ３内には未処理のビットは残っていないので、復号処理はここで終了する。図のユニットＱ３の行の右側に示されている［２５１］および「Ｐ３＝１６」なる記述は、正常処理により［２５１］なる数値データが復元され、正常処理ビット長Ｐ３が「１６」であることを示している。
【０１４１】
また、第４の復号処理ユニットＱ４が行う復号処理は次のとおりである。ユニットＱ４は、合致判定対象となるビット列を１ビットずつ伸ばしながら、合致する識別コードを見つける処理を繰り返してゆくと、第１〜５ビット目のビット列「１０１０１」について、ビット長「７」に対応する識別コードが合致するコードとして見つかる。図のユニットＱ４の行に示されている楕円「１０１０１」とその上方の丸数字「７」は、このような合致認識が行われることを示している。ここで、ビット長「７」の認識が行われたため、これに後続する７ビットのビット列「１１１１０１１」が実データとして取り出され、８ビットのデータ「０１１１１０１１」が復元される。図のユニットＱ４の行の右側に示されている［１２３］は、この８ビットのデータ「０１１１１０１１」の１０進表記である。
【０１４２】
第４の復号処理ユニットＱ４は、更に復号処理を続行する。すると、第１３〜１５ビット目のビット列「０１０」について、ビット長「１」に対応する識別コードが合致するコードとして見つかる。図のユニットＱ４の行に示されている楕円「０１０」とその上方の丸数字「１」は、このような合致認識が行われることを示している。ここで、ビット長「１」の認識が行われたため、これに後続する１ビットのデータ「１」が実データとして取り出され、８ビットのデータ「０００００００１」が復元される。図のユニットＱ４の行の右側の［１２３］の右に示されている［１］は、この８ビットのデータ「０００００００１」の１０進表記である。この時点で、第４の復号処理ユニットＱ４内には未処理のビットは残っていないので、復号処理はここで終了する。図のユニットＱ４の行の右端に示されている「Ｐ４＝１６」なる記述は、［１２３］および［１］なる数値データを復元する処理に関与した正常処理ビットのビット長Ｐ４が「１６」であることを示している。
【０１４３】
この第４の復号処理ユニットＱ４による復号処理で留意すべき点は、すべて正常な復号処理が行われ、［１２３］および［１］なる２つの数値データが復元されたのにもかかわらず、数値データ［１２３］は、本来、復元されるべきではない数値データである点である。図１１の上段に示す符号化データ列は、もともと図１に示す数値データ［２８］［２５１］［１］［１３］［３］を符号化したものであり、［２８］［２５１］［１］なる数値データは、本来、復元されるべき数値データであるが、［１２３］なる数値データは、図１に示す数値データ列には含まれていない。したがって、この図１１に示す復号処理プロセスでは、正常処理で得られた数値データであっても、必ずしも復号化すべき数値データとは限らないことになる。もっとも、この［１２３］のような数値データは、後述するように、最終的なデータ編成段階で採用されないため、問題が生じることはない。
【０１４４】
さて、続く第５の復号処理ユニットＱ５および第６の復号処理ユニットＱ６が行う復号処理では、いつまで経っても、合致する識別コードは見つからず、正常な復号処理は全く行われない。図のユニットＱ５，Ｑ６の行の左側に示されている［ＥＲＲ］および「Ｐ５＝０」，「Ｐ６＝０」なる記述は、正常な復号処理は全く行われず、正常処理ビット長Ｐ５，Ｐ６が「０」であることを示している。
【０１４５】
次の第７の復号処理ユニットＱ７が行う復号処理では、図示のとおり、正常処理により、３つの数値データ［１］［１３］［３］が実データとして取り出される。このときの正常処理ビット長Ｐ７は「１６」である。そして、最後の第８の復号処理ユニットＱ８が行う復号処理では、図示のとおり、正常処理により、２つの数値データ［１３］［３］が実データとして取り出される。その後、「＊＊＊＊」の部分について、復号処理が続行されるが、ここでは、この「＊＊＊＊」の部分についての復号処理は、有効なビット列が中断されたために失敗したものとしよう。そのため、図示のとおり［１３］［３］［ＥＲＲ］なる結果が得られ、このときの正常処理ビット長Ｐ８は「１２」になる。ここで、数値データ［１３］［３］は、ユニットＱ７，Ｑ８で重複して復元されているが、最終的なデータ編成段階では一方のみが採用されるため、問題が生じることはない。
【０１４６】
結局、この図１１を見ると、ユニットＱ１には、単位符号データＵ１の先頭から始まる部分データが与えられ、ユニットＱ３には、単位符号データＵ２の先頭から始まる部分データが与えられ、ユニットＱ７には、単位符号データＵ３の先頭から始まる部分データが与えられ、ユニットＱ８には、単位符号データＵ４の先頭から始まる部分データが与えられる。したがって、これらユニットＱ１，Ｑ３，Ｑ７，Ｑ８は、少なくとも当初は、正常な復号処理を行うことができる。これに対して、ユニットＱ２，Ｑ５，Ｑ６には、単位符号データの途中から始まる部分データが与えられるため、当初から正常な復号処理を行うことはできず、処理は失敗に終わる。
【０１４７】
なお、ユニットＱ４には、単位符号データの途中から始まる部分データが与えられているにもかかわらず、正常な復号処理が完了している。このように、単位符号データの途中から始まる部分データが与えられた場合にも、偶然、正常な復号処理が完了する場合もあり得る。しかしながら、後述するように、最終的なデータ編成段階において、偶然、正常な復号処理が行われたような場合は、その処理結果が採用されることはないので、問題は生じない。
【０１４８】
それでは、最終的なデータ編成段階の処理を説明しよう。このデータ編成段階の処理の基本的な考え方は、まず第１の復号処理ユニットＱ１を最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集することにより復号化データ列を生成するというものである。
【０１４９】
これを上述した具体例に即して説明しよう。図１２は、図１１に示す復号処理プロセスの図に、正常処理端線Ｚ０〜Ｚ３を付加したものである。この正常処理端線Ｚ０〜Ｚ３は、正常な復号処理が行われたビット列の端部を示すものであり、その位置は、正常処理ビット長Ｐ１〜Ｐ８に基づいて決定することができる。
【０１５０】
まず、ユニットＱ１を最初の採択ユニットとして決定し、当該採択ユニットＱ１の先頭位置に、正常処理端線Ｚ０を引く。次に、この採択ユニットＱ１についての正常処理ビット長Ｐ１＝８を参照して、正常処理端線Ｚ０から８ビット目（Ｐ１ビット目）の位置に、正常処理端線Ｚ１を引く。そして、この正常処理端線Ｚ１を先頭位置とする別なユニットＱ３を新たな採択ユニットと決定し、この採択ユニットＱ３についての正常処理ビット長Ｐ３＝１６を参照して、正常処理端線Ｚ１から１６ビット目（Ｐ３ビット目）の位置に、正常処理端線Ｚ２を引く。更に、この正常処理端線Ｚ２を先頭位置とする別なユニットＱ７を新たな採択ユニットと決定し、この採択ユニットＱ７についての正常処理ビット長Ｐ７＝１６を参照して、正常処理端線Ｚ２から１６ビット目（Ｐ７ビット目）の位置に、正常処理端線Ｚ３を引く。
【０１５１】
このようにすれば、ユニットＱ１，Ｑ３，Ｑ７の３台が採択ユニットとなる。図１３は、この３台の採択ユニットＱ１，Ｑ３，Ｑ７における正常処理ビットの部分を太枠で囲って示した図である。この太枠で囲った正常処理ビットの部分に着目すると、それぞれ正常処理端線Ｚ０〜Ｚ１の区間、正常処理端線Ｚ１〜Ｚ２の区間、正常処理端線Ｚ２〜Ｚ３の区間となり、互いに連続した区間になる。したがって、これら３台の採択ユニットＱ１，Ｑ３，Ｑ７による正常な復号処理によって得られた数値データを収集すれば、本来復元されるべき数値データ列が得られる。すなわち、図１３に示すように、これら採択ユニットＱ１，Ｑ３，Ｑ７によって復元された数値データを収集して並べれば、［２８］［２５１］［１］［１３］［３］となり、図１に示す元の数値データ列に一致する。
【０１５２】
図１２に示す例では、ユニットＱ４によって［１２３］［１］なる数値データが復元され、ユニットＱ８によって［１３］［３］なる数値データが復元されているが、ユニットＱ４，Ｑ８は、採択ユニットにはならないため、これらの数値データは、何ら利用されないまま捨てられることになる。したがって、この場合、ユニットＱ４，Ｑ８は無駄な処理を行ったことになるが、並列処理による復号化時間の短縮というメリットを享受する上で貢献したことになる。
【０１５３】
結局、上述した復号処理プロセスでは、実際には、８台のユニットＱ１〜Ｑ８のすべてが並列的に復号処理を行うことになるが、図１３の上段に示す符号化データ列について、単位符号データＵ１の部分（実際には、後続する単位符号データＵ２の一部を含む）をユニットＱ１に与え、単位符号データＵ２の部分をユニットＱ３に与え、単位符号データＵ３，Ｕ４，Ｕ５の部分をユニットＱ７に与え、この３台の復号処理ユニットによる並列処理によって、単位符号データＵ１〜Ｕ５の復号化を行ったことと同じである。
【０１５４】
こうして、８台のユニットＱ１〜Ｑ８の１回目の並列処理により、単位符号データＵ１〜Ｕ５の復号化が完了する。すなわち、この１回目の並列処理により、図１３の上段に示す符号化データ列のうちのブロックＢ１〜Ｂ１０の部分についての復号化が完了したことになる。そこで、２回目の並列処理では、符号化データ列の未復号化部の先頭、すなわち、ブロックＢ１１の先頭から、１回目の並列処理と全く同じことを繰り返せばよい。このようにして、並列処理を繰り返し実行してゆけば、符号化データ列を構成する各ブロックを順番に復号化してゆくことができる。
【０１５５】
なお、上述した実施形態では、基準ビット長Ｎを４に設定した例を示したが、基準ビット長Ｎは２以上の整数であれば、任意の整数であってかまわない。また、各復号処理ユニットＱ１〜Ｑ８は、いずれも単位符号データＵの最大ビット長Ｕmaxに相当する１６ビットの連続ビットデータを収容し、復号処理を実行する機能を有しているが、一般に、それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を行う機能を有する復号処理ユニットを用いればよい。したがって、たとえば、最大ビット長Ｕmax＝１６ビットである場合に、Ｌ＝２０ビットとし、２０ビットの連続ビットデータを収容し、復号処理を実行する機能を有するユニットを用いてもかまわない。
【０１５６】
更に、上述した実施形態では、８台の復号処理ユニットＱ１〜Ｑ８を用いた並列処理の例を示したが、用いる復号処理ユニットの台数Ｍは、必ずしもＭ＝８に設定する必要はなく、たとえば、Ｍ＝７のような素数に設定しても問題はない。ただ、並列処理による復号化の時間短縮効果が必ず得られるようにするには、Ｍ≧１＋Ｌ／Ｎとなるような複数Ｍ台の復号処理ユニットを用いるのが好ましい。そうすれば、１回の並列処理において、必ず２つ以上の単位符号データの正常な復号処理を行うことができるので、並列処理の効果が毎回必ず得られるようになる。
【０１５７】
＜＜＜  §５．本発明に係る符号化方法の基本手順  ＞＞＞
続いて、本発明に係る符号化方法の基本手順を流れ図を参照しながら説明する。図１４は、本発明に係る数値データ列の符号化方法の基本手順を示す流れ図である。この手順を構成する各ステップは、実際には、コンピュータや集積回路などの演算処理装置によって実行される。
【０１５８】
まず、ステップＳ１１のデータ入力段階では、符号化の対象となる数値データ列を演算処理装置に入力する処理が行われる。このステップＳ１１で入力される数値データ列は、たとえば、図２に示すような固定長ビットで表現されたデータ列であり、ここで行う符号化処理の目的は、この固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化することにある。
【０１５９】
一方、ステップＳ１２のテーブル入力段階では、個々のビット長に対応する固有の識別コードを示す符号化テーブルを演算処理装置に入力する処理が行われる。このステップＳ１２で入力される符号化テーブルは、図９(b) に示すように、実データを表現するのに十分な所定範囲内の複数通りのビット長ｂ（図示の例では、０〜８）について、個々のビット長ｂと、当該ビット長ｂに対応する固有の識別コードＣと、の対応関係を示す可変長符号化テーブルであり、次の２つの条件を満たしている。
【０１６０】
第１の条件は、可変長の識別コードＣを認識可能にするために必要な条件であり、「このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という条件である。このような条件を満たす識別コード群を用いれば、§１で述べたように、復号化を行う際に、先頭から１ビットずつ比較してゆく合致判定処理が可能になる。
【０１６１】
第２の条件は、本発明に特有の条件であり、「このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して『ａ＋ｂ＝ｋ×Ｎ』（但し、ｋは任意の整数）である。」という条件である。この第２の条件を満足する識別コード群を用いれば、復号化を行う際に、複数台の復号処理ユニットを用いた並列処理が可能になる点は、既に§４で実例を挙げて説明したとおりである。
【０１６２】
こうして、符号化の対象となる数値データ列と、符号化に利用する符号化テーブルとが用意できたら、ステップＳ１３〜Ｓ１７によって、実際の符号化処理が実行される。
【０１６３】
まず、ステップＳ１３のデータ抽出段階において、入力した数値データ列から個々の数値データを順番に抽出する処理が行われる。たとえば、図２に示す例の場合、固定長ビットからなる数値データＤ１，Ｄ２，Ｄ３，... が１つずつ順に抽出される。すなわち、最初は、数値「２８」を示す８ビットの固定長ビット列Ｄ１「０００１１１００」が抽出される。
【０１６４】
次の実データ生成段階Ｓ１４では、抽出した数値データから冗長なビットを削除することにより、実データを生成する処理が行われる。上例の場合、固定長ビット列Ｄ１「０００１１１００」の先頭の０を削除する処理が行われ、「１１１００」なる実データが生成される。図２に示す８ビットの固定長ビット列Ｄ１，Ｄ２，Ｄ３，... について作成された実データは、図３に示すような可変長ビット列になる。いずれも各数値データを構成するビット列から、先頭の０を削除する処理が行われている。この図３に示す可変長ビット列を見ると、いずれも先頭のビットが１になっており、不要な０が削除されていることがわかる。
【０１６５】
なお、０を示す数値データ（８ビットの固定長ビット列「００００００００」）の取り扱い方には、一般に２通りの方法がある。第１の方法は、数値０を、可変長のビット「０」で表現する方法である。この場合、固定長ビット列「００００００００」なる数値データに対して、可変長ビット「０」なる１ビットの実データが生成されることになる。このように、数値０に対しても１ビットの実データが作成されるので、可変長符号化テーブルとしては、図７(b) に示す例のように、ビット長ｂの最小値が「１」であるテーブルを用いれば十分である。なお、後述するように、本発明では負の値を取り扱うことも可能であり、負の値を「１の補数」を用いて表現する場合には、以下に述べる第２の方法を用いる必要がある。
【０１６６】
第２の方法は、数値０を、長さ０ビットの仮想ビットによって表現する方法である。この場合、固定長ビット列「００００００００」なる数値データに対して、長さ０ビットの可変長ビット「」なる実データが生成されることになる。すなわち、この場合の実データは、実質的なビットを有しておらず、実際には、実データの部分には何らビットを配置しないことになる。この場合、実データは、ビット長が０である仮想のビット列ということになり、単位符号データＵは、実質的に、識別コードＣを構成するビット列のみによって構成される。このように、数値０に対して長さ０ビットの実データが作成されるので、可変長符号化テーブルとしては、図９(b) に示す例のように、ビット長ｂの最小値が「０」であるテーブルを用いる必要がある。
【０１６７】
データ容量をできるだけ削減するという観点からは、上述した第２の方法が好ましい。また、これまで述べてきた実施例は、いずれも符号化の対象となる数値データが、正の値を示すデータであるという前提の実施例であったが、実用上は、負の値を示すデータを取り扱うことも可能である。一般的な固定長ビット列による２進表現形式では、値「０」は「００００００００」のようにビット０を並べて表現し、正の値「２」は「００００００１０」のように実データの先頭に０を詰めて表現し、負の値「−２」は「１１１１１１０１」（１の補数表現の場合）のように実データの先頭に１を詰めて表現する。
【０１６８】
したがって、正負の数値が混在する符号付きの数値データを取り扱う場合、値「０」については全ビットを冗長ビットとし、正の値については、先頭に連続して付されているビット「０」を冗長ビットとし、負の値については、先頭に連続して付されているビット「１」を冗長ビットとし、これら冗長ビットを削除することにより実データを生成することができる。すなわち、ステップＳ１４では、抽出した数値データを示す実データとして、当該数値データが０を示すデータである場合にはビット長が０である仮想のビット列を、正の値を示すデータである場合には先頭に０を含まない可変長のビット列を、負の値を示すデータである場合には先頭に１を含まない可変長のビット列を、それぞれ生成する処理を行えばよい。
【０１６９】
続くステップＳ１５の識別コード選択段階では、ステップＳ１２で入力した符号化テーブルを参照して、ステップＳ１４で生成された実データのビット長ｂに対応する識別コードＣを選択する処理が行われる。たとえば、図９(a) に示す例の場合、ステップＳ１４において作成された実データＤ１「１１１００」のビット長ｂ（図では、丸数字「５」で示されている）に対応する識別コードＣ１「０１１」が、図９(b) に示す符号化テーブルから選択される。
【０１７０】
そして、ステップＳ１６の単位符号データ生成段階では、ステップＳ１４で生成された実データの先頭に、ステップＳ１５で選択された識別コードを付加することにより、抽出した数値データを示す単位符号データが生成される。上例の場合、実データＤ１「１１１００」の先頭に、識別コードＣ１「０１１」が付加され、図９(c) に示すように、単位符号データＵ１「０１１１１１００」が生成されることになる。
【０１７１】
続くステップＳ１７では、全データについての処理が完了するまで、ステップＳ１３からの処理へ戻る繰り返し処理が実行される。すなわち、上述したデータ抽出段階Ｓ１３、実データ生成段階Ｓ１４、識別コード選択段階Ｓ１５、単位符号データ生成段階Ｓ１６が、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行される。これにより、図９(c) に示すような単位符号データＵ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５，... が順番に生成されてゆくことになる。
【０１７２】
最後のステップＳ１８では、生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力段階が行われる。これにより、図９(c) に示すような単位符号データＵ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５，...を並べたデータ列が、符号化データ列として出力されることになる。
【０１７３】
このステップＳ１８のデータ出力段階では、符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルを出力するのが好ましい。図１５は、このデータ出力段階で作成される符号化データファイルＦの構造の一例を示すブロック図である。画像データなどの一般的なデータファイルは、図示のとおり、ヘッダ部Ｆ１、本体部Ｆ２、フッタ部Ｆ３によって構成されている。ここで、本体部Ｆ２には、符号化データファイルＦに収容すべき本来のデータ、すなわち、図９(c) に示すような単位符号データＵ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５，...を並べて構成される符号化データ列が組み込まれる。
【０１７４】
これに対して、ヘッダ部Ｆ１には、通常、本体部Ｆ２に組み込まれているデータの形式、フォーマット、容量などを示す補助的な情報が組み込まれる。図１５に示す実施例では、このヘッダ部Ｆ１に、符号化の処理に用いた符号化テーブルＴを組み込んでいる。そうすれば、後述する復号化を行う際に、このヘッダ部Ｆ１に組み込まれた符号化テーブルＴをそのまま利用することが可能になる。もちろん、符号化テーブルＴは、フッタ部Ｆ３に組み込むようにしてもよい。なお、図１５では、各単位符号データＵ１，Ｕ２，...は、いずれも同じ幅のブロックで示されているが、実際には、それぞれのデータ長は異なっている（但し、いずれも所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるような長さ）。
【０１７５】
結局、図１５に示す符号化データファイルＦは、所定のビット長ｂを示す識別コードＣに後続して当該ビット長ｂをもつビット列からなる実データＤを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データＵ（最大ビット長Ｕmax）を、並べることにより構成されるビット羅列データと、個々の識別コードＣに対応する特定のビット長ｂを示す符号化テーブルＴと、を含むデータファイルということになり、当該データファイルＦは、コンピュータ読み取り可能な情報記録媒体に記録して配布することができる。
【０１７６】
また、このデータファイルＦに含まれている符号化テーブルＴは、数値データ列を可変長のビット列を用いて符号化する符号化方法に用いるテーブルであって、所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係が示されており、このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルということになる。
【０１７７】
一方、図１６は、符号化データファイルＦの構造の別な一例を示すブロック図である。ステップＳ１８のデータ出力段階では、この図１６に示す例のように、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルＦを出力するようにしてもよい。
【０１７８】
図１５に示すファイルＦと図１６に示すファイルＦとの相違は、後者では、ヘッダ部Ｆ１に、符号化テーブルＴ自身を組み込む代わりに、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報Ｈを組み込むようにした点である。テーブル特定情報Ｈは、符号化テーブルそれ自身ではないが、符号化テーブルを特定するためのファイル名や、ＵＲＬなどの情報であり、復号化を行う際に、このテーブル特定情報Ｈを用いて、復号化に必要な符号化テーブルを入手できるようにするための情報である。
【０１７９】
たとえば、図示の例の場合、４種類の符号化テーブルＴ１〜Ｔ４が別ファイルなどによって用意されており、これらのテーブルのどれかを特定する情報が、テーブル特定情報Ｈとしてヘッダ部Ｆ１に組み込まれることになる。具体的には、たとえば、テーブルＴ３が符号化に用いられたテーブルであるとすると、当該テーブルＴ３のファイル名や、当該テーブルＴ３の入手先を示すＵＲＬなどの情報が、テーブル特定情報Ｈとしてヘッダ部Ｆ１に組み込まれる。復号化を行う際には、このテーブル特定情報Ｈを利用して、必要な符号化テーブルを入手することができる。
【０１８０】
結局、図１６に示す符号化データファイルＦは、所定のビット長を示す識別コードＣに後続して当該ビット長ｂをもつビット列からなる実データＤを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データＵ（最大ビット長Ｕmax）を、並べることにより構成されるビット羅列データと、個々の識別コードＣに対応する特定のビット長ｂを示す符号化テーブルＴを特定するテーブル特定情報Ｈと、を含むデータファイルということになり、当該データファイルは、コンピュータ読み取り可能な情報記録媒体に記録して配布することができる。
【０１８１】
なお、§３でも述べたとおり、実用上は、ステップＳ１２で入力する符号化テーブルとして、図８(b) に示す例のように、実データのビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられているハフマン符号化テーブルを用いるようにするのが好ましい。このようなハフマン符号化テーブルは、§３で述べたとおり、図９(b) に示す符号化テーブルについて、対応するビット長ｂの差がＮの整数倍となるような２つの識別コードを入れ替える作業を行うことにより作成することができる。
【０１８２】
そのためには、ステップＳ１１のデータ入力段階の後に、入力した数値データ列について、実データのビット長ｂの出現頻度を集計する頻度集計段階を行うようにし、ステップＳ１２のテーブル入力段階の後に、入力した既存の標準符号化テーブル内の、基準ビット長Ｎの整数倍の差をもつビット長ｂ相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている修正した符号化テーブルを生成するテーブル修正段階を行うようにし、ステップＳ１５の識別コード選択段階で、この修正した符号化テーブルを参照して、識別コードの選択を行うようにすればよい。
【０１８３】
＜＜＜  §６．本発明に係る復号化方法の基本手順  ＞＞＞
続いて、本発明に係る復号化方法の基本手順を流れ図を参照しながら説明する。図１７は、本発明に係る数値データ列の復号化方法の基本手順を示す流れ図である。この手順を構成する各ステップは、実際には、コンピュータや集積回路などの演算処理装置によって実行される。
【０１８４】
ここで述べる復号化方法は、§５で述べた符号化方法によって符号化された符号化データ列、すなわち、「所定のビット長ｂを示す識別コードＣに後続して、当該ビット長ｂをもつビット列からなる実データＤを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データＵ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列、を復号処理の対象とするものであり、個々の実データに対応する数値データを復元することを目的とするものである。
【０１８５】
この復号化方法の基本原理は、既に§４で説明したとおり、符号化データ列をＮビットの整数倍の単位で分割して複数の部分データを生成し、各部分データを複数Ｍ台の復号処理ユニットに分配し、この複数Ｍ台の復号処理ユニットの並列処理により、分配された部分データに対する復号処理を行い、正常に復号化が行われた数値データを並べることにより復号化データ列を生成する、というものである。
【０１８６】
まず、ステップＳ２１のデータ入力段階では、復号化の対象となる符号化データ列を、複数Ｍ台の復号処理ユニットを含む演算処理装置に入力する処理が行われる。具体的には、たとえば、図９(c) に示すような可変長ビットで表現された符号化データ列が入力されることになる。
【０１８７】
一方、ステップＳ２２のテーブル入力段階では、個々の識別コードに対応する特定のビット長を示す符号化テーブルを演算処理装置に入力する処理が行われる。ここで入力する符号化テーブルは、当然ながら、ステップＳ２１で入力した符号化データ列を作成する符号化処理の段階で用いられたテーブルと実質的な内容が同一のテーブルである必要がある。したがって、実用上は、図１５に示すように、符号化の処理に用いた符号化テーブルＴが組み込まれた符号化データファイルＦか、図１６に示すように、符号化の処理に用いた符号化テーブルＴを特定するテーブル特定情報Ｈが組み込まれた符号化データファイルＦを利用して、符号化データ列を保存しておき、復号化を行う際には、この符号化データファイルＦによって、符号化データ列とともに、その復号化に用いる符号化テーブルの情報を引き渡せるようにしておくのが好ましい。
【０１８８】
たとえば、図１５に示すように、符号化データ列と、符号化の処理に用いた符号化テーブルＴと、を含むデータファイルＦが与えられたときには、データ入力段階Ｓ２１において、当該データファイルＦから符号化データ列を抽出する処理を行い、テーブル入力段階Ｓ２２において、当該データファイルＦから符号化テーブルＴを抽出する処理を行えばよい。また、図１６に示すように、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報Ｈと、を含むデータファイルが与えられたときには、データ入力段階Ｓ２１において、当該データファイルＦから符号化データ列を抽出する処理を行い、テーブル入力段階Ｓ２２において、データファイルＦからテーブル特定情報Ｈを抽出する処理を行った後、当該テーブル特定情報Ｈによって特定されるテーブルを選択して利用すればよい。
【０１８９】
続くステップＳ２３のデータ分配段階では、それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を行う機能を有する複数Ｍ台の復号処理ユニットに対して、ステップＳ２１で入力した符号化データ列の一部を部分データとして分配する処理が行われる。図１０に示した実施形態は、Ｎ＝４，Ｌ＝１６，Ｕmax ＝１６，Ｍ＝８に設定した例であり、それぞれ１６ビットの連続ビットデータに対する復号処理を行う機能を有する８台の復号処理ユニットＱ１〜Ｑ８に対して、ステップＳ２１で入力した符号化データ列の一部を部分データとして分配する処理が行われる。
【０１９０】
この分配段階の処理を一般論として記述すると、符号化データ列の未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理ということになる。図１０に示した実施形態の場合、Ｎ＝４，Ｌ＝１６，Ｍ＝８であるから、符号化データ列の未復号化部の先頭から数えて第（４×（ｉ−１）＋１）ビット目〜第（４×（ｉ−１）＋１６）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜８）に分配する処理ということになる。たとえば、第１の復号処理ユニットＱ１に分配されるビット列は、ｉ＝１として、符号化データ列の未復号化部の先頭から数えて第１ビット目〜第１６ビット目までのビット列になり、第２の復号処理ユニットＱ２に分配されるビット列は、ｉ＝２として、符号化データ列の未復号化部の先頭から数えて第５ビット目〜第２０ビット目までのビット列になる。
【０１９１】
次のステップＳ２４の復号処理段階は、Ｍ台の復号処理ユニットによる並列処理として行われる段階である。すなわち、Ｍ台の復号処理ユニットによる並列処理により、ステップＳ２２で入力した符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理が行われる。既に§４で述べたとおり、この復号処理は、必ずしも正常に行われるとは限らない。たとえば、図１１に［ＥＲＲ］と記述されたユニットでは、正常な復号処理が行われないことになる。したがって、この復号処理段階では、分配された部分データの先頭から順に、正常な復号処理が可能な限り処理を続行し、正常な復号処理ができない場合には、そこで処理を中断することになる（もしくは、§１４で述べるように、所定時点で処理を中断してもよい。）。
【０１９２】
続くステップＳ２５のデータ編成段階では、このＭ台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成する処理が行われる。具体的には、１回の並列処理によってＭ台の復号処理ユニットから処理結果が得られたときに、まず第１のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集して並べる処理が行われる。
【０１９３】
たとえば、図１２に示す実施例の場合、まず第１のユニットＱ１を最初の採択ユニットとして決定し、この採択ユニットＱ１によって正常な復号処理が行われた最終ビットが、正常処理ビット長Ｐ１によって第８ビット目と認識される（正常処理端線Ｚ１の左側ビット）。そして、この最終ビットの直後のビット（正常処理端線Ｚ１の右側ビット）を先頭ビットとする部分データが分配された別なユニットＱ３を新たな採択ユニットと決定する処理が行われる。更に、この新たな採択ユニットＱ３によって正常な復号処理が行われた最終ビットが、正常処理ビット長Ｐ３によって第２４ビット目と認識される（正常処理端線Ｚ２の左側ビット）。そして、この最終ビットの直後のビット（正常処理端線Ｚ２の右側ビット）を先頭ビットとする部分データが分配された別なユニットＱ７を新たな採択ユニットと決定する処理が行われる。更に、この新たな採択ユニットＱ７によって正常な復号処理が行われた最終ビットが、正常処理ビット長Ｐ７によって第４０ビット目と認識される（正常処理端線Ｚ３の左側ビット）。そして、各採択ユニットＱ１，Ｑ３，Ｑ７で正常に復号化が行われた数値データ［２８］［２５１］［１］［１３］［３］を収集して並べる処理が行われる。
【０１９４】
続くステップＳ２６では、全データについての処理が完了するまで、すなわち、入力した符号化データ列のすべての部分に対する復号化が完了するまで、ステップＳ２３からの処理へ戻る繰り返し処理が実行される。そして、データ分配段階Ｓ２３では、符号化データ列の未復号化部の先頭から（図１３に示す例の場合、ブロックＢ１１から）、前述した分配処理が繰り返し実行される。そして、ステップＳ２４では、新たな部分データの分配が行われるたびに、各復号処理ユニットによる並列的な復号処理が実行され、ステップＳ２５では、こうして複数回の並列処理によってそれぞれ収集された数値データを並べることにより、復号化データ列の生成が行われる。
【０１９５】
最後に、ステップＳ２７のデータ出力段階において、生成された復号化データ列が出力される。
【０１９６】
なお、既に述べたとおり、並列処理の効果が毎回必ず得られるようにするためには、１回の並列処理において、必ず２つ以上の単位符号データの正常な復号処理を行うことができるようにすればよい。そのためには、ステップＳ２３のデータ分配段階では、Ｍ≧１＋Ｌ／Ｎとなるような複数Ｍ台の復号処理ユニットに部分データの分配を行い、ステップＳ２４の復号処理段階では、これらＭ台の復号処理ユニットによる並列処理を行うようにすればよい。
【０１９７】
＜＜＜  §７．本発明に係る符号化装置の基本構成  ＞＞＞
続いて、本発明に係る符号化装置の基本構成を、図１８に示すブロック図を参照しながら説明する。ここに示す装置は、実際には、コンピュータや集積回路などの演算処理装置によって構成することができる。
【０１９８】
図１８に示すとおり、この符号化装置は、データ格納部１１０、テーブル格納部１２０、データ抽出部１３０、実データ生成部１４０、識別コード選択部１５０、単位符号データ生成部１６０、データ出力部１７０によって構成され、固定長ビットからなる数値データ列Ｅを、符号化テーブルＴを参照することにより符号化し、可変長ビット列からなる符号化データ列Ｓを生成する機能を有する。
【０１９９】
データ格納部１１０は、符号化の対象となる数値データ列Ｅを入力して格納する構成要素であり、たとえば、図２に例示するような固定長ビット列からなる数値データ列Ｅが格納される。一方、テーブル格納部１２０は、個々のビット長ｂに対応する固有の識別コードＣを示す符号化テーブルＴを格納する構成要素であり、たとえば、図９(b) に例示するような可変長符号化テーブルが格納される。
【０２００】
ここで、このテーブル格納部１２０に格納される符号化テーブルは、既に述べたとおり、実データＤを表現するのに十分な所定範囲内の複数通りのビット長ｂについて、個々のビット長ｂと、当該ビット長ｂに対応する固有の識別コードＣと、の対応関係を示すテーブルであり、「条件１：このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない。」かつ「条件２：当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して『ａ＋ｂ＝ｋ×Ｎ』（但し、ｋは任意の整数）となる」という２つの条件を満足するテーブルである。
【０２０１】
データ抽出部１３０は、データ格納部１１０に格納されている数値データ列Ｅから個々の数値データＤ１，Ｄ２，Ｄ３，... を順番に抽出する構成要素である。たとえば、入力された数値データＤ１，Ｄ２，Ｄ３，... が、図２に示すような８ビットの固定長ビット列である場合、先頭から８ビットずつ区切りながら、８ビットのビット列を１つの数値データとして抽出する処理を行う。
【０２０２】
実データ生成部１４０は、この抽出した数値データから冗長なビットを削除することにより実データを生成する構成要素である。具体的には、符号付きの数値データを取り扱う場合であれば、抽出した数値データを示す実データとして、当該数値データが０を示すデータである場合にはビット長が０である仮想のビット列を生成し、正の値を示すデータである場合には先頭に０を含まない可変長のビット列を生成し（ビット１が出現するまで先頭のビット０を削除してゆく）、負の値を示すデータである場合には先頭に１を含まない可変長のビット列を生成（ビット０が出現するまで先頭のビット１を削除してゆく）すればよい。
【０２０３】
識別コード選択部１５０は、テーブル格納部１２０に格納されている符号化テーブルＴを参照して、実データ生成部１４０で生成された実データのビット長ｂに対応する識別コードＣを選択する構成要素であり、単位符号データ生成部１６０は、実データ生成部１４０によって生成された実データの先頭に、識別コード選択部１５０によって選択された識別コードを付加することにより、データ抽出部１３０が抽出した数値データを示す単位符号データを生成する構成要素である。
【０２０４】
そして、データ出力部１７０は、単位符号データ生成部１６０で生成された単位符号データＵを順番に並べて、符号化データ列Ｓとして出力する構成要素である。具体的には、図９(c) に示すような符号化データ列が出力されることになる。なお、ここに示す実施形態の場合、データ出力部１７０は、符号化データ列Ｓとともに、テーブル格納部１２０に格納されている符号化テーブルＴもしくは当該符号化テーブルＴを特定するテーブル特定情報Ｈを出力する機能を有している。たとえば、データ出力部１７０から出力されるデータファイルＦは、図１５もしくは図１６に示す構造をもったデータファイルになる。
【０２０５】
＜＜＜  §８．本発明に係る復号化装置の基本構成  ＞＞＞
続いて、本発明に係る復号化装置の基本構成を、図１９に示すブロック図を参照しながら説明する。ここに示す装置は、実際には、コンピュータや集積回路などの演算処理装置によって構成することができる。
【０２０６】
ここで述べる復号化装置は、§７で述べた符号化装置によって符号化された符号化データ列Ｓ、すなわち、「所定のビット長ｂを示す識別コードＣに後続して、当該ビット長ｂをもつビット列からなる実データＤを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データＵ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列、を復号処理の対象とするものであり、個々の実データに対応する数値データを復元する処理を行う。
【０２０７】
図１９に示すとおり、この復号化装置は、データ格納部２１０、テーブル格納部２２０、データ分配部２３０、複数Ｍ台の復号処理ユニット２４０（１）〜２４０（Ｍ）、データ編成部２５０、データ出力部２６０によって構成され、可変長ビット列からなる符号化データ列Ｓを、符号化テーブルＴを参照することにより復号化し、固定長ビットからなる復号化データ列Ｇ（元の数値データ列Ｅ）を生成する機能を有する。
【０２０８】
データ格納部２１０は、復号化の対象となる符号化データ列Ｓを入力して格納する構成要素であり、たとえば、図９(c) に例示するような可変長ビット列からなる符号化データ列Ｓが格納される。一方、テーブル格納部２２０は、個々の識別コードＣに対応する特定のビット長ｂを示す符号化テーブルＴを格納する構成要素であり、たとえば、図９(b) に例示するような可変長符号化テーブルが格納される。このテーブル格納部２２０に格納される符号化テーブルは、符号化データ列Ｓを作成する際に、図１８に示すテーブル格納部１２０に格納されていた符号化テーブルと実質的な内容が同一のものである。
【０２０９】
実用上は、図１５に示すように、符号化の処理に用いた符号化テーブルＴが組み込まれた符号化データファイルＦか、図１６に示すように、符号化の処理に用いた符号化テーブルＴを特定するテーブル特定情報Ｈが組み込まれた符号化データファイルＦを利用して、符号化データ列を保存しておき、復号化を行う際には、この符号化データファイルＦから、符号化データ列Ｓとともに、その復号化に用いる符号化テーブルの情報を読み出すようにするのが好ましい。
【０２１０】
たとえば、図１５に示すように、符号化データ列と、符号化の処理に用いた符号化テーブルＴと、を含むデータファイルＦが与えられたときには、データ格納部２１０が、当該データファイルＦから符号化データ列Ｓを抽出して格納する処理を行い、テーブル格納部２２０が、当該データファイルＦから符号化テーブルＴを抽出して格納する処理を行うようにすればよい。また、図１６に示すように、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報Ｈと、を含むデータファイルＦが与えられたときには、データ格納部２１０が、当該データファイルＦから符号化データ列Ｓを抽出して格納する処理を行い、テーブル格納部２２０が、当該データファイルＦからテーブル特定情報Ｈを抽出する処理を行った後、当該テーブル特定情報Ｈによって特定されるテーブルを外部から読み込んで格納する処理を行うようにすればよい。
【０２１１】
データ分配部２３０は、Ｍ台の復号処理ユニット２４０（１）〜２４０（Ｍ）に対して、データ格納部２１０に格納されている符号化データ列Ｓの一部を部分データとして分配する構成要素である。具体的には、§６で説明したとおり、符号化データ列Ｓの未復号化部の先頭から数えて第（Ｎ×（ｉ−１）＋１）ビット目〜第（Ｎ×（ｉ−１）＋Ｌ）ビット目までのビット列を、第ｉ番目のユニット（ｉ＝１〜Ｍ）に分配する処理を、符号化データ列Ｓのすべての部分に対する復号化が完了するまで繰り返し実行する。
【０２１２】
Ｍ台の復号処理ユニット２４０（１）〜２４０（Ｍ）は、ここに示す実施例の場合、全く同一の構成要素であり、それぞれＬビット（但し、ＬはＮの整数倍、かつ、Ｌ≧Ｕmax）の連続ビットデータに対する復号処理を行う機能を有する。具体的には、これらＭ台の復号処理ユニット２４０（１）〜２４０（Ｍ）は、テーブル格納部２２０に格納されている符号化テーブルＴを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う機能を有し、データ分配部２３０から新たな部分データの分配が行われるたびに、分配された部分データの先頭から順に、正常な復号処理が可能な限り処理を続行する。上述したように、正常な復号処理が行えない場合には、そこで処理を中断する。
【０２１３】
これらＭ台の復号処理ユニット２４０（１）〜２４０（Ｍ）による復号処理は、並列処理として並行して行われることになり、その結果、復号化の処理時間を短縮するという効果が得られることになる。ただ、既に述べたとおり、並列処理の効果が毎回必ず得られるようにするためには、１回の並列処理において、必ず２つ以上の単位符号データの正常な復号処理を行うことができるようにするのが好ましい。そのためには、Ｍ≧１＋Ｌ／Ｎとなるような複数Ｍ台の復号処理ユニットを設けるようにすればよい。
【０２１４】
なお、ここに示す実施例の場合、各復号処理ユニット２４０からデータ編成部２５０に対して、正常な復号処理によって復元された数値データＤと、当該正常な復号処理に関与したビット数を示す正常処理ビット長Ｐと、正常な復号処理を続行することができなかった場合には、その旨を示すエラー信号ＥＲＲとが報告される。
【０２１５】
たとえば、図１２に示す実施例の場合、ユニットＱ１からは、正常な復号処理によって復元された数値データ「２８」と、当該正常な復号処理に関与したビット数を示す正常処理ビット長「Ｐ１＝８」と、エラー信号「ＥＲＲ」とが報告されることになり、ユニットＱ２からは、正常処理ビット長「Ｐ２＝０」と、エラー信号「ＥＲＲ」とが報告されることになり、ユニットＱ３からは、復元された数値データ「２５１」と、正常処理ビット長「Ｐ３＝１６」とが報告されることになる。ユニットＱ４〜Ｑ８からも、同様の報告がなされる。
【０２１６】
データ編成部２５０は、Ｍ台の復号処理ユニット２４０（１）〜２４０（Ｍ）による復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成する構成要素である。具体的には、データ編成部２５０は、１回の並列処理によってＭ台の復号処理ユニット２４０（１）〜２４０（Ｍ）から処理結果が得られたときに、まず第１のユニット２４０（１）を最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、１回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成する。
【０２１７】
また、データ編成部２５０は、１回の並列処理によってＭ台の復号処理ユニット２４０（１）〜２４０（Ｍ）からの処理結果が得られるたびに、データ分配部２３０に対して、既復号化部を示す信号を与える。たとえば、図１３に示す実施例の場合、ブロックＢ１〜Ｂ１０までのビット列についての復号化が完了したことになるので、データ編成部２５０は、データ分配部２３０に対して、ブロックＢ１０までが既復号化部であることを示す信号を与える。具体的には、たとえば、ブロックＢ１０の最終ビットの位置（先頭から第４０番目のビット）を示す信号を与えればよい。これにより、データ編成部２５０は、次回の並列処理のための分配を行う起点となる未復号化部の先頭が、先頭から第４１番目のビット（ブロックＢ１１の先頭ビット）であることを認識し、この起点から分配処理を行うことができる。
【０２１８】
データ編成部２５０による上述した処理は、Ｍ台の復号処理ユニット２４０（１）〜２４０（Ｍ）から報告された数値データＤと正常処理ビット長Ｐとに基づいて行うことができる。すなわち、Ｍ台の復号処理ユニットのうちの採択ユニットは、正常処理ビット長Ｐに基づいて決定することができる。具体的には、まず第１のユニット２４０（１）を最初の採択ユニットとする。続いて、この第１のユニット２４０（１）から報告された正常処理ビット長Ｐに基づいて、当該採択ユニットによって正常な復号処理が行われた最終ビットを認識することができるので、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットとして特定することができる。以下、同様にして、順次採択ユニットを決定してゆくことができ、最後に、各採択ユニットから報告された数値データＤを、順番に並べることにより、復号化データ列を生成することができる。また、各採択ユニットから報告された正常処理ビット長Ｐを合計することにより、既復号化部を認識することができるので、これをデータ分配部２３０に対して報告することができる。
【０２１９】
なお、ここに示す実施例では、各復号処理ユニット２４０からデータ編成部２５０に対して、正常な復号処理を続行することができなかったことを示すエラー信号ＥＲＲを報告させるようにしているが、上述したように、データ編成部２５０における処理を実行する上では、このエラー信号ＥＲＲは直接的には用いられない。したがって、エラー信号ＥＲＲの報告は必ずしも必要なものではなく、省略してもかまわない。実用上は、正常処理ビット長Ｐ＝０なる報告を、エラー信号ＥＲＲに代用することができる。
【０２２０】
こうして、１回もしくは複数回の並列処理により、データ編成部２５０は、復号化データ列Ｇを作成することができる。データ出力部２６０は、こうして作成された復号化データ列Ｇを出力する機能を果たす。この復号化データ列Ｇは、図１８の左上に示す元の数値データ列Ｅと同じものになる。
【０２２１】
＜＜＜  §９．二次元符号化テーブルを利用する基本原理  ＞＞＞
これまで述べてきた実施形態で用いた符号化テーブルは、いずれも実データのビット長ｂと識別コードＣとの１対１の対応関係を示すものであり、各識別コードＣは、特定のビット長ｂの情報を示すコードであった。これに対して、この§９で述べる実施形態は、識別コードＣに、ビット長ｂの情報だけでなく、付加的な情報をもたせる運用を行うものである。具体的には、ゼロのランレングス値Ｒの情報をもたせることになる。
【０２２２】
そこで、まず、ゼロのランレングス値Ｒを採り入れる基本概念を簡単に説明する。いま、図２０に示すような数値データ列（１０進表記）を符号化する場合を考えてみよう。ここでは、この図２０に示す数値データ列が８ビットの固定長ビット列として与えられた場合に、図９(b) に示す符号化テーブルを用いて、これまで述べた本発明に係る符号化方法によって、可変長ビット列に変換する事例を考える。
【０２２３】
図２１は、このような符号化方法を実施するプロセスを示す図である。図の上段の表には、個々の数値データＤ（１０進表記）について、冗長ビットを削除することによって得られる実データＤと、この実データＤのビット長ｂに対応する識別コードＣと、実データＤの先頭に識別コードＣを付加してなる単位符号データＵのビット長と、が示されている。たとえば、データ番号１の行には、数値データ「２８」（８ビット固定長による２進表記は「０００１１１００」）」について、実データ「１１１００」と、この実データのビット長「５」に対応する識別コード「０１１」（図９(b) のテーブル参照）と、識別コードと実データとを連結して得られる単位符号データ「０１１１１１００」のビット長「８」と、が示されている。
【０２２４】
図２０に示す数値データ列の特徴は、途中に連続した０が含まれている点である。一般に、画像データには、このような連続した０が含まれることが多く、特に、後述するＪＰＥＧ形式の画像データなどでは、通常、連続した多数の０が含まれる。図２１に示す符号化プロセスは、これまで述べてきた基本的な実施形態に係る符号化方法によるものであり、このような連続した０についても、それぞれ単位符号データＵが作成されることになる。すなわち、図２１の上段の表におけるデータ番号４〜９の行が、６個の連続した０についての符号化プロセスを示している。
【０２２５】
図９(b) に示す符号化テーブルでは、数値データが０を示すデータである場合には、ビット長が０である仮想のビット列を実データとし、識別コード「１０００」を割り当てることになる。したがって、図２１の上段の表におけるデータ番号４〜９の行では、実データは存在せず、識別コード「１０００」のみが割り当てられている。この表に基づいて作成された符号化データ列の一部が、図２１の下段に示されている。図示の単位符号データＵ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５，Ｕ６は、それぞれ元の数値データ２８，２５１，１，０，０，０に対応する。単位符号データＵ４，Ｕ５，Ｕ６は、数値０を示すデータであるため、実データを構成するビットは存在せず、識別コード「１０００」のみによって構成されている。
【０２２６】
図２１の上段の表におけるＵのビット長の欄を見ると、４，８，１６のいずれかになっており、基準ビット長Ｎ＝４の整数倍になっている。これは、そうなるように設定された図９(b) に示す符号化テーブルを用いて符号化を行ったためである。したがって、図２１の下段に示す単位符号データＵ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５，Ｕ６のビット長は、必ず４の整数倍になっており、並列処理による復号化が可能になる点は、これまで述べてきたとおりである。
【０２２７】
さて、この図２１に示す符号化プロセスでは、図２１の下段に示すように、数値０を表すために「１０００」なる４ビットの単位符号データＵが作成されることになるので、元の数値データ列に連続した０が含まれている場合、必ずしも効率的な符号化が行われているとは言い難い。そこで、連続した０が多く含まれる可能性のある画像データなどでは、この連続した０をゼロのランレングスとして把握し、ランレングス値Ｒによって表す手法が採られる。たとえば、図２１に示す例の場合、データ番号４〜９の部分については、ゼロのランレングス値Ｒ＝６によって表現し、このランレングス値Ｒ＝６の情報を、データ番号１０についての単位符号データに盛り込む手法を採る。
【０２２８】
図２１に示す例では、データ番号１０の数値「１３」について、その実データ「１１０１」の先頭に、当該実データのビット長「４」に対応する識別コード「１００１」（図９(b) のテーブル参照）を付加することにより、「１００１１１０１」なる単位符号コードＵ１０が作成されることになる。この場合、識別コード「１００１」は、実データのビット長「４」を示す機能しか有していないが、識別コードにゼロのランレングス値Ｒ＝６の情報をもたせることができれば、データ番号４〜９の部分についての単位符号データＵ４〜Ｕ９を省略することができ、データ量を大幅に削減することができる。
【０２２９】
そのためには、図２２の下段に示すような符号化テーブルを用いるようにすればよい。この符号化テーブルは、個々のビット長ｂと個々のランレングス値Ｒとの組み合わせに対応する固有の識別コードを示すテーブルであり、ここでは、二次元符号化テーブルと呼ぶことにする。また、これと対比する上で、これまでの実施形態で用いた符号化テーブル（個々のビット長ｂに対応する固有の識別コードを示すテーブル）を一次元符号化テーブルと呼ぶ。
【０２３０】
この二次元符号化テーブルは、横方向にビット長ｂ＝０〜８、縦方向にランレングス値Ｒ＝０〜８がとられており、両者の任意の組み合わせに対して、所定の識別コードが定義されている。たとえば、「ビット長ｂ＝４」と「ランレングス値Ｒ＝６］との組み合わせに対しては、「Ｃ６４」なる識別コードが定義されている。もっとも、図示する各識別コードＣ００〜Ｃ８８は、実際の識別コードではなく、説明の便宜上、簡単な略記号に置き換えて示したものである。実際には、各識別コードは、これまでの一次元符号化テーブルで定義されていた識別コードと同様に、デジタルビット列から構成されている。
【０２３１】
しかも、この二次元符号化テーブルについても、これまで述べた一次元符号化テーブルと同様に、「条件１：このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない。」かつ「条件２：当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して『ａ＋ｂ＝ｋ×Ｎ』（但し、ｋは任意の整数）となる」という２つの条件を満足している必要がある。
【０２３２】
更に、図示の例の場合、ビット長ｂ＝０〜８およびランレングス値Ｒ＝０〜８の範囲をカバーするテーブルにするために、合計９９通りもの識別コードが必要になり（実際には、後述するように、識別コードＣ１０，Ｃ２０，Ｃ３０，... ，Ｃ７０は定義する必要がない）、これらの識別コードのすべてについて、上記２つの条件が満足されていなければならない。したがって、実際には、各識別コードＣ００〜Ｃ８８は、かなりビット長の長いコードになる（§１１で実例を示す）。ただ、ここでは、説明の便宜上、Ｃ００〜Ｃ８８という略記号を用いて、これらの識別コードを示すことにする。
【０２３３】
図２２の上段の図は、この二次元符号化テーブルを利用する実施形態における単位符号データＵの基本構造を示す図である。当該基本構造は、基本的には、これまで述べてきた一次元符号化テーブルを利用する実施形態における単位符号データの構造と同じであり、識別コードＣと実データＤとによって構成されている。そして、識別コードＣのビット長をａとし、実データＤのビット長をｂとすれば、「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）という条件を満足する。ただ、識別コードＣが、二次元符号化テーブルから選択されたコードとなっており、実データＤのビット長ｂを示すだけでなく、ランレングス値Ｒを示すコードになっている。このランレングス値Ｒは、実データＤに先行して配置される数値０の数を示している。
【０２３４】
図２３は、図２０に示す数値データ列に対して、図２２に示す二次元符号化テーブルを用いた符号化方法を実施するプロセスを示す図である。図２３の上段に示す表は、図２１の上段に示す表とほぼ同じであるが、識別コードＣの欄に示された個々の識別コードが、図２２に示す二次元符号化テーブルに掲載されている識別コードになっている。また、Ｕのビット長の欄の代わりに、カウント値Ｊなる欄を設けている。ここで、カウント値Ｊは、ゼロのランレングス値を計数するための変数であり、初期値は０である。
【０２３５】
この図２３の上段に示す表において、データ番号１の行には、数値データ「２８」（８ビット固定長による２進表記は「０００１１１００」）」について、実データ「１１１００」と、この実データのビット長「５」に対応する識別コード「Ｃ０５」と、カウント値「Ｊ＝０」が示されている。カウント値Ｊは、数値データＤが０であった場合には、＋１だけカウントアップされ（但し、最大値Ｒmaxに達していた場合には、カウントアップされない）、数値データＤが０でなかった場合には、識別コードＣを選択した後に０にリセットされる。データ番号１の数値データは「２８」であるため、識別コード「Ｃ０５」の選択後に、Ｊ＝０にリセットされる。識別コード「Ｃ０５」は、図２２に示す二次元符号化テーブルにおいて、「ビット長ｂ＝５」と「ランレングス値０」との組み合わせに対応する識別コードである。ここで、「ビット長ｂ＝５」は、実データ「１１１００」のビット長を示すものであり、「ランレングス値０」は、その時点のカウント値Ｊを示すものである。
【０２３６】
次のデータ番号２の行には、数値データ「２５１」（８ビット固定長による２進表記は「１１１１１０１１」）」について、実データ「１１１１１０１１」と、この実データのビット長「８」に対応する識別コード「Ｃ０８」と、カウント値「Ｊ＝０」が示されている。データ番号２の数値データは「２５１」であるため、識別コード「Ｃ０８」の選択後に、Ｊ＝０にリセットされる。識別コード「Ｃ０８」は、図２２に示す二次元符号化テーブルにおいて、「ビット長ｂ＝８」と「ランレングス値０」との組み合わせに対応する識別コードである。ここで、「ビット長ｂ＝８」は、実データ「１１１１１０１１」のビット長を示すものであり、「ランレングス値０」は、その時点のカウント値Ｊを示すものである。
【０２３７】
続くデータ番号３の行には、数値データ「１」（８ビット固定長による２進表記は「０００００００１」）」について、実データ「１」と、この実データのビット長「１」に対応する識別コード「Ｃ０１」と、カウント値「Ｊ＝０」が示されている。データ番号３の数値データは「１」であるため、識別コード「Ｃ０１」の選択後に、Ｊ＝０にリセットされる。識別コード「Ｃ０１」は、図２２に示す二次元符号化テーブルにおいて、「ビット長ｂ＝１」と「ランレングス値０」との組み合わせに対応する識別コードである。ここで、「ビット長ｂ＝１」は、実データ「１」のビット長を示すものであり、「ランレングス値０」は、その時点のカウント値Ｊを示すものである。
【０２３８】
一方、データ番号４〜９の行には、識別コードＣおよび実データＤの記載はなく、斜線が引かれている。これは、数値データ「０」については、基本的に、単位符号データＵが作成されないためである。このように、数値データが０であった場合には、カウント値Ｊのカウントアップのみが行われる（Ｊが最大値Ｒmax に達していた場合を除く）。こうして、データ番号４〜９の行では、カウント値Ｊの欄のみが１〜６へと順次更新されている。
【０２３９】
続くデータ番号１０の行には、数値データ「１３」（８ビット固定長による２進表記は「００００１１０１」）」について、実データ「１１０１」と、この実データのビット長「４」に対応する識別コード「Ｃ６４」と、カウント値「Ｊ＝０」が示されている。データ番号１０の数値データは「１３」であるため、識別コード「Ｃ６４」の選択後に、Ｊ＝０にリセットされる。識別コード「Ｃ６４」は、図２２に示す二次元符号化テーブルにおいて、「ビット長ｂ＝４」と「ランレングス値６」との組み合わせに対応する識別コードである。ここで、「ビット長ｂ＝４」は、実データ「１１０１」のビット長を示すものであり、「ランレングス値６」は、その時点（リセット前）のカウント値Ｊを示すものである。
【０２４０】
次のデータ番号１１の行には、数値データ「３」（８ビット固定長による２進表記は「００００００１１」）」について、実データ「１１」と、この実データのビット長「２」に対応する識別コード「Ｃ０２」と、カウント値「Ｊ＝０」が示されている。データ番号１１の数値データは「３」であるため、識別コード「Ｃ０２」の選択後に、Ｊ＝０にリセットされる。識別コード「Ｃ０２」は、図２２に示す二次元符号化テーブルにおいて、「ビット長ｂ＝２」と「ランレングス値０」との組み合わせに対応する識別コードである。ここで、「ビット長ｂ＝２」は、実データ「１１」のビット長を示すものであり、「ランレングス値０」は、その時点のカウント値Ｊを示すものである。
【０２４１】
このようなプロセスに基づいて作成された符号化データ列が、図２３の下段に示されている。図示のとおり、データ番号４〜９の数値０についての単位符号データＵ４〜Ｕ９は作成されないため、符号化データ列は、単位符号データＵ１，Ｕ２，Ｕ３，Ｕ１０，Ｕ１１，... によって構成されている。ここで、単位符号データＵ１，Ｕ２，Ｕ３は、それぞれ元の数値データ２８，２５１，１に対応し、単位符号データＵ１０は、元の数値データ０，０，０，０，０，０，１３に対応し、単位符号データＵ１１は、元の数値データ３に対応することになる。結局、単位符号データＵ１０は、データ番号１０の数値「１３」のみならず、それに先行する６個の０を符号化したデータということができる。すなわち、単位符号データＵ１０の実データ「１１０１」の部分が数値「１３」を示し、識別コード「Ｃ６４」の部分が６個の０を示していることになる。
【０２４２】
このように、多数の０が連続して現れる可能性が高い数値データ列については、二次元符号化テーブルを利用した符号化を行えば、１つの単位符号データによって、多数の０を表現することができるため、データ容量を大幅に削減する効果が得られる。しかも、二次元符号化テーブルとして、上述した２つの条件を満足するテーブルを用いるようにすれば、これまで述べてきた一次元符号化テーブルを用いる実施形態と同様に、復号化を行う際に並列処理が可能になるという本発明に特有のメリットも得られる。
【０２４３】
ところで、以上述べた実施形態の場合、０を示す数値データの情報は、基本的に、後続する０でない数値データについて作成された単位符号データの識別コードにランレングス値として盛り込まれることになる。したがって、基本的には、０を示す数値データについて実データを作成する必要はなく、実データのビット長ｂの最小値は１になる。そうすると、図２２に示す二次元符号化テーブルのビット長「ｂ＝０」の欄は不要になるはずである。ただ、実用上は、例外的な処理が必要になる。以下、この点について説明しよう。
【０２４４】
第１の例外処理は、予め設定されたランレングス値の最大値Ｒmax を越えて、０を示す数値データが連続して出現した場合である。たとえば、図２２に示す二次元符号化テーブルの場合、ランレングス値Ｒの最大値Ｒmax ＝８に設定しているため、数値０が９以上連続するようなランレングスを取り扱うことができない。もちろん、最大値Ｒmax を非常に大きな値に設定できれば問題は解決するが、最大値Ｒmax を大きくすればするほど、必要な識別コードの数も増え、個々の識別コードのビット長も増大することになり好ましくない。したがって、実用上、最大値Ｒmaxは、ある程度の値に抑制せざるを得ない。
【０２４５】
そこで、最大値Ｒmax を越えて、０を示す数値データが連続して出現した場合には、次のような例外処理を行うことにする。たとえば、Ｒmax ＝８の場合を考えよう。この場合、連続して８個の０が出現した後に、９個目に０でない数値Ｘがきたときには、これまで述べたとおりの処理が可能である。すなわち、８個目の０がきたときに、カウント値Ｊ＝８となり、９個目の数値Ｘについての単位符号データを作成する際に、識別コードにランレングス値Ｒ＝８という情報を盛り込めばよい。ところが、９個目も０であった場合には、これ以上カウント値Ｊを増やすことはできないので、この９個目の０については、例外的に単位符号データを作成するのである。この場合、実データは、ビット長が０である仮想のビット列になり、作成される単位符号データは、実質的に、識別コードのみから構成されるデータになる。
【０２４６】
このような例外処理を行うためには、図２２に示す二次元符号化テーブルにおいて、「ビット長ｂ＝０」と「ランレングス値８」との組み合わせに対応する識別コード「Ｃ８０」を用意しておく必要がある。このような例外処理に用いる識別コード「Ｃ８０」は、一般的に「ＺＲＬ（Zero Run Length）」と呼ばれている。
【０２４７】
第２の例外処理は、必ずしも必要な処理ではないが、入力した数値データ列について、末尾までに後続する数値データがすべて０であるという「ゼロ永続状態」が確認された場合に、この「ゼロ永続状態」を示す特別な「終端コード」を識別コードとして利用する処理である。このような「終端コード」は、一般的に「ＥＯＢ（End Of Block）」と呼ばれており、便宜的に、二次元符号化テーブルにおいて、「ビット長ｂ＝０」と「ランレングス値０」との組み合わせに対応する識別コードとして定義される。したがって、図２２に示す二次元符号化テーブルにおける識別コード「Ｃ００」は、この「終端コードＥＯＢ」として利用することができる。
【０２４８】
前述したとおり、図２２に示す二次元符号化テーブルにおいて、「ビット長ｂ＝０」の欄における「Ｃ００」および「Ｃ８０」以外の識別コードＣ１０，Ｃ２０，Ｃ３０，... ，Ｃ７０は、実際には定義する必要はない。
【０２４９】
＜＜＜  §１０．二次元符号化テーブルを利用する場合の変更点  ＞＞＞
さて、§９では、二次元符号化テーブルを利用する基本原理を述べたが、ここでは、この二次元符号化テーブルを利用する場合に、これまで述べてきた実施形態に対して施す必要がある変更点を述べる。
【０２５０】
＜§５で述べた符号化方法についての変更点＞
二次元符号化テーブルを利用した場合であっても、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する符号化方法である点には何ら変わりはない。そして、特定の数値データを可変長のビット列を用いて表現した実データを生成し、この実データの先頭に、少なくとも当該実データのビット長を示す情報をもった識別コードを付加することにより、少なくとも前記特定の数値データ自身を示す情報をもった単位符号データを生成し、生成された複数の単位符号データを順番に並べて符号化データ列として出力する処理が行われる点も同じである。ただ、識別コードには、実データのビット長を示す情報だけでなく、先行して配置される数値０のランレングス値を示す情報も含まれることになる。このため、生成される単位符号データには、実データとして特定の数値データ自身を示す情報が含まれるだけでなく、先行して配置される数値０の情報も含まれることになる。
【０２５１】
最も大きな相違点は、当然ながら、図９(b) に示すような一次元符号化テーブルの代わりに、図２２に示すような二次元符号化テーブルを用いる点である。この二次元符号化テーブルは、個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示すテーブルになる。もちろん、一次元符号化テーブルも、二次元符号化テーブルも、少なくとも「所定範囲内の複数通りのビット長と、当該ビット長に対応する識別コードとの対応関係」を示す符号化テーブルである点では共通する。また、これらのテーブルが、「条件１：当該テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」と「条件２：当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して『ａ＋ｂ＝ｋ×Ｎ』（但し、ｋは任意の整数）である。」という２つの条件を満たすテーブルであるという点も共通する。
【０２５２】
図２４は、この二次元符号化テーブルを用いた符号化方法の基本手順を示す流れ図である。この図２４に示す流れ図の各段階は、図１４に示す流れ図の各段階とほぼ同じである。変更点は、ステップＳ１２のテーブル入力段階で、二次元符号化テーブルが入力される点と、ステップＳ１３のデータ抽出段階の後に、ステップＳ１３Ａ，ステップＳ１３Ｂ，ステップＳ１３Ｃが加えられた点と、ステップＳ１５において、二次元符号化テーブルを参照して識別コードを選択し、選択後にカウント値Ｊ＝０にリセットする点だけである。以下、これら変更点を説明する。
【０２５３】
まず、ステップＳ１２では、予め定められた所定の最大ランレングス値をＲmaxとしたときに、実データを表現するのに十分な所定範囲内の複数通りのビット長と、Ｒmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示す二次元符号化テーブルが入力される。もちろん、このテーブルは、上述した２つの条件を満足するテーブルになっている。
【０２５４】
そして、この時点において、カウント値Ｊは初期値０になっているものとする。次に、ステップＳ１３のデータ抽出段階で数値データの抽出が行われたら、ステップＳ１３Ａにおいて、抽出された数値データが０を示すデータであるか否かが判定される。ここで、抽出した数値データが０を示すデータであった場合は、ステップＳ１３Ｂへと進み、これまでのカウント値Ｊが最大値Ｒmaxに達しているか否かが判定される。カウント値が最大値Ｒmaxに達していない場合には、ステップＳ１３Ｃへと進み、０を示す数値データが連続して抽出された回数をランレングス値Ｒとしてカウントするランレングス値カウント段階が実行される。具体的には、このステップＳ１３Ｃにおいて、カウント値Ｊを１だけ増加させる処理が行われ、再び、ステップＳ１３のデータ抽出段階が実行される。結局、最大値Ｒmaxに達しない限り、数値０が抽出されるたびに、ステップＳ１３Ｃで０の抽出回数が計数されることになる。
【０２５５】
一方、抽出した数値データが０を示すデータではなかった場合、ステップＳ１３ＡからステップＳ１４へと進み、実データの生成が行われる。この実データの生成処理は、§４で述べたとおりである。たとえば、符号付きの数値データを取り扱う場合、抽出した数値データが正の値を示すデータである場合には、当該数値データを示す実データとして先頭に０を含まない可変長のビット列を生成し、抽出した数値データが負の値を示すデータである場合には、当該数値データを示す実データとして先頭に１を含まない可変長のビット列を生成する。
【０２５６】
なお、抽出した数値データが０を示すデータであり、ステップＳ１３Ｂにおいて、カウント値Ｊが最大値Ｒmaxに達していたと判断された場合にも、前述した例外処理として、ステップＳ１４の実データ生成段階が行われる。この場合、数値データは０であるから、ビット長が０である仮想のビット列が実データとして生成されることになる（実際には、ビット列の生成はない）。
【０２５７】
さて、ステップＳ１２では、二次元符号化テーブルが入力されているので、ステップＳ１５の識別コード選択段階では、この二次元符号化テーブルを参照して、識別コードの選択が行われる。具体的には、ステップＳ１４で生成された実データのビット長ｂと、当該実データが生成された時のランレングス値Ｒ（カウント値Ｊ）と、の組み合わせに対応する識別コードを選択することになる。そして、この識別コードの選択の後に、カウント値Ｊ＝０にリセットする処理が行われる。要するに、識別コードが選択され、単位符号データが生成されることになるたびに、カウント値Ｊは０にリセットされる。
【０２５８】
なお、ステップＳ１３Ｂにおいて、カウント値Ｊが最大値Ｒmaxに達していたと判断され、ステップＳ１４で実データが生成された場合、当該実データのビット長は０であり、その時点でのカウンタ値Ｊ＝Ｒmaxであるから、ステップＳ１５の識別コード選択段階では、§９で説明したとおり、例外処理用の特別な識別コード「ＺＲＬ」（図２２に示す識別コード「Ｃ８０」）が選択されることになる。
【０２５９】
最後に、ステップＳ１７において、全データについての処理が完了したと判断されるまで、ステップＳ１３へと戻る処理が行われる。したがって、ステップＳ１３のデータ抽出段階が、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行されることになり、更に、ステップＳ１３Ｃのランレングス値カウント段階、ステップＳ１４の実データ生成段階、ステップＳ１５の識別コード選択段階およびステップＳ１６の単位符号データ生成段階が、必要に応じて繰り返し実行される。
【０２６０】
なお、§９で説明したとおり、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて０であるというゼロ永続状態」であった場合に、ゼロ永続状態を示す「終端コードＥＯＢ」を例外的な識別コードとして用いる方法を採る場合には、ステップＳ１３のデータ抽出段階で、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて０であるというゼロ永続状態」か否かを調べる調査処理を実行し、当該調査処理によりゼロ永続状態であることが確認された場合には、そのままステップＳ１４の実データ生成段階へと進み、ビット長が０である仮想のビット列を実データとして生成し、続くステップＳ１５の識別コード選択段階では、ゼロ永続状態を示す「終端コードＥＯＢ」を例外処理用の識別コードとして選択すればよい。
【０２６１】
＜§６で述べた復号化方法についての変更点＞
二次元符号化テーブルを利用した場合であっても、「少なくとも所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ」を、複数組並べることにより構成された符号化データ列について、少なくとも個々の実データに対応する数値データを復元する復号化方法、である点には何ら変わりはない。ただ、数値０をランレングス値として表現した符号化データ列を対象とした復号化が行われる点が若干異なることになる。
【０２６２】
したがって、二次元符号化テーブルを利用した復号化方法は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、０を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列について、０を示す数値データおよび個々の実データを並べてなる元のデータ列を復元する方法と言うことができる。
【０２６３】
この復号化方法の手順は、基本的には、§６で述べた図１７の流れ図に示された手順と同じである。ただ、ステップＳ２２のテーブル入力段階では、図９(b) に示すような一次元符号化テーブルの代わりに、図２２に示すような二次元符号化テーブルが入力される。
【０２６４】
また、ステップＳ２４の復号処理段階も若干異なる。すなわち、Ｍ台の復号処理ユニットによる並列処理により、二次元符号化テーブルを参照しながら、それぞれ分配された部分データについて、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べることにより、元のデータ列を復元する復号処理が行われることになる。そして、ステップＳ２５のデータ編成段階では、このＭ台の復号処理ユニットによる復号処理の結果を取捨選択して、０を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成する処理が行われる。
【０２６５】
なお、ステップＳ２４の復号処理段階では、例外処理用の特別な識別コード「ＺＲＬ」や「終端コードＥＯＢ」が認識された場合には、当該識別コードに応じた例外処理を行う必要がある。すなわち、識別コード「ＺＲＬ」が認識された場合には、二次元符号化テーブルで定義されているランレングスの最大値をＲmax としたときに、「Ｒmax ＋１個分」の数値０を並べる処理を行う必要がある。また、「終端コードＥＯＢ」が認識された場合には、予め定められた所定のデータ長に達するまで、数値０を並べる処理を行う必要がある。
【０２６６】
＜§７で述べた符号化装置についての変更点＞
§７では、図１８を参照しながら、本発明に係る符号化装置の基本構成を述べた。二次元符号化テーブルを利用する符号化装置の基本構成も、図１８のブロック図に示す構成とほぼ同様である。ただ、テーブル格納部１２０には、当然ながら、個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルが格納される。この二次元符号化テーブルは、予め定められた所定の最大ランレングス値をＲmaxとしたときに、実データを表現するのに十分な所定範囲内の複数通りのビット長と、Ｒmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示すテーブルである。
【０２６７】
また、実データ生成部１４０で行われる処理も若干変わってくる。たとえば、符号付きの数値データを取り扱う場合であれば、抽出した数値データが０を示すデータであり、かつ、これまでのカウント値が最大値Ｒmaxに達していない場合には、０を示す数値データが連続して抽出された回数をランレングス値としてカウントする処理を行い、抽出した数値データが正の値を示すデータである場合には、当該数値データを示す実データとして先頭に０を含まない可変長のビット列を生成する処理を行い、抽出した数値データが負の値を示すデータである場合には、当該数値データを示す実データとして先頭に１を含まない可変長のビット列を生成する処理を行い、抽出した数値データが０を示すデータであり、かつ、カウント値が最大値Ｒmaxに達していた場合には、ビット長が０である仮想のビット列を実データとして生成する処理を行えばよい。
【０２６８】
一方、識別コード選択部１５０は、テーブル格納部１２０に格納されている二次元符号化テーブルを参照して、生成された実データのビット長と、当該実データが生成された時のランレングス値と、の組み合わせに対応する識別コードを選択し、選択後にカウント値を０にリセットする処理を行うようにする。このとき、「ビット長ｂ＝０」と「ランレングス値Ｒ＝Ｒmax」との組み合わせについては、上述した例外処理用の特別な識別コード「ＺＲＬ」を選択するようにする。
【０２６９】
なお、前述した「終端コードＥＯＢ」を用いる場合には、データ抽出部１３０が、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて０であるというゼロ永続状態」か否かを調べる調査処理を実行するようにし、実データ生成部１４０が、この調査処理によりゼロ永続状態であることが確認された場合に、ビット長が０である仮想のビット列を実データとして生成するようにし、識別コード選択部１５０が、この調査処理によりゼロ永続状態であることが確認された場合に、ゼロ永続状態を示す「終端コードＥＯＢ」を識別コードとして選択するようにすればよい。
【０２７０】
＜§８で述べた復号化装置についての変更点＞
§８では、図１９を参照しながら、本発明に係る復号化装置の基本構成を述べた。二次元符号化テーブルを利用する復号化装置の基本構成も、図１９のブロック図に示す構成とほぼ同様である。ただ、テーブル格納部２２０には、当然ながら、個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルが格納される。
【０２７１】
そして、この復号化装置は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、０を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に前記実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された単位符号データ（最大ビット長Ｕmax）」を、複数組並べることにより構成された符号化データ列について、０を示す数値データおよび個々の実データを並べてなる元のデータ列を復元する機能をもった装置ということになる。
【０２７２】
また、この装置におけるＭ台の復号処理ユニット２４０（１）〜２４０（Ｍ）は、テーブル格納部２２０に格納されている二次元符号化テーブルを参照しながら、それぞれ分配された部分データについて、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べることにより、元のデータ列を復元する復号処理を行うことになる。そして、データ編成部２５０は、このＭ台の復号処理ユニット２４０（１）〜２４０（Ｍ）による復号処理の結果を取捨選択して、０を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成する。
【０２７３】
なお、復号処理ユニット２４０（１）〜２４０（Ｍ）には、例外処理用の特別な識別コード「ＺＲＬ」や「終端コードＥＯＢ」が認識された場合には、当該識別コードに応じた例外処理を行う機能をもたせておく。すなわち、識別コード「ＺＲＬ」が認識された場合には、二次元符号化テーブルで定義されているランレングスの最大値をＲmax としたときに、「Ｒmax ＋１個分」の数値０を並べる処理を行うようにする。また、「終端コードＥＯＢ」が認識された場合には、これをデータ編成部２５０に報告するようにし、データ編成部２５０では、予め定められた所定のデータ長（たとえば、後述するＪＰＥＧ画像データのＡＣ成分の場合であれば、合計６３個の数値データ）に達するまで、数値０を並べる処理を行い、当該符号化データ列Ｓについての復号化の処理を打ち切るようにする。
【０２７４】
＜符号化データファイルについての変更点＞
図１５には、本発明に係る符号化方法によって作成される符号化データファイルＦの構造例を示したが、二次元符号化テーブルを利用した符号化を行った場合、このデータファイルＦの内容も若干異なることになる。すなわち、データファイルＦ内には、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、０を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に前記実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ（最大ビット長Ｕmax）」を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルＴと、が収容されることになる。
【０２７５】
ここで、二次元符号化テーブルＴは、数値データ列を可変長のビット列を用いて符号化する符号化方法に用いるテーブルであって、所定範囲内の複数通りのビット長と所定範囲内の複数通りのランレングス値とについて、個々のビット長と個々のランレングス値との各組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係が示されており、このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルということになる。
【０２７６】
一方、図１６には、本発明に係る符号化方法によって作成される符号化データファイルＦの別な構造例を示したが、二次元符号化テーブルを利用した符号化を行った場合、このデータファイルＦの内容も若干異なることになる。すなわち、データファイルＦ内には、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、０を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に前記実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ（最大ビット長Ｕmax）」を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを特定するテーブル特定情報Ｈと、が収容されることになる。
【０２７７】
＜ゼロ以外のランレングスの取り扱い＞
これまで述べた例は、いずれも数値データ列に含まれる連続した０をランレングスとして表現する例であった。一般に、画像データには、連続した０が含まれることが多く、特に、後述するＪＰＥＧ形式の画像データの場合、連続した多数の０が含まれる。ただ、本発明に係る二次元符号化テーブルを利用した符号化方法は、必ずしも数値０をランレングスとして表現する方法に限定されるものではなく、任意の数値Ｘをランレングスとして表現する場合にも適用可能である。
【０２７８】
たとえば、符号化の対象となる数値データ列に、特定の数値Ｘの連続部分が多く含まれている場合、数値０の代わりに、当該特定の数値Ｘをランレングスとして表現した符号化を行うと効率的である。この場合、数値０については、通常の表現（ランレングスではなく、実データとしての表現）を行い、数値Ｘについては、連続して出現する回数をカウントして、ランレングス値として符号化を行うようにすればよい。
【０２７９】
また、§９で述べた「０をランレングスとして表現する方法」をそのまま利用して、実質的に、任意の数値Ｘをランレングスとして表現することも可能である。具体的には、符号化の対象となる一群の数値データすべてについて、予めＸを減算する処理を施した後に、§９で述べた方法で符号化を行えばよい。また、復号化を行う際には、§９で述べてきた方法で復号化を行った後に、Ｘを加算する処理を行えばよい。
【０２８０】
たとえば、数値「７」が連続して続くことが多いデータを符号化する場合、まず、全データからそれぞれ「７」を減算する処理を行う。この処理により、数値「７」は数値「０」に変換されるので、数値「７」の連続部分は数値「０」の連続部分に変換されることになる。したがって、§９で述べた方法で符号化を行えば、数値「０」の連続部分（元は数値「７」の連続部分）は、ランレングスによって表現される。一方、復号化を行う際には、§９で述べてきた方法で得られた復号化データに対して、それぞれ「７」を加算する処理が行われるので、元通りの正しい数値の復元が可能になる。
【０２８１】
もちろん、符号化の際に、予めＸを加算する処理を行い、復号化の際に、Ｘを減算する処理を行うようにしてもかまわない。なお、減算や加算を行うと、ビット数が増えることになるので（たとえば、−１２７〜＋１２７の範囲内の数値であれば、８ビットで表現できるが（１の補数表現）、「７」を減算すると、−１３４〜＋１２０の範囲内の数値となるため、９ビット必要になる）、これを避けるには、元の範囲の下限からはみ出した数値をローテーションして上限へまわし、元の範囲の上限からはみ出した数値をローテーションして下限へまわす処理を行えばよい（たとえば、上例の場合、−１３４は＋１２１に置き換えられ、−１３３は＋１２２に置き換えられ、... 、−１２８は＋１２７に置き換えられ、数値範囲は元どおり−１２７〜＋１２７になる）。
【０２８２】
＜＜＜  §１１．ＪＰＥＧ画像への適用  ＞＞＞
ここでは、本発明に係る符号化／復号化方法をＪＰＥＧ画像へ適用した実施形態を説明する。ＪＰＥＧ方式は、静止画像データを圧縮する方式のひとつとして、コンピュータやデジタルカメラで広く利用されており、この方式で圧縮された画像は、一般にＪＰＥＧ画像と呼ばれている。
【０２８３】
図２５は、一般的なＪＰＥＧ画像用の圧縮・伸張処理装置の構成を示すブロック図である。ＪＰＥＧ方式の圧縮を行うには、まず、１枚の画像を８×８画素という固定サイズのブロックに分割し、この８×８画素ブロックの単位で処理を行うことになる。
【０２８４】
ＪＰＥＧ画像用の圧縮処理装置３００は、図示のとおり、ＤＣＴ手段３１０、量子化手段３２０、符号化手段３３０によって構成されている。ＤＣＴ手段３１０は、８×８画素ブロックのデータＸに対して、離散コサイン変換（ＤＣＴ: Discrete Cosine Transform）を用いて、空間領域から周波数領域へ変換する処理を行う。続いて、量子化手段３２０によって情報量の削減を行い、更に、符号化手段３３０によってデータ圧縮のための符号化を行うことにより、圧縮データＹを得る。
【０２８５】
一方、ＪＰＥＧ画像用の伸張処理装置４００は、図示のとおり、復号化手段４１０、逆量子化手段４２０、逆ＤＣＴ手段４３０によって構成されている。これらの各手段は、圧縮処理装置３００における符号化手段３３０、量子化手段３２０、ＤＣＴ手段３１０とは逆の処理を行う機能を有している。したがって、圧縮データＹに対して、圧縮時とは逆のプロセスが実行され、元の８×８画素ブロックのデータＸが得られる。
【０２８６】
このようなＪＰＥＧ画像の圧縮／伸張処理を行う装置における符号化手段３３０および復号化手段４１０の部分に本発明を適用することが可能である。以下、具体的な適用例を簡単に説明する。
【０２８７】
図２５に示す量子化手段３２０の量子化処理が完了すると、量子化後の８×８画素ブロックを構成する全６４画素のうち左上の１画素はＤＣ成分の画素値をもち、残りの６３画素はＡＣ成分の画素値をもつことになる。図２６は、このような量子化後の８×８画素ブロックを構成する画素配列を示す平面図である。この画素配列を構成する個々の画素のもつ値は、ＤＣＴ処理後の画素値であり、もとの画像の画素値ではない。したがって、正確に言えば、「画素値」ではなく「ＤＣＴ係数」と呼ぶべき値である。ただ、以下の説明では、便宜上、これらの値も「画素値」と呼ぶことにする。図に「ＤＣ」と記載した画素が、ＤＣ成分の画素値をもつ画素であり、その他の６３画素がＡＣ成分の画素値をもつ画素になる。ＡＣ成分は画素値の周波数成分を示す情報であり、ＤＣ成分は８×８画素ブロックの画素値の平均を示す情報になる。
【０２８８】
このような８×８画素ブロックを構成するデータに対して符号化を行う際には、図示のとおり、ＡＣ成分についてジグザグスキャン処理が行われる。すなわち、ＡＣ成分の画素値をもつ６３画素について、図に矢印で示す順番で並び替えが行われる。これは、ＤＣＴ手段３１０による離散コサイン変換を行うと、低い周波数成分ほどブロックの左上近傍に集まり、高い周波数成分ほどブロックの右下近傍に集まる性質があるためである。図示のようなジグザグスキャン処理による並べ替えを行うと、ＡＣ成分の画素値をもつ６３画素は、低周波成分から高周波成分へと順に並べ替えられる。
【０２８９】
上述の処理を、具体的な実例を挙げて示そう。図２７は、ＪＰＥＧ方式の圧縮処理の対象となる量子化後の画素ブロックの画素値分布の一例を示す平面図である。ここで、左上画素の画素値「２０」がＤＣ成分を示す値であり、残りの６３画素の各画素値がＡＣ成分を示す値になる。図２８は、図２７に示す画素ブロックから抽出したＤＣ成分およびＡＣ成分の数値データを示す図である。ＤＣ成分の数値データは、図２８(a) に示すように「２０」のみであり、符号ビットを含めて１２ビットのデータで表現されることになっている。一方、ＡＣ成分の数値データは、ジグザグスキャン処理による並べ替えの結果、図２８(b) に示すように、６３個の数値データ列になり、それぞれ符号ビットを含めて１１ビットのデータで表現されることになっている。
【０２９０】
ＤＣ成分の数値データおよびＡＣ成分の数値データは、いずれも符号をもった数値となる（たとえば、図示の例では、数値「−２」が負のデータになっている）。図では、説明の便宜上、各数値データを１０進表記で示しているが、実際には、ＤＣ成分の数値データは、符号ビットを除くと１１ビット固定長のビット列として与えられ、ＡＣ成分の数値データは、符号ビットを除くと１０ビット固定長のビット列として与えられる。
【０２９１】
ここで、図２８(a) に示すＤＣ成分の数値データは、１ブロックについて１つのみ抽出されるデータであるため、可変長ビット列への符号化を行う際には、一次元符号化テーブルを用いれば十分である。これに対して、図２８(b) に示すＡＣ成分の数値データは、１ブロックについて６３個の連続したデータとして得られ、しかも０が連続して出現する可能性が高い。特に高周波成分を示す後半には０が続く可能性が高い。したがって、このＡＣ成分の数値データについて可変長ビット列への符号化を行う際には、二次元符号化テーブルを用いるのが好ましい。
【０２９２】
したがって、図２５に示すＪＰＥＧ画像用圧縮処理装置３００の符号化手段３３０としては、ＤＣ成分の数値データの符号化を行う部分については、これまで述べてきた一次元符号化テーブルを用いる符号化装置を採用し、ＡＣ成分の数値データの符号化を行う部分については、これまで述べてきた二次元符号化テーブルを用いる符号化装置を採用すればよい。同様に、ＪＰＥＧ画像用伸張処理装置４００の復号化手段４１０としては、ＤＣ成分の数値データの復号化を行う部分については、これまで述べてきた一次元符号化テーブルを用いる復号化装置を採用し、ＡＣ成分の数値データの復号化を行う部分については、これまで述べてきた二次元符号化テーブルを用いる復号化装置を採用すればよい。
【０２９３】
図２９は、ＤＣ成分の数値データに対する符号化に用いるＤＣ成分用符号化テーブル（一次元符号化テーブル）の一例を示す図である。図示のとおり、ビット長ｂ＝０〜１１の範囲について、それぞれ識別コードＣが定義されている。テーブルの右側の破線欄には、参考のため、各識別コードＣ自身のビット長ａと、当該識別コードＣを用いて作成される単位符号データＵのビット長「ａ＋ｂ」とを示してある。図示のとおり、Ｕのビット長「ａ＋ｂ」は、４，８，１２，１６，２０のいずれかに該当する。これは、Ｎ＝４に設定したときに、「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足することを示している。
【０２９４】
もちろん、この符号化テーブルは、「このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という可変長符号化テーブルに必要とされる条件も満足している。
【０２９５】
図３０は、図２９に示すテーブルを利用して図２８に示すＤＣ成分を符号化した結果を示す図である。数値「２０」について、冗長ビットを削除した実データＤは「１０１００」になり、そのデータ長「５」に対応する識別コードＣは、図２９のテーブルを参照すると「０１０」になる。よって、ＤＣ成分の数値データ「２０」は、図３０に示すように、「０１０１０１００」なる８ビットの符号化データに変換されることになる。
【０２９６】
一方、図３１は、ＡＣ成分の数値データに対する符号化に用いるＡＣ成分用符号化テーブル（二次元符号化テーブル）の一例を示す図である。図示のとおり、ビット長ｂ＝０〜１０の範囲およびランレングス値Ｒ＝０〜１５の範囲の組み合わせについて、それぞれ識別コードＣが定義されている。図２２に示す二次元符号化テーブルでは、説明の便宜上、個々の識別コードを略記号Ｃ００〜Ｃ８８で示したが、この図３１に示すテーブルでは、個々の識別コードを実際のビット列で示してある。なお、ビット長ｂ＝０の欄の識別コード「００１０」は、前述した例外処理用の「終端コードＥＯＢ」であり、識別コード「０１０１」は、前述した例外処理用の「ＺＲＬ」である。
【０２９７】
もちろん、この図３１に示すテーブルも、「このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という可変長符号化テーブルに必要とされる条件を満足しており、更に、「当該着目識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して『ａ＋ｂ＝ｋ×Ｎ』（但し、ｋは任意の整数）」という条件を満たしている。具体的には、Ｎ＝４に設定されているため、単位符号データＵのビット長は、４，８，１２，１６，２０，２４といった４の倍数になる。
【０２９８】
図３２は、図３１に示すテーブルを利用して図２８に示すＡＣ成分を符号化するプロセスを示す図である。この図３２に示す表の構成は、図２３の上段に示す表の構成と同じであり、各数値データＤについて、識別コードＣおよび実データＤ（単位符号コードＵ）と、カウント値Ｊとが示されている。このカウント値Ｊは、ゼロのランレングス値を計数するための変数である。この表において、データ番号１〜６３が付された６３個の数値データＤは、それぞれ図２８(b) に示す６３個のＡＣ成分の数値データ（１０ビット固定長のビット列）である。以下、この図３２の表を上から順に見てゆこう。
【０２９９】
まず、データ番号１の行には、数値データ「５」（１０ビット固定長による２進表記は「０００００００１０１」）」について、実データ「１０１」と、この実データのビット長「３」に対応する識別コード「０１１００」と、カウント値「Ｊ＝０」が示されている。前述したとおり、カウント値Ｊは、数値データＤが０であった場合には、＋１だけカウントアップされ（但し、最大値Ｒmax ＝１５に達していた場合には、カウントアップされない）、数値データＤが０でなかった場合には、識別コードＣを選択した後に０にリセットされる。データ番号１の数値データは「５」であるため、識別コード「０１１００」の選択後に、Ｊ＝０にリセットされる。識別コード「０１１００」は、図３１に示す二次元符号化テーブルにおいて、「ビット長ｂ＝３」と「ランレングス値０」との組み合わせに対応する識別コードである。ここで、「ビット長ｂ＝３」は、実データ「１０１」のビット長を示すものであり、「ランレングス値０」は、その時点のカウント値Ｊを示すものである。
【０３００】
次のデータ番号２の行では、数値データが「０」（１０ビット固定長による２進表記は「００００００００００」）」であるため、識別コードＣの選択や実データＤの作成は行われず、単位符号データＵは作成されない。その代わりに、カウント値ＪがＪ＝１にカウントアップされる。同様に、データ番号３，４の行においても、カウント値ＪがそれぞれＪ＝２，Ｊ＝３にカウントアップされる。
【０３０１】
続くデータ番号５の行では、数値データが「３７」（１０ビット固定長による２進表記は「００００１００１０１」）」であるため、実データ「１００１０１」が作成される。この実データのビット長ｂ＝６と、その時点でのカウント値Ｊ＝３に基づいて、図３１のテーブルを参照することにより、対応する識別コード「１１１１０１１０００」が選択され、カウント値はＪ＝０にリセットされる。
【０３０２】
次のデータ番号６の行では、数値データが「０」であるため、識別コードＣの選択や実データＤの作成は行われず、単位符号データＵは作成されない。その代わりに、カウント値ＪがＪ＝１にカウントアップされる。
【０３０３】
続くデータ番号７の行では、数値データが「２３」（１０ビット固定長による２進表記は「０００００１０１１１」）」であるため、実データ「１０１１１」が作成される。この実データのビット長ｂ＝５と、その時点でのカウント値Ｊ＝１に基づいて、図３１のテーブルを参照することにより、対応する識別コード「１０１１１１１」が選択され、カウント値はＪ＝０にリセットされる。
【０３０４】
次のデータ番号８〜１３の行では、いずれも数値データが「０」であるため、識別コードＣの選択や実データＤの作成は行われず、単位符号データＵは作成されない。その代わりに、カウント値Ｊが順次カウントアップされ、最終的にＪ＝６になる。
【０３０５】
続くデータ番号１４の行では、数値データが「−２」（１０ビット固定長による２進表記は「１１１１１１１１０１」）」であるため、実データ「０１」が作成される。この実データのビット長ｂ＝２と、その時点でのカウント値Ｊ＝６に基づいて、図３１のテーブルを参照することにより、対応する識別コード「１０１１００」が選択され、カウント値はＪ＝０にリセットされる。
【０３０６】
次のデータ番号１５〜１６の行では、いずれも数値データが「０」であるため、識別コードＣの選択や実データＤの作成は行われず、単位符号データＵは作成されない。その代わりに、カウント値Ｊが順次カウントアップされ、最終的にＪ＝２になる。
【０３０７】
続くデータ番号１７の行では、数値データが「９」（１０ビット固定長による２進表記は「００００００１００１」）」であるため、実データ「１００１」が作成される。この実データのビット長ｂ＝４と、その時点でのカウント値Ｊ＝２に基づいて、図３１のテーブルを参照することにより、対応する識別コード「１１０１００００」が選択され、カウント値はＪ＝０にリセットされる。
【０３０８】
次のデータ番号１８の行では、数値データが「０」であるが、それ以降、データ番号６３まで、数値データがすべて「０」である「ゼロ永続状態」が確認される。そこで、図３１のテーブルを参照することにより、「終端コードＥＯＢ」に対応する識別コード「００１０」が選択され、処理はそこで打ち切られる。
【０３０９】
かくして、図２８(b) に示す合計６３個の固定長ビットからなるＡＣ成分の数値データは、図３３に示すような可変長ビットからなる符号化データ列に変換されることになる。ここで、図３３の１〜６行目に示す各ビット列は、図３２の表におけるそれぞれ第１，５，７，１４，１７，１８行目の単位符号データＵに対応するものであり、右端の括弧内の数字はそのデータ長を示している。実際に得られる符号化データ列は、この図３３に示すビット列をすべて連結した合計６０個のビットの列になる。もちろん、当該ビット列には何ら区切りはないが、各単位符号データのデータ長は、括弧内の数字に示すとおり、いずれも４の倍数となっており、本発明に特有の並列処理による復号化に適した形になっている。
【０３１０】
図３４は、図３３に示す符号化データ列を、本発明に係る復号化方法を用いて、７台の復号処理ユニットによる並列処理で復号化する原理を示す図である。図には、７台のユニットＱ１〜Ｑ７に、それぞれ２４ビットずつの部分データが分配された状態が示されている。各ユニットを示す符号Ｑ１〜Ｑ７の下に示した括弧書きの数値は、各ユニットに分配される部分データが、元のデータ（図３３に示す全６０ビットのデータ）の先頭から何ビット目に相当するかを示している。たとえば、ユニットＱ１には、先頭から１〜２４ビット目のデータが分配され、ユニットＱ２には、先頭から５〜２８ビット目のデータが分配されている。この例の場合、基準ビット長Ｎ＝４に設定されているため、各ユニットには、４ビットずつずらした位置の部分データが分配されることになる。
【０３１１】
図３５は、こうして部分データの分配を受けた７台のユニットＱ１〜Ｑ７によって行われる復号処理プロセスを示す図である。復号処理は、図３１に示すＡＣ成分用符号テーブルを参照することによって行われる。
【０３１２】
たとえば、ユニットＱ１では、先頭から比較対象を１ビットずつ増やしながら、テーブルを参照して合致する識別コードを探索してゆくと、「０１１００」なるビット列が、「ｂ＝３，Ｒ＝０」に対応する識別コードに合致する。そこで、後続する３ビット「１０１」の部分を実データとして認識し、数値「５」の復元に成功する。続く、「１１１１０１１０００」なるビット列は、「ｂ＝６，Ｒ＝３」に対応する識別コードに合致するので、後続する６ビット「１００１０１」の部分を実データとして認識し、数値「３７」の復元に成功する。また、ランレングス値Ｒ＝３に応じて、数値「３７」に先行して数値「０」を３回配置する処理が行われる。結局、処理結果は図の右側に示すように、［５］［０］［０］［０］［３７］，Ｐ１＝２４になる。
【０３１３】
ユニットＱ２では、「０１０１」なるビット列が、［ＺＲＬ］に対応する識別コードに合致する。この識別コードは、前述したとおり、例外処理を行うための識別コードであり、数値「０」を「Ｒmax ＋１個」だけ並べる処理を意味する。図３１に示すテーブルの場合、Ｒmax =１５であるから、結局、数値「０」を１６個並べる処理が行われる。続いて、「１１１１０１１０００」なるビット列が、「ｂ＝６，Ｒ＝３」に対応する識別コードに合致する。そこで、後続する６ビット「１００１０１」の部分を実データとして認識し、数値「３７」の復元に成功する。また、ランレングス値Ｒ＝３に応じて、数値「３７」に先行して数値「０」を３回配置する処理が行われる。その後は、正常な復号処理を行うことはできず、処理結果は図の右側に示すように、［０］×１６［０］［０］［０］［３７］［ＥＲＲ］，Ｐ２＝２０になる。
【０３１４】
ユニットＱ３では、「１１１１０１１０００」なるビット列が、「ｂ＝６，Ｒ＝３」に対応する識別コードに合致する。そこで、後続する６ビット「１００１０１」の部分を実データとして認識し、数値「３７」の復元に成功する。また、ランレングス値Ｒ＝３に応じて、数値「３７」に先行して数値「０」を３回配置する処理が行われる。ただ、その後は、正常な復号処理を行うことはできず、処理結果は図の右側に示すように、［０］［０］［０］［３７］［ＥＲＲ］，Ｐ３＝１６になる。
【０３１５】
ユニットＱ４では、「０１１００」なるビット列が、「ｂ＝３，Ｒ＝０」に対応する識別コードに合致する。そこで、後続する３ビット「０１０」の部分を実データとして認識し、数値「−５」の復元に成功する。続く「０１０１」なるビット列は、［ＺＲＬ］に対応する識別コードに合致するので、数値「０」を１６個並べる処理が行われる。次の「１０１１１１１」なるビット列は、「ｂ＝５，Ｒ＝１」に対応する識別コードに合致する。そこで、後続する５ビット「１０１１１」の部分を実データとして認識し、数値「２３」の復元に成功する。また、ランレングス値Ｒ＝１に応じて、数値「２３」に先行して数値「０」を１回配置する処理が行われる。処理結果は図の右側に示すように、［−５］［０］×１６［０］［２３］，Ｐ４＝２４になる。
【０３１６】
ユニットＱ５では、「００１０」なるビット列が、「終端コードＥＯＢ」に対応する識別コードに合致する。この識別コードは、前述したとおり、ゼロ永続状態の例外処理を行うための識別コードであり、数値データ列の末尾まで、数値「０」を配置することを示している。したがって、この「終端コードＥＯＢ」を認識した段階で、ユニットＱ５としては、処理を正常に終了する。よって、処理結果は図の右側に示すように、［ＥＯＢ］，Ｐ５＝４になる。
【０３１７】
ユニットＱ６では、「０１０１」なるビット列が、［ＺＲＬ］に対応する識別コードに合致するので、まず、数値「０」を１６個並べる処理が行われる。次の「１０１１１１１」なるビット列は、「ｂ＝５，Ｒ＝１」に対応する識別コードに合致する。そこで、後続する５ビット「１０１１１」の部分を実データとして認識し、数値「２３」の復元に成功する。また、ランレングス値Ｒ＝１に応じて、数値「２３」に先行して数値「０」を１回配置する処理が行われる。更に続く「１０１１００」なるビット列は、「ｂ＝２，Ｒ＝６」に対応する識別コードに合致するので、後続する２ビット「０１」の部分を実データとして認識し、数値「−２」の復元に成功する。また、ランレングス値Ｒ＝６に応じて、数値「−２」に先行して数値「０」を６回配置する処理が行われる。処理結果は図の右側に示すように、［０］×１６［０］［２３］［０］×６［−２］，Ｐ６＝２４になる。
【０３１８】
ユニットＱ７では、「１０１１１１１」なるビット列が、「ｂ＝５，Ｒ＝１」に対応する識別コードに合致する。そこで、後続する５ビット「１０１１１」の部分を実データとして認識し、数値「２３」の復元に成功する。また、ランレングス値Ｒ＝１に応じて、数値「２３」に先行して数値「０」を１回配置する処理が行われる。更に続く「１０１１００」なるビット列は、「ｂ＝２，Ｒ＝６」に対応する識別コードに合致するので、後続する２ビット「０１」の部分を実データとして認識し、数値「−２」の復元に成功する。また、ランレングス値Ｒ＝６に応じて、数値「−２」に先行して数値「０」を６回配置する処理が行われる。ただ、その後は、正常な復号処理を行うことはできず、処理結果は図の右側に示すように、［０］［２３］［０］×６［−２］［ＥＲＲ］，Ｐ７＝２０になる。
【０３１９】
以上が、７台のユニットＱ１〜Ｑ７の並列処理として実行される復号処理である。データ編成部は、これら各ユニットによる復号処理の結果を取捨選択して、復号化データ列を生成する。すなわち、まず、ユニットＱ１を採択ユニットとして、このユニットＱ１から報告される正常処理ビット長Ｐ１＝２４に基づいて、正常な復号処理が行われた最終ビットが第２４ビット目であることを認識し、第２５ビット目を先頭ビットとする部分データが分配された別なユニットＱ７を新たな採択ユニットと決定する。更に、この採択ユニットＱ７から報告される正常処理ビット長Ｐ７＝２０に基づいて、正常な復号処理が行われた最終ビットが第４４ビット目であることを認識し、第４５ビット目を先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットとするよう試みるが、該当するユニットはみつからず、１回目の並列処理は完了する。
【０３２０】
かくして、２台のユニットＱ１，Ｑ７が採択ユニットとして決定される。図３５の右端に「◎」を付したユニットが採択ユニットであり、「×」を付したユニットが不採択ユニットである。データ編成部は、各採択ユニットＱ１，Ｑ７で正常に復号化が行われた数値データを収集し、これらの数値データを並べることにより復号化データ列を生成する。図示の例の場合、［５］［０］［０］［０］［３７］［０］［２３］［０］［０］［０］［０］［０］［０］［−２］なる数値データ列が生成されることになる。
【０３２１】
そして、この時点で、データ編成部からデータ分配部に対して、各採択ユニットＱ１，Ｑ７から報告された正常処理ビット長Ｐ１，Ｐ７の合計値「４４」を、既復号化部を示す情報として報告する処理が行われる。これは、上述した１回目の並列処理により、図３３に示す全６０ビットからなるデータのうち、先頭から第４４ビット目までの復号化が完了したことを示している。そこで、データ分配部は、２回目の並列処理のために、第４５ビット目以降の未復号化部について、新たな分配処理を実行することになる。
【０３２２】
＜＜＜  §１２．ハフマン符号化テーブルの作成  ＞＞＞
既に図８で説明したとおり、ビット長ｂの出現頻度を考慮して作成した可変長符号化テーブルは、一般に、ハフマン符号化テーブルと呼ばれており、このハフマン符号化テーブルを用いた符号化は、ハフマン符号化と呼ばれている。ハフマン符号化テーブルでは、実データのビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられているため、ハフマン符号化により、データの圧縮効率を更に向上させることができる。このため、前述したＪＰＥＧ画像用の圧縮処理など、実用上、多くのデータ圧縮処理において、ハフマン符号化テーブルが採用されている。
【０３２３】
本発明の実施に用いる符号化テーブルは、必ずしもハフマン符号化テーブルである必要はないが、実用上は、データ圧縮効率を向上するために、ハフマン符号化テーブルを用いるのが好ましい。
【０３２４】
本発明に係るハフマン符号化方法は、固定長ビットからなる数値データ列を、少なくともビット長と識別コードとの対応関係を示すハフマン符号化テーブルを用いて、可変長ビットからなる符号化データ列に符号化するハフマン符号化方法であり、その特徴は、ハフマン符号化テーブルとして、識別コード自身のビット長をａとし、当該識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルを用いる、という点になる。
【０３２５】
また、本発明に係るハフマン復号化方法は、可変長ビットからなる符号化データ列を、演算処理装置が、少なくともビット長と識別コードとの対応関係を示すハフマン符号化テーブルを用いて、固定長ビットからなる数値データ列に復号化するハフマン復号化方法であり、その特徴は、ハフマン符号化テーブルとして、識別コード自身のビット長をａとし、当該識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足するテーブルを用いる、という点になる。
【０３２６】
既に§２で述べたとおり、上記条件は、任意の整数ｋによってある程度の自由度が確保できるため、上記条件を満足するハフマン符号化テーブルを作成することが可能になる。ハフマン符号化テーブルは、特定の数値データ列についてのビット長ｂの出現頻度を考慮して作成されたテーブルであるため、当該特定の数値データ列の符号化に特化したテーブルということができる。別言すれば、符号化の対象となる数値データ列が与えられることにより、はじめて定義できるテーブルである。したがって、本発明においてハフマン符号化テーブルを利用する場合、まず、既存の標準符号化テーブルを用意しておき、この標準符号化テーブルの内容を入れ替える処理を行うことによって、ハフマン符号化テーブルを作成するようにするのが好ましい。
【０３２７】
図３６は、本発明に係るハフマン符号化テーブルを用いる符号化装置の基本構成を示すブロック図である。この図３６に示す符号化装置は、図１８に示す符号化装置に、新たに頻度集計部１８０とテーブル修正部１９０とを付加したものである。
【０３２８】
頻度集計部１８０は、データ格納部１１０に格納されている数値データ列Ｅについて、実データのビット長ｂの出現頻度を集計する機能を有している。実データのビット長ｂは、数値データの値に基づいて一義的に定まる値であるので、実際には、個々のビット長ｂごとに投票箱を設けておき、個々の数値データの値に対応する投票箱に投票する処理を行えば、出現頻度の集計値を求めることができる。
【０３２９】
一方、テーブル修正部１９０は、テーブル格納部１２０に予め格納されていた既存の標準符号化テーブルについて、内容の入れ替えを行うことによる修正を施し、修正した符号化テーブルをテーブル格納部に格納する機能を有している。具体的には、既存の標準符号化テーブル内の、基準ビット長Ｎの整数倍の差をもつビット長ｂ相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている修正した符号化テーブルを生成する処理を行う。
【０３３０】
このテーブル修正部１９０によって、テーブル格納部１２０内に新たに格納されることになった修正された符号化テーブルは、実データのビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられているハフマン符号化テーブルとなっている。したがって、データ出力部１７０から出力される符号化データファイルＦには、このハフマン符号化テーブルを用いて符号化された符号化データ列Ｓと、当該ハフマン符号化テーブル自身もしくは当該ハフマン符号化テーブルを特定するテーブル特定情報（たとえば、当該ハフマン符号化テーブルの所在を示すＵＲＬなど）とが収容されることになる。
【０３３１】
ここでは、§１１で述べたＪＰＥＧ画像への適用例について、ハフマン符号化テーブルを作成した実例を以下に説明する。いま、ＤＣ成分用の標準符号化テーブルとして、テーブル格納部１２０内に、図２９に示すようなテーブルが予め格納されていたものとしよう。一方、データ格納部１１０内には、多数の８×８画素ブロックの集合体からなるＪＰＥＧ方式の圧縮対象となる画像データが格納されていたものとしよう。この場合、頻度集計部１８０によって、当該画像データを構成する個々の数値データに対する上述した頻度集計の処理が行われる。ここでは、たとえば、図３７の表に示すような頻度集計結果が得られたものとしよう。
【０３３２】
通常の可変長符号化テーブルの場合、この図３７に示す頻度集計結果に基づいて、標準符号化テーブルの内容をソートすれば、ハフマン符号化テーブルが得られる。具体的には、最も高い出現頻度「２２０」の得票が得られたビット長ｂ＝５に対して、図２９に示す標準符号化テーブル内の最も短い識別コード「００」を割り当てればよい。同様に、２番目に高い出現頻度「２０９」の得票が得られたビット長ｂ＝６に対しては、図２９に示す標準符号化テーブル内の２番目に短い識別コード「０１１」もしくは「０１０」を割り当てればよい。要するに、ビット長ｂを出現頻度順にソートした後、短い識別コードから順番に割り当てる作業を行えばよい。
【０３３３】
しかしながら、本発明に係る可変長符号化テーブルの場合、識別コード自身のビット長をａとし、当該識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して「ａ＋ｂ＝ｋ×Ｎ」（但し、ｋは任意の整数）なる条件を満足する、という制約が課されるため、上述したようなソート作業を行うことはできない。ただ、§２でも述べたとおり、対応するビット長ｂの差がＮ（この例では、Ｎ＝４）の整数倍となるような２つの識別コードを入れ替えても、「ａ＋ｂ＝ｋ×Ｎ」という条件は維持されたままになる。
【０３３４】
たとえば、図３７に太枠で示したビット長ｂ＝２とｂ＝６とは、差が４であるから、図３８に示すように、ｂ＝２に対応する識別コードとｂ＝６に対応する識別コードとを入れ替えたとしても、上記条件は維持される。図２９に示す標準符号化テーブルの場合、ｂ＝６に対応する識別コードは「１０１１００」という６ビットのコードであったが、図３８に示す入れ替えを行えば、ｂ＝６に対応する識別コードは「００」という２ビットのコードに修正される。すなわち、出現頻度が高いｂ＝６に対してより短い識別コードが割り当てられたことになる。
【０３３５】
このように、互いに入れ替えが可能な識別コードは、「対応するビット長ｂの差がＮの整数倍となるような２つの識別コード」に限るという限定は課されるものの、このような限定された範囲内で、ビット長ｂを出現頻度順にソートした後、短い識別コードから順番に割り当てる作業を行えばよい。具体的には、たとえば、ビット長ｂ＝０，４，８の識別コードを１グループとして、出現頻度順にソートした後、これらに対応づけられていた識別コードを、ソート順に短くなるように割り当てなおす作業を行えばよい。同様の作業を、ビット長ｂ＝１，５，９のグループ、ビット長ｂ＝２，６，１０のグループ、ビット長ｂ＝３，７，１１のグループについても行うことにより、ハフマン符号化テーブルが得られる。
【０３３６】
このように、本発明における「実データのビット長ｂの出現頻度が高いほど、より短いビット長ａをもつ識別コードが対応づけられている」という条件は、あくまでも「識別コード自身のビット長をａとし、当該識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して『ａ＋ｂ＝ｋ×Ｎ』（但し、ｋは任意の整数）となる」という条件を主条件としたときの副条件というべきものである。すなわち、当該副条件は、あくまでも上記主条件を優先した上で、付加的に満たされるべき従たる条件ということになる。このため、実際には、任意の２つの識別コードを比較すると、「対応する実データのビット長ｂの出現頻度が高いほど、より短い」という上記副条件が満足されていない場合もありうる。したがって、上述した入れ替え作業によって修正された符号化テーブルは、厳密な意味では「ハフマン符号化テーブル」とは言えないかもしれながい、ここでは便宜上、「ハフマン符号化テーブル」と呼ぶことにする。
【０３３７】
もともと「ハフマン符号」は、出現頻度の順に「ハフマン符号木」と呼ばれる二分木を作成することにより定義される符号であり、厳密な意味では、「平均符号長が最小となり、かつ、出現頻度が高いほどより短い符号」と定義される。ただ、実用上は、様々な応用分野で様々なバリエーションが用いられるようになってきており、必ずしも「平均符号長が最小」という条件を満たさない符号や、必ずしも「出現頻度が高いほどより短い」という条件を満たさない符号まで拡張して、一般に「ハフマン符号」と呼ばれるようになってきている（たとえば、ＪＰＥＧ画像を取り扱う分野では、出現頻度を全く考慮しない符号についても「ハフマン符号」と呼ぶ場合がある）。
【０３３８】
そこで、本願では、「テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず」かつ「符号化の対象となる数値データ列に含まれる実データのビット長ｂの出願頻度を考慮して、最終的に符号化されたデータの全ビット長ができるだけ短くなるような最適化処理が施された識別コード」を、「ハフマン符号」と定義することにする。上記最適化処理の最も簡単な例は、これまで例示したような「出現頻度を考慮した入れ替え作業」であるが、他の方法により最適化処理を行うことも可能である。たとえば、所定のアルゴリズムにより、上記主条件を満足する複数通りのハフマン符号化テーブルを生成し、これら複数通りのテーブルの中から、「符号化の対象となる数値データ列に含まれる実データのビット長ｂの出願頻度を考慮して、最終的に符号化されたデータの全ビット長が最短となるテーブル」を選択する処理も、上記最適化処理の一態様である。
【０３３９】
続いて、図３１に示すＡＣ成分用の二次元符号化テーブルを標準符号化テーブルとして用い、この標準符号化テーブルに対して、出現頻度を考慮した入れ替えを行い、二次元ハフマン符号化テーブルを作成した例を示す。図３９(a) ，(b) は、ＪＰＥＧ方式の圧縮対象となる画像データにおけるＡＣ成分の数値データについての出現頻度を集計した結果である。ここでは、カラー画像を、輝度成分と色差成分とに分けて取り扱った例が示されており、図３９(a) は、輝度成分を構成する画素についての集計結果であり、図３９(b) は、色差成分を構成する画素についての集計結果である。
【０３４０】
二次元符号化テーブルの場合、各識別コードは、「ビット長ｂとランレングス値Ｒとの組み合わせ」に対応づけられて決定されるので、「ビット長ｂの出現頻度」の代わりに、「ビット長ｂとランレングス値Ｒとの組み合わせの出現頻度」を考慮する必要がある。したがって、図３９に示す頻度集計結果は、ゼロのランレングス表現を用いた符号化を行う前段階として、個々のランレングス値と実データのビット長とを予め決定した上で、「特定のビット長ｂと特定のランレングス値Ｒとの組み合わせ」を投票箱とした投票を行った結果として得られたものである。
【０３４１】
図４０に示す二次元符号化テーブルは、図３１に示す標準符号化テーブルに対して、図３９(a) に示す頻度集計結果を考慮した入れ替え作業を行うことによって得られた二次元ハフマン符号化テーブルであり、図４１に示す二次元符号化テーブルは、図３１に示す標準符号化テーブルに対して、図３９(b) に示す頻度集計結果を考慮した入れ替え作業を行うことによって得られた二次元ハフマン符号化テーブルである。いずれも元になる標準符号化テーブルは同じものであるが、異なる頻度集計結果を考慮した入れ替え作業を行ったため、相互に異なるテーブルになっている。
【０３４２】
図４０のハフマン符号化テーブルは、輝度成分を構成する画素からなる数値データの符号化を行う際に用いられ、図４１のハフマン符号化テーブルは、色差成分を構成する画素からなる数値データの符号化を行う際に用いられる。いずれの図においても、二重枠で示した欄内の識別コードは、入れ替えによって、元の識別コードよりも短くなったコード（出現頻度が比較的高い結果が得られたコード）であり、太線枠で示した欄内の識別コードは、入れ替えによって、元の識別コードよりも長くなったコード（出現頻度が比較的低い結果が得られたコード）である。
【０３４３】
やはり入れ替え作業は、「対応するビット長ｂの差がＮ（この例では、Ｎ＝４）の整数倍となるような２つの識別コード」という条件を満たすコード間でのみ行われているため、図４０および図４１に示すハフマン符号化テーブルにおいても、「識別コード自身のビット長をａとし、当該識別コードに対応するビット長をｂとしたときに、所定の基準ビット長Ｎ（但し、Ｎは２以上の整数）に対して『ａ＋ｂ＝ｋ×Ｎ』（但し、ｋは任意の整数）である」という本発明に特有の条件は満たされている。
【０３４４】
実際に、図３１に示す標準符号化テーブルを、カラー画像の輝度成分と色差成分とに共通して利用した場合と、図４０に示すハフマン符号化テーブルを輝度成分に利用し、図４１に示すハフマン符号化テーブルを色差成分に利用した場合とで、ＪＰＥＧ方式による圧縮効率を比較した。その結果、もとの画像データのデータ容量を基準の１００％として、前者の場合に得られる圧縮データの容量は９．２０％、後者の場合に得られる圧縮データの容量は９．１３％という数値が得られた。これにより、ハフマン符号化テーブルの採用により、圧縮率が若干向上していることがわかる。
【０３４５】
＜＜＜  §１３．基準ビット長Ｎに関する留意事項  ＞＞＞
ここでは、基準ビット長Ｎの設定に関する留意事項を簡単に述べておく。これまで述べてきた実施形態では、いずれも基準ビット長Ｎ＝４に設定しているが、本発明を実施する上で、基準ビット長Ｎは、２以上の任意の整数に設定することができる（Ｎ＝１に設定すると、従来の一般的な符号化方法になる）。
【０３４６】
ただ、本発明を商業的に利用する場合、コストパフォーマンスを考慮して、基準ビット長Ｎを最適な値に設定するのが好ましい。図４２は、基準ビット長Ｎの設定時に考慮するパラメータを示すグラフである。図４２(a) は、基準ビット長Ｎと回路規模との関係を示すグラフである。一般に、基準ビット長Ｎを大きく設定すればするほど、回路規模は低減できる。一方、図４２(b) は、基準ビット長Ｎと圧縮率との関係を示すグラフである。一般に、基準ビット長Ｎを小さく設定すればするほど、圧縮効率を高める（圧縮率を低める）ことができる。
【０３４７】
したがって、回路規模を低減する上では、できるだけ大きな基準ビット長Ｎを設定するのが好ましいが、圧縮効率を高める上では、できるだけ小さな基準ビット長Ｎを設定するのが好ましい。このように、回路規模と圧縮効率とはトレードオフの関係にあるので、実用上は、この点を考慮して、基準ビット長Ｎを最適な値に設定するのが好ましい。
【０３４８】
＜＜＜  §１４．より実用的な復号化処理  ＞＞＞
最後に、本発明を実施する上でより実用的な復号化処理を述べておく。
【０３４９】
＜各復号処理ユニットによる処理中止時点＞
§４では、図１０に示すように、８台の復号処理ユニットＱ１〜Ｑ８に、それぞれ１６ビットのデータを分配した後、各復号処理ユニットＱ１〜Ｑ８が、図１１〜図１３に示すような復号処理を実行する例を述べた。この例では、各復号処理ユニットＱ１〜Ｑ８のそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することになる。
【０３５０】
たとえば、図１１に示すように、ユニットＱ１は、まず「０１１１１１００」なる第１番目の単位符号データの部分について［２８］なる実データを復号化した後、更に、第２番目の単位符号データの部分についての復号化を試みる。しかしながら、実際には、第２番目の単位符号データの復号化には失敗し、復号処理の結果は、図示のとおり、［２８］［ＥＲＲ］となる。これに対して、ユニットＱ４は、［１２３］［１］という２組の実データの復号化に成功しており、ユニットＱ７は、［１］［１３］［３］という３組の実データの復号化に成功している。その一方で、ユニットＱ２，Ｑ５，Ｑ６は、正常な復号処理に失敗し、実データを１つも取り出すことはできない。
【０３５１】
このように、各復号処理ユニットが取り出しに成功する実データの数は、実際に処理を実行してみるまでは未知であるが、§４で述べたとおり、各復号処理ユニットが、正常な復号処理が可能な限り、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を続行することにすれば、原理的には何ら支障は生じない。図示の例の場合、図９(c) に示す符号化テーブルに掲載されている識別コードＣの最大ビット長は８であるから、先頭から８ビット目まで照合しても合致する識別コードがない場合は、正常な復号処理に失敗したことになるので、その時点で処理を中止すればよい。
【０３５２】
しかしながら、§４で述べた方法は、実用的な観点からは、必ずしも効率的な方法にはなっていない。具体的には、実用上、次の２つの無駄な点が存在する。第１の無駄は、同一の実データを異なるユニットで重複して取り出す処理が行われている点である。たとえば、図１２に示す例の場合、ユニットＱ４で取り出された実データ［１］は、ユニットＱ７でも重複して取り出されている。同様に、ユニットＱ７で取り出された実データ［１３］［３］は、ユニットＱ８でも重複して取り出されている。このように、同一の実データが複数のユニットで重複して取り出されても、最終的には、採択ユニットで取り出された実データのみが採用されるので、原理的には何ら支障は生じない。しかしながら、実用上は、演算時間が余分に必要になるなど、非効率的な処理が行われていることは否定できない。
【０３５３】
第２の無駄は、物理的な配線の問題である。図示の例の場合、各復号処理ユニットから取り出された実データは８ビットの数値データとして、データ編成部へと出力されることになる。したがって、１つの復号処理ユニットから取り出される可能性のある実データの数をｎ個とすると（図１２に示す例の場合、ｎ＝４である）、図１９に示すＭ台の復号処理ユニット２４０のそれぞれから、データ編成部２５０に対して、パラレル信号として情報を同時送信する場合、取り出した実データを伝達するための信号線が（８×ｎ）本だけ必要になる。これは、回路を実装する上で、大きな問題になる。
【０３５４】
実は、本発明に係る復号化方法を実行する上で、各復号処理ユニットは、実データに対応する数値データを取り出すための処理を、必ずしも「正常な復号処理が可能な限り」続行する必要はなく、実データに対応する数値データを少なくとも１つだけ取り出すための処理を行えば十分である。
【０３５５】
図４３は、図１０に示すように、８台の復号処理ユニットＱ１〜Ｑ８に、それぞれ１６ビットのデータを分配した後、各復号処理ユニットＱ１〜Ｑ８によって行われる別な復号処理を示す図である。この例の場合、８台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行う。
【０３５６】
具体的には、図示のとおり、ユニットＱ１は、「０１１１１１００」なる第１番目の単位符号データの部分について［２８］なる実データを復号化したら、そこで処理を中止する。同様に、ユニットＱ３，Ｑ４，Ｑ７，Ｑ８も、それぞれ第１番目の単位符号データの部分について、［２５１］，［１２３］，［１］，［１３］なる実データを復号化したら、そこで処理を中止する。一方、ユニットＱ２，Ｑ５，Ｑ６は、正常な復号処理に失敗して処理を中止することになる。
【０３５７】
このように、各ユニットは、分配された部分データの先頭にある第１番目の単位符号データの部分について、正常な復号処理に成功した場合も、正常な復号処理に失敗した場合も、そこで処理を中止することになる。成功した場合は、１つの実データに対応する数値データが取り出され、失敗した場合は、何ら数値データは取り出されない。要するに、各ユニットは、１つの単位符号データ（分配された部分データの先頭にある第１番目の単位符号データ）についての実データに対応する数値データのみを取り出すための処理を行うことになる。
【０３５８】
この図４３に示す例の場合も、各ユニットから、正常な復号処理によって得られた情報と、当該正常な復号処理に関与したビット数を示す正常処理ビット長とが、データ編成部に対して報告される点は同じである。図示のＰ１〜Ｐ８の値は、各ユニットＱ１〜Ｑ８から報告される正常処理ビット長を示している。図４４は、図４３に示す復号処理プロセスの図に、正常処理端線Ｚ０〜Ｚ４を付加したものである。この正常処理端線Ｚ０〜Ｚ４は、正常な復号処理が行われたビット列の端部を示すものであり、その位置は、§４で説明したとおり、正常処理ビット長Ｐ１〜Ｐ８に基づいて決定される。
【０３５９】
具体的には、まず、ユニットＱ１を最初の採択ユニットとして決定し、当該採択ユニットＱ１の先頭位置に、正常処理端線Ｚ０を引く。次に、この採択ユニットＱ１についての正常処理ビット長Ｐ１＝８を参照して、正常処理端線Ｚ０から８ビット目（Ｐ１ビット目）の位置に、正常処理端線Ｚ１を引く。そして、この正常処理端線Ｚ１を先頭位置とする別なユニットＱ３を新たな採択ユニットと決定し、この採択ユニットＱ３についての正常処理ビット長Ｐ３＝１６を参照して、正常処理端線Ｚ１から１６ビット目（Ｐ３ビット目）の位置に、正常処理端線Ｚ２を引く。更に、この正常処理端線Ｚ２を先頭位置とする別なユニットＱ７を新たな採択ユニットと決定し、この採択ユニットＱ７についての正常処理ビット長Ｐ７＝４を参照して、正常処理端線Ｚ２から４ビット目（Ｐ７ビット目）の位置に、正常処理端線Ｚ３を引く。更に、この正常処理端線Ｚ３を先頭位置とする別なユニットＱ８を新たな採択ユニットと決定し、この採択ユニットＱ８についての正常処理ビット長Ｐ８＝８を参照して、正常処理端線Ｚ３から８ビット目（Ｐ８ビット目）の位置に、正常処理端線Ｚ４を引く。
【０３６０】
このようにすれば、ユニットＱ１，Ｑ３，Ｑ７，Ｑ８の４台が採択ユニットとなる。図４５は、この４台の採択ユニットＱ１，Ｑ３，Ｑ７，Ｑ８における正常処理ビットの部分を太枠で囲って示した図である。この太枠で囲った正常処理ビットの部分に着目すると、それぞれ正常処理端線Ｚ０〜Ｚ１の区間、正常処理端線Ｚ１〜Ｚ２の区間、正常処理端線Ｚ２〜Ｚ３の区間、正常処理端線Ｚ３〜Ｚ４の区間となり、互いに連続した区間になる。したがって、これら４台の採択ユニットＱ１，Ｑ３，Ｑ７，Ｑ８による正常な復号処理によって得られた数値データを収集すれば、本来復元されるべき数値データ列が得られる。すなわち、図４５に示すように、これら採択ユニットＱ１，Ｑ３，Ｑ７，Ｑ８によって復元された数値データを収集して並べれば、［２８］［２５１］［１］［１３］となる。
【０３６１】
図１１〜図１３に示す例（各ユニットが、正常な復号処理が可能な限り処理を続行する例）と、図４３〜図４５に示す例（各ユニットが、１つの実データに対応する数値データのみを取り出す処理を行う例）とを比べると、前者に含まれていた２つの無駄が、後者では省かれていることがわかる。すなわち、後者では、同一の実データを異なるユニットで重複して取り出す処理が行われることはなく、また、１つのユニットからは、１つの実データに対応する数値データ（図示の例では、８ビットの数値データ）のみをデータ編成部へと出力するための配線を設けておけば足りる。
【０３６２】
ただ、前者の方が後者よりも優れている点もある。図１３と図４５とを比較すると、前者では、第１回目の並列処理により、上段に示す符号化データ列のうちのブロックＢ１〜Ｂ１０の部分についての復号化が行われ、［２８］［２５１］［１］［１３］［３］という５組の数値データの復号化が行われているのに対して、後者では、第１回目の並列処理により、ブロックＢ１〜Ｂ９の部分についての復号化だけが行われ、［２８］［２５１］［１］［１３］という４組の数値データの復号化だけが行われている。すなわち、後者の場合、ブロックＢ１０の部分についての復号化は、第１回目の並列処理では行われず、第２回目の並列処理にまわされることになる。これは、後者では、「各ユニットは、１つの実データに対応する数値データを取り出した時点で処理を中止する」という運用を採るため、ユニットＱ８が、ブロックＢ１０のビット列「００１１」を数値データ［３］として取り出すことができるのにもかかわらず、数値データ［１３］を取り出した時点で処理を中止してしまったためである。
【０３６３】
このような弊害を是正するためには、前者と後者との両方を採り入れた折衷方式を採用すればよい。すなわち、Ｍ台の復号処理ユニットを用いる一般論で説明すれば、第１台目〜第（Ｍ−１）台目のユニットのそれぞれについては、「新たな部分データの分配が行われるたびに、分配された部分データの先頭から、１つの単位符号データについての実データに対応する数値データのみを取り出すための処理（前者の処理）」を行い、第Ｍ台目のユニットについては、「新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行する（後者の処理）」ようにすればよい。
【０３６４】
この折衷方式では、図４５の例（Ｍ＝８の例）において、第１台目〜第７台目のユニットＱ１〜Ｑ７については、図示のとおり、１つの実データに対応する数値データのみが取り出されるが、第８台目のユニットＱ８については、正常な復号処理が可能な限り、実データを取り出す処理が続行されるので、［１３］に引き続いて［３］が取り出されることになる。この場合、正常処理端線Ｚ４の位置は、４ビット分右へ移動し、ブロックＢ１０の右端になる。かくして、図１３に示す例と同様に、第１回目の並列処理により、［２８］［２５１］［１］［１３］［３］という５組の数値データの復号化が行われる。この場合、第８台目のユニットＱ８からは、複数組の数値データが出力される可能性があるため、これに応じた配線を用意する必要があるものの、第１台目〜第７台目のユニットＱ１〜Ｑ７については、１つの数値データに必要な配線を用意しておけば足りる。
【０３６５】
このように、本発明に係る復号処理段階では、Ｍ台の復号処理ユニットは、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、任意の数の実データに対応する数値データを取り出すための処理を行えばよく、個々の復号処理ユニットによる処理の中止時点は任意に設定することが可能である。また、図４３〜図４５に示す例は、一次元符号化テーブルを用いた例であるが、§９で述べた二次元符号化テーブルを利用する例においても、個々の復号処理ユニットによる処理の中止時点は任意に設定することが可能である。たとえば、図３５に示す例の場合、各ユニットが、分配された部分データの先頭にある第１番目の単位符号データの部分についての復号処理を行った時点で処理を中止するようにすると、「◎」が付される採択ユニットは、Ｑ１（Ｐ１＝８），Ｑ３（Ｐ３＝１６），Ｑ７（Ｐ７＝１２）となり、１回目の並列処理で、先頭から第３６ビット目までの復号化が完了する。
【０３６６】
すなわち、二次元符号化テーブルを利用して符号化されたデータを復号化する場合、Ｍ台の復号処理ユニットは、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を任意の回数だけ繰り返せばよい。具体的には、正常な復号処理が可能な限り何回でも処理を続行するようにしてもよいし、１つの単位符号データについてのランレングス値および実データに対応する数値データを取り出した時点で処理を中止してもよい。もちろん、その折衷方式として、第１台目〜第（Ｍ−１）台目のユニットについては、１つの単位符号データについてのランレングス値および実データに対応する数値データを取り出した時点で処理を中止し、第Ｍ台目のユニットについては、正常な復号処理が可能な限り処理を続行するようにしてもよい。
【０３６７】
＜ランレングス値に基づく復元処理の担当＞
§９で述べた二次元符号化テーブルを利用する方法では、Ｍ台の復号処理ユニットによる並列処理により、二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、０を示す数値データを羅列する回数を示すランレングス値と、当該０を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理が行われ、１回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列が生成される。
【０３６８】
図１７に示す流れ図において、ステップＳ２４として示されている復号処理段階が、Ｍ台の復号処理ユニットによって実行される並列処理であり、続く、ステップＳ２５として示されているデータ編成段階が、復号化データ列を生成する処理である。§１０で説明した方法では、ステップＳ２４の復号処理段階において、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べることにより、元のデータ列を復元する復号処理を行い、続くステップＳ２５のデータ編成段階において、このＭ台の復号処理ユニットによる復号処理の結果を取捨選択して、０を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成する処理を行っていた。
【０３６９】
別言すれば、§１０で説明した方法では、ステップＳ２４の復号処理段階において、Ｍ台の復号処理ユニットのそれぞれが、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、ステップＳ２５のデータ編成段階において、データ編成部が、復元されたデータを並べることにより復号化データ列を生成する処理を行っていた。すなわち、この方法では、Ｍ台の復号処理ユニットのそれぞれが、ランレングス値に基いて０の羅列データの復元処理を担当していることになる。
【０３７０】
しかしながら、実用上は、ランレングス値に基づく復元処理は、データ編成部に担当させるのが好ましい。その理由は、各復号処理ユニットからデータ編成部への配線を効率化するためである。図１９に示すように、実際の復号化装置には、Ｍ台の復号処理ユニット２４０のそれぞれから、データ編成部２５０に対して、処理結果を示す情報を伝達するための配線が必要である。データ編成部２５０は、Ｍ台の復号処理ユニット２４０による１回の並列処理の結果として得られた情報を、時分割して受け取ることもできるが、実用上は、パラレル信号として同一タイミングで受け取り、復号化データ列を生成する処理を行うのが好ましい。そうすると、もし、Ｍ台の復号処理ユニット２４０側で既にランレングス値に基づく復元処理（０を示す数値データをランレングス値に相当する回数だけ羅列する処理）を実施してしまっていると、これらの数値データをパラレル信号としてデータ編成部２５０に伝達するためには、膨大な数の配線が必要になる。
【０３７１】
そこで、実用上は、復号処理段階では、Ｍ台の復号処理ユニット２４０のそれぞれが、取り出したランレングス値および実データに対応する数値データをそのまま出力する処理を実行するようにし、データ編成段階で、データ編成部２５０が、０を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータを並べることにより復号化データ列を生成する処理を行うようにする。そうすれば、各復号処理ユニット２４０からデータ編成部２５０に対しては、ランレングス値と、実データに対応する数値データと、正常処理ビット長と、を伝達するための配線を用意しておけば足りるので、配線の数を大幅に節約することができる。
【０３７２】
＜専用の参照テーブルを利用した復号化＞
本発明に係る符号化方法で用いる符号化テーブルは、「テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をａとしたときに、先頭からａビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という条件を満たすテーブルである。そして、復号化を行う際には、そのような条件を満たすことを利用して、符号化されたデータの先頭から１ビット、２ビット、３ビット、... の部分について順に、テーブル内に合致する識別コードがあるか否かを判定する処理を行うことが可能になる。
【０３７３】
このように、復号化の基本原理は、符号化テーブル内の識別コードとの合致判定処理ということになるが、実用上は、次のような効率的な合致判定処理が行われている。この処理は、ＪＰＥＧ画像の復号化などに利用されている公知の技術であるが、以下、本発明に適用した場合の具体例を簡単に述べておく。
【０３７４】
ここで述べる効率的な合致判定処理を行うためには、予め、復号化に利用する符号化テーブルに基づいて、専用の復号化用参照テーブルを用意しておく必要がある。ここでは、図３１に示す「ＡＣ成分用符号化テーブル」に基づいて作成した復号化用参照テーブルを図４６および図４７に例示する。
【０３７５】
図４６に示す復号化用第１参照テーブルは、識別コード自身のビット長ａと、当該ビット長ａをもつ識別コードの総数（図３１のテーブル内の総数）を示す符号語数ｗと、当該ビット長ａをもつ識別コードのうち、値が最小の識別コードＣminと、を収容したものである。たとえば、この参照テーブルの１行目には、ａ＝３，ｗ＝１，Ｃmin ＝「０００」なるデータが収容されているが、これは、図３１に示すテーブル内に、ビット長が「３」の識別コードが１つだけ存在し（ｂ＝１，Ｒ＝０の欄）、当該識別コードが「０００」であることを意味している。同様に、この参照テーブルの２行目には、ａ＝４，ｗ＝４，Ｃmin ＝「００１０」なるデータが収容されているが、これは、図３１に示すテーブル内に、ビット長が「４」の識別コードが４つ存在し（ｂ＝０，Ｒ＝０の欄、ｂ＝０，Ｒ＝１５の欄、ｂ＝４，Ｒ＝０の欄、ｂ＝４，Ｒ＝１の欄）、これら４つの識別コードのうちの最小値が「００１０」であることを意味している。以下、同様である。
【０３７６】
一方、図４７に示す復号化用第２参照テーブルは、図３１のテーブルに収容されている各識別コードを、そのビット長ａの小さい順に、かつ、同じビット長ａをもつ識別コードについては識別コードの小さい順に並べ、当該識別コードの収容位置を示すｂおよびＲの値を記載したテーブルである。たとえば、この参照テーブルの１行目には、識別コード「０００」の収容位置「ｂ＝１，Ｒ＝０」が記載され、２行目には、識別コード「００１０」の収容位置「ｂ＝０，Ｒ＝０（＝ＥＯＢ）」が記載され、３行目には、識別コード「００１１」の収容位置「ｂ＝４，Ｒ＝０」が記載され、４行目には、識別コード「０１００」の収容位置「ｂ＝４，Ｒ＝１」が記載されている。なお、この復号化用第２参照テーブルには、識別コード自身を記載しておく必要はないので、図では、参考のために右欄外に括弧書きで識別コードを示してある。また、左欄外には、個々のビット長ａの先頭アドレスを矢印で示してある。
【０３７７】
この２つの参照テーブルは、実質的に図３１のテーブルと同じ内容を示すものであり、これら２つのテーブルを予め作成しておけば、以下に述べるような効率的な方法で、復号化を行うことが可能である。ここでは、図３５に示す復号処理ユニットＱ３に分配された２４ビットのデータについての復号化を行う場合を例にとって説明しよう。図３５に示すとおり、復号処理ユニットＱ３については、先頭の１０ビットのデータ「１１１１０１１０００」が、図３１のテーブルの収容位置「ｂ＝６，Ｒ＝３」に合致することになる。
【０３７８】
図４８は、復号化用第１および第２参照テーブルを用いた効率的な復号化処理の原理を示す図である。まず、ビット長ａ＝３をもつ識別コードについての合致判定を行うために、図４６に示す第１参照テーブルから、ビット長ａ＝３の行に記載されている識別コードＣmin 「０００」（ビット長３をもつ識別コードの最小値）を取り出し、ユニットＱ３内のビット列の先頭に揃えて減算を行い、差ｄを求める。図４８の丸数字３には、このような減算が示されている。図示のとおり、ユニットＱ３内のビット列の先頭３ビットは「１１１」であるから、ここで行う減算は、「１１１−０００＝１１１」であり、差ｄ＝「１１１」が求まる。
【０３７９】
続いて、図４６に示す第１参照テーブルから、ビット長ａ＝３の行に記載されている符号語数ｗ（この場合、ｗ＝１）を取り出し、「０≦ｄ＜ｗ」が満足するか否かを調べる。差ｄ＝「１１１」の１０進表記はｄ＝７であるから、ｄ≧ｗとなり、ａ＝３の場合、「０≦ｄ＜ｗ」は満足しないことになる。このような処理を、ａを１ずつ増やしながら、「０≦ｄ＜ｗ」が満足されるまで繰り返し実行してゆく。
【０３８０】
たとえば、ａ＝４の場合は、識別コードＣmin 「００１０」（ビット長４をもつ識別コードの最小値）が取り出され、図４８の丸数字４に示されているように、ユニットＱ３内のビット列の先頭４ビット「１１１１」に対する減算が行われ、「１１１１−００１０＝１１０１」として、差ｄ＝「１１０１（１０進表記では１３）」が求まる。一方、ビット長ａ＝４の行に記載されている符号語数ｗは、ｗ＝４であるから、ｄ≧ｗとなり、ａ＝４の場合も「０≦ｄ＜ｗ」は満足しないことになる。
【０３８１】
続く、ａ＝５の場合は、識別コードＣmin 「０１１００」（ビット長５をもつ識別コードの最小値）が取り出され、図４８の丸数字５に示されているように、ユニットＱ３内のビット列の先頭５ビット「１１１１０」に対する減算が行われ、「１１１１０−０１１００＝１００１０」として、差ｄ＝「１００１０（１０進表記では１８）」が求まる。一方、ビット長ａ＝５の行に記載されている符号語数ｗは、ｗ＝５であるから、ｄ≧ｗとなり、ａ＝５の場合も「０≦ｄ＜ｗ」は満足しないことになる。同様に、ａ＝６〜９の場合も、減算によって求めた差ｄについて、「０≦ｄ＜ｗ」は満足しない。
【０３８２】
次に、ａ＝１０の場合は、識別コードＣmin 「１１１１０１０１１０」（ビット長１０をもつ識別コードの最小値）が取り出され、図４８の丸数字１０に示されているように、ユニットＱ３内のビット列の先頭１０ビット「１１１１０１１０００」に対する減算が行われ、「１１１１０１１０００−１１１１０１０１１０＝００００００００１０」として、差ｄ＝「００００００００１０（１０進表記では２）」が求まる。一方、ビット長ａ＝１０の行に記載されている符号語数ｗは、ｗ＝２０であるから、ａ＝１０の場合に初めて「０≦ｄ＜ｗ」が満足されることになる。
【０３８３】
こうして、「０≦ｄ＜ｗ」が満足したら、図４７に示す第２参照テーブルを参照して、その時点のビット長ａの先頭アドレスからｄ個目のデータを抽出する。上例の場合、ビット長ａ＝１０の先頭アドレスから２個目のデータ、すなわち、「ｂ＝６，Ｒ＝３」が抽出されることになる。こうして抽出されたデータ「ｂ＝６，Ｒ＝３」は、正に、復号処理ユニットＱ３の先頭の１０ビットのデータ「１１１１０１１０００」に合致する識別コードが示すビット長ｂおよびランレングス値Ｒである。
【０３８４】
上述した復号化方法を採れば、図３１のテーブルの各欄を総当たりで比較してゆく方法に比べて、非常に効率的な合致判定処理が可能になる。なお、この復号化方法を採る場合は、図１８に示す符号化装置におけるデータ出力部１７０に、テーブル格納部１２０に格納されている符号化テーブルＴ（二次元符号化テーブル）に基づいて、図４６に示すような復号化用第１参照テーブルおよび図４７に示すような復号化用第２参照テーブルを作成する機能をもたせておき、符号化データファイルＦ内に、これら参照テーブル自身を、もしくはこれら参照テーブルを特定するテーブル特定情報を組み込むようにすればよい。前述したとおり、図４６および図４７に示す参照テーブルは、図３１のテーブルと同等の機能を果たすテーブルであり、実質的には同一内容を示すテーブルである。
【０３８５】
なお、上述した復号化の演算処理を高速化するには、図４８に丸数字３〜１０として示されているような個々の減算処理（具体的には、図４６の第１参照テーブルに示されているビット長ａ＝３についての識別コードＣmin 〜ビット長ａ＝１４についての識別コードＣmin を、それぞれユニットＱ３に分配された２４ビットのデータの先頭に桁合わせして引き算する処理）を並列して行うようにすればよい。すなわち、復号処理ユニットＱ３の内部に、個々の減算処理を実行するためのハードウエアを複数台用意しておけば、ビット長ａ＝３についての減算、ビット長ａ＝４についての減算、ビット長ａ＝５についての減算、... と個々の減算処理を順番に繰り返し実行する代わりに、すべての減算処理を並行して行うことができ、ビット長ａ＝３〜１４についての減算結果を同時に得ることができる。
【符号の説明】
【０３８６】
１１０：データ格納部
１２０：テーブル格納部
１３０：データ抽出部
１４０：実データ生成部
１５０：識別コード選択部
１６０：単位符号データ生成部
１７０：データ出力部
１８０：頻度集計部
１９０：テーブル修正部
２１０：データ格納部
２２０：テーブル格納部
２３０：データ分配部
２４０（１），２４０（２），...，２４０（ｍ）：復号処理ユニット
２５０：データ編成部
２６０：データ出力部
３００：ＪＰＥＧ画像用圧縮処理装置
３１０：ＤＣＴ手段
３２０：量子化手段
３３０：符号化手段
４００：ＪＰＥＧ画像用伸張処理装置
４１０：復号化手段
４２０：逆量子化手段
４３０：逆ＤＣＴ手段
ａ：識別コードＣ自身のビット長
Ｂ１〜Ｂ１１：基準ビット長Ｎをもつデータブロック
ｂ：実データＤのビット長
Ｃ，Ｃ１，Ｃ２，Ｃ３，Ｃ４，Ｃ５，...：識別コード
Ｃ００〜Ｃ８８：識別コード
Ｃmin：最小の識別コード
Ｄ，Ｄ１，Ｄ２，Ｄ３，Ｄ４，Ｄ５，...：数値データ／実データ
ｄ：差
Ｅ：数値データ列
Ｆ：符号化データファイル
Ｆ１：ヘッダ部
Ｆ２：本体部
Ｆ３：フッタ部
Ｇ：復号化データ列
Ｈ：テーブル特定情報
ｉ：復号処理ユニットの番号
Ｊ：カウント値
ｋ：任意の整数（１，２，３，４，...）
Ｌ：復号処理ユニットの処理可能ビット数（Ｎの整数倍）
Ｍ：復号処理ユニットの台数
Ｎ：基準ビット長（２以上の整数）
Ｐ１〜Ｐ８：正常処理ビット長
Ｑ１〜Ｑ８：復号処理ユニット
Ｒ：ランレングス値
Ｒmax：ランレングス値の最大値
Ｓ：符号化データ列
Ｓ１１〜Ｓ２７：流れ図の各ステップ
Ｔ，Ｔ１，Ｔ２，Ｔ３，Ｔ４：符号化テーブル
Ｕ，Ｕ１，Ｕ２，Ｕ３，Ｕ４，Ｕ５，...Ｕｎ：単位符号データ
Ｕmax：単位符号データの最大ビット長
ｗ：符号語数
Ｘ：８×８画素ブロックのデータ
Ｙ：圧縮データ
Ｚ０〜Ｚ４：正常処理端線
【図１】
0005626440.tif 000002
【図２】
0005626440.tif 000003
【図３】
0005626440.tif 000004
【図４】
0005626440.tif 000005
【図５】
0005626440.tif 000006
【図６】
0005626440.tif 000007
【図７】
0005626440.tif 000008
【図８】
0005626440.tif 000009
【図９】
0005626440.tif 000010
【図１０】
0005626440.tif 000011
【図１１】
0005626440.tif 000012
【図１２】
0005626440.tif 000013
【図１３】
0005626440.tif 000014
【図１４】
0005626440.tif 000015
【図１５】
0005626440.tif 000016
【図１６】
0005626440.tif 000017
【図１７】
0005626440.tif 000018
【図１８】
0005626440.tif 000019
【図１９】
0005626440.tif 000020
【図２０】
0005626440.tif 000021
【図２１】
0005626440.tif 000022
【図２２】
0005626440.tif 000023
【図２３】
0005626440.tif 000024
【図２４】
0005626440.tif 000025
【図２５】
0005626440.tif 000026
【図２６】
0005626440.tif 000027
【図２７】
0005626440.tif 000028
【図２８】
0005626440.tif 000029
【図２９】
0005626440.tif 000030
【図３０】
0005626440.tif 000031
【図３１】
0005626440.tif 000032
【図３２】
0005626440.tif 000033
【図３３】
0005626440.tif 000034
【図３４】
0005626440.tif 000035
【図３５】
0005626440.tif 000036
【図３６】
0005626440.tif 000037
【図３７】
0005626440.tif 000038
【図３８】
0005626440.tif 000039
【図３９】
0005626440.tif 000040
【図４０】
0005626440.tif 000041
【図４１】
0005626440.tif 000042
【図４２】
0005626440.tif 000043
【図４３】
0005626440.tif 000044
【図４４】
0005626440.tif 000045
【図４５】
0005626440.tif 000046
【図４６】
0005626440.tif 000047
【図４７】
0005626440.tif 000048
【図４８】
0005626440.tif 000049