JPH0750592A - シンボルの統計的復号化方法 - Google Patents
シンボルの統計的復号化方法Info
- Publication number
- JPH0750592A JPH0750592A JP6124246A JP12424694A JPH0750592A JP H0750592 A JPH0750592 A JP H0750592A JP 6124246 A JP6124246 A JP 6124246A JP 12424694 A JP12424694 A JP 12424694A JP H0750592 A JPH0750592 A JP H0750592A
- Authority
- JP
- Japan
- Prior art keywords
- byte
- symbol
- symbols
- data
- boundary
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
- H03M7/425—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory for the decoding process only
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Of Band Width Or Redundancy In Fax (AREA)
Abstract
(57)【要約】 (修正有)
【目的】バイト境界を有するデータストリーム中にシン
ボルがあり、バイトの境界に対してそのシンボルの配列
の境界位置が変化するものである場合に、統計的復号化
を実行する。 【構成】次のバイトのデータをデータストリームの中か
ら取り出し、このバイトとステートマシンに保持された
現在のビット位置とに基づいて、(a)ルックアップテ
ーブルから復号値を得るか、または(b)さらに別のバ
イトを取り出して用いて復号値を決定する。各シンボル
はプレフィックスとフリービットを有しており、1単位
を形成するシンボル全体は次のバイトに含まれるか、ま
たは、次のバイトの境界はプレフィックス内に位置する
かフリービット内に位置するかは、シンボルの境界位置
に応じて決まる。シンボルごとに決定された復号値に応
じて、異なるそれぞれのシンボルに対応する異なるそれ
ぞれのアクションルーチンが選択されて実行される。
ボルがあり、バイトの境界に対してそのシンボルの配列
の境界位置が変化するものである場合に、統計的復号化
を実行する。 【構成】次のバイトのデータをデータストリームの中か
ら取り出し、このバイトとステートマシンに保持された
現在のビット位置とに基づいて、(a)ルックアップテ
ーブルから復号値を得るか、または(b)さらに別のバ
イトを取り出して用いて復号値を決定する。各シンボル
はプレフィックスとフリービットを有しており、1単位
を形成するシンボル全体は次のバイトに含まれるか、ま
たは、次のバイトの境界はプレフィックス内に位置する
かフリービット内に位置するかは、シンボルの境界位置
に応じて決まる。シンボルごとに決定された復号値に応
じて、異なるそれぞれのシンボルに対応する異なるそれ
ぞれのアクションルーチンが選択されて実行される。
Description
【0001】
【産業上の利用分野】この発明は信号処理分野に関し、
具体的には、統計的に符号化されたディジタル信号の復
元(decompression) に関するものである。
具体的には、統計的に符号化されたディジタル信号の復
元(decompression) に関するものである。
【0002】
【従来の技術】数値データのハフマン符号化、さらに広
義の数値データの可変ビット長符号化は、画像(ビデ
オ)信号処理分野の多くのデータ圧縮アルゴリズムにお
いて重要な部分を形成している。ハフマン符号化は、た
いていのデータ群ではデータの値の出現確率分布が不均
一である事を利用して、数値データを圧縮するのに、有
効である。ハフマン符号化方法においては、各データの
値はそれぞれ異なるビット長のコード(code)を用いて符
号化される。より高い頻度で出現するデータ値にはより
短いコード(符号)を割当て、より低い頻度で出現する
データ値にはより長いコードを割当てる。これにより、
データ群中のデータ値に使用される平均のコード長(符
号長)は、全体として小さくできる。典型的な不均一な
データ値出現確率分布の場合、ハフマン符号化により、
1.5〜2の圧縮率が達成できる。
義の数値データの可変ビット長符号化は、画像(ビデ
オ)信号処理分野の多くのデータ圧縮アルゴリズムにお
いて重要な部分を形成している。ハフマン符号化は、た
いていのデータ群ではデータの値の出現確率分布が不均
一である事を利用して、数値データを圧縮するのに、有
効である。ハフマン符号化方法においては、各データの
値はそれぞれ異なるビット長のコード(code)を用いて符
号化される。より高い頻度で出現するデータ値にはより
短いコード(符号)を割当て、より低い頻度で出現する
データ値にはより長いコードを割当てる。これにより、
データ群中のデータ値に使用される平均のコード長(符
号長)は、全体として小さくできる。典型的な不均一な
データ値出現確率分布の場合、ハフマン符号化により、
1.5〜2の圧縮率が達成できる。
【0003】多くの重要な圧縮アルゴリズムには、ハフ
マン復号化法が採用されており、汎用プロセッサに用い
てのそのようなアルゴリズムの復号化方法は、急速に普
及しつつある。しかし、通常のハフマン符号データの復
号化アルゴリズムは非常に遅いために、ハフマン復号化
の高速アルゴリズムが要望されている。1つのハフマン
のシンボル(symbol、符号単位)の復号化を行う場合、
上記通常のアルゴリズムでは、2進木(tree)の各ノード
において圧縮データのビットストリームの中の連続する
個々のビットを用いて、2進木をたどって進む必要があ
る。2進木の最後のノードに到達すると、このたどる作
業が終り、ハフマンのシンボルの復号値が、テーブル
(変換表)を用いて決定される。
マン復号化法が採用されており、汎用プロセッサに用い
てのそのようなアルゴリズムの復号化方法は、急速に普
及しつつある。しかし、通常のハフマン符号データの復
号化アルゴリズムは非常に遅いために、ハフマン復号化
の高速アルゴリズムが要望されている。1つのハフマン
のシンボル(symbol、符号単位)の復号化を行う場合、
上記通常のアルゴリズムでは、2進木(tree)の各ノード
において圧縮データのビットストリームの中の連続する
個々のビットを用いて、2進木をたどって進む必要があ
る。2進木の最後のノードに到達すると、このたどる作
業が終り、ハフマンのシンボルの復号値が、テーブル
(変換表)を用いて決定される。
【0004】この木をたどって進む復号化アルゴリズム
においては、通常の画像プロセッサでは、最良の場合で
も、符号化されたシンボル(符号単位)の1ビット当た
り5つの命令(instruction) が必要である。多くのアプ
リケーションでは、ハフマンのシンボルは1シンボル当
たり平均約4ビットである。したがって、通常の画像プ
ロセッサでは、1シンボル当たり約20個の命令、即
ち、約80サイクルが必要である。毎秒約30フレーム
の画像表示の典型的なシンボルの速度である、毎秒約3
00,000個のシンボルの割合では、24MHzとな
る。このような、ビット単位の処理方法には、通常の2
5MHz画像プロセッサで使用可能なサイクル数の大部
分が必要である。より高性能の画像プロセッサにおいて
も、この種のビット単位のアルゴリズムを実行するため
には、使用可能なサイクル数の大きな部分を必要とす
る。ハフマン復号化は、典型的には、画像処理システム
における全要処理量のうちの僅かな部分に過ぎないの
で、このような状況は受入れられない。
においては、通常の画像プロセッサでは、最良の場合で
も、符号化されたシンボル(符号単位)の1ビット当た
り5つの命令(instruction) が必要である。多くのアプ
リケーションでは、ハフマンのシンボルは1シンボル当
たり平均約4ビットである。したがって、通常の画像プ
ロセッサでは、1シンボル当たり約20個の命令、即
ち、約80サイクルが必要である。毎秒約30フレーム
の画像表示の典型的なシンボルの速度である、毎秒約3
00,000個のシンボルの割合では、24MHzとな
る。このような、ビット単位の処理方法には、通常の2
5MHz画像プロセッサで使用可能なサイクル数の大部
分が必要である。より高性能の画像プロセッサにおいて
も、この種のビット単位のアルゴリズムを実行するため
には、使用可能なサイクル数の大きな部分を必要とす
る。ハフマン復号化は、典型的には、画像処理システム
における全要処理量のうちの僅かな部分に過ぎないの
で、このような状況は受入れられない。
【0005】ハフマン符号処理を高速で行うために、1
回につきビットストリーム中の1ビットだけを処理する
ことを避け、各ハフマンのシンボルを一括して復号化で
きれば、大変都合が良い。
回につきビットストリーム中の1ビットだけを処理する
ことを避け、各ハフマンのシンボルを一括して復号化で
きれば、大変都合が良い。
【0006】また、ハフマン符号処理の実行において、
バイト境界以外の部分(non-byte boundary) で区切って
ビットストリームにアクセスすることは高価なビット操
作を伴うので、避けることが望ましい。しかし、ビット
ストリーム中のハフマンコード(シンボルの列)はバイ
トの境界(区切り)とは独立の関係でパック(フォーマ
ット)されているので、このバイト境界とは別の境界
(シンボルの境界)ごとのアクセスを避けることは難し
い。
バイト境界以外の部分(non-byte boundary) で区切って
ビットストリームにアクセスすることは高価なビット操
作を伴うので、避けることが望ましい。しかし、ビット
ストリーム中のハフマンコード(シンボルの列)はバイ
トの境界(区切り)とは独立の関係でパック(フォーマ
ット)されているので、このバイト境界とは別の境界
(シンボルの境界)ごとのアクセスを避けることは難し
い。
【0007】
【発明の概要】この発明は、バイト境界を有するデータ
ストリーム中にシンボル(符号単位)があり、バイトの
境界に対してそのシンボルの配列と境界位置(alignmen
t) が変化するものである場合において、統計的復号化
を実行する方法を提供する。次のバイトのデータをデー
タストリームの中から取り出すが、その取り出したデー
タには少なくともシンボルの一部分が含まれている。こ
のバイトとステートマシン(状態制御機構)に保持され
た現在のビット位置とに基づいて、(a)ルックアップ
テーブル(索引テーブル)から復号値を得るか、または
(b)さらに別のバイトを取り出して用いて復号値を決
定する。各シンボルはプレフィックス(先頭)とフリー
(free) ビットを有しており、1単位を形成するシンボ
ル全体がこのバイトに含まれるか、または、次のバイト
の境界がプレフィックス内に位置するかフリービット内
に位置するかは、シンボルの境界位置に応じて決まる。
シンボルごとに決定された復号値に応じて、異なるそれ
ぞれのシンボルに対応する異なるそれぞれのアクション
(action、処理)ルーチンが選択されて、それが実行さ
れる。
ストリーム中にシンボル(符号単位)があり、バイトの
境界に対してそのシンボルの配列と境界位置(alignmen
t) が変化するものである場合において、統計的復号化
を実行する方法を提供する。次のバイトのデータをデー
タストリームの中から取り出すが、その取り出したデー
タには少なくともシンボルの一部分が含まれている。こ
のバイトとステートマシン(状態制御機構)に保持され
た現在のビット位置とに基づいて、(a)ルックアップ
テーブル(索引テーブル)から復号値を得るか、または
(b)さらに別のバイトを取り出して用いて復号値を決
定する。各シンボルはプレフィックス(先頭)とフリー
(free) ビットを有しており、1単位を形成するシンボ
ル全体がこのバイトに含まれるか、または、次のバイト
の境界がプレフィックス内に位置するかフリービット内
に位置するかは、シンボルの境界位置に応じて決まる。
シンボルごとに決定された復号値に応じて、異なるそれ
ぞれのシンボルに対応する異なるそれぞれのアクション
(action、処理)ルーチンが選択されて、それが実行さ
れる。
【0008】 〔発明の詳細な説明〕図1〜図4を参照すると、この発
明の高速統計的復号化方法10のフローチャートが示さ
れている。ハフマンのコードブック(code book) のフォ
ーマットを決定する統計的復号化方法10は、任意のハ
フマンのコードブックにも適用が可能であり、さらに広
く、あらゆる種類の統計的コードのコードブックにも適
用が可能である。しかし、ハフマンのコードブックを用
いて、特に、幾つかの制約(restriction) を満たすハフ
マンのコードブックに用いて、統計的復号化方法10を
記述することは有益である。この制約を満たさない他の
ハフマンのコードブックに対しても、小さな適応的変更
と幾らかのテーブルの蓄積を加えて、同様に統計的復号
化方法10を用いて処理することができることは、理解
されるであろう。
明の高速統計的復号化方法10のフローチャートが示さ
れている。ハフマンのコードブック(code book) のフォ
ーマットを決定する統計的復号化方法10は、任意のハ
フマンのコードブックにも適用が可能であり、さらに広
く、あらゆる種類の統計的コードのコードブックにも適
用が可能である。しかし、ハフマンのコードブックを用
いて、特に、幾つかの制約(restriction) を満たすハフ
マンのコードブックに用いて、統計的復号化方法10を
記述することは有益である。この制約を満たさない他の
ハフマンのコードブックに対しても、小さな適応的変更
と幾らかのテーブルの蓄積を加えて、同様に統計的復号
化方法10を用いて処理することができることは、理解
されるであろう。
【0009】任意のハフマンのコードブックが、ハフマ
ンの2進ビットストリームの集合{Hi }から構成され
ていることは、理解されよう。ハフマンのコードブック
の各ビットストリームHi には、一意的な復号値Vi が
存在する。復号値Vi は、予め設定された順序の整数
0,1,2,...となるとは限らない。より一般的場
合としては、各ハフマンビットストリームHi は整数
{0,1,2,...}の1つであるインデックスIi
にマップ(写像)され、各Ii は別の1対1の関数によ
って最終的な復号値Vi にマップされる。幾つかのアプ
リケーションでは、この発明の統計的復号化方法10に
より、ビットストリームHi から復号値Viに直接進む
ことができるが、従来技術の方法では1回のマッピング
につき2ステップ、即ちHi →Ii →Vi が必要であっ
た。
ンの2進ビットストリームの集合{Hi }から構成され
ていることは、理解されよう。ハフマンのコードブック
の各ビットストリームHi には、一意的な復号値Vi が
存在する。復号値Vi は、予め設定された順序の整数
0,1,2,...となるとは限らない。より一般的場
合としては、各ハフマンビットストリームHi は整数
{0,1,2,...}の1つであるインデックスIi
にマップ(写像)され、各Ii は別の1対1の関数によ
って最終的な復号値Vi にマップされる。幾つかのアプ
リケーションでは、この発明の統計的復号化方法10に
より、ビットストリームHi から復号値Viに直接進む
ことができるが、従来技術の方法では1回のマッピング
につき2ステップ、即ちHi →Ii →Vi が必要であっ
た。
【0010】一般にハフマンのコードブックは、以下の
ように説明できるが、それはこの発明の統計的復号化方
法10においても重要である。統計的復号化方法10の
第1ステップでは、R行を有するテーブルTi の複数の
行をコードブック中の全てのコードワード(語)に割り
当てる。テーブルTi の行k中のハフマンビットストリ
ームHi は、先頭にあるシンボルのP(k) 個のプレフィ
ックスビットPと、それに続くF(k) 個のフリービット
x とからなる。定義により、フリービットx を長さF
(k) の全2進ストリング(列)で置換して組み立てられ
るビットストリームが有効なコードワードである。テー
ブルTi のR行の中には、0個のフリービットx(フリ
ービットがないこと)を持つ行もあり得ることに留意す
る必要がある。但し、各行Rには少なくても1個のシン
ボルプレフィックスビットPがある。これらの制約を満
たすテーブルTi の例をテーブルIに示す。
ように説明できるが、それはこの発明の統計的復号化方
法10においても重要である。統計的復号化方法10の
第1ステップでは、R行を有するテーブルTi の複数の
行をコードブック中の全てのコードワード(語)に割り
当てる。テーブルTi の行k中のハフマンビットストリ
ームHi は、先頭にあるシンボルのP(k) 個のプレフィ
ックスビットPと、それに続くF(k) 個のフリービット
x とからなる。定義により、フリービットx を長さF
(k) の全2進ストリング(列)で置換して組み立てられ
るビットストリームが有効なコードワードである。テー
ブルTi のR行の中には、0個のフリービットx(フリ
ービットがないこと)を持つ行もあり得ることに留意す
る必要がある。但し、各行Rには少なくても1個のシン
ボルプレフィックスビットPがある。これらの制約を満
たすテーブルTi の例をテーブルIに示す。
【0011】
【表1】 テーブルI 0xx 10xxx 110xxx 1110xxxx 11110xxxx 111110xxxxxx 1111110xxxxxx
【0012】テーブルIのシンボルの表記方法では、各
行Rの0のビットと1のビットはハフマンシンボルのプ
レフィックスを表し、後部の複数のxはハフマンシンボ
ルのフリービットを表す。これらの制約を満たすテーブ
ルTi の別の例をテーブルIIに示す。テーブルIIの
シンボルの表記方法では、0のビット、1のビット、お
よび後部の複数のxは、テーブルIについての前の説明
のとおり、ハフマンシンボルを表す。
行Rの0のビットと1のビットはハフマンシンボルのプ
レフィックスを表し、後部の複数のxはハフマンシンボ
ルのフリービットを表す。これらの制約を満たすテーブ
ルTi の別の例をテーブルIIに示す。テーブルIIの
シンボルの表記方法では、0のビット、1のビット、お
よび後部の複数のxは、テーブルIについての前の説明
のとおり、ハフマンシンボルを表す。
【0013】
【表2】 テーブルII 10 11x 011x 010xx 000001 00101x 0011xx 0001xxx 00001xxx 00100xxxx 0000001xxxx 00000001xxxxx 00000000xxxxxx
【0014】統計的復号化方法10の最も単純な実施例
として、ハフマンのテーブルTi のそれぞれの行Rは、
次の式(1)と式(2)の制約を満たさなければならな
い。
として、ハフマンのテーブルTi のそれぞれの行Rは、
次の式(1)と式(2)の制約を満たさなければならな
い。
【0015】
【数1】P(k) ≦ 8 式(1)
【0016】
【数2】F(k) ≦ 8 式(2)
【0017】テーブルIとテーブルIIに記述したコー
ドブックの例においても、式(1)と式(2)の制約
は、満たしている。この2つの式のうちの式(1)の制
約の方が、多くのハフマンのビットストリームHi が違
反(violate) を犯しそうな制約である。式(1)も式
(2)も満たさないコードブックであっても、ほんのわ
ずかの変更で、この方法により処理できることが理解さ
れよう。
ドブックの例においても、式(1)と式(2)の制約
は、満たしている。この2つの式のうちの式(1)の制
約の方が、多くのハフマンのビットストリームHi が違
反(violate) を犯しそうな制約である。式(1)も式
(2)も満たさないコードブックであっても、ほんのわ
ずかの変更で、この方法により処理できることが理解さ
れよう。
【0018】図5〜図8を参照すると、ハフマンのシン
ボルの配列と境界位置(alignment)の図(以下、単に配
列図という)、200、300、400、500が示さ
れている。シンボルの配列図、200、300、400
は、ビットストリームHi 中の種々のバイトの境界と高
速統計的復号化方法10によって復号化されるコードワ
ードまたはシンボルとの間に存在する3種類の関係を表
している。シンボルの配列図、200、300、400
に示されるような異なる3種の類型の境界位置は、その
次のハフマンのストリングを復号化する場合に出現す
る。この3種の類型の境界位置のうちのいずれが出現し
ているかは、リードブロック14に示されるように、現
在のバイトを読み出し、レジスタに格納した後、統計的
復号化方法10の境界位置判断ステップ18において、
判断される。
ボルの配列と境界位置(alignment)の図(以下、単に配
列図という)、200、300、400、500が示さ
れている。シンボルの配列図、200、300、400
は、ビットストリームHi 中の種々のバイトの境界と高
速統計的復号化方法10によって復号化されるコードワ
ードまたはシンボルとの間に存在する3種類の関係を表
している。シンボルの配列図、200、300、400
に示されるような異なる3種の類型の境界位置は、その
次のハフマンのストリングを復号化する場合に出現す
る。この3種の類型の境界位置のうちのいずれが出現し
ているかは、リードブロック14に示されるように、現
在のバイトを読み出し、レジスタに格納した後、統計的
復号化方法10の境界位置判断ステップ18において、
判断される。
【0019】ハフマンのシンボルの配列図、200、3
00、400、500においては、複数のP(Pの列)
は、読み込んで復号化されるその次のハフマンのストリ
ングのプレフィックスを表す。それぞれの配列図、20
0、300、400、500の最初のPは、ビット位置
合わせされたポインタ206、308、408、502
を表す。ビット位置合わせポインタ206、308、4
08、502は、定義により、新しいハフマンのシンボ
ルの始点に位置するので、新しいシンボルはビット位置
iの点から始まる。
00、400、500においては、複数のP(Pの列)
は、読み込んで復号化されるその次のハフマンのストリ
ングのプレフィックスを表す。それぞれの配列図、20
0、300、400、500の最初のPは、ビット位置
合わせされたポインタ206、308、408、502
を表す。ビット位置合わせポインタ206、308、4
08、502は、定義により、新しいハフマンのシンボ
ルの始点に位置するので、新しいシンボルはビット位置
iの点から始まる。
【0020】この発明の高速統計的復号化方法10の一
実施例として、バイトドライブの(バイト単位処理で駆
動される)ステートマシンが当業者に良く知られてい
る。そのようなステートマシンの実施例は、究極的には
プロセッサのシステムの間接ジャンプまたは計算された
ゴーツー(goto)を実行する処理能力に基づいている。
複雑なシフト動作を避け、処理を速くするため、シンボ
ルの配列図、200、300、400に示されるデータ
は、圧縮されたビットストリームの中から1度に1バイ
ト分が取り出され、高速統計的復号化方法10で処理さ
れる。圧縮されたビットストリーム中の、現在のバイト
208、310、410のような現在のバイトは、例え
ばレジスタdxと呼ぶレジスタに格納される。ステートマ
シンを用いて現在のビット位置を見失わないようにす
る。8つのステート(状態)がB0 、B1 、...B7
として記述される。ステートマシンのステートBi は、
復号すべきその次のハフマンのシンボルの始点におい
て、レジスタdx中の現在のバイトのビット番号iの位置
にビット位置合わせポインタがあることを示す。
実施例として、バイトドライブの(バイト単位処理で駆
動される)ステートマシンが当業者に良く知られてい
る。そのようなステートマシンの実施例は、究極的には
プロセッサのシステムの間接ジャンプまたは計算された
ゴーツー(goto)を実行する処理能力に基づいている。
複雑なシフト動作を避け、処理を速くするため、シンボ
ルの配列図、200、300、400に示されるデータ
は、圧縮されたビットストリームの中から1度に1バイ
ト分が取り出され、高速統計的復号化方法10で処理さ
れる。圧縮されたビットストリーム中の、現在のバイト
208、310、410のような現在のバイトは、例え
ばレジスタdxと呼ぶレジスタに格納される。ステートマ
シンを用いて現在のビット位置を見失わないようにす
る。8つのステート(状態)がB0 、B1 、...B7
として記述される。ステートマシンのステートBi は、
復号すべきその次のハフマンのシンボルの始点におい
て、レジスタdx中の現在のバイトのビット番号iの位置
にビット位置合わせポインタがあることを示す。
【0021】ハフマンのシンボル配列図200により表
されるシンボルの境界位置は、復号化中の圧縮されたビ
ットストリーム内の3つの可能性のうちの最も簡単なも
のを表す。シンボル配列図200において、その次のハ
フマンのシンボル全体がバイト境界202、204を有
する現在のバイト208に含まれている。したがって、
シンボル配列図200のその次のバイト210には、次
のハフマンのシンボルのビットは存在しない。境界位置
判断18によりこのシンボルの境界位置が出現したと判
断されたとき、統計的復号化方法10の実行はパス22
を通って先に進む。
されるシンボルの境界位置は、復号化中の圧縮されたビ
ットストリーム内の3つの可能性のうちの最も簡単なも
のを表す。シンボル配列図200において、その次のハ
フマンのシンボル全体がバイト境界202、204を有
する現在のバイト208に含まれている。したがって、
シンボル配列図200のその次のバイト210には、次
のハフマンのシンボルのビットは存在しない。境界位置
判断18によりこのシンボルの境界位置が出現したと判
断されたとき、統計的復号化方法10の実行はパス22
を通って先に進む。
【0022】この場合は、統計的復号化方法10による
ハフマン復号化は、2つの命令だけで実行される。第1
の命令により、レジスタdxに格納された現在のバイト2
08と、ルックアップブロック30に示されるようなス
テートマシンの現在のバイトに基づいたテーブルルック
アップを実行する。このテーブルルックアップにより復
号値レジスタに格納される復号値Vi が得られる。復号
値レジスタは、ブロック30にも示すように、bxで表
す。第2の命令は、ジャンプブロック34に示すよう
に、レジスタdxに格納された現在のバイト202と現在
のステートに基づいて行う、テーブルからの間接的ジャ
ンプJMPである。このジャンプJMPにより、実行処
理は、ブロック38に示されるようにbxに従って実行す
る統計的復号化方法10内にある8つの異なるルーチ
ン、即ちアクション、の1つへと引き渡される。これら
8つのアクションをC0 、C1 、...C7 と表す。そ
れから、ブロック42に示すようにテーブルBi を用い
て、再びテーブルルックアップとジャンプを実行する。
ハフマン復号化は、2つの命令だけで実行される。第1
の命令により、レジスタdxに格納された現在のバイト2
08と、ルックアップブロック30に示されるようなス
テートマシンの現在のバイトに基づいたテーブルルック
アップを実行する。このテーブルルックアップにより復
号値レジスタに格納される復号値Vi が得られる。復号
値レジスタは、ブロック30にも示すように、bxで表
す。第2の命令は、ジャンプブロック34に示すよう
に、レジスタdxに格納された現在のバイト202と現在
のステートに基づいて行う、テーブルからの間接的ジャ
ンプJMPである。このジャンプJMPにより、実行処
理は、ブロック38に示されるようにbxに従って実行す
る統計的復号化方法10内にある8つの異なるルーチ
ン、即ちアクション、の1つへと引き渡される。これら
8つのアクションをC0 、C1 、...C7 と表す。そ
れから、ブロック42に示すようにテーブルBi を用い
て、再びテーブルルックアップとジャンプを実行する。
【0023】シンボル配列図200に示すように配列し
ているハフマンコードを読み出す複数のCi のコード
は、次の通りである。 Ci : [do whatever additional processing is required, using the decoded value in bx ] do the table lookup and indirect JMP again, using the tables for state Bi. ([bx内の復号値を用いて、必要な別の処理は何でも行
う。]ステートBi のテーブルを用いて、テーブルルッ
クアップと再度の間接的ジャンプJMPを行う。)但
し、このアクション番号iは、次のステート番号と同じ
である。アクションCi のこの番号iは、現在のステー
ト番号+(プラス)復号化されたシンボルの長さ、であ
る。このように、ビット位置合わせポインタ206は、
そのとき復号されたシンボルのビット数分だけ先に進め
られる。
ているハフマンコードを読み出す複数のCi のコード
は、次の通りである。 Ci : [do whatever additional processing is required, using the decoded value in bx ] do the table lookup and indirect JMP again, using the tables for state Bi. ([bx内の復号値を用いて、必要な別の処理は何でも行
う。]ステートBi のテーブルを用いて、テーブルルッ
クアップと再度の間接的ジャンプJMPを行う。)但
し、このアクション番号iは、次のステート番号と同じ
である。アクションCi のこの番号iは、現在のステー
ト番号+(プラス)復号化されたシンボルの長さ、であ
る。このように、ビット位置合わせポインタ206は、
そのとき復号されたシンボルのビット数分だけ先に進め
られる。
【0024】統計的復号化方法10を行うには、必要な
データテーブルとジャンプテーブルに正確なテーブルエ
ントリ(項目)を予め与えておくことができる。これ
は、オフライン(offline) のアルゴリズムによって、あ
り得る全てのステート内のあり得る全てのバイト値を決
定し、データテーブルとジャンプテーブルに適切なアク
ションと値を格納することにより行う。オフラインのア
ルゴリズムによる決定は、Ci アクションについて、一
意的に(unambiguosly)行われる。
データテーブルとジャンプテーブルに正確なテーブルエ
ントリ(項目)を予め与えておくことができる。これ
は、オフライン(offline) のアルゴリズムによって、あ
り得る全てのステート内のあり得る全てのバイト値を決
定し、データテーブルとジャンプテーブルに適切なアク
ションと値を格納することにより行う。オフラインのア
ルゴリズムによる決定は、Ci アクションについて、一
意的に(unambiguosly)行われる。
【0025】ここまでの高速統計的復号化方法10の説
明においては、ジャンプブロック34を介して入力され
るステートは、C0 、C1 、...C7 の合計8個であ
る。これら8個のステートCi の各々について、256
項目のエントリのあるジャンプテーブルと、各ジャンプ
テーブル毎に512バイトの記憶空間が必要である。ス
テートCi の各々についても、さらに256バイトのサ
ンプルサイズの値テーブルが必要である。このように、
合計約6キロバイトのテーブル空間が、ハフマンシンボ
ル配列図200によって一般化して表される8個全部の
ステートCi について必要になる。
明においては、ジャンプブロック34を介して入力され
るステートは、C0 、C1 、...C7 の合計8個であ
る。これら8個のステートCi の各々について、256
項目のエントリのあるジャンプテーブルと、各ジャンプ
テーブル毎に512バイトの記憶空間が必要である。ス
テートCi の各々についても、さらに256バイトのサ
ンプルサイズの値テーブルが必要である。このように、
合計約6キロバイトのテーブル空間が、ハフマンシンボ
ル配列図200によって一般化して表される8個全部の
ステートCi について必要になる。
【0026】ハフマンシンボル配列図300によって表
されるのは、分断された(split) コードの場合である。
この場合、復号化中の圧縮されたビットストリーム中の
バイト境界に対して、ハフマンのシンボルがとり得る境
界位置の配列の第2の態様を表している。この分断され
たコードの場合、次に復号化されるハフマンシンボル
は、バイト境界302、304を有する現在のバイト3
10内に、完全には収まりきれない。バイト境界304
は、次のシンボルの中に位置し、このシンボルの一部
は、次のバイト境界304、306を有する次のバイト
312内に存在する。境界位置判断18によりシンボル
の境界位置がこのように判断された場合、統計的復号化
方法10の実行はパス50を通って先に進む。
されるのは、分断された(split) コードの場合である。
この場合、復号化中の圧縮されたビットストリーム中の
バイト境界に対して、ハフマンのシンボルがとり得る境
界位置の配列の第2の態様を表している。この分断され
たコードの場合、次に復号化されるハフマンシンボル
は、バイト境界302、304を有する現在のバイト3
10内に、完全には収まりきれない。バイト境界304
は、次のシンボルの中に位置し、このシンボルの一部
は、次のバイト境界304、306を有する次のバイト
312内に存在する。境界位置判断18によりシンボル
の境界位置がこのように判断された場合、統計的復号化
方法10の実行はパス50を通って先に進む。
【0027】シンボル配列図300によって表される場
合、ハフマンシンボルはフリービット部分内に位置する
バイト境界304によって分断される。このシンボルの
フリービット部分は、現在のバイト310から次のバイ
ト312にまで延びる複数のxのシーケンスとして表さ
れる。これは、復号化方法10による復号化中の圧縮さ
れたビットストリーム中のハフマンシンボルのプレフィ
ックス内にバイト境界が位置する場合とは、区別され
る。
合、ハフマンシンボルはフリービット部分内に位置する
バイト境界304によって分断される。このシンボルの
フリービット部分は、現在のバイト310から次のバイ
ト312にまで延びる複数のxのシーケンスとして表さ
れる。これは、復号化方法10による復号化中の圧縮さ
れたビットストリーム中のハフマンシンボルのプレフィ
ックス内にバイト境界が位置する場合とは、区別され
る。
【0028】分断されたコードの場合、統計的復号化方
法10により、完全に現在のバイト310内の値だけに
基づいてどのアクションをとるかを決定することは、ま
だ可能である。現在のバイト310中の複数のPの列で
示されるシンボルプレフィックスは、現在のバイト31
0中に完全に含まれているので、ハフマンのテーブルT
i のどの行Rが使われているかは分かる。したがって、
復号化中のハフマンシンボル全体の中のフリービットx
の数も分かる。このようにして、次のバイト312中に
あるフリービットの数が決定できる。
法10により、完全に現在のバイト310内の値だけに
基づいてどのアクションをとるかを決定することは、ま
だ可能である。現在のバイト310中の複数のPの列で
示されるシンボルプレフィックスは、現在のバイト31
0中に完全に含まれているので、ハフマンのテーブルT
i のどの行Rが使われているかは分かる。したがって、
復号化中のハフマンシンボル全体の中のフリービットx
の数も分かる。このようにして、次のバイト312中に
あるフリービットの数が決定できる。
【0029】このようにして、ブロック54に示すよう
にレジスタdxに基づくテーブルと現在のステートとから
得られる復号値をレジスタbxに格納し、ブロック58に
示すよううに次のバイト312をレジスタdxに読み込む
ことにより、このハフマンシンボルの復号化を完了する
ことができる。ブロック62に示されるように次のバイ
ト312から既知の数の先頭のビットが抽出され、この
バイト312から抽出されたビットはデータテーブルか
ら読み出された基準となる値に加えられ、ブロック66
に示すようにインデックスが形成される。このように、
この処理により、統計的復号化方法10内で、復号値V
i ではなく、インデックスIi が得られる。したがっ
て、インデックスIi から最終的復号値Vi を得るよう
に、さらに変換(translation) を実行する必要がある。
この処理により復号値Vi が得られると、ブロック70
に示されるようにレジスタbxに格納される。それから、
アクションSi へのジャンプが実行され、ブロック7
4、78に示すようにレジスタbx内の情報に基づいて、
アクションSi 内での処理が進行する。
にレジスタdxに基づくテーブルと現在のステートとから
得られる復号値をレジスタbxに格納し、ブロック58に
示すよううに次のバイト312をレジスタdxに読み込む
ことにより、このハフマンシンボルの復号化を完了する
ことができる。ブロック62に示されるように次のバイ
ト312から既知の数の先頭のビットが抽出され、この
バイト312から抽出されたビットはデータテーブルか
ら読み出された基準となる値に加えられ、ブロック66
に示すようにインデックスが形成される。このように、
この処理により、統計的復号化方法10内で、復号値V
i ではなく、インデックスIi が得られる。したがっ
て、インデックスIi から最終的復号値Vi を得るよう
に、さらに変換(translation) を実行する必要がある。
この処理により復号値Vi が得られると、ブロック70
に示されるようにレジスタbxに格納される。それから、
アクションSi へのジャンプが実行され、ブロック7
4、78に示すようにレジスタbx内の情報に基づいて、
アクションSi 内での処理が進行する。
【0030】シンボル配列図300により表されるよう
な、シンボル境界位置に関するアクションは分断のアク
ションと呼ばれる。これらの分断のアクションは、この
発明の高速統計的復号化方法10内のS1 、
S2 、...S8 として示される。分断のアクションS
i のアクション番号iの値は、次のバイト312から抽
出され、かつ現在のバイト310によりデータテーブル
から得られる基準となる値に加えられる、フリービット
xの数を示す。テーブルルックアップとジャンプは、ル
ックアップブロック74に示されるこの値に基づいて行
われる。したがって、iの値は、ステートマシンにより
次に入力されるステートをも示している。このステート
は、Bi mod 8 である。テーブルルックアップとジャン
プは、ルックアップブロック74に示されるように、こ
の値に基づいて行われる。したがって、アクションSi
のコードは、次のように表すことができる。 Si : Get new byte from bit stream into dx Extract i bits from dx, add to base value in bx bx = IndexToValue (the above sum) [do whatever additional processing is required, using the decoded value in bx ] Do the table lookup and indirect JMP again, using the tables for state B i mod 8 (ビットストリームより新しいバイトを取り込みdxに入
れる。dxよりi個のビットを抽出し、bx内の基準の値に
加える。 bx = IndexToValue(上記合計) [bx内の復号値を用いて、必要な別の処理は何でも行
う。] ステートBi mod 8 のテーブルを用いて、テーブルルッ
クアップと再度の間接的ジャンプJMPを行う。)
な、シンボル境界位置に関するアクションは分断のアク
ションと呼ばれる。これらの分断のアクションは、この
発明の高速統計的復号化方法10内のS1 、
S2 、...S8 として示される。分断のアクションS
i のアクション番号iの値は、次のバイト312から抽
出され、かつ現在のバイト310によりデータテーブル
から得られる基準となる値に加えられる、フリービット
xの数を示す。テーブルルックアップとジャンプは、ル
ックアップブロック74に示されるこの値に基づいて行
われる。したがって、iの値は、ステートマシンにより
次に入力されるステートをも示している。このステート
は、Bi mod 8 である。テーブルルックアップとジャン
プは、ルックアップブロック74に示されるように、こ
の値に基づいて行われる。したがって、アクションSi
のコードは、次のように表すことができる。 Si : Get new byte from bit stream into dx Extract i bits from dx, add to base value in bx bx = IndexToValue (the above sum) [do whatever additional processing is required, using the decoded value in bx ] Do the table lookup and indirect JMP again, using the tables for state B i mod 8 (ビットストリームより新しいバイトを取り込みdxに入
れる。dxよりi個のビットを抽出し、bx内の基準の値に
加える。 bx = IndexToValue(上記合計) [bx内の復号値を用いて、必要な別の処理は何でも行
う。] ステートBi mod 8 のテーブルを用いて、テーブルルッ
クアップと再度の間接的ジャンプJMPを行う。)
【0031】ハフマンシンボル配列図400によって表
されるシンボルの境界位置において、次のコードワード
のシンボルのプレフィックスの一部分は、バイト境界4
02、404を有する現在のバイト410の外側にあ
る。プレフィックスの残りは、バイト境界404、40
6を有する次のバイト412に含まれている。境界位置
判断18により、この境界位置が有ると判断された場
合、高速統計的復号化方法10の実行は、境界位置判断
18よりパス90を通って先へ進められる。そして、ブ
ロック96に示されるように後続のバイト514が取り
出され、レジスタdxに格納される。
されるシンボルの境界位置において、次のコードワード
のシンボルのプレフィックスの一部分は、バイト境界4
02、404を有する現在のバイト410の外側にあ
る。プレフィックスの残りは、バイト境界404、40
6を有する次のバイト412に含まれている。境界位置
判断18により、この境界位置が有ると判断された場
合、高速統計的復号化方法10の実行は、境界位置判断
18よりパス90を通って先へ進められる。そして、ブ
ロック96に示されるように後続のバイト514が取り
出され、レジスタdxに格納される。
【0032】シンボルの配列図400に示される種類の
シンボルの境界位置を取り扱うために、統計的復号化方
法10によりステートマシンに別のステートを与える。
シンボルプレフィックスがバイト境界404によって現
在のバイト410と次のバイト412に分断されること
によって形成された、一意的な各部分シンボルプレフィ
ックスの各々に対して、このような1つの別のステート
が与えられる。
シンボルの境界位置を取り扱うために、統計的復号化方
法10によりステートマシンに別のステートを与える。
シンボルプレフィックスがバイト境界404によって現
在のバイト410と次のバイト412に分断されること
によって形成された、一意的な各部分シンボルプレフィ
ックスの各々に対して、このような1つの別のステート
が与えられる。
【0033】テーブルTi 中のハフマンシンボルと圧縮
されたビットストリーム中のバイトの境界との間でのこ
の類型の境界位置として出現し得る、部分プレフィック
スの全集合(set) を決定するために、シンボルのプレフ
ィックスとして有効な全てのあり得る2進ストリングが
決定される。そして、このようにして決定された有効な
各プレフィックスの最初のi個のビットによって形成さ
れる部分ストリング(substring) は、有効な部分プレフ
ィックスと判断される。このような文脈(context) にお
いては、iは1〜P(k)−1の間で変化し得ること
が、理解されよう。このようにして決定される全ての一
意的な部分ストリングの集合が、部分シンボルプレフィ
ックスの集合である。
されたビットストリーム中のバイトの境界との間でのこ
の類型の境界位置として出現し得る、部分プレフィック
スの全集合(set) を決定するために、シンボルのプレフ
ィックスとして有効な全てのあり得る2進ストリングが
決定される。そして、このようにして決定された有効な
各プレフィックスの最初のi個のビットによって形成さ
れる部分ストリング(substring) は、有効な部分プレフ
ィックスと判断される。このような文脈(context) にお
いては、iは1〜P(k)−1の間で変化し得ること
が、理解されよう。このようにして決定される全ての一
意的な部分ストリングの集合が、部分シンボルプレフィ
ックスの集合である。
【0034】このようにして、m個の部分シンボルプレ
フィックスがあれば、別のm個のステートが高速統計的
復号化方法10のステートマシンに加えられる。これら
付加されたm個のステート、即ち付加されたm個のアク
ションは、P0 、P1 、...Pm-1 として表示され
る。部分プレフィックスPi があるときは、さらにm個
のアクションPi が加えられる。アクションPi は次の
オペレーションを行う。 Pi : get new byte from bit stream into dx do the table lookup and indirect JMP again, using the tables for state Pi (ビットストリームdxより新しいバイトを取り込む。ス
テートPi のテーブルを用いて、テーブルルックアップ
と再度の間接ジャンプJMPを行う。) プレフィックスのステートPi が決まると、その次のア
クションは常にCi アクションかSi アクションであ
る。これは、統計的復号化方法10において、ハフマン
のコードブックに課せられる式(1)と式(2)の制約
から導かれる。この点で、Ci アクションまたはSi ア
クションのいずれを実行するかの決定は、判断98にお
いてなされ、続いて、実行はパス22またはパス50を
通って進められる。
フィックスがあれば、別のm個のステートが高速統計的
復号化方法10のステートマシンに加えられる。これら
付加されたm個のステート、即ち付加されたm個のアク
ションは、P0 、P1 、...Pm-1 として表示され
る。部分プレフィックスPi があるときは、さらにm個
のアクションPi が加えられる。アクションPi は次の
オペレーションを行う。 Pi : get new byte from bit stream into dx do the table lookup and indirect JMP again, using the tables for state Pi (ビットストリームdxより新しいバイトを取り込む。ス
テートPi のテーブルを用いて、テーブルルックアップ
と再度の間接ジャンプJMPを行う。) プレフィックスのステートPi が決まると、その次のア
クションは常にCi アクションかSi アクションであ
る。これは、統計的復号化方法10において、ハフマン
のコードブックに課せられる式(1)と式(2)の制約
から導かれる。この点で、Ci アクションまたはSi ア
クションのいずれを実行するかの決定は、判断98にお
いてなされ、続いて、実行はパス22またはパス50を
通って進められる。
【0035】P(k)≦8とF(k)≦8の条件によ
り、統計的復号化方法10により復号化中の圧縮された
ビットストリームに出現し得る最悪の場合は、ハフマン
シンボル配列図500により表される。ハフマンシンボ
ル配列図500の境界位置を有するシンボルは、許容さ
れる最大のシンボルプレフィックス長である8ビットを
有する。これは、シンボルの配列図500中の現在のバ
イト510と次のバイト512にまたがりバイト境界5
04で分断された8個のPビット列として表される。配
列図500のハフマンシンボルは、また、次のバイト5
12とそれに続くバイト514にまたがりバイト境界5
06で分断された8個のxビット列として示されたフリ
ービット長8ビットを有している。シンボルの配列図5
00の境界位置を有するシンボルは、高速統計的復号化
方法10内で復号化されるものの内、最も復号化が難し
いものである。
り、統計的復号化方法10により復号化中の圧縮された
ビットストリームに出現し得る最悪の場合は、ハフマン
シンボル配列図500により表される。ハフマンシンボ
ル配列図500の境界位置を有するシンボルは、許容さ
れる最大のシンボルプレフィックス長である8ビットを
有する。これは、シンボルの配列図500中の現在のバ
イト510と次のバイト512にまたがりバイト境界5
04で分断された8個のPビット列として表される。配
列図500のハフマンシンボルは、また、次のバイト5
12とそれに続くバイト514にまたがりバイト境界5
06で分断された8個のxビット列として示されたフリ
ービット長8ビットを有している。シンボルの配列図5
00の境界位置を有するシンボルは、高速統計的復号化
方法10内で復号化されるものの内、最も復号化が難し
いものである。
【0036】シンボル配列図500の境界位置を有する
シンボルにおいて、復号化すべきシンボルのプレフィッ
クスは、ビット位置合わせポインタ502で示される現
在のバイト510のビット7の位置から始まる。その結
果、現在のバイト510内にはシンボルプレフィックス
の1ビットのみが存在し、次のバイト512内には7個
のプレフィックスビットが存在する。しかし、この最悪
の場合であっても、式(1)の制約から、シンボルプレ
フィックスは次のバイト512内で終わることになる。
したがって、第2のPi アクションは必要とされず、全
てのフリービットxは続きのバイト514内に収まるこ
とになる。また、式(2)の制約のため、全てのフリー
ビットxは続くバイト514内に収まることになること
が理解されよう。このようにして、この時点において、
図500の境界位置を有する統計的シンボルを決定する
には、常に、Pi アクションで充分である。しかし、S
iアクションが常に必要になるわけではないことは、理
解されよう。ハフマンシンボルのフリービットが次のバ
イト512で終わる場合は、1つのCi アクションだけ
が必要になり、それに続くバイト514の取り出しは必
要ではない。
シンボルにおいて、復号化すべきシンボルのプレフィッ
クスは、ビット位置合わせポインタ502で示される現
在のバイト510のビット7の位置から始まる。その結
果、現在のバイト510内にはシンボルプレフィックス
の1ビットのみが存在し、次のバイト512内には7個
のプレフィックスビットが存在する。しかし、この最悪
の場合であっても、式(1)の制約から、シンボルプレ
フィックスは次のバイト512内で終わることになる。
したがって、第2のPi アクションは必要とされず、全
てのフリービットxは続きのバイト514内に収まるこ
とになる。また、式(2)の制約のため、全てのフリー
ビットxは続くバイト514内に収まることになること
が理解されよう。このようにして、この時点において、
図500の境界位置を有する統計的シンボルを決定する
には、常に、Pi アクションで充分である。しかし、S
iアクションが常に必要になるわけではないことは、理
解されよう。ハフマンシンボルのフリービットが次のバ
イト512で終わる場合は、1つのCi アクションだけ
が必要になり、それに続くバイト514の取り出しは必
要ではない。
【0037】ハフマンシンボルが配列図400に示すよ
うに配列している場合、統計的復号化方法10のアプリ
ケーションは、要約すると次のようになる。ハフマンシ
ンボルに対する制約、即ち、P(k)は8以下およびF
(k)は8以下、を課することによって、ハフマンのコ
ードブック内の全てのコードワードは、Ci アクショ
ン、Si アクション、またはPi アクション(Pi アク
ションはさらにCi アクション若しくはSi アクション
のいずれかへ続く。)のいずれかによって、完全に復号
化できる。これによって、高速統計的復号化方法10を
用いて、Bi ステートとPi ステートにより、あり得る
全てのビット境界位置におけるあり得る全てのコードを
充分に復号化することができることが、説明される。
うに配列している場合、統計的復号化方法10のアプリ
ケーションは、要約すると次のようになる。ハフマンシ
ンボルに対する制約、即ち、P(k)は8以下およびF
(k)は8以下、を課することによって、ハフマンのコ
ードブック内の全てのコードワードは、Ci アクショ
ン、Si アクション、またはPi アクション(Pi アク
ションはさらにCi アクション若しくはSi アクション
のいずれかへ続く。)のいずれかによって、完全に復号
化できる。これによって、高速統計的復号化方法10を
用いて、Bi ステートとPi ステートにより、あり得る
全てのビット境界位置におけるあり得る全てのコードを
充分に復号化することができることが、説明される。
【0038】統計的復号化方法10内の配列図500を
有するシンボルに対する、さらに別のPi のステートを
付加すると、ステートマシンには、m+8個のステート
が存在することになる。これらm+8個の各ステートに
は、256項目のエントリのジャンプテーブルが必要に
なり、各ジャンプテーブルには512バイト(bit) のメ
モリが必要である。ステートマシンの各ステートには、
256バイトのデータテーブルも必要であり、よって、
データテーブルを格納するのに、合計3/4*(8+
m)キロバイトのメモリが必要である。例えば、通常の
ハフマンのコードブックの一意的な部分プレフィックス
は、テーブルIIIのような形で示すことができる。
有するシンボルに対する、さらに別のPi のステートを
付加すると、ステートマシンには、m+8個のステート
が存在することになる。これらm+8個の各ステートに
は、256項目のエントリのジャンプテーブルが必要に
なり、各ジャンプテーブルには512バイト(bit) のメ
モリが必要である。ステートマシンの各ステートには、
256バイトのデータテーブルも必要であり、よって、
データテーブルを格納するのに、合計3/4*(8+
m)キロバイトのメモリが必要である。例えば、通常の
ハフマンのコードブックの一意的な部分プレフィックス
は、テーブルIIIのような形で示すことができる。
【0039】
【表3】 テーブルIII 1 11 111 1111 11111 111111 1111111
【0040】この場合、付加されたステートの数mは値
7をとる。この結果、この別の7個のステートを元の8
個のステートに加えると、ステートマシン中に合計15
のステートが存在する。このようにして、テーブルII
Iの例におけるテーブルを格納するメモリとして11キ
ロバイトが必要であることが計算される。別の通常のコ
ードブック(図示せず)については、mは値12をとり
得る。この場合、合計20個のステートが存在し、した
がって、テーブルの格納には15キロバイトの記憶空間
が必要になる。多くの場合、、これらのテーブルを格納
するのに必要なメモリ量を調整することにより、実行速
度を大幅に増大させることができる。
7をとる。この結果、この別の7個のステートを元の8
個のステートに加えると、ステートマシン中に合計15
のステートが存在する。このようにして、テーブルII
Iの例におけるテーブルを格納するメモリとして11キ
ロバイトが必要であることが計算される。別の通常のコ
ードブック(図示せず)については、mは値12をとり
得る。この場合、合計20個のステートが存在し、した
がって、テーブルの格納には15キロバイトの記憶空間
が必要になる。多くの場合、、これらのテーブルを格納
するのに必要なメモリ量を調整することにより、実行速
度を大幅に増大させることができる。
【0041】次に、統計的復号化方法10に必要なコー
ド空間の量を決定することになる。空間として、8個の
Ci アクションの各々、分断されたコードの場合のSi
アクションの各々、および統計的復号化方法10内にP
i として設定されるm個のアクションの各々の分が、必
要になる。最初に、Si アクションの数sが決定され
る。Si アクションの数sは、次のように表される。
ド空間の量を決定することになる。空間として、8個の
Ci アクションの各々、分断されたコードの場合のSi
アクションの各々、および統計的復号化方法10内にP
i として設定されるm個のアクションの各々の分が、必
要になる。最初に、Si アクションの数sが決定され
る。Si アクションの数sは、次のように表される。
【0042】
【数3】 s = Max (F(k)) 式(3)
【0043】このようにして、式(2)について説明し
たようにF(k)に課される制約のために、その最大値
は常に8より小さくなることが理解されよう。典型的な
場合には、コードの部分の各々は比較的小さくなる、ま
たは比較的小さくすることができる。高速統計的復号化
方法10に必要なコードの空間は、このように非常に理
にかなって適当なものである。通常、コードに必要な空
間は統計的復号化方法10のデータテーブルとして必要
とされる空間よりもはるかに小さい。
たようにF(k)に課される制約のために、その最大値
は常に8より小さくなることが理解されよう。典型的な
場合には、コードの部分の各々は比較的小さくなる、ま
たは比較的小さくすることができる。高速統計的復号化
方法10に必要なコードの空間は、このように非常に理
にかなって適当なものである。通常、コードに必要な空
間は統計的復号化方法10のデータテーブルとして必要
とされる空間よりもはるかに小さい。
【0044】オフラインでの計算値とジャンプテーブル
に加えて、他にコードすべきものには、Ci 、Si およ
びPi アクションが含まれる。これら3種の類型のアク
ションの擬似コード(pseudocode)によるインプリメンテ
ーション(プログラム化、implementation) がテーブル
IVに示されている。テーブルIVの準コードにおい
て、DoStuff は統計的復号化方法10を用いたハフマン
の復号値Vi を得ることの他に、ビットストリームSi
を復号化するために必要な他の処理(仕事)を表してい
る。上記の復号化方法10によるハフマンの復号化のコ
ストを見積もるために、DoStuff の実行に必要な命令サ
イクルは0個(即ち必要でない)と仮定する。
に加えて、他にコードすべきものには、Ci 、Si およ
びPi アクションが含まれる。これら3種の類型のアク
ションの擬似コード(pseudocode)によるインプリメンテ
ーション(プログラム化、implementation) がテーブル
IVに示されている。テーブルIVの準コードにおい
て、DoStuff は統計的復号化方法10を用いたハフマン
の復号値Vi を得ることの他に、ビットストリームSi
を復号化するために必要な他の処理(仕事)を表してい
る。上記の復号化方法10によるハフマンの復号化のコ
ストを見積もるために、DoStuff の実行に必要な命令サ
イクルは0個(即ち必要でない)と仮定する。
【0045】
【表4】 テーブルIV Ci : DoStuff GetNewByte [for C0 action only] (C0 アクションについてのみ) NextAction Si : GetNewByte CaluculateValue DoStuff NextAction Pi : GetNewByte NextAction
【0046】テーブルVは、テーブルIVにおいて引用
されているさらに3個のマクロ命令を列挙したものであ
る。これらのものは、特に画像処理システムにおける高
速統計的復号化方法10のインプリメンテーション(プ
ログラム化、実施)において、役に立つものである。こ
れら3個のマクロ命令は、GetNewByte、CaluculateValu
e およびNextActionである。これら3個のマクロ命令に
おいて、ds:bp は圧縮されたビットストリームを指し、
dxは復号化中の圧縮されたビットストリームの中からの
現在のバイトを保持し、bxは各シンボルの復号値Vi を
保持する。
されているさらに3個のマクロ命令を列挙したものであ
る。これらのものは、特に画像処理システムにおける高
速統計的復号化方法10のインプリメンテーション(プ
ログラム化、実施)において、役に立つものである。こ
れら3個のマクロ命令は、GetNewByte、CaluculateValu
e およびNextActionである。これら3個のマクロ命令に
おいて、ds:bp は圧縮されたビットストリームを指し、
dxは復号化中の圧縮されたビットストリームの中からの
現在のバイトを保持し、bxは各シンボルの復号値Vi を
保持する。
【0047】
【表5】 テーブルV Get NewByte : mov dl, ds[bp] inc bp CaluculateValue : mov cl, BitExtractTableI[edx] mov bl, IndexToValue[ebx+ecx] NextAction : mov bl, StateIDataTable[edx] jmp StateIJumpTable[edx*2]
【0048】テーブルVの擬似コードの式において、Bi
tExtractTableIのI の値、StateIDataTable およびStat
eIJumpTable は、アクションCi 、Si およびPi のア
クションの添字iと同じ値となるようにハードウェア上
にコード化(ハードコード化)することができる。BitE
xtractTable というテーブルは、それぞれ256バイト
からなるs個の付加されたテーブルである。これを用い
て、1個のバイトの始点から複数のビットを抽出するこ
とができる。例えば、これを用いて、シンボル配列図3
00の次のバイト312の残りのフリービットを抽出す
ることができる。この種のビット抽出は、次のバイト3
12をシフトするやり方よりもはるかに速いので、より
好ましい。このように、この発明の高速統計的復号化方
法10に必要な全テーブル空間(total table space)
は、次の通りである。
tExtractTableIのI の値、StateIDataTable およびStat
eIJumpTable は、アクションCi 、Si およびPi のア
クションの添字iと同じ値となるようにハードウェア上
にコード化(ハードコード化)することができる。BitE
xtractTable というテーブルは、それぞれ256バイト
からなるs個の付加されたテーブルである。これを用い
て、1個のバイトの始点から複数のビットを抽出するこ
とができる。例えば、これを用いて、シンボル配列図3
00の次のバイト312の残りのフリービットを抽出す
ることができる。この種のビット抽出は、次のバイト3
12をシフトするやり方よりもはるかに速いので、より
好ましい。このように、この発明の高速統計的復号化方
法10に必要な全テーブル空間(total table space)
は、次の通りである。
【0049】
【数4】 全テーブル空間 = (3/4*(8+m) + s/4) K バイト 式(4)
【0050】たいていのハフマンのシンボルは、ハフマ
ン符号化方法の性質上短い。したがって、たいていの場
合、1つのハフマンシンボル全体はハフマンシンボル配
列図200中の現在のバイト208のような1つの現在
のバイトに収まる。シンボル配列図200で表される類
型の場合、単一のCi のアクションだけで充分に、復号
値 Vi を得、さらに別の処理のためにレジスタbxに格納
することができる。これには、通常のプロセッサ中でた
った2個の命令、1つのMOV 命令および1つのJMP 命
令、だけで充分である。幾つかのシンボルについては、
シンボル配列図300、400に示すSi アクションま
たはPi アクションが必要である。しかし、これらのシ
ンボルにおいても、Ci アクションに必要な命令に対
し、別の命令を少し加えるだけでよい。
ン符号化方法の性質上短い。したがって、たいていの場
合、1つのハフマンシンボル全体はハフマンシンボル配
列図200中の現在のバイト208のような1つの現在
のバイトに収まる。シンボル配列図200で表される類
型の場合、単一のCi のアクションだけで充分に、復号
値 Vi を得、さらに別の処理のためにレジスタbxに格納
することができる。これには、通常のプロセッサ中でた
った2個の命令、1つのMOV 命令および1つのJMP 命
令、だけで充分である。幾つかのシンボルについては、
シンボル配列図300、400に示すSi アクションま
たはPi アクションが必要である。しかし、これらのシ
ンボルにおいても、Ci アクションに必要な命令に対
し、別の命令を少し加えるだけでよい。
【0051】高速統計的復号化方法10によって得られ
る復号値は実際のVi であり、復号値Vi を得るための
単なるインデックス Ii ではない。Ci アクションの場
合、テーブルVのIndexToValue変換はオフラインで実行
してもよく、その結果の値はStateIDataTable に直接格
納させる。これは、Ci アクションがSi アクションよ
りも最適化されるひとつの方法である。多くの通常のプ
ロセッサにおいては、復号値Vi は非トリビアルな順列
(non-trivial permutation) のインデックス Ii であ
る。このように、多くのコードワードについて実質的に
自由にIndexToValueを実行する能力は、統計的復号化方
法10において重要な利点となる。
る復号値は実際のVi であり、復号値Vi を得るための
単なるインデックス Ii ではない。Ci アクションの場
合、テーブルVのIndexToValue変換はオフラインで実行
してもよく、その結果の値はStateIDataTable に直接格
納させる。これは、Ci アクションがSi アクションよ
りも最適化されるひとつの方法である。多くの通常のプ
ロセッサにおいては、復号値Vi は非トリビアルな順列
(non-trivial permutation) のインデックス Ii であ
る。このように、多くのコードワードについて実質的に
自由にIndexToValueを実行する能力は、統計的復号化方
法10において重要な利点となる。
【0052】統計的復号化方法10内である選択された
ハフマンのコードブックについて各シンボルを復号化す
るのに必要な、命令の数の統計的平均を決定すると便利
である。これを決定をする場合、統計的復号化方法10
内にそれぞれ異なる実行時間を有する4種類だけのアク
ションが存在することを確認しておく。これら4種の類
型のアクションとは、(1)C0 、(2)Ci 、但しi
は0より大(i>0)、(3)Si および(4)Pi で
ある。
ハフマンのコードブックについて各シンボルを復号化す
るのに必要な、命令の数の統計的平均を決定すると便利
である。これを決定をする場合、統計的復号化方法10
内にそれぞれ異なる実行時間を有する4種類だけのアク
ションが存在することを確認しておく。これら4種の類
型のアクションとは、(1)C0 、(2)Ci 、但しi
は0より大(i>0)、(3)Si および(4)Pi で
ある。
【0053】C0 に要する実行時間と残りのCi アクシ
ョンに要する実行時間とは異なるが、その理由は、テー
ブルVに示されるように、C0 に要する実行時間には余
分なGetNewByte機能に要する付加的時間が含まれている
ことによる。この余分なGetNewByte機能が必要な理由
は、C0 は定義によりハフマンシンボルがシンボル配列
図200の現在のバイト208内になんとか収まること
を示すものだからである。このように、現在のバイト2
08を復号化した後は、ビット位置合わせポインタ20
6は次のバイト210のビット0に位置する。これによ
り、現在のアクションの一部として次のバイト210の
取り出しが必要になる。
ョンに要する実行時間とは異なるが、その理由は、テー
ブルVに示されるように、C0 に要する実行時間には余
分なGetNewByte機能に要する付加的時間が含まれている
ことによる。この余分なGetNewByte機能が必要な理由
は、C0 は定義によりハフマンシンボルがシンボル配列
図200の現在のバイト208内になんとか収まること
を示すものだからである。このように、現在のバイト2
08を復号化した後は、ビット位置合わせポインタ20
6は次のバイト210のビット0に位置する。これによ
り、現在のアクションの一部として次のバイト210の
取り出しが必要になる。
【0054】これら4つの場合(C0 ,Ci ,Si ,P
i )の各々について、必要な命令数またはサイクル数
は、表記I0 ,IC ,IS およびIP によって表示され
る。主な定理として、各行RのP(k) およびF(k) で記
述されるコードテーブルTi について、この発明の統計
的復号化方法10を用いたハフマンシンボルの復号化に
必要な命令の数の平均は、次の式で近似される。
i )の各々について、必要な命令数またはサイクル数
は、表記I0 ,IC ,IS およびIP によって表示され
る。主な定理として、各行RのP(k) およびF(k) で記
述されるコードテーブルTi について、この発明の統計
的復号化方法10を用いたハフマンシンボルの復号化に
必要な命令の数の平均は、次の式で近似される。
【0055】
【数5】
【0056】式(5)を証明するため、簡単化のため、
統計的復号化方法10は、適正な統計的確率で出現する
ランダムな連結状態(concatenation) のコードワードを
含む圧縮された大きなビットストリームに対して動作す
るものと仮定する。ビットストリームSは大きいので、
コードテーブルTi の各行R中のコードは、8つの可能
なビット配列に均一に分布し、コードの終端は1つのバ
イトのビット位置iに出現するものと仮定できる。
統計的復号化方法10は、適正な統計的確率で出現する
ランダムな連結状態(concatenation) のコードワードを
含む圧縮された大きなビットストリームに対して動作す
るものと仮定する。ビットストリームSは大きいので、
コードテーブルTi の各行R中のコードは、8つの可能
なビット配列に均一に分布し、コードの終端は1つのバ
イトのビット位置iに出現するものと仮定できる。
【0057】式(5)により、コードテーブルTi の各
行Rに関与した各々の4種類のアクションの数の平均を
決定できる。このようにして、各行Ri と8つの可能な
ビット配列の各々について、C0 、Ci (i>0)、S
i およびPi の各々のアクションがどれだけの数、出現
したかが決定されよう。この決定において、C0 アクシ
ョンは1つしか出現しないことはあきらかで、このC0
アクションはコードの終端がビット7に位置する場合に
相当する。
行Rに関与した各々の4種類のアクションの数の平均を
決定できる。このようにして、各行Ri と8つの可能な
ビット配列の各々について、C0 、Ci (i>0)、S
i およびPi の各々のアクションがどれだけの数、出現
したかが決定されよう。この決定において、C0 アクシ
ョンは1つしか出現しないことはあきらかで、このC0
アクションはコードの終端がビット7に位置する場合に
相当する。
【0058】さらに、コードのバイト境界がフリービッ
トx の列内に出現する態様にはF(k) 通りあるので、S
i アクションの数sはF(k) であることが分かる。8つ
の可能な配列の中で3種類のC0 、Ci およびSi アク
ションは相互に排他的である。C0 、Ci およびSi の
アクションの数は合計8である。このように、Ci アク
ションの数は、8引く1(C0 の分の1)、引くF(k)
(Si の分のF(k) )で、8−1−F(k) =7−F(k)
となる。最後に、Pi アクションの数は、行内の部分シ
ンボルプレフィックスの数であるから、単純にP(k) −
1となる。これら列挙した4項目を合計して、それぞれ
に命令数(I0 ,IC ,IS ,およびIP )を掛ける
と、式(5)の角括弧[]で囲まれた項が与えられる。
トx の列内に出現する態様にはF(k) 通りあるので、S
i アクションの数sはF(k) であることが分かる。8つ
の可能な配列の中で3種類のC0 、Ci およびSi アク
ションは相互に排他的である。C0 、Ci およびSi の
アクションの数は合計8である。このように、Ci アク
ションの数は、8引く1(C0 の分の1)、引くF(k)
(Si の分のF(k) )で、8−1−F(k) =7−F(k)
となる。最後に、Pi アクションの数は、行内の部分シ
ンボルプレフィックスの数であるから、単純にP(k) −
1となる。これら列挙した4項目を合計して、それぞれ
に命令数(I0 ,IC ,IS ,およびIP )を掛ける
と、式(5)の角括弧[]で囲まれた項が与えられる。
【0059】式(5)内にある1/8の因子は、全8ビ
ット位置について計算したことによる8の因子に由来す
るものである。式(5)内にある1/2P(k)の因子は、
ハフマンコードの特性によるnビット長の単一シンボル
の出現確率が、近似的に1/2n となるためである。こ
れにより、行Rの単一コードの出現確率は、1/2
P(k)+F(k) となることが分かる。1行中に2F(k)個のコ
ードがあるので、フリービットについて全ての可能な値
を合計すると、行Rの全コードの出現確率は合計、2
F(k)/2P(k)+F(k) =1/2P(k)となる。
ット位置について計算したことによる8の因子に由来す
るものである。式(5)内にある1/2P(k)の因子は、
ハフマンコードの特性によるnビット長の単一シンボル
の出現確率が、近似的に1/2n となるためである。こ
れにより、行Rの単一コードの出現確率は、1/2
P(k)+F(k) となることが分かる。1行中に2F(k)個のコ
ードがあるので、フリービットについて全ての可能な値
を合計すると、行Rの全コードの出現確率は合計、2
F(k)/2P(k)+F(k) =1/2P(k)となる。
【0060】通常のプロセッサにハフマンの統計的復号
化方法10を用いた場合の性能(performance) を計測す
るために、式(5)を2回用い、4種類のアクションの
MOV命令とJMP 命令の数を別に計数した。GetNewByte機
能におけるMOV + INC 命令は、単一のMOV 命令として計
数されるが、これは実際そのように行われているため、
およびINC 命令が非常に速いためである。このような簡
単化を行った場合、MOV 命令とJMP 命令の数を、4種類
のアクションのそれぞれについて、テーブルVIに列挙
する。
化方法10を用いた場合の性能(performance) を計測す
るために、式(5)を2回用い、4種類のアクションの
MOV命令とJMP 命令の数を別に計数した。GetNewByte機
能におけるMOV + INC 命令は、単一のMOV 命令として計
数されるが、これは実際そのように行われているため、
およびINC 命令が非常に速いためである。このような簡
単化を行った場合、MOV 命令とJMP 命令の数を、4種類
のアクションのそれぞれについて、テーブルVIに列挙
する。
【0061】
【表6】 テーブルVI アクション C0 Ci Si Pi MOV 命令数 2 1 4 2 JMP 命令数 1 1 1 1
【0062】これらの数に対し、25MHzのプロセッ
サと33MHzのプロセッサ上で動作する(走る)2つ
の共通のアルゴリズムについて上記定理を適用すると、
テーブルVIIに示される結果が得られる。
サと33MHzのプロセッサ上で動作する(走る)2つ
の共通のアルゴリズムについて上記定理を適用すると、
テーブルVIIに示される結果が得られる。
【0063】
【表7】 テーブルVII 平均 平均 25MHz 33MHz MOV命令数 JMP命令数 プロセッサの プロセッサの サイクル数 サイクル数 2.3 1.1 およそ20 およそ8 2.1 1.2 およそ20 およそ8
【0064】たいていのハフマンの分布でも似たような
結果が得られると考えられる。この発明の方法では、コ
ードワード統計の正確さに対してあまり敏感ではない。
毎秒30フレーム、毎秒300キロシンボルの圧縮画像
についての、これらの結果は、25MHzのプロセッサ
の約24パーセント、および33MHzのプロセッサで
は約7パーセントが、統計的復号化方法10の処理に使
用されることが示される。
結果が得られると考えられる。この発明の方法では、コ
ードワード統計の正確さに対してあまり敏感ではない。
毎秒30フレーム、毎秒300キロシンボルの圧縮画像
についての、これらの結果は、25MHzのプロセッサ
の約24パーセント、および33MHzのプロセッサで
は約7パーセントが、統計的復号化方法10の処理に使
用されることが示される。
【0065】この発明の統計的復号化方法10を最適化
すれば、復号化方法10を収容した復元(decompressio
n) アルゴリズムの全体の実行を高速化することができ
るであろう。実行しうる最適化の1つとして、特別なC
i アクションの最適化が挙げられる。多くのアルゴリズ
ムにおいて、あるハフマン復号値は特別の意味を持つ。
例えば、先行技術のアルゴリズムのひとつにおいては、
複数の値のうちの16個はランレングス符号の0を表す
が、これらはその他の値とは別の方法で復号化されるも
のであ。また別の先行技術のアルゴリズムにおいては、
2個の特別な値があり、1個はブロックの終り、もう1
個はエスケープ(escape)を示すものがある。
すれば、復号化方法10を収容した復元(decompressio
n) アルゴリズムの全体の実行を高速化することができ
るであろう。実行しうる最適化の1つとして、特別なC
i アクションの最適化が挙げられる。多くのアルゴリズ
ムにおいて、あるハフマン復号値は特別の意味を持つ。
例えば、先行技術のアルゴリズムのひとつにおいては、
複数の値のうちの16個はランレングス符号の0を表す
が、これらはその他の値とは別の方法で復号化されるも
のであ。また別の先行技術のアルゴリズムにおいては、
2個の特別な値があり、1個はブロックの終り、もう1
個はエスケープ(escape)を示すものがある。
【0066】これらの特別な値をプログラム化(インプ
リメント)するのに有利な1つの方法は、各アクション
のDoStuff の部分に次のようなコードを持たせることで
ある。
リメント)するのに有利な1つの方法は、各アクション
のDoStuff の部分に次のようなコードを持たせることで
ある。
【0067】統計的復号化方法のアルゴリズム10内で
Si アクションが実行中の場合においては、このように
プログラム化しなければならないが、その理由は値valu
e は計算されるまでは未知だからである。しかし、Ci
アクションについては、値value はジャンテーブルのオ
フライン計算の間、暗黙のうちに(implicitly)知ること
ができる。よって、これらの場合、ジャンプテーブルに
特別のラベルを与えて、これを最適化することができ
る。これらの特別のラベルを調整して、特別なアクショ
ンに必要な処理だけを実行する特別なコード部分へのジ
ャンプが起きるようにできる。これらの特別なコード部
分は、C、SおよびPコード部分とは別のものである。
たいていのコードはCi アクションにより復号化される
ので、IF条件のテストを避けることにより、処理がかな
り節約できる。特に、特別のアクションが共通の場合、
これにより節約することができる。
Si アクションが実行中の場合においては、このように
プログラム化しなければならないが、その理由は値valu
e は計算されるまでは未知だからである。しかし、Ci
アクションについては、値value はジャンテーブルのオ
フライン計算の間、暗黙のうちに(implicitly)知ること
ができる。よって、これらの場合、ジャンプテーブルに
特別のラベルを与えて、これを最適化することができ
る。これらの特別のラベルを調整して、特別なアクショ
ンに必要な処理だけを実行する特別なコード部分へのジ
ャンプが起きるようにできる。これらの特別なコード部
分は、C、SおよびPコード部分とは別のものである。
たいていのコードはCi アクションにより復号化される
ので、IF条件のテストを避けることにより、処理がかな
り節約できる。特に、特別のアクションが共通の場合、
これにより節約することができる。
【0068】このようにして最適化した各々の特別のア
クションについて、8個のコード部分が存在し、その各
1個が8つの可能なビット配列の各々、したがって、8
つの可能なステートの各々に対するものである。また、
単一のパラメータをこれらの特別なコード部分またはル
ーチンへ StateDataTable を介してパスする(渡す)こ
ともできることを確認しておく。これは、例えば、リア
ルタイムの画像アプリケーションにおけるランレングス
復号化に必要なランレングスパラメータのパスに用いら
れる。
クションについて、8個のコード部分が存在し、その各
1個が8つの可能なビット配列の各々、したがって、8
つの可能なステートの各々に対するものである。また、
単一のパラメータをこれらの特別なコード部分またはル
ーチンへ StateDataTable を介してパスする(渡す)こ
ともできることを確認しておく。これは、例えば、リア
ルタイムの画像アプリケーションにおけるランレングス
復号化に必要なランレングスパラメータのパスに用いら
れる。
【0069】別の最適化には、さらに別の種類のアクシ
ョンとして、Eアクションと表示されるものがあり、こ
れは誤り(エラー)に応答して実行されるアクションと
して理解される。Eアクションは、たいていのハフマン
のコードブックでは、コードブックが閉じている場合を
除いて、コードワードの始点においては出現しえないあ
るビットシーケンスが存在することに基づくものであ
る。出現し得ないビットシーケンスを持つコードブック
の例として、8個の1で始まる有効なコードが存在しな
い構成とされた先行技術のコードブックが挙げられる。
ョンとして、Eアクションと表示されるものがあり、こ
れは誤り(エラー)に応答して実行されるアクションと
して理解される。Eアクションは、たいていのハフマン
のコードブックでは、コードブックが閉じている場合を
除いて、コードワードの始点においては出現しえないあ
るビットシーケンスが存在することに基づくものであ
る。出現し得ないビットシーケンスを持つコードブック
の例として、8個の1で始まる有効なコードが存在しな
い構成とされた先行技術のコードブックが挙げられる。
【0070】統計的復号化方法10のジャンプテーブル
を計算する場合、違反したコードワードに対応する全て
の位置に特別なEアクションを与えることができる。こ
れは次の2つの理由から都合がよい。(1)復号化中の
圧縮されたビットストリーム中に未訂正のデータ伝送エ
ラーが存在する場合に出現し得る、無効コードワードが
自動的に認識できる。この認識方法をエラー検出時の復
号化のアボート(異常時終了)に使うことができる。
(2)場合によっては、DoStuff 処理内の表に出ている
(陽の)カウンタを用いずに、圧縮されたビットストリ
ームの終りの自動検出を可能とすることにより、復号化
の高速化を図ることもできる。復号化開始前に、ビット
ストリームの終端の直後に違反コードワードを挿入する
ことができる。これにより、この発明のステートマシン
はEアクションにジャンプして、0の命令オーバーヘッ
ドで、即ち命令オーバーヘッドなしに、復号化を完了す
ることができる。
を計算する場合、違反したコードワードに対応する全て
の位置に特別なEアクションを与えることができる。こ
れは次の2つの理由から都合がよい。(1)復号化中の
圧縮されたビットストリーム中に未訂正のデータ伝送エ
ラーが存在する場合に出現し得る、無効コードワードが
自動的に認識できる。この認識方法をエラー検出時の復
号化のアボート(異常時終了)に使うことができる。
(2)場合によっては、DoStuff 処理内の表に出ている
(陽の)カウンタを用いずに、圧縮されたビットストリ
ームの終りの自動検出を可能とすることにより、復号化
の高速化を図ることもできる。復号化開始前に、ビット
ストリームの終端の直後に違反コードワードを挿入する
ことができる。これにより、この発明のステートマシン
はEアクションにジャンプして、0の命令オーバーヘッ
ドで、即ち命令オーバーヘッドなしに、復号化を完了す
ることができる。
【0071】さらに、圧縮されたビットストリームの設
計中に、エーラーコードをデリミタ(区切り)として指
定することができる。例えば、異なる処理を要する異な
るデータセクション間にエラーコードを挿入して、自由
に各セクションの終りを検出することができる。
計中に、エーラーコードをデリミタ(区切り)として指
定することができる。例えば、異なる処理を要する異な
るデータセクション間にエラーコードを挿入して、自由
に各セクションの終りを検出することができる。
【図1】図1は、この発明の高速統計的復号化方法を表
すフローチャートの一部である。
すフローチャートの一部である。
【図2】図2は、この発明の高速統計的復号化方法を表
すフローチャートの一部である。
すフローチャートの一部である。
【図3】図3は、この発明の高速統計的復号化方法を表
すフローチャートの一部である。
すフローチャートの一部である。
【図4】図4は、この発明の高速統計的復号化方法を表
すフローチャートの一部である。
すフローチャートの一部である。
【図5】図5は、図1〜図4の方法により復号化される
圧縮されたビットストリームのバイトの境界に対して、
統計的シンボルの配列と境界位置が完全なコードの類型
を表す、シンボルの配列と境界位置の図である。
圧縮されたビットストリームのバイトの境界に対して、
統計的シンボルの配列と境界位置が完全なコードの類型
を表す、シンボルの配列と境界位置の図である。
【図6】図6は、図1〜図4の方法により復号化される
圧縮されたビットストリームのバイトの境界に対して、
統計的シンボルの配列と境界位置が分断されたコードの
類型を表す、シンボルの配列と境界位置の図である。
圧縮されたビットストリームのバイトの境界に対して、
統計的シンボルの配列と境界位置が分断されたコードの
類型を表す、シンボルの配列と境界位置の図である。
【図7】図7は、図1〜図4の方法により復号化される
圧縮されたビットストリームのバイトの境界に対して、
統計的シンボルの配列と境界位置が分断されたプレフィ
ックスの類型を表す、シンボルの配列と境界位置の図で
ある。
圧縮されたビットストリームのバイトの境界に対して、
統計的シンボルの配列と境界位置が分断されたプレフィ
ックスの類型を表す、シンボルの配列と境界位置の図で
ある。
【図8】図8は、図1〜図4の方法により復号化される
圧縮されたビットストリームのバイトの境界に対して、
統計的シンボルとしてあり得る別の配列と境界位置を表
す、シンボルの配列と境界位置の図である。
圧縮されたビットストリームのバイトの境界に対して、
統計的シンボルとしてあり得る別の配列と境界位置を表
す、シンボルの配列と境界位置の図である。
Claims (11)
- 【請求項1】 バイト境界を有する複数のバイトに分割
されているデータストリーム中のシンボルであって、上
記バイト境界に対するシンボル境界位置を有するシンボ
ルを統計的に復号化して出力値を出力するシンボルの統
計的復号化方法であって、 (a)上記データストリームの中から、少なくとも上記
シンボルの一部を含む第1のバイトのデータを取り出す
ステップ、 (b)第1のバイトのバイト境界に対して、上記第1の
バイト内における上記シンボルの上記少なくとも一部の
境界位置を決定するステップ、 (c)その決定された境界位置に基づいて、第2のバイ
トのデータを取り出すステップ、および (d)このようにして取り出したデータに基づいて復号
値を決定するステップ、を具備するシンボルの統計的復
号化方法。 - 【請求項2】 請求項1に記載のシンボルの統計的復号
化方法において、ステップ(d)がテーブルルックアッ
プの実行を具備するシンボルの統計的復号化方法。 - 【請求項3】 請求項1に記載のシンボルの統計的復号
化方法において、上記第2のバイトのデータから、決定
された数のビットを抽出するステップを具備するシンボ
ルの統計的復号化方法。 - 【請求項4】 請求項3に記載のシンボルの統計的復号
化方法において、上記第1のバイトのデータと上記抽出
されたビットに基づいてインデックスを形成するステッ
プを具備するシンボルの統計的復号化方法。 - 【請求項5】 請求項4に記載のシンボルの統計的復号
化方法において、ステップ(d)が上記インデックスに
基づく復号値の決定を具備するシンボルの統計的復号化
方法。 - 【請求項6】 請求項3に記載のシンボルの統計的復号
化方法において、上記決定された数のビットとは上記デ
ータの上記第1のバイトに基づいて決定されたものであ
るシンボルの統計的復号化方法。 - 【請求項7】 請求項1に記載のシンボルの統計的復号
化方法において、複数のシンボルと、この複数のシンボ
ルに対応する複数のアクションルーチンが与えられ、上
記複数のアクションルーチンのうちの選択されたアクシ
ョンルーチンを実行する別のステップを上記復号値に基
づいて具備するシンボルの統計的復号化方法。 - 【請求項8】 請求項1に記載のシンボルの統計的復号
化方法において、プレフィックスとフリービットを含む
複数の可変長シンボルが与えられ、ステップ(b)がそ
のステップとして、 (e)上記プレフィックスと上記フリービットが共に上
記第1のバイトに収まるかどうかを決定するステップ、 (f)上記第1のバイトのバイト境界が上記フリービッ
ト内に収まるかどうかを決定するステップ、および (g)上記第1のバイトのバイト境界が上記プレフィッ
クス内に収まるかどうかを決定するステップを具備す
る、シンボルの統計的復号化方法。 - 【請求項9】 請求項8に記載のシンボルの統計的復号
化方法において、ステップ(e)の決定が肯定の場合、
上記第1のバイトのデータにのみ基づいて上記復号値を
決定するステップを具備するシンボルの統計的復号化方
法。 - 【請求項10】 請求項8に記載のシンボルの統計的復
号化方法において、ステップ(f)の決定が肯定の場
合、上記第1のバイトのデータに基づいて決定された個
数nのフリービット数を上記第2のバイトのデータから
抽出するステップを具備するシンボルの統計的復号化方
法。 - 【請求項11】 請求項8に記載のシンボルの統計的復
号化方法において、ステップ(g)の決定が肯定の場
合、上記データに基づいて第3のバイトのデータを取り
出すかどうかを決定する、シンボルの統計的復号化方
法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US061584 | 1993-05-13 | ||
US08/061,584 US5615020A (en) | 1993-05-13 | 1993-05-13 | System and method for fast huffman decoding |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH0750592A true JPH0750592A (ja) | 1995-02-21 |
Family
ID=22036730
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP6124246A Withdrawn JPH0750592A (ja) | 1993-05-13 | 1994-05-13 | シンボルの統計的復号化方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US5615020A (ja) |
EP (1) | EP0624956A3 (ja) |
JP (1) | JPH0750592A (ja) |
CA (1) | CA2123435A1 (ja) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6104754A (en) * | 1995-03-15 | 2000-08-15 | Kabushiki Kaisha Toshiba | Moving picture coding and/or decoding systems, and variable-length coding and/or decoding system |
US5898898A (en) * | 1996-05-31 | 1999-04-27 | Kleck; James | Collating bits from a byte source |
US6160918A (en) * | 1997-10-02 | 2000-12-12 | At&T Corp. | Method and apparatus for fast image compression |
US6678842B1 (en) * | 1998-12-14 | 2004-01-13 | Agere Systems Inc. | Communications system and associated deskewing methods |
MY131509A (en) * | 1999-03-15 | 2007-08-30 | Sony Corp | Data processing method, apparatus and system for encrypted- data transfer |
US6778107B2 (en) | 2001-08-30 | 2004-08-17 | Intel Corporation | Method and apparatus for huffman decoding technique |
US6657568B1 (en) * | 2002-08-27 | 2003-12-02 | Fmr Corp. | Data packing for real-time streaming |
US7593976B1 (en) * | 2003-01-06 | 2009-09-22 | Marvell Israel (M.I.S.L.) Ltd. | Method and apparatus for finding the next free bit in a register |
KR20050053996A (ko) * | 2003-12-03 | 2005-06-10 | 삼성전자주식회사 | 허프만 코드를 효율적으로 복호화하는 방법 및 장치 |
US8515741B2 (en) * | 2004-06-18 | 2013-08-20 | Broadcom Corporation | System (s), method (s) and apparatus for reducing on-chip memory requirements for audio decoding |
US6975253B1 (en) * | 2004-08-06 | 2005-12-13 | Analog Devices, Inc. | System and method for static Huffman decoding |
US9027147B2 (en) * | 2013-05-13 | 2015-05-05 | Hewlett-Packard Development Company, L.P. | Verification of serialization codes |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3883847A (en) * | 1974-03-28 | 1975-05-13 | Bell Telephone Labor Inc | Uniform decoding of minimum-redundancy codes |
US4386416A (en) * | 1980-06-02 | 1983-05-31 | Mostek Corporation | Data compression, encryption, and in-line transmission system |
US4396906A (en) * | 1980-10-31 | 1983-08-02 | Sri International | Method and apparatus for digital Huffman encoding |
US4369463A (en) * | 1981-06-04 | 1983-01-18 | International Business Machines Corporation | Gray scale image data compression with code words a function of image history |
CA1211219A (en) * | 1982-06-30 | 1986-09-09 | Hideo Kuroda | Digital data code conversion circuit for variable- word-length data code |
JPS5992688A (ja) * | 1982-11-19 | 1984-05-28 | Fuji Photo Film Co Ltd | 適応形画像圧縮方式 |
JPS59152780A (ja) * | 1983-02-19 | 1984-08-31 | Ricoh Co Ltd | Mh符号テ−ブルの構成方法 |
US4563671A (en) * | 1983-05-18 | 1986-01-07 | At&T Bell Laboratories | Coding technique |
US4574382A (en) * | 1983-10-05 | 1986-03-04 | International Business Machines Corporation | Variable length character code system |
EP0145396B1 (en) * | 1983-12-08 | 1990-04-04 | Crosfield Electronics Limited | Codeword decoding |
JPS61107818A (ja) * | 1984-10-30 | 1986-05-26 | Nec Corp | エントロピ−符号化方式とその装置 |
US4646061A (en) * | 1985-03-13 | 1987-02-24 | Racal Data Communications Inc. | Data communication with modified Huffman coding |
US4899149A (en) * | 1986-02-28 | 1990-02-06 | Gary Kahan | Method of and apparatus for decoding Huffman or variable-length coees |
US5045853A (en) * | 1987-06-17 | 1991-09-03 | Intel Corporation | Method and apparatus for statistically encoding digital data |
JP2672521B2 (ja) * | 1987-09-21 | 1997-11-05 | 株式会社東芝 | 画像処理方法 |
US4813056A (en) * | 1987-12-08 | 1989-03-14 | General Electric Company | Modified statistical coding of digital signals |
US4967196A (en) * | 1988-03-31 | 1990-10-30 | Intel Corporation | Apparatus for decoding variable-length encoded data |
JPH02265329A (ja) * | 1989-04-06 | 1990-10-30 | Canon Inc | 符号逆変換装置 |
US5057917A (en) * | 1990-06-20 | 1991-10-15 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Real-time data compression of broadcast video signals |
JPH0479421A (ja) * | 1990-07-18 | 1992-03-12 | Toshiba Corp | 可変長符号化装置および可変長復号化装置 |
JPH0490268A (ja) * | 1990-08-01 | 1992-03-24 | Hitachi Ltd | 画像信号復号化方式 |
US5253053A (en) * | 1990-12-31 | 1993-10-12 | Apple Computer, Inc. | Variable length decoding using lookup tables |
US5220325A (en) * | 1991-03-28 | 1993-06-15 | At&T Bell Laboratories | Hierarchical variable length decoder for digital video data |
US5329313A (en) * | 1992-04-01 | 1994-07-12 | Intel Corporation | Method and apparatus for real time compression and decompression of a digital motion video signal using a fixed Huffman table |
US5226082A (en) * | 1992-07-02 | 1993-07-06 | At&T Bell Laboratories | Variable length decoder |
-
1993
- 1993-05-13 US US08/061,584 patent/US5615020A/en not_active Expired - Lifetime
-
1994
- 1994-05-11 EP EP94107378A patent/EP0624956A3/en not_active Withdrawn
- 1994-05-12 CA CA002123435A patent/CA2123435A1/en not_active Abandoned
- 1994-05-13 JP JP6124246A patent/JPH0750592A/ja not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
EP0624956A2 (en) | 1994-11-17 |
CA2123435A1 (en) | 1994-11-14 |
EP0624956A3 (en) | 1996-02-28 |
US5615020A (en) | 1997-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5087913A (en) | Short-record data compression and decompression system | |
JP2610084B2 (ja) | データ伸長方法および装置ならびにデータ圧縮伸長方法および装置 | |
US5525982A (en) | Method and means for character string pattern matching for compression and the like using minimal cycles per character | |
US5608396A (en) | Efficient Ziv-Lempel LZI data compression system using variable code fields | |
US5572206A (en) | Data compression method and system | |
US6411227B1 (en) | Dual mode data compression for operating code | |
KR100950607B1 (ko) | 허프만 코딩 | |
US5270712A (en) | Sort order preserving method for data storage compression | |
US5703581A (en) | Method and apparatus for data compression and decompression | |
US7872598B2 (en) | Accelerated decompression | |
US5874908A (en) | Method and apparatus for encoding Lempel-Ziv 1 variants | |
KR101737451B1 (ko) | 데이터 압축 동안의 대안적 인코딩 솔루션들 평가 | |
JPH0750592A (ja) | シンボルの統計的復号化方法 | |
JPH0779262B2 (ja) | 圧縮データの符号化方法 | |
EP0628228A1 (en) | Data compression using hashing | |
CA2118870A1 (en) | Method and system for data compression | |
JPH0879092A (ja) | データを圧縮及び圧縮解除するための方法及び装置 | |
US8947272B2 (en) | Decoding encoded data | |
US6094151A (en) | Apparatus and method for finite state machine coding of information selecting most probable state subintervals | |
US7068192B1 (en) | System and method for encoding and decoding variable-length data | |
US5555323A (en) | System for bi-level symbol coding/decoding with saved storage and method for same | |
US6388585B1 (en) | Method for data compression and decompression using decompression instructions | |
US5646950A (en) | Matched spectral null codes for partial response channels | |
US6144321A (en) | Microprocessor dedicated to processing of bit streams in a system of compression/decompression of animated images | |
GB2360915A (en) | Run length compression encoding of selected bits of data words |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20010731 |