(57)【特許請求の範囲】
【請求項１】
ハフマン符号に対応する二分木を記述したテーブルを用いて前記ハフマン符号により符号化された入力データを復号する方法であって、
前記テーブルは、アドレスごとに、フラグの種類を示す２ビットのフラグ領域と、復号データ又はジャンプ先アドレスのいずれかが格納されるデータ領域とからなる語が記憶されているものであり、
前記フラグは、
前記入力データから抜き出された１ビットのデータが第１の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第２の値のときに前記テーブルの次のアドレスを参照することを示す第１のフラグ、
前記入力データから抜き出された１ビットのデータの値が第２の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第１の値のときに前記テーブルの次のアドレスを参照することを示す第２のフラグ、
無条件に前記テーブルのデータ領域に記憶されているデータを復号データとして出力することを示す第３のフラグ、又は、
前記入力データから抜き出された１ビットのデータの値が第１の値のときに前記テーブルの次のアドレスを参照し、第２の値のときに前記テーブルのデータ領域に記憶されているジャンプ先アドレスに移動することを示す第４のフラグのいずれかであり、
前記テーブルには、
前記二分木における終端節点を１つ有する分岐節点に対して、その終端節点に接続する枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その終端節点に格納されている復号データをデータ領域に記憶し、
前記二分木における終端節点を２つ有する分岐節点に対して、その一方の枝について、その枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、その次のアドレスに、前記第３のフラグをフラグ領域に記憶し、他方の枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、
前記二分木における終端節点を有さない分岐節点に対して、前記第４のフラグをフラグ領域に記憶し、そのジャンプ先アドレスをデータ領域に記憶したことを特徴とするハフマン符号の復号方法。
【請求項２】
ハフマン符号により符号化された入力データを復号する復号装置であって、
前記ハフマン符号に対応する二分木を記述したテーブルと、
前記入力データを１ビットずつ抜き出し、その値を判定するビット抜出し及び判定部と、
前記テーブルの読み出しアドレスを出力するアドレス生成手段とを有し、
前記テーブルは、アドレスごとに、フラグの種類を示す２ビットのフラグ領域と、復号データ又はジャンプ先アドレスのいずれかが格納されるデータ領域とからなる語が記憶されているものであり、
前記フラグは、
前記入力データから抜き出された１ビットのデータが第１の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第２の値のときに前記テーブルの次のアドレスを参照することを示す第１のフラグ、
前記入力データから抜き出された１ビットのデータの値が第２の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第１の値のときに前記テーブルの次のアドレスを参照することを示す第２のフラグ、
無条件に前記テーブルのデータ領域に記憶されているデータを復号データとして出力することを示す第３のフラグ、又は、
前記入力データから抜き出された１ビットのデータの値が第１の値のときに前記テーブルの次のアドレスを参照し、第２の値のときに前記テーブルのデータ領域に記憶されているジャンプ先アドレスに移動することを示す第４のフラグのいずれかであり、
前記テーブルは、
前記二分木における終端節点を１つ有する分岐節点に対して、その終端節点に接続する枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その終端節点に格納されている復号データをデータ領域に記憶し、
前記二分木における終端節点を２つ有する分岐節点に対して、その一方の枝について、その枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、その次のアドレスに、前記第３のフラグをフラグ領域に記憶し、他方の枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、
前記二分木における終端節点を有さない分岐節点に対して、前記第４のフラグをフラグ領域に記憶し、そのジャンプ先アドレスをデータ領域に記憶したものであり、
前記ビット抜出し及び判定部により１ビットずつ取得した前記入力データの値に応じて、前記テーブルの読み出しアドレスを制御し、前記テーブルを二分木探索して入力データに対応する復号データを出力することを特徴とする復号装置。
【請求項３】
ハフマン符号により符号化された入力データを復号するための前記ハフマン符号に対応する二分木を記述したテーブルであって、
アドレスごとに、フラグの種類を示す２ビットのフラグ領域と、復号データ又はジャンプ先アドレスのいずれかが格納されるデータ領域とからなる語が記憶されており、
前記フラグは、
前記入力データから抜き出された１ビットのデータが第１の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第２の値のときに前記テーブルの次のアドレスを参照することを示す第１のフラグ、
前記入力データから抜き出された１ビットのデータの値が第２の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第１の値のときに前記テーブルの次のアドレスを参照することを示す第２のフラグ、
無条件に前記テーブルのデータ領域に記憶されているデータを復号データとして出力することを示す第３のフラグ、又は、
前記入力データから抜き出された１ビットのデータの値が第１の値のときに前記テーブルの次のアドレスを参照し、第２の値のときに前記テーブルのデータ領域に記憶されているジャンプ先アドレスに移動することを示す第４のフラグのいずれかであり、
前記テーブルには、
前記二分木における終端節点を１つ有する分岐節点に対して、その終端節点に接続する枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その終端節点に格納されている復号データをデータ領域に記憶し、
前記二分木における終端節点を２つ有する分岐節点に対して、その一方の枝について、その枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、その次のアドレスに、前記第３のフラグをフラグ領域に記憶し、他方の枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、
前記二分木における終端節点を有さない分岐節点に対して、前記第４のフラグをフラグ領域に記憶し、そのジャンプ先アドレスをデータ領域に記憶したことを特徴とするハフマン符号復号用テーブル。
【請求項４】
アドレスごとに、フラグの種類を示す２ビットのフラグ領域と復号データ又はジャンプ先アドレスのいずれかが格納されるデータ領域とからなる語が記憶されており、前記フラグは、
前記入力データから抜き出された１ビットのデータが第１の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第２の値のときに前記テーブルの次のアドレスを参照することを示す第１のフラグ、
前記入力データから抜き出された１ビットのデータの値が第２の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第１の値のときに前記テーブルの次のアドレスを参照することを示す第２のフラグ、
無条件に前記テーブルのデータ領域に記憶されているデータを復号データとして出力することを示す第３のフラグ、又は、
前記入力データから抜き出された１ビットのデータの値が第１の値のときに前記テーブルの次のアドレスを参照し、第２の値のときに前記テーブルのデータ領域に記憶されているジャンプ先アドレスに移動することを示す第４のフラグのいずれかであるハフマン符号復号用テーブルの作成方法であって、
ハフマン符号の符号テーブルから、各終端節点に復号データが格納された該ハフマン符号に対応した二分木を作成する第１のステップ、
前記二分木における終端節点を１つ有する分岐節点に対して、その終端節点に接続する枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その終端節点に格納されている復号データをデータ領域に記憶する第２のステップ、
前記二分木における終端節点を２つ有する分岐節点に対して、その一方の枝について、その枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、その次のアドレスに、前記第３のフラグをフラグ領域に記憶し、他方の枝に接続された終端節点に格納されている復号データをデータ領域に記憶する第３のステップ、
前記二分木における終端節点を有さない分岐節点に対して、前記第４のフラグをフラグ領域に記憶する第４のステップ、
前記第２のステップないし前記第４のステップで作成された語を二分木探索順に配置する第５のステップ、及び、
前記配置後のアドレスを、前記第４のフラグを記憶したフラグ領域に対応するデータ領域に記憶する第６のステップ
を含むことを特徴とするハフマン符号復号用テーブルの作成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ハフマン符号の復号方法、復号装置、ハフマン符号復号用テーブルおよびその作成方法に関する。
【０００２】
【従来の技術】
ハフマン符号は、記号にその出現確率に応じた長さの符号語を割り当てることにより符号の平均語長を最小にする符号であり、エントロピー符号化（可変長符号化）の代表的なものとして知られている。ハフマン符号は、画像データや音声データなどのマルチメディアデータの圧縮などに広く利用されている。
【０００３】
従来のハフマン符号の復号装置の一例について、図６〜図８を参照して説明する。ここでは、図６に示すハフマンコードテーブルにより符号化された入力データを復号するものとする。すなわち、データ（記号）「Ａ」に対して符号長１ビットの符号語'1'、「Ｂ」に対して符号長２の符号語'00'、「Ｃ」に対して符号長３の符号語'010'、「Ｄ」および「Ｅ」に対して符号長５の符号語'01111'および'01100'、「Ｆ」に対して符号長６の符号語'011101'、「Ｇ」、「Ｈ」、「Ｉ」、「Ｊ」、「Ｋ」および「Ｌ」に対してそれぞれ符号長７の符号語'0111001'、'0111000'、'0110111'、'0110110'、'0110101'、および、'0110100'が割り当てられている。
【０００４】
図７は、従来のハフマン復号装置の構成例を示す図である。
図７において、３１は図６に示したハフマンコードテーブルのうちの符号語を記憶した符号語テーブル、３２は対応する符号長を記憶した符号長テーブル、３３は対応する復号データを記憶したデータテーブルである。また、３４は前記符号語テーブル３１、符号長テーブル３２およびデータテーブル３３に対して読み出しアドレスを供給するカウンタ、３５はハフマン符号化された入力データから前記符号長テーブル３２から読み出された符号長（length）に基づいて決定されるビット数の入力データを取得する入力データ取得回路、３６は前記符号語テーブル３１から読み出された符号語（codeword）と前記データ取得回路３５からの入力データＤとの一致を検出する一致検出回路である。
【０００５】
このように構成された従来のハフマン復号装置の処理の流れを図８のフローチャートを参照して説明する。
まず、ステップＳ２１において、前記入力データ取得回路３５で取得した入力データＤ、前記カウンタ３４の計数値（すなわち前記テーブル３１〜３３の読み出しアドレス）ｎおよび符号長データＬをいずれも初期値＝０に設定する。そしてステップＳ２２に進み、前記符号長テーブル３２のアドレス＃ｎ（初期化直後は、ｎ＝０）をアクセスし、符号長を読み出す。
次に、ステップＳ２３に進み、読み出した符号長（length）が符号長データＬと一致するか否かを判定する。ｎ＝０の場合にはlength＝１であるため、不一致となり、ステップＳ２４に進む。ステップＳ２４において、前記入力データ取得回路３５により、入力データから（length−Ｌ）ビット（最初はＬ＝０であるため、１ビット）を取得する。すなわち、前記入力データＤを（length−Ｌ）ビット左シフトし、そこに取得した（length−Ｌ）ビットの入力データを加えて、新たな入力データＤとする。ｎ＝０の場合には、Ｄ＝０であるため、入力データＤは、その先頭から１ビットのデータとなる。そして、符号長データＬの値を符号長length（＝１）とする。
【０００６】
前記ステップＳ２４を実行した後、あるいは、前記ステップＳ２２で読み出した符号長（length）が符号長データＬと一致しているとき（前記ステップＳ２３の結果がＹＥＳ）は、ステップＳ２５に進み、前記アドレス＃ｎの符号語（codeword）を読み出す。そして、ステップＳ２６で、この読み出した符号語と前記入力データＤとの一致を判定する。その結果、一致しているときは、前記データテーブル３３からそのアドレス＃ｎに記憶されている復号データを読み出し、このハフマン符号化データの復号を終了する。そして、次の入力データの復号のために、前記ステップＳ２１からの処理を行なう。
一方、読み出した符号語と入力データＤとが一致していないときは、ステップＳ２８に進み、前記カウンタ３４の計数値ｎを＋１して、前記ステップＳ２２に戻り、新たなアドレス（ｎ＋１）について、前述した処理を繰り返す。
このように、ハフマンコードテーブルを記憶したメモリを用い総当り方式でハフマン符号化された入力データの復号を行うことができる。
【０００７】
なお、ハフマン復号方法および復号装置としては、上述した以外にも各種の方法が知られており、最大符号長分のアドレスを持つメモリを使用する方法、１ビットごとにコードツリーを追跡する方法、複数のメモリを用いて並列に復号する方法などが知られている。
【０００８】
【発明が解決しようとする課題】
上述したハフマンコードテーブルを用いるハフマン復号方法の場合には、参照すべきデータとして、復号データ、符号長および符号語の全ての情報が必要なため、ハフマンコードテーブルのメモリ容量が大きくなるという欠点がある。また、一致するまで判定を繰り返す逐次探索方法であるため、符号長が長いデータを取得する場合、メモリへの参照の回数も多く、効率が良くないという問題点がある。
さらに、前記最大符号長分のアドレスを持つメモリを使用する方法は、高速に復号することが可能であるが、メモリ容量が非常に大きくなってしまうという問題点がある。
さらにまた、処理速度を向上させるために並列処理を行う方法の場合には、回路規模が大きくなってしまうという問題点がある。
【０００９】
そこで本発明は、少ないメモリ容量で、かつ、高速に処理を行うことができるとともに、少ない回路規模しか必要としないハフマン符号の復号方法および復号装置を提供することを目的としている。
また、それに用いるハフマン符号復号用テーブルおよびその作成方法を提供することを目的としている。
【００１０】
【課題を解決するための手段】
上記目的を達成するために、本発明のハフマン符号の復号方法は、ハフマン符号に対応する二分木を記述したテーブルを用いて前記ハフマン符号により符号化された入力データを復号する方法であって、前記テーブルは、アドレスごとに、フラグの種類を示す２ビットのフラグ領域と、復号データ又はジャンプ先アドレスのいずれかが格納されるデータ領域とからなる語が記憶されているものであり、前記フラグは、前記入力データから抜き出された１ビットのデータが第１の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第２の値のときに前記テーブルの次のアドレスを参照することを示す第１のフラグ、前記入力データから抜き出された１ビットのデータの値が第２の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第１の値のときに前記テーブルの次のアドレスを参照することを示す第２のフラグ、無条件に前記テーブルのデータ領域に記憶されているデータを復号データとして出力することを示す第３のフラグ、又は、前記入力データから抜き出された１ビットのデータの値が第１の値のときに前記テーブルの次のアドレスを参照し、第２の値のときに前記テーブルのデータ領域に記憶されているジャンプ先アドレスに移動することを示す第４のフラグのいずれかであり、前記テーブルには、前記二分木における終端節点を１つ有する分岐節点に対して、その終端節点に接続する枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その終端節点に格納されている復号データをデータ領域に記憶し、前記二分木における終端節点を２つ有する分岐節点に対して、その一方の枝について、その枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、その次のアドレスに、前記第３のフラグをフラグ領域に記憶し、他方の枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、前記二分木における終端節点を有さない分岐節点に対して、前記第４のフラグをフラグ領域に記憶し、そのジャンプ先アドレスをデータ領域に記憶したものである。
【００１１】
また、本発明の復号装置は、ハフマン符号により符号化された入力データを復号する復号装置であって、前記ハフマン符号に対応する二分木を記述したテーブルと、前記入力データを１ビットずつ抜き出し、その値を判定するビット抜出し及び判定部と、前記テーブルの読み出しアドレスを出力するアドレス生成手段とを有し、前記テーブルは、アドレスごとに、フラグの種類を示す２ビットのフラグ領域と、復号データ又はジャンプ先アドレスのいずれかが格納されるデータ領域とからなる語が記憶されているものであり、前記フラグは、前記入力データから抜き出された１ビットのデータが第１の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第２の値のときに前記テーブルの次のアドレスを参照することを示す第１のフラグ、前記入力データから抜き出された１ビットのデータの値が第２の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第１の値のときに前記テーブルの次のアドレスを参照することを示す第２のフラグ、無条件に前記テーブルのデータ領域に記憶されているデータを復号データとして出力することを示す第３のフラグ、又は、前記入力データから抜き出された１ビットのデータの値が第１の値のときに前記テーブルの次のアドレスを参照し、第２の値のときに前記テーブルのデータ領域に記憶されているジャンプ先アドレスに移動することを示す第４のフラグのいずれかであり、前記テーブルは、前記二分木における終端節点を１つ有する分岐節点に対して、その終端節点に接続する枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その終端節点に格納されている復号データをデータ領域に記憶し、前記二分木における終端節点を２つ有する分岐節点に対して、その一方の枝について、その枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、その次のアドレスに、前記第３のフラグをフラグ領域に記憶し、他方の枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、前記二分木における終端節点を有さない分岐節点に対して、前記第４のフラグをフラグ領域に記憶し、そのジャンプ先アドレスをデータ領域に記憶したものであり、前記ビット抜出し及び判定部により１ビットずつ取得した前記入力データの値に応じて、前記テーブルの読み出しアドレスを制御し、前記テーブルを二分木探索して入力データに対応する復号データを出力するものである。
【００１２】
さらに、本発明のハフマン符号復号用テーブルは、ハフマン符号により符号化された入力データを復号するための前記ハフマン符号に対応する二分木を記述したテーブルであって、アドレスごとに、フラグの種類を示す２ビットのフラグ領域と、復号データ又はジャンプ先アドレスのいずれかが格納されるデータ領域とからなる語が記憶されており、前記フラグは、前記入力データから抜き出された１ビットのデータが第１の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第２の値のときに前記テーブルの次のアドレスを参照することを示す第１のフラグ、前記入力データから抜き出された１ビットのデータの値が第２の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第１の値のときに前記テーブルの次のアドレスを参照することを示す第２のフラグ、無条件に前記テーブルのデータ領域に記憶されているデータを復号データとして出力することを示す第３のフラグ、又は、前記入力データから抜き出された１ビットのデータの値が第１の値のときに前記テーブルの次のアドレスを参照し、第２の値のときに前記テーブルのデータ領域に記憶されているジャンプ先アドレスに移動することを示す第４のフラグのいずれかであり、前記テーブルには、前記二分木における終端節点を１つ有する分岐節点に対して、その終端節点に接続する枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その終端節点に格納されている復号データをデータ領域に記憶し、前記二分木における終端節点を２つ有する分岐節点に対して、その一方の枝について、その枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、その次のアドレスに、前記第３のフラグをフラグ領域に記憶し、他方の枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、前記二分木における終端節点を有さない分岐節点に対して、前記第４のフラグをフラグ領域に記憶し、そのジャンプ先アドレスをデータ領域に記憶したものである。
【００１３】
さらにまた、本発明のハフマン符号の復号用テーブルの作成方法は、アドレスごとに、フラグの種類を示す２ビットのフラグ領域と復号データ又はジャンプ先アドレスのいずれかが格納されるデータ領域とからなる語が記憶されており、前記フラグは、前記入力データから抜き出された１ビットのデータが第１の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第２の値のときに前記テーブルの次のアドレスを参照することを示す第１のフラグ、前記入力データから抜き出された１ビットのデータの値が第２の値のときに前記テーブルのデータ領域に記憶されているデータを復号データとして出力し、第１の値のときに前記テーブルの次のアドレスを参照することを示す第２のフラグ、無条件に前記テーブルのデータ領域に記憶されているデータを復号データとして出力することを示す第３のフラグ、又は、前記入力データから抜き出された１ビットのデータの値が第１の値のときに前記テーブルの次のアドレスを参照し、第２の値のときに前記テーブルのデータ領域に記憶されているジャンプ先アドレスに移動することを示す第４のフラグのいずれかであるハフマン符号復号用テーブルの作成方法であって、ハフマン符号の符号テーブルから、各終端節点に復号データが格納された該ハフマン符号に対応した二分木を作成する第１のステップ、前記二分木における終端節点を１つ有する分岐節点に対して、その終端節点に接続する枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その終端節点に格納されている復号データをデータ領域に記憶する第２のステップ、前記二分木における終端節点を２つ有する分岐節点に対して、その一方の枝について、その枝に対応する符号語のビット値が第１の値であるときには前記第１のフラグ、第２の値であるときには前記第２のフラグをフラグ領域に記憶し、その枝に接続された終端節点に格納されている復号データをデータ領域に記憶し、その次のアドレスに、前記第３のフラグをフラグ領域に記憶し、他方の枝に接続された終端節点に格納されている復号データをデータ領域に記憶する第３のステップ、前記二分木における終端節点を有さない分岐節点に対して、前記第４のフラグをフラグ領域に記憶する第４のステップ、前記第２のステップないし前記第４のステップで作成された語を二分木探索順に配置する第５のステップ、及び、前記配置後のアドレスを、前記第４のフラグを記憶したフラグ領域に対応するデータ領域に記憶する第６のステップを含むものである。
【００１４】
【発明の実施の形態】
図１は、本発明のハフマン符号の復号方法が実行されるハフマン復号装置の一実施の形態の構成を示すブロック図である。この図において、１は本発明のハフマン復号方法において用いるハフマン符号復号用テーブル（以下、「変換ハフマンテーブル」と呼ぶ。）、２は＋１加算を行うカウンタ３およびセレクタ４を有し、前記変換ハフマンテーブル１の読み出しアドレスを生成するアドレス生成手段、５はビット抜出し及び判定部である。ここで、前記変換ハフマンテーブル１は、ハフマン符号に対応した二分木を記述したテーブルであり、この二分木を探索するためのフラグと、ハフマン復号出力データあるいはジャンプ先アドレスとが格納されている。また、前記ビット抜出し及び判定部５は、前記変換ハフマンテーブル１から読み出されたフラグに応じて、入力データを１ビット抜き出し、その値が”０”であるのか”１”であるのかの判定を行う。前記アドレス生成手段２におけるセレクタ４は、前記ビット抜き出し及び判定部５からの制御信号に基づき、セレクタ４の出力をカウンタ３で＋１した値と前記変換ハフマンテーブル１から読み出されたジャンプ先アドレスのいずれかを選択して前記変換ハフマンテーブル１にアドレスとして供給する。
【００１５】
まず、前記変換ハフマンテーブル１およびその作成方法について、図２〜図４を参照して説明する。なお、ここでは、前述の場合と同じく図６に示したハフマンコードテーブルにより符号化された入力データを復号するものとする。
本発明のハフマン復号方法では、前記変換ハフマンテーブル１を作成するために、まず、前記図６に示したハフマンコードテーブルから、図２に示す該ハフマン符号に対応する二分木（binary tree）を生成する。このとき、各データ（記号）を二分木のリーフ（終端節点）に格納するようにする。
【００１６】
すなわち、前記図６のハフマンコードテーブルをみると、その最初のアドレス（アドレス＃０）には、符号長１、符号語'1'、データ「Ａ」からなる語（word）が記憶されている。符号長が１であることにより、このデータ「Ａ」がこのハフマン符号に対応する二分木のルートとなるノード（分岐節点）（図２における１１）に直接接続されるリーフに格納されるものであることが分かり、ビット０を左部分木、ビット１を右部分木に割り当てるとすると、符号語が'1'であることからノード１１の右部分木にデータ「Ａ」を格納したリーフが接続され、左部分木に第２のノード１２が接続される。
図６のハフマンコードテーブルの次のアドレス＃１に記憶されている語は、符号長２、符号語'00'、データ「Ｂ」である。符号長が２であり、符号語の２ビット目が０であることから、前記第２のノード１２の左部分木（ビット０）にデータ「Ｂ」を格納したリーフが接続され、右部分木（ビット１）に第３のノード１３が接続される。
【００１７】
前記ハフマンコードテーブルの次のアドレス＃２に記憶されている語は、符号長３、符号語'010'、データ「Ｃ」である。符号長が３であり、符号語の３ビット目が０であることから、第３のノード１３の左部分木（ビット０）にデータＣを格納したリーフが接続され、右部分木（ビット１）に第４のノード１４が接続される。
前記ハフマンコードテーブルの次のアドレス＃３に記憶されている語は、符号長５、符号語'01111'、データ「Ｄ」である。符号長が５であることから、このデータ「Ｄ」は前記第４のノード１４に直接接続されたリーフに格納されるものではないことが分かり、符号語の第４ビット目が１、第５ビット目が１であることから、前記第４のノード１４の右部分木に接続されたノード（図２中のノード１９）の右部分木にデータ「Ｄ」を格納したリーフが接続される。
以下、同様に前記ハフマンコードテーブルに記憶されている各語について、その符号長および符号語を解析することにより、各リーフにデータが格納された、このハフマン符号に対応する二分木を作成することができる。
【００１８】
このようにしてハフマンコードに対応する二分木を作成した後、この二分木から前記変換ハフマンテーブル１を作成する。図３は前記図２に示した二分木から生成した変換ハフマンテーブル１を示す図であり、この図に示すように、変換ハフマンテーブル１の各アドレスには、フラグ領域とデータ領域からなる語（word）が記憶されている。ここで、フラグは、略号ＤＬ、ＤＨ、ＳおよびＪＨで示される４種類の情報であり、２ビットのデータで表わすことができる。また、データ領域には、復号出力データあるいはジャンプ先アドレスが格納されている。
【００１９】
前記フラグＤＬ、ＤＨ、ＳおよびＪＨについて、図４を参照して説明する。
フラグＤＬは'00'で表わされ、入力データストリームから１ビットを抜き出し、その値が０ならば符号語に一致するものとして、そのアドレスのデータ領域に記憶されているデータを復号データとして出力し、値が１であるときは、変換ハフマンテーブル１の次のアドレス（現アドレスを＋１したアドレス）を参照することを示している。
フラグＤＨは'01'で表わされ、入力データストリームから１ビットを抜き出し、その値が１のときは符号語に一致するものとして、そのアドレスのデータ領域に記憶されているデータを復号データとして出力し、０のときは変換ハフマンテーブル１の次のアドレスを参照することを示している。
フラグＳは'10'で表わされ、入力データストリームからデータを抜き出すことなく無条件にそのアドレスのデータ領域に記憶されているデータを復号データとして出力することを示している。
フラグＪＨは'11'で表わされ、入力データストリームから１ビット抜き出し、その値が０ならば変換ハフマンテーブル１の次のアドレスを参照し、１ならばデータ領域に記憶されているアドレスに移動（ジャンプ）することを示している。ここで、このジャンプ先アドレスは、この変換ハフマンテーブルの先頭位置からの相対アドレスで示されている。
【００２０】
前記図２の二分木から前記図３の変換ハフマンテーブル１を生成する手順について説明する。
図２に示すように、二分木の節点は、（１）データが格納されるリーフ（終端節点）、（２）リーフを一つ有するノード（分岐節点）、（３）リーフを２つ有するノード、および、（４）リーフを持たないノードの４種類に分けられる。
そこで、上記（２）、（３）のリーフを有するノードに対して、ＤＨまたはＤＬのフラグを持たせて、その枝に接続されるリーフのデータを格納する。すなわち、（２）のリーフを１つ有するノードに対しては、そのリーフに接続する枝の符号語のビットが”０”であるときにはフラグＤＬ、”１”のときにはフラグＤＨを持たせ、そのリーフに格納されているデータの復号データをデータ領域に記憶して１語とする。また、（３）のリーフを２つ有するノードについては、一方の枝について上記（２）の場合と同様にＤＬまたはＤＨのフラグを持たせ、その枝に接続されているリーフに格納されているデータの復号データを記憶する。そして、他方の枝について、その次のアドレスにフラグＳを付けてそのリーフに格納されているデータの復号データを格納する。これらにより、全てのリーフに対応する語を生成することができる。
また、前記（４）のリーフを持たないノードについては、フラグＪＨを付加し、前述のようにして作成された語が二分木探索の順に並べられて変換ハフマンテーブルのアドレスが確定した後に、そのジャンプ先アドレス（符号語のビットが”１”であるときに選択されるノードに対する語のアドレス）を前記データ領域に格納する。
【００２１】
前記図２に示した例では、まず、根となるノード１１について、そのビット１に対応する枝（右部分木）にデータＡが格納されたリーフが接続されているので、１のときに符号語に一致すると判定するフラグＤＨ（'01'）とそのリーフに格納されている「Ａ」に対応する復号データとを記憶する（アドレス＃０）。
次に、前記根となるノードの左部分木に接続されたノード（第２のノード）１２に対しては、左部分木（ビット０）にデータＢを格納したリーフが接続されているので、変換ハフマンテーブルのアドレス＃１には、フラグＤＬ（'01'）と「Ｂ」の復号データを記憶する。同様に、前記第２のノード１２の右部分木に接続された第３のノード１３に対応して、変換ハフマンテーブルのアドレス＃２に、フラグＤＬと「Ｃ」の復号データを記憶する。
また、前記第３のノード１３の右部分木に接続された第４のノード１４は上記（４）のリーフを持たないノードであるため、変換ハフマンテーブルの当該アドレス（アドレス＃３）のフラグ領域にはフラグＪＨを記憶し、データ領域についてはジャンプ先アドレスが確定するまでデータを記憶しない。
次に、前記第４のノード１４の左部分木に接続された第５のノード１５は、その左部分木（ビット０）にデータ「Ｅ」を格納したリーフが接続されているので、変換ハフマンテーブルのアドレス＃４のフラグ領域にビット０で符号語と一致するフラグＤＬ（'00'）を書き込むとともに、データ領域に「Ｅ」に対応する復号データを書き込む。
【００２２】
前記第５のノード１５の右部分木（ビット１）に接続された第６のノード１６は、（４）のリーフを持たないノードであるため、変換ハフマンテーブルのアドレス＃５のフラグ領域にフラグＪＨを記憶する。なお、データ領域には、ジャンプ先のアドレスが確定した後にそのアドレスを書き込む。
前記第６のノード１６の左部分木（ビット０）に接続された第７のノード１７は、その左部分木（ビット０）にデータＬを格納したリーフが接続されているので、変換ハフマンテーブルのアドレス＃６のフラグ領域にはフラグＤＬが記憶され、データ領域には「Ｌ」に対応する復号データが記憶される。
また、該第７のノード１７の右部分木（ビット１）にはデータ「Ｋ」を格納したリーフが接続されているので、変換ハフマンテーブルのアドレス＃７にはフラグＳ（'10'）とデータ「Ｋ」に対応する復号データが記憶される。
【００２３】
次に、前記第６のノード１６の右部分木（ビット１）に接続された第８のノード１８に関する処理を行なう。この第８のノード１８の左部分木にはデータ「Ｊ」を格納したリーフが接続されているので、変換ハフマンテーブルのアドレス＃８にはフラグＤＬとデータ「Ｊ」に対応する復号データが記憶される。また、ここで、前記第６のノードの分岐先のアドレスがアドレス＃８であることが決定されたので、前記保留とされていた第６のノード１６に対するアドレス＃５のデータ領域にこのジャンプ先アドレスである「８」を記憶する。
また、前記第８のノード１８の右部分木（ビット１）にはデータ「Ｉ」を格納したリーフが接続されているので、変換ハフマンテーブルのアドレス＃９にはフラグＳとデータ「Ｉ」に対応する復号データが記憶される。
以上で前記第４のノード１４の左部分木に連なる枝についての処理が終了したため、前記第４のノード１４の右部分木に連なる枝の処理を行なう。
【００２４】
前記第４のノードの右部分木（ビット１）には、第９のノード１９が接続されている。この第９のノード１９はその左部分木（ビット０）に第１０のノード２０が接続されており、右部分木（ビット１）にはデータ「Ｄ」を格納したリーフが接続されている。したがって、変換ハフマンテーブルのアドレス＃１０のフラグ領域にフラグＤＨを記憶し、データ領域にはデータ「Ｄ」に対応する復号データを記憶する。また、ここで、第４のノード１４の右部分木に接続されたノード（第９のノード）１９に対するデータの記憶アドレスが＃１０であることが決定されたため、前記第４のノード１４に関する語（アドレス＃３の語）のデータ領域にそのアドレス＃１０を示す１０がジャンプ先アドレスとして記憶される。
前記第９のノード１９の左部分木に接続された第１０のノード２０には、その左部分木（ビット０）に第１１のノード２１が接続され、右部分木（ビット１）にデータ「Ｆ」が格納されたリーフが接続されている。したがって、変換ハフマンテーブルのアドレス＃１１には、フラグＤＨとデータ「Ｆ」に対応する復号データが記憶される。
第１０のノード２０の左部分木に接続された第１１のノード２１は、その左部分木にデータ「Ｈ」を格納したリーフが接続され、右部分木にデータ「Ｇ」を格納したリーフが接続されている。したがって、変換ハフマンテーブルのアドレス＃１２にフラグＤＬとデータ「Ｈ」に対応する復号データが記憶され、アドレス＃１３にフラグＳとデータ「Ｇ」に対応する復号データが記憶される。
【００２５】
なお、上記においては、二分木の探索順に順次アドレスを決定しつつ変換ハフマンテーブル１を生成したが、それぞれのノードに対応する語を決定した後、それらを二分木探索順に並べて前記変換ハフマンテーブル１を作成するようにしてもよい。
また、上記においては、フラグＪＨにつき、ビットが０のときに次のアドレスを参照し、１のときにジャンプするというように定義したが、ビット１のときに次のアドレスを参照し、０のときにジャンプするというように定義しても良い。
【００２６】
このようにして、ハフマン符号を記述した二分木から、変換ハフマンテーブルを作成することができる。作成された変換ハフマンテーブルは、各記憶アドレスごとに２ビットのフラグ領域と、データに対応するデータあるいはジャンプ先アドレスを示すデータが格納されるデータ領域とからなっている。すなわち、本発明の変換ハフマンテーブルは、前記ハフマンコードテーブル（図６）のように復号データ、符号長および符号語を記憶するものではなく、２ビットのフラグと復号データまたはジャンプ先アドレスを記憶するものである。
一方、アドレス数（すなわち変換ハフマンテーブルの語数）は、この例では、符号数＋２となっており、前記図６に示したハフマンコードテーブルよりも、フラグＪＨが格納されているアドレスの分だけ（すなわち、リーフを持たないノードの数だけ）増加している。
しかしながら、上述のように語長が、復号データのビット数＋２ビットと少なくなっているので、全体としてテーブルのサイズを小さくすることができる。
【００２７】
次に、このようにして作成された変換ハフマンテーブル１を用いた本発明のハフマン復号装置（図１）の動作について、図５のフローチャートを参照して説明する。
初期状態では、前記セレクタ４がカウンタ３の出力を選択するように設定されているものとする。まず、ステップＳ１において、カウンタ３の計数値adrを０に初期設定する。そして、ステップＳ２に進み、前記変換ハフマンテーブル１の読出しアドレス＃０のデータ（フラグＤＨと「Ａ」の復号データ）を読出し、フラグとデータを分離する。
次に、ステップＳ３において、読出したフラグがＳであるか否かを判定する。この場合は、アドレス＃０から読出したフラグがＤＨであるため、この判定結果はＮＯとなり、ステップＳ５に進み、前記ビット抜き出し及び判定部４により入力データストリームから次の１ビット（Ｉ）を取得する。なお、読出したフラグがＳであるときは、そのデータを復号データとして出力する（ステップＳ４）。
【００２８】
そして、ステップＳ６に進み、前記読出したフラグがＪＨであるか否かを判定する。この判定結果がＹＥＳのときはステップＳ７に進み、前記ステップＳ５で取得したビットＩが０であるか否かを判定する。ビットＩが０であるときは、ステップＳ８に進み、前記カウンタ３の計数値を＋１して、前記ステップＳ２に戻り、前記変換ハフマンテーブル１から当該アドレスのデータを読み出す。また、取得したビットＩが１であるときには、ステップＳ９に進み、フラグＪＨとともに記憶されていたデータ（ジャンプ先アドレスを示すデータ）を読出しアドレスとして前記ステップＳ２に戻り、前記変換ハフマンテーブル１から当該アドレスのデータを読み出す。すなわち、前記セレクタ４の入力を前記変換ハフマンテーブル１の出力側に切り替え、前記フラグＪＨとともに記憶されていたデータ（ジャンプ先アドレス）を読み出しアドレスとする。
【００２９】
一方、前記ステップＳ６の判定結果がＮＯのときは、ステップＳ１０に進み、読み出されたフラグがＤＨであるか否かを判定する。この判定結果がＹＥＳ（フラグがＤＨ）のときは、ステップＳ１１に進み、前記１ビット取得したデータＩが０であるか否かを判定する。この判定結果がＹＥＳのときは、前記カウンタ３で読み出しアドレスを＋１して（ステップＳ１２）、前記ステップＳ２に戻り、前記変換ハフマンテーブル１の次のアドレスを読み出す。一方、Ｉが１であるときは、ステップＳ４に進み、フラグＤＨとともに読み出されたデータを復号データとして出力する。
また、前記ステップＳ１０の判定結果がＮＯ（すなわち、読出したフラグがＤＬ）であるときには、ステップＳ１３に進み、前記ステップＳ５で１ビット取得したデータＩが０であるか否かを判定する。この判定結果がＹＥＳのときは、そのフラグＤＬとともに記憶されていたデータを復号データとして出力する（ステップＳ４）。一方、Ｉが１であるときは、ステップＳ１４に進み、前記カウンタ３の計数値を＋１して、前記ステップＳ２に戻り、復号データを出力し処理終了となるまで上述したステップを繰り返す。
【００３０】
一例として、入力データストリームが'01100'である場合を例にとって説明する。なお、ここでは、最上位ビットを先頭として入力されてくるものとする。
まず、前記ステップＳ１、Ｓ２により図３に示した変換ハフマンテーブル１のアドレス＃０からフラグＤＨと「Ａ」の復号データが読み出される。このとき、前記ステップＳ３の判定結果はＮＯとなり、ステップＳ５により前記入力データの第１ビット目（'0'）が取得される（Ｉ＝０）。そして、ステップＳ６の判定結果がＮＯ、ステップＳ１０の判定結果がＹＥＳ、ステップＳ１１の判定結果がＹＥＳとなり、ステップＳ１２を介して、ステップＳ２で前記変換ハフマンテーブル１のアドレス＃１のデータ（フラグＤＬと「Ｂ」の復号データ）が読み出される。
そして、ステップＳ３がＮＯとなり、ステップＳ５で入力データの次の１ビット（'1'）が読み出される（Ｉ＝１）。そして、ステップＳ６がＮＯ、ステップＳ１０がＮＯ、ステップＳ１３の判定結果がＮＯとなり、ステップＳ１４でアドレスが＋１されて、ステップＳ２で前記変換ハフマンテーブル１のアドレス＃２のデータ（フラグＤＬ、「Ｃ」の復号データ）が読み出される。
このとき、ステップＳ３がＮＯとなり、ステップＳ５で入力データの次の１ビット（'1'）が取得される（Ｉ＝１）。そして、ステップＳ６がＮＯ、ステップＳ１０がＮＯ、ステップＳ１１がＮＯとなり、アドレスが＋１されて、ステップＳ２で前記変換ハフマンテーブル１のアドレス＃３のデータ（フラグＪＨ、データ１０）が読み出される。
【００３１】
そして、ステップＳ３がＮＯとなり、ステップＳ５で、前記入力データの次の１ビット（'0'）が読み出される（Ｉ＝０）。この場合は、ステップＳ６の判定結果がＹＥＳとなり、ステップＳ７がＹＥＳとなって、ステップＳ８でアドレスが＋１されて、前記ステップＳ２で前記変換ハフマンテーブル１のアドレス＃４のデータ（フラグＤＬ、「Ｅ」の復号データ）が読み出される。
そして、ステップＳ３の判定結果がＮＯとなり、ステップＳ５で入力データの次の１ビット（'0'）が読み出される。そして、ステップＳ６の判定結果がＮＯ、ステップＳ１０の判定結果がＮＯ、ステップＳ１３の判定結果がＹＥＳとなり、ステップＳ４で前記読み出された「Ｅ」の復号データが出力されることとなる。そして、前記ステップＳ１から次のハフマン符号化された入力データの復号処理が行われることとなる。
【００３２】
このように、本発明のハフマン符号の復号方法では、ハフマン符号ビットの入力に従い、変換ハフマンテーブルを二分木探索している。したがって、前記ハフマン変換テーブル１に対するアクセス回数は少なくてすみ、処理量を軽減することができる。
また、前記図３の変換ハフマンテーブルと前記図６のハフマンコードテーブルとを比較すると、前記復号データのデータ長を２０ビットとすると、前記図６のハフマンコードテーブルの場合には、符号長が３ビット、符号語が７ビットであり、１ワード当たり３０ビット必要となる。そしてテーブルの行数は１２で、合計３０×１２＝３６０ビットとなる。一方、前記図３に示した本発明の変換ハフマンテーブルでは、復号データに２０ビット、フラグに２ビットであり、１ワード当たり２２ビットとなる。そして、テーブルの行数は前記図６の場合に比べ２行増加し、１４行となるので、合計２２×１４＝３０８ビットとなる。このように本発明によれば、必要とするメモリ容量を削減することができる。
【００３３】
また、ＤＳＰなどへの実装を考えた場合、前述した従来技術の場合には、データ、符号長、符号語の３つの要素をメモリの１語に収められるとは限らない。ハフマンコードテーブルによって、符号長や符号語の格納に必要なビット数は異なってくる。また、前記３つの要素をまとめてメモリに格納した場合には、読み出したデータを分離することが必要であり、データバス幅の制約もある。もし、３つの要素を３ワードにそれぞれ格納した場合には、それだけメモリーを消費することとなってしまう。
これに対し、本発明の場合には、前述したフラグを格納するために増加するビット数は、どの場合でも２ビットであり、常に（データバス幅−２）ビットのデータ格納領域は確保することができる。
【００３４】
なお、以上の説明では、予めハフマンコードテーブルが与えられているものとして説明したが、本発明のハフマン符号の復号方法、復号装置、ハフマン符号復号用テーブルおよびその作成方法は、ハフマンコードテーブルが符号化データとともに送られてくる場合にも適用することができる。
また、本発明の復号方法で用いられている手法は、一般の二分木探索の場合に適用することができる。
【００３５】
【発明の効果】
以上説明したように、本発明のハフマン符号の復号方法、復号装置によれば、復号に用いるテーブル（変換ハフマンテーブル）の記憶容量を少なくすることができる。
また、二分木探索を行っているため、変換ハフマンテーブルの参照回数を少なくすることができ、処理量を削減するとともに、処理の高速化を図ることができる。
【図面の簡単な説明】
【図１】  本発明のハフマン復号方法が実行されるハフマン復号装置の位置実施の形態の構成を示すブロック図である。
【図２】  図６に示したハフマンコードテーブルから生成した二分木を示す図である。
【図３】  本発明のハフマン復号方法に用いる変換ハフマンテーブルの例を示す図である。
【図４】  フラグについて説明するための図表である。
【図５】  本発明のハフマン復号装置の処理の流れを説明するためのフローチャートである。
【図６】  ハフマンコードテーブルの例を示す図である。
【図７】  従来のハフマン復号装置の構成例を示す図である。
【図８】  従来のハフマン復号装置の処理の流れを説明するためのフローチャートである。
【符号の説明】
１  ハフマン復号用テーブル（変換ハフマンテーブル）、２  アドレス生成手段、３  カウンタ、４  セレクタ、５  ビット抜出し及び判定部
【図１】
0004501288.tif 000002
【図２】
0004501288.tif 000003
【図３】
0004501288.tif 000004
【図４】
0004501288.tif 000005
【図５】
0004501288.tif 000006
【図６】
0004501288.tif 000007
【図７】
0004501288.tif 000008
【図８】
0004501288.tif 000009