(57)【要約】  本発明の目的は、プリフィックスに関する情報をコンパクトに格納し、種々の方式の可変長符号に対応可能な復号装置を提供することである。復号装置は、プリフィックス共通部、その語長、プリフィックス個別部、その語長、サフィックスの語長及び入力ビット列を格納するレジスタファイル１０１と、プリフィックス共通部及び個別部から生成されたプリフィックスから入力ビット列に含まれるプリフィックスを判定するビットマッチング部１０２と、判定されたプリフィックスに対応するプリフィックス共通部、個別部及びサフィックスの各語長を用いて入力ビット列に含まれる符号語の語長を計算する符号語長計算部１０３と、対応するサフィックス及び符号語の各語長を用いてシンボルテーブル１０７のインデックスを計算するインデックス計算部１０４と、を有する。
2007108395.tif 000002
【特許請求の範囲】
【請求項１】
可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する復号装置において、
復号に使用される複数のプリフィックスに共通するプリフィックス共通部と、各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部と、可変長符号の未知符号語を含む入力ビット列と、を格納する記憶手段と、
前記記憶手段に格納された各プリフィックス共通部および当該プリフィックス共通部に対応する複数のプリフィックス個別部から生成された複数のプリフィックスのうち、どのプリフィックスが前記記憶手段に格納された入力ビット列に含まれるか否かを判定するプリフィックス識別手段と、
を有することを特徴とする可変長符号の復号装置。
【請求項２】
可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する復号装置において、
復号に使用される複数のプリフィックスに共通するプリフィックス共通部およびその語長と、各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部およびその語長と、複数の符号語の各々において前記プリフィックスを除いたサフィックスの語長と、可変長符号の未知符号語を含む入力ビット列と、を格納する記憶手段と、
前記プリフィックス共通部および複数のプリフィックス個別部から生成された複数のプリフィックスのうち、どのプリフィックスが前記入力ビット列に含まれるか否かを判定するプリフィックス識別手段と、
前記判定結果に基づいて特定される、前記プリフィックス共通部の語長、前記プリフィックス個別部の語長および前記サフィックスの語長を用いて、前記入力ビット列に含まれる未知符号語の語長を計算する語長計算手段と、
前記判定結果に基づいて特定されるサフィックスの語長および前記未知符号語の語長を用いて復号用テーブルのインデックスを計算するインデックス計算手段と、
前記入力ビット列に含まれる未知符号語の語長および復号用テーブルのインデックスを生成するための命令に従って、前記プリフィックス識別手段、前記語長計算手段および前記インデックス計算手段を制御する制御手段と、
を有することを特徴とする可変長符号の復号装置。
【請求項３】
請求項２に記載の復号装置を実装するプログラム制御プロセッサにおいて、
前記記憶手段はレジスタファイルであり、
前記制御手段は、復号プログラムの前記命令に従って、前記プリフィックス識別手段、前記語長計算手段および前記インデックス計算手段を制御し、前記計算された未知符号語の語長および復号用テーブルのインデックスを前記レジスタファイルに格納する命令デコーダである、
ことを特徴とするプログラム制御プロセッサ。
【請求項４】
可変長符号化された符号語を復号値テーブルを用いて復号する復号装置において、
復号に使用される複数の符号語およびそれらの語長と、可変長符号の未知符号語を含む入力ビット列と、を格納する記憶手段と、
前記複数の符号語およびそれらの語長を用いて、前記複数の符号語のうち、どの符号語が前記入力ビット列に含まれるか否かを判定する識別手段と、
前記判定結果に基づいて、前記入力ビット列に含まれる未知符号語の語長を計算する語長計算手段と、
前記判定結果に基づいて、前記復号値テーブルを参照するためのインデックスを計算するインデックス計算手段と、
前記前記入力ビット列に含まれる未知符号語の語長およびインデックスを生成するように、前記識別手段、前記語長計算手段および前記インデックス計算手段を制御する制御手段と、
を有することを特徴とする可変長符号の復号装置。
【請求項５】
請求項４に記載の復号装置を実装するプログラム制御プロセッサにおいて、
前記記憶手段はレジスタファイルであり、
前記制御手段は、復号プログラムの前記命令に従って、前記識別手段、前記語長計算手段および前記インデックス計算手段を制御し、前記計算された未知符号語の語長およびインデックスを前記レジスタファイルに格納する命令デコーダである、
ことを特徴とするプログラム制御プロセッサ。
【請求項６】
可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する方法において、
復号に使用される複数のプリフィックスに共通するプリフィックス共通部を記憶手段に格納し、
各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部を前記記憶手段に格納し、
可変長符号の未知符号語を含む入力ビット列を前記記憶手段に格納し、
前記記憶手段に格納された各プリフィックス共通部および当該プリフィックス共通部に対応する複数のプリフィックス個別部から複数のプリフィックスを生成し、
前記複数のプリフィックスのうちの１つのプリフィックスが前記入力ビット列に含まれるか否かを判定する、
ことを特徴とする可変長符号の復号方法。
【請求項７】
可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する方法において、
復号に使用される複数のプリフィックスに共通するプリフィックス共通部およびその語長と、各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部およびその語長と、複数の符号語の各々において前記プリフィックスを除いたサフィックスの語長と、可変長符号の未知符号語を含む入力ビット列と、を記憶手段に格納し、
前記プリフィックス共通部および複数のプリフィックス個別部から生成された複数のプリフィックスのうち、どのプリフィックスが前記入力ビット列に含まれるか否かを判定し、
前記判定結果に基づいて特定される、前記プリフィックス共通部の語長、前記プリフィックス個別部の語長および前記サフィックスの語長を用いて、前記入力ビット列に含まれる未知符号語の語長を計算し、
前記判定結果に基づいて特定されるサフィックスの語長および前記未知符号語の語長を用いて復号用テーブルのインデックスを計算し、
前記インデックスを用いて前記復号用テーブルを参照し復号値を取り出す、
ことを特徴とする可変長符号の復号方法。
【請求項８】
可変長符号化された符号語を復号値テーブルを用いて復号する方法において、
復号に使用される複数の符号語およびそれらの語長と、可変長符号の未知符号語を含む入力ビット列と、を格納するステップと、
前記複数の符号語およびそれらの語長を用いて、前記複数の符号語のうち、どの符号語が前記入力ビット列に含まれるか否かを判定するステップと、
前記判定結果に基づいて、前記入力ビット列に含まれる未知符号語の語長を計算するステップと、
前記判定結果に基づいて、前記復号値テーブルを参照するためのインデックスを計算するステップと、
前記インデックスを用いて前記復号用テーブルを参照し復号値を取り出すステップと、  を含むことを特徴とする可変長符号の復号方法。
【請求項９】
可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する復号装置を構成するコンピュータに、
復号に使用される複数のプリフィックスに共通するプリフィックス共通部を記憶手段に格納する処理と、
各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部を前記記憶手段に格納する処理と、
可変長符号の未知符号語を含む入力ビット列を前記記憶手段に格納する処理と、
前記記憶手段に格納された各プリフィックス共通部および当該プリフィックス共通部に対応する複数のプリフィックス個別部から複数のプリフィックスを生成する処理と、
前記複数のプリフィックスのうちの１つのプリフィックスが前記入力ビット列に含まれるか否かを判定する処理と、
を実行させる可変長符号の復号プログラム。
【請求項１０】
可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する復号装置を構成するコンピュータに、
復号に使用される複数のプリフィックスに共通するプリフィックス共通部およびその語長と、各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部およびその語長と、複数の符号語の各々において前記プリフィックスを除いたサフィックスの語長と、可変長符号の未知符号語を含む入力ビット列と、を記憶手段に格納する処理と、
前記プリフィックス共通部および複数のプリフィックス個別部から生成された複数のプリフィックスのうち、どのプリフィックスが前記入力ビット列に含まれるか否かを判定する処理と、
前記判定結果に基づいて特定される、前記プリフィックス共通部の語長、前記プリフィックス個別部の語長、および前記サフィックスの語長を用いて、前記入力ビット列に含まれる未知符号語の語長を計算する処理と、
前記判定結果に基づいて特定されるサフィックスの語長および前記未知符号語の語長を用いて復号用テーブルのインデックスを計算する処理と、
前記インデックスを用いて前記復号用テーブルを参照し復号値を取り出す処理と、
を実行させる可変長符号の復号プログラム。
【請求項１１】
可変長符号化された符号語を復号値テーブルを用いて復号する復号装置を構成するコンピュータに、
復号に使用される複数の符号語およびそれらの語長と、可変長符号の未知符号語を含む入力ビット列と、を格納する処理と、
前記複数の符号語およびそれらの語長を用いて、前記複数の符号語のうち、どの符号語が前記入力ビット列に含まれるか否かを判定する処理と、
前記判定結果に基づいて、前記入力ビット列に含まれる未知符号語の語長を計算する処理と、
前記判定結果に基づいて、前記復号値テーブルを参照するためのインデックスを計算する処理と、
前記インデックスを用いて前記復号用テーブルを参照し復号値を取り出す処理と、
を実行させる可変長符号の復号プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は圧縮符号化された信号の復号技術に係り、特に可変長符号の復号装置及び方法に関する。
【背景技術】
【０００２】
画像や音楽を圧縮するために可変長符号化が広く使用されている。可変長符号化は出現確率の高いシンボルに短い符号語を優先的に割り当てる符号化方法である。可変長符号化には符号語の平均語長を小さくできるという特徴がある。このような可変長符号化により符号化された情報を復号する方法は、次の４つに分類することができる：(a)シンプル・テーブル・ルックアップ法；(b)リーディング・サイン・カウント法；(c)バイナリ・ツリー法；(d)プリフィックス・グルーピング法。なお、これらは一般的な復号方法の名称ではないが、本明細書ではこれらの名称を使う。以下、簡単に説明する。【０００３】
(a)  シンプル・テーブル・ルックアップ法は最も単純な方法である。最も長い符号語の語長をNビットとし、入力ビット列の先頭からNビットを取り出し、そのNビットをインデックスとして２N個の要素をもつテーブルから要素を取り出す。テーブルから取り出された要素が符号語に対応するシンボルである。テーブルのサイズが大きいという欠点がある。【０００４】
(b)  リーディング・サイン・カウント法は入力ビット列の先頭側の連続する１や０(signビット)の数をもとにして符号語のグループを解読する。入力ビット列の先頭にあるsignビットに続くＭ個のビットを取り出し、それを使って符号語を解読する。Ｍは４とか５などで、符号語の構成によって変化する。ただし、Ｍ個のうち一部だけしか意味をもたない場合が多い。テーブルの中には少なからず無駄なデータがある。(a)のシンプル・テーブル・ルックアップ法よりもテーブルは小さいが、符号語の構成によっては２種類のテーブル（符号長、シンボル）が必要になることもある。ソフトウェアの可変長復号器はほとんどこの方法を用いている。【０００５】
(c)  バイナリ・ツリー法は、１ビットずつ、符号語を表すバイナリ・ツリーをたどる復号方法である。ツリーのリーフに達したら、テーブル参照などでシンボルをデコードする。他の復号方法に比べてスループットが低い（１ビット／サイクル）という欠点があるが、ハードウェア実装には向いている。【０００６】
(d)  プリフィックス・グルーピング法は、「符号語はプリフィックスとサフィックスに分かれる」という事実にもとづいた復号方法である。入力ビット列を全ての符号語のプリフィックスと比較し、どのプリフィックスかを調べる。プリフィックスと符号長とが一対一に対応しているので、プリフィックスを特定できたら符号長も自動的にわかる。入力ビット列のプリフィックスがわかったら、入力ビット列からサフィックスを取り出す。プリフィックスとサフィックスを特定できたら、それらからテーブル参照のためのオフセットが得られる。そのオフセットを使ってテーブルをサーチし、符号語に対応するシンボルを取り出す。このプリフィックス・グルーピング法に関しては、特許文献１および２、非特許文献１および２がある。【０００７】
プリフィックス・グルーピング法は、(b)のリーディング・サイン・カウント法よりもテーブルサイズは小さく、テーブルサイズはほぼシンボルの数に等しい。入力ビット列とプリフィックスの比較処理と、プリフィックスとサフィックスからオフセットを計算する処理とをソフトウェアで実行するのが通常困難なので、この方法はハードウェア実装向きである。【０００８】
【特許文献１】特開平７−２３５８７８号公報
【特許文献２】特表２００２−５１６５０１号公報
【非特許文献１】Bai-Jue Shieh et al., "A New Approach of Group-Based VLC codec System with Full Table Programmability," IEEE Transactions on Circuits and Systems for Video Technology, Vol.11, No.2, Feb. 2001.
【非特許文献２】Cheng-Teh Hsieh et al., "A Concurrent Memory-efficient VLC Decoder for MPEG Applications," IEEE Transactions on Consumer Electronics, Vol.42, Aug. 1996.
【０００９】
上記の特許文献、非特許文献の全記載は、引用をもって本書に繰り込み記載されているものとみなす。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
以下、本発明による関連技術の分析を示す。
しかしながら、上記プリフィックス・グルーピング法は、シンボルを格納するテーブルの他に、(1)プリフィックス、(2)プリフィックスを含む符号語の語長、および、(3)プリフィックスに対応するサフィックスの語長を格納するためのテーブルが必要である。したがって、プリフィックス・グルーピング法はシンボルを格納するテーブルサイズが非常に小さいという特長をもつ反面、プリフィックスの種類が多いときには上記(1)、(2)および(3)を格納するテーブルのサイズが大きくなってしまうという課題がある。【００１１】
さらに、上記プリフィックス・グルーピング法は、通常、ハードウェアで実装されるので種々の方式に適用できないという課題もある。符号化方式によって可変長符号の構成が異なるため、様々な方式に使える効率の良い汎用的な可変長符号復号器を作ることは一般的に困難である。例えば、特許文献２に開示された可変長符号復号器は、プリフィックス・グルーピング法を使ったメモリ使用量が少ない効率の良い復号器であるが、MPEG-2の符号化方式に強く依存している。したがって、この復号器の原理を他の符号化方式に適用することは可能であるものの新たに復号器を設計する必要がある。【００１２】
そこで、本発明の目的は、プリフィックスに関する情報をコンパクトに格納するための可変長符号の復号装置および復号方法を提供することにある。【００１３】
さらに、本発明の他の目的は、さまざまな方式の可変長符号に対応可能な可変長符号の復号方法および装置を提供することにある。【００１４】
さらに、他の目的は、明細書及びクレームの全開示事項から、明らかとなる。
【課題を解決するための手段】
【００１５】
本発明の第１の側面によれば、可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する復号装置であって、復号に使用される複数のプリフィックスに共通するプリフィックス共通部と、各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部と、可変長符号の未知符号語を含む入力ビット列と、を格納する記憶手段と、前記記憶手段に格納された各プリフィックス共通部および当該プリフィックス共通部に対応する複数のプリフィックス個別部から生成された複数のプリフィックスのうち、どのプリフィックスが前記記憶手段に格納された入力ビット列に含まれるか否かを判定するプリフィックス識別手段と、を有することを特徴とする。【００１６】
本発明の第２の側面によれば、可変長符号化された符号語を復号値テーブルを用いて復号する復号装置であって、復号に使用される複数の符号語およびそれらの語長と、可変長符号の未知符号語を含む入力ビット列と、を格納する記憶手段と、前記複数の符号語およびそれらの語長を用いて、前記複数の符号語のうち、どの符号語が前記入力ビット列に含まれるか否かを判定する識別手段と、前記判定結果に基づいて、前記入力ビット列に含まれる未知符号語の語長を計算する語長計算手段と、前記判定結果に基づいて、前記復号値テーブルを参照するためのインデックスを計算するインデックス計算手段と、前記前記入力ビット列に含まれる未知符号語の語長およびインデックスを生成するように、前記識別手段、前記語長計算手段および前記インデックス計算手段を制御する制御手段と、を有することを特徴とする。【００１７】
本発明の第３の側面によれば、可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する可変長符号の復号方法が提供される。この復号方法は、復号に使用される複数のプリフィックスに共通するプリフィックス共通部を記憶手段に格納し、各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部を前記記憶手段に格納し、可変長符号の未知符号語を含む入力ビット列を前記記憶手段に格納し、前記記憶手段に格納された各プリフィックス共通部および当該プリフィックス共通部に対応する複数のプリフィックス個別部から複数のプリフィックスを生成し、前記複数のプリフィックスのうちの１つのプリフィックスが前記入力ビット列に含まれるか否かを判定する、各ステップを有することを特徴とする。【００１８】
本発明の第４の側面によれば、第１及び第２の側面にかかる復号装置を作動するためのプログラム並びに第３の側面に係る上記復号方法を実施するためのコンピュータに命令するプログラム（プロダクト）が提供される。プログラムは、第３の側面の復号方法の各ステップを実行する処理ステップを有すること、あるいは、第２の側面の復号装置の各手段を作動させることを特徴とする。【００１９】
本発明の一実施形態によれば、可変長符号化された符号語に含まれるプリフィックスを用いて符号語を復号する復号装置であって、復号に使用される複数のプリフィックスに共通するプリフィックス共通部およびその語長と、各プリフィックスにおいて前記プリフィックス共通部以外のプリフィックス個別部およびその語長と、複数の符号語の各々において前記プリフィックスを除いたサフィックスの語長と、可変長符号の未知符号語を含む入力ビット列と、を格納する記憶手段と、前記プリフィックス共通部および複数のプリフィックス個別部から生成された複数のプリフィックスのうち、どのプリフィックスが前記入力ビット列に含まれるか否かを判定するプリフィックス識別手段と、前記判定結果に基づいて特定される、前記プリフィックス共通部の語長、前記プリフィックス個別部の語長、および前記サフィックスの語長を用いて、前記入力ビット列に含まれる未知符号語の語長を計算する語長計算手段と、前記判定結果に基づいて特定されるサフィックスの語長および前記未知符号語の語長を用いて復号用テーブルのインデックスを計算するインデックス計算手段と、前記入力ビット列に含まれる未知符号語の語長および復号用テーブルのインデックスを生成するための命令に従って、前記プリフィックス識別手段、前記語長計算手段および前記インデックス計算手段を制御する制御手段と、を有することを特徴とする。【００２０】
上記復号装置はプログラム制御プロセッサ上に実装可能であり、その場合、前記記憶手段はレジスタファイルであり、前記制御手段は、復号プログラムの前記命令に従って、前記プリフィックス識別手段、前記語長計算手段および前記インデックス計算手段を制御し、前記計算された未知符号語の語長および復号用テーブルのインデックスを前記レジスタファイルに格納する命令デコーダである。【００２１】
上記一実施形態による可変長符号復号装置は、可変長符号化された符号語に含まれるプリフィックスを使って可変長符号を復号する可変長符号復号器として動作可能なプロセッサ（図２の参照番号１００）であって、次のように構成することができる。【００２２】
レジスタファイル（図２の参照番号１０１）に、複数のプリフィックスに共通のビット列(共通部)、前記の共通部の語長、前記の共通部以外の各プリフィックスのビット列(個別部)、前記の個別部の語長、プリフィックスを除いた符号語のビット列(サフィックス)の語長、可変長符号の符号語を含む入力ビット列、符号語に対応するシンボルを格納したテーブルのインデックス、および、復号した符号語の語長を格納するための記憶領域あるいはレジスタを用意し、プリフィックス共通部およびその語長、プリフィックス個別部およびその語長、サフィックスの語長、および、可変長符号の符号語を含む入力ビット列をそれぞれ格納する。【００２３】
プリフィックス識別手段（図２のビットマッチング部１０２）は、前記プリフィックス共通部および複数のプリフィックス個別部から生成された複数のプリフィックスのうち、どのプリフィックスが入力ビット列に含まれるか否かを判定する。語長計算手段（図２の符号語長計算部１０３）は、判定結果に基づいて特定されるプリフィックス共通部の語長、プリフィックス個別部の語長およびサフィックスの語長を用いて、入力ビット列に含まれる未知符号語の語長を計算する。インデックス計算手段（図２のインデックス計算部１０４）は、判定結果に基づいて特定されるサフィックスの語長および未知符号語の語長を用いて復号用テーブルのインデックスを計算する。【００２４】
さらに、制御手段（図２の命令デコーダ１０５、およびプログラムメモリ１０９）は、プロセッサへ与えられた命令に応答して、識別手段とインデックス計算手段と語長計算手段とを動作させ、インデックス計算手段が計算したインデックスおよび語長計算手段が計算した符号語の語長をレジスタファイルへ格納する。
【発明の効果】
【００２５】
（１）本発明の第１の効果はプリフィックスを格納しておく記憶領域のサイズを小さくできることである。【００２６】
従来は、Ｎ個のプリフィックスをそのままメモリやレジスタなどの記憶手段へ格納していた。プリフィックスの長さは１ビットから数１０ビットまで、プリフィックスの数Ｎは１０個未満から３０個程度までと、さまざまである。例えば、ビデオ符号化方式MPEG-2 のイントラAC係数の符号化に使用される可変長符号に含まれるプリフィックスは２３個であり、プリフィックスの語長は２ビットから１２ビットまでである。ただし、プリフィックスの切り出し方によってプリフィックスの種類や語長は多少変化する。また、従来は、プリフィックスをそのまま格納するので、仮に１６ビット幅のレジスタを使うとすると、 ２３個のプリフィックスを格納するのに２３×２＝４６バイト分のレジスタが必要となる。【００２７】
これに対して、本発明によれば、プリフィックスを共通部と個別部に分けて格納する。
したがって、例えば２３個のプリフィックスの場合には、８個、８個、７個の３つのグループに分け、３つのグループに対して３個の共通部と２３個のプリフィックスに対応する個別部とを格納する。この場合、共通部と個別部とをそれぞれ８ビット幅のレジスタに格納できるので、合計で３＋２３＝２６バイト分のレジスタが必要になる。従来は４６バイト分のレジスタが必要であったのであるから、本発明によりプリフィックスを格納するレジスタのサイズは半分になる。【００２８】
他の例として音楽符号化方式MPEG-2 AAC(advanced audio coding)のscalefactor用の可変長符号について考える。scalefactor用の可変長符号に含まれるプリフィックスは３７個である。プリフィックスの語長は２ビット〜１８ビットまでである。仮に２４ビット幅のレジスタをつかうとすると、従来では３７個のプリフィックスを格納するのに３７×３＝１１１バイト分のレジスタが必要である。【００２９】
これに対して、本発明によれば、３７個のプリフィックスを８個、８個、８個、８個、５個の５つのグループに分け、５つの共通部と、３７個のプリフィックスに対応する個別部とを格納する。共通部を１６ビットレジスタで、個別部を８ビットレジスタでそれぞれ格納すると、５×２＋３７＝４７バイト分のレジスタが必要である。この例においても、本発明によれば、従来の約半分の容量でプリフィックスを格納することができる。【００３０】
（２）本発明の第２の効果はさまざまな符号化方式の可変長符号を高速に復号できることである。すなわち、プロセッサへ与えられた命令に応答して、識別手段、インデックス計算手段および語長計算手段を動作させ、インデックスおよび未知符号語の語長を計算することができ、プリフィックスの個数が多くなってもそれらを複数グループに分割し同様の処理を繰り返すことで、種々の符号化方式に対しても柔軟に対応することができる。また、プロセッサ内のレジスタファイルに従来より容量が少ないデータをロードすることで高速な復号処理が可能となる。
【図面の簡単な説明】
【００３１】
【図１】（Ａ）は符号語をプリフィックスとサフィックスとに分けた符号語の模式図であり、（Ｂ）は本発明による可変長符号の復号方法で用いられるプリフィックスの共通部および個別部を示す模式図である。
【図２】本発明の一実施形態による可変長符号の復号装置を示す機能的ブロック図である。
【図３】図２の復号装置に用いられるレジスタファイル１０１にプリフィックスに関する情報と入力ビット列とを格納したようすを示す模式図である。
【図４】ビットマッチング部１０２により生成された８個のプリフィックスを示す模式図である。
【図５】復号値インデックスsymbol_indexを求める手順を示す説明図である。
【図６】本発明の一実施例による復号方法を示すフローチャートである。
【符号の説明】
【００３２】
１００  プロセッサ
１０１  レジスタファイル
１０２  ビットマッチング部
１０３  符号語長計算部
１０４  インデックス計算部
１０５  命令デコーダ
１０６  入出力部
１０７  シンボルテーブル
１０８  復号値メモリ
１０９  プログラムメモリ
【発明を実施するための最良の形態】
【００３３】
図１（Ａ）は符号語をプリフィックスとサフィックスとに分けた符号語の模式図であり、図１（Ｂ）は本発明による可変長符号の復号方法で用いられるプリフィックスの共通部および個別部を示す模式図である。【００３４】
図１（Ａ）に示すように、符号語をプリフィックス(prefix)１０とサフィックス(suffix)１１とに分ける。言い換えれば、符号語からプリフィックス１０を取り除いたビット列がサフィックス１１である。【００３５】
そしてプリフィックス１０に関して、図１（Ｂ）に示すように、複数のプリフィックス１０に共通なビット列を共通部１２とし、共通部１２をプリフィックス１０から取り除いたビット列を個別部１３とする。図１（Ｂ）では１個の共通部prefix_commonとｎ個のプリフィックス個別部prefix_part[0]-prefix_part[n-1]とを示している。【００３６】
共通部１２と任意の１つの個別部１３とを用いてｎ個のプリフィックスのなかの任意のプリフィックスを構成することができる。たとえば、prefix_commonとprefix_part[i]とを連結すればｉ番目のプリフィックスが得られる。【００３７】
可変長符号には符号語の語長が長くなるにつれて符号語の先頭に同じようなビット列を含む符号語の数が増えるという性質がある。これは可変長符号の一般的な性質である。本発明は、この性質を利用してプリフィックスを共通部１２と個別部１３とに分けることで、プリフィックスの格納容量を縮小する。【００３８】
なお、複数のプリフィックスを２以上のグループに分割し、それぞれのグループのプリフィックスについて上述した共通部１２および個別部１３を生成してもよい。プリフィックスの数をＮ個、グループの数をＭ個とすると、Ｎ個のプリフィクスについて、Ｍ個の共通部１２とＮ個の個別部１３が得られる。このようにプリフィックスを複数のグループへ分割する場合もプリフィックスの格納容量を縮小することができる。【００３９】
以下、説明を簡単にするために、あくまでも一例として、表１に示す８種類の符号語があり、それぞれに対応する復号値（シンボル）が存在するものとする。【００４０】
【表１】
2007108395.tif 000003
【００４１】
表１の例を用いて、まず符号語とプリフィックスとの関係について説明した後、どのようにしてプリフィックスを用いて符号語を復号できるのか、について簡単に説明する。【００４２】
１．符号語とプリフィックとの関係
表１に示す８種類の符号語は、表２に示すような５種類のプリフィックスに分類される。【００４３】
【表２】
2007108395.tif 000004
【００４４】
表１から表２を得るためには、次のステップａ）〜ｄ）の方法を用いることができる。
ａ）同じ語長をもつ符号語ごとに符号語をグループに分ける。
ｂ）各符号語グループにおいて、符号語を２進数として昇順に並べる。
ｃ）各符号語グループの隣り合う二つの符号語の組合せ全てについて、２つの符号語の２進数としての差が１でないならば、それらを別々の符号語グループとする処理を行なう。
この処理によって符号語グループはさらにいくつかに分かれる。
ｄ）各符号語グループに属する符号語に共通するビット列をプリフィックスとする。これにより各符号語グループに一つのプリフィックスが決まる。【００４５】
表２から分かるように、同じ符号語グループに属する符号語は同じ語長で、かつ、同じプリフィックスを有する。【００４６】
２．プリフィックスを用いた符号語の復号
上述したように、プリフィックスと符号語の語長との間には一対一の関係がある。この関係を使って未知の符号語を特定することができる。すなわち、未知符号語のプリフィックスを調べ、プリフィックスから未知符号語の語長がわかる。続いて未知符号語からプリフィックスを取り除いてサフィックスを取り出し、サフィックスから未知符号語を特定できる。【００４７】
また、符号語の種類が増えてもプリフィックスの種類はそれほど増加しないという性質がある。したがって、全ての符号語を未知符号語とマッチングするよりもプリフィックスを未知符号語とマッチングする方がマッチングの回数が少なく高速マッチングが可能となる。【００４８】
また、プリフィックスを使って未知符号語を特定するので、符号語に対応する復号値（シンボル）を格納するシンボルテーブルのサイズを非常に小さくすることができる。なぜなら、シンボルテーブルから未知符号語に対応するシンボルを取り出す際には未知符号語はどの符号語であるかが特定されているので、各符号語に対応する一つのシンボルをシンボルテーブルに格納しておけば良いからである。【００４９】
３．プリフィックス共通部／個別部
既に述べたように、可変長符号は符号語の語長が長くなるにつれて、符号語の先頭に同じようなビット列を含む符号語の数が増えるという性質がある。この性質を利用して、図１（Ｂ）に示すように、プリフィックス１０を共通部１２と個別部１３とに分けることで、プリフィックスを特定する情報を小さくすることができる。【００５０】
プリフィックス共通部１２は、複数のプリフィックスに共通なビット列である。表２を みると分かるように、全てのプリフィックスの左側の４ビットが一致している。実際には表２の５個のプリフィックスの左側の５ビットが共通ではあるが、左側５ビットを共通部としてしまうと符号語“0101 0”の個別部が無くなってしまうので、プリフィックスの左側４ビットを採用する。こうして、表２の５個のプリフィックスに共通な左側の４ビット“0101"を共通部１２とする。表２のプリフィックスを共通部１２と個別部１３に分類し、プリフィックス情報としてまとめた結果を表３に示す。【００５１】
【表３】
2007108395.tif 000005
【００５２】
後述するように、このプリフィックス関連情報を用いて未知の符号語を含む入力ビット列から可変長符号の符号語を復号する。本発明の実施形態による復号方法で使用されるプリフィックス関連情報は次に示す(1)-(5)であり、(6)は復号されるべき入力ビット列である。ただし、表３の例ではｎ＝８である。【００５３】
(1)  複数のプリフィックスに共通のビット列(共通部)prefix_common
(2)  共通部の語長clen
(3)  共通部以外の各プリフィックスのビット列(個別部)prefix_part[i], i=0,1,…n-1  (4)  各個別部の語長plen[i], i=0,1,…n-1
(5)  符号語からプリフィックスを取り除いた残りのビット列(サフィックス)の語長 slen[i], i=0,1,…n-1
(6)  未知の符号語を含む入力ビット列input_bits【００５４】
４．復号装置の構成
図２は本発明の一実施形態による可変長符号の復号装置を示す機能的ブロック図である。本実施形態による復号装置はプログラム制御プロセッサ１００により実現することができ、プロセッサ１００内のレジスタファイル１０１を用い、ビットマッチング部１０２、符号語長計算部１０３およびインデックス計算部１０４により、復号値インデックスsymbol_indexを高速計算することができる。ビットマッチング部１０２、符号語長計算部１０３およびインデックス計算部１０４は命令デコーダ１０５からの制御信号により制御される。また、プロセッサ１００は、命令デコーダ１０５からの制御信号に従って、レジスタファイル１０１に格納すべきプリフィックス関連情報および入力ビット列を入出力部１０６を通して入力し格納する。本実施形態における復号装置の一構成例は次の通りである。【００５５】
レジスタファイル１０１は１６本の６４ビットレジスタを有し、可変長符号の符号語を復号するために必要なプリフィックス関連情報および入力ビット列、すなわち、
(1)  複数のプリフィックスに共通のビット列(共通部)prefix_common
(2)  共通部の語長clen
(3)  共通部以外の各プリフィックスのビット列(個別部)prefix_part[i], i=0,1,…n-1  (4)  各個別部の語長plen[i], i=0,1,…n-1
(5)  符号語からプリフィックスを取り除いた残りのビット列(サフィックス)の語長 slen[i], i=0,1,…n-1
(6)  未知の符号語を含む入力ビット列input_bits
を格納する。【００５６】
ビットマッチング部１０２は、レジスタファイル１０１から上記４種類のプリフィックス関連情報(1)-(4)および入力ビット列(6)を受けとり、プリフィックス関連情報(1)−(4)を用いてプリフィックスを生成する。生成したプリフィックスから入力ビット列(6)に一致するプリフィックスを探索し、一致したプリフィックスの番号matched_indexを符号語長計算部１０３およびインデックス計算部１０４へ出力する。【００５７】
符号語長計算部１０３は、レジスタファイル１０１からプリフィックス関連情報(2)の各共通部の語長clen、(4)の各個別部の語長plen[i]、および、(5)のサフィックス語長slen[i]を受けとり、ビットマッチング部１０２が出力した一致したプリフィックスの番号matched_indexを使って符号語の語長codeword_lengthを計算する。その計算結果である符号語長codeword_lengthはレジスタファイル１０１に格納される。【００５８】
インデックス計算部１０４は、レジスタファイル１０１からプリフィックス関連情報 (5)のサフィックス語長slen[i]を受け取り、ビットマッチング部１０２が出力した一致したプリフィックスの番号matched_indexを使って復号値インデックスsymbol_indexを計算してレジスタファイル１０１に格納する。復号値インデックスsymbol_indexは、符号語に対応するシンボル(符号語の復号値)を格納したシンボルテーブル１０７におけるシンボルの位置(インデックス)である。したがって、命令デコーダ１０５からの制御信号により、復号値インデックスsymbol_indexを用いてシンボルテーブル１０７を参照し、シンボルテーブル１０７から得られた復号値を復号値メモリ１０８に保存することができる。【００５９】
命令デコーダ１０５は、プログラムメモリ１０９から読み出されたプログラムの命令をデコードする。具体的には、命令デコーダ１０５は、プログラムメモリ１０９から読み出された可変長符号を復号する命令に応答して、ビットマッチング部１０２、符号語長計算部１０３およびインデックス計算部１０４を動作させ、符号語長計算部１０３の計算結果である符号語の語長codeword_lengthとインデックス計算部１０４の計算結果である復号値インデックスsymbol_indexとをレジスタファイル１０１に格納する。【００６０】
本実施形態による可変長符号の復号装置では、ビットマッチング部１０２、符号語長計算部１０３、インデックス計算部１０４、命令デコーダ１０５、および、入出力部１０６がそれぞれ機能回路として構成されていても良いし、プロセッサ上で復号プログラムを実行することにより同じ機能のプロセスを実現しても良い。したがって、図２のブロック図は機能的な表現として理解されるべきである。【００６１】
５．動作
本発明によればプリフィックスを使って未知の符号語を復号する。符号語の復号は、命令デコーダ１０５がビットマッチング命令をデコードし、ビットマッチング部１０２、符号語長計算部１０３およびインデックス計算部１０４の動作を制御することで実行される。具体的には、命令デコーダ１０５がビットマッチング命令をデコードすると、ビットマッチング命令によって指定されたオペランドを使ってビットマッチング部１０２、符号語長計算部１０３およびインデックス計算部１０４を動作させる。【００６２】
このような符号語の復号を行うには、まずプリフィックス関連情報および入力ビット列をレジスタファイル１０１に格納する必要がある。以下、プリフィックス関連情報の格納およびそれを用いた復号動作を詳細に説明する。【００６３】
５．１）プリフィックス関連情報の格納
まずレジスタファイル１０１に格納されるべき情報の一例は次の通りである。【００６４】
(1)  複数のプリフィックスに共通のビット列(共通部)prefix_common（符号無し２４ビット整数）
(2)  共通部の語長clen（符号無し８ビット整数）
(3)  共通部以外の各プリフィックスのビット列(個別部)prefix_part[i], i=0,1,…7（符号無し８ビット整数）
(4)  各個別部の語長plen[i], i=0,1,…7（符号無し４ビット整数）
(5)  符号語からプリフィックスを取り除いた残りのビット列(サフィックス)の語長 slen[i], i=0,1,…7（符号無し４ビット整数）
(6)  未知の符号語を含む入力ビット列input_bits（符号無し３２ビット整数）【００６５】
図３は、図２の復号装置に用いられるレジスタファイル１０１にプリフィックスに関する情報と入力ビット列とを格納したようすを示す模式図である。ここでは、レジスタファイル１０１にある５本の６４ビットレジスタＸｓ、Ｘｐ、Ｘｃ，ＸｄおよびＸｉに、プリフィックス関連情報および入力ビット列を格納し、また１本の６４ビットレジスタＸｎ（図示せず）を取り出された復号値を格納するために使用する。【００６６】
具体的には、図３に示すように、レジスタＸｃには、プリフィックス共通部prefix_common とプリフィックス共通部の語長clenとが格納され、レジスタＸｐにはプリフィックス個別部prefix_part[i] (i=0,1,…7)が格納され、レジスタＸｓには、プリフィックス個別部の語長plen[i]およびサフィックスの語長slen[i] (i=0,1,…7)が格納され、レジスタＸｉには入力ビット列input_bitsが格納される。一つの６４ビットレジスタに格納できるプリフィックス個別部prefix_part[i]は８種類である。なお、０ｂは二進数であることを表し、ｘは使用されないビットを表す。ｘの実際の値は０である。【００６７】
表３によれば５種類のプリフィックス関連情報があるが、プリフィックス個別部prefix_part[i]、プリフィックス個別部の語長plen[i]およびサフィックスの語長slen[i]のそれぞれの値は表４に示すように定める。表３にはプリフィックスが５種類しかないので、存在しない３個の個別プリフィックスprefix_part[5]、prefix_part[6]およびprefix_part[7] については、それらが確かに存在しないことを示すために、対応するプリフィックス個別部の語長plenとサフィックスの語長slenとを０に設定する。【００６８】
【表４】
2007108395.tif 000006
【００６９】
５．２）ビットマッチング命令
まず、命令デコーダ１０５は、ビットマッチング命令をデコードし、そのビットマッチング命令によって指定されたオペランドを使ってビットマッチング部１０２、符号語長計算部１０３およびインデックス計算部１０４を動作させる。ビットマッチング命令の動作を以下に示す。【００７０】
ａ１）ビットマッチング部１０２、符号語長計算部１０３およびインデックス計算部１０４は、レジスタファイル１０１から６４ビットレジスタＸｓ、Ｘｐ、Ｘｃ，ＸｄおよびＸｉの内容を受けとる。レジスタＸｓ、Ｘｐ、Ｘｃにはプリフィックスとサフィックスに関する情報が図３に示すように格納されている。レジスタＸｉには未知の符号語を含む入力ビット列が格納されている。レジスタＸｄの上位側には未知符号語に対応するインデックスの初期値が格納されている。【００７１】
ａ２）ビットマッチング部１０２は、プリフィックス共通部prefix_common、プリフィックス共通部の語長clen、プリフィックス個別部prefix_part[i]、および、プリフィックス個別部の語長plen[i](i=0,1,…7)を使って８個のプリフィックスを生成する（詳しくは後述する。図３参照）。【００７２】
ａ３）さらに、ビットマッチング部１０２は、８個のプリフィックスを入力ビット列とマッチングし、入力ビット列に適合するプリフィックスの番号matched_indexを符号語長計算部１０３およびインデックス計算部１０４へ出力する。【００７３】
ａ４）符号語長計算部１０３は、マッチングしたプリフィックスの番号matched_indexと、プリフィックス共通部prefix_commonの語長clen、プリフィックス個別部の語長plen[i]、および、サフィックスの語長slen[i]を使って未知符号語の語長codeword_lengthを計算し、計算された未知符号語の語長codeword_lengthを６４ビットレジスタＸｄの下位へ代入する。【００７４】
ａ５）インデックス計算部１０４は、マッチングしたプリフィックスの番号matched_index、サフィックスの語長slen[i]、および、未知符号語の語長codeword_lengthを使ってシンボルテーブル１０７における復号値のインデックスsymbol_indexを計算し、計算したインデックスsymbol_indexを６４ビットレジスタＸｄの上位へ代入する。【００７５】
このビットマッチング命令を使うことにより、シンボルテーブル１０７における未知符号語に対する復号値の位置(インデックス) symbol_indexと、未知符号語の語長codeword_lengthとがわかる。したがって、ビットマッチング命令の実行後に、インデックスsymbol_indexを使ってシンボルテーブル１０７から復号値を得ることができる。続いて、レジスタＸｉに格納された入力ビット列input_bitsから今回復号された符号語分だけを取り除き、新たなビット列をレジスタＸｉに補充する。【００７６】
このような処理を繰り返すことで、レジスタＸｉに格納された入力ビット列input_bitsから未知符号語を順次切り出しながら、シンボルテーブル１０７を参照し、得られた復号値を復号値メモリ１０８に順次格納することができる。【００７７】
以下、ビットマッチング部１０２によるプリフィックスの生成およびマッチング処理、符号語長計算部１０３による未知符号語の語長計算、インデックス計算部１０４によるシンボルインデックス計算についてそれぞれ詳述する。【００７８】
５．３）プリフィックスの生成
図４は、ビットマッチング部１０２により生成された８個のプリフィックスを示す模式図である。以下、ビットマッチング部１０２がプリフィックス共通部とプリフィックス個別部とからプリフィックスを生成する手順を例示する。【００７９】
ｂ１）まず、ビットマッチング部１０２はレジスタＸｃからプリフィックス共通部prefix_common(24ビット)とプリフィックス共通部の語長clen(8ビット)とを取り出す。【００８０】
ｂ２）ビットマッチング部１０２はプリフィックス共通部prefix_commonの左側からclenビットのビット列を取り出し、それを改めてプリフィックス共通部prefix_commonとする。【００８１】
ｂ３）ビットマッチング部１０２はレジスタＸｐから各８ビットのプリフィックス個別部prefix_part[i], i=0,1,…7を取り出す。【００８２】
ｂ４）ビットマッチング部１０２は、i=0,1,…7について、プリフィックス個別部prefix_part[i]の左側からplen[i]ビットのビット列を取り出し、それを改めてプリフィックス個別部prefix_part[i]とする。【００８３】
ｂ５）ビットマッチング部１０２は、i=0,1,…7について、plen[i]ビットの長さに切り出したプリフィックス個別部prefix_part[i]の左側にclenビットの長さに切り出したプリフィックス共通部prefix_commonを連結する。【００８４】
以上ｂ１）〜ｂ５）の手順によって、ビットマッチング部１０２は図４に示す８個のプリフィックス(prefix_common + prefix_part[i])を生成する。【００８５】
５．４）マッチング
ビットマッチング部１０２は、生成された８個のプリフィックスと入力ビット列input_bitsの先頭部分とのマッチングを行い、どのプリフィックスが入力ビット列に一致するかを調べる。マッチングの手順を以下に示す。【００８６】
ｃ１）ビットマッチング部１０２は、各プリフィックス(i=0,1,…7)について、入力ビット列の左側から(clen+plen[i])ビットを取り出す。【００８７】
ｃ２）ビットマッチング部１０２は、取り出した(clen+plen[i])ビット列とｉ番目のプリフィックスとの排他的論理話(XOR)を求め、ＸＯＲの結果からマッチングの適否を判定する。ここでは、ＸＯＲの結果が“０”ならば当該ｉ番目のプリフィックスが入力ビットに適合すると判断する。【００８８】
ｃ３）適合するプリフィックスが存在すれば、ビットマッチング部１０２は入力ビット列に適合したプリフィックスの番号ｉをmatched_indexに代入する。【００８９】
ｃ４）適合するプリフィックスが存在しなければ、ビットマッチング部１０２はmatched_indexへ範囲外の数値（ここではｉ＝０〜７であるから、この範囲外の数値、たとえば“８”）を代入する。【００９０】
こうして適合したプリフィックスの番号ｉをmatched_indexとして符号語長計算部１０３およびインデックス計算部１０４へ出力する。【００９１】
５．５）符号語の語長
符号語長計算部１０３は、ビットマッチング部１０２から得られた適合プリフィックスの番号matched_indexを用いて、入力ビット列に含まれる未知符号語の語長codeword_lengthを以下のようにして計算する。【００９２】
ｄ１）符号語長計算部１０３は、レジスタＸｓから、matched_indexに対応するプリフィックス個別部の語長plen[matched_index]およびサフィックスの語長slen[matched_index]を取り出す。【００９３】
ｄ２）符号語長計算部１０３は、レジスタＸｃからプリフィックス共通部の語長clenを取り出す。【００９４】
ｄ３）matched_indexが８未満ならば（すなわち、適合するプリフィックスが存在した場合）、符号語長計算部１０３は、プリフィックス共通部の語長clen、プリフィックス個別部の語長plen[matched_index]およびサフィックスの語長slen[matched_index]の和を計算し、未知符号語の語長codeword_lengthを求める。ただし、matched_indexが８以上ならば、適合するプリフィックスが存在しなかったのであるから、符号語長計算部１０３はcodeword_lengthへ０を代入する。【００９５】
こうして得られた未知符号語の語長codeword_lengthは、レジスタファイル１０１に格納され、またインデックス計算部１０４へ出力される。【００９６】
５．６）復号値インデックス計算
上述したように、シンボルテーブル１０７には、たとえば表１のような符号語に対する復号値が格納されている。シンボルテーブル１０７において、復号値が格納されている位置がインデックスsymbol_indexによって特定される。インデックス計算部１０４はこの復号値インデックスsymbol_indexを以下のようにして求める。【００９７】
図５は復号値インデックスsymbol_indexを求める手順を示す説明図である。ここで、matched_indexは入力ビット列に適合したプリフィックスの番号、codeword_lengthは入力ビット列に含まれる未知符号語の語長である。【００９８】
ｅ１）インデックス計算部１０４はレジスタＸｄからインデックスの初期値 symbol_index を取り出す。【００９９】
ｅ２）インデックス計算部１０４はレジスタＸｓからサフィックスslen[i], i=0,1,…7を取り出す。【０１００】
ｅ３）インデックス計算部１０４は、i=0,1,…,(matched_index-1)について、“１”を slen[i]ビット左シフトした値(1<<slen[i])をsymbol_indexへ加算する。つまり、(1<<slen[0])、(1<<slen[1])、・・・(1<<slen[matched_index-1])をsymbol_indexへ順次加算する。【０１０１】
ｅ４）matched_indexが８未満ならば（すなわち、適合するプリフィックスが存在した場合）、インデックス計算部１０４は入力ビット列からサフィックスに該当するビット列を取り出し、そのビット列をsymbol_indexへ加算する。入力ビット列の左側のcodeword_lengthビットが未知符号語であり、未知符号語の中の右側のslen[matched_index]ビットがサフィックスである。【０１０２】
５．７）可変長符号の復号
上記５．２）で説明したビットマッチング命令を用いた可変長符号の復号手順について図面を参照しながら説明する。【０１０３】
図６は、本発明の一実施例による復号方法を示すフローチャートである。このフローに従って作成されたプログラムは、図１に示すプロセッサ１００上で実行される。ここでは、図３に示すレジスタファイル１０１を用いた復号手順を説明する。【０１０４】
ステップＳ２０１：まず、次のレジスタに対して復号処理に必要なデータを設定する。
レジスタＸｃの下位側（Ｘｃの31-8ビット目）にプリフィックス共通部prefix_commonを代入する。レジスタＸｃの下位８ビット（Ｘｃの7-0ビット目）にプリフィックス共通部の語長clenを代入する。レジスタＸｐ（Ｘｐの63-0ビット目）へ８個のプリフィックス個別部prefix_part[i] (i=0,1,…7)を代入する。レジスタＸｓの上位側（Ｘｓの63-32ビット目）にプリフィックス個別部の語長plen[i] (i=0,1,…7)を代入する。レジスタＸｓの下位側（Ｘｓの31-0ビット目）にサフィックスの語長slen[i] (i=0,1,…7)を代入する。
レジスタＸｉの上位側（Ｘｉの63-32ビット目）に入力ビット列input_bitsを代入する。【０１０５】
ステップＳ２０２：続いて、復号値のインデックスsymbol_indexの初期値として０を、未知符号語の語長codeword_lengthの初期値として０を、それぞれ代入する。なお、図３に示すように、レジスタＸｄの上位（Ｘｄの63-32ビット目）にインデックスsymbol_indexを、レジスタＸｄの下位（Ｘｄの7-0ビット目）に未知符号語の語長長codeword_lengthを、それぞれ配置する。言い換えればレジスタＸｄを０に初期化する。【０１０６】
ステップＳ２０３：ビットマッチング命令を用いて８個のプリフィックスと入力ビット列とのマッチングを行なう。ビットマッチング命令は、上述したように、レジスタＸｃ、ＸｐおよびＸｓから８個のプリフィックスを生成し、レジスタＸｉの入力ビット列に適合するプリフィックスをサーチする。さらに、入力ビット列の未知符号語の語長codeword_lengthを計算し、シンボルテーブル１０７における復号値の位置を表すインデックスsymbol_indexを計算する。インデックスsymbol_indexはレジスタＸｄの上位側（Ｘｄの63-32ビット目）へ代入される。未知符号語に適合するプリフィックスが存在するならば、未知符号語の語長codeword_lengthはレジスタＸｄの下位（Ｘｄの7-0ビット目）へ代入される。【０１０７】
ステップＳ２０４：続いて、ビットマッチング命令が計算したインデックスsymbol_indexを用いてシンボルテーブル１０７が参照され、復号値が取り出される。取り出された復号値はレジスタＸｎ（図示せず）の下位側（Ｘｎの31-0ビット目）へ格納される。【０１０８】
ステップＳ２０５：レジスタＸｎに格納された復号値は、入出力部１０６を通して復号値メモリ１０８へ転送され保存される。【０１０９】
ステップＳ２０６：未知符号語の語長codeword_lengthが０より大きいならば、レジスタＸｉの入力ビット列から復号された符号語を除去し、新たな入力ビット列を補充する。【０１１０】
ステップＳ２０７：復号値が復号処理の終了を意味するならば（ステップＳ２０７のＹＥＳ）、復号処理を終了する。また、未知符号語の語長codeword_lengthが０以下である場合は符号語が復号されなかったことを表すので復号処理を終了する。復号すべきビット列が存在する場合は（ステップＳ２０７のＮＯ）、ステップＳ２０２へ戻り、終了するまでステップＳ２０２〜Ｓ２０７が繰り返され、入力ビット列が順次復号される。【０１１１】
６．応用例／変形例
図１に示すプロセッサ１００の構成要素は既に説明した内容から逸脱しない範囲で種々の応用が可能である。以下では具体的な適用例あるいは変形例について述べる。【０１１２】
６．１）上述した実施例では８個のプリフィックスを例示したが、一般に、符号語に対応するプリフィックスの種類は８個より多い。８個以上のプリフィックスをもつ符号語を復号する場合には、プリフィックスを８個ずつ分けて未知符号語とマッチングする方法をとればよい。例えば、図６のステップＳ２０３において、プリフィックスの種類が２３個であれば、８個、８個、７個にわけてマッチングを行なう。つまり、上述したビットマッチング命令を３回実行することによって２３個のプリフィックスを未知符号語とマッチングすることができる。このように制御することで、プリフィックスの種類が任意の個数であっても同様に処理することができる。【０１１３】
６．２）逆に、種類が比較的少ない符号語を復号する場合には、プリフィックスを使わずに符号語そのものを使って未知符号語とのマッチングを行なうこともできる。符号語そのものを使ってマッチングを行なう場合、サフィックスの語長を０とみなしてビットマッチング命令を使う。ただし、一般にはプリフィックスを使う方がマッチングの回数が少なくなる。【０１１４】
６．３）符号語のプリフィックスの最大語長が８ビット以下であることも考えられる。
そのようなプリフィックスを使って符号語を復号する場合には、プリフィックス共通部の語長を０とみなしてビットマッチング命令を使う。プリフィックス共通部の語長を０とみなすので、プリフィックス共通部をレジスタファイル１０１へ格納するための処理を省略できる。【０１１５】
６．４）上記実施例では、ビットマッチング命令は８個のプリフィックスを未知符号語とマッチングするが、一度にマッチングするプリフィックスの数を増やせば、ビットマッチング命令を実行する回数を減らすことができる。他方、一度にマッチングするプリフィックスの数を減らせば、回路規模を縮小でき高速動作や低消費電力などにつながる。したがって、使用者の要求に応じて、一度にマッチングするプリフィックスの数を変更してもよい。【０１１６】
６．５）上記実施例では、プロセッサ１００のレジスタファイル１０１は１６本の６４ビットレジスタをもつが、既に述べたように、この構成は一つの例であり、ビットマッチング命令が動作する範囲で変更可能である。例えば、８ビットレジスタ１２８本、１６ビットレジスタ６４本、３２ビットレジスタ３２本、などの構成が考えられる。【０１１７】
６．６）上記実施例では、図３に示すように、符号語を復号するために必要な情報(プリフィックスに関する情報、サフィックスの語長、入力ビット列など)をレジスタファイル１０１へ格納しているが、この格納方法も一つの例であり、ビットマッチング命令が動作する範囲で変更可能である。例えば、これらの情報をレジスタファイル１０１の中のどのレジスタに格納するか、そのレジスタのどの位置に格納するか、各情報のサイズを何ビットにするか、などについては変更可能である。
【産業上の利用可能性】
【０１１８】
本発明は可変長符号化を使って符号化された情報一般を復号する装置に適用できる。例えば、可変長符号を使って符号化された画像や音楽などの情報を復号する復号器に適用可能である。【０１１９】
本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。
【図１】
2007108395.tif 000007
【図２】
2007108395.tif 000008
【図３】
2007108395.tif 000009
【図４】
2007108395.tif 000010
【図５】
2007108395.tif 000011
【図６】
2007108395.tif 000012
【国際調査報告】
2007108395.tif 000013
2007108395.tif 000014