(57)【特許請求の範囲】
【請求項１】
複数の記号の各記号を複数のビット列の当該各記号に対応するビット列に置き換えることで符号化した符号化データを復号するための復号用情報を生成する回路であって、
前記複数の記号の各記号に対応するビット列のビット長からなる複数のビット長を定義した定義情報に基づいて、当該複数のビット長の同じビット長に対応する記号の数を記録する記録部と、
前記記録部により記録された前記記号の数に基づいて、前記複数のビット列をビット長に関する所定の順序であるビット長順序で並べるためのビット列情報を前記復号用情報として生成する第１の生成部と、
前記定義情報で定義された前記複数のビット長のうちの特定のビット長の入力に応じて、当該特定のビット長に対応する記号を、当該複数のビット長のうちの当該特定のビット長以前に入力された少なくとも１つのビット長に対応する少なくとも１つの記号の、当該少なくとも１つのビット長を前記ビット長順序で並べたときの当該特定のビット長の順番に挿入することにより、前記複数の記号を当該ビット長順序で並べた記号情報を前記復号用情報として生成する第２の生成部と
を含む、回路。
【請求項２】
前記第１の生成部は、前記複数のビット長の各ビット長を有するビット列の基準となる基準ビット列からなる複数の基準ビット列を前記ビット列情報として生成し、
前記第２の生成部は、前記特定のビット長の入力に応じて、前記複数のビット長のうちの当該特定のビット長以前に入力された少なくとも１つのビット長のうち、前記ビット長順序で当該特定のビット長より前にある各ビット長及び当該特定のビット長と同じビット長を有する基準ビット列の順番は変更せずに、前記ビット長順序で当該特定のビット長より後ろにある各ビット長を有する基準ビット列の順番を後ろにずらすことにより、前記複数の基準ビット列の各基準ビット列に対応する記号の前記記号情報における順番を示す順番情報を前記復号用情報として更に生成する、請求項１の回路。
【請求項３】
前記複数のビット長は、記号に関する所定の順序で入力され、
前記第２の生成部は、前記特定のビット長の入力の順番に応じて、当該特定のビット長に対応する記号を決定する、請求項１又は請求項２の回路。
【請求項４】
前記記録部は、前記特定のビット長の入力に応じて、当該特定のビット長と異なる各ビット長に対応する記号の数は変更せずに、当該特定のビット長と同じビット長に対応する記号の数を増加させる、請求項１乃至請求項３の何れかの回路。
【請求項５】
複数の記号の各記号を複数のビット列の当該各記号に対応するビット列に置き換えるハフマン符号化を行ったハフマン符号化データを復号するための復号用情報を、当該各記号に対応するビット列のビット長からなる複数のビット長を記号のコード順に並べて定義したハフマンテーブルに基づいて生成する回路であって、
前記ハフマンテーブルで定義された前記複数のビット長のうちの特定のビット長の入力に応じて、当該特定のビット長と異なる各ビット長に対応する記号の数は変更せずに、当該特定のビット長と同じビット長に対応する記号の数を増加させることにより、当該複数のビット長の同じビット長に対応する記号の数を記録する記録部と、
前記記録部により記録された前記記号の数に基づいて、前記複数のビット長の各ビット長を有する最小ビット列からなる複数の最小ビット列を前記復号用情報として生成する第１の生成部と、
前記ハフマンテーブルで定義された前記複数のビット長のうちの特定のビット長の入力に応じて、当該特定のビット長に対応する記号を、当該複数のビット長のうちの当該特定のビット長以前に入力された少なくとも１つのビット長に対応する少なくとも１つの記号の、当該少なくとも１つのビット長をビット長が短い順でビット長が同じときは対応する記号のコード順に並べたときの当該特定のビット長の順番に挿入することにより、前記複数の記号を対応するビット長が短い順でビット長が同じときは記号のコード順に並べた記号情報を前記復号用情報として生成し、かつ、当該複数のビット長のうちの当該特定のビット長以前に入力された少なくとも１つのビット長のうち、当該特定のビット長以下の各ビット長を有する最小ビット列の順番は変更せずに、当該特定のビット長より大きい各ビット長を有する最小ビット列の順番を後ろにずらすことにより、前記複数の最小ビット列の各最小ビット列に対応する記号の当該記号情報における順番を示す順番情報を前記復号用情報として生成する第２の生成部と
を含む、回路。
【請求項６】
複数の記号の各記号を複数のビット列の当該各記号に対応するビット列に置き換えることで符号化した符号化データを復号する装置であって、
前記複数の記号の各記号に対応するビット列のビット長からなる複数のビット長を定義した定義情報が付加された前記符号化データから、当該定義情報を抽出する抽出部と、
前記抽出部により抽出された前記定義情報に基づいて、前記複数のビット長の同じビット長に対応する記号の数を記録する記録部と、
前記記録部により記録された前記記号の数に基づいて、前記複数のビット列をビット長に関する所定の順序であるビット長順序で並べるためのビット列情報を生成する第１の生成部と、
前記抽出部により抽出された前記定義情報で定義された前記複数のビット長のうちの特定のビット長の入力に応じて、当該特定のビット長に対応する記号を、当該複数のビット長のうちの当該特定のビット長以前に入力された少なくとも１つのビット長に対応する少なくとも１つの記号の、当該少なくとも１つのビット長を前記ビット長順序で並べたときの当該特定のビット長の順番に挿入することにより、前記複数の記号を当該ビット長順序で並べた記号情報を生成する第２の生成部と、
前記符号化データに含まれるビット列を、前記第１の生成部により生成された前記ビット列情報と、前記第２の生成部により生成された前記記号情報とに基づいて、当該ビット列に対応する記号に変換する変換部と
を含む、装置。
【請求項７】
複数の記号の各記号を複数のビット列の当該各記号に対応するビット列に置き換えることで符号化した符号化データを復号する方法であって、
前記複数の記号の各記号に対応するビット列のビット長からなる複数のビット長を定義した定義情報が付加された前記符号化データから、当該定義情報を抽出するステップと、
抽出された前記定義情報に基づいて、前記複数のビット長の同じビット長に対応する記号の数を記録するステップと、
記録された前記記号の数に基づいて、前記複数のビット列をビット長に関する所定の順序であるビット長順序で並べるためのビット列情報を生成するステップと、
抽出された前記定義情報で定義された前記複数のビット長のうちの特定のビット長の入力に応じて、当該特定のビット長に対応する記号を、当該複数のビット長のうちの当該特定のビット長以前に入力された少なくとも１つのビット長に対応する少なくとも１つの記号の、当該少なくとも１つのビット長を前記ビット長順序で並べたときの当該特定のビット長の順番に挿入することにより、前記複数の記号を当該ビット長順序で並べた記号情報を生成するステップと、
前記符号化データに含まれるビット列を、前記ビット列情報と前記記号情報とに基づいて、当該ビット列に対応する記号に変換するステップと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化データを復号する装置及び方法に関する。特に、本発明は、複数の記号のそれぞれをビット列に置き換えることで符号化した符号化データを復号する装置及び方法に関する。
【背景技術】
【０００２】
ｄｅｆｌａｔｅ圧縮（ＲＦＣ１９５１）は、現在コンピュータで広く用いられているデータ圧縮形式であるＺＬＩＢ（ＲＦＣ１９５０）、ＧＺＩＰ（ＲＦＣ１９５２）のベースとなる圧縮方法であり、ハフマン符号化という符号化技術を用いてデータを圧縮する。ハフマン符号化では、データ内に繰り返し現れるバイト単位の文字に、出現頻度に応じて可変長の符号を割り当てる。この際、出現頻度の高い文字には短いビット長の符号を、出現頻度の低い文字には長いビット長の符号を割り当てることで、より効率的な符号化を行う。
そのため、ハフマン符号化では、各文字に割り当てた符号を保持するハフマンテーブルを作成し、圧縮データに付加しておく。そして、圧縮データの復号は、このハフマンテーブルを参照して行う。
【０００３】
ところが、このように圧縮データにハフマンテーブルを付加する場合、このハフマンテーブルのサイズが大きいと圧縮率が悪くなってしまう。それを改善するため、ｄｅｆｌａｔｅ圧縮（ＲＦＣ１９５１）では、このハフマンテーブル自体も圧縮する。
具体的には、ｄｅｆｌａｔｅ圧縮では、ハフマンテーブルにおいて、各文字に割り当てた符号を保持するのではなく、各文字に割り当てた符号の長さ（ビット長）を保持する。同じビット長のグループの中での符号の割り振り方を、ＡＳＣＩＩコード順（対象がアルファベットであればアルファベット順）と定義することにより、ビット長から一意に符号を決定することが可能である。例えば、Ａ，Ｃ，Ｄに割り当てられたビット長が何れも「３」であった場合、Ａの符号が「１００」と決まれば、Ｃ，Ｄは、それぞれ順番に「１」を加算することにより、「１０１」、「１１０」と決定することができる。
【０００４】
ここで、ハフマンテーブルを用いて符号化されたデータの復号に関する技術としては、従来、幾つかの提案がなされている（例えば、特許文献１、２参照）。
特許文献１では、まず復号に際し最初に取り込むべき符号ビット数を復号化テーブルに書き込み、次に符号の木の“根”を着目節点とし、その着目節点の“子”が“葉（終端節点）”か中間節点かを判定し、“葉”ならばそれに対応する事象値を返すような復号終了命令を復号化テーブルに書き込み、中間節点ならば復号に際し次にアクセスすべきアドレス及び取り出すべき符号ビット数を返すような復号継続命令を復号化テーブルに書き込んでその“子”を新たな着目節点とみなして再帰的に以上の動作を繰り返す。
特許文献２では、符号データ取込部が、外部から供給される符号のビット列を取り込み、一定のビット長の符号データを形成し、ハフマン復号用ルックアップテーブルが、符号データ取込部により形成される符号データを受けて、その符号データの上位ビットの符号に対応する復号データとその符号のビット長を出力するハフマン復号化回路において、符号データ取込部が、ハフマン復号用ルックアップテーブルから出力されるビット長のビットだけ上位のデータを捨てて、代わりに新たに外部から供給されるデータを取り込み、一定のビット長の符号データを形成する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−１７０１９７号公報
【特許文献２】特開平８−１６７８５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、上記のような方法で圧縮したハフマンテーブルを用いて圧縮データを復号するには、（１）ビット長の切り出し、（２）切り出されたビット長からの符号の復元、という手順を踏む必要がある。ここで、手順（２）を高速に行うためには、予めハフマンテーブルをビットごとにソーティングしておくことが必要である。
しかしながら、このソーティングの処理は、符号の数だけ繰り返し行わなければならない。そのため、符号の数が多い場合には処理時間が増大してしまう。
尚、特許文献１、２の技術は、各文字にビット長を割り当てたハフマンテーブルを作成し、ビット長に基づいて各文字を復号する場合のこのような問題点に着目したものではない。
【０００７】
本発明の目的は、複数の記号のそれぞれをビット列に置き換えることで符号化した符号化データを復号する際の処理時間を短縮することにある。
【課題を解決するための手段】
【０００８】
かかる目的のもと、本発明は、複数の記号の各記号を複数のビット列の各記号に対応するビット列に置き換えることで符号化した符号化データを復号するための復号用情報を生成する回路であって、複数の記号の各記号に対応するビット列のビット長からなる複数のビット長を定義した定義情報に基づいて、複数のビット長の同じビット長に対応する記号の数を記録する記録部と、記録部により記録された記号の数に基づいて、複数のビット列をビット長に関する所定の順序であるビット長順序で並べるためのビット列情報を復号用情報として生成する第１の生成部と、定義情報で定義された複数のビット長のうちの特定のビット長の入力に応じて、特定のビット長に対応する記号を、複数のビット長のうちの特定のビット長以前に入力された少なくとも１つのビット長をビット長順序で並べたときの特定のビット長の順番に挿入することにより、複数の記号をビット長順序で並べた記号情報を復号用情報として生成する第２の生成部とを含む、回路を提供する。
【０００９】
ここで、第１の生成部は、複数のビット長の各ビット長を有するビット列の基準となる基準ビット列からなる複数の基準ビット列をビット列情報として生成し、第２の生成部は、特定のビット長の入力に応じて、複数のビット長のうちの特定のビット長以前に入力された少なくとも１つのビット長のうち、ビット長順序で特定のビット長より前にある各ビット長及び特定のビット長と同じビット長を有する基準ビット列の順番は変更せずに、ビット長順序で特定のビット長より後ろにある各ビット長を有する基準ビット列の順番を後ろにずらすことにより、複数の基準ビット列の各基準ビット列に対応する記号の記号情報における順番を示す順番情報を復号用情報として更に生成する、ものであってよい。
また、複数のビット長は、記号に関する所定の順序で入力され、第２の生成部は、特定のビット長の入力の順番に応じて、特定のビット長に対応する記号を決定する、ものであってよい。
更に、記録部は、特定のビット長の入力に応じて、特定のビット長と異なる各ビット長に対応する記号の数は変更せずに、特定のビット長と同じビット長に対応する記号の数を増加させる、ものであってよい。
【００１０】
また、本発明は、複数の記号の各記号を複数のビット列の各記号に対応するビット列に置き換えるハフマン符号化を行ったハフマン符号化データを復号するための復号用情報を、各記号に対応するビット列のビット長からなる複数のビット長を記号のコード順に並べて定義したハフマンテーブルに基づいて生成する回路であって、ハフマンテーブルで定義された複数のビット長のうちの特定のビット長の入力に応じて、特定のビット長と異なる各ビット長に対応する記号の数は変更せずに、特定のビット長と同じビット長に対応する記号の数を増加させることにより、複数のビット長の同じビット長に対応する記号の数を記録する記録部と、記録部により記録された記号の数に基づいて、複数のビット長の各ビット長を有する最小ビット列からなる複数の最小ビット列を復号用情報として生成する第１の生成部と、ハフマンテーブルで定義された複数のビット長のうちの特定のビット長の入力に応じて、特定のビット長に対応する記号を、複数のビット長のうちの特定のビット長以前に入力された少なくとも１つのビット長をビット長が短い順でビット長が同じときは対応する記号のコード順に並べたときの特定のビット長の順番に挿入することにより、複数の記号を対応するビット長が短い順でビット長が同じときは記号のコード順に並べた記号情報を復号用情報として生成し、かつ、複数のビット長のうちの特定のビット長以前に入力された少なくとも１つのビット長のうち、特定のビット長以下の各ビット長を有する最小ビット列の順番は変更せずに、特定のビット長より大きい各ビット長を有する最小ビット列の順番を後ろにずらすことにより、複数の最小ビット列の各最小ビット列に対応する記号の記号情報における順番を示す順番情報を復号用情報として生成する第２の生成部とを含む、回路も提供する。
【００１１】
更に、本発明は、複数の記号の各記号を複数のビット列の各記号に対応するビット列に置き換えることで符号化した符号化データを復号する装置であって、複数の記号の各記号に対応するビット列のビット長からなる複数のビット長を定義した定義情報が付加された符号化データから、定義情報を抽出する抽出部と、抽出部により抽出された定義情報に基づいて、複数のビット長の同じビット長に対応する記号の数を記録する記録部と、記録部により記録された記号の数に基づいて、複数のビット列をビット長に関する所定の順序であるビット長順序で並べるためのビット列情報を生成する第１の生成部と、抽出部により抽出された定義情報で定義された複数のビット長のうちの特定のビット長の入力に応じて、特定のビット長に対応する記号を、複数のビット長のうちの特定のビット長以前に入力された少なくとも１つのビット長をビット長順序で並べたときの特定のビット長の順番に挿入することにより、複数の記号をビット長順序で並べた記号情報を生成する第２の生成部と、符号化データに含まれるビット列を、第１の生成部により生成されたビット列情報と、第２の生成部により生成された記号情報とに基づいて、ビット列に対応する記号に変換する変換部とを含む、装置も提供する。
【００１２】
更にまた、本発明は、複数の記号の各記号を複数のビット列の各記号に対応するビット列に置き換えることで符号化した符号化データを復号する方法であって、複数の記号の各記号に対応するビット列のビット長からなる複数のビット長を定義した定義情報が付加された符号化データから、定義情報を抽出するステップと、抽出された定義情報に基づいて、複数のビット長の同じビット長に対応する記号の数を記録するステップと、記録された記号の数に基づいて、複数のビット列をビット長に関する所定の順序であるビット長順序で並べるためのビット列情報を生成するステップと、抽出された定義情報で定義された複数のビット長のうちの特定のビット長の入力に応じて、特定のビット長に対応する記号を、複数のビット長のうちの特定のビット長以前に入力された少なくとも１つのビット長をビット長順序で並べたときの特定のビット長の順番に挿入することにより、複数の記号をビット長順序で並べた記号情報を生成するステップと、符号化データに含まれるビット列を、ビット列情報と記号情報とに基づいて、ビット列に対応する記号に変換するステップとを含む、方法も提供する。
【発明の効果】
【００１３】
本発明によれば、複数の記号のそれぞれをビット列に置き換えることで符号化した符号化データを復号する際の処理時間を短縮することができる。
【図面の簡単な説明】
【００１４】
【図１】ハフマンテーブルの圧縮について示した図である。
【図２】本発明の実施の形態が適用されるハフマン復号装置の構成例を示した図である。
【図３】一般的なハフマンテーブル復号回路の使用回数算出回路の構成例を示した図である。
【図４】一般的なハフマンテーブル復号回路の使用回数算出回路で作成される圧縮ハフマンテーブルの例を示した図である。
【図５】一般的なハフマンテーブル復号回路の符号算出回路の構成例等を示した図である。
【図６】一般的なハフマンテーブル復号回路の復号用データ算出回路におけるソーティング処理について示した図である。
【図７】一般的なハフマンテーブル復号回路の復号用データ算出回路で作成される復号用符号テーブルの例を示した図である。
【図８】本発明の実施の形態におけるハフマンテーブル復号回路の復号用データ算出回路で用いるインサート機能付シフトメモリ回路について示した図である。
【図９】本発明の実施の形態におけるハフマンテーブル復号回路の復号用データ算出回路におけるポインタテーブル及び復号用ハフマンテーブルについて示した図である。
【図１０−１】本発明の実施の形態におけるハフマンテーブル復号回路の復号用データ算出回路におけるポインタテーブル及び復号用ハフマンテーブルの更新例を示した図である。
【図１０−２】本発明の実施の形態におけるハフマンテーブル復号回路の復号用データ算出回路におけるポインタテーブル及び復号用ハフマンテーブルの更新例を示した図である。
【図１１】本発明の実施の形態におけるハフマンテーブル復号回路の復号用データ算出回路の構成例を示した図である。
【図１２】本発明の実施の形態におけるハフマンテーブル復号回路の復号用データ算出回路におけるポインタテーブルのＰｏｉｎｔｅｒ部の構成例を示した図である。
【図１３】本発明の実施の形態におけるハフマンテーブル復号回路の復号用データ算出回路におけるポインタテーブルのＮｕｍ部の構成例を示した図である。
【図１４】本発明の実施の形態におけるハフマン復号装置の動作例を示したフローチャートである。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
［ｄｅｆｌａｔｅ圧縮におけるハフマンテーブルの圧縮方法］
図１は、本実施の形態で用いるハフマンテーブルの具体例について、その圧縮方法を示した図である。
図において、太矢印の左側は圧縮前のハフマンテーブルを、太矢印の右側は圧縮後のハフマンテーブルを示す。即ち、圧縮前のハフマンテーブルでは、各文字に対して符号を割り当てているが、圧縮後のハフマンテーブルでは、各文字に対して、符号の代わりに符号のビット長を割り当てている。具体的には、Ｅに対して、「００」の代わりに「２」を割り当て、Ａ，Ｂ，Ｄ，Ｉに対して、「０１０」、「０１１」、「１００」、「１０１」の代わりに「３」を割り当て、Ｆ，Ｈに対して、「１１００」、「１１０１」の代わりに「４」を割り当て、Ｃ，Ｇ，Ｊ，Ｋに対して、「１１１００」、「１１１０１」、「１１１１０」、「１１１１１」の代わりに「５」を割り当てている。尚、一般には、文字列に対して符号やビット長を割り当てることも可能であるが、本実施の形態では、文字に対して符号やビット長を割り当てるものとして説明する。
【００１６】
［ハフマンテーブル復号回路の構成］
図２は、本実施の形態におけるハフマン復号装置の構成例を示した図である。
このハフマン復号装置としては、例えば、圧縮されたデータを解凍しウイルスチェック等を行って再び圧縮する処理をすばやく行うことが要求されるルータ等の通信機器が例示されるが、ＰＣ（Personal Computer）等の一般的なコンピュータであってもよい。
図示するように、ハフマン復号装置は、ハフマンテーブル復号回路１００と、ハフマンテーブル分離回路２００と、ハフマン復号回路３００とを含む。
【００１７】
このうち、ハフマンテーブル復号回路１００は、圧縮後のハフマンテーブルのデータ（以下、「圧縮ハフマンテーブルデータ」という）がハフマンテーブル分離回路２００から入力されると、この圧縮ハフマンテーブルデータに基づいて、復号に用いるハフマンテーブルデータ（以下、「復号用ハフマンテーブルデータ」という）等を生成し、ハフマン復号回路３００に出力するものである。ここで、圧縮ハフマンテーブルデータとは、図１に示した圧縮後のハフマンテーブルに含まれるビット長のみを並べたデータをいう。但し、ビット長の並び順は、ハフマンテーブルにおいて文字がＡＳＣＩＩコード順に並べられている場合の順番であるとする。また、復号用ハフマンテーブルデータとは、図１に示した圧縮後のハフマンテーブルを、復号に用いるために変換して得られるテーブルのデータをいう。
尚、本実施の形態では、「文字」と称しているが、これは記号の一例として用いているに過ぎず、数字や、文字及び数字以外の記号（狭義の記号）にも本発明は適用可能である。但し、以下では、簡略化のため、文字、特にアルファベットを例にとり説明する。
【００１８】
図示するように、本実施の形態におけるハフマンテーブル復号回路１００は、使用回数算出回路１０と、符号算出回路２０と、復号用データ算出回路３０とを有する。
使用回数算出回路１０は、圧縮ハフマンテーブルデータが入力されると、各ビット長の使用回数（ビット長ごとのアルファベットの数）を算出すると共に、アルファベットごとのビット長を格納する圧縮ハフマンテーブルを作成する。
符号算出回路２０は、使用回数算出回路１０により算出された各ビット長の使用回数に基づいて、ビット長ごとに使用される最小符号及び最大符号を格納する符号テーブルを作成する。
復号用データ算出回路３０は、圧縮ハフマンテーブルデータに基づいて、復号用ハフマンテーブルデータを算出すると共に、符号算出回路２０により作成された符号テーブルに基づいて、復号に用いられる符号テーブルのデータ（以下、「復号用符号テーブルデータ」という）を算出する。
【００１９】
また、ハフマンテーブル分離回路２００は、圧縮ハフマンテーブルデータと、データに含まれる文字をその文字に割り当てられた符号に置き換えることによって圧縮した圧縮後データとを結合した結合データを受信すると、この結合データを圧縮ハフマンテーブルデータと圧縮後データとに分離し、前者はハフマンテーブル復号回路１００に、後者はハフマン復号回路３００にそれぞれ出力する。本実施の形態では、複数のビット長を定義した定義情報の一例として、圧縮ハフマンテーブルデータを用いており、記号をビット列に置き換えることで符号化した符号化データの一例として、圧縮後データを用いている。また、定義情報を抽出する抽出部の一例として、ハフマンテーブル分離回路２００を設けている。
【００２０】
更に、ハフマン復号回路３００は、ハフマンテーブル分離回路２００から入力された圧縮後データに含まれる符号を、ハフマンテーブル復号回路１００から入力された復号用ハフマンテーブルデータ及び復号用符号テーブルデータに基づいて決定される文字に置き換えることによって圧縮前データに戻し、出力する。本実施の形態では、ビット列を記号に変換する変換部の一例として、ハフマン復号回路３００を設けている。
【００２１】
以下、ハフマンテーブル復号回路１００の３つの回路の詳細な動作について説明するが、まず、これらの３つの回路の一般的な動作を「一般的なハフマンテーブルの復号方法」として説明し、次に、これらの３つの回路の本実施の形態における動作を「本実施の形態におけるハフマンテーブルの復号方法」として説明する。尚、以降の説明では、図１の例に従い、圧縮ハフマンテーブルデータ「３，３，５，３，２，４，５，４，３，５，５」がハフマンテーブル復号回路１００に入力されるものとする。また、ＲＦＣ１９５１では、文字は最大２８６個定義されており、ビット長は最大１５まで定義されているが、本実施の形態では、説明の簡略化のため、文字はアルファベット１１文字のみを示し、ビット長は最大５ビットまでを示す。
【００２２】
［一般的なハフマンテーブルの復号方法］
（使用回数算出回路１０）
図３は、一般的な使用回数算出回路１０について示した図である。
図には、使用回数算出回路１０に対して、圧縮ハフマンテーブルデータ「３，３，５，３，２，４，５，４，３，５，５」が入力されていることが示されている。この場合、圧縮ハフマンテーブルデータにおける１つのビット長が１クロックで入力されるものとする。すると、セレクタ１１が、入力されたビット長ごとに、そのビット長に対応するｂｌ＿ｃｏｕｎｔ［Ｍ］にその時点で格納されていた数を取り出す。そして、カウンタ１２が、取り出された数に「１」を加算した数を元のｂｌ＿ｃｏｕｎｔ［Ｍ］に格納する。
これにより、入力されたビット長ごとに、その使用回数がｂｌ＿ｃｏｕｎｔ［Ｍ］に格納される。図の例では、全てのデータが入力された時点で、ｂｌ＿ｃｏｕｎｔ［２］、ｂｌ＿ｃｏｕｎｔ［３］、ｂｌ＿ｃｏｕｎｔ［４］、ｂｌ＿ｃｏｕｎｔ［５］に「１」、「４」、「２」、「４」が格納される。
尚、ｂｌ＿ｃｏｕｎｔ［Ｍ］に格納された値は、同じビット長に対応する記号の数の一例である。また、本実施の形態では、記号の数を記録する記録部の一例として、使用回数算出回路１０を設けている。
【００２３】
また、図３には示していないが、一般的な使用回数算出回路１０は、ビット長ごとにアルファベットの数を数える一方で、アルファベットごとのビット長を記録した圧縮ハフマンテーブルを作成する。
図４は、圧縮ハフマンテーブルの一例を示した図である。
図示するように、圧縮ハフマンテーブルは、アルファベットとビット長とを対応付けたものであり、入力された圧縮ハフマンテーブルデータを入力順に記録することにより作成される。圧縮ハフマンテーブルデータにおいて、複数のビット長は、各ビット長が割り当てられたアルファベットの順に並んでいるので、圧縮ハフマンテーブルにおいても、アルファベットの順に対応するビット長が並んでいる。
【００２４】
（符号算出回路２０）
図５は、一般的な符号算出回路２０について説明するための図である。
上述したように、使用回数算出回路１０の処理で、図３のｂｌ＿ｃｏｕｎｔ［Ｍ］及び図４の圧縮ハフマンテーブルが作成される。
次に、符号算出回路２０は、各ビット長の最小符号ｃｏｄｅ＿ｍｉｎを、ｂｌ＿ｃｏｕｎｔ［Ｍ］に基づいて割り振る。また、各ビット長の最大符号ｃｏｄｅ＿ｍａｘも決定する。
具体的には、（ａ）に示す式により、ｃｏｄｅ＿ｍｉｎが決定される。尚、この式は、ＲＦＣ１９５１に定義されており、ｂｌ＿ｃｏｕｎｔ［Ｍ］に基づいて、符号長を最も短くする割り振りが可能なように最適化されたものである。詳細は省略するが、「code = (code + bl_count[bits-1]) << 1」の計算を行えばよい。
【００２５】
そして、この式によってｃｏｄｅ＿ｍｉｎを算出する回路は、（ｂ）に示すように、加算回路２１とシフト回路２２とフリップフロップ２３とセレクタ２４とを組み合わせることにより簡単に構成できる。つまり、Ｍ＝１の段階では、セレクタ２４が、ｃｏｄｅ「０」を選択し、加算回路２１が、これとｂｌ＿ｃｏｕｎｔ［０］を加算し、シフト回路２２がその結果を左に１ビットシフトし、フリップフロップ２３がその結果を保持し、保持された結果がｃｏｄｅ＿ｍｉｎ［１］として出力される。次に、Ｍ＝２の段階では、セレクタ２４が、フリップフロップ２３に保持された結果を選択し、加算回路２１が、これとｂｌ＿ｃｏｕｎｔ［１］を加算し、シフト回路２２がその結果を左に１ビットシフトし、フリップフロップ２３がその結果を保持し、保持された結果がｃｏｄｅ＿ｍｉｎ［２］として出力される。このように、ｂｌ＿ｃｏｕｎｔ［Ｍ−１］を順次投入して、ｃｏｄｅ＿ｍｉｎ［Ｍ］が順次出力される回路になっている。
また、ｃｏｄｅ＿ｍａｘ［Ｍ］は、「code_min[M] ＋ bl_count[M] - 1」により求めることができる。
【００２６】
これにより、符号算出回路２０は、最小符号ｃｏｄｅ＿ｍｉｎ及び最大符号ｃｏｄｅ＿ｍａｘをビット長に対応付けた符号テーブルを作成する。
本実施の形態で用いる例では、各ビット長の最小符号ｃｏｄｅ＿ｍｉｎ［Ｍ］及び最大符号ｃｏｄｅ＿ｍａｘ［Ｍ］は（ｃ）の符号テーブルに示したようになる。この場合、最大ビット長をＢとすると、処理時間はＯ（Ｂ）となる。この例では、Ｂ＝５（ｃｌｏｃｋ）であるが、ＲＦＣ１９５１において、最大のビット長は「１５」と定義されているため、最大値は、Ｂ＝１５（ｃｌｏｃｋ）である。
【００２７】
尚、ｃｏｄｅ＿ｍｉｎ［Ｍ］に格納された値、つまり、最小符号は、各ビット長を有するビット列の基準となる基準ビット列、各ビット長を有する最小ビット列の一例であり、符号テーブルは、ビット列情報、復号用情報の一例である。また、本実施の形態では、ビット列情報を生成する第１の生成部の一例として、符号算出回路２０を設けている。
【００２８】
（復号用データ算出回路３０）
符号算出回路２０の処理の結果を参照すると、ハフマン復号回路３００に入力される圧縮後データに含まれる符号のビット長が分かるので、図４の圧縮ハフマンテーブルから、各アルファベットに割り当てられた符号を求めることは可能である。但し、図４の圧縮ハフマンテーブルは、ビット長ごとに整理されていないため、検索するためには扱い難い。そこで、復号用データ算出回路３０は、図４の圧縮ハフマンテーブルをビット長順に、ビット長が同じときはＡＳＣＩＩコード順にソーティングを行う。
【００２９】
図６は、このようなソーティングについて示した図である。
図において、太矢印の左側は圧縮ハフマンテーブルを、太矢印の右側はソート後の圧縮ハフマンテーブル（復号用ハフマンテーブル）を示す。
図示するように、復号用ハフマンテーブルも、圧縮ハフマンテーブルと同様、アルファベットとビット長とを対応付けたものである。但し、復号用ハフマンテーブルは、圧縮ハフマンテーブルをビット長の順にソーティングして得られたものなので、復号用ハフマンテーブルにおいて、複数のアルファベットは、対応するビット長の順に並んでいる。
尚、図では、各ビット長の先頭を表すために、各アルファベットの情報が格納されたアドレスも示している。
このようにソーティングを行い、アルファベットをビット長の順に並べた復号用ハフマンテーブルを別途作成しておけば、検索が容易になる。具体的には、入力された圧縮後データにおける符号からｃｏｄｅ＿ｍｉｎを引くことにより、アルファベットを簡単に検索することができる。
【００３０】
また、復号用データ算出回路３０は、図５（ｃ）の符号テーブルに対して、図６右側の復号用ハフマンテーブルにおける各ビット長の先頭を示すポインタを追加しておく。
図７は、このようにポインタを追加した符号テーブル（以下、「復号用符号テーブル」という）を示したものである。
図６右側の復号用ハフマンテーブルと図７の復号用符号テーブルとからハフマンテーブルを復号するには、復号用ハフマンテーブルのビット長ごとに、復号用符号テーブルのそのビット長に対応するｃｏｄｅ＿ｍｉｎからｃｏｄｅ＿ｍａｘまでの符号を順番に割り当てていけばよい。
【００３１】
ところで、この一般的なハフマンテーブルの復元方法では、図６のソーティング処理及び図７のポインタ追加処理が逐次処理になってしまうため、復号用データ算出回路３０の処理にアルファベットの個数分のクロック数が必要となる。この例では、種々の工夫を行ったとしても最低１１クロック必要となる。また、記号は全部で２８６個なので、全ての記号を処理する場合は、最低２８６クロック必要となる。これが必要なクロック数の最大値である。
【００３２】
ここで、この一般的なハフマンテーブルの復号方法のスループットを考える。
まず、使用回数算出回路１０は、ハフマンテーブルのデータをそのまま流せば完了する。ところが、全てのデータを流し終えた後、符号算出回路２０で最大１５クロック、復号用データ算出回路３０で最大２８６クロックかかるため、合計で３０１クロック後でなければ、ハフマンテーブルの復号が完了しない。
圧縮ハフマンテーブルから復号用ハフマンテーブルを生成し、この復号用ハフマンテーブルを用いて圧縮データを復号し、この圧縮データの復号と並行して、次の復号用ハフマンテーブルを生成する、というパイプライン処理をスムーズに行うことができれば、圧縮データの解凍もスムーズに行うことができる。しかしながら、全てのデータを流し終えた後、復号用ハフマンテーブルを得るまでに最大３０１クロックもかかっていたのでは、パイプライン処理はスムーズに行えない。即ち、復号用データ算出回路３０の処理が、パイプライン処理を行う上でボトルネックとなっている。
【００３３】
［本実施の形態におけるハフマンテーブルの復号方法］
本実施の形態は、復号用データ算出回路３０の処理を高速化する。復号用データ算出回路３０におけるハフマンテーブルは、ハフマン復号を効率よく行うために必要である。そのために、ビット長のグループごとに予めソーティングしたテーブルとして作成しておく必要がある。一般的な復号用データ算出回路３０は、まず図６左側のアルファベット順の圧縮ハフマンテーブルを作成し、次にソーティングを行い、図６右側の復号用ハフマンテーブルを作成する。しかしながら、このようなソーティング処理には最低２８６クロックが必要となる。
これに対して、本実施の形態では、ダイレクトにソーティングされたテーブルを作成する。そのために、インサート機能付シフトメモリ回路（レジスタ）を使用する。
【００３４】
図８は、インサート機能付シフトメモリ回路３１について示した図である。
このインサート機能付シフトメモリ回路３１は、通常のメモリと同様に任意のアドレスに読み書きできるだけでなく、書き込んだアドレス以降の内容をシフトできるという特徴を有する。例えば、インサート機能付シフトメモリ回路３１が１６バイトであるとすると、１０番地のアドレスにデータを書き込むのと同時に、それまで１０番地から１４番地に記憶されていた内容を１１番地から１５番地にシフトして書き込むことができる。因みに、１５番地に記憶されていた内容はシフトアウトされて消去される。
【００３５】
具体的には、Ｎ番地のセレクタ４１−Ｎは、Data Inから入力された文字コード、（Ｎ−１）番地のフリップフロップ４２−（Ｎ−１）に保持された文字コード、Ｎ番地のフリップフロップ４２−Ｎに保持された文字コードのうちの何れかを選択し、Ｎ番地のフリップフロップ４２−Ｎに保持させる。このとき、セレクタ４１−Ｎが何れの文字コードを選択すべきかを指示するのがアドレスデコーダ４３であり、Insert Addressから入力されたアドレスがＫ番地であれば、セレクタ４１−Ｎ（Ｎ＝１，２，…，Ｋ−１）に対して、Ｎ番地のフリップフロップ４２−Ｎに保持された文字コードを選択するように指示する信号を、セレクタ４１−Ｎ（Ｎ＝Ｋ）に対して、Data Inから入力された文字コードを選択するように指示する信号を、セレクタ４１−Ｎ（Ｎ＝Ｋ＋１，Ｋ＋２，…）に対して、（Ｎ−１）番地のフリップフロップ４２−（Ｎ−１）に保持された文字コードを選択するように指示する信号を、それぞれ出力する。
【００３６】
図９は、インサート機能付シフトメモリ回路３１を復号用ハフマンテーブルに使用する方法を示した図である。
図示するように、インサート機能付シフトメモリ回路３１は、図６右側のソーティングされたハフマンテーブル（復号用ハフマンテーブル）として使用される。また、各ビット長が割り当てられたアルファベットの数を格納するＮｕｍ部と、各ビット長に対応する文字コードが最初に格納されているアドレスを格納するＰｏｉｎｔｅｒ部とからなるポインタテーブルを用意しておく。
【００３７】
ここでは、入力された圧縮ハフマンテーブルデータ「３，３，５，３，２，４，５，４，３，５，５」のうち、ＡからＦに対応する「３，３，５，３，２，４」を例にとって説明する。
Ｎｕｍ部には、ビット長「１」、「２」、「３」、「４」、「５」に対して、各ビット長に割り当てられたアルファベットの数「０」、「１」、「３」、「１」、「１」が格納されている。
Ｐｏｉｎｔｅｒ部には、ビット長「１」、「２」、「３」、「４」、「５」に対して、各ビット長に割り当てられたアルファベットの復号用ハフマンテーブルにおける格納アドレス「０」、「０」、「１」、「４」、「５」が格納されている。
【００３８】
次にこれらのテーブルを作成する手順を具体的に示す。
図１０−１及び図１０−２は、このような手順の例を示した図である。ここでも、Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆに対するビット長として「３，３，５，３，２，４」が入力された場合の復号を例にとって説明する。
まず、リセット直後はどちらのテーブルも空の状態である。
次に、Ａに対するビット長として「３」が入力されたとする。すると、（ａ）に示すように、復号用ハフマンテーブルの０番値にＡの文字コードが格納される。このとき、ポインタテーブルでは、Ｎｕｍ部の３ビット長に対する値が「１」となり、Ｐｏｉｎｔｅｒ部の４ビット長、５ビット長に対する値が「１」となる。
【００３９】
次に、Ｂに対するビット長として同じ「３」が入力されたとする。すると、同じビット長なので、（ｂ）に示すように、復号用ハフマンテーブルのＡの文字コードが格納された番地の次の番地にＢの文字コードが格納される。このとき、ポインタテーブルでは、Ｎｕｍ部の３ビット長に対する値が「２」となり、Ｐｏｉｎｔｅｒ部の４ビット長、５ビット長に対する値が「２」となる。
【００４０】
次に、Ｃに対するビット長として「５」が入力されたとする。すると、５ビット長の方が３ビット長よりも長いので、（ｃ）に示すように、復号用ハフマンテーブルの３ビット長に対する文字コードが格納されている後、つまり２番地にＣの文字コードが格納される。このとき、ポインタテーブルでは、Ｎｕｍ部の５ビット長に対する値が「１」となるが、５ビット長よりも長いビット長はないので、Ｐｏｉｎｔｅｒ部は更新されない。
【００４１】
次に、Ｄに対するビット長として「３」が入力されたとする。すると、（ｄ）に示すように、復号用ハフマンテーブルの５ビット長に対するＣの文字コードが格納された場所（２番地）の直前に挿入される形でＤの文字コードが書き込まれる。そして、５ビット長に対するＣの文字コードは３番地にシフトされる。このとき、ポインタテーブルでは、Ｎｕｍ部の３ビット長に対する値が「３」となり、Ｐｏｉｎｔｅｒ部の４ビット長、５ビット長に対する値が「３」となる。
【００４２】
次に、Ｅに対するビット長として「２」が入力されたとする。すると、復号用ハフマンテーブルの３ビット長に対する文字コードが格納された場所よりも前に格納する必要があるため、（ｅ）に示すように、０番地にＥの文字コードが格納される。そして、これまで０番地以降に格納されていたデータは順次シフトされ、１番地以降に書き込まれる。このとき、ポインタテーブルでは、Ｎｕｍ部の２ビット長に対する値が「１」となり、Ｐｏｉｎｔｅｒ部の３ビット長以上のビット長に対する値が１カウントアップされる。
【００４３】
次に、Ｆに対するビット長として「４」が入力されたとする。すると、（ｆ）に示すように、復号用ハフマンテーブルの３ビット長と４ビット長の間に割り込む形で４番地にＦの文字コードが挿入される。そして、５ビット長以降のビット長に対する文字コードは順次シフトされる。このとき、ポインタテーブルでは、Ｎｕｍ部の４ビット長に対する値が「１」となり、Ｐｏｉｎｔｅｒ部の５ビット長に対する値が１カウントアップされる。
【００４４】
このように、本実施の形態では、インサート機能付シフトメモリ回路３１を使うことにより、リアルタイムにソーティングされたハフマンテーブルを作成することができる。これにより、今まで最低２８６クロックかかっていたソーティング処理が必要なくなり、高速に処理することが可能となる。
【００４５】
以下、このような動作を実現する復号用データ算出回路３０についてより詳細に説明する。
図１１は、本実施の形態における復号用データ算出回路３０について示した図である。
図示するように、入力されたビット長の列は、カウンタ３２へ入力される。これにより、カウンタ３２は、ＡＳＣＩＩコードの最小値である０を起点として、１つビット長が入力されるごとにカウントし、カウントした結果（つまり、ＡＳＣＩＩコード）をData In信号として、インサート機能付シフトメモリ回路３１に供給する。
一方で、入力されたビット長の列は、ポインタテーブル３３へも入力される。このポインタテーブル３３については後で詳しく述べるが、このポインタテーブル３３からPointer信号及びNum信号が出力されると、加算回路３４がこれらの信号の値を加算し、加算した結果をInsert Address信号としてインサート機能付シフトメモリ回路３１に供給する。
これにより、インサート機能付シフトメモリ回路３１は、図８を参照して述べたような動作を行い、入力されたビット長に対応する文字コードを、ビット長の順にソーティングした状態でフリップフロップ４２−１，４２−２，…に保持する。
【００４６】
次に、ポインタテーブル３３のうちＰｏｉｎｔｅｒ部の回路について説明する。
図１２は、本実施の形態におけるＰｏｉｎｔｅｒ部の回路の一例を示した図である。尚、ここでは、入力されるビット長の最大値が「１５」である場合の回路を示しているが、入力されるビット長の最大値はこれに限らない。
この回路において、セレクタ５１−Ｍは、Ｐｏｉｎｔｅｒ［Ｍ］が保持する値、及び、Ｐｏｉｎｔｅｒ［Ｍ］が保持する値にインクリメンタ５２−Ｍによって「１」が加算された値のうち、何れかを選択する。この何れを選択すべきかを指示するのがデコーダ５３であり、デコーダ５３は、入力されたビット長に応じた１５ビットの信号を出力する。ここで、この１５ビットの信号は、入力されたビット長をＫとすると、１ビット目からＫビット目までが「０」であり、その他が「１」である信号である。例えば、入力されたビット長が１であれば、「０１１１１１１１１１１１１１１」であり、入力されたビット長が２であれば、「００１１１１１１１１１１１１１」であり、入力されたビット長が１５であれば、「０００００００００００００００」である。そして、この１５ビットのうち、Ｋビット目の信号が、セレクタ５１−Ｋに供給される。１ビット目の信号は、入力されたビット長に関わらず「０」となるので、図ではデコーダからの出力線のみ示したが、これは設けなくてもよい。このような構成により、入力されたビット長がＫの場合、Ｍ≦Ｋであれば、Ｐｏｉｎｔｅｒ［Ｍ］はカウントアップされず、Ｍ＞Ｋであれば、Ｐｏｉｎｔｅｒ［Ｍ］はカウントアップされる。尚、Ｐｏｉｎｔｅｒ［Ｍ］の初期値は、図示するように「０」である。
また、入力されたビット長は、セレクタ５４にも出力され、セレクタ５４は、入力されたビット長に対応するＰｏｉｎｔｅｒ［Ｍ］をPointer信号として加算回路３４（図１１参照）に出力する。
【００４７】
次いで、ポインタテーブル３３のうちＮｕｍ部の回路について説明する。
図１３は、本実施の形態におけるＮｕｍ部の回路の一例を示した図である。尚、ここでも、入力されるビット長の最大値が「１５」である場合の回路を示しているが、入力されるビット長の最大値はこれに限らない。
この回路において、セレクタ５６−Ｍは、Ｎｕｍ［Ｍ］が保持する値、及び、セレクタ５９（後述）から出力された値にインクリメンタ５７によって「１」が加算された値のうち、何れかを選択する。この何れを選択すべきかを指示するのがデコーダ５８であり、デコーダ５８は、入力されたビット長に応じた１５ビットの信号を出力する。ここで、この１５ビットの信号は、入力されたビット長をＫとすると、Ｋビット目が「１」であり、その他が「０」である信号である。例えば、入力されたビット長が１であれば、「１００００００００００００００」であり、入力されたビット長が２であれば、「０１０００００００００００００」であり、入力されたビット長が１５であれば、「００００００００００００００１」である。そして、この１５ビットのうち、Ｋビット目の信号が、セレクタ５６−Ｋに供給される。このような構成により、入力されたビット長がＫの場合、Ｍ＝Ｋであれば、Ｎｕｍ［Ｍ］はカウントアップされ、Ｍ≠Ｋであれば、Ｎｕｍ［Ｍ］はカウントアップされない。尚、Ｎｕｍ［Ｍ］の初期値は、図示するように「０」である。
また、入力されたビット長は、セレクタ５９にも出力され、セレクタ５９は、入力されたビット長に対応するＮｕｍ［Ｍ］をNum信号として加算回路３４（図１１参照）に出力する。
【００４８】
尚、復号用ハフマンテーブルは、記号情報、復号用情報の一例であり、ポインタテーブル３３のＰｏｉｎｔｅｒ部は、順番情報、復号用情報の一例である。また、本実施の形態では、記号情報、更には順番情報を生成する第２の生成部の一例として、復号用データ算出回路３０を設けている。
【００４９】
尚、本実施の形態における復号用データ算出回路３０では、ビット長ごとのアルファベットの数を記録するＮｕｍ部をポインタテーブルに設けたが、これはあくまで一例であり、Ｎｕｍ部を設けない構成も考えられる。例えば、ビット長ごとのアルファベットの有無を記録するＥｎａｂｌｅ部を設けてもよい。この場合、Ｍビット長に対するアルファベットの数はＰｏｉｎｔｅｒ［Ｍ］とＰｏｉｎｔｅｒ［Ｍ＋１］の差分によって知ることができる。
【００５０】
また、本実施の形態におけるハフマンテーブル復号回路１００では、入力された圧縮ハフマンテーブルデータを、使用回数算出回路１０、符号算出回路２０、復号用データ算出回路３０がこの順に処理することにより、復号用ハフマンテーブルデータ及び復号用符号テーブルを作成したが、これには限らない。例えば、復号用データ算出回路３０が、入力された圧縮ハフマンテーブルデータに基づいて、ビット長ごとのアルファベットの数を算出する構成（Ｎｕｍ部）を有していれば、使用回数算出回路１０を設ける必要はない。但し、その場合は、ビット長ごとのアルファベットの数を用いる符号算出回路２０の処理は、復号用データ算出回路３０の処理の後に行うことになる。具体的には、符号算出回路２０は、ｂｌ＿ｃｏｕｎｔ［Ｍ］の代わりにＮｕｍ［Ｍ］を用いて、ｃｏｄｅ＿ｍｉｎ［Ｍ］及びｃｏｄｅ＿ｍａｘ［Ｍ］を算出することになる。
【００５１】
最後に、本実施の形態におけるハフマン復号装置の動作の流れについて説明する。
図１４は、このときの動作の流れを示したフローチャートである。尚、この動作の流れは、上記のように復号用データ算出回路３０の処理の後に符号算出回路２０の処理を行う構成を前提としている。
図示するように、本実施の形態におけるハフマン復号装置では、ハフマンテーブル分離回路２００が、圧縮ハフマンテーブルデータと圧縮後データとからなるデータを受信すると、これらを分離する（ステップ１０１）。
【００５２】
次に、ハフマンテーブル復号回路１００では、復号用データ算出回路３０が、圧縮ハフマンテーブルデータの中に未処理のビット長があるかどうかを判定する（ステップ１０２）。
その結果、未処理のビット長があると判定された場合、復号用データ算出回路３０は、この未処理のビット長を取り込み、ビット長の入力順をカウンタ３２によって文字コードに変換することにより、Data In信号を求める（ステップ１０３）。
次に、復号用データ算出回路３０は、ポインタテーブル３３において、取り込んだビット長よりも長いビット長に対応するＰｏｉｎｔｅｒ［Ｍ］に「１」を加算し（ステップ１０４）、取り込んだビット長に対応するＮｕｍ［Ｍ］に「１」を加算する（ステップ１０５）。そして、取り込んだビット長に対応するＰｏｉｎｔｅｒ［Ｍ］及びＮｕｍ［Ｍ］を加算回路３４によって加算することにより、Insert Address信号を求める（ステップ１０６）。
これにより、復号用データ算出回路３０は、Data In信号で指定された文字コードを、インサート機能付シフトメモリ回路３１のInsert Address信号で指定されたアドレスに挿入する（ステップ１０７）。
【００５３】
一方、未処理のビット長がないと判定された場合、ステップ１０３〜１０７の処理により、復号用ハフマンテーブルの作成は完了している。そこで、符号算出回路２０は、Ｎｕｍ［Ｍ］に基づいて、各ビット長に対するｃｏｄｅ＿ｍｉｎ［Ｍ］及びｃｏｄｅ＿ｍａｘ［Ｍ］を算出することにより、復号用符号テーブルとして符号テーブルを作成する（ステップ１０８）。
【００５４】
その後、ハフマン復号回路３００が、復号用ハフマンテーブルデータ及び符号テーブルデータを用いて、圧縮後データに含まれる符号を、その符号が割り当てられた文字に置き換えることにより、圧縮前データを生成する（ステップ１０９）。
【００５５】
以上により、本実施の形態についての説明を終了する。
尚、本実施の形態では、「ビット長の順」といった場合、ビット長が短い順を意味するものとしたが、ビット長が長い順を意味するものとしても、ビット長に関するその他の順序を意味するものとしてもよい。即ち、「ビット長の順」は、より一般的には「ビット長に関する所定の順序」と捉えることができる。
また、本実施の形態において、ビット長の入力順序は対応する文字のＡＳＣＩＩコード順としたが、この入力順序も、より一般的に「記号に関する所定の順序」と捉えてよい。
【００５６】
更に、本実施の形態では、１つのビット長に対し、複数の符号を用いることを前提としたため、復号用ハフマンテーブルにおける各ビット長の先頭アドレスを指し示すポインタをポインタテーブルに設けたが、このような構成には限らない。例えば、１つのビット長に対し、１つの符号のみを用いることを前提とすると、復号用ハフマンテーブルにおける記号の格納順がビット長を示すので、ポインタをポインタテーブルに設けない構成も考えられる。
【００５７】
以上述べたように、本実施の形態では、（１）ビット長の切り出し、（２）切り出されたビット長からの符号の復元、の２つの手順のうち、手順（２）におけるハフマンテーブルのソーティング処理をリアルタイムで行うようにした。具体的には、インサート機能付シフトメモリ回路を用いることにより、圧縮ハフマンテーブルデータの入力と並行してそのソーティング処理を行うようにした。これにより、圧縮ハフマンテーブルの最後のデータが入力されたときにはソーティングされたハフマンテーブルが完成しており、圧縮ハフマンテーブルの入力後にソーティング処理を行う方法に比べて、高速に処理できるようになった。
【００５８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００５９】
１００…ハフマンテーブル復号回路、１０…使用回数算出回路、２０…符号算出回路、３０…復号用データ算出回路、２００…ハフマンテーブル分離回路、３００…ハフマン復号回路
【図１】
0005656593.tif 000002
【図２】
0005656593.tif 000003
【図３】
0005656593.tif 000004
【図４】
0005656593.tif 000005
【図５】
0005656593.tif 000006
【図６】
0005656593.tif 000007
【図７】
0005656593.tif 000008
【図８】
0005656593.tif 000009
【図９】
0005656593.tif 000010
【図１０−１】
0005656593.tif 000011
【図１０−２】
0005656593.tif 000012
【図１１】
0005656593.tif 000013
【図１２】
0005656593.tif 000014
【図１３】
0005656593.tif 000015
【図１４】
0005656593.tif 000016