説明

復号装置、復号方法および復号プログラム

【課題】復号の高速化を図ること。
【解決手段】復号装置は、マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から算術符号化の前のデータ列110を復号する。復号装置は、データ列110の各位置x1〜x10における所定シンボルの発生確率p1〜p10を取得する。復号装置は、発生確率p1〜p10の中の、復号対象位置101が属するグループ111における最小の発生確率に相当する割合による数値範囲の減少幅を導出する。復号装置は、数値範囲の限界値と符号値との差分を、導出した減少幅によって除算する。復号装置は、除算により得た商が所定値以上である場合に、商だけ連続する所定シンボルとなる復号結果を出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、復号装置、復号方法および復号プログラムに関する。
【背景技術】
【0002】
算術符号化は、データ列全体をひとつの符号値に置き換えることにより、ハフマン符号化より圧縮率を高める符号化技術である。しかし、算術符号化は、符号化および復号に要する処理量がハフマン符号化より多い。
【0003】
たとえば動画像圧縮の分野において、算術符号化は、H.264やVP8などの規格にも採用されており、動画像の時間的または空間的相関性を利用した圧縮を施した後のエントロピー符号化として利用されている。また、H.264やVP8ではマルチコンテキスト方式が採用されており、符号化するデータ列の内容に応じてシンボルの発生確率を切り替えることでより圧縮効率を向上させている。
【0004】
算術符号化されたデータは1ビットずつ復号していくことになるため、処理を並列化して複数のビットを同時に復号することは困難である。このため、復号性能を向上させるには、動作周波数を向上させることが考えられるが、マルチコンテキスト方式ではコンテキストの切り替え処理も必要なため、動作周波数の高速化にも限度がある。
【0005】
このため、従来はある特定の条件を満たすケースにおいて複数シンボルの同時復号を行うことにより復号処理の高速化を図る一括復号の手法が用いられている(たとえば、下記特許文献1,2参照。)。たとえば、同一コンテキストのMPS(More probable Symbol:優勢シンボル)が、予め定められた2、4、8または16連続する場合で、かつ復号途中の正規化処理が不要な場合において、1サイクルで一括して複数のビットを復号する手法が知られている。また、コンテキストが切り替わる際において、予めMPSが連続する場合のコンテキスト情報を内部に持っておくことにより、1サイクルで複数のビットを一括して復号する手法等が知られている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2000−350043号公報
【特許文献2】特開2005−217871号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上述した従来技術では、一括復号するビット数を予め決定しておくことになるため、予め決定された数だけ同一シンボルが連続しない場合は一括復号が実行されない。このため、シンタクスによっては一括復号の発生確率が低くなり、復号の高速化を図ることができないという問題がある。
【0008】
本発明は、上述した従来技術による問題点を解消するため、復号の高速化を図ることができる復号装置、復号方法および復号プログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から前記算術符号化の前のデータ列を復号する復号方法において、前記数値範囲を記憶し、前記データ列の各位置における所定シンボルの発生確率を取得し、取得した発生確率の中の、前記データ列を区切った複数のグループのうちの復号対象の位置が属するグループにおける最小の発生確率に基づく前記数値範囲の減少幅を導出し、前記数値範囲の限界値と前記符号値との差分を、前記導出した減少幅によって除算し、除算により得た商が所定値以上である場合に、前記商だけ連続する前記所定シンボルとなる、前記復号対象の位置以降の復号結果を出力する復号装置、復号方法および復号プログラムが提案される。
【発明の効果】
【0010】
本発明の一側面によれば、復号の高速化を図ることができるという効果を奏する。
【図面の簡単な説明】
【0011】
【図1−1】図1−1は、実施の形態1にかかる復号装置による復号処理の一例を示す図(その1)である。
【図1−2】図1−2は、実施の形態1にかかる復号装置による復号処理の一例を示す図(その2)である。
【図1−3】図1−3は、実施の形態1にかかる復号装置による復号処理の一例を示す図(その3)である。
【図2】図2は、復号装置のハードウェア構成の一例を示す図である。
【図3−1】図3−1は、シンタクスとグループIDとの対応情報の一例を示す図である。
【図3−2】図3−2は、グループIDと発生確率の対応情報の一例を示す図である。
【図4】図4は、復号装置による復号処理の一例を示すフローチャートである。
【図5】図5は、1ビット復号処理の一例を示すフローチャートである。
【図6】図6は、1ビット復号処理の一例を示す図である。
【図7】図7は、Nビット復号処理の一例を示すフローチャートである。
【図8】図8は、一括復号ビット数Nの算出処理の一例を示すフローチャートである。
【図9】図9は、Nビット復号処理の一例を示す図である。
【図10】図10は、復号装置の構成の一例を示す図である。
【図11】図11は、1ビット復号処理部の構成の一例を示す図である。
【図12】図12は、Nビット復号装置の構成の一例を示す図である。
【図13】図13は、一括復号ビット数算出部の構成の一例を示す図である。
【図14】図14は、グループIDと減少値の対応情報の一例を示す図である。
【図15】図15は、一括復号ビット数Nの算出処理の一例を示すフローチャートである。
【図16】図16は、実施の形態2にかかる一括復号ビット数算出部の構成の一例を示す図である。
【図17】図17は、符号化処理の一例を示すフローチャートである。
【図18】図18は、符号化処理における再正規化処理の一例を示すフローチャートである。
【図19】図19は、再正規化処理におけるライト処理の一例を示すフローチャートである。
【図20】図20は、シンタクスのグループ分けの一例を示す図である。
【図21−1】図21−1は、具体例にかかるシンタクスとグループIDの対応情報を示す図である。
【図21−2】図21−2は、具体例にかかるグループIDと減少値の対応情報を示す図である。
【発明を実施するための形態】
【0012】
以下に添付図面を参照して、本発明にかかる復号装置、復号方法および復号プログラムの実施の形態を詳細に説明する。
【0013】
(実施の形態1)
(実施の形態1にかかる復号装置による復号処理)
図1−1〜図1−3は、実施の形態1にかかる復号装置による復号処理の一例を示す図である。実施の形態1にかかる復号装置100(たとえば図2−1参照)は、マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から、算術符号化の前のデータを復号する。算術符号化は、たとえばレンジコーダである。
【0014】
ここではVP8による復号処理について説明するが、エンコードおよびデコードの方式はVP8に限らない。VP8で使用されている算術符号化はマルチコンテキスト型であるため、シンタクスやシンタクス内のビット位置によって二値(0/1)の発生確率が変化する。また算術符号化に用いる数直線(範囲Range)は0から255の整数値として扱われる。そして、範囲Rangeの値が128未満になった場合には、範囲Rangeと現在の符号値(符号値Value)の値を倍にすること(再正規化)により、精度を保ったまま符号化および復号が行われる。
【0015】
図1−1に示すデータ列110は、復号装置100によって復号されるデータである。位置x1〜x10は、データ列110における各位置(たとえばビット位置)を示している。復号装置100は、復号処理を行うことによって位置x1〜x10における各値を得る。
【0016】
発生確率p1〜p10は、それぞれ位置x1〜x10における所定シンボルの発生確率(以下、単に「発生確率」とも称する。)を示している。所定シンボルは、たとえばデータ列110における優勢シンボルである。また、以下の説明において、データ列110における優勢シンボルは“0”とする。復号対象位置101は、復号装置100による現在の復号対象の位置を示している。初期状態における復号対象位置101は位置x1である。
【0017】
図1−2に示す数値範囲121は、データ列110が算術符号化により割り当てられた所定の数値範囲(たとえば0〜255)を示している。限界値121aは、数値範囲121の限界値(たとえば上限値)を示している。符号値102は、数値範囲121に割り当てられた復号対象の符号値を示している。
【0018】
復号装置100は、データ列110の位置x1〜x10を複数のグループに分けておく。各グループには連続する複数の位置が含まれる。図1−1に示す例では、位置x1〜x10がグループ111〜113に分けられている。位置x1〜x3はグループ111に含まれている。位置x4〜x7はグループ112に含まれている。位置x8〜x10はグループ113に含まれている。
【0019】
たとえば、復号装置100は、位置x1〜x10を所定数ずつ区切ってグループ分けしてもよいし、位置x1〜x10を発生確率p1〜p10に基づいて区切ってグループ分けしてもよい(たとえば図20参照)。
【0020】
復号装置100は、数値範囲121を取得して記憶する。また、復号装置100は、発生確率p1〜p10を取得する。そして、復号装置100は、グループ111〜113のうちの現在の復号対象位置101が属するグループの各発生確率の中から最小の発生確率を特定する。図1−1に示す例では、復号対象位置101の位置x1はグループ111に属しているため、グループ111に属する位置x1〜x3における発生確率p1〜p3のうちの最小の発生確率が特定される。
【0021】
また、復号装置100は、特定した発生確率に相当する割合で数値範囲121を縮小した場合における数値範囲121の減少幅を算出する。数値範囲122は、特定した発生確率に相当する割合で数値範囲121を縮小した数値範囲である。減少幅122aは、数値範囲121に対する数値範囲122の減少幅である。たとえば、減少幅122aは、数値範囲121の幅から数値範囲122の幅を減算することによって算出することができる。
【0022】
そして、復号装置100は、数値範囲121の限界値121aと符号値102との差分122bを減少幅122aによって除算した商を算出する。これにより、復号対象位置101以降の復号結果において所定シンボルが連続する最小の回数を算出することができる。図1−2に示す例では、商として2が算出される。
【0023】
つぎに、復号装置100は、算出した商が所定値以上である場合に、算出した商だけ連続する所定シンボルとなる復号結果を出力する。所定値は、連続復号を行うか否かを判定するための所定シンボルの連続数の閾値であり、たとえば1である。図1−2に示した例では商は2であるため、図1−3に示すように、2回連続する所定シンボル“0”、すなわち“00”が位置x1,x2の復号結果として出力される。これにより、一括復号による復号結果を得ることができる。
【0024】
また、復号装置100は、一括復号により復号結果を出力した場合に、現在の復号対象位置101から商の数だけ先の位置を次の復号対象位置101とする。図1−1の例では復号対象位置101が位置x1であり、商が2であるため、図1−3に示すように、新たな復号対象位置101は位置x1の2つ先の位置x3となる。復号装置100は、新たな復号対象位置101について再度復号処理を行う。
【0025】
また、復号装置100は、算出した商が所定値以上である場合に、減少幅122aに商を乗じた幅だけ数値範囲121を縮小する。図1−2に示す例では、商が2であるため、減少幅122aの2倍の幅だけ数値範囲121が縮小される。このため、数値範囲121は縮小されて数値範囲123のようになる。
【0026】
また、復号装置100は、縮小した数値範囲123の限界値が閾値(たとえば128)を下回った場合は、数値範囲123および符号値102を同一比率で増大させる再正規化を行ってもよい。たとえば、復号装置100は、数値範囲123の幅が閾値を下回った場合は、数値範囲123の幅が閾値以上になるまで、数値範囲123および符号値102を倍増する処理を繰り返す。これにより、精度を保ったまま復号処理を行うことができる。
【0027】
再正規化を行う場合は、復号装置100は、数値範囲121の限界値121aと符号値102との差分122bと、数値範囲121の限界値121aと閾値との差分と、のうちの小さい方の差分を減少幅122aによって除算した商を算出する。これにより、復号対象位置101以降の復号結果において所定シンボルが連続し、かつ再正規化が発生しない最小の回数を算出することができる。
【0028】
また、復号装置100は、算出した商が所定値未満(たとえば0)であった場合に、数値範囲121と、復号対象位置101に対応する発生確率p1と、符号値102と、に基づいて復号対象位置101(位置x1)を復号した復号結果を出力する。この場合は、復号装置100は、復号結果と、発生確率p1と、に応じて復号対象位置101を縮小する。また、この場合は、復号装置100は、位置x1〜x10のうちの現在の復号対象位置101から1つ先の位置を次の復号対象位置101とする。
【0029】
このように、復号装置100によれば、復号データの各位置をグループ分けし、復号対象の位置が属するグループの所定シンボルの最小の発生確率に基づいて所定シンボルの最小の連続数を算出することができる。これにより、一括復号数を予め定めておかなくても、所定シンボルの発生確率に基づいて一括復号数を適応的に変化させて一括復号を行うことができる。このため、一括復号の実施確率を高めて復号の高速化を図ることができる。
【0030】
(復号装置のハードウェア構成)
図2は、復号装置のハードウェア構成の一例を示す図である。図1に示した復号装置100は、たとえば図2に示す情報処理装置200によって実現することができる。情報処理装置200は、CPU210と、メインメモリ220と、補助メモリ230と、ユーザインタフェース240と、通信インタフェース250と、バス201と、を備えている。CPU210、メインメモリ220、補助メモリ230、ユーザインタフェース240および通信インタフェース250は、バス201によって接続されている。
【0031】
CPU210(Central Processing Unit)は、情報処理装置200の全体の制御を司る。また、情報処理装置200はCPU210を複数備えていてもよい。メインメモリ220は、たとえばRAM(Random Access Memory)である。メインメモリ220は、CPU210のワークエリアとして使用される。補助メモリ230は、たとえば、ハードディスク、光ディスク、フラッシュメモリなどの不揮発メモリである。補助メモリ230には、情報処理装置200を動作させる各種のプログラムが記憶されている。補助メモリ230に記憶されたプログラムは、メインメモリ220にロードされてCPU210によって実行される。
【0032】
ユーザインタフェース240は、たとえば、ユーザからの操作入力を受け付ける入力デバイスや、ユーザへ情報を出力する出力デバイスなどを含む。入力デバイスは、たとえばキー(たとえばキーボード)やリモコンなどによって実現することができる。出力デバイスは、たとえばディスプレイやスピーカなどによって実現することができる。また、タッチパネルなどによって入力デバイスおよび出力デバイスを実現してもよい。ユーザインタフェース240は、CPU210によって制御される。
【0033】
通信インタフェース250は、たとえば、無線によって情報処理装置200の外部との間で通信を行う通信インタフェースである。たとえば、復号装置100は、算術符号化されたストリームデータを通信インタフェース250によって受信し、受信したストリームデータを復号する。通信インタフェース250は、CPU210によって制御される。
【0034】
(シンタクスとグループIDとの対応情報)
図3−1は、シンタクスとグループIDとの対応情報の一例を示す図である。図3−1に示す対応情報310は、シンタクスとグループIDとを対応付ける対応情報である。対応情報310は、たとえば復号装置100のメインメモリ220や補助メモリ230に記憶されている。対応情報310に示すように、シンタクス「Syntax_A」〜「Syntax_X」のそれぞれは、グループIDが「0」〜「Y」の各グループに分類されている。
【0035】
たとえば、シンタクス「Syntax_A」はグループID「0」のグループに属している。シンタクス「Syntax_B」〜「Syntax_D」はグループID「1」のグループに属している。図3−1に示す例では、シンタクス単位でグループ分けを行う例について説明したが、グループ分けはシンタクス単位に限らず、シンタクスのビット位置単位など、コンテキスト(優勢シンボルの発生確率)単位で行ってもよい。
【0036】
(グループIDと発生確率の対応情報)
図3−2は、グループIDと発生確率の対応情報の一例を示す図である。図3−2に示す対応情報320は、グループIDと優勢シンボルの最小の発生確率とを対応付ける対応情報である。対応情報320は、たとえば復号装置100のメインメモリ220や補助メモリ230に記憶されている。
【0037】
対応情報320に示す最小の発生確率probG(0)〜probG(Y)は、それぞれグループID「0」〜「Y」が示すグループに属する各シンタクスの優勢シンボルの発生確率のうちの最小の発生確率を示している。たとえば、最小の発生確率probG(1)は、グループID「1」が示すグループに属するシンタクス「Syntax_B」〜「Syntax_D」の優勢シンボルの発生確率のうちの最小の発生確率を示している。
【0038】
(復号装置による復号処理)
図4は、復号装置による復号処理の一例を示すフローチャートである。復号装置100は、復号処理としてたとえば以下の各ステップを実行する。まず、復号装置100は、復号対象のシンタクスを初期化する(ステップS401)。ステップS401において、復号装置100は、たとえば、最初の復号位置におけるシンタクスを、符号化側から予め通知されたシンタクスに設定する。
【0039】
つぎに、復号装置100は、入力されたデータストリームの先頭の8ビット(read_bit(8))を取り出して符号値Valueの初期値として設定する(ステップS402)。また、復号装置100は、数直線を示す範囲Rangeの初期値として255を設定する(ステップS403)。
【0040】
つぎに、復号装置100は、復号対象のシンタクスの各ビットにおける“0”(優勢シンボル)の発生確率probを取得する(ステップS404)。つぎに、復号装置100は、一括復号ビット数Nを算出する(ステップS405)。一括復号ビット数Nは、以降の復号結果において優勢シンボルである“0”が連続する回数である。ステップS405における一括復号ビット数Nの算出処理については後述する(たとえば図8参照)。
【0041】
つぎに、復号装置100は、ステップS405によって算出した一括復号ビット数Nが0であるか否かを判断する(ステップS406)。一括復号ビット数Nが0でない場合(ステップS406:No)は、復号装置100は、Nビット復号処理を行い(ステップS407)、ステップS409へ移行する。Nビット復号処理は、Nビットの“0”を一括して復号する処理である。ステップS407におけるNビット復号処理については後述(たとえば図7参照)する。
【0042】
ステップS406において、一括復号ビット数Nが0である場合(ステップS406:Yes)は、復号装置100は、1ビット復号処理を行い(ステップS408)、ステップS409へ移行する。1ビット復号処理は、次の復号結果が“0”および“1”のいずれであるかを判定して復号する処理である。ステップS408における1ビット復号処理については後述(たとえば図5参照)する。
【0043】
つぎに、復号装置100は、ステップS407のNビット復号処理またはステップS408の1ビット復号処理による復号結果を逆二値化する(ステップS409)。つぎに、復号装置100は、ステップS409の逆二値化の結果に基づいて復号対象のシンタクスを更新する(ステップS410)。つぎに、復号装置100は、復号対象の全てのシンタクスを復号したか否かを判断する(ステップS411)。
【0044】
ステップS411において、全てのシンタクスを復号していない場合(ステップS411:No)は、復号装置100は、ステップS404へ戻る。全てのシンタクスを復号した場合(ステップS411:Yes)は、復号装置100は、ステップS409の逆二値化により得られた復号結果のデータを出力し(ステップS412)、一連の処理を終了する。以上の各ステップにより、入力されたデータストリームの復号結果のデータを得ることができる。
【0045】
(1ビット復号処理)
図5は、1ビット復号処理の一例を示すフローチャートである。復号装置100は、図4に示したステップS408における1ビット復号処理として、たとえば以下の各ステップを実行する。
【0046】
まず、復号装置100は、現在の範囲Rangeと、復号対象の1ビットにおける優勢シンボルの発生確率probに基づいて境界値splitを算出する(ステップS501)。境界値splitは、範囲Rangeにおける“0”と“1”の境界値である。優勢シンボルの発生確率probは、復号対象のシンタクスおよびシンタクスのビット位置に基づいて求めることができる。ステップS501において、復号装置100は、たとえば1+(((範囲Range−1)*prob)>>8)によって境界値splitを算出することができる。
【0047】
つぎに、復号装置100は、現在の符号値Valueが、ステップS501によって算出された境界値split以上であるか否かを判断する(ステップS502)。現在の符号値Valueが境界値split以上である場合(ステップS502:Yes)は、復号装置100は、復号値として“1”を出力する(ステップS503)。
【0048】
つぎに、復号装置100は、範囲Rangeから境界値splitを減算する(ステップS504)。また、復号装置100は、符号値Valueから境界値splitを減算し(ステップS505)、ステップS508へ移行する。
【0049】
ステップS502において、現在の符号値Valueが境界値split未満である場合(ステップS502:No)は、復号装置100は、復号値として“0”を出力する(ステップS506)。つぎに、復号装置100は、範囲Rangeに境界値splitの値を設定し(ステップS507)、ステップS508へ移行する。
【0050】
つぎに、復号装置100は、範囲Rangeが128未満か否かを判断する(ステップS508)。範囲Rangeが128未満である場合(ステップS508:Yes)は、復号装置100は、再正規化を行う。すなわち、復号装置100は、範囲Rangeの値を1ビット左シフトさせることで2倍にする(ステップS509)。
【0051】
また、復号装置100は、符号値Valueの値を1ビット左シフトさせることで2倍にする(ステップS510)。つぎに、復号装置100は、ストリームデータから1ビット(read_bit(1))を取り出して符号値Valueの最下位ビットとして補充し(ステップS511)、ステップS508へ戻る。このように、復号装置100は、再正規化を実行する度にストリームデータを1ビットずつ読み出す。
【0052】
ステップS508において、範囲Rangeが128以上である場合(ステップS508:No)は、復号装置100は、一連の処理を終了する。以上の各ステップにより、復号装置100は、1ビットの復号を行うことができる。また、復号装置100は、1ビットの復号によって範囲Rangeが128未満になった場合は、範囲Rangeおよび符号値Valueを2倍にしてストリームデータを1ビット読み出すことができる。
【0053】
図6は、1ビット復号処理の一例を示す図である。図6においては、図5に示した1ビット復号処理を連続して4回行った場合の例について説明する。1〜4回目の1ビット復号処理において、シンタクスの優勢シンボル“0”の発生確率は、それぞれ204/256,230/256,179/256,204/256と遷移するものとする。まず、初期化処理として、ストリームデータ610から先頭の8ビットのデータ列611が符号値Valueに設定される。データ列611は“10101000”(168)とする。また、範囲Rangeに255が設定される。
【0054】
1回目の1ビット復号処理においては、範囲Rangeが255であり、発生確率が204/256であるため、境界値splitは203(小数点以下切り捨て。以下同様)となる。したがって、符号値Valueの168は境界値split未満であるため、復号値は“0”となる。また、以降の範囲Rangeは境界値splitの203となる。また、範囲Rangeは128以上であるため、再正規化は発生しない。
【0055】
2回目の1ビット復号処理においては、範囲Rangeが203であり、発生確率が230/256であるため、境界値splitは182となる。したがって、符号値Valueの168は境界値split未満であるため、復号値は“0”となる。また、以降の範囲Rangeは境界値splitの182となる。また、範囲Rangeは128以上であるため、再正規化は発生しない。
【0056】
3回目の1ビット復号処理においては、範囲Rangeが182であり、発生確率が179/256であるため、境界値splitは127となる。したがって、符号値Valueの168は境界値split以上であるため、復号値は“1”となる。また、範囲Rangeは境界値splitの127を減算した55となる。また、符号値Valueは境界値splitの127を減算した41となる。
【0057】
また、範囲Rangeが128未満となったため、再正規化が発生する。再正規化により、範囲Rangeは2倍の110となり、符号値Valueも2倍の82となる。そして、ストリームデータ610から新たに読み出した1ビットは“1”となるため、符号値Valueは83となる。
【0058】
1回目の再正規化後の範囲Rangeはまだ128未満であるため、2回目の再正規化が発生する。2回目の再正規化により、範囲Rangeは2倍の220となり、符号値Valueも2倍の166となる。そして、ストリームデータ610から新たに読み出した1ビットは“1”となるため、符号値Valueは167となる。2回目の再正規化後の範囲Rangeは128以上であるため、3回目の1ビット復号処理においてはこれ以上の再正規化は発生しない。
【0059】
4回目の1ビット復号処理においては、範囲Rangeが220であり、発生確率が204/256であるため、境界値splitは175となる。したがって、符号値Valueの167は境界値split未満であるため、復号値は“0”となる。また、以降の範囲Rangeは境界値splitの175となる。1〜4回目の1ビット復号処理により、復号値として“0010”を得ることができる。
【0060】
(Nビット復号処理)
図7は、Nビット復号処理の一例を示すフローチャートである。復号装置100は、図4に示したステップS407におけるNビット復号処理として、たとえば以下の各ステップを実行する。
【0061】
まず、復号装置100は、現在の範囲Rangeおよび優勢シンボルの発生確率probに基づいて境界値splitを算出する(ステップS701)。ステップS701における境界値splitの算出は、図5に示したステップS501と同様である。
【0062】
つぎに、復号装置100は、復号値として優勢シンボルである“0”を出力する(ステップS702)。つぎに、復号装置100は、範囲Rangeに境界値splitの値を設定する(ステップS703)。また、復号装置100は、一括復号ビット数Nをデクリメント(−1)する(ステップS704)。つぎに、復号装置100は、優勢シンボルの発生確率probを、次のビット位置の発生確率に更新する(ステップS705)。
【0063】
つぎに、復号装置100は、一括復号ビット数Nが0になったか否かを判断する(ステップS706)。一括復号ビット数Nが0になっていない場合(ステップS706:No)は、復号装置100は、ステップS701へ戻る。一括復号ビット数Nが0になった場合(ステップS706:Yes)は、復号装置100は一連の処理を終了する。以上の各ステップにより、Nビットの復号値“0”を得ることができる。
【0064】
(一括復号ビット数Nの算出処理)
図8は、一括復号ビット数Nの算出処理の一例を示すフローチャートである。復号装置100は、図4に示したステップS405における一括復号ビット数Nの算出処理として、たとえば以下の各ステップを実行する。図8に示す差分Diffは、再正規化が発生し、または復号値が“1”となるまでの範囲Rangeの余剰を示す値である。まず、復号装置100は、現在の符号値Valueと再正規化の閾値である128を比較し、符号値Valueが128未満であるか否かを判断する(ステップS801)。
【0065】
符号値Valueが128未満である場合は、復号処理を繰り返した場合に、復号値が“1”となる以前に再正規化が発生すると判断することができる。このため、ステップS801において符号値Valueが128未満である場合(ステップS801:Yes)は、復号装置100は、差分Diffに範囲Rangeと128の差分を設定し(ステップS802)、ステップS804へ移行する。これにより、再正規化が発生するまでの範囲Rangeの余剰を差分Diffに設定することができる。
【0066】
符号値Valueが128以上である場合は、復号処理を繰り返した場合に、再正規化が発生する以前に復号値が“1”となると判断することができる。このため、ステップS801において符号値Valueが128以上である場合(ステップS801:No)は、復号装置100は、差分Diffに範囲Rangeと符号値Valueの差分を設定し(ステップS803)、ステップS804へ移行する。これにより、復号値が“1”となるまでの範囲Rangeの余剰を差分Diffに設定することができる。
【0067】
つぎに、復号装置100は、復号対象のシンタクスに対応するグループIDを対応情報310から取得する(ステップS804)。つぎに、復号装置100は、ステップS804によって取得したグループIDに対応する最小の発生確率probG(グループID)を対応情報320から取得する(ステップS805)。
【0068】
つぎに、復号装置100は、復号処理を1回行うことによる範囲Rangeの減少量の最大値である減少値SubValを算出する(ステップS806)。具体的には、復号装置100は、現在の範囲Rangeに、ステップS805によって取得した発生確率probG(グループID)を8ビットシフトさせた値を乗算し、乗算結果を現在の範囲Rangeから減算することで減少値SubValを算出する。
【0069】
つぎに、復号装置100は、ステップS806により算出した減少値SubValを除数とし、差分Diffを被除数として除算した商を一括復号ビット数Nとして算出し(ステップS807)、一連の処理を終了する。以上の各ステップにより、復号値が“0”となりかつ再正規化が発生しない最小の復号処理の回数を一括復号ビット数Nとして算出することができる。
【0070】
(Nビット復号処理)
図9は、Nビット復号処理の一例を示す図である。図9において、範囲Range1〜RangeNは、それぞれ1〜N回目の復号処理における範囲Rangeを示している。境界値split1〜splitNは、それぞれ1〜N回目の復号処理における境界値splitを示している。発生確率prob1〜Nは、それぞれ1〜N回目の復号処理における“0”の発生確率probである。
【0071】
図9に示すように、1〜N回目の復号処理において範囲Rangeは範囲Range1〜RangeNのように減少していく。そして、N回目の復号処理の範囲RangeNまで範囲Rangeが符号値Valueより大きければ、1〜N回目の復号処理における各復号値は“0”となる。また、N回目の復号処理の範囲RangeNまで範囲Rangeが128(閾値)以上であれば、1〜N回目の復号処理において再正規化が発生しない。
【0072】
すなわち、復号値がN回連続して“0”となる条件は範囲RangeN>Valueである。また、N回の復号処理において再正規化が発生しない条件は範囲RangeN≧128である。したがって、範囲RangeN>Valueおよび範囲RangeN≧128を満たす場合はNビット復号処理が可能と判定する。一方、範囲RangeN>Valueおよび範囲RangeN≧128のいずれか一方でも満たさない場合はNビット復号処理は不可と判定することができる。
【0073】
(復号装置の構成)
図10は、復号装置の構成の一例を示す図である。図10に示すように、復号装置100は、シンタクス情報管理FF1001と、確率テーブル部1002と、Range_FF1003と、Value_FF1004と、一括復号ビット数算出部1005と、1ビット復号処理部1006と、Nビット復号処理部1007と、MUX1008と、逆二値化部1009と、次シンタクス判定部1010と、を備えている。復号装置100の復号対象のデータストリームは1ビット復号処理部1006へ入力される。
【0074】
シンタクス情報管理FF1001は、復号対象のシンタクスのステートマシンである。シンタクス情報管理FF1001は、初期状態において、復号対象のシンタクスの初期値を示すシンタクス情報を出力する。また、シンタクス情報管理FF1001は、次シンタクス判定部1010から次の復号対象のシンタクス情報が入力されると、入力されたシンタクス情報を出力する。シンタクス情報管理FF1001から出力されたシンタクス情報は、確率テーブル部1002、一括復号ビット数算出部1005および逆二値化部1009へ入力される。
【0075】
確率テーブル部1002は、シンタクスごとの“0”の発生確率probを示す確率テーブルを有する。確率テーブル部1002は、シンタクス情報管理FF1001から出力されたシンタクス情報が示すシンタクスに対応する発生確率probを確率テーブルから取得する。そして、確率テーブル部1002は、取得した発生確率probを1ビット復号処理部1006およびNビット復号処理部1007へ出力する。
【0076】
Range_FF1003は、現在の範囲Rangeのステートマシンである。Range_FF1003は、初期状態において、255を現在の範囲Rangeとして出力する。また、Range_FF1003は、MUX1008からNewRange2またはNewRange1が入力されると、入力されたNewRange1またはNewRange2を現在の範囲Rangeとして出力する。Range_FF1003から出力された範囲Rangeは、一括復号ビット数算出部1005、1ビット復号処理部1006およびNビット復号処理部1007へ入力される。
【0077】
Value_FF1004は、現在の符号値Valueのステートマシンである。Value_FF1004は、初期状態において、データストリームの先頭の8ビットを符号値Valueとして出力する。また、Value_FF1004は、1ビット復号処理部1006からNewValueが入力されると、入力されたNewValueを現在の符号値Valueとして出力する。Value_FF1004から出力された符号値Valueは、一括復号ビット数算出部1005、1ビット復号処理部1006およびNビット復号処理部1007へ入力される。
【0078】
一括復号ビット数算出部1005は、シンタクス情報管理FF1001からのシンタクス情報と、Range_FF1003からの範囲Rangeと、Value_FF1004からの符号値Valueと、に基づいて一括復号ビット数Nを算出する。一括復号ビット数算出部1005は、算出した一括復号ビット数Nを、Nビット復号処理部1007、MUX1008および逆二値化部1009へ出力する。一括復号ビット数算出部1005の構成例については後述する(たとえば図13参照)。
【0079】
1ビット復号処理部1006は、確率テーブル部1002からの発生確率probと、Range_FF1003からの範囲Rangeと、Value_FF1004からの符号値Valueと、に基づいてデータストリームの1ビット復号処理を行う。1ビット復号処理部1006は、1ビット復号処理により得られた復号値(1/0)を逆二値化部1009へ出力する。また、1ビット復号処理部1006は、1ビット復号処理後の符号値ValueをNewValueとしてValue_FF1004へ出力する。また、1ビット復号処理部1006は、1ビット復号処理後の範囲RangeをNewRange1としてMUX1008へ出力する。
【0080】
Nビット復号処理部1007には、確率テーブル部1002からの発生確率probと、Range_FF1003からの範囲Rangeと、が入力される。また、Nビット復号処理部1007には、一括復号ビット数算出部1005からの一括復号ビット数Nと、Value_FF1004からの符号値Valueと、が入力される。
【0081】
Nビット復号処理部1007は、入力された発生確率prob、範囲Range、一括復号ビット数Nおよび符号値Valueに基づいてデータストリームのNビット復号処理を行う。また、Nビット復号処理部1007は、Nビット復号処理後の範囲RangeをNewRange2としてMUX1008へ出力する。
【0082】
また、Nビット復号処理部1007は、NewRange2>符号値ValueおよびNewRange2≧128の少なくともいずれかを満たさない場合にN_bit_errをMUX1008および逆二値化部1009へ出力してもよい。Nビット復号処理部1007の構成例については後述する(たとえば図12参照)。
【0083】
MUX1008には、1ビット復号処理部1006からのNewRange1と、Nビット復号処理部1007からのNewRange2と、が入力される。MUX1008は、一括復号ビット数算出部1005から出力された一括復号ビット数Nが0である場合は、1ビット復号処理部1006からのNewRange1をRange_FF1003へ出力する。また、MUX1008は、一括復号ビット数算出部1005から出力された一括復号ビット数Nが1以上である場合は、Nビット復号処理部1007からのNewRange2をRange_FF1003へ出力する。
【0084】
また、MUX1008は、Nビット復号処理部1007からN_bit_errが出力された場合は、一括復号ビット数Nが1以上であっても1ビット復号処理部1006からのNewRange1をRange_FF1003へ出力するようにしてもよい。これにより、Nビットを一括復号するとグループを跨いでしまう場合は、一括復号ビット数Nが1以上であっても1ビット復号結果を用いることができる。
【0085】
逆二値化部1009は、シンタクス情報管理FF1001から出力されるシンタクス情報に基づいて復号値を逆二値化する。具体的には、一括復号ビット数算出部1005から出力された一括復号ビット数Nが0である場合は、1ビット復号処理部1006から出力された復号値を逆二値化する。また、逆二値化部1009は、一括復号ビット数算出部1005から出力された一括復号ビット数Nが1以上である場合は、一括復号ビット数Nだけ連続する“0”を復号値として逆二値化する。
【0086】
逆二値化部1009は、逆二値化したデータを復号データとして出力する。逆二値化部1009から出力された復号データは、復号結果として復号装置100から出力される。また、復号データは次シンタクス判定部1010へ入力される。また、逆二値化部1009は、Nビット復号処理部1007からN_bit_errが出力された場合は、一括復号ビット数Nが1以上であっても1ビット復号処理部1006から出力された復号値を逆二値化してもよい。これにより、Nビットを一括復号するとグループを跨いでしまう場合は、一括復号ビット数Nが1以上であっても1ビット復号結果を用いることができる。
【0087】
次シンタクス判定部1010は、逆二値化部1009から出力された復号データに基づいて次の復号対象のシンタクスを判定する。次シンタクス判定部1010は、判定したシンタクスを示すシンタクス情報をシンタクス情報管理FF1001へ出力する。
【0088】
このように、マルチコンテキスト型の算術符号に対応する復号装置100において、グループごとに一つの発生確率を用いて一括復号ビット数Nを算出することができる。これにより、一括復号ビット数Nを算出するためにNビット復号処理部1007と同等の回路を設けなくても、一括復号ビット数Nを算出することが可能になり、回路規模を小さくすることができる。
【0089】
図10に示したRange_FF1003は、範囲Range(数値範囲)を記憶する記憶部である。記憶部は、たとえば図2に示したメインメモリ220、補助メモリ230などによって実現してもよい。確率テーブル部1002は、復号データの各位置における“0”(所定シンボル)の発生確率を取得する取得部である。取得部は、たとえば図2に示したCPU210、メインメモリ220、通信インタフェース250などによって実現してもよい。
【0090】
一括復号ビット数算出部1005は、確率テーブル部1002で取得された発生確率のうちの、復号対象の位置が属するグループにおける最小の発生確率を特定する特定部である。また、一括復号ビット数算出部1005は、特定した発生確率に相当する割合で範囲Rangeを縮小した場合における範囲Rangeの減少幅を算出する算出部である。また、一括復号ビット数算出部1005は、範囲Rangeの限界値と符号値Valueとの差分を、算出した減少幅によって除算した商を算出する除算部である。特定部、算出部および除算部は、たとえば図2に示したCPU210によって実現してもよい。
【0091】
Nビット復号処理部1007は、一括復号ビット数算出部1005によって算出された商が1(所定値)以上である場合に、商だけ連続する“0”(所定シンボル)となる復号結果を出力する一括復号処理部である。一括復号処理部は、たとえば図2に示したCPU210によって実現してもよい。また、Nビット復号処理部1007は、一括復号ビット数算出部1005によって算出された商が1以上である場合に、減少幅に商を乗じた幅だけ範囲Rangeを縮小する縮小部である。縮小部は、たとえば図2に示したCPU210によって実現してもよい。
【0092】
1ビット復号処理部1006は、一括復号ビット数算出部1005によって算出された商が1未満である場合に、範囲Rangeと、復号対象の位置における発生確率と、符号値Valueと、に基づいて復号対象の位置を復号する個別復号処理部である。個別復号処理部は、たとえば図2に示したCPU210によって実現してもよい。また、1ビット復号処理部1006は、復号結果と、復号対象の位置における発生確率と、に応じて範囲Rangeを縮小する縮小部である。また、1ビット復号処理部1006は、縮小した範囲Rangeの限界値が128(閾値)を下回った場合に、範囲Rangeおよび符号値Valueを同一比率で増大させる再正規化を行う再正規化部である。再正規化部は、たとえば図2に示したCPU210によって実現してもよい。
【0093】
(1ビット復号処理部の構成)
図11は、1ビット復号処理部の構成の一例を示す図である。図11に示すように、1ビット復号処理部1006は、減算部1101と、乗算部1102と、シフト部1103と、加算部1104と、減算部1105,1106と、比較部1107と、MUX1108,1109と、再正規化制御部1110と、シフト部1111,1112と、シフト部1113と、OR部1114と、を備えている。
【0094】
データストリームは、シフト部1113へ入力される。確率テーブル部1002(図10参照)からの発生確率probは、乗算部1102へ入力される。Range_FF1003(図10参照)からの範囲Rangeは、減算部1101および減算部1105へ出力される。Value_FF1004(図10参照)からの符号値Valueは、減算部1106、比較部1107およびMUX1109へ出力される。
【0095】
減算部1101は、Range_FF1003からの範囲Rangeを1で減算し、減算結果を乗算部1102へ出力する。乗算部1102は、確率テーブル部1002からの発生確率probと、減算部1101から出力された値と、を乗算する。乗算部1102は、乗算結果をシフト部1103へ出力する。
【0096】
シフト部1103は、乗算部1102から出力された値を8ビットシフトさせ、8ビットシフトさせた値を加算部1104へ出力する。加算部1104は、シフト部1103から出力された値に1を加算し、加算結果を境界値splitとして出力する。加算部1104から出力された境界値splitは、減算部1105,1106、比較部1107およびMUX1108へ入力される。
【0097】
減算部1105は、Range_FF1003からの範囲Rangeから、加算部1104から出力された境界値splitを減算し、減算結果をMUX1108へ出力する。減算部1106は、Value_FF1004からの符号値Valueから、加算部1104から出力された境界値splitを減算し、減算結果をMUX1108へ出力する。
【0098】
比較部1107は、Value_FF1004からの符号値Valueと、加算部1104から出力された境界値splitと、を比較し、符号値Valueが境界値split以上であるか否かを判断する。比較部1107は、符号値Valueが境界値split以上である場合は“1”を出力し、符号値Valueが境界値split未満である場合は“0”を出力する。比較部1107から出力された値はMUX1108,1109へ出力される。また、比較部1107から出力された値は、1ビット復号処理による復号値(1/0)として逆二値化部1009(図10参照)へ出力される。
【0099】
MUX1108は、比較部1107から“1”が出力された場合は減算部1105から出力された値を範囲Rangeとして出力する。また、MUX1108は、比較部1107から“0”が出力された場合は加算部1104から出力された境界値splitを範囲Rangeとして出力する。MUX1108から出力された範囲Rangeは再正規化制御部1110およびシフト部1111へ出力される。
【0100】
MUX1109は、比較部1107から“1”が出力された場合は減算部1106からの値を符号値Valueとして出力する。また、MUX1109は、比較部1107から“0”が出力された場合はValue_FF1004からの符号値Valueを出力する。MUX1109から出力された符号値Valueはシフト部1112へ出力される。
【0101】
再正規化制御部1110(Renorm:Renormalization)は、MUX1108から出力された範囲Rangeに基づいて、再正規化を実行する回数を算出する。たとえば再正規化の閾値が128である場合は、再正規化制御部1110は、128を範囲Rangeで除算した商を再正規化を実行する回数として算出する。再正規化制御部1110は、算出した回数をシフト量としてシフト部1111,1112およびシフト部1113へ出力する。
【0102】
シフト部1111は、MUX1108から出力された範囲Rangeを、再正規化制御部1110から出力されたシフト量(ビット数)だけシフトさせる。シフト部1111は、シフトさせた範囲RangeをNewRange1としてRange_FF1003(図10参照)へ出力する。シフト部1112は、MUX1109から出力された符号値Valueを、再正規化制御部1110から出力されたシフト量(ビット数)だけシフトさせ、シフトさせた符号値ValueをOR部1114へ出力する。
【0103】
シフト部1113は、入力されたビットストリームを、再正規化制御部1110から出力されたシフト量(ビット数)だけ読み出す。そして、シフト部1113は、読み出したビットをOR部1114へ出力する。OR部1114は、シフト部1112から出力された符号値Valueと、シフト部1113から出力されたビットと、の和をNewValueとしてValue_FF1004(図10参照)へ出力する。
【0104】
(Nビット復号装置の構成)
図12は、Nビット復号装置の構成の一例を示す図である。図12に示すように、Nビット復号処理部1007は、M個(M≧N)のMUX1211〜121Mと、M個の境界値算出部1221〜122Mと、範囲チェック部1230と、を備えている。
【0105】
MUX1211〜121Mには、それぞれ発生確率prob_1〜prob_Mが入力される。発生確率prob_1〜prob_Mは、それぞれ1〜Mビット目における“0”の発生確率probである。また、MUX1211〜121Mには、それぞれ256の値が入力される。また、MUX1211〜121Mには、一括復号ビット数算出部1005から出力された一括復号ビット数Nが入力される。
【0106】
MUX1211〜121Mのうちの1〜N番目のMUX1211〜121Nは、それぞれ入力された発生確率prob_1〜prob_Nを発生確率probとしてそれぞれ境界値算出部1221〜122Nへ出力する。一方、MUX1211〜121MのうちのN+1〜M番目のMUX121(N+1)〜121Mは、入力された256を発生確率probとしてそれぞれ境界値算出部122(N+1)〜122Mへ出力する。
【0107】
境界値算出部1221は、Range_FF1003から出力された範囲Rangeと、MUX1211から出力された発生確率probと、に基づいて1ビット目の復号処理後の境界値splitを算出する。境界値算出部1221は、算出した境界値splitを境界値算出部1222へ出力する。
【0108】
境界値算出部1222は、境界値算出部1221から出力された境界値splitを範囲Rangeとし、MUX1212から出力された発生確率probに基づいて2ビット目の復号処理後の境界値splitを算出する。境界値算出部1222は、算出した境界値splitを境界値算出部1223へ出力する。
【0109】
同様に、境界値算出部1223〜122Mは、前段の境界値算出部から出力された境界値splitを範囲Rangeとし、MUX1213〜121Mから出力された発生確率probに基づいて3〜Mビット目の復号処理後の境界値splitを算出する。
【0110】
ここで、境界値算出部122(N+1)〜122Mは、入力される発生確率が256となっているため、前段の境界値算出部から出力された境界値splitを変更せずに後段の境界値算出部へ出力することになる。このように、境界値算出部1221〜122Mの前段で入力を選択しておくことにより、後段に必要とされる境界値算出部ごとの比較器と、比較結果をまとめるプライオリティエンコーダ、その出力によって最終データの選択を行うMto1セレクタが不要となるため、Nビット復号処理部1007における一括復号処理を高速化することができる。境界値算出部122Mから出力された境界値splitは、NewRange2としてMUX1008(図10参照)へ出力されるとともに範囲チェック部1230へ入力される。
【0111】
範囲チェック部1230には、Value_FF1004(図10参照)からの符号値Valueと、128の値と、境界値算出部122Mからの境界値splitと、が入力される。範囲チェック部1230は、NewRange2>符号値ValueおよびNewRange2≧128を満たす場合はN_bit_errを出力しない。また、範囲チェック部1230は、NewRange2>符号値ValueおよびNewRange2≧128の少なくともいずれかを満たさない場合はN_bit_errを出力する。範囲チェック部1230から出力されたN_bit_errは、MUX1008および逆二値化部1009(図10参照)へ出力される。
【0112】
(一括復号ビット数算出部の構成)
図13は、一括復号ビット数算出部の構成の一例を示す図である。図13に示すように、一括復号ビット数算出部1005は、比較部1301と、減算部1302、減算部1303と、MUX1304と、グループID_LUT部1305と、probG_LUT部1306と、乗算部1307と、シフト部1308と、減算部1309と、除算部1310と、を備えている。
【0113】
比較部1301は、Value_FF1004から出力された符号値Valueと、128の値と、を比較する。比較部1301は、比較結果をMUX1304へ出力する。減算部1302は、Range_FF1003から出力された範囲Rangeから、128の値を減算する。減算部1302は、減算結果をMUX1304へ出力する。減算部1303は、Range_FF1003から出力された範囲Rangeから、Value_FF1004から出力された符号値を減算する。減算部1303は、減算結果をMUX1304へ出力する。
【0114】
MUX1304は、符号値Valueが128未満である旨の比較結果が比較部1301から出力された場合は、減算部1302から出力された減算結果を差分Diffとして出力する。また、MUX1304は、符号値Valueが128以上である旨の比較結果が比較部1301から出力された場合は、減算部1303から出力された減算結果を差分Diffとして除算部1310へ出力する。
【0115】
グループID_LUT部1305(Look Up Table:ルックアップテーブル)は、シンタクスとグループIDとの対応情報(たとえば図3−1の対応情報310)を記憶している。グループID_LUT部1305は、シンタクス情報管理FF1001から出力されたシンタクス情報が示すシンタクスに対応するグループIDを対応情報から取得し、取得したグループIDをprobG_LUT部1306へ出力する。
【0116】
probG_LUT部1306は、グループIDと発生確率probGとの対応情報(たとえば図3−2の対応情報320)を記憶している。probG_LUT部1306は、グループID_LUT部1305から出力されたグループIDが示すシンタクスに対応する最小の発生確率probG(グループID)を対応情報から取得し、取得した発生確率probG(グループID)を乗算部1307へ出力する。
【0117】
乗算部1307は、Range_FF1003から出力された範囲Rangeと、probG_LUT部1306から出力された発生確率probG(グループID)と、を乗算する。乗算部1307は、乗算結果をシフト部1308へ出力する。シフト部1308は、乗算部1307から出力された値を8ビットシフトさせる。シフト部1308は、8ビットシフトさせた値を減算部1309へ出力する。
【0118】
減算部1309は、Range_FF1003から出力された範囲Rangeを、シフト部1308から出力された値で減算する。減算部1309は、減算結果を減少値SubValとして除算部1310へ出力する。除算部1310は、MUX1304から出力された差分Diffを、減算部1309から出力された減少値SubValで除算する。除算部1310は、除算結果の商を一括復号ビット数Nとして出力する。
【0119】
このように、実施の形態1にかかる復号装置100によれば、優勢シンボルの発生確率をグループ分けし、復号対象が属するグループの最小の発生確率に基づいて優勢シンボルの連続数を算出し、算出結果に基づいて一括復号を行うことができる。これにより、一括復号の実施確率を高くし、復号処理の高速化の確率を高めることができる。
【0120】
(実施の形態2)
実施の形態2においては、実施の形態1と異なる部分について説明する。
【0121】
(グループIDと減少値の対応情報)
図14は、グループIDと減少値の対応情報の一例を示す図である。図14に示す対応情報1400は、グループIDと減少値とを対応付ける対応情報である。対応情報1400は、たとえば復号装置100のメインメモリ220や補助メモリ230に記憶されている。対応情報1400に示す最大の減少値SubValG(0)〜SubValG(Y)は、それぞれグループID「0」〜「Y」が示すグループに属する各シンタクスの復号処理において、範囲Rangeの最大の減少値SubValを示している。
【0122】
実施の形態1においては、図8に示したように、復号処理ごとに変化する範囲Range(≦255)に基づいて減少値SubValが算出される。これに対して、実施の形態2においては、範囲Rangeが常に255であると仮定して減少値SubValG(0)〜probG(Y)が予め算出され、対応情報1400として記憶されている。この場合は、図3−2に示した対応情報320は復号装置100に記憶されていなくてもよい。このように、実施の形態2においては、シンボル発生確率ではなく、数直線幅に換算した値を直接設定しておく。
【0123】
(一括復号ビット数Nの算出処理)
図15は、一括復号ビット数Nの算出処理の一例を示すフローチャートである。実施の形態2にかかる復号装置100は、図4に示したステップS405における一括復号ビット数Nの算出処理として、たとえば図15に示す各ステップを実行する。
【0124】
図15に示すステップS1501〜S1504は、図8に示したステップS801〜S804と同様である。ステップS1504のつぎに、復号装置100は、ステップS1504によって取得したグループIDに対応する減少値SubValG(グループID)を減少値SubValとして対応情報1400から取得する(ステップS1505)。
【0125】
つぎに、復号装置100は、ステップS1505により算出した減少値SubValを除数とし、差分Diffを被除数として除算した商をNとして算出し(ステップS1506)、一連の処理を終了する。これにより、復号値が“0”となりかつ再正規化が発生しない最小の復号処理の回数をNとして算出することができる。
【0126】
また、対応情報1400を用いることで、復号処理ごとに減少値SubValを算出しなくても一括復号ビット数Nを算出することができるため、計算量を少なくすることができる。なお、実施の形態2においては、現在の範囲Rangeに基づく減少値SubValの算出を行わず、範囲Rangeの最大値に基づく減少値SubValを用いるため、実施の形態1に比べて一括復号ビット数Nが小さくなる傾向となる。
【0127】
(実施の形態2にかかる一括復号ビット数算出部の構成)
図16は、実施の形態2にかかる一括復号ビット数算出部の構成の一例を示す図である。図16において、図13に示した部分と同様の部分については同一の符号を付して説明を省略する。図16に示すように、実施の形態2にかかる一括復号ビット数算出部1005は、対応情報1400を用いることで復号対象の位置が属するグループに対応する減少幅を導出する導出部である。具体的には、実施の形態2にかかる一括復号ビット数算出部1005は、図13に示したprobG_LUT部1306、乗算部1307、シフト部1308および減算部1309に代えてSubVal_LUT部1601を備えている。
【0128】
SubVal_LUT部1601は、グループIDと減少値probGとの対応情報(たとえば図14に示した対応情報1400)を記憶している。SubVal_LUT部1601は、シンタクス情報管理FF1001から出力されたシンタクス情報が示すシンタクスに対応する減少値SubValG(グループID)を対応情報から取得する。そして、SubVal_LUT部1601は、取得した減少値SubValG(グループID)を減少値SubValとして除算部1310へ出力する。
【0129】
除算部1310は、MUX1304から出力された差分Diffを、SubVal_LUT部1601から出力された減少値SubValで除算する。除算部1310は、除算結果の商を一括復号ビット数Nとして出力する。
【0130】
このように、対応情報1400を用いることで、復号処理ごとに減少値SubValを算出しなくても一括復号ビット数Nを算出することができるため、一括復号ビット数算出部1005の回路規模を小さくすることができる。
【0131】
このように、実施の形態2にかかる復号装置100においては、グループごとに、グループにおける最小の発生確率に相当する割合で範囲Rangeを縮小した場合における範囲Rangeの減少幅が対応付けられた対応情報1400を用意しておく。そして、復号装置100は、対応情報1400を用いることで、復号対象の位置が属するグループに対応する減少幅を導出する。これにより、復号処理ごとに減少値を算出しなくても一括復号ビット数Nを算出することができるため、計算量を少なくすることができる。
【0132】
(符号化処理)
図17は、符号化処理の一例を示すフローチャートである。復号装置100の復号対象のビットストリームを生成する符号化装置は、たとえば以下の各ステップを実行する。図17において、下限値lowvalueは範囲Rangeの下限値である。下限値lowvalueの初期値は0とする。範囲Rangeの初期値は255とする。カウント値countの初期値は0とする。まず、符号化装置は、現在の範囲Rangeと、符号化対象の1ビットにおける優勢シンボルの発生確率probに基づいて境界値splitを算出する(ステップS1701)。
【0133】
つぎに、符号化装置は、符号化対象の値が“1”であるか否かを判断する(ステップS1702)。符号化対象の値が“1”である場合(ステップS1702:Yes)は、符号化装置は、ステップS1701によって算出した境界値splitを下限値lowvalueに加算する(ステップS1703)。また、符号化装置は、ステップS1701によって算出した境界値splitを範囲Rangeから減算し(ステップS1704)、ステップS1706へ移行する。
【0134】
ステップS1702において、符号化対象の値が“1”でない場合(ステップS1702:No)は、符号化装置は、ステップS1701によって算出した境界値splitを範囲Rangeに設定し(ステップS1705)、ステップS1706へ移行する。
【0135】
つぎに、符号化装置は、範囲Rangeが128未満であるか否かを判断する(ステップS1706)。範囲Rangeが128以上である場合(ステップS1706:No)は、符号化装置は、一連の処理を終了する。範囲Rangeが128未満である場合(ステップS1706:Yes)は、符号化装置は、再正規化処理を実行し(ステップS1707)、一連の処理を終了する。ステップS1707による再正規化処理については後述する(たとえば図18参照)。
【0136】
図18は、符号化処理における再正規化処理の一例を示すフローチャートである。符号化装置は、図17に示したステップS1707による再正規化処理として、たとえば図17に示す各ステップを実行する。まず、符号化装置は、範囲Rangeが128以上か否かを判断する(ステップS1801)。
【0137】
ステップS1801において、範囲Rangeが128以上である場合(ステップS1801:Yes)は、符号化装置は、下限値lowvalueが128未満であるか否かを判断する(ステップS1802)。下限値lowvalueが128未満である場合(ステップS1802:Yes)は、符号化装置は、引数xを“0”とするライト処理を実行し(ステップS1803)、ステップS1809へ移行する。ライト処理については後述する(たとえば図19参照)。
【0138】
ステップS1802において、下限値lowvalueが128以上である場合(ステップS1802:No)は、符号化装置は、下限値lowvalueが256以上であるか否かを判断する(ステップS1804)。下限値lowvalueが256未満である場合(ステップS1804:No)は、符号化装置は、下限値lowvalueから128を減算する(ステップS1805)。また、符号化装置は、カウント値countに1を加算し(ステップS1806)、ステップS1809へ移行する。
【0139】
ステップS1804において、下限値lowvalueが256以上である場合(ステップS1804:Yes)は、符号化装置は、下限値lowvalueから256を減算する(ステップS1807)。つぎに、符号化装置は、引数xを“1”とするライト処理を実行し(ステップS1808)、ステップS1809へ移行する。ライト処理については後述する(たとえば図19参照)。
【0140】
つぎに、符号化装置は、範囲Rangeを1ビット左シフトさせる(ステップS1809)。また、符号化装置は、下限値lowvalueを1ビット左シフトさせ(ステップS1810)、ステップS1801へ戻る。ステップS1801において、範囲Rangeが128未満である場合(ステップS1801:No)は、符号化装置は、一連の再正規化処理を終了する。
【0141】
図19は、再正規化処理におけるライト処理の一例を示すフローチャートである。符号化装置は、図18のステップS1803,S1808におけるライト処理として、図19に示す各ステップを実行する。まず、符号化装置は、FirstFlagが0であるか否かを判断する(ステップS1901)。FirstFlagが0である場合(ステップS1901:Yes)は、符号化装置は、FirstFlagに0を設定し(ステップS1902)、ステップS1904へ移行する。
【0142】
ステップS1901において、FirstFlagが0でない場合(ステップS1901:No)は、符号化装置は、符号値として引数“x”を出力し(ステップS1903)、ステップS1904へ移行する。つぎに、符号化装置は、カウント値countが0より大きいか否かを判断する(ステップS1904)。
【0143】
ステップS1904において、カウント値countが0より大きい場合(ステップS1904:Yes)は、符号化装置は、符号値として引数“1−x”を出力する(ステップS1905)。また、符号化装置は、カウント値countをデクリメント(−1)し(ステップS1906)、ステップS1904へ戻る。ステップS1904において、カウント値countが0より大きくない場合(ステップS1904:No)は、符号化装置は、一連の処理を終了する。
【0144】
(符号化の具体例)
ここでは、符号化対象の最初のシンタクスがSyntaxA(8ビット)であり、SyntaxAの次のシンタクスがSyntaxB(8ビット)であるとする。SyntaxAの各ビット位置kにおける“0”の発生確率は、ProbTableA[k]={217,223,245,245,244,242,244,245}とする。SyntaxBの各ビット位置kにおける“0”の発生確率は、ProbTableB[k]={234,251,244,254,216,199,179,233}とする。split計算式には下記(1)式を用いるとする。
【0145】
split=1+(((Range−1)*prob)>>8) …(1)
【0146】
また、たとえばSyntaxA=“00000010”とする。SyntaxAのビット位置0(0)の符号化は下記(2)式のようになる。
【0147】
split=1+(((255−1)*217)>>8)=216
Range=split=216 …(2)
【0148】
SyntaxAのビット位置1(0)の符号化は下記(3)式のようになる。
【0149】
split=1+(((216−1)*223)>>8)=188
Range=split=188 …(3)
【0150】
SyntaxAのビット位置2(0)の符号化は下記(4)式のようになる。
【0151】
split=1+(((188−1)*245)>>8)=179
Range=split=179 …(4)
【0152】
SyntaxAのビット位置3(0)の符号化は下記(5)式のようになる。
【0153】
split=1+(((179−1)*245)>>8)=171
Range=split=171 …(5)
【0154】
SyntaxAのビット位置4(0)の符号化は下記(6)式のようになる。
【0155】
split=1+(((171−1)*244)>>8)=163
Range=split=163 …(6)
【0156】
SyntaxAのビット位置5(0)の符号化は下記(7)式のようになる。
【0157】
split=1+(((163−1)*242)>>8)=154
Range=split=154 …(7)
【0158】
SyntaxAのビット位置6(1)の符号化は下記(8)式のようになる。
【0159】
split=1+(((154−1)*244)>>8)=146
lowvalue+=split=146
Range=Range−split=8 …(8)
【0160】
ここで、範囲Rangeが128未満となったため、1ビット正規化処理が発生し、下記(9)式のようになる。
【0161】
count=count+1=1
lowvalue=lowvalue−128=18
Range=Range<<1=16
lowvalue=lowvalue<<1=36 …(9)
【0162】
範囲Rangeが128未満のままであるため、さらに1ビット正規化処理が発生し、下記(10)式のようになる。また、count=1により符号値“1”が出力される。
【0163】
count=count−1=0
Range=Range<<1=32
lowvalue=lowvalue<<1=72 …(10)
【0164】
範囲Rangeが128未満のままであるため、さらに1ビット正規化処理が発生し、下記(11)式のようになる。また、count=0により符号値“0”が出力される。
【0165】
Range=Range<<1=64
lowvalue=lowvalue<<1=144 …(11)
【0166】
範囲Rangeが128未満のままであるため、さらに1ビット正規化処理が発生し、下記(12)式のようになる。また、count=0により符号値“0”が出力される。
【0167】
count=count+1=1
lowvalue=lowvalue−128=16
Range=Range<<1=128
lowvalue=lowvalue<<1=32 …(12)
【0168】
範囲Rangeが128以上となったため、SyntaxAのビット位置7(0)の符号化が実行される。SyntaxAのビット位置7(0)の符号化は下記(13)式のようになる。
【0169】
split=1+(((128−1)*245)>>8)=122
Range=split=122 …(13)
【0170】
範囲Rangeが128未満となったため、1ビット正規化処理が発生し、下記(14)式のようになる。また、count=1により符号値“1”が出力される。
【0171】
count=count−1=0
Range=Range<<1=244
lowvalue=lowvalue<<1=64 …(14)
【0172】
これにより、SyntaxAを符号化した時点で符号値“1001”までが確定したこととなる。以下、SyntaxB以降も同様の処理を行い、符号値“1001_0010_1110_0010_xxxx_”が得られるとする。
【0173】
(復号の具体例)
ここでは、上記の符号化の具体例によって符号化されたストリームデータ(“1001_0010_1110_0010_xxxx_”)を対象とする復号の具体例について説明する。したがって、復号対象の最初のシンタクスはSyntaxA(8ビット)であり、SyntaxAの次のシンタクスはSyntaxB(8ビット)である。
【0174】
SyntaxAの各ビット位置kにおける“0”の発生確率は、ProbTableA[k]={217,223,245,245,244,242,244,245}である。SyntaxBの各ビット位置kにおける“0”の発生確率は、ProbTableB[k]={234,251,244,254,216,199,179,233}である。また、復号対象のストリームデータの先頭の16ビットは「1001_0010_1110_0010」となる。
【0175】
図20は、シンタクスのグループ分けの一例を示す図である。復号装置100においては、ProbTableA[k]およびProbTableB[k]の各発生確率が図20のグループ2001〜2006のようにグループ分けされているとする。
【0176】
たとえば、復号装置100は、各発生確率を順に読み出し、発生確率を1つ読み出すごとに、読み出した各発生確率の最大値および最小値を算出する。そして、復号装置100は、算出した最大値および最小値の差が所定値を超えない範囲で最大数の各発生確率を1つのグループとする。これにより、各グループにおいて、発生確率の最大値と最小値の差が所定値以下となるようにすることができる。
【0177】
たとえば、図20に示す例は、所定値を25としてグループ分けを行った例である。たとえば、復号装置100は、各発生確率を順に読み出し、3つめの発生確率(245)を読み出した時点で最大値(245)と最小値(217)の差が28となり所定値(25)を超えるため、1つ目および2つ目の発生確率(217,223)をグループ2001とする。
【0178】
このように、復号装置100は、復号データの各位置(各発生確率)を、同一グループ内の各位置における発生確率の最大値と最小値との差が所定値以内になるようにグループ2001〜2006に分けておく。これにより、たとえば“0”の発生確率の高い各位置が同一グループにまとまるため、一括復号の発生確率をさらに高めることができる。ただし、グループ分けの方法はこれに限らない。たとえば、各発生確率を、一定数ずつの各グループに分けてもよい。
【0179】
図21−1は、具体例にかかるシンタクスとグループIDの対応情報を示す図である。図3−1に示した対応情報310は、図20に示したグループ分けの例においては図21−1に示す対応情報2110のようになる。
【0180】
図21−2は、具体例にかかるグループIDと減少値の対応情報を示す図である。図14に示した対応情報1400は、図20に示したグループ分けの例においては図21−2に示す対応情報2120のようになる。
【0181】
まず、復号装置100は、ストリームデータの先頭8ビット「1001_0010」(146)を取得してValueに設定する。また、復号装置100は、Rangeの初期値を255とする。復号装置100は、SyntaxA[0]はグループID「0」のグループに属するため、グループID「0」に対応するSubVal=39を取得する。そして、図15に示した処理により、一括復号ビット数Nとして2が算出される。したがって、N=2としてNビット復号処理(図7参照)が実行される。Nビット復号処理においては、境界値splitが下記(1)式のように算出される。
【0182】
Split=1+(((255−1)×217)>>8)=216
Split=1+(((216−1)×223)>>8)=188 …(1)
【0183】
したがって、Nビット復号処理の復号値は“00”となり、範囲Rangeは188となる。復号装置100は、2ビット復号したため、つぎにSyntaxA[2]の復号を行う。図15に示した処理により、一括復号ビット数Nとして3が算出される。したがって、N=3としてNビット復号処理(図7参照)が実行される。Nビット復号処理においては、境界値splitが下記(2)式のように算出される。
【0184】
Split=1+(((188−1)×245)>>8)=179
Split=1+(((179−1)×245)>>8)=171
Split=1+(((171−1)×244)>>8)=163 …(2)
【0185】
したがって、Nビット復号処理の復号値は“000”となり、範囲Rangeは163となる。復号装置100は、3ビット復号したため、つぎにSyntaxA[5]の復号を行う。図15に示した処理により、一括復号ビット数Nとして1が算出される。したがって、N=1としてNビット復号処理(図7参照)が実行される。Nビット復号処理においては、境界値splitが下記(3)式のように算出される。
【0186】
Split=1+(((163−1)×242)>>8)=154 …(3)
【0187】
したがって、Nビット復号処理の復号値は“0”となり、範囲Rangeは154となる。復号装置100は、1ビット復号したため、つぎにSyntaxA[6]の復号を行う。図15に示した処理により、一括復号ビット数Nとして0が算出される。したがって、1ビット復号処理(図6参照)が実行される。1ビット復号処理においては、境界値splitが下記(4)式のように算出される。
【0188】
Split=1+(((154−1)×244)>>8)=146 …(4)
【0189】
したがって、1ビット復号処理の復号値は“1”となり、範囲Rangeは8となり、符号値Valueは1となる。範囲Rangeが128未満となったため、復号装置100は再正規化を行う。具体的には、復号装置100は、ストリームデータから4ビット補充してValue=30とする。範囲Rangeは128となる。
【0190】
つぎに、復号装置100は、1ビット復号したため、SyntaxA[7]の復号を行う。図15に示した処理により、一括復号ビット数Nとして0が算出される。したがって、1ビット復号処理(図6参照)が実行される。1ビット復号処理においては、境界値splitが下記(5)式のように算出される。
【0191】
Split=1+(((128−1)×245)>>8)=122 …(5)
【0192】
したがって、1ビット復号処理の復号値は“0”となり、範囲Rangeは122となる。範囲Rangeが128未満となったため、復号装置100は再正規化を行う。具体的には、復号装置100は、ストリームデータから1ビット補充してValue=60とする。範囲Rangeは244となる。これにより、SyntaxAを“00000010”として復号することができる。SyntaxBについても同様の手順で復号することができる。
【0193】
このように、復号装置100においては、特定の条件を満たす複数のシンタクス(またはシンタクスのビット位置)がひとつのグループとして予めまとめられる。そして、あるシンタクスの復号を行う際は、そのシンタクスが含まれているグループ内の最も低い発生確率により優勢シンボルが出力されると仮定した場合の範囲Rangeの減少値(減少値SubVal)が算出される。
【0194】
つぎに、算出された減少値を元に再正規化が発生するまでの最小の連続復号ビット数が算出され、算出されたビット数だけ1サイクルで一括して復号処理が行われる。これにより、予め一括復号ビット数を決定しなくても、シンタクスに応じた復号ビット数を選択することにより、一括復号が実施される割合が高くなり、算術復号処理の高速化を図ることが可能となる。
【0195】
また、連続復号ビット数の計算においては、グループ内でひとつの発生確率を代表して使用するため、マルチコンテキスト型の算術復号においても、多入力の乗算処理を行わなくてもよく、回路規模を小さくすることができる。また、グループの分類をシンタクス単位、またはシンタクスのビット単位と切り替えることにより、一括復号が発生する確率を調整することができる。
【0196】
以上説明したように、復号装置、復号方法および復号プログラムによれば、復号の高速化を図ることができる。
【0197】
なお、各実施の形態で説明した復号方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【0198】
また、各実施の形態で説明した復号装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した復号装置100の機能をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、復号装置100を製造することができる。
【0199】
上述した各実施の形態に関し、さらに以下の付記を開示する。
【0200】
(付記1)マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から前記算術符号化の前のデータ列を復号する復号装置において、
前記数値範囲を記憶する記憶部と、
前記データ列の各位置における所定シンボルの発生確率を取得する取得部と、
前記取得部によって取得された発生確率の中の、前記データ列を区切った複数のグループのうちの復号対象の位置が属するグループにおける最小の発生確率に基づく前記数値範囲の減少幅を導出する導出部と、
前記数値範囲の限界値と前記符号値との差分を、前記導出部によって導出された減少幅によって除算する除算部と、
前記除算部によって得られた商が所定値以上である場合に、前記商だけ連続する前記所定シンボルとなる、前記復号対象の位置以降の復号結果を出力する一括復号処理部と、
を備えることを特徴とする復号装置。
【0201】
(付記2)前記商が前記所定値以上である場合に、前記記憶部に記憶された数値範囲の前記限界値を、前記減少幅に前記商を乗じた幅だけ変化させて前記数値範囲を縮小する縮小部を備えることを特徴とする付記1に記載の復号装置。
【0202】
(付記3)前記除算部は、前記限界値と前記符号値との差分および前記限界値と所定の閾値との差分のうちの小さい方の差分を前記減少幅によって除算し、
前記縮小部によって縮小された数値範囲の幅が前記所定の閾値以上となるように前記数値範囲および前記符号値を正規化する正規化部を備えることを特徴とする付記2に記載の復号装置。
【0203】
(付記4)前記導出部は、
前記最小の発生確率を特定する特定部と、
前記記憶部によって記憶された数値範囲を、前記特定部によって特定された発生確率に相当する割合で縮小した場合における前記数値範囲の減少幅を算出する算出部と、
を備えることを特徴とする付記1〜3のいずれか一つに記載の復号装置。
【0204】
(付記5)前記一括復号処理部によって復号結果が出力された場合に、前記データ列の各位置のうち、前記復号対象の位置から前記商の数だけ先の位置を次の復号対象とすることを特徴とする付記1〜4のいずれか一つに記載の復号装置。
【0205】
(付記6)前記商が前記所定値未満である場合に、前記記憶部によって記憶された数値範囲と、前記取得部によって取得された発生確率のうち前記復号対象の位置における発生確率と、前記符号値と、に基づく前記復号対象の位置の復号結果を出力する個別復号処理部を備え、
前記縮小部は、前記個別復号処理部によって復号結果が出力された場合に、前記個別復号処理部によって出力された復号結果と、前記復号対象の位置における発生確率と、に応じて前記記憶部によって記憶された数値範囲を縮小することを特徴とする付記2または3に記載の復号装置。
【0206】
(付記7)前記個別復号処理部によって復号結果が出力された場合に、前記データ列の各位置のうち、前記復号対象の1つ先の位置を次の復号対象とすることを特徴とする付記6に記載の復号装置。
【0207】
(付記8)前記導出部は、前記グループごとに、前記最小の発生確率に相当する割合による前記所定の数値範囲の減少幅が対応付けられた対応情報に基づいて、前記復号対象の位置が属するグループに対応する前記減少幅を導出することを特徴とする付記1〜3のいずれか一つに記載の復号装置。
【0208】
(付記9)前記減少幅に前記商を乗じた幅だけ縮小した前記数値範囲が前記符号値以下であり、または前記減少幅に前記商を乗じた幅だけ縮小した前記数値範囲が前記閾値未満である場合に、前記一括復号処理部は、前記商だけ連続する前記所定シンボルとなる復号結果を出力せず、前記個別復号処理部は、前記復号対象の位置を復号した復号結果を出力することを特徴とする付記6または7に記載の復号装置。
【0209】
(付記10)前記データ列の各位置は、同一グループ内の各位置における前記発生確率の最大値と最小値との差が所定値以内になるように前記複数のグループに分けられていることを特徴とする付記1〜9のいずれか一つに記載の復号装置。
【0210】
(付記11)マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から前記算術符号化の前のデータ列を復号する復号方法において、
前記数値範囲を記憶し、
前記データ列の各位置における所定シンボルの発生確率を取得し、
取得した発生確率の中の、前記データ列を区切った複数のグループのうちの復号対象の位置が属するグループにおける最小の発生確率に基づく前記数値範囲の減少幅を導出し、
前記数値範囲の限界値と前記符号値との差分を、前記導出した減少幅によって除算し、
除算により得た商が所定値以上である場合に、前記商だけ連続する前記所定シンボルとなる、前記復号対象の位置以降の復号結果を出力することを特徴とする復号方法。
【0211】
(付記12)マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から前記算術符号化の前のデータ列を復号する復号プログラムにおいて、
前記数値範囲を記憶し、
前記データ列の各位置における所定シンボルの発生確率を取得し、
取得した発生確率の中の、前記データ列を区切った複数のグループのうちの復号対象の位置が属するグループにおける最小の発生確率に基づく前記数値範囲の減少幅を導出し、
前記数値範囲の限界値と前記符号値との差分を、前記導出した減少幅によって除算し、
除算により得た商が所定値以上である場合に、前記商だけ連続する前記所定シンボルとなる、前記復号対象の位置以降の復号結果を出力する処理をコンピュータに実行させることを特徴とする復号プログラム。
【符号の説明】
【0212】
x1〜x10 位置
p1〜p10,prob1〜probM 発生確率
100 復号装置
101 復号対象位置
102 符号値
110,611 データ列
111〜113,2001〜2006 グループ
121〜123 数値範囲
121a 限界値
122a 減少幅
122b 差分
200 情報処理装置
201 バス
310,320,1400,2110,2120 対応情報
610 ストリームデータ
1103,1111〜1113,1308 シフト部
1110 再正規化制御部
1114 OR部
1221〜122M 境界値算出部

【特許請求の範囲】
【請求項1】
マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から前記算術符号化の前のデータ列を復号する復号装置において、
前記数値範囲を記憶する記憶部と、
前記データ列の各位置における所定シンボルの発生確率を取得する取得部と、
前記取得部によって取得された発生確率の中の、前記データ列を区切った複数のグループのうちの復号対象の位置が属するグループにおける最小の発生確率に基づく前記数値範囲の減少幅を導出する導出部と、
前記数値範囲の限界値と前記符号値との差分を、前記導出部によって導出された減少幅によって除算する除算部と、
前記除算部によって得られた商が所定値以上である場合に、前記商だけ連続する前記所定シンボルとなる、前記復号対象の位置以降の復号結果を出力する一括復号処理部と、
を備えることを特徴とする復号装置。
【請求項2】
前記商が前記所定値以上である場合に、前記記憶部に記憶された数値範囲の前記限界値を、前記減少幅に前記商を乗じた幅だけ変化させて前記数値範囲を縮小する縮小部を備えることを特徴とする請求項1に記載の復号装置。
【請求項3】
前記除算部は、前記限界値と前記符号値との差分および前記限界値と所定の閾値との差分のうちの小さい方の差分を前記減少幅によって除算し、
前記縮小部によって縮小された数値範囲の幅が前記所定の閾値以上となるように前記数値範囲および前記符号値を正規化する正規化部を備えることを特徴とする請求項2に記載の復号装置。
【請求項4】
前記導出部は、
前記最小の発生確率を特定する特定部と、
前記記憶部によって記憶された数値範囲を、前記特定部によって特定された発生確率に相当する割合で縮小した場合における前記数値範囲の減少幅を算出する算出部と、
を備えることを特徴とする請求項1〜3のいずれか一つに記載の復号装置。
【請求項5】
前記一括復号処理部によって復号結果が出力された場合に、前記データ列の各位置のうち、前記復号対象の位置から前記商の数だけ先の位置を次の復号対象とすることを特徴とする請求項1〜4のいずれか一つに記載の復号装置。
【請求項6】
前記商が前記所定値未満である場合に、前記記憶部によって記憶された数値範囲と、前記取得部によって取得された発生確率のうち前記復号対象の位置における発生確率と、前記符号値と、に基づく前記復号対象の位置の復号結果を出力する個別復号処理部を備え、
前記縮小部は、前記個別復号処理部によって復号結果が出力された場合に、前記個別復号処理部によって出力された復号結果と、前記復号対象の位置における発生確率と、に応じて前記記憶部によって記憶された数値範囲を縮小することを特徴とする請求項2または3に記載の復号装置。
【請求項7】
前記導出部は、前記グループごとに、前記最小の発生確率に相当する割合による前記所定の数値範囲の減少幅が対応付けられた対応情報に基づいて、前記復号対象の位置が属するグループに対応する前記減少幅を導出することを特徴とする請求項1〜3のいずれか一つに記載の復号装置。
【請求項8】
前記減少幅に前記商を乗じた幅だけ縮小した前記数値範囲が前記符号値以下であり、または前記減少幅に前記商を乗じた幅だけ縮小した前記数値範囲が前記閾値未満である場合に、前記一括復号処理部は、前記商だけ連続する前記所定シンボルとなる復号結果を出力せず、前記個別復号処理部は、前記復号対象の位置を復号した復号結果を出力することを特徴とする請求項6に記載の復号装置。
【請求項9】
マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から前記算術符号化の前のデータ列を復号する復号方法において、
前記数値範囲を記憶し、
前記データ列の各位置における所定シンボルの発生確率を取得し、
取得した発生確率の中の、前記データ列を区切った複数のグループのうちの復号対象の位置が属するグループにおける最小の発生確率に基づく前記数値範囲の減少幅を導出し、
前記数値範囲の限界値と前記符号値との差分を、前記導出した減少幅によって除算し、
除算により得た商が所定値以上である場合に、前記商だけ連続する前記所定シンボルとなる、前記復号対象の位置以降の復号結果を出力することを特徴とする復号方法。
【請求項10】
マルチコンテキスト型の算術符号化により所定の数値範囲に割り当てられた符号値から前記算術符号化の前のデータ列を復号する復号プログラムにおいて、
前記数値範囲を記憶し、
前記データ列の各位置における所定シンボルの発生確率を取得し、
取得した発生確率の中の、前記データ列を区切った複数のグループのうちの復号対象の位置が属するグループにおける最小の発生確率に基づく前記数値範囲の減少幅を導出し、
前記数値範囲の限界値と前記符号値との差分を、前記導出した減少幅によって除算し、
除算により得た商が所定値以上である場合に、前記商だけ連続する前記所定シンボルとなる、前記復号対象の位置以降の復号結果を出力する処理をコンピュータに実行させることを特徴とする復号プログラム。

【図1−1】
image rotate

【図1−2】
image rotate

【図1−3】
image rotate

【図2】
image rotate

【図3−1】
image rotate

【図3−2】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21−1】
image rotate

【図21−2】
image rotate


【公開番号】特開2013−90189(P2013−90189A)
【公開日】平成25年5月13日(2013.5.13)
【国際特許分類】
【出願番号】特願2011−229731(P2011−229731)
【出願日】平成23年10月19日(2011.10.19)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】