実施の形態1.
図1は、この発明の実施の形態1に係るハフマン復号化装置の構成を示すブロック図である。実施の形態1に係るハフマン復号化装置は、ハフマンテーブルを格納するハフマンテーブル記憶部1、入力ストリームからビット列を読み出すビット列読出部(読出部)2、語長を保持する語長更新部3、比較符号語を保持する比較符号語更新部4、比較符号語とビット列を比較する比較部5、オフセットアドレスを保持するテーブルA情報抽出部6、ストリームの参照位置を更新するビット列抽出部7、ビット列と最小符号語の差分値を算出する差分値計算部8、探索対象のアドレスを算出するアドレス計算部9および探索対象のインデックスを抽出するインデックス情報抽出部10で構成される。
ハフマンテーブル記憶部1は、ハフマンテーブルAおよびハフマンテーブルBを格納している。図2はこの実施の形態1に係るハフマン復号化装置のハフマンテーブルを示す図であり、図2(a)はハフマンテーブルAを示し、図2(b)はハフマンテーブルBを示している。ハフマンテーブルAは、従来例の説明で用いた図8のハフマンテーブルDにおいて、同一の語長である符号語を一つのブロックと考え、ブロック中で最小の値を取る符号語(以下、最小符号語と称する)、この最小符号語のアドレス、語長、およびブロック中で最大の値を取る符号語(以下、最大符号語と称する)を抽出して同じアドレス列に格納している。図8のハフマンテーブルDでは同一語長で構成されたブロック毎に、アドレス列の色を変えて表示しており、ハフマンテーブルAではこの同一色で示した同一語長の符号語を一つのブロックと考える。
上記手順に基づき作成したハフマンテーブルAの先頭位置からの参照アドレスをオフセットアドレスとし、各アドレス列に対して「0」から順に番号を付与する。なお、最小符号語と最大符号語は、2進数から10進数に変換して記憶する。また、ブロック内に符号語が1つしか存在しない場合には、その符号語を最小符号語および最大符号語とする。ハフマンテーブルBは、図8のハフマンテーブルDからアドレスおよびインデックスのみを抽出して作成したテーブルである。
ビット列読出部2は、外部装置(図示せず)からハフマン符号の探索対象となるストリーム(以下、探索対象ストリームと称する)の入力を受け付ける。また、語長更新部3から入力される語長をビット列抽出部7に出力すると共に、探索対象ストリームから当該語長分のビット列を読み出し10進数に変換して比較部5に出力する。語長更新部3は語長を保持し、その語長の初期値はハフマンテーブルAのオフセットアドレス「0」における語長とする。一方、テーブルA情報抽出部6から入力される語長を新たな語長として更新し、更新結果をビット列読出部2に出力する。
比較符号語更新部4は、比較符号語を保持し、その比較符号語の初期値はハフマンテーブルAのオフセットアドレス「0」における最大符号語とする。一方、テーブルA情報抽出部6から入力される最大符号語を新たな比較符号語として更新し、更新結果を比較部5に出力する。比較部5は、ビット列読出部2から入力されたビット列と、比較符号語更新部4から入力された比較符号語との大小比較を行う。この比較結果に基づきテーブルA情報抽出部6および差分値計算部8を制御する。
テーブルA情報抽出部6は、オフセットアドレスを保持し、そのオフセットアドレスの初期値は「0」とする。一方、比較部5から入力される制御指示に基づきオフセットアドレスを加算し、加算後のオフセットアドレスに対応する語長、最大符号語、最小符号語およびアドレスをハフマンテーブルAから抽出し、抽出した新たな語長を語長更新部3、最大符号語を比較符号語更新部4、最小符号語を差分値計算部8およびアドレスをアドレス計算部9に出力する。
ビット列抽出部7は、ビット列読出部2から入力される語長に対応するビット分のビット列を探索対象ストリームから抽出する。差分値計算部8は、比較部5から入力されるビット列とテーブルA情報抽出部6から入力される最小符号語との差分値(ビット列−最小符号語)を算出し、この差分値をアドレス計算部9に出力する。アドレス計算部9は、テーブルA情報抽出部6から入力されるアドレスと差分値計算部8から入力される差分値を加算して加算値(以下、ターゲットアドレスと称する)を算出し、このターゲットアドレスをインデックス情報抽出部10に出力する。インデックス情報抽出部10は、アドレス計算部9から入力されるターゲットアドレスと同一のアドレスを有するインデックスをハフマンテーブルBから抽出する。
次に、この発明の実施の形態1に係るハフマン復号化装置の動作について説明する。図3はこの発明の実施の形態1に係るハフマン復号化装置の処理動作を示すフローチャートであり、以下このフローチャートに従って説明する。なお、この実施の形態1ではハフマンテーブルAに基づき符号語の探索を行うものとし、ハフマンテーブルAに基づく各情報をそれぞれ語長A、比較符号語A、最大符号語A、最小符号語A、ビット列A、アドレスA、オフセットアドレスA、ターゲットアドレスAとして説明する。
語長更新部3、比較符号語更新部4およびテーブルA情報抽出部6は、それぞれ保持する語長A、比較符号語AおよびオフセットアドレスAを初期化し、語長更新部3は語長Aをビット列読出部2に出力し、比較符号語更新部4は比較符号語Aを比較部5に出力する(ステップST1)。ビット列読出部2は、ステップST1において入力された語長Aをビット列抽出部7に出力し(ステップST2)、さらに外部装置から入力された探索対象ストリームから語長Aビット分のビット列Aを読み出し、10進数に変換して比較部5に出力する(ステップST3)。
比較部5は、ステップST1において入力された比較符号語AとステップST3において入力されたビット列Aの大小関係を比較し、ビット列Aが比較符号語Aより大きい(比較符号語A<ビット列A)か否か判定する(ステップST4)。ステップST4においてビット列Aが大きいと判定された場合には、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルA情報抽出部6に対し、オフセットアドレスAに「1」を加算する指示を出力する(ステップST5)。
テーブルA情報抽出部6は、ステップST5において入力された加算指示に基づき、オフセットアドレスAに「1」を加算し、ハフマンテーブルAから加算後のオフセットアドレス値がオフセットアドレスAの語長A、最大符号語A、最小符号語AおよびアドレスAをそれぞれ、語長更新部3、比較符号語更新部4、差分値計算部8およびアドレス計算部9に出力する(ステップST6)。比較符号語更新部4は、ステップST6において入力された最大符号語Aを比較符号語Aとして更新し、比較部5に出力する(ステップST7)。語長更新部3は、保持している語長をステップST6において入力された語長Aに更新し、ビット列読出部2に出力する(ステップST8)。その後、シーケンスはステップST2の処理に戻り上述した処理を繰り返す。
一方、ステップST4においてビット列Aが比較符号語Aより小さいと判定された場合には、探索対象の符号語が探索中のブロックに存在するものと判断し、ビット列Aを差分値計算部8に出力すると共に、ビット列抽出部7に対して探索対象ストリームから語長Aビット分のビット列を抽出する指示を出力する(ステップST9)。ビット列抽出部7は、ステップST9において入力された抽出指示に基づき、語長Aビット分のビット列を探索対象ストリームから抽出する(ステップST10)。なお、ステップST10の抽出処理は次のハフマン符号探索のためにストリームの参照位置を更新するために行うもので、抽出したビット列は以降の処理において必要としない。
差分値計算部8は、ステップST9において入力されたビット列AとステップST6においてテーブルA情報抽出部6から入力された最小符号語Aの差分値Aを算出し、この差分値Aをアドレス計算部9に出力する(ステップST11)。アドレス計算部9は、ステップST11において入力された差分値AとステップST6において入力されたアドレスAを加算してターゲットアドレスAを算出し、インデックス情報抽出部10に出力する(ステップST12)。インデックス情報抽出部10は、ステップST12において入力されたターゲットアドレスAのインデックスをハフマンテーブルBから抽出し(ステップST13)、処理を終了する。
次に、この実施の形態1に係るハフマン復号化装置の具体的な処理動作を、図2に示すハフマンテーブルA,Bおよび図3のフローチャートを用いて説明する。なお、探索すべきハフマン符号は図8のハフマンテーブルDに含まれるものとし、図8のハフマンテーブルDに基づくハフマンテーブルA(図2(a)参照)およびハフマンテーブルB(図2(b)参照)が予め作成され、ハフマン符号の探索対象ストリームは「11011010・・・」のビット列であるものとする。
語長更新部3は保持する語長Aを「1」に、比較符号語更新部4は保持する比較符号語Aを「0」に、テーブルA情報抽出部6は保持するオフセットアドレスAを「0」にそれぞれ初期化し、語長Aをビット列読出部2に、比較符号語Aを比較部5に出力する(ステップST1)。ビット列読出部2は、ステップST1において入力された語長A(=1)をビット列抽出部7に出力する(ステップST2)。さらに、探索対象ストリームから語長A(=1)ビット分のビット列A(=1)を読出し、10進数に変換(ビット列A(=1))して比較部5に出力する(ステップST3)。
比較部5は、ステップST1において入力された比較符号語A(=0)とステップST3において入力されたビット列A(=1)の大小関係を比較し、ビット列Aが比較符号語Aより大きいか否か判定する(ステップST4)。この場合には、ビット列A(=1)の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルA情報抽出部6に対し、オフセットアドレスA(=0)に「1」を加算する指示を出力する(ステップST5)。
テーブルA情報抽出部6は、ステップST5において入力された加算指示に基づき、オフセットアドレスAに「1」を加算してオフセットアドレスA(=1)とし、ハフマンテーブルAからオフセットアドレスA(=1)である語長A(=3)、最大符号語A(=5)、最小符号語A(=4)およびアドレスA(=1)をそれぞれ、語長更新部3、比較符号語更新部4、差分値計算部8およびアドレス計算部9に出力する(ステップST6)。
比較符号語更新部4は、ステップST6において入力された最大符号語A(=5)を比較符号語A(=5)として更新し、比較部5に出力する(ステップST7)。語長更新部3は、保持している語長A(=1)をステップST6において入力された語長A(=3)に更新し、ビット列読出部2に出力する(ステップST8)。その後、シーケンスはステップST2の処理に戻る。
ビット列読出部2は、語長更新部3から入力される語長A(=3)をビット列抽出部7に出力し(ステップST2´)、探索対象ストリームから語長A(=3)ビット分のビット列A(=110)を読出し、10進数に変換(ビット列A(=6))して比較部5に出力する(ステップST3´)。
比較部5は、ステップST7において入力された比較符号語A(=5)とステップST3´において入力されたビット列A(=6)の大小関係を比較し、ビット列Aが比較符号合Aより大きいか否か判定する(ステップST4´)。この場合には、ビット列A(=6)の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルA情報抽出部6に対し、オフセットアドレスA(=1)に「1」を加算する指示を出力する(ステップST5´)。
テーブルA情報抽出部6は、ステップST5´において入力された加算指示に基づき、オフセットアドレスAに「1」を加算してオフセットアドレスA(=2)とし、ハフマンテーブルAからオフセットアドレスA(=2)である語長A(=4)、最大符号語A(=12)、最小符号語A(=12)およびアドレスA(=3)をそれぞれ、語長更新部3、比較符号語更新部4、差分値計算部8およびアドレス計算部9に出力する(ステップST6´)。
比較符号語更新部4は、ステップST6´において入力された最大符号語A(=12)を比較符号語A(=12)として更新し、比較部5に出力する(ステップST7´)。語長更新部3は、保持している語長A(=3)をステップST6において入力された語長A(=4)に更新し、ビット列読出部2に出力する(ステップST8´)。その後、シーケンスはステップST2の処理に戻る。
ビット列読出部2は、語長更新部3から入力される語長A(=4)をビット列抽出部7に出力し(ステップST2´´)、探索対象ストリームから語長A(=4)ビット分のビット列A(=1101)を読出し、10進数に変換(ビット列A(=13))して比較部5に出力する(ステップST3´´)。
比較部5は、ステップST7´において入力された比較符号語A(=12)とステップST3´´において入力されたビット列A(=13)の大小関係を比較し、ビット列Aが比較符号合Aより大きいか否か判定する(ステップST4´´)。この場合には、ビット列A(=13)の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルA情報抽出部6に対し、オフセットアドレスA(=2)に「1」を加算する指示を出力する(ステップST5´´)。
テーブルA情報抽出部6は、ステップST5´´において入力された加算指示に基づき、オフセットアドレスAに「1」を加算してオフセットアドレスA(=3)とし、ハフマンテーブルAからオフセットアドレスA(=3)である語長A(=6)、最大符号語A(=55)、最小符号語A(=52)およびアドレスA(=4)をそれぞれ、語長更新部3、比較符号語更新部4、差分値計算部8およびアドレス計算部9に出力する(ステップST6´´)。
比較符号語更新部4は、ステップST6´´において入力された最大符号語A(=55)を比較符号語A(=55)として更新し、比較部5に出力する(ステップST7´´)。語長更新部3は、保持している語長A(=4)をステップST6において入力された語長A(=6)に更新し、ビット列読出部2に出力する(ステップST8´´)。その後、シーケンスはステップST2の処理に戻る。
ビット列読出部2は、語長更新部3から入力される語長A(=6)をビット列抽出部7に出力し(ステップST2´´´)、探索対象ストリームから語長A(=6)ビット分のビット列A(=110110)を読出し、10進数に変換(ビット列A(=54))して比較部5に出力する(ステップST3´´´)。
比較部5は、ステップST7´´において入力された比較符号語A(=55)とステップST3´´´において入力されたビット列A(=54)の大小関係を比較し、ビット列Aが比較符号合Aより大きいか否か判定する(ステップST4´´´)。この場合には、ビット列A(=54)の方が小さいため、探索対象の符号語が探索中のブロックに存在するものと判断し、ビット列A(=54)を差分値計算部8に出力すると共に、ビット列抽出部7に対して探索対象ストリームから語長A(=6)ビット分のビット列(=54)を抽出する指示を出力する(ステップST9)。
ビット列抽出部7は、ステップST9において入力された抽出指示に基づき、語長A(=6)ビット分のビット列(=54)を探索対象ストリームから抽出する(ステップST10)。差分値計算部8は、ステップST9において入力されたビット列A(=54)とステップST6´´´においてテーブルA情報抽出部6から入力された最小符号語A(=52)の差分値Aを計算(54−52=2)し、この差分値A(=2)をアドレス計算部9に出力する(ステップST11)。
アドレス計算部9は、ステップST11において入力された差分値A(=2)とステップST6´´´においてテーブルA情報抽出部6から入力されたアドレスA(=4)を加算してターゲットアドレスA(4+2=6)を算出し、インデックス情報抽出部10に出力する(ステップST12)。インデックス情報抽出部10は、ハフマンテーブルBからステップST12において入力されたターゲットアドレスA(=6)のインデックス(=16)を抽出し(ステップST13)、処理を終了する。
以上のように、この実施の形態1によれば、ビット列読出部2が探索対象ストリームからブロック毎に語長分のビット列を読み出し、比較部5が読み出したビット列とブロック内の最大符号語との比較を行い、比較結果に基づきアドレス計算部9がビット列とブロック内の最小符号語との差分値をアドレスのオフセット算出に用いるように構成したので、ハフマン符号の探索範囲を絞り込むことができ、探索対象ストリームからのデータ読出回数および判定処理回数を抑制し、さらにアドレス計算が加減算のみで実現することができる。これにより、ハフマン復号処理に必要な演算量を抑制することができる。
実施の形態2.
図4はこの発明の実施の形態2に係るハフマン復号化装置の構成を示すブロック図である。この実施の形態2に係るハフマン復号化装置は、ハフマンテーブル記憶部1、入力ストリームからビット列を読み出すビット列一括読出部(一括読出部)21、比較符号語更新部4、比較部5、オフセットアドレスを保持するテーブルC情報抽出部22、ビット列抽出部7、ビット列と最小拡張符号語の差分値を算出する差分値計算部(第1差分値計算部)8a、最大語長と語長の差分値を算出する差分値計算部(第2差分値計算部)8b、差分値にシフト処理を行うシフト計算部23、アドレス計算部9およびインデックス情報抽出部10で構成される。なお、以下では実施の形態1と同一の構成には図1で使用した符号と同一の符号を付し、説明を省略または簡略化する。
ハフマンテーブル記憶部1は、ハフマンテーブルBおよびハフマンテーブルCを格納している。図5はこの発明の実施の形態2に係るハフマン復号化装置のハフマンテーブルを示す図であり、図5(a)はハフマンテーブルCを示し、図5(b)は従来のハフマンテーブルDを符号拡張したハフマンテーブルD´を示している。ハフマンテーブルD´は、図8のハフマンテーブルDに基づき、テーブル内の最大語長に満たない符号語についてLSB(Least Significant Bit)側、即ち下位ビット側に「0」を挿入して符号拡張を行ったものである。なお、図5(b)において符号拡張を行った部分は太字で記載している。
ハフマンテーブルCは、ハフマンテーブルDにおいて同一の語長である拡張符号語を一つのブロックと考え、ブロック中で最小の値を取る拡張符号語(以下、最小拡張符号語と称する)、この最小拡張符号語のアドレス、語長、およびブロック中で最大の値を取る拡張符号語(以下、最大拡張符号語と称する)を抽出して同じアドレス列に格納する。図5(b)のハフマンテーブルD´では同一語長で構成されたブロック毎にアドレス列の色を変えて表示しており、ハフマンテーブルCではこの同一色で示した同一語長の符号語を一つのブロックと考える。
上記手順に基づき作成したハフマンテーブルCの先頭位置からの参照アドレスを、オフセットアドレスとして各アドレス列に対して「0」から順に番号を付与する。なお、最小拡張符号語と最大拡張符号語は、2進数から10進数に変換して記憶する。また、ブロック内に拡張符号語が1つしか存在しない場合には、その拡張符号語を最小拡張符号語および最大拡張符号語とする。
ビット列一括読出部21は、探索対象ストリームの入力を受け付け、その探索対象ストリームの最大語長を保持する。その最大語長の初期値はハフマンテーブルCにおいて最大の値をとる語長とする。さらに、探索対象ストリームから当該最大語長ビット分のビット列を読み出し10進数に変換して比較部5に出力する。比較符号語更新部4は、比較符号語を保持し、その比較符号語の初期値はハフマンテーブルCのオフセットアドレス「0」における最大拡張符号語とする。一方、テーブルC情報抽出部22から入力される最大拡張符号語を新たな比較符号語として更新し、更新結果を比較部5に出力する。比較部5は、ビット列一括読出部21から入力されたビット列と比較符号語更新部4から入力された比較符号語との大小比較を行う。この比較結果に基づきテーブルC情報抽出部22および差分値計算部8a,8bを制御する。
テーブルC情報抽出部22は、オフセットアドレスおよび語長を保持し、これらのオフセットアドレスの初期値は「0」およびオフセットアドレス「0」の語長とする。一方、比較部5から入力される制御指示に基づきオフセットアドレスを加算し、加算後のオフセットアドレスに対応する最大拡張符号語、最小拡張符号語、語長およびアドレスをハフマンテーブルCから抽出し、抽出した新たな最大拡張符号語を比較符号語更新部4、最小拡張符号語を差分値計算部8a、語長をビット列抽出部7と差分値計算部8b、およびアドレスをアドレス計算部9に出力する。ビット列抽出部7は、ビット列一括読出部21から入力される語長に対応するビット分のビット列を探索対象ストリームから抽出する。
差分値計算部8aは、比較部5から入力されるビット列とテーブルC情報抽出部22から入力される最小拡張符号語との差分値a(ビット列−最小拡張符号語)を算出し、シフト計算部23に出力する。差分値計算部8bは、最大語長を保持し、その最大語長の初期値はハフマンテーブルCにおいて最大の値をとる語長とする。その最大語長とテーブルC情報抽出部22から入力される語長との差分値b(最大語長−語長)を算出し、シフト計算部23に出力する。
シフト計算部23は、差分値aに対して、差分値bビット分小さくなる方向にシフト処理を行い、シフト結果をアドレス計算部9に出力する。アドレス計算部9は、テーブルC情報抽出部22から入力されるアドレスとシフト計算部23から入力されるシフト結果を加算して加算値(以下、ターゲットアドレスと称する)を算出し、このターゲットアドレスをインデックス情報抽出部10に出力する。インデックス情報抽出部10は、アドレス計算部9から入力されるターゲットアドレスと同一のアドレスを有するインデックスをハフマンテーブルBから抽出する。
次に、この発明の実施の形態2に係るハフマン復号化装置の動作について説明する。図6はこの発明の実施の形態2に係るハフマン復号化装置の処理動作を示すフローチャートであり、以下このフローチャートに従って説明する。なお、この実施の形態2ではハフマンテーブルCに基づき符号語の探索を行うものとし、ハフマンテーブルCに基づく各情報をそれぞれ語長C、比較符号語C、最大拡張符号語C、最小拡張符号語C、ビット列C、アドレスC、オフセットアドレスC、ターゲットアドレスCとして説明する。
比較符号語更新部4、テーブルC情報抽出部22、ビット列一括読出部21および差分値計算部8bは、それぞれ保持する比較符号語C、オフセットアドレスCおよび語長C、最大語長Cを初期化し、比較符号語更新部4は比較符号語Cを比較部5に出力する(ステップST21)。ビット列一括読出部21は、外部装置から入力された探索対象ストリームから最大語長Cビット分のビット列Cを読出し、10進数に変換して比較部5に出力する(ステップST22)。
比較部5は、ステップST21において比較符号語更新部4から入力された比較符号語CとステップST22においてビット列一括読出部21から入力されたビット列Cの大小関係を比較し、ビット列Cが比較符号語Cより大きいか(比較符号語C<ビット列C)か否か判定する(ステップST23)。ステップST23においてビット列Cが大きいと判定された場合には、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルC情報抽出部22に対し、オフセットアドレスCに「1」を加算する指示を出力する(ステップST24)。
テーブルC情報抽出部22は、ステップST24において入力された加算指示に基づき、オフセットアドレスCに「1」を加算し、ハフマンテーブルCから加算後のオフセットアドレス値がオフセットアドレスCの最大拡張符号語Cを比較符号語更新部4に、最小拡張符号語Cを差分値計算部8aに、語長Cをビット列抽出部7および差分値計算部8bに、アドレスCをアドレス計算部9に出力する(ステップST25)。比較符号語更新部4は、ステップST25において入力された最大拡張符号語Cを比較符号語Cとして更新し、比較部5に出力する(ステップST26)。その後、シーケンスはステップST23の処理に戻り上述した処理を繰り返す。
一方、ステップST23においてビット列Cが比較符号語Cより小さいと判定された場合には、探索対象の符号語が探索中のブロックに存在するものと判断し、ビット列Cを差分値計算部8aに出力すると共に、ビット列抽出部7に対して探索対象ストリームから語長Cビット分のビット列を抽出する指示を出力する(ステップST27)。ビット列抽出部7は、ステップST27において入力された抽出指示に基づき、語長Cビット分のビット列を探索対象ストリームから抽出する(ステップST28)。なお、ステップST28の抽出処理は次のハフマン符号探索のためにストリームの参照位置を更新するために行うものであり、抽出したビット列は以降の処理において必要としない。
差分値計算部8aは、ステップST27において入力されたビット列CとステップST25において入力された最小拡張符号語との差分値Caを算出し、シフト計算部23に出力する(ステップST29)。差分値計算部8bは、最大語長Cと、ステップST25において入力された語長Cとの差分値Cbを算出し、シフト計算部23に出力する(ステップST30)。シフト計算部23は、入力された差分値Caに対して差分値Cbビット分値が小さくなる方向にシフト処理を行い、シフト結果をアドレス計算部9に出力する(ステップST31)。
アドレス計算部9は、ステップST31においてシフト計算部23から入力されたシフト結果とステップST25において入力されたアドレスCを加算してターゲットアドレスCを算出し、インデックス情報抽出部10に出力する(ステップST32)。インデックス情報抽出部10は、ステップST32において入力されたターゲットアドレスCのインデックスをハフマンテーブルBから抽出し(ステップST33)、処理を終了する。
次に、この実施の形態2に係るハフマン復号化装置の具体的な処理動作を、図2(b)および図5(a)に示すハフマンテーブルB,Cおよび図6のフローチャートを用いて説明する。なお、探索すべきハフマン符号は図8のハフマンテーブルDに含まれるものとし、図8のハフマンテーブルDに基づくハフマンテーブルB(図2(b)参照)およびハフマンテーブルC(図5(a)参照)が予め作成され、ハフマン符号の探索対象ストリームは「11011010・・・」のビット列であるものとする。
比較符号語更新部4は保持する比較符号語Cを「0」に、テーブルC情報抽出部22は保持するオフセットアドレスCを「0」および語長Cを「1」に、ビット列一括読出部21および差分値計算部8bが共有して保持する最大語長Cを「8」にそれぞれ初期化し、比較符号語更新部4は比較符号語C(=0)を比較部5に出力する(ステップST21)。ビット列一括読出部21は、外部装置から入力された探索対象ストリームから最大語長C(=8)ビット分のビット列C(=11011010)を読出し、10進数に変換(ビット列C(=218))して比較部5に出力する(ステップST22)。
比較部5は、ステップST21において入力された比較符号語C(=0)とステップST22において入力されたビット列C(=218)の大小関係を比較し、ビット列Cが比較符号語Cより大きいか否か判定する(ステップST23)。この場合には、ビット列C(=218)の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルC情報抽出22に対し、オフセットアドレスC(=0)に「1」を加算する指示を出力する(ステップST24)。
テーブルC情報抽出22は、ステップST24において入力された加算指示に基づき、オフセットアドレスCに「1」を加算してオフセットアドレスC(=1)とし、ハフマンテーブルCからオフセットアドレスC(=1)である最大拡張符号語C(=160)を比較符号語更新部4に、最小拡張符号語C(=128)を差分値計算部8aに、語長C(=3)をビット列抽出部7および差分値計算部8bに、アドレスC(=1)をアドレス計算部9に出力する(ステップST25)。比較符号語更新部4は、ステップST25において入力された最大拡張符号語C(=160)を比較符号語C(=160)として更新し、比較部5に出力する(ステップST26)。その後、シーケンスはステップST23の処理に戻る。
比較部5は、ステップST26において入力された比較符号語C(=160)とビット列C(=218)の大小関係を比較し、ビット列Cが比較符号語Cより大きいか否か判定する(ステップST23´)。この場合には、ビット列C(=218)の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルC情報抽出22に対し、オフセットアドレスC(=1)に「1」を加算する指示を出力する(ステップST24´)。
テーブルC情報抽出22は、ステップST24´において入力された加算指示に基づき、オフセットアドレスCに「1」を加算してオフセットアドレスC(=2)とし、ハフマンテーブルCからオフセットアドレスC(=2)である最大拡張符号語C(=192)を比較符号語更新部4に、最小拡張符号語C(=192)を差分値計算部8aに、語長C(=4)をビット列抽出部7および差分値計算部8bに、アドレスC(=3)をアドレス計算部9に出力する(ステップST25´)。比較符号語更新部4は、ステップST25´において入力された最大拡張符号語C(=192)を比較符号語C(=192)として更新し、比較部5に出力する(ステップST26´)。その後、シーケンスはステップST23の処理に戻る。
比較部5は、ステップST26´において入力された比較符号語C(=192)とビット列C(=218)の大小関係を比較し、ビット列Cが比較符号語Cより大きいか否か判定する(ステップST23´´)。この場合には、ビット列C(=218)の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルC情報抽出22に対し、オフセットアドレスC(=2)に「1」を加算する指示を出力する(ステップST24´´)。
テーブルC情報抽出22は、ステップST24´´において入力された加算指示に基づき、オフセットアドレスCに「1」を加算してオフセットアドレスC(=3)とし、ハフマンテーブルCからオフセットアドレスC(=3)である最大拡張符号語C(=220)を比較符号語更新部4に、最小拡張符号語C(=208)を差分値計算部8aに、語長C(=6)をビット列抽出部7および差分値計算部8bに、アドレスC(=4)をアドレス計算部9に出力する(ステップST25´´)。比較符号語更新部4は、ステップST25´´において入力された最大拡張符号語C(=220)を比較符号語C(=220)として更新し、比較部5に出力する(ステップST26´´)。その後、シーケンスはステップST23の処理に戻る。
比較部5は、ステップST26´´において入力された比較符号語C(=220)とビット列C(=218)の大小関係を比較し、ビット列Cが比較符号語Cより大きいか否か判定する(ステップST23´´´)。この場合には、ビット列C(=218)の方が小さいため、探索対象の符号語が探索中のブロックに存在するものと判断し、ビット列C(=218)を差分値計算部8aに出力すると共に、ビット列抽出部7に対して探索対象ストリームから語長C(=6)ビット分のビット列(=218)を抽出する指示を出力する(ステップST27)。
ビット列抽出部7は、ステップST27において入力された抽出指示に基づき、語長C(=6)ビット分のビット列(=218)を探索対象ストリームから抽出する(ステップST28)。差分値計算値8aは、ビット列C(=218)とステップST25´´においてテーブルC情報抽出部22から入力された最小拡張符号語C(=208)の差分値Caを計算(218−208=10)し、この差分値Ca(=10)をシフト計算部23に出力する(ステップST29)。また、差分値計算部8bは、最大語長C(=8)とステップST25´´においてテーブルC情報抽出部22から入力された語長C(=6)との差分値Cbを計算(8−6=2)し、この差分値Cb(=2)をシフト計算部23に出力する(ステップST30)。
シフト計算部23は、差分値Ca(=10)に対して差分値Cb(=2)ビット分値が小さくなる方向にシフト処理を行い(10>>2=2)、シフト結果(=2)をアドレス計算部9に出力する(ステップST31)。アドレス計算部9は、シフト結果(=2)とアドレスC(=4)を加算してターゲットアドレスC(4+2=6)を算出し、インデックス情報抽出部10に出力する(ステップST32)。インデックス情報抽出部10は、ハフマンテーブルBからステップST32において入力されたターゲットアドレスC(=6)のインデックスC(=16)を抽出し(ステップST33)、処理を終了する。
以上のように、この実施の形態2によれば、ビット列一括読出部21が符号探索ストリームから最大語長分のビット列を1回のみ読み出し、比較部5が読み出したビット列とブロック内の最大拡張符号語との比較を行い、比較結果に基づきアドレス計算部9がビット列とブロック内の最小拡張符号語との差分値を用いてアドレスのオフセット算出を行うように構成したので、ハフマン符号の探索範囲を絞り込むことができ、符号探索ストリームからのデータの読出回数を最大語長分のビット列読出しとストリームの参照位置を更新するために行うビット列抽出の2回に抑制し、判定処理回数を抑制することができる。また、アドレス計算が加減算とシフト演算のみで実現することができる。これらによりハフマン復号処理に必要な演算量を削減することができる。
1,101 ハフマンテーブル記憶部、2 ビット列読出部、3 語長更新部、4 比較符号語更新部、5,107 比較部、6 テーブルA情報抽出部、7 ビット列抽出部、8,8a,8b 差分値計算部、9 アドレス計算部、10,108 インデックス情報抽出部、21 ビット列一括読出部、22 テーブルC情報抽出部、23 シフト計算部、102 ビット抽出部、103 ビットカウンタ、104 2値判定部、105 テーブル参照部、106 語長抽出部、A,B,C,D,D´ ハフマンテーブル。