(57)【特許請求の範囲】
【請求項１】
エントリとしてインデックス情報と内部値とを有するルックアップテーブルを用いて符号化されたビットストリームをデコーディングする方法であって、
（ａ）前記符号化されたビットストリームを受信するステップと、
（ｂ）前記受信されたビットストリームの一部ビットよりなるコードワードのうちの最初のビットからインデックス情報を求め、前記インデックス情報に対応する前記ルックアップテーブルのエントリにアクセスするステップと、
（ｃ）前記アクセスされたエントリの内部値に基づき前記エントリの種類を判断するステップと、
（ｄ）前記判断されたエントリのノードが端末ノードと判断される場合、前記ルックアップテーブルの内部値を前記コードワードのデコーディングされたコードワードに出力するステップと、を含むことを特徴とするデコーディング方法。
【請求項２】
前記ステップ（ｃ）は、前記アクセスされたエントリの内部値の符号に基づき前記エントリが中間ノードに該当するか、それとも端末ノードに該当するかを判断することを特徴とする請求項１に記載のデコーディング方法。
【請求項３】
（ｅ）前記ステップ（ｃ）において、前記アクセスされたエントリが中間ノードであると判断される場合、前記現在エントリのインデックス値、前記アクセスされたエントリの内部値、及び前記コードワードのうちの次のビット値に基づき、次にアクセスするエントリのインデックス値を計算することを特徴とする請求項１または２に記載のデコーディング方法。
【請求項４】
前記次にアクセスするエントリのインデックス値は下記式［数１］により計算され、計算されたインデックス値を用いて対応する前記ルックアップテーブルのエントリにアクセスするステップをさらに含むことを特徴とする請求項３に記載のデコーディング方法。
【数１】
0003714935.tif 000010
ただし、式中、indexは現在エントリのインデックス番号であり、data(index)は現在エントリの戻し値であり、new_digit()は前記コードワードのうちの次のビット値である。
【請求項５】
前記現在エントリの内部値は、現在ノードと次に移動するノードとの相対的な距離値であることを特徴とする請求項３または４に記載のデコーディング方法。
【請求項６】
前記次にアクセスするエントリは、現在エントリに該当するノードの子ノードのうち左側ノードに該当するエントリであり、前記現在エントリの内部値は、現在エントリのインデックス値と前記左側ノードに該当するエントリのインデックス値との差分値である相対的な距離であることを特徴とする請求項３または４に記載のデコーディング方法。
【請求項７】
次にアクセスするエントリのインデックス値を、前記現在のインデックス値、前記内部値の絶対値、及びコードワードの次のビット値の和値により計算することを特徴とする請求項３に記載のデコーディング方法。
【請求項８】
前記ステップ（ｃ）は、（ｃ１）前記計算されたインデックスに対応する前記ルックアップテーブルのエントリの内部値に基づき前記アクセスされたエントリが中間ノードに該当するか、それとも端末ノードに該当するかを判断するステップをさらに含むことを特徴とする請求項３に記載のデコーディング方法。
【請求項９】
前記符号化されたビットストリームは、ＭＰＥＧ規格、ＪＰＥＧ規格及びＨ．２６ｘ規格のうちのいずれか一つにより符号化されたことを特徴とする請求項１に記載のデコーディング方法。
【請求項１０】
前記ルックアップテーブルは、２進木から生成されたことを特徴とする請求項１に記載のデコーディング方法。
【請求項１１】
符号化されたビットストリームを２進木検索によりデコーディングするためのデコーディング装置であって、
前記符号化されたビットストリームをデコーディングするためのプロセッサーと、
前記プロセッサーに結合され、前記デコーディングと関わるルックアップテーブルが貯蔵されたメモリと、を備え、
前記ルックアップテーブルは前記２進木のノードに対応するインデックス情報と内部値を有するエントリを備え、前記エントリに該当する前記２進木のノードの種類は前記エントリと関わって貯蔵された内部値に基づき決定され、前記ノードの種類が端末ノードの場合、前記エントリの内部値は前記ビットストリームの所定のコードワードに対するデコーディングされたコードワードであることを特徴とするデコーディング装置。
【請求項１２】
前記エントリと関わって貯蔵された内部値は、前記エントリに該当するノードの種類によって符号を異にすることを特徴とする請求項１１に記載のデコーディング装置。
【請求項１３】
前記エントリに該当するノードが中間ノードである場合、前記エントリの内部値は、現在エントリに該当する中間ノードと次にアクセスするノードとの相対的な距離値であることを特徴とする請求項１１または１２に記載のデコーディング装置。
【請求項１４】
次にアクセスするエントリは現在エントリに該当するノードの子ノードのうち左側ノードに該当するエントリであり、前記相対的な距離値は、現在エントリのインデックス値と前記左側ノードに該当するエントリのインデックス値との差分値であることを特徴とする請求項１３に記載のデコーディング装置。
【請求項１５】
前記符号化されたビットストリームは、ＭＰＥＧ規格、ＪＰＥＧ及びＨ．２６ｘ規格のうちのいずれか一つにより符号化されたことを特徴とする請求項１１に記載のデコーディング装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は改善されたハフマンデコーディング方法及び装置に係り、特に、ハフマンコーディングの基本原理である２進木から生成された一次元ルックアップテーブルの効率良い構成と、プロセシング効率を高めるための数値演算技法とを用いてハフマンデコーディングを行うハフマンデコーディング方法及び装置に関する。
【０００２】
【従来の技術】
ハフマンコードが有する固有な特徴により、従来の２進木を用いたハフマンデコーディング技法は、最大検索時間及び平均検索時間の偏差の側面で極めて効率良い方法として見なされてきている。しかし、既存の２進木に基づく検索方法によれば、検索に必要な資料構造を生成するために、連結リストに基づく２進木を構成する複雑な過程を行わなければならず、且つ、２進木検索においてノード間の移動のために行う比較及び分岐構文はプロセッサーの動作中にパイプラインの流れを妨げてハフマンデコーダの処理速度を落とす主な原因となっている。
【０００３】
以下、添付した図面に基づき、従来のハフマンデコーディング装置の構成及び動作と、その装置において行われる従来のハフマンデコーディング方法について説明する。
【０００４】
図１は、従来のハフマンデコーディング装置の概略的なブロック図であって、入力バッファ１１０、サーチエンジン１２０、ハフマンルックアップテーブル１３０及び出力バッファ１４０を備えてなる。
【０００５】
図２は、図１に示された装置において行われる既存の条件分岐構文に基づくハフマンデコーダのデコーディング方法を説明するためのフローチャートである。
【０００６】
図３は、従来の方式による２進ハフマン木の構造を示し、ノード３１０、３２２、３３０、３３２、３４２、３４２、３４４、３４６、３５６は、次のノードに分岐される中間ノードであり、ノード３２０、３４０、３４６、３５０、３５２、３５４、３６０、３６２は、実際の戻し値を有する端末ノードである。
【０００７】
表１は、図３に示された２進ハフマン木のコードブックを示している。
【表１】
0003714935.tif 000002
【０００８】
図４Ａ及び図４Ｂは、従来の２進木ハフマンデコーディング方法によるハフマンテーブルのメモリ構造を示している。図４Ａ及び図４Ｂに示されたように、従来のハフマンテーブルでは、３つのメモリ空間を用いる。図４Ａに示されたように、中間ノードの場合には割り当てられた３つのメモリ空間のうち中間のメモリ空間にはヌル値が貯蔵され、左側のメモリ空間には子ノードのうち左側ノードのアドレスが貯蔵され、右側のメモリ空間には子ノードのうち左側ノードのアドレスが貯蔵される。また、図４Ｂに示されたように、端末ノードの場合には、割り当てられた３つのメモリ空間のうち中間のメモリ空間には該当ノードの内部値、すなわち実際の戻し値が貯蔵され、左側及び右側のメモリ空間にはヌル値が貯蔵される。
【０００９】
以下では、図３、図４及び図５と図２のフローチャートとを結び付けて従来の技術による２進木構造のハフマンテーブルを用いたハフマンデコーダのデコーディング方法について説明する。
【００１０】
ステップ２１０はデコーディングの開始段階であって、ハフマンデコーダに入力される符号化されたビットストリームの符号に基づき図３に示されたハフマン木の根ノード、すなわち、中間ノード３１０に該当するエントリにアクセスする。
【００１１】
ステップ２２０は比較及び分岐構文であって、ステップ２１０においてアクセスされたエントリに該当するノードが中間ノードであるか、それとも端末ノードであるかを判断する。
【００１２】
ステップ２３０においては、ステップ２２０においてアクセスされたエントリに該当するノードが端末ノードであると判断された場合、端末ノードに割り当てられた３つのメモリ空間のうち中間のメモリ空間に貯蔵された値を実際に戻すデコーディングされたコードワード値として出力する。
【００１３】
ステップ２４０においては、ステップ２２０においてアクセスされたハフマン木のアドレスに該当するノードが中間ノードであると判断された場合、ビットストリームから入力された１ビットの値が’０’である場合にはステップ２５０へ進み、’１’である場合にはステップ２６０へ進む。
【００１４】
ステップ２５０においては、現在ノードに割り当てられた３つのメモリ空間のうち左側のメモリ空間に貯蔵されたアドレスに該当するエントリにアクセスし、ステップ２２０へ進む。
【００１５】
ステップ２６０においては、現在ノードに割り当てられた３つのメモリ空間のうち右側のメモリ空間に貯蔵されたアドレスにアクセスし、ステップ２２０へ進む。
【００１６】
以下、図２及び図５に基づき、前記従来のハフマンデコーディング方法により符号化された入力ビットストリーム’１１１０１００．．．．’をデコーディングする過程について説明する。ステップ２１０はデコーディングの開始段階であって、ハフマン２進木のルートアドレスに該当する図５に示されたハフマンテーブルのアドレス’１’に該当するエントリにアクセスする。
【００１７】
ステップ２２０において、アクセスされたエントリのノードが中間ノードであるか、それとも端末ノードであるかを判断する。図５を参照すれば、アドレス’１’に該当するノードに該当する３つのメモリ空間のうち中間のメモリ空間に貯蔵された値は’ヌル’であり、左側のメモリ空間には’４’が貯蔵されており、右側のメモリ空間には’７’が貯蔵されている。従って、ステップ２２０においては、アドレス’１’に該当するノードが図４Ａに示された中間ノードであると判断し、ステップ２４０へ進む。
【００１８】
ステップ２４０においては、入力されたビットストリーム’１１１０１００’の符号化された最初のコードワードの最初のビット’１’を入力され、入力されるビットnew_digit()が’１’であるため、ステップ２６０へ進む。
【００１９】
ステップ２６０においては、現在アドレス’１’の右側アドレス’２’、すなわち、現在ノードの右側のメモリ空間に貯蔵されたアドレス’７’に該当するエントリにアクセスし、ステップ２２０へ進む。
【００２０】
ステップ２２０においては、ハフマンテーブルのアドレス’７’に該当するノードが中間ノードであるか、それとも端末ノードであるかを判断する。図５を参照すれば、アドレス’７’に該当するノードに該当する３つのメモリ空間のうち中間のメモリ空間に貯蔵された値は’ヌル’であり、左側のメモリ空間には’１０’が貯蔵されており、右側のメモリ空間には’１３’が貯蔵されている。従って、ステップ２２０においてはアドレス’７’に該当するノードが図４Ａに示された中間ノードであると判断し、ステップ２４０へ進む。
【００２１】
ステップ２４０においては、入力されたビットストリーム’１１１０１００’の最初のコードワードの２番目のビット’１’を入力され、入力されるビットnew_digit()が’１’であるため、ステップ２６０へ進む。
【００２２】
ステップ２６０においては、現在アドレス’７’の右側アドレス’８’、すなわち、現在ノードの右側のメモリ空間に貯蔵されたアドレス’１３’に該当するエントリにアクセスし、ステップ２２０へ進む。
【００２３】
ステップ２２０においては、ハフマンテーブルのアドレス’１３’に該当するノードが中間ノードであるか、それとも端末ノードであるかを判断する。図５を参照すれば、アドレス’１’に該当するノードに該当する３つのメモリ空間のうち中間のメモリ空間に貯蔵された値は’ヌル’であり、左側のメモリ空間には’２２’が貯蔵されており、右側のメモリ空間には’２５’が貯蔵されている。従って、ステップ２２０においては、アドレス’１３’に該当するノードが図４Ａに示された中間ノードであると判断し、ステップ２４０へ進む。
【００２４】
ステップ２４０においては、入力されたビットストリーム’１１１０１００’の最初のコードワードの３番目のビット’１’を入力され、入力されるビットnew_digit()が’１’であるため、ステップ２６０へ進む。
【００２５】
ステップ２６０においては、現在アドレス’１３’の右側アドレス’１４’、すなわち現在ノードの右側のメモリ空間に貯蔵されたアドレス’２５’に該当するエントリにアクセスし、ステップ２２０へ進む。
【００２６】
ステップ２２０においては、ハフマンテーブルのアドレス’２５’に該当するノードが中間ノードであるか、それとも端末ノードであるかを判断する。図５を参照すれば、アドレス’２５’に該当するノードに割当する３つのメモリ空間のうち中間のメモリ空間に貯蔵された値は’４’であり、左側のメモリ空間には’ヌル’が貯蔵されており、右側のメモリ空間には’ヌル’が貯蔵されている。従って、ステップ２２０においてはアドレス２５に該当するノードが図４Ｂに示された端末ノードであると判断し、ステップ２３０へ進む。
【００２７】
ステップ２３０においては、アドレス’２５’に該当するノードに割り当てられた３つのメモリ空間のうち中間のメモリ空間に貯蔵された値’４’をデコーディングされたコードワード値として出力する。
【００２８】
従って、入力されたビットストリーム’１１１０１００’の最初のコードワード’１１１’に対するデコーディングされたコードワード’４’を求め、ビットストリーム’１１１０１００’の２番目のコードワードに対するデコーディングを再開する。
【００２９】
デコーディングされたコードワード値’４’を求める過程と同様に、ステップ２１０においては、デコーディングの開始段階としてハフマン２進木のルートアドレスに該当するハフマンテーブルのアドレス’１’に該当するエントリにアクセスし、ステップ２２０へ進む。
【００３０】
ステップ２２０において、アクセスされたハフマンテーブルのアドレス’１’に該当するノードが中間ノードであるか、それとも端末ノードであるかを判断し、アドレス’１’に該当するノードに該当する３つのメモリ空間のうち中間のメモリ空間に貯蔵された値は’ヌル’であり、左側のメモリ空間には’４’が貯蔵されており、右側のメモリ空間には’７’が貯蔵されている。従って、ステップ２２０においてはアドレス’１’に該当するノードが図４Ａに示された中間ノードであると判断し、ステップ２４０へ進む。
【００３１】
従って、ステップ２４０へ進んで入力されたビットストリーム’１１１０１００’の２番目のコードワードの最初のビット’０’を入力され、入力されたビットnew_digit()が’０’であるため、ステップ２５０へ進む。
【００３２】
ステップ２５０においては、現在アドレス’１’の左側アドレス’０’、すなわち、現在ノードの左側のメモリ空間に貯蔵されたアドレス’４’に該当するエントリにアクセスし、ステップ２２０へ進む。
【００３３】
ステップ２２０においては、ハフマンテーブルのアドレス’４’に該当するノードが中間ノードであるか、それとも端末ノードであるかを判断する。図５を参照すれば、アドレス’４’に該当するノードの３つのメモリ空間のうち中間のメモリ空間に貯蔵された値は’６０’であり、左側のメモリ空間には’ヌル’値が貯蔵されており、右側のメモリ空間には’ヌル’値が貯蔵されている。従って、ステップ２２０においてはアドレス’４’に該当するノードが図４Ｂに示された端末ノードであると判断し、ステップ２３０へ進む。
【００３４】
ステップ２３０においては、アドレス’４’に該当するノードに割り当てられた３つのメモリ空間のうち中間のメモリ空間に貯蔵された値’６０’をビットストリーム’１１１０１００’の２番目のコードワード’０’に対するデコーディングされたコードワード値として出力する。
【００３５】
このような方式により、ハフマンデコーダに入力される符号化されたビットストリーム’１１１０１００’の３番目のコードワード’１００’に対するデコーディングされたコードワード値’５９’を出力し、ビットストリーム’１１１０１００．．．．’に対するデコーディングされたコードワード値’４，６０，５９．．．．’値を求める。
【００３６】
このように、従来の２進木に基づくハフマンデコーディング方法は、検索に必要な資料構造を生成するために連結リストに基づく２進木を構成する複雑な過程を行わなければならず、特に、２進木検索に当たって、ノード間の移動のために行う比較及び分岐構文はプロセッサーの動作中にパイプラインの流れを妨げて処理速度の効率を落とし、従来のハフマンデコーディング方法によるルックアップテーブルは各ノードごとに３つのメモリ空間を用いるために、メモリ空間を過度に消費するといった問題点がある。
【００３７】
【発明が解決しようとする課題】
本発明が解決しようとする技術的な課題は、従来のハフマンデコーディング過程においてプロセシング効率を落とす’比較及び分岐’命令を省いてハフマンデコーダの処理速度を高め、且つ、要求されるメモリ空間を狭める改善されたハフマンデコーディング方法を提供するところにある。
【００３８】
本発明が解決しようとする他の技術的な課題は、従来のハフマンデコーディング過程においてプロセシング効率を落とす’比較及び分岐’命令を省いてハフマンデコーダの処理速度を高め、且つ、要求されるメモリ空間を狭める前記改善されたハフマンデコーディング方法を行う改善されたハフマンデコーディングシステムを提供するところにある。
【００３９】
【課題を解決するための手段】
前記課題を解決するために、本発明による改善されたハフマンデコーディング方法は、エントリとしてインデックス情報と内部値とを有するルックアップテーブルを用いて符号化されたビットストリームをデコーディングする方法であって、（ａ）前記符号化されたビットストリームを受信するステップと、（ｂ）前記受信されたビットストリームの一部ビットよりなるコードワードのうちの最初のビットからインデックス情報を求め、前記インデックス情報に対応する前記ルックアップテーブルのエントリにアクセスするステップと、（ｃ）前記アクセスされたエントリの内部値に基づき前記エントリの種類を判断するステップと、（ｄ）前記判断されたエントリのノードが端末ノードと判断される場合、前記ルックアップテーブルの内部値を前記コードワードのデコーディングされたコードワードに出力するステップと、を含むことを特徴とする。
【００４０】
好ましくは、本発明による改善されたハフマンデコーディング方法は、アクセスされたエントリの内部値の符号に基づき前記エントリが中間ノードに該当するか、それとも端末ノードに該当するかを判断することを特徴とする。
【００４１】
好ましくは、本発明による改善されたハフマンデコーディング方法は、前記アクセスされたエントリが中間ノードであると判断される場合、前記現在エントリのインデックス値、前記アクセスされたエントリの内部値、及び前記コードワードのうちの次のビット値に基づき、次にアクセスするエントリのインデックス値を計算することを特徴とする。
【００４２】
前記他の課題を解決するために、本発明による改善されたハフマンデコーディング装置は、符号化されたビットストリームをデコーディングするためのプロセッサーと、前記プロセッサーに結合され、前記デコーディングと関わるルックアップテーブルが貯蔵されたメモリと、を備え、前記ルックアップテーブルは２進木のノードに対応するインデックス情報と内部値を有するエントリを備え、前記エントリに該当する前記２進木のノードの種類は前記エントリと関わって貯蔵された内部値に基づき決定され、前記ノードの種類が端末ノードの場合、前記エントリの内部値は前記ビットストリームの所定のコードワードに対するデコーディングされたコードワードであることを特徴とする。
【００４３】
好ましくは、本発明による改善されたハフマンデコーディング装置は、エントリと関わって貯蔵された内部値は、前記エントリに該当するノードの種類によって符号を異にすることを特徴とする。
【００４４】
好ましくは、本発明による改善されたハフマンデコーディング装置は、前記エントリに該当するノードが中間ノードである場合、前記エントリの内部値は現在エントリに該当する中間ノードと次にアクセスするノードとの相対的な距離値であることを特徴とする。なお、符号化されたビットストリームは、例えば、ＭＰＥＧ規格、ＪＰＥＧ規格及びＨ．２６規格のうちいずれか一つにより符号化されたものである。
【００４５】
【発明の実施の形態】
以下、添付した図面に基づき、本発明による改善されたハフマンデコーディング方法について詳細に説明する。
【００４６】
図６は、本発明による改善されたハフマンデコーディング方法を実現するためのルックアップテーブルの再構成による効率良い一次元ルックアップテーブルの構成過程を示している。
【００４７】
テーブルの変換過程は、同一検索段階別に２進木のノードをグループ化し、表１に示されたコードワードの大きさ順に左側から右側へと一次元配列させることによりなされる。図６に示されたルックアップテーブルの生成に際し、各ノードは中間ノードの場合には現在ノードの位置を基準として次に移動するノードの相対的な距離を内部値として貯蔵し、端末ノードの場合には実際の戻し値を内部値として貯蔵する。
【００４８】
前記一次元配列は、図６に示されたように、連結リストによる動的な資料構造の生成無しに、直列配列された静的なルックアップテーブルの構成を有する。
【００４９】
以下、図６に基づき、一次元ルックアップテーブルの作成過程について詳細に説明する。
【００５０】
図６の２進木の各ノードには上位レイヤから下位レイヤに、すなわち、レイヤ−０、レイヤ−１、レイヤ−２、レイヤ−３、レイヤ−４、レイヤ−５の順番にインデックス番号が付され、そして各レイヤ内においては各ノードに対して順次的なインデックス番号が付される。本発明による実施の形態においては、図６に示されたように、兄弟ノードには隣接したインデックス番号が付される。この実施の形態においては、同じレイヤ内においては左側から右側へとインデックス番号が付されるが、選択的に、同じレイヤ内においては右側から左側へとインデックス番号が付されても良い。
【００５１】
図６において、インデックス番号０，４，７，８，９，１０，１２，１３．．．が付された端末ノードには、表１に示されたコードワードの大きさによって左側から右側へと実際の戻し値’６０’，’５９’，’４’，’６１’，’５８’，’６２’，’５７’及び’６３’が割り当てられる。
【００５２】
一方、インデックス番号１，２，３，５，６，１１，．．．が付された中間ノードには現在ノードと次の移動するノードとの相対的な距離値が貯蔵される。この実施の形態においては、インデックス番号１，２，３，５，６，１１が付された中間ノードには現在ノードのインデックス番号と子ノードのうち左側ノードのインデックス番号との差分値、すなわち、’−１’，’−２’，’−３’，’−３’，’−４’，’−１’が各々貯蔵される。
【００５３】
図７は、図６に示されたテーブルの再構成法により構成された一次元ルックアップテーブルを示している。再構成された一次元ルックアップテーブルは、前記２進木の各ノードに付されたインデックス番号及びインデックス番号を結び付けて貯蔵した各ノードの内部値を含む。
【００５４】
ルックアップテーブルに貯蔵された各ノードの内部値は、中間ノードの場合には現在ノードと次の移動するノードとの相対的な距離値、この実施の形態の場合に現在ノードのインデックス番号と子ノードのうち左側ノードのインデックス番号との差分値であるために、常に負の値を有する。これに対し、端末ノードの場合には戻し値を貯蔵するために、正の値を有する。
【００５５】
この実施の形態においては、中間ノードの場合、現在ノードと子ノードのうち左側ノードとのインデックス番号の差分値を有するが、選択的に、右側ノードのインデックス番号との差分値を貯蔵するなど、他の形の相対的な距離値を貯蔵するようにしても良い。
【００５６】
図７に示された一次元ルックアップテーブルにおいて、’左側ノード：０’、’右側ノード：１’で表わされた列は図８に示された最終的なルックアップテーブルには含まれず、テーブルを生成する中間過程を表わす。これらは、検索過程で移動する検索アドレス値を表わし、符号化されたビットストリームから読み込まれたビットデータと連動して各々の場合、次に移動する検索段階のノードのインデックス番号を表示する。
【００５７】
従来の２進木ハフマンルックアップテーブルの場合には、検索を行うためのルックアップテーブルは各ノードに対して、各ノードに該当するデータ値、左側または右側ノードに分岐時に移動するためのアドレス値の３つの構成要素を有していなければならないため、２進木の各々のノードに対して３つのメモリ空間を必要とする。
【００５８】
これに対し、図８は、本発明による最終的なルックアップテーブルを示しており、中間ノードの場合に現在ノードを基準として他の移動するノードの相対的な距離値のみを有しており、端末ノードの場合に戻す結果値、すなわち、戻し値のみを有する。また、これら２値は図７の太線にて示されたように、常に排他的に発せられるため、図８に示されたように、一次元空間上に配列できる。従って、既存のルックアップテーブルに比べてメモリの使用空間が１／３に狭まる。
【００５９】
図９は、図８に示された本発明による一次元ルックアップテーブルを用いてハフマンデコーディングを行う方法を説明するためのフローチャートである。
【００６０】
ステップ９１０は、本発明による一次元ルックアップテーブルを用いてデコーディングを開始する段階であって、ハフマンデコーダに入力される符号化されたビットストリームの所定のコードワードの最初のビット値をインデックス情報として用いて 図８のルックアップテーブルのエントリにアクセスする。
【００６１】
ステップ９２０においては、ステップ９１０においてアクセスされたエントリに該当する現在ノードが中間ノードであるか、それとも端末ノードであるかを判断する。この実施の形態においては、該当エントリの内部値が正の値であるか、それとも負の値であるかによってノードの種類を判別する。ステップ９２０においては、該当エントリに貯蔵された内部値が正の値である場合、現在ノードを端末ノードであると判断してステップ９３０へ進み、前記内部値が負の値である場合、現在ノードを中間ノードであると判断してステップ９４０へ進む。
【００６２】
ステップ９３０においては、ステップ９２０において現在ノードを端末ノードであると判断した場合、現在エントリの内部値を実際の戻し値として出力する。
【００６３】
ステップ９４０においては、ステップ９２０において現在ノードが中間ノードであると判断された場合、下記式［数２］によって新しいインデックス値を計算し、ルックアップテーブルにおいて計算されたインデックス値に該当するエントリにアクセスする。
【数２】
0003714935.tif 000003
（式中、右側のindexは現在エントリに該当するインデックス番号であり、data(index)は現在エントリに内部値として貯蔵された現在ノードと次に移動するノードとの相対的な距離であり、new_digit()は次のビット値を意味する。）
【００６４】
この実施の形態においては、前記相対的な距離値は現在ノードのインデックス番号と現在ノードの子ノードのうち左側ノードのインデックス番号との差分値である。
【００６５】
以下、図８の一次元ルックアップテーブル及び図９のフローチャートを結び付けて、ハフマンデコーダに入力される符号化されたビットストリームのうち’１１１０１００’をデコーディングする過程について説明する。
【００６６】
ステップ９１０はデコーディングの開始段階であって、ハフマンデコーダに入力される符号化されたビットストリーム’１１１０１００’の最初のコードワードの最初のビット’１’をインデックス情報として用いて図８のルックアップテーブルのエントリにアクセスする。ここでは、所定の戻し値に対応するコードワードがビットストリーム’１１１０１００’の最初のビットから始まると仮定する。
【００６７】
ステップ９２０においては、ステップ９１０においてアクセスされた現在エントリ、すなわち、図８のルックアップテーブルのインデックス値’１’を有するエントリに該当するノードの内部値の符号によって現在ノードが中間ノードであるか、それとも端末ノードであるかを判断する。この実施の形態においては、ステップ９２０においてはインデックス値’１’を有するエントリの内部値が負の値’−１’であるため、現在ノードを中間ノードであると判断し、ステップ９４０へ進む。
【００６８】
ステップ９４０においては、前記式［数２］によって新しいインデックス値を計算し、計算されたインデックス値に基づき新しいエントリにアクセスし、ステップ９２０へ進む。この実施の形態においては、data(index)はインデックス番号１−２の結果値であり、new_digit()はデコーディングしようとするビットストリーム’１１１０１００’の次のビット値’１’であるため、新しいインデックス値は
【数３】
0003714935.tif 000004
となる。
【００６９】
従って、ステップ９４０においては、インデックス値’３’に該当するエントリにアクセスし、ステップ９２０へ進む。
【００７０】
ステップ９２０においては、ステップ９４０においてアクセスされた現在エントリ、すなわち、図８のルックアップテーブルのインデックス値’３’に該当するエントリのノードが中間ノードであるか、それとも端末ノードであるかを判断する。ステップ９２０においては、エントリの内部値’−３’が負の値であるため、現在ノードを中間ノードであると判断し、ステップ９４０へ再び進む。
【００７１】
ステップ９４０においては、前記式［数２］によって新しいインデックス値を計算する。new_digit()はデコーディングしようとするビットストリーム’１１１０１００’の最初のコードワードの２番目のビット値’１’であるため、新しいインデックス値は、
【数４】
0003714935.tif 000005
となる。
【００７２】
従って、インデックス値’７’に該当するエントリにアクセスし、ステップ９２０へ進む。
【００７３】
ステップ９２０においては、ステップ９４０においてアクセスされた現在エントリ、すなわち、図８のルックアップテーブルのインデックス７に該当するエントリのノードが中間ノードであるか、それとも端末ノードであるかを判断する。ステップ９２０においては、現在エントリの内部値が正の値であるため、現在ノードを端末ノードであると判断し、ステップ９３０へ進む。
【００７４】
ステップ９３０においては、インデックス７に該当するエントリの内部値’４’を実際の戻し値、すなわち、デコーディングされたコードワードとして出力し、符号化されたビットストリーム’１１１０１００’のうち最初のビットセット、すなわち、コードワード’１１１’に対するデコーディング段階を終え、２番目のコードワードに対するデコーディングを再開する。
【００７５】
ステップ９１０においては、ビットストリーム’１１１０１００’の２番目のコードワードの最初のビット’０’をインデックス情報として用いて図８のルックアップテーブルのエントリにアクセスする。
【００７６】
ステップ９２０においては、ステップ９１０においてアクセスされたインデックス０に該当するエントリの内部値が正の値であるため、現在ノードを端末ノードであると判断し、ステップ９３０へ進む。
【００７７】
ステップ９３０においては、インデックス０に該当するエントリの内部値’６０’をデコーディングされたコードワードとして出力し、符号化されたビットストリーム’１１１０１００’のうち２番目のコードワード’０’に対するデコーディング段階を終え、３番目のコードワードに対するデコーディングを再開する。
【００７８】
ステップ９１０においては、ビットストリーム’１１１０１００’の３番目のコードワードの最初のビット’１’をインデックス情報として用いて図８のルックアップテーブルのエントリにアクセスする。
【００７９】
ステップ９２０においては、ステップ９１０においてアクセスされた現在エントリ、すなわち、インデックス１に該当するエントリの内部値’−１’が負の値であるため、現在ノードを中間ノードであると判断してステップ９４０へ進む。
【００８０】
ステップ９４０においては、前記式［数２］によって新しいインデックス値を計算する。new_digit()はデコーディングしようとするビットストリーム’１１１０１００’の次のビット値’０’であるため、新しいインデックス値は、
【数５】
0003714935.tif 000006
となる。
【００８１】
従って、インデックス値’２’に該当するエントリにアクセスし、ステップ９２０へ進む。
【００８２】
ステップ９２０においては、ステップ９４０においてアクセスされた現在エントリ、すなわち、図８のルックアップテーブルのインデックス２に該当するエントリのノードが中間ノードであるか、それとも端末ノードであるかを判断する。この実施の形態においては、現在エントリの内部値’−２’が負の値であるため、現在ノードを中間ノードであると判断してステップ９４０へ進む。
【００８３】
ステップ９４０においては、前記式［数２］によって新しいインデックス値を計算する。new_digit()はデコーディングしようとするビットストリーム’１１１０１００’の３番目のコードワードの２番目のビット値が’０’であるため、前記式［数２］によれば、新しいインデックス値は
【数６】
0003714935.tif 000007
となる。
【００８４】
従って、インデックス値’４’に該当するエントリにアクセスし、ステップ９２０へ進む。
【００８５】
ステップ９２０においては、ステップ９４０においてアクセスされた現在エントリ、すなわち、図８のルックアップテーブルのインデックス４に該当するエントリのノードが中間ノードであるか、それとも端末ノードであるかを判断する。ステップ９２０においては、現在エントリの内部値’５９’が正の値であるため、現在ノードを端末ノードであると判断し、ステップ９３０へ進む。
【００８６】
ステップ９３０においては、現在エントリの内部値’５９’を符号化されたビットストリーム’１１１０１００’の３番目のコードワード’１００’のデコーディングされたコードワードとして出力する。
【００８７】
このような方式により、符号化されたビットストリーム’１１１０１００’の３つのコードワードに対するデコーディングを行い、デコーディングされたコードワード’４，６０，５９’を結果値として出力する。
【００８８】
このように、既存の２進木に基づくハフマンデコーディング方法と、本発明による改善されたハフマンデコーディング方法とを比較すれば、本発明によるハフマンデコーディング方法においては、符号化されたビットストリームから入力された１ビットのデータを直接的にルックアップテーブルのエントリへのアクセス、すなわち、アドレス値の演算に適用することにより、既存のハフマンデコーディング方法でノード間の移動のために存在していた条件文が除去可能になり、一層向上されたプロセシング効率が得られる。
【００８９】
表２は、本発明の改善されたハフマンデコーディング方法による結果と、既存の順次的な検索方式に基づくハフマンデコーディング方法の結果とを示している。
【表２】
0003714935.tif 000008
表２から明らかなように、任意のＭＰＥＧ−２ ＡＡＣ（ａｄｖａｎｃｅｄ ａｕｄｉｏ ｃｏｄｉｎｇ）テストファイルを試験すれば、ハフマンコードの種類によって最小３０％から最大７７７％の性能の向上がもたらされる。また、平均検索回数の側面でも、本発明によるハフマンデコーディング方法は、通常の順次的な検索方式のハフマンデコーダに比べて約７５％の性能の向上を示している。
【００９０】
表３は、同じ測定条件下で６種の相異なるＭＰＥＧ−２ ＡＡＣテストファイルを用いて測定を行った結果を示している。
【表３】
0003714935.tif 000009
【００９１】
表３から明らかなように、本発明による改善されたハフマンデコーディング方法は、既存の順次的な検索方式のハフマンデコーディング方法に比べて、ファイルの種類によって最小２４％から最高７７６％の検索速度の向上をもたらす。
【００９２】
本発明は上述した実施の形態に限定されることなく、本発明の思想内であれば、当業者による変形が可能であるということは言うまでもない。
【００９３】
本発明はまた、コンピュータにて読取り可能な記録媒体にコンピュータにて読取り可能なコードとして具現可能である。コンピュータにて読取り可能な記録媒体はコンピュータシステムによって読取り可能なデータが貯蔵されるあらゆる種類の記録装置を含む。コンピュータにて読取り可能な記録媒体の例としては、ＲＯＭ、ＲＡＭ、ＣＤ−ＲＯＭ、磁気テープ、ハードディスク、フロッピー（登録商標）ディスク、フラッシュメモリ、光データ貯蔵装置などがあり、またキャリアウェーブ（例えば、インターネットを介した伝送）の形で具現されるものも含む。尚、コンピュータにて読取り可能な記録媒体は、ネットワークに連結されたコンピュータシステムに分散され、分散方式によりコンピュータにて読取り可能なコードとして貯蔵されて実行できる。
【００９４】
【発明の効果】
上述したように、本発明による改善されたハフマンデコーディング方法及び装置によれば、従来２進木検索に必要であった’比較及び分岐’演算を除くことにより検索速度を向上でき、且つ、ルックアップテーブルの構成のためのメモリ空間も、既存の’比較及び分岐’構文において用いられるテーブルの１／３だけでも実現できる。
【図面の簡単な説明】
【図１】  従来のハフマンデコーディング装置の概略的なブロック図である。
【図２】  図１に示された装置において行われる従来のハフマンデコーディング方法を説明するためのフローチャートである。
【図３】  ハフマンデコーディング方法に用いられる２進木構造を示す図面である。
【図４Ａ】  従来のハフマンデコーディング方法に用いられる各々のノードに対応するハフマンテーブルのメモリ空間を示す図面である。
【図４Ｂ】  従来のハフマンデコーディング方法に用いられる各々のノードに対応するハフマンテーブルのメモリ空間を示す図面である。
【図５】  従来のハフマンデコーディング方法に用いられるハフマンテーブルである。
【図６】  本発明による一次元ルックアップテーブルの作成過程を示す図面である。
【図７】  本発明による一次元ルックアップテーブルの作成過程を示す表である。
【図８】  本発明によるデコーディング方法に用いられる一次元ルックアップテーブルである。
【図９】  本発明による、数値演算に基づく改善されたハフマンデコーディング方法を説明するためのフローチャートである。
【符号の説明】
９１０、９２０、９３０、９４０  ステップ
【図１】
0003714935.tif 000011
【図２】
0003714935.tif 000012
【図３】
0003714935.tif 000013
【図４Ａ】
0003714935.tif 000014
【図４Ｂ】
0003714935.tif 000015
【図５】
0003714935.tif 000016
【図６】
0003714935.tif 000017
【図７】
0003714935.tif 000018
【図８】
0003714935.tif 000019
【図９】
0003714935.tif 000020