(57)【特許請求の範囲】
【請求項１】
外部から入力される異なる語長の符号語を復号化するハフマン復号化装置において、
前記入力された符号語からハフマンテーブル内の最大語長分のビット列を読み出す一括読出部と、
前記ハフマンテーブルにおける同一語長の符号語を一つのブロックとみなし、所定の語長が属するブロック内の最大符号語である符号語を前記ハフマンテーブルの最大語長まで拡張した比較符号語と前記ビット列の大小関係を比較する比較部と、
前記比較部の比較結果に基づき、前記ビット列と前記所定の語長が属するブロック内の最小符号語である符号語を前記最大語長まで拡張した最小拡張符号語との第1の差分値を算出する第１差分値計算部と、
前記最大語長と前記所定の語長との第２の差分値を算出する第２差分値計算部と、
前記第１の差分値を前記第２の差分値を用いて下位にシフトさせるシフト処理部と、
前記所定の語長が属するブロック内の最小符号語である符号語のアドレスを前記ハフマンテーブルから読出し、当該アドレスと前記シフト結果から前記ビット列のアドレスを算出するアドレス計算部とを備えることを特徴とするハフマン復号化装置。
【請求項２】
外部から入力される異なる語長の符号語を復号化するハフマン復号化方法において、
前記入力された符号語から、ハフマンテーブル内の最大語長分のビット列を読み出す一括読出ステップと、
前記ハフマンテーブルにおける同一語長の符号語を一つのブロックとみなし、所定の語長が属するブロック内の最大符号語である符号語を前記ハフマンテーブルの最大語長まで拡張した比較符号語と前記ビット列の大小関係を比較する比較ステップと、
前記比較ステップの比較結果に基づき、前記ビット列と前記所定の語長が属するブロック内の最小符号語である符号語を前記最大語長まで拡張した最小拡張符号語との第1の差分値を算出する第１差分値計算ステップと、
前記最大語長と前記所定の語長との第２の差分値を算出する第２差分値計算ステップと、
前記第１の差分値を前記第２の差分値を用いて下位にシフトさせるシフト処理ステップと、
前記所定の語長が属するブロック内の最小符号語である符号語のアドレスを前記ハフマンテーブルから読出し、当該アドレスと前記シフト結果から前記ビット列のアドレスを算出するアドレス計算ステップとを備えることを特徴とするハフマン復号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ハフマン符号の復号化装置および復号化方法に関し、特に演算量の少ない復号処理を行う技術に関するものである。
【背景技術】
【０００２】
ハフマン符号化とは、生起確率の高いデータに短い符号を与え、全体の符号情報量を削減する統計的なデータ圧縮技術であり、符号圧縮効率の改善を目的としてＭＰＥＧ−２  ＡＡＣ方式をはじめとする各種Ａｕｄｉｏ符号化方式、画像・映像符号化においても適用されている。ハフマン符号化で使用する符号のことをハフマン符号といい、符号化種別ごとに規定値として用意される。このハフマン符号を圧縮前のデータに復元することをハフマン復号処理という。
【０００３】
現在、代表的なハフマン復号の方法として２分木探索法が用いられている。２分木探索法とは、符号化されたストリームからビットを１ビットずつ取り出し、当該ビットが「０」であるか「１」であるかの条件分岐処理を繰り返すことで、最終的に目的の符号語を探索する方法である（例えば、特許文献１参照）。
【０００４】
【特許文献１】特開２００２−３３００７６号公報
【０００５】
この２分木探索法を用いたハフマン復号化処理を図７および図８を用いて説明する。２分木探索法を用いたハフマン復号化装置は、ハフマンテーブル記憶部１０１、ビット抽出部１０２、ビットカウンタ１０３、２値判定部１０４、テーブル参照部１０５、語長抽出部１０６、比較部１０７およびインデックス情報抽出部１０８で構成されている。
【０００６】
ハフマンテーブル記憶部１０１はハフマンテーブルＤを記憶している。  図８に当該ハフマンテーブルＤの一例を示す。ハフマンテーブルＤは、ハフマンテーブルＤの先頭からの参照位置を示すアドレス、ハフマンテーブルＤとは別に用意されたハフマン符号に対応するデータを格納したテーブルのインデックス値を示すインデックス、ハフマン符号のビット長を示す語長、ハフマン符号である符号語で構成されており、インデックスが判ればハフマン符号化前の情報を復元することができる。なお、アドレス、インデックスおよび語長は１０進数にて表記し、符号語は２進数のＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）詰めにて表記した。
【０００７】
ビット抽出部１０２は、ハフマン符号の探索対象ストリームから１ビット抽出する。ビットカウンタ１０３は、抽出したビット数をカウントアップし、カウントアップしたビット数を「カウンタ」として保持する。カウンタの初期値は「０」としてハフマン復号化処理の前に必ず初期化しておく。２値判定部１０４は、抽出された１ビットが「０」であるか「１」であるかの判定を行う。
【０００８】
テーブル参照部１０５は、ハフマンテーブルＤを参照して判定結果に合う符号語の探索を行い、探索結果のアドレスを参照アドレスとして更新する。参照アドレスの初期値は「０」であり、ハフマン復号化処理の前に必ず初期化しておく。語長抽出部１０６は、ハフマンテーブルから参照アドレスの語長を抽出する。比較部１０７は、カウンタと参照アドレスの語長が一致しているか比較する。インデックス情報抽出部１０８は、ハフマンテーブルＤから参照アドレスのインデックスを抽出する。
【０００９】
次に、２分木探索法を用いたハフマン復号化装置の動作について説明する。この動作の説明では、探索対象のハフマン符号が図８のハフマンテーブルＤに含まれ、ハフマンテーブルＤに格納されたインデックスの抽出をハフマン符号の探索結果とする。
まず、ビット抽出部１０２は、ハフマン符号の探索対象ストリームから１ビット抽出し、抽出したビットを２値判定部１０４に出力すると共に、ビットカウンタ１０３にカウントアップの指示を出力する。ビットカウンタ１０３は、カウントアップ指示の入力ごとにカウンタ値を「１」進めてカウントアップ後の値を比較部１０７に出力する。なお、このビットカウンタ１０３のカウンタ値はストリームから抽出したビットの総数と同一である。
【００１０】
２値判定部１０４は、ビット抽出部１０２から入力されたビットが「０」であるか「１」であるか判定を行い、判定結果をテーブル参照部１０５に出力する。テーブル参照部１０５は、ハフマンテーブル記憶部１０１に記憶されたハフマンテーブルＤにおいて参照アドレス以降の符号語から、２値判定部１０４から入力された判定結果に合う符号語の探索をアドレス順に行い、探索した符号語のアドレスを参照アドレスとして更新し、語長抽出部１０６およびインデックス情報抽出部１０８に出力する。語長抽出部１０６は、ハフマンテーブルＤから参照アドレスの語長を抽出し、比較部１０７に出力する。
【００１１】
比較部１０７は、ビットカウンタ１０３から入力されたカウンタ値と、語長抽出部１０６から入力された語長が一致しているか否か比較を行う。カウンタ値と語長が一致しなかった場合には、探索対象の符号語が見つからなかったものと判断し、ビット抽出部１０２が探索対象ストリームからさらに１ビット抽出して上述した処理を行う。なお、比較部１０７における比較結果が一致するまで上述の処理を繰り返す。カウンタ値と語長が一致した場合には、探索対象の符号語が見つかったものと判断し、インデックス情報抽出部１０８がハフマンテーブルＤから参照アドレスに該当するインデックスを抽出し、処理を終了する。
【００１２】
なお、詳細な説明は省略するが、ハフマン符号の探索対象ストリームが「１１０１１０１０・・・」のビット列であり、図８のハフマンテーブルＤである場合のハフマン符号の探索はインデックス＝１６となる。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかしながら、従来の２分木探索法を用いた復号化処理では、ハフマン符号の探索対象ストリームから１ビット単位でデータを抽出する処理と、抽出毎に２値判定処理および比較処理の２度の判定処理を必要とするため、目的とするハフマン符号語の語長が長い場合は、これら処理の回数が必然的に多くなり演算量が増加するという課題があった。
【００１４】
この発明は上記のような課題を解決するためになされたもので、ハフマン符号の探索対象ストリームからのデータの読み出し回数および判定処理の回数が少ない、即ち演算量の少ないハフマン復号化装置およびハフマン復号化方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
この発明に係るハフマン復号化装置は、外部から入力される異なる語長の符号語を復号化するハフマン復号化装置において、入力された符号語からハフマンテーブル内の最大語長分のビット列を読み出す一括読出部と、ハフマンテーブルにおける同一語長の符号語を一つのブロックとみなし、所定の語長が属するブロック内の最大符号語である符号語をハフマンテーブルの最大語長まで拡張した比較符号語とビット列の大小関係を比較する比較部と、比較部の比較結果に基づき、ビット列と前記所定の語長が属するブロック内の最小符号語である符号語を最大語長まで拡張した最小拡張符号語との第1の差分値を算出する第１差分値計算部と、最大語長と所定の語長との第２の差分値を算出する第２差分値計算部と、第１の差分値を前記第２の差分値を用いて下位にシフトさせるシフト処理部と、所定の語長が属するブロック内の最小符号語である符号語のアドレスをハフマンテーブルから読出し、当該アドレスとシフト結果からビット列のアドレスを算出するアドレス計算部とを備えたものである。
【発明の効果】
【００１６】
この発明によれば、入力された符号語からハフマンテーブル内の最大語長分のビット列を読み出す一括読出部と、ハフマンテーブルにおける同一語長の符号語を一つのブロックとみなし、所定の語長が属するブロック内の最大符号語である符号語をハフマンテーブルの最大語長まで拡張した比較符号語とビット列の大小関係を比較する比較部と、比較部の比較結果に基づき、ビット列と前記所定の語長が属するブロック内の最小符号語である符号語を最大語長まで拡張した最小拡張符号語との第1の差分値を算出する第１差分値計算部と、最大語長と所定の語長との第２の差分値を算出する第２差分値計算部と、第１の差分値を前記第２の差分値を用いて下位にシフトさせるシフト処理部と、所定の語長が属するブロック内の最小符号語である符号語のアドレスをハフマンテーブルから読出し、当該アドレスとシフト結果からビット列のアドレスを算出するアドレス計算部とを備えるように構成したので、探索対象であるストリームからのデータ読出回数および判定処理回数を低減させることができ、ハフマン復号化処理に必要な演算量を削減することができる。
【発明を実施するための最良の形態】
【００１７】
実施の形態１．
図１は、この発明の実施の形態１に係るハフマン復号化装置の構成を示すブロック図である。実施の形態１に係るハフマン復号化装置は、ハフマンテーブルを格納するハフマンテーブル記憶部１、入力ストリームからビット列を読み出すビット列読出部（読出部）２、語長を保持する語長更新部３、比較符号語を保持する比較符号語更新部４、比較符号語とビット列を比較する比較部５、オフセットアドレスを保持するテーブルＡ情報抽出部６、ストリームの参照位置を更新するビット列抽出部７、ビット列と最小符号語の差分値を算出する差分値計算部８、探索対象のアドレスを算出するアドレス計算部９および探索対象のインデックスを抽出するインデックス情報抽出部１０で構成される。
【００１８】
ハフマンテーブル記憶部１は、ハフマンテーブルＡおよびハフマンテーブルＢを格納している。図２はこの実施の形態１に係るハフマン復号化装置のハフマンテーブルを示す図であり、図２（ａ）はハフマンテーブルＡを示し、図２（ｂ）はハフマンテーブルＢを示している。ハフマンテーブルＡは、従来例の説明で用いた図８のハフマンテーブルＤにおいて、同一の語長である符号語を一つのブロックと考え、ブロック中で最小の値を取る符号語（以下、最小符号語と称する）、この最小符号語のアドレス、語長、およびブロック中で最大の値を取る符号語（以下、最大符号語と称する）を抽出して同じアドレス列に格納している。図８のハフマンテーブルＤでは同一語長で構成されたブロック毎に、アドレス列の色を変えて表示しており、ハフマンテーブルＡではこの同一色で示した同一語長の符号語を一つのブロックと考える。
【００１９】
上記手順に基づき作成したハフマンテーブルＡの先頭位置からの参照アドレスをオフセットアドレスとし、各アドレス列に対して「０」から順に番号を付与する。なお、最小符号語と最大符号語は、２進数から１０進数に変換して記憶する。また、ブロック内に符号語が１つしか存在しない場合には、その符号語を最小符号語および最大符号語とする。ハフマンテーブルＢは、図８のハフマンテーブルＤからアドレスおよびインデックスのみを抽出して作成したテーブルである。
【００２０】
ビット列読出部２は、外部装置（図示せず）からハフマン符号の探索対象となるストリーム（以下、探索対象ストリームと称する）の入力を受け付ける。また、語長更新部３から入力される語長をビット列抽出部７に出力すると共に、探索対象ストリームから当該語長分のビット列を読み出し１０進数に変換して比較部５に出力する。語長更新部３は語長を保持し、その語長の初期値はハフマンテーブルＡのオフセットアドレス「０」における語長とする。一方、テーブルＡ情報抽出部６から入力される語長を新たな語長として更新し、更新結果をビット列読出部２に出力する。
【００２１】
比較符号語更新部４は、比較符号語を保持し、その比較符号語の初期値はハフマンテーブルＡのオフセットアドレス「０」における最大符号語とする。一方、テーブルＡ情報抽出部６から入力される最大符号語を新たな比較符号語として更新し、更新結果を比較部５に出力する。比較部５は、ビット列読出部２から入力されたビット列と、比較符号語更新部４から入力された比較符号語との大小比較を行う。この比較結果に基づきテーブルＡ情報抽出部６および差分値計算部８を制御する。
【００２２】
テーブルＡ情報抽出部６は、オフセットアドレスを保持し、そのオフセットアドレスの初期値は「０」とする。一方、比較部５から入力される制御指示に基づきオフセットアドレスを加算し、加算後のオフセットアドレスに対応する語長、最大符号語、最小符号語およびアドレスをハフマンテーブルＡから抽出し、抽出した新たな語長を語長更新部３、最大符号語を比較符号語更新部４、最小符号語を差分値計算部８およびアドレスをアドレス計算部９に出力する。
【００２３】
ビット列抽出部７は、ビット列読出部２から入力される語長に対応するビット分のビット列を探索対象ストリームから抽出する。差分値計算部８は、比較部５から入力されるビット列とテーブルＡ情報抽出部６から入力される最小符号語との差分値（ビット列−最小符号語）を算出し、この差分値をアドレス計算部９に出力する。アドレス計算部９は、テーブルＡ情報抽出部６から入力されるアドレスと差分値計算部８から入力される差分値を加算して加算値（以下、ターゲットアドレスと称する）を算出し、このターゲットアドレスをインデックス情報抽出部１０に出力する。インデックス情報抽出部１０は、アドレス計算部９から入力されるターゲットアドレスと同一のアドレスを有するインデックスをハフマンテーブルＢから抽出する。
【００２４】
次に、この発明の実施の形態１に係るハフマン復号化装置の動作について説明する。図３はこの発明の実施の形態１に係るハフマン復号化装置の処理動作を示すフローチャートであり、以下このフローチャートに従って説明する。なお、この実施の形態１ではハフマンテーブルＡに基づき符号語の探索を行うものとし、ハフマンテーブルＡに基づく各情報をそれぞれ語長Ａ、比較符号語Ａ、最大符号語Ａ、最小符号語Ａ、ビット列Ａ、アドレスＡ、オフセットアドレスＡ、ターゲットアドレスＡとして説明する。
【００２５】
語長更新部３、比較符号語更新部４およびテーブルＡ情報抽出部６は、それぞれ保持する語長Ａ、比較符号語ＡおよびオフセットアドレスＡを初期化し、語長更新部３は語長Ａをビット列読出部２に出力し、比較符号語更新部４は比較符号語Ａを比較部５に出力する（ステップＳＴ１）。ビット列読出部２は、ステップＳＴ１において入力された語長Ａをビット列抽出部７に出力し（ステップＳＴ２）、さらに外部装置から入力された探索対象ストリームから語長Ａビット分のビット列Ａを読み出し、１０進数に変換して比較部５に出力する（ステップＳＴ３）。
【００２６】
比較部５は、ステップＳＴ１において入力された比較符号語ＡとステップＳＴ３において入力されたビット列Ａの大小関係を比較し、ビット列Ａが比較符号語Ａより大きい（比較符号語Ａ＜ビット列Ａ）か否か判定する（ステップＳＴ４）。ステップＳＴ４においてビット列Ａが大きいと判定された場合には、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルＡ情報抽出部６に対し、オフセットアドレスＡに「１」を加算する指示を出力する（ステップＳＴ５）。
【００２７】
テーブルＡ情報抽出部６は、ステップＳＴ５において入力された加算指示に基づき、オフセットアドレスＡに「１」を加算し、ハフマンテーブルＡから加算後のオフセットアドレス値がオフセットアドレスＡの語長Ａ、最大符号語Ａ、最小符号語ＡおよびアドレスＡをそれぞれ、語長更新部３、比較符号語更新部４、差分値計算部８およびアドレス計算部９に出力する（ステップＳＴ６）。比較符号語更新部４は、ステップＳＴ６において入力された最大符号語Ａを比較符号語Ａとして更新し、比較部５に出力する（ステップＳＴ７）。語長更新部３は、保持している語長をステップＳＴ６において入力された語長Ａに更新し、ビット列読出部２に出力する（ステップＳＴ８）。その後、シーケンスはステップＳＴ２の処理に戻り上述した処理を繰り返す。
【００２８】
一方、ステップＳＴ４においてビット列Ａが比較符号語Ａより小さいと判定された場合には、探索対象の符号語が探索中のブロックに存在するものと判断し、ビット列Ａを差分値計算部８に出力すると共に、ビット列抽出部７に対して探索対象ストリームから語長Ａビット分のビット列を抽出する指示を出力する（ステップＳＴ９）。ビット列抽出部７は、ステップＳＴ９において入力された抽出指示に基づき、語長Ａビット分のビット列を探索対象ストリームから抽出する（ステップＳＴ１０）。なお、ステップＳＴ１０の抽出処理は次のハフマン符号探索のためにストリームの参照位置を更新するために行うもので、抽出したビット列は以降の処理において必要としない。
【００２９】
差分値計算部８は、ステップＳＴ９において入力されたビット列ＡとステップＳＴ６においてテーブルＡ情報抽出部６から入力された最小符号語Ａの差分値Ａを算出し、この差分値Ａをアドレス計算部９に出力する（ステップＳＴ１１）。アドレス計算部９は、ステップＳＴ１１において入力された差分値ＡとステップＳＴ６において入力されたアドレスＡを加算してターゲットアドレスＡを算出し、インデックス情報抽出部１０に出力する（ステップＳＴ１２）。インデックス情報抽出部１０は、ステップＳＴ１２において入力されたターゲットアドレスＡのインデックスをハフマンテーブルＢから抽出し（ステップＳＴ１３）、処理を終了する。
【００３０】
次に、この実施の形態１に係るハフマン復号化装置の具体的な処理動作を、図２に示すハフマンテーブルＡ，Ｂおよび図３のフローチャートを用いて説明する。なお、探索すべきハフマン符号は図８のハフマンテーブルＤに含まれるものとし、図８のハフマンテーブルＤに基づくハフマンテーブルＡ（図２（ａ）参照）およびハフマンテーブルＢ（図２（ｂ）参照）が予め作成され、ハフマン符号の探索対象ストリームは「１１０１１０１０・・・」のビット列であるものとする。
【００３１】
語長更新部３は保持する語長Ａを「１」に、比較符号語更新部４は保持する比較符号語Ａを「０」に、テーブルＡ情報抽出部６は保持するオフセットアドレスＡを「０」にそれぞれ初期化し、語長Ａをビット列読出部２に、比較符号語Ａを比較部５に出力する（ステップＳＴ１）。ビット列読出部２は、ステップＳＴ１において入力された語長Ａ（＝１）をビット列抽出部７に出力する（ステップＳＴ２）。さらに、探索対象ストリームから語長Ａ（＝１）ビット分のビット列Ａ（＝１）を読出し、１０進数に変換（ビット列Ａ（＝１））して比較部５に出力する（ステップＳＴ３）。
【００３２】
比較部５は、ステップＳＴ１において入力された比較符号語Ａ（＝０）とステップＳＴ３において入力されたビット列Ａ（＝１）の大小関係を比較し、ビット列Ａが比較符号語Ａより大きいか否か判定する（ステップＳＴ４）。この場合には、ビット列Ａ（＝１）の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルＡ情報抽出部６に対し、オフセットアドレスＡ（＝０）に「１」を加算する指示を出力する（ステップＳＴ５）。
【００３３】
テーブルＡ情報抽出部６は、ステップＳＴ５において入力された加算指示に基づき、オフセットアドレスＡに「１」を加算してオフセットアドレスＡ（＝１）とし、ハフマンテーブルＡからオフセットアドレスＡ（＝１）である語長Ａ（＝３）、最大符号語Ａ（＝５）、最小符号語Ａ（＝４）およびアドレスＡ（＝１）をそれぞれ、語長更新部３、比較符号語更新部４、差分値計算部８およびアドレス計算部９に出力する（ステップＳＴ６）。
【００３４】
比較符号語更新部４は、ステップＳＴ６において入力された最大符号語Ａ（＝５）を比較符号語Ａ（＝５）として更新し、比較部５に出力する（ステップＳＴ７）。語長更新部３は、保持している語長Ａ（＝１）をステップＳＴ６において入力された語長Ａ（＝３）に更新し、ビット列読出部２に出力する（ステップＳＴ８）。その後、シーケンスはステップＳＴ２の処理に戻る。
【００３５】
ビット列読出部２は、語長更新部３から入力される語長Ａ（＝３）をビット列抽出部７に出力し（ステップＳＴ２´）、探索対象ストリームから語長Ａ（＝３）ビット分のビット列Ａ（＝１１０）を読出し、１０進数に変換（ビット列Ａ（＝６））して比較部５に出力する（ステップＳＴ３´）。
【００３６】
比較部５は、ステップＳＴ７において入力された比較符号語Ａ（＝５）とステップＳＴ３´において入力されたビット列Ａ（＝６）の大小関係を比較し、ビット列Ａが比較符号合Ａより大きいか否か判定する（ステップＳＴ４´）。この場合には、ビット列Ａ（＝６）の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルＡ情報抽出部６に対し、オフセットアドレスＡ（＝１）に「１」を加算する指示を出力する（ステップＳＴ５´）。
【００３７】
テーブルＡ情報抽出部６は、ステップＳＴ５´において入力された加算指示に基づき、オフセットアドレスＡに「１」を加算してオフセットアドレスＡ（＝２）とし、ハフマンテーブルＡからオフセットアドレスＡ（＝２）である語長Ａ（＝４）、最大符号語Ａ（＝１２）、最小符号語Ａ（＝１２）およびアドレスＡ（＝３）をそれぞれ、語長更新部３、比較符号語更新部４、差分値計算部８およびアドレス計算部９に出力する（ステップＳＴ６´）。
【００３８】
比較符号語更新部４は、ステップＳＴ６´において入力された最大符号語Ａ（＝１２）を比較符号語Ａ（＝１２）として更新し、比較部５に出力する（ステップＳＴ７´）。語長更新部３は、保持している語長Ａ（＝３）をステップＳＴ６において入力された語長Ａ（＝４）に更新し、ビット列読出部２に出力する（ステップＳＴ８´）。その後、シーケンスはステップＳＴ２の処理に戻る。
【００３９】
ビット列読出部２は、語長更新部３から入力される語長Ａ（＝４）をビット列抽出部７に出力し（ステップＳＴ２´´）、探索対象ストリームから語長Ａ（＝４）ビット分のビット列Ａ（＝１１０１）を読出し、１０進数に変換（ビット列Ａ（＝１３））して比較部５に出力する（ステップＳＴ３´´）。
【００４０】
比較部５は、ステップＳＴ７´において入力された比較符号語Ａ（＝１２）とステップＳＴ３´´において入力されたビット列Ａ（＝１３）の大小関係を比較し、ビット列Ａが比較符号合Ａより大きいか否か判定する（ステップＳＴ４´´）。この場合には、ビット列Ａ（＝１３）の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルＡ情報抽出部６に対し、オフセットアドレスＡ（＝２）に「１」を加算する指示を出力する（ステップＳＴ５´´）。
【００４１】
テーブルＡ情報抽出部６は、ステップＳＴ５´´において入力された加算指示に基づき、オフセットアドレスＡに「１」を加算してオフセットアドレスＡ（＝３）とし、ハフマンテーブルＡからオフセットアドレスＡ（＝３）である語長Ａ（＝６）、最大符号語Ａ（＝５５）、最小符号語Ａ（＝５２）およびアドレスＡ（＝４）をそれぞれ、語長更新部３、比較符号語更新部４、差分値計算部８およびアドレス計算部９に出力する（ステップＳＴ６´´）。
【００４２】
比較符号語更新部４は、ステップＳＴ６´´において入力された最大符号語Ａ（＝５５）を比較符号語Ａ（＝５５）として更新し、比較部５に出力する（ステップＳＴ７´´）。語長更新部３は、保持している語長Ａ（＝４）をステップＳＴ６において入力された語長Ａ（＝６）に更新し、ビット列読出部２に出力する（ステップＳＴ８´´）。その後、シーケンスはステップＳＴ２の処理に戻る。
【００４３】
ビット列読出部２は、語長更新部３から入力される語長Ａ（＝６）をビット列抽出部７に出力し（ステップＳＴ２´´´）、探索対象ストリームから語長Ａ（＝６）ビット分のビット列Ａ（＝１１０１１０）を読出し、１０進数に変換（ビット列Ａ（＝５４））して比較部５に出力する（ステップＳＴ３´´´）。
【００４４】
比較部５は、ステップＳＴ７´´において入力された比較符号語Ａ（＝５５）とステップＳＴ３´´´において入力されたビット列Ａ（＝５４）の大小関係を比較し、ビット列Ａが比較符号合Ａより大きいか否か判定する（ステップＳＴ４´´´）。この場合には、ビット列Ａ（＝５４）の方が小さいため、探索対象の符号語が探索中のブロックに存在するものと判断し、ビット列Ａ（＝５４）を差分値計算部８に出力すると共に、ビット列抽出部７に対して探索対象ストリームから語長Ａ（＝６）ビット分のビット列（＝５４）を抽出する指示を出力する（ステップＳＴ９）。
【００４５】
ビット列抽出部７は、ステップＳＴ９において入力された抽出指示に基づき、語長Ａ（＝６）ビット分のビット列（＝５４）を探索対象ストリームから抽出する（ステップＳＴ１０）。差分値計算部８は、ステップＳＴ９において入力されたビット列Ａ（＝５４）とステップＳＴ６´´´においてテーブルＡ情報抽出部６から入力された最小符号語Ａ（＝５２）の差分値Ａを計算（５４−５２＝２）し、この差分値Ａ（＝２）をアドレス計算部９に出力する（ステップＳＴ１１）。
【００４６】
アドレス計算部９は、ステップＳＴ１１において入力された差分値Ａ（＝２）とステップＳＴ６´´´においてテーブルＡ情報抽出部６から入力されたアドレスＡ（＝４）を加算してターゲットアドレスＡ（４＋２＝６）を算出し、インデックス情報抽出部１０に出力する（ステップＳＴ１２）。インデックス情報抽出部１０は、ハフマンテーブルＢからステップＳＴ１２において入力されたターゲットアドレスＡ（＝６）のインデックス（＝１６）を抽出し（ステップＳＴ１３）、処理を終了する。
【００４７】
以上のように、この実施の形態１によれば、ビット列読出部２が探索対象ストリームからブロック毎に語長分のビット列を読み出し、比較部５が読み出したビット列とブロック内の最大符号語との比較を行い、比較結果に基づきアドレス計算部９がビット列とブロック内の最小符号語との差分値をアドレスのオフセット算出に用いるように構成したので、ハフマン符号の探索範囲を絞り込むことができ、探索対象ストリームからのデータ読出回数および判定処理回数を抑制し、さらにアドレス計算が加減算のみで実現することができる。これにより、ハフマン復号処理に必要な演算量を抑制することができる。
【００４８】
実施の形態２．
図４はこの発明の実施の形態２に係るハフマン復号化装置の構成を示すブロック図である。この実施の形態２に係るハフマン復号化装置は、ハフマンテーブル記憶部１、入力ストリームからビット列を読み出すビット列一括読出部（一括読出部）２１、比較符号語更新部４、比較部５、オフセットアドレスを保持するテーブルＣ情報抽出部２２、ビット列抽出部７、ビット列と最小拡張符号語の差分値を算出する差分値計算部（第１差分値計算部）８ａ、最大語長と語長の差分値を算出する差分値計算部（第２差分値計算部）８ｂ、差分値にシフト処理を行うシフト計算部２３、アドレス計算部９およびインデックス情報抽出部１０で構成される。なお、以下では実施の形態１と同一の構成には図１で使用した符号と同一の符号を付し、説明を省略または簡略化する。
【００４９】
ハフマンテーブル記憶部１は、ハフマンテーブルＢおよびハフマンテーブルＣを格納している。図５はこの発明の実施の形態２に係るハフマン復号化装置のハフマンテーブルを示す図であり、図５（ａ）はハフマンテーブルＣを示し、図５（ｂ）は従来のハフマンテーブルＤを符号拡張したハフマンテーブルＤ´を示している。ハフマンテーブルＤ´は、図８のハフマンテーブルＤに基づき、テーブル内の最大語長に満たない符号語についてＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側、即ち下位ビット側に「０」を挿入して符号拡張を行ったものである。なお、図５（ｂ）において符号拡張を行った部分は太字で記載している。
【００５０】
ハフマンテーブルＣは、ハフマンテーブルＤにおいて同一の語長である拡張符号語を一つのブロックと考え、ブロック中で最小の値を取る拡張符号語（以下、最小拡張符号語と称する）、この最小拡張符号語のアドレス、語長、およびブロック中で最大の値を取る拡張符号語（以下、最大拡張符号語と称する）を抽出して同じアドレス列に格納する。図５（ｂ）のハフマンテーブルＤ´では同一語長で構成されたブロック毎にアドレス列の色を変えて表示しており、ハフマンテーブルＣではこの同一色で示した同一語長の符号語を一つのブロックと考える。
【００５１】
上記手順に基づき作成したハフマンテーブルＣの先頭位置からの参照アドレスを、オフセットアドレスとして各アドレス列に対して「０」から順に番号を付与する。なお、最小拡張符号語と最大拡張符号語は、２進数から１０進数に変換して記憶する。また、ブロック内に拡張符号語が１つしか存在しない場合には、その拡張符号語を最小拡張符号語および最大拡張符号語とする。
【００５２】
ビット列一括読出部２１は、探索対象ストリームの入力を受け付け、その探索対象ストリームの最大語長を保持する。その最大語長の初期値はハフマンテーブルＣにおいて最大の値をとる語長とする。さらに、探索対象ストリームから当該最大語長ビット分のビット列を読み出し１０進数に変換して比較部５に出力する。比較符号語更新部４は、比較符号語を保持し、その比較符号語の初期値はハフマンテーブルＣのオフセットアドレス「０」における最大拡張符号語とする。一方、テーブルＣ情報抽出部２２から入力される最大拡張符号語を新たな比較符号語として更新し、更新結果を比較部５に出力する。比較部５は、ビット列一括読出部２１から入力されたビット列と比較符号語更新部４から入力された比較符号語との大小比較を行う。この比較結果に基づきテーブルＣ情報抽出部２２および差分値計算部８ａ，８ｂを制御する。
【００５３】
テーブルＣ情報抽出部２２は、オフセットアドレスおよび語長を保持し、これらのオフセットアドレスの初期値は「０」およびオフセットアドレス「０」の語長とする。一方、比較部５から入力される制御指示に基づきオフセットアドレスを加算し、加算後のオフセットアドレスに対応する最大拡張符号語、最小拡張符号語、語長およびアドレスをハフマンテーブルＣから抽出し、抽出した新たな最大拡張符号語を比較符号語更新部４、最小拡張符号語を差分値計算部８ａ、語長をビット列抽出部７と差分値計算部８ｂ、およびアドレスをアドレス計算部９に出力する。ビット列抽出部７は、ビット列一括読出部２１から入力される語長に対応するビット分のビット列を探索対象ストリームから抽出する。
【００５４】
差分値計算部８ａは、比較部５から入力されるビット列とテーブルＣ情報抽出部２２から入力される最小拡張符号語との差分値ａ（ビット列−最小拡張符号語）を算出し、シフト計算部２３に出力する。差分値計算部８ｂは、最大語長を保持し、その最大語長の初期値はハフマンテーブルＣにおいて最大の値をとる語長とする。その最大語長とテーブルＣ情報抽出部２２から入力される語長との差分値ｂ（最大語長−語長）を算出し、シフト計算部２３に出力する。
【００５５】
シフト計算部２３は、差分値ａに対して、差分値ｂビット分小さくなる方向にシフト処理を行い、シフト結果をアドレス計算部９に出力する。アドレス計算部９は、テーブルＣ情報抽出部２２から入力されるアドレスとシフト計算部２３から入力されるシフト結果を加算して加算値（以下、ターゲットアドレスと称する）を算出し、このターゲットアドレスをインデックス情報抽出部１０に出力する。インデックス情報抽出部１０は、アドレス計算部９から入力されるターゲットアドレスと同一のアドレスを有するインデックスをハフマンテーブルＢから抽出する。
【００５６】
次に、この発明の実施の形態２に係るハフマン復号化装置の動作について説明する。図６はこの発明の実施の形態２に係るハフマン復号化装置の処理動作を示すフローチャートであり、以下このフローチャートに従って説明する。なお、この実施の形態２ではハフマンテーブルＣに基づき符号語の探索を行うものとし、ハフマンテーブルＣに基づく各情報をそれぞれ語長Ｃ、比較符号語Ｃ、最大拡張符号語Ｃ、最小拡張符号語Ｃ、ビット列Ｃ、アドレスＣ、オフセットアドレスＣ、ターゲットアドレスＣとして説明する。
【００５７】
比較符号語更新部４、テーブルＣ情報抽出部２２、ビット列一括読出部２１および差分値計算部８ｂは、それぞれ保持する比較符号語Ｃ、オフセットアドレスＣおよび語長Ｃ、最大語長Ｃを初期化し、比較符号語更新部４は比較符号語Ｃを比較部５に出力する（ステップＳＴ２１）。ビット列一括読出部２１は、外部装置から入力された探索対象ストリームから最大語長Ｃビット分のビット列Ｃを読出し、１０進数に変換して比較部５に出力する（ステップＳＴ２２）。
【００５８】
比較部５は、ステップＳＴ２１において比較符号語更新部４から入力された比較符号語ＣとステップＳＴ２２においてビット列一括読出部２１から入力されたビット列Ｃの大小関係を比較し、ビット列Ｃが比較符号語Ｃより大きいか（比較符号語Ｃ＜ビット列Ｃ）か否か判定する（ステップＳＴ２３）。ステップＳＴ２３においてビット列Ｃが大きいと判定された場合には、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルＣ情報抽出部２２に対し、オフセットアドレスＣに「１」を加算する指示を出力する（ステップＳＴ２４）。
【００５９】
テーブルＣ情報抽出部２２は、ステップＳＴ２４において入力された加算指示に基づき、オフセットアドレスＣに「１」を加算し、ハフマンテーブルＣから加算後のオフセットアドレス値がオフセットアドレスＣの最大拡張符号語Ｃを比較符号語更新部４に、最小拡張符号語Ｃを差分値計算部８ａに、語長Ｃをビット列抽出部７および差分値計算部８ｂに、アドレスＣをアドレス計算部９に出力する（ステップＳＴ２５）。比較符号語更新部４は、ステップＳＴ２５において入力された最大拡張符号語Ｃを比較符号語Ｃとして更新し、比較部５に出力する（ステップＳＴ２６）。その後、シーケンスはステップＳＴ２３の処理に戻り上述した処理を繰り返す。
【００６０】
一方、ステップＳＴ２３においてビット列Ｃが比較符号語Ｃより小さいと判定された場合には、探索対象の符号語が探索中のブロックに存在するものと判断し、ビット列Ｃを差分値計算部８ａに出力すると共に、ビット列抽出部７に対して探索対象ストリームから語長Ｃビット分のビット列を抽出する指示を出力する（ステップＳＴ２７）。ビット列抽出部７は、ステップＳＴ２７において入力された抽出指示に基づき、語長Ｃビット分のビット列を探索対象ストリームから抽出する（ステップＳＴ２８）。なお、ステップＳＴ２８の抽出処理は次のハフマン符号探索のためにストリームの参照位置を更新するために行うものであり、抽出したビット列は以降の処理において必要としない。
【００６１】
差分値計算部８ａは、ステップＳＴ２７において入力されたビット列ＣとステップＳＴ２５において入力された最小拡張符号語との差分値Ｃａを算出し、シフト計算部２３に出力する（ステップＳＴ２９）。差分値計算部８ｂは、最大語長Ｃと、ステップＳＴ２５において入力された語長Ｃとの差分値Ｃｂを算出し、シフト計算部２３に出力する（ステップＳＴ３０）。シフト計算部２３は、入力された差分値Ｃａに対して差分値Ｃｂビット分値が小さくなる方向にシフト処理を行い、シフト結果をアドレス計算部９に出力する（ステップＳＴ３１）。
【００６２】
アドレス計算部９は、ステップＳＴ３１においてシフト計算部２３から入力されたシフト結果とステップＳＴ２５において入力されたアドレスＣを加算してターゲットアドレスＣを算出し、インデックス情報抽出部１０に出力する（ステップＳＴ３２）。インデックス情報抽出部１０は、ステップＳＴ３２において入力されたターゲットアドレスＣのインデックスをハフマンテーブルＢから抽出し（ステップＳＴ３３）、処理を終了する。
【００６３】
次に、この実施の形態２に係るハフマン復号化装置の具体的な処理動作を、図２（ｂ）および図５（ａ）に示すハフマンテーブルＢ，Ｃおよび図６のフローチャートを用いて説明する。なお、探索すべきハフマン符号は図８のハフマンテーブルＤに含まれるものとし、図８のハフマンテーブルＤに基づくハフマンテーブルＢ（図２（ｂ）参照）およびハフマンテーブルＣ（図５（ａ）参照）が予め作成され、ハフマン符号の探索対象ストリームは「１１０１１０１０・・・」のビット列であるものとする。
【００６４】
比較符号語更新部４は保持する比較符号語Ｃを「０」に、テーブルＣ情報抽出部２２は保持するオフセットアドレスＣを「０」および語長Ｃを「１」に、ビット列一括読出部２１および差分値計算部８ｂが共有して保持する最大語長Ｃを「８」にそれぞれ初期化し、比較符号語更新部４は比較符号語Ｃ（＝０）を比較部５に出力する（ステップＳＴ２１）。ビット列一括読出部２１は、外部装置から入力された探索対象ストリームから最大語長Ｃ（＝８）ビット分のビット列Ｃ（＝１１０１１０１０）を読出し、１０進数に変換（ビット列Ｃ（＝２１８））して比較部５に出力する（ステップＳＴ２２）。
【００６５】
比較部５は、ステップＳＴ２１において入力された比較符号語Ｃ（＝０）とステップＳＴ２２において入力されたビット列Ｃ（＝２１８）の大小関係を比較し、ビット列Ｃが比較符号語Ｃより大きいか否か判定する（ステップＳＴ２３）。この場合には、ビット列Ｃ（＝２１８）の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルＣ情報抽出２２に対し、オフセットアドレスＣ（＝０）に「１」を加算する指示を出力する（ステップＳＴ２４）。
【００６６】
テーブルＣ情報抽出２２は、ステップＳＴ２４において入力された加算指示に基づき、オフセットアドレスＣに「１」を加算してオフセットアドレスＣ（＝１）とし、ハフマンテーブルＣからオフセットアドレスＣ（＝１）である最大拡張符号語Ｃ（＝１６０）を比較符号語更新部４に、最小拡張符号語Ｃ（＝１２８）を差分値計算部８ａに、語長Ｃ（＝３）をビット列抽出部７および差分値計算部８ｂに、アドレスＣ（＝１）をアドレス計算部９に出力する（ステップＳＴ２５）。比較符号語更新部４は、ステップＳＴ２５において入力された最大拡張符号語Ｃ（＝１６０）を比較符号語Ｃ（＝１６０）として更新し、比較部５に出力する（ステップＳＴ２６）。その後、シーケンスはステップＳＴ２３の処理に戻る。
【００６７】
比較部５は、ステップＳＴ２６において入力された比較符号語Ｃ（＝１６０）とビット列Ｃ（＝２１８）の大小関係を比較し、ビット列Ｃが比較符号語Ｃより大きいか否か判定する（ステップＳＴ２３´）。この場合には、ビット列Ｃ（＝２１８）の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルＣ情報抽出２２に対し、オフセットアドレスＣ（＝１）に「１」を加算する指示を出力する（ステップＳＴ２４´）。
【００６８】
テーブルＣ情報抽出２２は、ステップＳＴ２４´において入力された加算指示に基づき、オフセットアドレスＣに「１」を加算してオフセットアドレスＣ（＝２）とし、ハフマンテーブルＣからオフセットアドレスＣ（＝２）である最大拡張符号語Ｃ（＝１９２）を比較符号語更新部４に、最小拡張符号語Ｃ（＝１９２）を差分値計算部８ａに、語長Ｃ（＝４）をビット列抽出部７および差分値計算部８ｂに、アドレスＣ（＝３）をアドレス計算部９に出力する（ステップＳＴ２５´）。比較符号語更新部４は、ステップＳＴ２５´において入力された最大拡張符号語Ｃ（＝１９２）を比較符号語Ｃ（＝１９２）として更新し、比較部５に出力する（ステップＳＴ２６´）。その後、シーケンスはステップＳＴ２３の処理に戻る。
【００６９】
比較部５は、ステップＳＴ２６´において入力された比較符号語Ｃ（＝１９２）とビット列Ｃ（＝２１８）の大小関係を比較し、ビット列Ｃが比較符号語Ｃより大きいか否か判定する（ステップＳＴ２３´´）。この場合には、ビット列Ｃ（＝２１８）の方が大きいため、探索対象の符号語が探索中のブロックに存在しなかったものと判断し、テーブルＣ情報抽出２２に対し、オフセットアドレスＣ（＝２）に「１」を加算する指示を出力する（ステップＳＴ２４´´）。
【００７０】
テーブルＣ情報抽出２２は、ステップＳＴ２４´´において入力された加算指示に基づき、オフセットアドレスＣに「１」を加算してオフセットアドレスＣ（＝３）とし、ハフマンテーブルＣからオフセットアドレスＣ（＝３）である最大拡張符号語Ｃ（＝２２０）を比較符号語更新部４に、最小拡張符号語Ｃ（＝２０８）を差分値計算部８ａに、語長Ｃ（＝６）をビット列抽出部７および差分値計算部８ｂに、アドレスＣ（＝４）をアドレス計算部９に出力する（ステップＳＴ２５´´）。比較符号語更新部４は、ステップＳＴ２５´´において入力された最大拡張符号語Ｃ（＝２２０）を比較符号語Ｃ（＝２２０）として更新し、比較部５に出力する（ステップＳＴ２６´´）。その後、シーケンスはステップＳＴ２３の処理に戻る。
【００７１】
比較部５は、ステップＳＴ２６´´において入力された比較符号語Ｃ（＝２２０）とビット列Ｃ（＝２１８）の大小関係を比較し、ビット列Ｃが比較符号語Ｃより大きいか否か判定する（ステップＳＴ２３´´´）。この場合には、ビット列Ｃ（＝２１８）の方が小さいため、探索対象の符号語が探索中のブロックに存在するものと判断し、ビット列Ｃ（＝２１８）を差分値計算部８ａに出力すると共に、ビット列抽出部７に対して探索対象ストリームから語長Ｃ（＝６）ビット分のビット列（＝２１８）を抽出する指示を出力する（ステップＳＴ２７）。
【００７２】
ビット列抽出部７は、ステップＳＴ２７において入力された抽出指示に基づき、語長Ｃ（＝６）ビット分のビット列（＝２１８）を探索対象ストリームから抽出する（ステップＳＴ２８）。差分値計算値８ａは、ビット列Ｃ（＝２１８）とステップＳＴ２５´´においてテーブルＣ情報抽出部２２から入力された最小拡張符号語Ｃ（＝２０８）の差分値Ｃａを計算（２１８−２０８＝１０）し、この差分値Ｃａ（＝１０）をシフト計算部２３に出力する（ステップＳＴ２９）。また、差分値計算部８ｂは、最大語長Ｃ（＝８）とステップＳＴ２５´´においてテーブルＣ情報抽出部２２から入力された語長Ｃ（＝６）との差分値Ｃｂを計算（８−６＝２）し、この差分値Ｃｂ（＝２）をシフト計算部２３に出力する（ステップＳＴ３０）。
【００７３】
シフト計算部２３は、差分値Ｃａ（＝１０）に対して差分値Ｃｂ（＝２）ビット分値が小さくなる方向にシフト処理を行い（１０＞＞２＝２）、シフト結果（＝２）をアドレス計算部９に出力する（ステップＳＴ３１）。アドレス計算部９は、シフト結果（＝２）とアドレスＣ（＝４）を加算してターゲットアドレスＣ（４＋２＝６）を算出し、インデックス情報抽出部１０に出力する（ステップＳＴ３２）。インデックス情報抽出部１０は、ハフマンテーブルＢからステップＳＴ３２において入力されたターゲットアドレスＣ（＝６）のインデックスＣ（＝１６）を抽出し（ステップＳＴ３３）、処理を終了する。
【００７４】
以上のように、この実施の形態２によれば、ビット列一括読出部２１が符号探索ストリームから最大語長分のビット列を１回のみ読み出し、比較部５が読み出したビット列とブロック内の最大拡張符号語との比較を行い、比較結果に基づきアドレス計算部９がビット列とブロック内の最小拡張符号語との差分値を用いてアドレスのオフセット算出を行うように構成したので、ハフマン符号の探索範囲を絞り込むことができ、符号探索ストリームからのデータの読出回数を最大語長分のビット列読出しとストリームの参照位置を更新するために行うビット列抽出の２回に抑制し、判定処理回数を抑制することができる。また、アドレス計算が加減算とシフト演算のみで実現することができる。これらによりハフマン復号処理に必要な演算量を削減することができる。
【図面の簡単な説明】
【００７５】
【図１】この発明の実施の形態１に係るハフマン復号化装置の構成を示すブロック図である。
【図２】この発明の実施の形態１に係るハフマン復号化装置の動作を示すフローチャートである。
【図３】この発明の実施の形態１に係るハフマン復号化装置のハフマンテーブルを構成するデータの例を示す図である。
【図４】この発明の実施の形態２に係るハフマン復号化装置の構成を示すブロック図である。
【図５】この発明の実施の形態２に係るハフマン復号化装置の動作を示すフローチャートである。
【図６】この発明の実施の形態２に係るハフマン復号化装置のハフマンテーブルを構成するデータの例を示す図である。
【図７】従来のハフマン復号化装置の構成を示すブロック図である。
【図８】従来のハフマン復号化装置のハフマンテーブルを示す図である。
【符号の説明】
【００７６】
１，１０１  ハフマンテーブル記憶部、２  ビット列読出部、３  語長更新部、４  比較符号語更新部、５，１０７  比較部、６  テーブルＡ情報抽出部、７  ビット列抽出部、８，８ａ，８ｂ  差分値計算部、９  アドレス計算部、１０，１０８  インデックス情報抽出部、２１  ビット列一括読出部、２２  テーブルＣ情報抽出部、２３  シフト計算部、１０２  ビット抽出部、１０３  ビットカウンタ、１０４  ２値判定部、１０５  テーブル参照部、１０６  語長抽出部、Ａ，Ｂ，Ｃ，Ｄ，Ｄ´  ハフマンテーブル。
【図１】
0004942698.tif 000002
【図２】
0004942698.tif 000003
【図３】
0004942698.tif 000004
【図４】
0004942698.tif 000005
【図５】
0004942698.tif 000006
【図６】
0004942698.tif 000007
【図７】
0004942698.tif 000008
【図８】
0004942698.tif 000009