1. 図7によるオーディオエンコーダ
図7は、本発明の実施形態によるオーディオエンコーダの略ブロック図を示す。オーディオエンコーダ700は、入力されたオーディオ情報710を受信し、さらに、それに基づいて符号化されたオーディオ情報712を提供するように構成される。
オーディオエンコーダは、周波数領域オーディオ表現722がスペクトル値のセットを含むように、入力されたオーディオ情報710の時間領域表現に基づいて周波数領域オーディオ表現722を提供するように構成されるエネルギー圧縮の時間領域−周波数領域コンバータ720を含む。
オーディオエンコーダ700は、符号化されたオーディオ情報712を得るために(例えば複数の可変長コードワードを含みうる)可変長コードワードを用いて、(周波数領域オーディオ表現722を形成するスペクトル値のセットから)スペクトル値またはその前処理されたバージョンを符号化するように構成される算術エンコーダ730も含む。
算術エンコーダ730は、コンテクスト状態に基づいてコード値上に(すなわち可変長コードワード上に)、スペクトル値またはスペクトル値の最上位ビットプレーンの値をマップするように構成される。
算術エンコーダは、(現在の)コンテクスト状態に基づいて、コード値上への、スペクトル値のまたはスペクトル値の最上位ビットプレーンのマッピングを表すマッピングルールを選択するように構成される。算術エンコーダは、複数の前に符号化された(好ましくは、必ずではないが、隣接する)スペクトル値に基づいて、現在のコンテクスト状態または現在のコンテクスト状態を表す数値的な現在のコンテクスト値を決定するように構成される。
この目的のために、算術エンコーダは、エントリが数値的なコンテクスト値中の重要な状態値および数値的なコンテクスト値の間隔の境界の両方を定義するハッシュテーブルを評価するように構成される。
hash_table(以下において「ari_hash_m」にも指定される)は、好ましくは図22(1)、図22(2)、図22(3)および図22(4)のテーブル表現において示されるように定義される。
さらに、算術エンコーダは、好ましくは、数値的な現在のコンテクスト値がハッシュテーブル(ari_hash_m)のエントリによって表されるテーブルコンテクスト値と同一であるかどうかを決定するためにおよび/または数値的な現在のコンテクスト値が位置するハッシュテーブル(ari_hash_m)のエントリによって表される間隔を決定するためにハッシュテーブル(ari_hash_m)を評価するように、さらに、その評価の結果に基づいて選択されたマッピングルールを表すマッピングルールインデックス値(例えばここに「pki」によって指定される)を導き出すように構成される。
場合によっては、マッピングルールインデックス値は、重要な状態値である数値的な(現在の)コンテクスト値と個々に関連しうる。また、共通のマッピングルールインデックス値は、間隔境界(その間隔境界は、好ましくは、ハッシュテーブルのエントリによって定義される)によって囲まれる間隔内に位置する異なる数値的な(現在の)コンテクスト値と関連しうる。
明らかなように、(符号化されたオーディオ情報712の)コード値上への、(周波数領域オーディオ表現722の)スペクトル値のまたはスペクトル値の最上位ビットプレーンのマッピングは、マッピングルール742を用いてスペクトル値符号化740によって実行されうる。状態トラッカ750は、コンテクスト状態を追跡するように構成されうる。状態トラッカ750は、現在のコンテクスト状態を表す情報754を提供する。現在のコンテクスト状態を表す情報754は、好ましくは、数値的な現在のコンテクスト値の形式をとりうる。マッピングルールセレクタ760は、コード値上への、スペクトル値のまたはスペクトル値の最上位ビットプレーンのマッピングを表すマッピングルール、例えば、累積度数テーブルを選択するように構成される。したがって、マッピングルールセレクタ760は、マッピングルール情報742をスペクトル値符号化740に提供する。マッピングルール情報742は、マッピングルールインデックス値のまたはマッピングルールインデックス値に基づいて選択される累積度数テーブルの形式をとりうる。マッピングルールセレクタ760は、エントリが数値的なコンテクスト値中の重要な状態値および数値的なコンテクスト値の間隔の境界の両方を定義するハッシュテーブル762を含む(または少なくとも評価する)。好ましくは、ハッシュテーブル762(ari_hash_m[742])のエントリは、図22(1)から図22(4)のテーブル表現において示されるように定義される。ハッシュテーブル762は、マッピングルールを選択するためにすなわちマッピングルール情報742を提供するために評価される。
好ましくは、必ずではないが、マッピングルールインデックス値は、重要な状態値である数値的なコンテクスト値と個々に関連しうり、さらに、共通のマッピングルールインデックス値は、間隔境界によって囲まれる間隔内に位置する異なる数値的なコンテクスト値と関連しうる。
上記を要約すると、オーディオエンコーダ700は、時間領域−周波数領域コンバータによって提供される周波数領域オーディオ表現の算術符号化を実行する。 算術符号化は、マッピングルール(例えば累積度数テーブル)が前に符号化されたスペクトル値に基づいて選択されるように、コンテクストに依存する。したがって、互いにおよび/または現在符号化されたスペクトル値(すなわち現在符号化されたスペクトル値の所定の環境内のスペクトル値)に時間および/または周波数(または少なくとも所定の環境内)において隣接するスペクトル値は、算術符号化によって評価される確率分布を調整するために、算術符号化において考慮される。適切なマッピングルールを選択するときに、状態トラッカ750によって提供される数値的な現在のコンテクスト値754が評価される。典型的に異なるマッピングルールの数が数値的な現在のコンテクスト値754の可能な値の数よりも著しく小さいので、マッピングルールセレクタ760は、(例えばマッピングルールインデックス値によって表される)同じマッピングルールを比較的多数の異なる数値的なコンテクスト値に割り当てる。それにしても、典型的に、特定のマッピングルールが良好な符号化効率を得るために関連すべきである(特定の数値的なコンテクスト値によって表される)特定のスペクトル構成がある。
数値的な現在のコンテクスト値に基づいてマッピングルールの選択は、単一のハッシュテーブルのエントリが重要な状態値および数値的な(現在の)コンテクスト値の間隔の境界の両方を定義する場合、特に高い計算効率で実行できることが見いだされている。さらに、図22(1)、図22(2)、図22(3)および図22(4)に定義されるようなハッシュテーブルの使用は、特に高い符号化効率をもたらすことが見いだされている。このメカニズムは、前記ハッシュテーブルとの併用で、マッピングルール選択の要求によく適していることが見いだされているが、その理由は、単一の重要な状態値(または重要な数値的なコンテクスト値)が(共通のマッピングルールが関連する)複数の重要でない状態値の左側間隔および(共通のマッピングルールが関連する)複数の重要でない状態値の右側間隔の間に埋め込まれる多くの場合があるからである。また、エントリが図22(1)、図22(2)、図22(3)および図22(4)のテーブルにおいて定義されさらに重要な状態値および数値的な(現在の)コンテクスト値の間隔の境界の両方を定義する単一のハッシュテーブルを用いるメカニズムは、異なる場合を効率的に取り扱うことができ、そこにおいて、例えば、中間に重要な状態値なしで(重要でない数値的なコンテクスト値にも指定される)重要でない状態値の2つの隣接する間隔がある。特に高い計算効率は、テーブルアクセスの数が少なく保たれるため達成される。例えば、単一の反復的なテーブル検索は、数値的な現在のコンテクスト値が前記ハッシュテーブルのエントリによって定義される重要な状態値のいずれかに等しいかどうかをまたは数値的な現在のコンテクスト値が重要でない状態値の間隔のどれに位置するかを見いだすために大部分の実施形態において十分である。したがって、時間がかかることおよびエネルギーを消耗することの両方であるテーブルアクセスの数は、少なく保つことができる。このように、ハッシュテーブル762を用いるマッピングルールセレクタ760は、計算の複雑度に関する特に効率的なマッピングルールセレクタとして考慮されうり、その一方で、(ビットレートに関して)良好な符号化効率を得ることをさらに可能にする。
数値的な現在のコンテクスト値754からマッピングルール情報742の導出に関する詳細が以下に記載される。
2. 図8によるオーディオデコーダ
図8は、オーディオデコーダ800の略ブロック図を示す。オーディオデコーダ800は、符号化されたオーディオ情報810を受信し、さらに、それに基づいて復号化されたオーディオ情報812を提供するように構成される。
オーディオデコーダ800は、スペクトル値の算術的に符号化された表現821に基づいて複数のスペクトル値822を提供するように構成される算術デコーダ820を含む。
オーディオデコーダ800は、復号化されたスペクトル値822を受信し、さらに、復号化されたオーディオ情報812を得るために、復号化されたスペクトル値822を用いて、復号化されたオーディオ情報を構成しうる時間領域オーディオ表現812を提供するように構成される周波数領域−時間領域コンバータ830も含む。
算術デコーダ820は、スペクトル値決定器824を含み、それは、スペクトル値の算術的に符号化された表現821のコード値を、1つ以上の復号化されたスペクトル値または少なくとも1つ以上の復号化されたスペクトル値の部分(例えば最上位ビットプレーン)を表すシンボルコード上にマップするように構成される。スペクトル値決定器824は、マッピングルール情報828aによって表されうるマッピングルールに基づいてマッピングを実行するように構成されうる。マッピングルール情報828aは、例えば、マッピングルールインデックス値のまたは(例えばマッピングルールインデックス値に基づいて選択される)選択された累積度数テーブルの形式をとりうる。
算術デコーダ820は、(コンテクスト状態情報826aによって表されうる)コンテクスト状態に基づいて、(復号化された形式で1つ以上のスペクトル値またはその最上位ビットプレーンを表す)シンボルコード上への、(スペクトル値の算術的に符号化された表現821によって表される)コード値のマッピングを表すマッピングルール(例えば累積度数テーブル)を選択するように構成される。
算術デコーダ820は、複数の前に復号化されたスペクトル値に基づいて(数値的な現在のコンテクスト値によって表される)現在のコンテクスト状態を決定するように構成される。この目的のために、前に復号化されたスペクトル値を表す情報を受信しさらにそれに基づいて現在のコンテクスト状態を表す数値的な現在のコンテクスト値826aを提供する状態トラッカ826が用いられうる。
算術デコーダは、マッピングルールを選択するために、エントリが数値的なコンテクスト値中の重要な状態値および数値的なコンテクスト値の間隔の境界の両方を定義するハッシュテーブル829を評価するようにも構成される。好ましくは、ハッシュテーブル829(ari_hash_m[742])のエントリは、図22(1)から図22(4)のテーブル表現において示されるように定義される。ハッシュテーブル829は、マッピングルールを選択するためにすなわちマッピングルール情報828aを提供するために評価される。
好ましくは、マッピングルールインデックス値は、重要な状態値である数値的なコンテクスト値と個々に関連し、さらに、共通のマッピングルールインデックス値は、間隔境界によって囲まれる間隔内に位置する異なる数値的なコンテクスト値と関連する。ハッシュテーブル829の評価は、例えば、マッピングルールセレクタ828の一部でありうるハッシュテーブル評価器を用いて実行されうる。したがって、マッピングルール情報828aは、例えば、マッピングルールインデックス値の形式で、現在のコンテクスト状態を表す数値的な現在のコンテクスト値826aに基づいて得られる。マッピングルールセレクタ828は、例えば、ハッシュテーブル829の評価の結果に基づいてマッピングルールインデックス値828aを決定しうる。その代わりに、ハッシュテーブル829の評価は、マッピングルールインデックス値を直接的に提供しうる。
オーディオ信号デコーダ800の機能に関して、算術デコーダ820は、平均して、復号化されるスペクトル値によく適しているマッピングルール(例えば累積度数テーブル)を選択するように構成される点に留意すべきであり、マッピングルールは、(例えば数値的な現在のコンテクスト値によって表される)現在のコンテクスト状態に基づいて選択されるので、複数の前に復号化されたスペクトル値に基づいて次々に決定される。したがって、復号化される隣接するスペクトル値間の統計依存を利用することができる。さらに、算術デコーダ820は、マッピングルールセレクタ828を用いて、計算の複雑度、テーブルサイズおよび符号化効率間の良好なトレードオフで、効率的に実施されうる。エントリが重要な状態値および重要でない状態値の間隔の間隔境界の両方を表す(単一の)ハッシュテーブル829を評価することによって、単一の反復的なテーブル検索は、数値的な現在のコンテクスト値826aからマッピングルール情報828aを導き出すために十分でありうる。さらに、図22(1)、図22(2)、図22(3)および図22(4)に定義されるようなハッシュテーブルの使用は、特に高い符号化効率をもたらすことが見いだされている。したがって、比較的多数の異なる可能な数値的な(現在の)コンテクスト値を比較的より少数の異なるマッピングルールインデックス値にマップすることが可能である。上述のように、さらに図22(1)から図22(4)のテーブル表現において定義されるように、ハッシュテーブル829を用いることによって、多くの場合、単一の分離された重要な状態値(重要なコンテクスト値)が重要でない状態値(重要でないコンテクスト値)の左側間隔および重要でない状態値(重要でないコンテクスト値)の右側間隔の間に埋め込まれる知見を利用することが可能であり、異なるマッピングルールインデックス値は、左側間隔の状態値(コンテクスト値)および右側間隔の状態値(コンテクスト値)を比較するときに、重要な状態値(重要なコンテクスト値)と関連する。しかしながら、ハッシュテーブル829の使用は、中間に重要な状態値なしで、数値的な状態値の2つの間隔がすぐに隣接する状況のためにもよく適している。
結論として、ハッシュテーブル829「ari_hash_m[742]」を評価するマッピングルールセレクタ828は、現在のコンテクスト状態に基づいて(または現在のコンテクスト状態を表す数値的な現在のコンテクスト値に基づいて)、マッピングルールを選択するときに(またはマッピングルールインデックス値を提供するときに)、特に良好な効率をもたらすが、その理由は、ハッシングメカニズムがオーディオデコーダにおいて典型的なコンテクストシナリオによく適しているからである。
詳細が以下に記載される。
3. 図9によるコンテクスト値ハッシングメカニズム
以下において、マッピングルールセレクタ760および/またはマッピングルールセレクタ828において実施されうるコンテクストハッシングメカニズムが開示される。ハッシュテーブル762および/またはハッシュテーブル829は、図22(1)から図22(4)のテーブル表現において定義されるように、前記コンテクスト値ハッシングメカニズムを実施するために用いられうる。
数値的な現在のコンテクスト値ハッシングシナリオを示す図9をこれから参照して、詳細が記載される。図9のグラフ表現において、横座標910は、数値的な現在のコンテクスト値の値(すなわち数値的なコンテクスト値)を表す。縦座標912は、マッピングルールインデックス値を表す。マーキング914は、(重要でない状態を表す)重要でない数値的なコンテクスト値のためのマッピングルールインデックス値を表す。マーキング916は、個々の(真の)重要な状態を表す「individual(個々の)」(真の)重要な数値的なコンテクスト値のためのマッピングルールインデックス値を表す。マーキング916は、「improper(不適切な)」重要な状態を表す「improper(不適切な)」数値的なコンテクスト値のためのマッピングルールインデックス値を表し、「improper(不適切な)」重要な状態は、同じマッピングルールインデックス値が重要でない数値的なコンテクスト値の隣接する間隔のうちの1つに関して関連する重要な状態である。
明らかなように、ハッシュテーブルエントリ「ari_hash_m[i1]」は、c1の数値的なコンテクスト値を有する個々の(真の)重要な状態を表す。明らかなように、マッピングルールインデックス値mriv1は、数値的なコンテクスト値c1を有する個々の(真の)重要な状態と関連する。したがって、数値的なコンテクスト値c1およびマッピングルールインデックス値mriv1の両方は、ハッシュテーブルエントリ「ari_hash_m[i1]」によって表されうる。数値的なコンテクスト値の間隔932は、数値的なコンテクスト値c1によって囲まれ、数値的なコンテクスト値c1は、間隔932の最も大きい数値的なコンテクスト値がc1−1に等しいように、間隔932に属しない。(mriv1と異なる)mriv4のマッピングルールインデックス値は、間隔932の数値的なコンテクスト値と関連する。マッピングルールインデックス値mriv4は、例えば、付加的なテーブル「ari_lookup_m」のテーブルエントリ「ari_lookup_m[i1−1]」によって表されうる。
さらに、マッピングルールインデックス値mriv2は、間隔934内に位置する数値的なコンテクスト値と関連しうる。間隔934の下限は、重要な数値的なコンテクスト値である数値的なコンテクスト値c1によって決定され、数値的なコンテクスト値c1は、間隔932に帰属しない。したがって、間隔934の最も小さい値は、(整数の数値的なコンテクスト値と仮定する)c1+1に等しい。間隔934の別の境界は、数値的なコンテクスト値c2によって決定され、数値的なコンテクスト値c2は、間隔934の最も大きい値がc2−1に等しいように、間隔934に属しない。数値的なコンテクスト値c2は、ハッシュテーブルエントリ「ari_hash_m[i2]」によって表されるいわゆる「improper(不適切な)」数値的なコンテクスト値である。例えば、マッピングルールインデックス値mriv2は、「improper(不適切な)」重要な数値的なコンテクスト値c2と関連する数値的なコンテクスト値が数値的なコンテクスト値c2によって囲まれる間隔934と関連するマッピングルールインデックス値に等しいように、数値的なコンテクスト値c2と関連しうる。さらに、数値的なコンテクスト値の間隔936も、数値的なコンテクスト値c2によって囲まれ、数値コンテクスト値c2は、間隔936の最も小さい数値的なコンテクスト値がc2+1に等しいように、間隔936に属しない。マッピングルールインデックス値mriv2と典型的に異なるマッピングルールインデックス値mriv3は、間隔936の数値的なコンテクスト値と関連する。
明らかなように、数値的なコンテクスト値の間隔932と関連するマッピングルールインデックス値mriv4は、テーブル「ari_lookup_m」のエントリ「ari_lookup_m[i1−1]」によって表されうり、間隔934の数値的なコンテクスト値と関連するマッピングルールインデックスmriv2は、テーブル「ari_lookup_m」のテーブルエントリ「ari_lookup_m[i1]」によって表されうり、さらに、マッピングルールインデックス値mriv3は、テーブル「ari_lookup_m」のテーブルエントリ「ari_lookup_m[i2]」によって表されうる。ここに示される例において、ハッシュテーブルインデックス値i2は、ハッシュテーブルインデックス値i1よりも1だけ大きくてもよい。
図9から明らかなように、マッピングルールセレクタ760またはマッピングルールセレクタ828は、数値的な現在のコンテクスト値754、826aを受信しうり、さらに、テーブル「ari_hash_m」のエントリを評価することによって、数値的な現在のコンテクスト値が(「individual(個々の)」重要な状態値または「improper(不適切な)」重要な状態値であるかどうかにかかわりなく)重要な状態値であるかどうかを、または、数値的な現在のコンテクスト値が(「individual(個々の)」または「improper(不適切な)」)重要な状態値c1、c2によって囲まれる間隔932、934、936のうちの1つ内に位置するかどうかを決定しうる。数値的な現在のコンテクスト値が重要な状態値c1、c2に等しいかどうかのチェックと(数値的な現在のコンテクスト値が重要な状態値に等しくない場合において)数値的な現在のコンテクスト値が間隔932、934、936のどれに位置するかの評価との両方は、単一の共通のハッシュテーブル検索を用いて実行されうる。
さらに、ハッシュテーブル「ari_hash_m」の評価は、ハッシュテーブルインデックス値(例えばi1−1、i1またはi2)を得るために用いられうる。このように、マッピングルールセレクタ760、828は、単一のハッシュテーブル762、829(例えばハッシュテーブル「ari_hash_m」)を評価することによって、重要な状態値(例えばc1またはc2)および/または間隔(例えば932、934、936)を指定するハッシュテーブルインデックス値(例えばi1−1、i1またはi2)と数値的な現在のコンテクスト値が(重要な状態値にも指定される)重要なコンテクスト値であるかどうかに関する情報とを得るように構成されうる。
さらに、ハッシュテーブル762、829「ari_hash_m」の評価において、数値的な現在のコンテクスト値が「significant(重要な)」コンテクスト値(または「significant(重要な)」状態値)でないことが見いだされている場合、ハッシュテーブル(「ari_hash_m」)の評価から得られるハッシュテーブルインデックス値(例えばi1−1、i1またはi2)は、数値的なコンテクスト値の間隔932、934、936と関連するマッピングルールインデックス値を得るために用いられうる。例えば、ハッシュテーブルインデックス値(例えばi1−1、i1またはi2)は、数値的な現在のコンテクスト値が位置する間隔932、934、936と関連するマッピングルールインデックス値を表す付加的なマッピングテーブル(例えば「ari_lookup_m」)のエントリを指定するために用いられうる。
詳しくは、アルゴリズム「arith_get_pk」の詳細な議論について以下に述べる(このアルゴリズム「arith_get_pk()」のための異なるオプションがあり、その例が図5eおよび図5fに示される)。
さらに、間隔のサイズは、状況によって異なりうる点に留意すべきである。場合によっては、数値的なコンテクスト値の間隔は、単一の数値的なコンテクスト値を含む。しかしながら、多くの場合、間隔は、複数の数値的なコンテクスト値を含みうる。
4. 図10によるオーディオエンコーダ
図10は、本発明の実施形態によるオーディオエンコーダ1000の略ブロック図を示す。図10によるオーディオエンコーダ1000は、同一の信号および手段が図7および図10に同一の参照番号で指定されるように、図7によるオーディオエンコーダ700と類似している。
オーディオエンコーダ1000は、入力されたオーディオ情報710を受信し、さらに、それに基づいて符号化されたオーディオ情報712を提供するように構成される。オーディオエンコーダ1000は、周波数領域オーディオ表現722がスペクトル値のセットを含むように、入力されたオーディオ情報710の時間領域表現に基づいて周波数領域表現722を提供するように構成されるエネルギー圧縮の時間領域−周波数領域コンバータ720を含む。オーディオエンコーダ1000は、(例えば複数の可変長コードワードを含みうる)符号化されたオーディオ情報712を得るために可変長コードワードを用いて、(周波数領域オーディオ表現722を形成するスペクトル値のセットから)スペクトル値またはその前処理されたバージョンを符号化するように構成される算術エンコーダ1030も含む。
算術エンコーダ1030は、コンテクスト状態に基づいてコード値上に(すなわち可変長コードワード上に)、スペクトル値または複数のスペクトル値を、または、スペクトル値のまたは複数のスペクトル値の最上位ビットプレーンの値をマップするように構成される。算術エンコーダ1030は、コンテクスト状態に基づいてコード値上への、スペクトル値のまたは複数のスペクトル値の、または、スペクトル値のまたは複数のスペクトル値の最上位ビットプレーンのマッピングを表すマッピングルールを選択するように構成される。算術エンコーダは、複数の前に符号化された(好ましくは、必ずではないが隣接する)スペクトル値に基づいて現在のコンテクスト状態を決定するように構成される。この目的のために、算術エンコーダは、符号化される1つ以上のスペクトル値と関連するコンテクスト状態を表す数値的な現在のコンテクスト値の数表現を得るために(例えば対応するマッピングルールを選択するために)、コンテクストサブ区域値に基づいて、1つ以上の前に符号化されたスペクトル値と関連するコンテクスト状態を表す数値的な前のコンテクスト値の数表現を修正するように(例えば対応するマッピングルールを選択するように)構成される。
明らかなように、コード値上への、スペクトル値のまたは複数のスペクトル値の、または、スペクトル値のまたは複数のスペクトル値の最上位ビットプレーンのマッピングは、マッピングルール情報742によって表されるマッピングルールを用いてスペクトル値符号化740によって実行されうる。状態トラッカ750は、コンテクスト状態を追跡するように構成されうる。状態トラッカ750は、符号化される1つ以上のスペクトル値の符号化と関連するコンテクスト状態を表す数値的な現在のコンテクスト値の数表現を得るために、コンテクストサブ区域値に基づいて、1つ以上の前に符号化されたスペクトル値の符号化と関連するコンテクスト状態を表す数値的な前のコンテクスト値の数表現を修正するように構成されうる。数値的な前のコンテクスト値の数表現の修正は、例えば、数値的な前のコンテクスト値および1つ以上のコンテクストサブ区域値を受信しさらに数値的な現在のコンテクスト値を提供する数表現修正器1052によって実行されうる。したがって、状態トラッカ1050は、例えば、数値的な現在のコンテクスト値の形式で、現在のコンテクスト状態を表す情報754を提供する。マッピングルールセレクタ1060は、コード値上への、スペクトル値のまたは複数のスペクトル値の、または、スペクトル値のまたは複数のスペクトル値の最上位ビットプレーンのマッピングを表すマッピングルール、例えば累積度数テーブルを選択しうる。したがって、マッピングルールセレクタ1060は、マッピングルール情報742をスペクトル符号化740に提供する。
いくつかの実施形態において、状態トラッカ1050は、状態トラッカ750または状態トラッカ826と同一であってもよい点に留意すべきである。また、いくつかの実施形態において、マッピングルールセレクタ1060は、マッピングルールセレクタ760またはマッピングルールセレクタ828と同一であってもよい点にも留意すべきである。好ましくは、マッピングルールセレクタ828は、図22(1)から図22(4)のテーブル表現において定義されるように、マッピングルールの選択のためのハッシュテーブル「ari_hash_m[742]」を用いるように構成されうる。例えば、マッピングルールセレクタは、図7および図8に関して上述のような機能を実行しうる。
上記を要約すると、オーディオエンコーダ1000は、時間領域−周波数領域コンバータによって提供される周波数領域オーディオ表現の算術符号化を実行する。算術符号化は、マッピングルール(例えば累積度数テーブル)が前に符号化されたスペクトル値に基づいて選択されるように、コンテクストに依存する。したがって、互いにおよび/または現在符号化されたスペクトル値(すなわち現在符号化されたスペクトル値の所定の環境内のスペクトル値)に時間および/または周波数(または少なくとも所定の環境内)において隣接するスペクトル値は、算術符号化によって評価される確率分布を調整するために、算術符号化において考慮される。
数値的な現在のコンテクスト値を決定するときに、1つ以上の前に符号化されたスペクトル値と関連するコンテクスト状態を表す数値的な前のコンテクスト値の数表現は、符号化される1つ以上のスペクトル値と関連するコンテクスト状態を表す数値的な現在のコンテクスト値の数表現を得るために、コンテクストサブ区域値に基づいて修正される。このアプローチは、完全な再計算が従来のアプローチにおいてかなりの量のリソースを消費するという数値的な現在のコンテクスト値の完全な再計算を回避することを可能にする。多種多様な可能性は、数値的な前のコンテクスト値の数表現のリスケーリングの組合せ、数値的な前のコンテクスト値の数表現へのまたは数値的な前のコンテクスト値の処理された数表現へのコンテクストサブ区域値またはそれから導き出される値の加算、コンテクストサブ区域値に基づく数値的な前のコンテクスト値の(全体の数表現よりはむしろ)数表現の部分の置換、その他を含む、数値的な前のコンテクスト値の数表現の修正のために存在する。このように、典型的に、数値的な現在のコンテクスト値の数値的な表現は、数値的な前のコンテクスト値の数表現に基づいて、さらに、少なくとも1つのコンテクストサブ区域値にも基づいて得られ、典型的に、演算の組合せは、例えば、加算演算、減算演算、乗算演算、分割演算、ブールのAND演算、ブールのOR演算、ブールのNAND演算、ブールのNOR演算、ブールの否定演算、補数演算またはシフト演算からの2つ以上の演算のように、数値的な前のコンテクスト値とコンテクストサブ区域値を組み合わせるために実行される。したがって、少なくとも数値的な前のコンテクスト値の数表現の部分は、数値的な前のコンテクスト値から数値的な現在のコンテクスト値を導き出すときに、(異なる位置への任意のシフトを除いて)典型的に不変に維持される。対照的に、数値的な前のコンテクスト値の数表現の他の部分は、1つ以上のコンテクストサブ区域値に基づいて変更される。このように、数値的な現在のコンテクスト値は、比較的少ない計算量で得ることができ、その一方で、数値的な現在のコンテクスト値の完全な再計算を回避する。
このように、マッピングルールセレクタ1060による使用によく適しさらに図22(1)、図22(2)、図22(3)、図22(4)のテーブル表現において定義されるようなハッシュテーブルari_hash_mとの併用での使用に特によく適している意味のある数値的な現在のコンテクスト値を得ることができる。
したがって、効率的な符号化は、コンテクスト計算を十分に単純に保つことによって達成することができる。
5. 図11によるオーディオデコーダ
図11は、オーディオデコーダ1100の略ブロック図を示す。オーディオデコーダ1100は、同一の信号、手段および機能が同一の参照番号で指定されるように、図8によるオーディオデコーダ800と類似している。
オーディオデコーダ1100は、符号化されたオーディオ情報810を受信し、さらに、それに基づいて復号化されたオーディオ情報812を提供するように構成される。オーディオデコーダ1100は、スペクトル値の算術的に符号化された表現821に基づいて複数の復号化されたスペクトル値822を提供するように構成される算術デコーダ1120を含む。オーディオデコーダ1100は、復号化されたスペクトル値822を受信し、さらに、復号化されたオーディオ情報812を得るために、復号化されたスペクトル値822を用いて、復号化されたオーディオ情報を構成しうる時間領域オーディオ表現812を提供するように構成される周波数領域−時間領域コンバータ830も含む。
算術デコーダ1120は、1つ以上の復号化されたスペクトル値または少なくとも1つ以上の復号化されたスペクトル値の部分(例えば最上位ビットプレーン)を表すシンボルコード上に、スペクトル値の算術的に符号化された表現821のコード値をマップするように構成されるスペクトル値決定器824を含む。スペクトル値決定器824は、マッピングルール情報828aによって表されうるマッピングルールに基づいてマッピングを実行するように構成されうる。マッピングルール情報828aは、例えば、マッピングルールインデックス値を含みうり、または、累積度数テーブルのエントリの選択されたセットを含みうる。
算術デコーダ1120は、コンテクスト状態がコンテクスト状態情報1126aによって表されうるコンテクスト状態に基づいて(1つ以上のスペクトル値を表す)シンボルコード上への、(スペクトル値の算術的に符号化された表現821によって表される)コード値のマッピングを表すマッピングルール(例えば累積度数テーブル)を選択するように構成される。コンテクスト状態情報1126aは、数値的な現在のコンテクスト値の形式をとりうる。算術デコーダ1120は、複数の前に復号化されたスペクトル値822に基づいて現在のコンテクスト状態を決定するように構成される。この目的のために、前に復号化されたスペクトル値を表す情報を受信する状態トラッカ1126が用いられうる。算術デコーダは、復号化される1つ以上のスペクトル値と関連するコンテクスト状態を表す数値的な現在のコンテクスト値の数表現を得るために、コンテクストサブ区域値に基づいて、1つ以上の前に復号化されたスペクトル値と関連するコンテクスト状態を表す数値的な前のコンテクスト値の数表現を修正するように構成される。数値的な前のコンテクスト値の数表現の修正は、例えば、状態トラッカ1126の部分である数表現修正器1127によって実行されうる。したがって、現在のコンテクスト状態情報1126aは、例えば、数値的な現在のコンテクスト値の形式で得られる。マッピングルールの選択は、現在のコンテクスト状態情報1126aからマッピングルール情報828aを導き出しさらにマッピングルール情報828aをスペクトル値決定器824に提供するマッピングルールセレクタ1128によって実行されうる。好ましくは、マッピングルールセレクタ1128は、図22(1)から図22(4)のテーブル表現において定義されるように、マッピングルールの選択のためのハッシュテーブル「ari_hash_m[742]」を用いるうに構成されうる。例えば、マッピングルールセレクタは、図7および図8に関して上述のような機能を実行しうる。
オーディオ信号デコーダ1100の機能に関して、算術デコーダ1120は、平均して、復号化されるスペクトル値によく適しているマッピングルール(例えば累積度数テーブル)を選択するように構成される点に留意すべきであり、マッピングルールは、現在のコンテクスト状態に基づいて選択されるので、複数の前に復号化されたスペクトル値に基づいて次々に決定される。したがって、復号化される隣接するスペクトル値間の統計依存を利用することができる。
さらに、復号化される1つ以上のスペクトル値の復号化と関連するコンテクスト状態を表す数値的な現在のコンテクスト値の数表現を得るために、コンテクストサブ区域値に基づいて、1つ以上の前に復号化されたスペクトル値の復号化と関連するコンテクスト状態を表す数値的な前のコンテクスト値の数表現を修正することによって、比較的少ない計算量で、マッピングルールインデックス値へのマッピングによく適しさらに図22(1)、図22(2)、図22(3)、図22(4)のテーブル表現において定義されるようなハッシュテーブルari_hash_mとの併用での使用に特によく適している現在のコンテクスト状態に関する意味のある情報を得ることが可能である。少なくとも(おそらくビットシフトされまたはスケールされたバージョンにおいて)数値的な前のコンテクスト値の数表現の部分を維持するとともに、数値的な前のコンテクスト値において考慮されなかったが数値的な現在のコンテクスト値において考慮されるべきであるコンテクストサブ区域値に基づいて数値的な前のコンテクスト値の数表現の別の部分を更新することによって、数値的な現在のコンテクスト値を導き出す演算の数を相当に少なく保つことができる。また、隣接するスペクトル値を復号化するために用いられるコンテクストが典型的に類似しまたは相関するという事実を利用することが可能である。例えば、第1のスペクトル値の(または第1の複数のスペクトル値の)復号化のためのコンテクストは、前に復号化されたスペクトル値の第1のセットに依存する。第1のスペクトル値(またはスペクトル値の第1のセット)に隣接する第2のスペクトル値(またはスペクトル値の第2のセット)の復号化のためのコンテクストは、前に復号化されたスペクトル値の第2のセットを含みうる。第1のスペクトル値および第2のスペクトル値が(例えば関連した周波数に関して)隣接されると仮定されるので、第1のスペクトル値の符号化のためのコンテクストを決定するスペクトル値の第1のセットは、第2のスペクトル値の復号化のためのコンテクストを決定するスペクトル値の第2のセットといくらかのオーバーラップを含みうる。したがって、第2のスペクトル値の復号化のためのコンテクスト状態は、第1のスペクトル値の復号化のためのコンテクスト状態といくらかの相関を含むことが容易に理解できる。コンテクスト導出すなわち数値的な現在のコンテクスト値の導出の計算効率は、そのような相関を利用することによって達成することができる。隣接するスペクトル値の復号化のためのコンテクスト状態間の(例えば数値的な前のコンテクスト値によって表されるコンテクスト状態および数値的な現在のコンテクスト値によって表されるコンテクスト状態間の)相関は、数値的な前のコンテクスト状態の導出のために考慮されないコンテクストサブ区域値に依存する数値的な前のコンテクスト値のそれらの部分だけを修正することによって、さらに、数値的な前のコンテクスト値から数値的な現在のコンテクスト値を導き出すことによって、効率的に利用することができることが見いだされている。
結論として、ここに記載されている概念は、数値的な現在のコンテクスト値を導き出すときに、特に良好な計算効率を可能にする。
詳細が以下に記載される。
6. 図12によるオーディオエンコーダ
図12は、本発明の実施形態によるオーディオエンコーダの略ブロック図を示す。図12によるオーディオエンコーダ1200は、同一の手段、信号および機能が同一参照番号で指定されるように、図7によるオーディオエンコーダ700と類似している。
オーディオエンコーダ1200は、入力されたオーディオ情報710を受信し、さらに、それに基づいて符号化されたオーディオ情報712を提供するように構成される。オーディオエンコーダ1200は、周波数領域オーディオ表現722がスペクトル値のセットを含むように、入力されたオーディオ情報710の時間領域オーディオ表現に基づいて周波数領域オーディオ表現722を提供するように構成されるエネルギー圧縮の時間領域−周波数領域コンバータ720を含む。オーディオエンコーダ1200は、(例えば複数の可変長コードワードを含みうる)符号化されたオーディオ情報712を得るために可変長コードワードを用いて、(周波数領域オーディオ表現722を形成するスペクトル値のセットから)スペクトル値または複数のスペクトル値、または、その前処理されたバージョンを符号化するように構成される算術エンコーダ1230も含む。
算術エンコーダ1230は、コンテクスト状態に基づいて、コード値上に(すなわち可変長コードワード上に)、スペクトル値または複数のスペクトル値、または、スペクトル値のまたは複数のスペクトル値の最上位ビットプレーンの値をマップするように構成される。算術エンコーダ1230は、コンテクスト状態に基づいて、コード値上への、スペクトル値のまたは複数のスペクトル値の、または、スペクトル値のまたは複数のスペクトル値の最上位ビットプレーンのマッピングを表すマッピングルールを選択するように構成される。算術エンコーダは、複数の前に符号化された(好ましくは、必ずではないが、隣接する)スペクトル値に基づいて現在のコンテクスト状態を決定するように構成される。この目的のために、算術エンコーダは、前に符号化されたスペクトル値に基づいて複数のコンテクストサブ区域値を得るように、前記コンテクストサブ区域値を格納するように、さらに、格納されたコンテクストサブ区域値に基づいて符号化される1つ以上のスペクトル値と関連する数値的な現在のコンテクスト値を導き出すように構成される。さらに、算術エンコーダは、複数の前に符号化されたスペクトル値と関連する共通のコンテクストサブ区域値を得るために、複数の前に符号化されたスペクトル値によって形成されるベクトルのノルムを計算するように構成される。
明らかなように、コード値上への、スペクトル値のまたは複数のスペクトル値の、または、スペクトル値のまたは複数のスペクトル値の最上位ビットプレーンのマッピングは、マッピングルール情報742によって表されるマッピングルールを用いてスペクトル値符号化740によって実行されうる。状態トラッカ1250は、コンテクスト状態を追跡するように構成されうり、さらに、複数の前に符号化されたスペクトル値と関連する共通のコンテクストサブ区域値を得るために、複数の前に符号化されたスペクトル値によって形成されるベクトルのノルムを計算するためにコンテクストサブ区域値コンピュータ1252を含みうる。状態トラッカ1250は、好ましくは、コンテクストサブ区域値コンピュータ1252によって実行されるコンテクストサブ区域値の前記計算の結果に基づいて現在のコンテクスト状態を決定するようにも構成される。したがって、状態トラッカ1250は、現在のコンテクスト状態を表す情報1254を提供する。マッピングルールセレクタ1260は、コード値上への、スペクトル値のまたはスペクトル値の最上位ビットプレーンのマッピングを表すマッピングルール、例えば累積度数テーブルを選択しうる。したがって、マッピングルールセレクタ1260は、マッピングルール情報742をスペクトル符号化740に提供する。好ましくは、マッピングルールセレクタ1260は、図22(1)から図22(4)のテーブル表現において定義されるように、マッピングルールの選択のためのハッシュテーブル「ari_hash_m[742]」を用いるように構成されうる。例えば、マッピングルールセレクタは、図7および図8に関して上述のような機能を実行しうる。
上記を要約すると、オーディオエンコーダ1200は、時間領域−周波数領域コンバータ720によって提供される周波数領域オーディオ表現の算術符号化を実行する。算術符号化は、マッピングルール(例えば累積度数テーブル)が前に符号化されたスペクトル値に基づいて選択されるように、コンテクストに依存する。したがって、互いにおよび/または現在符号化されたスペクトル値(すなわち現在符号化されたスペクトル値の所定の環境内のスペクトル値)に時間および/または周波数(または少なくとも所定の環境内)において隣接するスペクトル値は、算術符号化によって評価される確率分布を調整するために、算術符号化において考慮される。
数値的な現在のコンテクスト値を提供するために、複数の前に符号化されたスペクトル値と関連するコンテクストサブ区域値は、複数の前に符号化されたスペクトル値によって形成されるベクトルのノルムの計算に基づいて得られる。数値的な現在のコンテクスト値の決定の結果は、現在のコンテクスト状態の選択においてすなわちマッピングルールの選択において適用される。
複数の前に符号化されたスペクトル値によって形成されるベクトルのノルムを計算することによって、符号化される1つ以上のスペクトル値のコンテクストの部分を表す意味のある情報を得ることができ、前に符号化されたスペクトル値のベクトルのノルムは、典型的に比較的少数のビットで表すことができる。このように、数値的な現在のコンテクスト値の導出において後の使用のために格納される必要があるコンテクスト情報の量は、コンテクストサブ区域値の計算のための上述のアプローチを適用することによって十分に少なく保つことができる。前に符号化されたスペクトル値のベクトルのノルムは、典型的にコンテクストの状態に関する最も重要な情報を含むことが見いだされている。対照的に、前記前に符号化されたスペクトル値の符号は、後の使用のために格納される情報の量を低減するために前に復号化されたスペクトル値の符号を無視することに意味があるように、典型的にコンテクストの状態に与える下位の影響を含むことが見いだされている。また、前に符号化されたスペクトル値のベクトルのノルムの計算は、典型的にノルムの計算によって得られる平均効果が実質的に影響を受けないコンテクスト状態に関する最も重要な情報をそのままにするように、コンテクストサブ区域値の導出のための合理的なアプローチであることが見いだされている。要約すると、コンテクストサブ区域値コンピュータ1252によって実行されるコンテクストサブ区域値計算は、コンパクトなコンテクストサブ区域情報を記憶および後の使用に提供することを可能にし、コンテクスト状態に関する最も関連した情報は、情報の量の低減にもかかわらず保存される。
さらに、上述のように得られる数値的な現在のコンテクスト値は、図22(1)から図22(4)のテーブル表現において定義されるように、ハッシュテーブル「ari_hash_m[742]」を用いてマッピングルールの選択に非常によく適していることが見いだされている。例えば、マッピングルールセレクタは、図7および図8に関して上述のような機能を実行しうる。
したがって、入力されたオーディオ情報710の効率的な符号化を達成することができ、その一方で、算術エンコーダ1230によって格納される計算量およびデータの量を十分に少なく保つ。
7. 図13によるオーディオデコーダ
図13は、オーディオデコーダ1300の略ブロック図を示す。オーディオデコーダ1300は、図8によるオーディオデコーダ800および図11によるオーディオデコーダ1100と類似しているので、同一の手段、信号および機能が同一の番号で指定される。
オーディオデコーダ1300は、符号化されたオーディオ情報810を受信し、さらに、それに基づいて復号化されたオーディオ情報812を提供するように構成される。オーディオデコーダ1300は、スペクトル値の算術的に符号化された表現821に基づいて複数の復号化されたスペクトル値822を提供するように構成される算術デコーダ1320を含む。オーディオデコーダ1300は、復号化されたスペクトル値822を受信し、さらに、復号化オーディオ情報812を得るために、復号化されたスペクトル値822を用いて、復号化されたオーディオ情報を構成しうる時間領域オーディオ表現812を提供するように構成される周波数領域時間領域コンバータ830も含む。
算術デコーダ1320は、1つ以上の復号化されたスペクトル値または少なくとも1つ以上の復号化されたスペクトル値の部分(例えば最上位ビットプレーン)を表すシンボルコード上に、スペクトル値の算術的に符号化された表現821のコード値をマップするように構成されるスペクトル値決定器824を含む。スペクトル値決定器824は、マッピングルール情報828aによって表されるマッピングルールに基づいてマッピングを実行するように構成されうる。マッピングルール情報828aは、例えば、マッピングルールインデックス値または累積度数テーブルのエントリの選択されたセットを含みうる。
算術デコーダ1320は、(コンテクスト状態情報1326aによって表されうる)コンテクスト状態に基づいて、(1つ以上のスペクトル値を表す)シンボルコード上への、(スペクトル値の算術的に符号化された表現821によって表される)コード値のマッピングを表すマッピングルール(例えば累積度数テーブル)を選択するように構成される。好ましくは、算術デコーダ1320は、図22(1)から図22(4)のテーブル表現において定義されるように、マッピングルールの選択のためのハッシュテーブル「ari_hash_m[742]」を用いるように構成されうる。例えば、算術デコーダ1320は、図7および図8に関して上述のような機能を実行しうる。算術デコーダ1320は、複数の前に復号化されたスペクトル値822に基づいて現在のコンテクスト状態を決定するように構成される。この目的のために、前に復号化されたスペクトル値を表す情報を受信する状態トラッカ1326が用いられうる。算術デコーダは、前に復号化されたスペクトル値に基づいて複数のコンテクストサブ区域値を得るように、さらに、前記コンテクストサブ区域値を格納するようにも構成される。算術デコーダは、格納されたコンテクストサブ区域値に基づいて復号化される1つ以上のスペクトル値と関連する数値的な現在のコンテクスト値を導き出すように構成される。算術デコーダ1320は、複数の前に復号化されたスペクトル値と関連する共通のコンテクストサブ区域値を得るために、複数の前に復号化されたスペクトル値によって形成されるベクトルのノルムを計算するように構成される。
複数の前の符号化されたスペクトル値によって形成されるベクトルのノルムの計算は、複数の前に復号化されたスペクトル値と関連する共通のコンテクストサブ区域値を得るために、例えば、状態トラッカ1326の部分であるコンテクストサブ区域値コンピュータ1327によって実行されうる。したがって、現在のコンテクスト状態情報1326aは、コンテクストサブ区域値に基づいて得られ、状態トラッカ1326は、好ましくは、格納されたコンテクストサブ区域値に基づいて復号化される1つ以上のスペクトル値と関連する数値的な現在のコンテクスト値を提供する。マッピングルールの選択は、現在のコンテクスト状態情報1326aからマッピングルール情報828aを導き出しさらにマッピングルール情報828aをスペクトル値決定器824に提供するマッピングルールセレクタ1328によって実行されうる。
オーディオ信号デコーダ1300の機能に関して、算術デコーダ1320は、平均して、復号化されるスペクトル値によく適しているマッピングルール(例えば累積度数テーブル)を選択するように構成される点に留意すべきであり、マッピングルールは、現在のコンテクスト状態に基づいて選択されるので、複数の前に復号化されたスペクトル値に基づいて次々に決定される。したがって、復号化される隣接するスペクトル値間の統計依存を利用することができる。
しかしながら、メモリ使用に関して、数値的なコンテクスト値の決定において後の使用のために、複数の前に復号化されたスペクトル値に形成されるベクトルのノルムの計算に基づくコンテクストサブ区域値を格納することが効率的であることが見いだされている。そのようなコンテクストサブ区域値は、最も関連したコンテクスト情報をまだ含むことも見いだされている。したがって、状態トラッカ1326によって用いられる概念は、符号化効率、計算効率および記憶効率間の良好な妥協を構成する。
詳細が以下に記載される。
8. 図1によるオーディオエンコーダ
以下において、本発明の実施形態によるオーディオエンコーダが記載される。図1は、そのようなオーディオエンコーダ100の略ブロック図を示す。
オーディオエンコーダ100は、入力されたオーディオ情報110を受信し、さらに、それに基づいて符号化されたオーディオ情報を構成するビットストリーム112を提供するように構成される。オーディオエンコーダ100は、入力されたオーディオ情報110を受信し、さらに、それに基づいて前処理された入力されたオーディオ情報110aを提供するように構成されるプリプロセッサ120を任意に含む。オーディオエンコーダ100は、信号コンバータにも指定されるエネルギー圧縮の時間領域−周波数領域信号変換器130も含む。信号コンバータ130は、入力されたオーディオ情報110、110aを受信し、さらに、それに基づいて好ましくはスペクトル値のセットの形式をとる周波数領域オーディオ情報132を提供するように構成される。例えば、信号変換器130は、入力されたオーディオ情報110、110aのフレーム(例えば時間領域サンプルのブロック)を受信し、さらに、それぞれのオーディオフレームのオーディオコンテンツを表すスペクトル値のセットを提供するように構成されうる。加えて、信号変換器130は、入力されたオーディオ情報110、110aの複数の後の、オーバーラップするまたはでオーバーラップしないオーディオフレームを受信し、さらに、それに基づいてスペクトル値の一連の後のセット、それぞれのフレームと関連するスペクトル値のセットを含む時間周波数領域オーディオ表現を提供するように構成されうる。
エネルギー圧縮の時間領域−周波数領域信号変換器130は、異なる、オーバーラップするまたはオーバーラップしない周波数レンジと関連するスペクトル値を提供するエネルギー圧縮のフィルタバンクを含みうる。例えば、信号変換器130は、変換ウィンドウを用いて入力されたオーディオ情報110、110a(またはそのフレーム)をウィンドウ化し、さらに、ウィンドウ化された入力されたオーディオ情報110、110aの(またはそのウィンドウ化されたフレームの)修正離散コサイン変換を実行するように構成されるウィンドウ化MDCT変換器130aを含みうる。したがって、周波数領域オーディオ表現132は、入力されたオーディオ情報のフレームと関連するMDCT係数の形式で例えば1024のスペクトル値のセットを含みうる。
オーディオエンコーダ100は、周波数領域オーディオ表現132を受信し、さらに、それに基づいて後処理された周波数領域オーディオ表現142を提供するように構成されるスペクトルポストプロセッサ140をさらに任意に含みうる。スペクトルポストプロセッサ140は、例えば、テンポラルノイズシェーピングおよび/または長期予測および/または従来技術において公知の他のいかなるスペクトル後処理を実行するように構成されうる。オーディオエンコーダは、周波数領域オーディオ表現132またはその後処理されたバージョン142を受信し、さらに、スケールされ量子化された周波数領域オーディオ表現152を提供するように構成されるスケーラ/量子化器150をさらに任意に含み。
オーディオエンコーダ100は、入力されたオーディオ情報110(またはその後処理されたバージョン110a)を受信し、さらに、それに基づいてエネルギー圧縮の時間領域−周波数領域信号変換器130の制御のために、任意のスペクトルポストプロセッサ140の制御のためにおよび/または任意のスケーラ/量子化器150の制御のために用いられうる任意の制御情報を提供するように構成される心理音響モデルプロセッサ160をさらに任意に含む。例えば、心理音響モデルプロセッサ160は、入力されたオーディオ情報110、110aのどの成分がオーディオコンテンツの人間の知覚にとって特に重要であるかさらに入力されたオーディオ情報110、110aのどの成分がオーディオコンテンツの知覚にとってそれほど重要でないかを決定するすために、入力されたオーディオ情報を解析するように構成されうる。したがって、心理音響モデルプロセッサ160は、スケーラ/量子化器150による周波数領域オーディオ表現132、142のスケーリングおよび/またはスケーラ/量子化器150によって適用される量子化解像度を調整するためにオーディオエンコーダ100によって用いられる制御情報を提供しうる。したがって、知覚的に重要なスケールファクタバンド(すなわちオーディオコンテンツの人間の知覚にとって特に重要である隣接するスペクトル値のグループ)は、大きいスケーリングファクタでスケールされさらに比較的高解像度で量子化され、その一方で、知覚的にそれほど重要でないスケールファクタバンド(すなわち隣接するスペクトル値のグループ)は、比較的より小さいスケーリングファクタでスケールされさらに比較的より低い量子化解像度で量子化される。したがって、知覚的により重要な周波数のスケールされたスペクトル値は、典型的に知覚的にそれほど重要でない周波数のスペクトル値よりも著しく大きい。
オーディオエンコーダは、周波数領域オーディオ表現132のスケールされ量子化されたバージョン152(または、その代わりに、周波数領域オーディオ表現132の後処理されたバージョン142または周波数領域オーディオ表現132そのもの)を受信し、さらに、算術コードワード情報が周波数領域オーディオ表現152を表すように、それに基づいて算術コードワード情報172aを提供するように構成される算術エンコーダ170も含む。
オーディオエンコーダ100は、算術コードワード情報172aを受信するように構成されるビットストリームペイロードフォーマッタ190も含む。ビットストリームペイロードフォーマッタ190は、例えば、どのスケールファクタがスケーラ/量子化器150によって適用されるかを表すスケールファクタ情報ように、典型的に付加的な情報を受信するようにも構成される。加えて、ビットストリームペイロードフォーマッタ190は、他の制御情報を受信するように構成されうる。ビットストリームペイロードフォーマッタ190は、以下に述べられる所望のビットストリーム構文に従うビットストリームをアセンブルすることによって受信された情報に基づいてビットストリーム112を提供するように構成される。
以下において、算術エンコーダ170に関する詳細が記載される。算術エンコーダ170は、周波数領域オーディオ表現132の複数の後処理されスケールされ量子化されたスペクトル値を受信するように構成される。算術エンコーダは、スペクトル値からまたは2つのスペクトル値から、最上位ビットプレーンmを導き出すように構成される最上位ビットプレーン抽出器174含む。最上位ビットプレーンは、スペクトル値の最上位ビットである1つ以上のビット(例えば2つまたは3つのビット)を含みうる点にここで留意すべきである。このように、最上位ビットプレーン抽出器174は、スペクトル値の最上位ビットプレーン値176を提供する。
しかしながら、その代わりに、最上位ビットプレーン抽出器174は、複数のスペクトル値(例えばスペクトル値のaおよびb)の最上位ビットプレーンを組み合わせる組み合わされた最上位ビットプレーン値mを提供しうる。スペクトル値aの最上位ビットプレーンは、mで指定される。その代わりに、複数のスペクトル値a、bの組み合わされた最上位ビットプレーン値は、mで指定される。
算術エンコーダ170は、最上位ビットプレーン値mを表す算術コードワードacod_m[pki][m]を決定するように構成される第1のコードワード決定器180も含む。任意に、コードワード決定器180は、例えば、どれくらいの下位ビットプレーンが利用できるかを示す(さらに、したがって、最上位ビットプレーンの数値的な重みを示す)1つ以上のエスケープコードワード(ここに「ARITH_ESCAPE」とも指定される)を提供することもできる。第1のコードワード決定器180は、累積度数テーブルインデックスpkiを有する(またはによって参照される)選択された累積度数テーブルを用いて最上位ビットプレーン値mと関連するコードワードを提供するように構成されうる。
どの累積度数テーブルが選択されるべきかに関して決定するために、算術エンコーダは、好ましくは、例えば、どのスペクトル値が前に符号化されたかを観察することによって、算術エンコーダの状態を追跡するように構成される状態トラッカ182を含む。したがって、状態トラッカ182は、状態情報184、例えば「s」または「t」または「c」で指定される状態値を提供する。算術エンコーダ170は、状態情報184を受信し、さらに、選択された累積度数テーブルを表す情報188をコードワード決定器180に提供するように構成される累積度数テーブルセレクタ186も含む。例えば、累積度数テーブルセレクタ186は、どの累積度数テーブルが、64の累積度数テーブルのセットから、コードワード決定器によって使用のために選択されるかを表す累積度数テーブルインデックス「pki」を提供しうる。その代わりに、累積度数テーブルセレクタ186は、全体の選択された累積度数テーブルまたはサブテーブルをコードワード決定器に提供しうる。このように、コードワード決定器180は、最上位ビットプレーン値mを符号化する実際のコードワードacod_m[pki][m]が、mの値および累積度数テーブルインデックスpkiに、さらにしたがって現在の状態情報184に依存するように、最上位ビットプレーン値mのコードワードacod_m[pki][m]の提供のための選択された累積度数テーブルまたはサブテーブルを用いることができる。符号化処理および得られたコードワード形式に関する詳細が以下に記載される。
しかしながら、いくつかの実施形態において、状態トラッカ182は、状態トラッカ750、状態トラッカ1050または状態トラッカ1250と同一であってもよく、または、状態トラッカ750、状態トラッカ1050または状態トラッカ1250の機能をとってもよい点に留意すべきである。また、累積度数テーブルセレクタ186は、いくつかの実施形態において、マッピングルールセレクタ760、マッピングルールセレクタ1060またはマッピングルールセレクタ1260と同一であってもよく、または、マッピングルールセレクタ760、マッピングルールセレクタ1060またはマッピングルールセレクタ1260の機能をとってもよい点にも留意すべきである。さらに、第1のコードワード決定器180は、いくつかの実施形態において、スペクトル値符号化740と同一であってもよく、または、その機能をとってもよい。
算術エンコーダ170は、符号化される1つ以上のスペクトル値が最上位ビットプレーンだけを用いて符号化できる値の範囲を超える場合、スケールされ量子化された周波数領域オーディオ表現152から1つ以上の下位ビットプレーンを抽出するように構成される下位ビットプレーン抽出器189aをさらに含む。下位ビットプレーンは、所望にように、1つ以上のビットを含みうる。したがって、下位ビットプレーン抽出器189aは、下位ビットプレーン情報189bを提供する。算術エンコーダ170は、下位ビットプレーン情報189bを受信し、さらに、それに基づいて0または1つ以上の下位ビットプレーンのコンテンツを表す0または1つ以上のコードワード「acod_r」を提供するように構成される第2のコードワード決定器189cも含む。第2のコードワード決定器189cは、下位ビットプレーン情報189bから下位ビットプレーンコードワード「acod_r」を導き出すために算術符号化アルゴリズムまたは他のいかなる符号化アルゴリズムを適用するように構成されうる。
下位ビットプレーンの数は、符号化されるスケールされ量子化されたスペクトル値が比較的小さい場合、下位ビットプレーンが全くないように、符号化される現在のスケールされ量子化されたスペクトル値が中間の範囲にある場合、1つの下位ビットプレーンがあるように、さらに、符号化されるスケールされ量子化されたスペクトル値が比較的大きい値をとる場合、複数の下位ビットプレーンがあるように、スケールされ量子化されたスペクトル値152の値に基づいて変化しうる点にここで留意すべきである。
上記を要約すると、算術エンコーダ170は、階層的な符号化処理を用いて、情報152によって表されるスケールされ量子化されたスペクトル値を符号化するように構成される。1つ以上のスペクトル値の(例えばスペクトル値ごとに1、2または3ビットを含む)最上位ビットプレーンは、最上位ビットプレーン値mの算術コードワード「acod_m[pki][m]」を得るために符号化される。1つ以上のスペクトル値の1つ以上の下位ビットプレーン(例えば1、2または3ビットを含む下位ビットプレーンのそれぞれ)は、1つ以上のコードワード「acod_r」を得るために符号化される。最上位ビットプレーンを符号化するときに、最上位ビットプレーンの値mは、コードワードacod_m[pki][m]にマップされる。この目的のために、64の異なる累積度数テーブルは、算術エンコーダ170の状態に基づいてすなわち前に符号化されたスペクトル値に基づいて値mの符号化のために利用できる。したがって、コードワード「acod_m[pki][m]」が得られる。加えて、1つ以上のコードワード「acod_r」は、1つ以上の下位ビットプレーンがある場合、ビットストリームに提供されさらに含められる。
リセットの説明
オーディオエンコーダ100は、ビットレートにおける改良がコンテクストをリセットすることによって、例えば状態インデックスをデフォルト値に設定することによって得ることができるかどうかを決定するように任意に構成されうる。したがって、オーディオエンコーダ100は、算術符号化のためのコンテクストがリセットされるどうかを示し、さらに、対応するデコーダにおいて算術復号化するためのコンテクストがリセットされるべきであるかどうかも示すリセット情報(例えば指名された「arith_reset_flag」)を提供するように構成されうる。
ビットストリーム形式および適用された累積度数テーブルに関する詳細が以下に記載される。
9. 図2によるオーディオデコーダ
以下において、本発明の実施形態によるオーディオデコーダが記載される。図2は、そのようなオーディオデコーダ200の略ブロック図を示す。
オーディオデコーダ200は、符号化されたオーディオ情報を表し、さらに、オーディオエンコーダ100によって提供されるビットストリーム112と同一でありうるビットストリーム210を受信するように構成される。オーディオデコーダ200は、ビットストリーム210に基づいて復号化されたオーディオ情報212を提供する。
オーディオデコーダ200は、ビットストリーム210を受信し、さらに、ビットストリーム210から符号化された周波数領域オーディオ表現222を抽出するように構成される任意のビットストリームペイロードデフォーマッタ220を含む。例えば、ビットストリームペイロードデフォーマッタ220は、ビットストリーム210から、例えば、周波数領域オーディオ表現の、スペクトル値aのまたは複数のスペクトル値a、bの最上位ビットプレーン値mを表す算術コードワード「acod_m[pki][m]」およびスペクトル値aのまたは複数のスペクトル値a、bの下位ビットプレーンのコンテンツを表すコードワード「acod_r」のような算術的に符号化されたスペクトルデータを抽出するように構成されうる。このように、符号化された周波数領域オーディオ表現222は、スペクトル値の算術的に符号化された表現を構成する(または含む)。ビットストリームペイロードデフォーマッタ220は、ビットストリームから図2に示されない付加的な制御情報を抽出するようにさらに構成される。加えて、ビットストリームペイロードデフォーマッタは、ビットストリーム210から、算術リセットフラグまたは「arith_reset_flag」にも指定される状態リセット情報224を抽出するように任意に構成される。
オーディオデコーダ200は、「spectral noiseless decorder(スペクトルノイズレスデコーダ)」にも指定される算術デコーダ230を含む。算術デコーダ230は、符号化された周波数領域オーディオ表現222および任意に状態リセット情報224を受信するように構成される。算術デコーダ230は、スペクトル値の復号化された表現を含みうる復号化された周波数領域オーディオ表現232を提供するようにも構成される。例えば、復号化された周波数領域オーディオ表現232は、符号化された周波数領域オーディオ表現222によって表されるスペクトル値の復号化された表現を含みうる。
オーディオデコーダ200は、復号化された周波数領域オーディオ表現232を受信し、さらに、それに基づいて逆に量子化されリスケールされた周波数領域オーディオ表現242を提供するように構成される任意の逆量子化器/リスケーラ240も含む。
オーディオデコーダ200は、逆に量子化されリスケールされた周波数領域オーディオ表現242を受信し、さらに、それに基づいて逆に量子化されリスケールされた周波数領域オーディオ表現242の前処理されたバージョン252を提供するように構成される任意のスペクトルプリプロセッサ250も含む。オーディオデコーダ200は、「signal converter(信号コンバータ)」にも指定される周波数領域−時間領域信号変換器260も含む。信号変換器260は、逆に量子化されリスケールされた周波数領域オーディオ表現242の前処理されたバージョン252(または、その代わりに、逆に量子化されリスケールされた周波数領域オーディオ表現242または復号化された周波数領域オーディオ表現232)を受信し、さらに、それに基づいてオーディオ情報の時間領域表現262を提供するように構成される。周波数領域−時間領域信号変換器260は、例えば、逆修正離散コサイン変換(IMDCT)および適切なウィンドウ化(その他に例えばオーバーラップ加算のような他の補助機能)を実行するための変換器を含みうる。
オーディオデコーダ200は、オーディオ情報の時間領域表現262を受信し、さらに、時間領域後処理を用いて復号化されたオーディオ情報212を得るように構成される任意の時間領域ポストプロセッサ270をさらに含みうる。しかしながら、後処理が省略される場合、時間領域表現262は、復号化されたオーディオ情報212と同一であってもよい。
逆量子化器/リスケーラ240、スペクトルプリプロセッサ250、周波数領域−時間領域信号変換器260および時間領域ポストプロセッサ270は、ビットストリームペイロードデフォーマッタ220によってビットストリーム210から抽出される制御情報に基づいて制御されうる点にここで留意すべきである。
オーディオデコーダ200の全体の機能を要約すると、復号化された周波数領域オーディオ表現232、例えば符号化されたオーディオ情報のオーディオフレームと関連するスペクトル値のセットは、算術デコーダ230を用いて符号化された周波数領域表現222に基づいて得られうる。その後、MDCT係数であってもよい例えば1024のスペクトル値のセットは、逆に量子化され、リスケールされさらに前処理される。したがって、スペクトル値(例えば1024のMDCT係数)の逆に量子化され、リスケールされさらにスペクトル的に前処理されたセットが得られる。その後、オーディオフレームの時間領域表現は、周波数領域値(例えばMDCT係数)の逆に量子化され、リスケールされさらにスペクトル的に前処理されたセットから導き出される。したがって、オーディオフレームの時間領域表現が得られる。所定のオーディオフレームの時間領域表現は、前のおよび/または後のオーディオフレームの時間領域表現と組み合わされうる。例えば、後のオーディオフレームの時間領域表現間のオーバーラップ加算は、隣接するオーディオフレームの時間領域表現間の遷移を滑らかにするために、さらに、エイリアシングキャンセルを得るために実行されうる。復号化された時間周波数領域オーディオ表現232に基づく復号化されたオーディオ情報212の再構成に関して詳しくは、例えば、詳細な議論が示される国際規格ISO/IEC14496−3、パート3、サブパート4について述べる。しかしながら、他のより精巧なオーバーラップおよびエイリアシングキャンセルが用いられうる。
以下において、算術デコーダ230に関するいくつかの詳細が説明される。算術デコーダ230は、最上位ビットプレーン値mを表す算術コードワードacod_m[pki][m]を受信するように構成される最上位ビットプレーン決定器284を含む。最上位ビットプレーン決定器284は、算術コードワード「acod_m[pki][m]」から最上位ビットプレーン値mを導き出すための複数の64の累積度数テーブルを含むセットから累積度数テーブルを用いるように構成されうる。
最上位ビットプレーン決定器284は、コードワードacod_mに基づいて1つ以上のスペクトル値の最上位ビットプレーンの値286を導き出すように構成される。算術デコーダ230は、スペクトル値の1つ以上の下位ビットプレーンを表す1つ以上のコードワード「acod_r」を受信するように構成される下位ビットプレーン決定器288をさらに含む。したがって、下位ビットプレーン決定器288は、1つ以上の下位ビットプレーンの復号化された値290を提供するように構成される。オーディオデコーダ200は、そのような下位ビットプレーンが現在のスペクトル値に利用できる場合、1つ以上のスペクトル値の最上位ビットプレーンの復号化された値286およびスペクトル値の1つ以上の下位ビットプレーンの復号化された値290を受信するように構成されるビットプレーンコンバイナ292も含む。したがって、ビットプレーンコンバイナ292は、復号化された周波数領域オーディオ表現232の部分である復号化されたスペクトル値を提供する。当然、算術デコーダ230は、オーディオコンテンツの現在のフレームと関連する復号化されたスペクトル値のフルセットを得るために、典型的に複数のスペクトル値を提供するように構成される。
算術デコーダ230は、算術デコーダの状態を表す状態インデックス298に基づいて64の累積度数テーブルari_cf_m[64][17](0≦pki≦63で、17のエントリを有するそれぞれのテーブルari_cf_m[pki][17])のうちの1つを選択するように構成される累積度数テーブルセレクタ296をさらに含む。累積度数テーブルのうちの1つを選択するために、累積度数テーブルセレクタは、好ましくは、図22(1)、図22(2)、図22(3)、図22(4)のテーブル表現によって定義されるようなハッシュテーブルari_hash_m[742]を評価する。ハッシュテーブルari_hash_m[742]のこの評価に関する詳細が以下に記載される。算術デコーダ230は、前に復号化されたスペクトル値に基づいて算術デコーダの状態を追跡するように構成される状態トラッカ299をさらに含む。状態情報は、状態リセット情報224に応じてデフォルト状態情報に任意にリセットされうる。したがって、累積度数テーブルセレクタ296は、コードワード「acod_m」に基づいて最上位ビットプレーン値mの復号化の際においてアプリケーションのために、選択された累積度数テーブルのインデックス(例えばpki)、または、選択された累積度数テーブルまたはサブテーブルそのものを提供するように構成される。
オーディオデコーダ200の機能を要約すると、オーディオデコーダ200は、ビットレート効率的に符号化された周波数領域オーディオ表現222を受信し、さらに、それに基づいて復号化された周波数領域オーディオ表現を得るように構成される。符号化された周波数領域オーディオ表現222に基づいて復号化された周波数領域オーディオ表現232を得るために用いられる算術デコーダ230において、隣接するスペクトル値の最上位ビットプレーンの値の異なる組合せの確率は、累積度数テーブルを適用するように構成される算術デコーダ280を用いることによって利用される。換言すれば、スペクトル値間の統計依存は、前に計算された復号化されたスペクトル値を観察することによって得られる状態インデックス298に基づいて64の異なる累積度数テーブルを含むセットから異なる累積度数テーブルを選択することによって利用される。
状態トラッカ299は、状態トラッカ826、状態トラッカ1126または状態トラッカ1326と同一であってもよく、または、状態トラッカ826、状態トラッカ1126または状態トラッカ1326の機能をとってもよい点に留意すべきである。累積度数テーブルセレクタ296は、マッピングルールセレクタ828、マッピングルールセレクタ1128またはマッピングルールセレクタ1328と同一であってもよく、または、マッピングルールセレクタ828、マッピングルールセレクタ1128またはマッピングルールセレクタ1328の機能をとってもよい。最上位ビットプレーン決定器284は、スペクトル値決定器824と同一であってもよく、または、スペクトル値決定器824の機能をとってもよい。
10. スペクトルノイズレス符号化のツールの概要
以下において、例えば算術エンコーダ170および算術デコーダ230によって実行される符号化および復号化アルゴリズムに関する詳細が説明される。
焦点が復号化アルゴリズムの説明に置かれる。しかしながら、対応する符号化アルゴリズムは、復号化アルゴリズムの教示に従って実行できる点に留意すべきであり、符号化されたおよび復号化されたスペクトル値間のマッピングは逆にされ、さらに、マッピングルールインデックス値の計算は実質的に同一である。エンコーダにおいて、符号化されたスペクトル値が、復号化されたスペクトル値に代わる。また、符号化されるスペクトル値は、復号化されるためのスペクトル値に代わる。
以下において述べられる復号化は、典型的に後処理され、スケールされさらに量子化されたスペクトル値のいわゆる「spectral noiseless coding(スペクトルノイズレス符号化)」を可能にするために用いられる点に留意すべきである。スペクトルノイズレス符号化は、例えば、エネルギー圧縮の時間領域−周波数領域変換器によって得られる量子化されたスペクトルの冗長性をさらに低減するためにオーディオ符号化/復号化概念(または他のいかなる符号化/復号化概念)において用いられる。本発明の実施形態において用いられるスペクトルノイズレス符号化スキームは、動的に適しているコンテクストに関連して算術符号化に基づく。
本発明によるいくつかの実施形態において、スペクトルノイズレス符号化スキームは、2つの隣接したスペクトル係数が組み合わされる2タプルに基づく。それぞれの2タプルは、符号、最上位2ビット的なプレーンおよび残りの下位ビットプレーンに分割される。最上位2ビット的なプレーンmのためのノイズレス符号化は、4つの前に復号化された2タプルから導き出されるコンテクストに依存する累積度数テーブルを用いる。ノイズレス符号化は、例えば、量子化されたスペクトル値によって供給され、さらに、4つの前に復号化された隣接する2タプルから導き出されるコンテクストに依存する累積度数テーブルを用いる。ここで、時間および周波数の両方における近辺は、好ましくは、図4に示されるように考慮される。そして、累積度数テーブル(それは以下に説明される)は、可変長2進コードを生成するために算術コーダによって(さらに、可変長2進コードから復号化された値を導き出すために算術デコーダによって)用いられる。
例えば、算術コーダ170は、シンボルの所定のセットおよびそれらのそれぞれの確率のための2進コードを(すなわちそれぞれの確率に基づいて)生成する。2進コードは、シンボルのセットが位置する確率間隔をコードワードにマップすることによって生成される。
残りの下位ビットプレーンまたはビットプレーンrのためのノイズレス符号化は、例えば、単一の累積度数テーブルを用いる。累積度数は、例えば、下位ビットプレーンにおいて生じるシンボルの一様分布に対応し、すなわち、0または1が下位ビットプレーンにおいて生じることは、同じ確率があることが期待される。しかしながら、残りの下位ビットプレーンまたはビットプレーンの符号化のための他の解決策が用いられうる。
以下において、スペクトルノイズレス符号化のツールの別の簡単な概要が示される。スペクトルノイズレス符号化は、量子化されたスペクトルの冗長性をさらに低減するために用いる。スペクトルノイズレス符号化スキームは、動的に適しているコンテクストに関連して、算術符号化に基づく。ノイズレス符号化は、量子化されたスペクトル値によって供給され、さらに、例えば、スペクトル値の4つの前に復号化された隣接する2タプルから導き出されるコンテクストに依存する累積度数テーブルを用いる。ここで、時間および周波数の両方における近辺は、図4に示されるように考慮される。そして、累積度数テーブルは、可変長2進コードを生成するために算術コーダによって用いられる。
算術コーダは、シンボルの所定のセットおよびそれらのそれぞれの確率のための2進コードを生成する。2進コードは、シンボルのセットが位置する確率間隔をコードワードにマップすることによって生成される。
11. 復号化処理
11.1 復号化処理の概要
以下において、スペクトル値の符号化の処理の概要が、複数のスペクトル値の復号化の処理の疑似プログラムコード表現を示す図3を参照して示される。
複数のスペクトル値の復号化の処理は、コンテクストの初期化310を含む。コンテクストの初期化310は、関数「arith_map_context(N, arith_reset_flag)」を用いて、前のコンテクストからの現在のコンテクストの導出を含む。前のコンテクストからの現在のコンテクストの導出は、コンテクストのリセットを選択的に含みうる。コンテクストのリセットおよび前のコンテクストからの現在のコンテクストの導出の両方は、以下に述べられる。好ましくは、図5aによる関数「arith_map_context(N, arith_reset_flag)」が用いられうるが、その代わりに、図5bによる関数が用いられてもよい。
複数のスペクトル値の復号化は、スペクトル値復号化312およびコンテクスト更新313の反復も含み、コンテクスト更新313は、以下に記載される関数「arith_update_context(i,a,b)」によって実行される。スペクトル値復号化312およびコンテクスト更新313は、lg/2時間繰り返され、lg/2は、いわゆる「ARITH_STOP」シンボルが検出されない限り、(例えば、オーディオフレームのために)復号化されるスペクトル値の2タプルの数を示す。さらに、lgスペクトル値のセットの復号化は、符号復号化314およびフィニッシングステップ315も含む。
スペクトル値のタプルの復号化312は、コンテクスト値計算312a、最上位ビットプレーン復号化312b、算術停止シンボル検出312c、下位ビットプレーン加算312d、および配列更新312eを含む。
状態値計算312aは、例えば、図5cまたは図5dに示されるような関数「arith_get_context(c,i,N)」の呼び出しを含む。好ましくは、図5cによる関数「arith_get_context(c,i,N)」が用いられる。したがって、数値的な現在のコンテクスト(状態)値cは、関数「arith_get_context(c,i,N)」の関数呼び出しのリターン値として提供される。明らかなように、関数「arith_get_context(c,i,N)」に入力変数として働く(「c」でも指定される)数値的な前のコンテクスト値は、リターン値として、数値的な現在のコンテクスト値cを得るために更新される。
最上位ビットプレーン復号化312bは、復号化アルゴリズム312baの反復的な実行およびアルゴリズム312baの結果値mから値a、bの導出312bbを含む。アルゴリズム312baの準備において、変数levは、ゼロに初期化される。アルゴリズム312baは、「break」命令(または条件)に達するまで、繰り返される。アルゴリズム312baは、以下に述べられ(さらにその実施形態が例えば図5eおよび図5fに示され)る関数「arith_get_pk()」を用いて、数値的な現在のコンテクスト値cに基づいて、さらに、レベル値「esc_nb」にも基づいて、(累積度数テーブルインデックスとしても働く)状態インデックス「pki」の計算を含む。好ましくは、図5eによる関数「arith_get_pk(c)」が用いられる。アルゴリズム312baは、関数「arith_get_pk」の呼び出しによってリターンされる状態インデックス「pki」に基づいて累積度数テーブルの選択も含み、変数「cum_freq」は、状態インデックス「pki」に基づいて64の累積度数テーブル(またはサブテーブル)から1つの開始アドレスに設定されうる。変数「cfl」は、選択された累積度数テーブル(またはサブテーブル)の長さにも初期化されうり、それは、例えば、アルファベットにおけるシンボルの数、すなわち復号化することができる異なる値の数に等しい。最上位ビットプレーン値mの復号化のために利用できる「ari_cf_m[pki=0][17]」から「ari_cf_m[pki=63][17]」までの全ての累積度数テーブル(またはサブテーブル)の長さは、16の異なる最上位ビットプレーン値およびエスケープシンボル(「ARITH_ESCAPE」)を復号化することができるように、17である。好ましくは、累積度数テーブル(またはサブテーブル)「ari_cf_m[pki=0][17]」から「ari_cf_m[pki=63][17]」までを定義する累積度数テーブルari_cf_m[64][17]は、図23(1)、図23(2)、図23(3)によるテーブル表現において定義されるように、選択された累積度数テーブル(またはサブテーブル)を得るために、評価される。
その後、最上位ビットプレーン値mは、(変数「cum_freq」および変数「cfl」によって表される)選択された累積度数テーブルを考慮して、関数「arith_decode()」を実行することによって得られうる。最上位ビットプレーン値mを導き出すときに、ビットストリーム210のビット指名された「acod_m」は、評価されうる(例えば図6gまたは図6hを参照)。好ましくは、図5gによる関数「arith_decode(cum_freq,cfl)」が用いられるが、その代わりに、図5hおよび図5iによる関数「arith_decode(cum_freq,cfl)」が用いられてもよい。
アルゴリズム312baは、最上位ビットプレーン値mがエスケープシンボル「ARITH_ESCAPE」に等しいかどうかをチェックすることも含む。最上位ビットプレーン値mが算術エスケープシンボルに等しくない場合、アルゴリズム312baは、停止され(「break」条件)、さらに、アルゴリズム312baの残りの命令は、スキップされる。したがって、処理の実行は、ステップ312bbでの値bのおよび値aの設定で続けられる。対照的に、復号化された最上位ビットプレーン値mが算術エスケープシンボルまたは「ARITH_ESCAPE」と同一である場合、レベル値「lev」は、1だけ増加される。レベル値「esc_nb」は、変数「lev」が7よりも大きい場合でない限り、レベル値「lev」に等しく設定され、この場合、変数「esc_nb」は、7に等しく設定される。上述のように、アルゴリズム312baは、それから復号化された最上位ビットプレーン値mが算術エスケープシンボルと異なるまで繰り返され、修正されたコンテクストが用いられる(その理由は、関数「arith_get_pk()」の入力パラメータが変数「esc_nb」の値に基づいて適しているからである)。
最上位ビットプレーンがアルゴリズム312baの1回の実行または反復的な実行を用いて復号化されるとすぐに、すなわち、算術エスケープシンボルと異なる最上位ビットプレーン値mが復号化されていると、スペクトル値変数「b」は、最上位ビットプレーン値mの複数の(例えば2つの)上位ビットに等しく設定され、さらに、スペクトル値変数「a」は、最上位ビットプレーン値mの(例えば2つの)最下位ビットに設定される。この機能に関する詳細が、例えば、参照番号312bbから明らかである。
その後、ステップ312cにおいて算術停止シンボルがあるかどうかがチェックされる。これは、最上位ビットプレーン値mがゼロに等しくさらに変数「lev」がゼロよりも大きいかどうかの場合である。したがって、算術停止条件は、「unusual(異常な)」条件によって信号で伝えられ、最上位ビットプレーン値mは、ゼロに等しく、その一方で、変数「lev」は、増加した数値的な重みが最上位ビットプレーン値mと関連することを示す。換言すれば、算術停止条件は、最小の数値的な重みよりも大きい増加した数値的な重みがゼロに等しい最上位ビットプレーン値に示されるべきことをビットストリームが示す場合、検出され、それは、通常の符号化状況において生じない条件である。換言すれば、算術停止条件は、符号化された算術エスケープシンボルの後に0の符号化された最上位ビットプレーン値が続く場合、信号で伝えられる。
ステップ312cにおいて実行される算術停止条件があるかどうかをの評価の後、下位ビットプレーンは、例えば、図3に参照番号312dで示されるように得られる。下位ビットプレーンごとに、2つの2進値が復号化される。2進値のうちの1つは、変数a(またはスペクトル値のタプルの第1のスペクトル値)と関連し、さらに、2進値のうちの1つは、変数b(またはスペクトル値のタプルの第2のスペクトル値)と関連する。下位ビットプレーンの数は、変数levによって指定される。
(もしあれば)1つ以上の最下位ビットプレーンの復号化において、アルゴリズム312daは、反復的に実行され、アルゴリズム312daの実行の数は、変数「lev」によって決定される。アルゴリズム312daの最初の反復は、ステップ312bbにおいて設定されるような変数a、bの値に基づいて実行される点にここで留意すべきである。アルゴリズム312daのさらなる反復は、変数a、bの更新された変数値に基づいて実行される。
反復の始めに、累積度数テーブルが選択される。その後、算術復号化が変数rの値を得るために実行され、変数rの値は、複数の下位ビットを、例えば、変数aと関連する1つの下位ビットおよび変数bと関連する1つの下位ビットを表す。関数「ARITH_DECODE」は、(例えば図5gに定義されるように、)値rを得るために用いられ、累積度数テーブル「arith_cf_r」は、算術復号化のために用いられる。
その後、変数aおよびbの値は、更新される。この目的のために、変数aは、1ビットだけ左にシフトされ、さらに、シフトされた変数aの最下位ビットは、値rの最下位ビットによって定義される値を設定する。変数bは、1ビットだけ左にシフトされ、さらに、シフトされた変数bの最下位ビットは、変数rのビット1によって定義される値を設定し、変数rのビット1は、変数rの2進表現において2の数値的な重みを有する。アルゴリズム312baは、それから全ての最下位ビットが復号化されるまで繰り返される。
下位ビットプレーンの復号化の後、配列「x_ac_dec」は、変数a、bの値が配列インデックス2*iおよび2*i+1を有する前記配列のエントリに格納されるという点において更新される。
その後、コンテクスト状態は、関数「arith_update_context(i,a,b)」を呼び出すことによって更新され、その詳細が、図5gを参照して以下に説明される。好ましくは、関数「arith_update_context(i,a,b)」は、図5lに定義されるように、用いられうる。
ステップ313において実行されるコンテクスト状態の更新に続いて、アルゴリズム312および313は、実行中の変数iがlg/2の値に達しまたは算術停止条件が検出されるまで、繰り返される。
その後、フィニッシュアルゴリズム「arith_finish()」が、参照番号315から明らかなように実行される。フィニッシュアルゴリズム「arith_finish()」の詳細が、図5mを参照して記載される。
フィニッシュアルゴリズム315に続いて、スペクトル値の符号は、アルゴリズム314を用いて復号化される。明らかなように、ゼロと異なるスペクトル値の符号は、個々に符号化される。アルゴリズム314において、符号は、i=0およびゼロでないi=lg−1間のインデックスiを有するスペクトル値の全てのために読み取られる。i=0およびi=lg−1間のスペクトル値インデックスiを有するゼロでないスペクトル値ごとに、値(典型的には単一のビット)sがビットストリームから読み取られる。ビットストリームから読み取られるsの値が1に等しい場合、前記スペクトル値の符号は、逆にされる。この目的のために、アクセスは、インデックスiを有するスペクトル値がゼロに等しいかどうかを決定するためさらに復号化されたスペクトル値の符号を更新するための両方のために、配列「x_ac_dec」に行われる。しかしながら、変数a、bの符号は、符号復号化314において不変のまま残される点に留意すべきである。
符号復号化314の前にフィニッシュアルゴリズム315を実行することによって、ARITH_STOPシンボルの後に全ての必要なbinsをリセットすることが可能である。
下位ビットプレーンの値を得るための概念は、本発明によるいくつかの実施形態において特定の関連性がない点にここで留意すべきである。いくつかの実施形態において、いかなる下位ビットプレーンの復号化も、省略されることがある。その代わりに、異なる復号化アルゴリズムが、この目的のために用いられうる。
11.2 図4による復号化順序
以下において、スペクトル値の復号化順序が記載される。
量子化されたスペクトル係数「x_ac_dec[]」は、最も低い周波数係数から始まって最も高い周波数係数に進んで(例えばビットストリームにおいて)ノイズレスに符号化されさらに伝送される。
したがって、量子化されたスペクトル係数「x_ac_dec[]」は、最も低い周波数係数から始まって最も高い周波数係数に進んでノイズレスに復号化される。量子化されたスペクトル係数は、({a,b}でも指定される)いわゆる2タプル(a、b)において集める2つの連続した(例えば周波数において隣接する)係数aおよびbのグループによって復号化される。量子化されたスペクトル係数は、「qdec」でもときどき指定される点にここで留意すべきである。
周波数領域モードのための復号化された係数「x_ac_dec[]」(例えば、ISO/IEC14496のパート3のサブパート4に述べられるように、修正離散コサイン変換を用いて得られる、例えば、アドバンストオーディオ符号化のための復号化された係数)は、それから配列「x_ac_quant[g][win][sfb][bin]」に格納される。ノイズレス符号化コードワードの伝送の順序は、それらが受信される順序に復号化されさらに配列に格納されるときに、「bin」が最も急速にインクリメントするインデックスであり、さらに、「g」が最もゆっくりインクリメントするインデックスである。コードワード内において、復号化の順序は、a、b(すなわち、aそしてb)である。
変換符号化された励起(TCX)のための復号化された係数「x_ac_dec[]」は、例えば、配列「x_tcx_invquant[win][bin]」に直接的に格納され、さらに、ノイズレス符号化コードワードの伝送の順序は、それらが受信される順序に復号化されさらに配列に格納されるときに、「bin」が最も急速にインクリメントするインデックスであり、さらに、「win」が最もゆっくりインクリメントするインデックスである。コードワード内において、復号化の順序は、a、b(すなわち、aそしてb)である。換言すれば、スペクトル値がスピーチコーダの線形予測フィルタの変換符号化された励起を表す場合、スペクトル値a、bは、変換符号化された励起の隣接し増加する周波数と関連する。より低い周波数と関連するスペクトル係数は、より高い周波数と関連するスペクトル係数の前に典型的に符号化されさらに復号化される。
特に、オーディオデコーダ200は、復号化された周波数領域表現232を適用するように構成されうり、それは、周波数領域−時間領域信号変換を用いて時間領域オーディオ信号表現の「direct(直接的な)」生成のためと周波数領域−時間領域信号変換器の出力によって励起される周波数領域−時間領域デコーダおよび線形予測フィルタの両方を用いて時間領域オーディオ信号表現の「indirect(間接的な)」提供のためとの両方のために、算術デコーダ230によって提供される。
換言すれば、機能がここで詳細に述べられる算術デコーダは、周波数領域において符号化されるオーディオコンテンツの時間周波数領域表現のスペクトル値を復号化するために、さらに、線形予測領域において符号化されるスピーチ信号を復号化する(または合成する)ために適している線形予測フィルタのための刺激信号の時間周波数領域表現の提供のために、よく適している。このように、算術デコーダは、周波数領域符号化されたオーディオコンテンツおよび線形予測周波数領域符号化されたオーディオコンテンツ(変換符号化された励起線形予測領域モード)を取り扱うことができるオーディオにおいての使用によく適している。
11.3 図5aおよび図5bによるコンテクスト初期化
以下において、ステップ310において実行される(「context mapping(コンテクストマッピング)」にも指定される)コンテクスト初期化が記載される。
コンテクスト初期化は、第1のサンプルが図5aに示されさらに第2のサンプルが図5bに示されるアルゴリズム「arith_map_context()」に従って過去のコンテクストおよび現在のコンテクスト間のマッピングを含む。
明らかなように、現在のコンテクストは、2の第1の次元および「n_context」の第2の次元を有する配列の形式をとるグローバル変数「q[2][n_context]」に格納される。過去のコンテクストは、(それが用いられる場合)「n_context」の次元を有するテーブルの形式をとる変数「qs[n_context]」に任意に(必ずではないが)格納されうる。
図5aにおいて実例アルゴリズム「arith_map_context」を参照して、入力変数Nは、現在のウィンドウの長さを表し、さらに、入力変数「arith_reset_flag」は、コンテクストがリセットされるべきであるかどうかを示す。さらに、グローバル変数「previous_N」は、前のウィンドウの長さを表す。典型的に、ウィンドウと関連するスペクトル値の数は、少なくとも近似的に、時間領域サンプルに関して前記ウィンドウの半分の長さに等しい点にここで留意すべきである。さらに、したがって、スペクトル値の2タプルの数は、時間領域サンプルに関して前記ウィンドウの1/4の長さに少なくとも近似的に等しい点に留意すべきである。
最初に、フラグ「arith_reset_flag」は、コンテクストがリセットされなければならないかどうかを決定する点に留意すべきである。
図5aの例を参照して、コンテクストのマッピングは、アルゴリズム「arith_map_context()」に従って実行されうる。関数「arith_map_context()」は、フラグ「arith_reset_flag」がアクティブでありさらにしたがってコンテクストがリセットされるべきであることを示す場合、現在のコンテクスト配列qのエントリ「q[0][j]」をj=0からj=N/4−1までにゼロに設定する点にここで留意すべきである。さもなければ、すなわち、フラグ「arith_reset_flag」がインアクティブである場合、現在のコンテクスト配列qのエントリ「q[0][j]」は、現在のコンテクスト配列qのエントリ「q[1][k]」から導き出される。図5aによる関数「arith_map_context()」は、現在の(例えば周波数領域符号化された)オーディオフレームと関連するスペクトル値の数がj=k=0からj=k=N/4−1までに前のオーディオフレームと関連するスペクトル値の数と同一である場合、現在のコンテクスト配列qのエントリ「q[0][j]」を現在のコンテクスト配列qの値「q[1][k]」に設定する点に留意すべきである。
現在のオーディオフレームと関連するスペクトル値の数が前のオーディオフレームと関連するスペクトル値の数と異なる場合、より複雑なマッピングが実行される。しかしながら、この場合においてマッピングに関する詳細は、詳しくは図5aの疑似プログラムコードについて述べるように、特に本発明の重要な考えのために特に関連しない。
さらに、数値的な現在のコンテクスト値cのための初期化値は、関数「arith_map_context()」によってリターンされる。この初期化値は、例えば、12ビットだけ左にシフトされるエントリ「q[0][0]」の値に等しい。したがって、数値的な(現在の)コンテクスト値cは、反復的な更新のために適切に初期化される。
さらに、図5bは、その代わりに用いられうるアルゴリズム「arith_map_context()」の別の例を示す。詳しくは、図5bにおける疑似プログラムコードについて述べる。
上記を要約すると、フラグ「arith_reset_flag」は、コンテクストがリセットされなければならないかどうかを決定する。フラグが真である場合、アルゴリズム「arith_map_context()」のリセットサブアルゴリズム500aが呼び出される。しかしながら、その代わりに、フラグ「arith_reset_flag」が(コンテクストのリセットが実行されるべきでないことを示す)インアクティブである場合、復号化処理は、コンテクストエレメントベクトル(または配列)qがq[1][]に格納される前のフレームのコンテクストエレメントをq[0][]にコピーしさらにマップすることによって更新される初期設定段階から始まる。q内のコンテクストエレメントは、2タプルごとに4ビットに格納される。コンテクストエレメントのコピーおよび/またはマッピングは、例えば、サブアルゴリズム500bにおいて実行される。
さらに、コンテクストが確実に決定されることができない場合、例えば、前のフレームのデータが利用できない場合、さらに、「arith_reset_flag」が設定されない場合、スペクトルデータの復号化が続けられなく、さらに、現在の「arith_data()」エレメントの読み取りがスキップされるべきである点に留意すべきである。
図5bの例において、復号化処理は、マッピングがqsに格納される保存された過去のコンテクストおよび現在のフレームqのコンテクスト間で行われる初期設定段階から始まる。過去のコンテクストqsは、周波数ラインごとに2ビットに格納される。
11.4 図5cおよび図5dによる状態値計算
以下において、状態値計算312aがさらに詳細に記載される。
第1の好適なアルゴリズムは、図5cを参照して記載され、さらに、第2の代わりの実例アルゴリズムは、図5dを参照して記載される。
(図3に示されるような)数値的な現在のコンテクスト値cは、疑似プログラムコード表現が図5cに示される関数「arith_get_context(c,i,N)」のリターン値として得ることができる点に留意すべきである。しかしながら、その代わりに、数値的な現在のコンテクスト値cは、疑似プログラムコード表現が図5dに示される関数「arith_get_context(c,i)」のリターン値として得ることができる。
状態値の計算に関して、状態評価のためにすなわち数値的な現在のコンテクスト値cの計算のために用いられるコンテクストを示す図4についても述べる。図4は、時間および周波数の両方上に、スペクトル値の2次元表現を示す。横座標410は時間を表し、さらに、縦座標412は周波数を表す。図4において明らかなように、(好ましくは数値的な現在のコンテクスト値を用いて)復号化するスペクトル値のタプル420は、時間インデックスt0および周波数インデックスiと関連する。明らかなように、時間インデックスt0について、周波数インデックスi−1、i−2およびi−3を有するタプルは、周波数インデックスiを有するタプル420のスペクトル値が復号化される時間にすでに復号化されている。図4から明らかなように、時間インデックスt0および周波数インデックスi−1を有するスペクトル値430は、スペクトル値のタプル420が復号化される前にすでに復号化され、さらに、スペクトル値のタプル430は、スペクトル値のタプル420の復号化のために用いられるコンテクストのために考慮される。同様に、時間インデックスt0−1およびi−1の周波数インデックスを有するスペクトル値のタプル440、時間インデックスt0−1およびiの周波数インデックスを有するスペクトル値のタプル450、および、時間インデックスt0−1およびi+1の周波数インデックスを有するスペクトル値のタプル460は、スペクトル値のタプル420が復号化される前にすでに復号化され、さらに、スペクトル値のタプル420を復号化するために用いられるコンテクストの決定のために考慮される。タプル420のスペクトル値が復号化される時間にすでに復号化されさらにコンテクストのために考慮されるスペクトル値(係数)は、陰影のついた正方形によって示される。対照的に、(タプル420のスペクトル値が復号化される時間に)すでに復号化されているが(タプル420のスペクトル値の復号化のための)コンテクストのために考慮されないいくつかの他のスペクトル値は、点線を有する正方形によって表され、さらに、(タプル420のスペクトル値が復号化される時間にまだ復号化されていない)他のスペクトル値は、点線を有する円によって示される。点線を有する正方形によって表されるタプルおよび点線を有する円によって表されるタプルは、タプル420のスペクトル値を復号化するためのコンテクストを決定するために用いられない。
しかしながら、タプル420のスペクトル値を復号化するためのコンテクストの「regular(普通の)」または「normal(通常の)」計算のために用いられないこれらのスペクトル値のいくつかは、それにしても、個々にまたはこれらを基に、それらの大きさに関する所定の条件を満たす複数の前に復号化された隣接するスペクトル値の検出のために評価されうる点に留意すべきである。この問題に関する詳細が以下に述べられる。
図5cをこれから参照して、アルゴリズム「arith_get_context(c,i,N)」の詳細が記載される。図5cは、周知のC言語および/またはC++言語の変換を用いる疑似プログラムコードの形式で前記関数「arith_get_context(c,i,N)」の機能を示す。このように、関数「arith_get_context(c,i,N)」によって実行される数値的な現在のコンテクスト値「c」の計算に関するより詳細が記載される。
関数「arith_get_context(c,i,N)」は、入力変数として、数値的な前のコンテクスト値cによって表されうる「old state context(前の状態コンテクスト)」を受信する点に留意すべきである。関数「arith_get_context(c,i,N)」は、入力変数として、復号化するスペクトル値の2タプルのインデックスiも受信する。インデックスiは、典型的に周波数インデックスである。入力変数Nは、スペクトル値が復号化されるウィンドウのウィンドウの長さを表す。
関数「arith_get_context(c,i,N)」は、出力値として、更新された状態コンテクストを表しさらに数値的な現在のコンテクスト値として考慮されうる入力変数cの更新されたバージョンを提供する。要約すると、関数「arith_get_context(c,i,N)」は、入力変数として数値的な前のコンテクスト値cを受信し、さらに、その更新されたバージョンを提供し、それは、数値的な現在のコンテクスト値として考慮される。加えて、関数「arith_get_context」は、変数i、Nを考慮し、さらに、「global(グローバル)」配列q[][]にアクセスする。
関数「arith_get_context(c,i,N)」の詳細に関して、初期的に2進形式で数値的な前のコンテクスト値を表す変数cは、ステップ504aにおいて4ビットだけ右にシフトされる点に留意すべきである。したがって、(入力変数cによって表される)数値的な前のコンテクスト値の4つの最下位ビットが破棄される。また、数値的な前のコンテクスト値の他のビットの数値的な重み例えば16倍低減される。
さらに、2タプルのインデックスiがN/4−1よりも小さいすなわち最大値をとらない場合、数値的な現在のコンテクスト値は、エントリq[0][i+1]の値がステップ504aにおいて得られるシフトされたコンテクスト値のビット12〜15に(すなわち212、213、214および215の数値的な重みを有するビットに)加算されるという点において、修正される。この目的のために、配列q[][]のエントリq[0][i+1](または、より正確に言うと、前記エントリによって表される値の2進表現)は、12ビットだけ左にシフトされる。エントリq[0][i+1]によって表される値のシフトされたバージョンは、それから、ステップ504aにおいて導き出されるコンテクスト値cに、すなわち数値的な前のコンテクスト値のビットシフトされた(4ビットだけ右にシフトされた)数表現に加算される。配列q[][]のエントリq[0][i+1]は、オーディオコンテンツの前の部分(例えば、図4に関して定義されるように、時間インデックスt0−1を有するオーディオコンテンツの部分)および(関数「arith_get_context(c,i,N)」によって出力される数値的な現在のコンテクスト値cを用いて)現在復号化されるスペクトル値のタプルよりも高い周波数(例えば、図4に関して定義されるように、周波数インデックスi+1を有する周波数)と関連するサブ区域値を表す点にここで留意すべきである。換言すれば、スペクトル値のタプル420は、数値的な現在のコンテクスト値を用いて復号化される場合、エントリq[0][i+1]は、前に復号化されたスペクトル値のタプル460に基づきうる。
(12ビットだけ左にシフトされる)配列q[][]のエントリq[0][i+1]の選択的な加算は、参照番号504bで示される。明らかなように、エントリq[0][i+1]によって表される値の加算は、周波数インデックスiが最も大きい周波数インデックスi=N/4−1を有するスペクトル値のタプルを指定しない場合、当然に実行されるだけである。
その後、ステップ504cにおいて、ブールのAND演算が実行され、変数cの値は、変数cの更新された値を得るために、0xFFF0の16進値とAND組み合わされる。そのようなAND演算を実行することによって、変数cの4つの最下位ビットがゼロに効果的に設定される。
ステップ504dにおいて、エントリq[1][i−1]の値は、それによって変数cの値を更新するために、ステップ504cによって得られる変数cの値に加算される。しかしながら、ステップ504dにおいて変数cの前記更新は、復号化する2タプルの周波数インデックスiがゼロよりも大きい場合、実行されるだけである。エントリq[1][i−1]は、数値的な現在のコンテクスト値を用いて復号化されるスペクトル値の周波数よりも小さい周波数のためのオーディオコンテンツの現在の部分の前に復号化されたスペクトル値のタプルに基づくコンテクストサブ区域値である点に留意すべきである。例えば、配列q[][]のエントリq[1][i−1]は、スペクトル値のタプル420が関数「arith_get_context(c,i,N)」の現在の実行によってリターンされる数値的な現在のコンテクスト値を用いて復号化されると仮定される場合、時間インデックスt0および周波数インデックスi−1を有するタプル430と関連しうる。
要約すると、数値的な前のコンテクスト値のビット0、1、2および3(すなわち4つの最下位ビットの部分)は、数値的な前のコンテクスト値の2進数表現からそれらをシフトすることによってステップ504aにおいて破棄される。さらに、シフトされた変数cの(すなわちシフトされた数値的な前のコンテクスト値の)ビット12、13、14および15は、ステップ504bにおいてコンテクストサブ区域値q[0][i+1]によって定義される値をとるために設定される。シフトされた数値的な前のコンテクスト値のビット0、1、2および3(すなわち元の数値的な前のコンテクスト値のビット4、5、6および7)は、ステップ504cおよび504dにおいてコンテクストサブ区域値q[1][i−1]によって上書きされる。
したがって、数値的な前のコンテクスト値のビット0〜3は、スペクトル値のタプル432と関連するコンテクストサブ区域値を表し、数値的な前のコンテクスト値のビット4〜7は、前に復号化されたスペクトル値のタプル434と関連するコンテクストサブ区域値を表し、数値的な前のコンテクスト値のビット8〜11は、前に復号化されたスペクトル値のタプル440と関連するコンテクストサブ区域値を表し、さらに、数値的な前のコンテクスト値のビット12〜15は、前に復号化されたスペクトル値のタプル450と関連するコンテクストサブ区域値を表すといえる。関数「arith_get_context(c,i,N)」に入力される数値的な前のコンテクスト値は、スペクトル値のタプル430の復号化と関連する。
関数「arith_get_context(c,i,N)」の出力変数として得られる数値的な現在のコンテクスト値は、スペクトル値のタプル420の復号化と関連する。したがって、数値的な現在のコンテクスト値のビット0〜3は、スペクトル値のタプル430と関連するコンテクストサブ区域値を表し、数値的な現在のコンテクスト値のビット4〜7は、スペクトル値のタプル440と関連するコンテクストサブ区域値を表し、数値的な現在のコンテクスト値のビット8〜11は、スペクトル値のタプル450と関連する数値的なサブ区域値を表し、さらに、数値的な現在のコンテクスト値のビット12〜15は、スペクトル値のタプル460と関連するコンテクストサブ区域値を表す。このように、数値的な前のコンテクスト値の部分、すなわち数値的な前のコンテクスト値のビット8〜15は、数値的な現在のコンテクスト値のビット4〜11として、数値的な現在のコンテクスト値に含まれることも明らかである。対照的に、現在の数値的な前のコンテクスト値のビット0〜7は、数値的な前のコンテクスト値の数表現から数値的な現在のコンテクスト値の数表現を導き出すときに破棄される。
ステップ504eにおいて、数値的な現在のコンテクスト値を表す変数cは、復号化する2タプルの周波数インデックスiが例えば3の所定の数よりも大きい場合、選択的に更新される。この場合、すなわちiが3よりも大きい場合、コンテクストサブ区域値q[1][i−3]、q[1][i−2]およびq[1][i−1]の合計が例えば5の所定の値よりも小さい(またはそれに等しい)かどうかが決定される。前記コンテクストサブ区域値の合計が前記所定の値よりも小さいことが見いだされている場合、例えば0x10000の16進値が、変数cに加算される。したがって、変数cは、コンテクストサブ区域値q[1][i−3]、q[1][i−2]およびq[1][i−1]が特に小さい合計値を含む条件があるかどうかを変数cが示すように設定される。例えば、数値的な現在のコンテクスト値のビット16は、そのような条件を示すフラグとして働きうる。
結論として、関数「arith_get_context(c,i,N)」のリターン値は、ステップ504a、504b、504c、504dおよび504eによって決定され、数値的な現在のコンテクスト値は、ステップ504a、504b、504cおよび504dにおいて数値的な前のコンテクスト値から導き出され、さらに、平均して、特に小さい絶対値を有する前に復号化されたスペクトル値の環境を示すフラグは、ステップ504eにおいて導き出されさらに変数cに加算される。したがって、ステップ504a、504b、504c、504dにおいて得られる変数cの値は、ステップ504eにおいて評価される条件が満たされない場合、ステップ504fにおいて、関数「arith_get_context(c,i,N)」のリターン値としてリターンされる。対照的に、ステップ504a、504b、504cおよび504dにおいて導き出される変数cの値は、ステップ540eにおいて評価される条件が満たされる場合、ステップ504eにおいて、0x10000の16進値だけインクリメントされ、さらに、このインクリメント演算の結果がリターンされる。
上記を要約すると、ノイズレスデコーダは、(以下に詳しく記載されるように)符号なしの量子化されたスペクトル係数の2タプルを出力する点に留意すべきである。最初に、コンテクストの状態cは、復号化する2タプル「surrounding(を囲む)」前に復号化されたスペクトル係数に基づいて計算される。好適な実施形態において、(例えば数値的なコンテクスト値cによって表される)状態は、2つの新しい2タプル(例えば2タプル430および460)だけを考慮して、(数値的な前のコンテクスト値に指定される)最後の復号化された2タプルのコンテクスト状態を用いて増加的に更新される。状態は、(例えば数値的な現在のコンテクスト値の数表現を用いて)17ビットに符号化され、さらに、関数「arith_get_context()」によってリターンされる。詳しくは、図5cのプログラムコード表現について述べる。
さらに、関数「arith_get_context()」の代わりの実施形態の疑似プログラムコードは、図5dに示される点に留意すべきである。図5dによる関数「arith_get_context(c,i)」は、図5cによる関数「arith_get_context(c,i,N)」と類似している。しかしながら、図5dによる関数「arith_get_context(c,i)」は、i=0の最小の周波数インデックスまたはi=N/4−1の最大の周波数インデックスを含むスペクトル値のタプルの特別な取り扱いまたは復号化を含まない。
11.5 マッピングルール選択
以下において、マッピングルール、例えばシンボルコード上へのコードワード値のマッピングを表す累積度数テーブルの選択が記載される。マッピングルールの選択は、数値的な現在のコンテクスト値cによって表されるコンテクスト状態に基づいて行われる。
11.5.1 図5eによるアルゴリズムを用いるマッピングルール選択
以下において、関数「arith_get_pk(c)」を用いるマッピングルールの選択が記載される。関数「arith_get_pk()」は、スペクトル値のタプルを提供するためのコード値「acod_m」を復号化するときに、サブアルゴリズム312baの始めに呼び出される点に留意すべきである。関数「arith_get_pk(c)」は、アルゴリズム312bの異なる反復の異なる引数で呼び出される点に留意すべきである。例えば、アルゴリズム312bの最初の反復において、関数「arith_get_pk(c)」は、ステップ312aで関数「arith_get_context(c,i,N)」の前の実行によって提供される数値的な現在のコンテクスト値cに等しい引数で呼び出される。対照的に、サブアルゴリズム312baのさらなら反復において、関数「arith_get_pk(c)」は、ステップ312aにおいて関数「arith_get_context(c,i,N)」によって提供される数値的な現在のコンテクスト値cおよび変数「esc_nb」の値のビットシフトされたバージョンの合計である引数で呼び出され、変数「esc_nb」の値は、17ビットだけ左にシフトされる。このように、関数「arith_get_context(c,i,N)」によって提供される数値的な現在のコンテクスト値cは、312baアルゴリズムの最初の反復においてすなわち比較的小さいスペクトル値の復号化において、関数「arith_get_pk()」の入力値として用いられる。対照的に、比較的より大きいスペクトル値を復号化するときに、関数「arith_get_pk()」の入力変数は、変数「esc_nb」の値が、図3に示されるように、考慮されるという点において、修正される。
関数「arith_get_pk(c)」の第1の好適な実施形態の疑似プログラムコード表現を示す図5eをこれから参照して、関数「arith_get_pk()」は、入力値としての変数cを受信する点に留意すべきであり、変数cは、コンテクストの状態を表し、さらに、関数「arith_get_pk()」の入力変数cは、少なくともいくらかの状況において関数「arith_get_context()」によってリターン変数として提供される数値的な現在のコンテクスト値に等しい。さらに、関数「arith_get_pk()」は、出力変数として、確率モデルのインデックスを表しさらにマッピングルールインデックス値として考慮されうる変数「pki」を提供する点に留意すべきである。
図5eを参照して、関数「arith_get_pk()」は、変数初期化506aを含むことが明らかであり、変数「i_min」は、−1の値をとるために初期化される。同様に、変数iは、変数iも−1の値に初期化されるように、変数「i_min」に等しく設定される。変数「i_max」は、詳細が図21を参照して記載されるように、テーブル「ari_lookup_m[]」のエントリの数よりも1だけ小さい値をとるために初期化される。したがって、変数「i_min」および「i_max」は、間隔を定義する。例えば、i_maxは、値741に初期化されうる。
その後、検索506bは、関数「arith_get_pk()」の入力変数cの値が前記エントリおよび隣接するエントリによって定義される間隔内に位置するように、図22(1)、図22(2)、図22(3)、図22(4)のテーブル表現において定義されるように選択されるテーブル「ari_hash_m」のエントリを指定するインデックス値を確認するために実行される。
検索506bにおいて、サブアルゴリズム506baは、繰り返され、その一方で、変数「i_max」および「i_min」間の差は、1よりも大きい。サブアルゴリズム506baにおいて、変数iは、変数「i_min」および「i_max」の値の算術平均に等しく設定される。したがって、変数iは、変数「i_min」および「i_max」の値によって定義されるテーブル間隔の中央において(図22(1)、図22(2)、図22(3)および図22(4)のテーブル表現において定義されるような)テーブル「ari_hash_m[]」のエントリを指定する。その後、変数jは、テーブル「ari_hash_m[]」のエントリ「ari_hash_m[i]」の値に等しく設定される。このように、変数jは、エントリが変数「i_min」および「i_max」によって定義されるテーブル間隔の中央に位置するテーブル「ari_hash_m[]」のエントリによって定義される値をとる。その後、変数「i_min」および「i_max」によって定義される間隔は、関数「arith_get_pk()」の入力変数cの値がテーブル「ari_hash_m[]」のテーブルエントリ「j=ari_hash_m[i]」の最上位ビットによって定義される状態値と異なる場合、更新される。例えば、テーブル「ari_hash_m[]」のエントリの「upper bits(上位ビット)」(ビット8および上位)は、重要な状態値を表す。したがって、値「j>>8」は、ハッシュテーブルインデックス値iによって指定されるテーブル「ari_hash_m[]」のエントリ「j=ari_hash_m[i]」によって表される重要な状態値を表す。したがって、変数cの値が値「j>>8」よりも小さい場合、これは、変数cによって表される状態値がテーブル「ari_hash_m[]」のエントリ「ari_hash_m[i]」によって表される重要な状態値よりも小さいことを意味する。この場合、変数「i_max」の値は、変数iの値に等しく設定され、それは、次々に、「i_min」および「i_max」によって定義される間隔のサイズが低減されるという効果を有し、新しい間隔は、前の間隔の下半分に近似的に等しい。変数cによって表されるコンテクスト値が配列「ari_hash_m[]」のエントリ「ari_hash_m[i]」によって表される重要な状態値よりも大きいことを意味する、関数「arith_get_pk()」の入力変数cが値「j>>8」よりも大きいことが見いだされている場合、変数「i_min」の値は、変数iの値に等しく設定される。したがって、変数「i_min」および「i_max」の値によって定義される間隔のサイズは、変数「i_min」および「i_max」の前の値によって定義される、前の間隔のサイズの近似的に半分に低減される。より正確に言うと、変数「i_min」の更新された値によってさらに変数「i_max」の前の(不変の)値によって定義される間隔は、変数cの値がエントリ「ari_hash_m[i]」によって定義される重要な状態値よりも大きい場合に、前の間隔の上半分に近似的に等しい。
しかしながら、アルゴリズム「arith_get_pk()」の入力変数cによって表されるコンテクスト値がエントリ「ari_hash_m[i]」によって定義される重要な状態値に等しいこと(すなわちc==(j>>8))が見いだされている場合、エントリ「ari_hash_m[i]」の最下位8ビットによって定義されるマッピングルールインデックス値は、関数「arith_get_pk()」のリターン値としてリターンされる(命令「return (j&0xFF)」)。
上記を要約すると、最上位ビット(ビット8および上位)が重要な状態値を表すエントリ「ari_hash_m[i]」は、それぞれの反復506baにおいて評価され、さらに、関数「arith_get_pk()」の入力変数cによって表されるコンテクスト値(または数値的な現在のコンテクスト値)は、前記テーブルエントリ「ari_hash_m[i]」によって表される重要な状態値と比較される。入力変数cによって表されるコンテクスト値がテーブルエントリ「ari_hash_m[i]」によって表される重要な状態値よりも小さい場合、テーブル間隔の(値「i_max」によって表される)上方境界は、低減され、さらに、入力変数cによって表されるコンテクスト値がテーブルエントリ「ari_hash_m[i]」によって表される重要な状態値よりも大きい場合、テーブル間隔の(変数「i_min」の値によって表される)下方境界は、増加される。前記の両方の場合において、サブアルゴリズム506baは、(「i_max」および「i_min」間の差によって定義される)間隔のサイズが1よりも小さいまたはそれに等しい場合を除いて、繰り返される。対照的に、変数cによって表されるコンテクスト値がテーブルエントリ「ari_hash_m[i]」によって表される重要な状態値に等しい場合、関数「arith_get_pk()」は、停止され、リターン値は、テーブルエントリ「ari_hash_m[i]」の最下位8ビットによって定義される。
しかしながら、間隔サイズがその最小値に達するので検索506bが終了される(「i_max−i_min」が1よりも小さいまたはそれに等しい)場合、関数「arith_get_pk()」のリターン値は、参照番号506cから明らかであるテーブル「ari_lookup_m[]」のエントリ「ari_lookup_m[i_max]」によって決定される。テーブルari_lookup_m[]は、好ましくは、図21のテーブル表現において定義されるように選択され、さらに、そのため、テーブルari_lookup_m[742]に等しくなりうる。したがって、(好ましくは図22(1)、図22(2)、図22(3)、図22(4)に定義されるようなテーブルari_hash_m[742]に等しい)テーブル「ari_hash_m[]」のエントリは、重要な状態値および間隔の境界の両方を定義する。サブアルゴリズム506baにおいて、検索間隔境界「i_min」および「i_max」は、ハッシュテーブルインデックスiが少なくとも近似的に間隔境界値「i_min」および「i_max」によって定義される検索間隔の中央に位置するテーブル「ari_hash_m[]」のエントリ「ari_hash_m[i]」が、少なくとも入力変数cによって表されるコンテクスト値に近似するように、反復的に適している。このように、入力変数cによって表されるコンテクスト値が、サブアルゴリズム506baの反復の完了の後に、「ari_hash_m[i_min]」および「ari_hash_m[i_max]」によって定義される間隔内に位置することは、入力変数cによって表されるコンテクスト値がテーブル「ari_hash_m[]」のエントリによって表される重要な状態値に等しくない限り、達成される。
しかしながら、(「i_max−i_min」によって定義される)間隔のサイズがその最小値に達するまたは上回るので、サブアルゴリズム506baの反復的な繰り返しが終了される場合、入力変数cによって表されるコンテクスト値は、重要な状態値でないと仮定される。この場合、間隔の上方境界を指定するインデックス「i_max」は、それにしても用いられる。サブアルゴリズム506baの最後の反復において達する間隔の上方の値「i_max」は、図21のテーブルari_lookup_m[742]に等しくてもよいテーブル「ari_lookup_m」へのアクセスのためのテーブルインデックス値として再使用される。テーブル「ari_lookup_m[]」は、複数の隣接する数値的なコンテクスト値の間隔と関連するマッピングルールインデックス値を表す。テーブル「ari_lookup_m[]」のエントリによって表されるマッピングルールインデックス値が関連する間隔は、テーブル「ari_hash_m[]」のエントリによって表される重要な状態値によって定義される。テーブル「ari_hash_m」のエントリは、重要な状態値および隣接する数値的なコンテクスト値の間隔の間隔境界の両方を定義する。アルゴリズム506bの実行において、入力変数cによって表される数値的なコンテクスト値が重要な状態値に等しいかどうかが決定され、さらに、これがそうでない場合、(境界が重要な状態値によって定義される複数の間隔から)数値的なコンテクスト値の間隔には、入力変数cによって表されるコンテクスト値が位置する。このように、アルゴリズム506bは、入力変数cが重要な状態値を表すかどうかを決定し、さらに、それがそうでない場合、入力変数cによって表されるコンテクスト値が位置する重要な状態値によって囲まれる間隔を確認するという二重機能を満たす。したがって、アルゴリズム506eは、特に効率的であり、さらに、比較的少数のテーブルアクセスだけを必要とする。
上記を要約すると、コンテクスト状態cは、最上位2ビット的なプレーンmを復号化するために用いられる累積度数テーブルを決定する。cから対応する累積度数テーブルインデックス「pki」へのマッピングは、関数「arith_get_pk()」によって実行される。前記関数「arith_get_pk()」の疑似プログラムコード表現は、図5eを参照して説明されている。
上記をさらに要約すると、値mは、累積度数テーブル「arith_cf_m[pki][]」で呼び出される(以下でさらに詳細に表される)関数「arith_decode()」を用いて復号化され、「pki」は、疑似Cコードの形式で図5eに関して表される関数「arith_get_pk()」によってリターンされる(マッピングルールインデックス値にも指定される)インデックスに対応する。
11.5.2 図5fによるアルゴリズムを用いるマッピングルール選択
以下において、マッピングルール選択アルゴリズム「arith_get_pk()」の別の実施形態がスペクトル値のタプルの復号化に用いられうるそのようなアルゴリズムの疑似プログラムコード表現を示す図5fに関して説明される。図5fによるアルゴリズムは、アルゴリズム「get_pk()」のまたはアルゴリズム「arith_get_pk()」の最適化されたバージョン(例えば速度最適化されたバージョン)として考慮されうる。
図5fによるアルゴリズム「arith_get_pk()」は、入力変数として、コンテクストの状態を表す変数cを受信する。入力変数cは、例えば、数値的な現在のコンテクスト値を表しうる。
アルゴリズム「arith_get_pk()」は、出力変数として、入力変数cによって表されるコンテクストの状態に関連する確率分布(または確率モデル)のインデックスを表す変数「pki」を提供する。変数「pki」は、例えば、マッピングルールインデックス値であってもよい。
図5fによるアルゴリズムは、配列「i_diff[]」のコンテンツの定義を含む。明らかなように、(配列インデックス0を有する)配列「i_diff[]」の最初のエントリは、299に等しく、さらに、(配列インデックス1〜8を有する)さらなる配列エントリは、149、74、37、18、9、4、2および1の値をとる。したがって、ハッシュテーブルインデックス値「i_min」の選択のためのステップサイズは、配列「i_diff[]」のエントリが前記ステップサイズを定義するように、それぞれの反復で低減される。詳しくは、以下の議論について述べる。
しかしながら、配列「i_diff[]」の異なるステップサイズ、例えば異なるコンテンツは、実際に選択されうり、配列「i_diff[]」のコンテンツは、ハッシュテーブル「ari_hash_m[i]」のサイズに当然に適している。
変数「i_min」は、アルゴリズム「arith_get_pk()」の始めに右に0の値をとるために初期化される点に留意すべきである。
初期化ステップ508aにおいて、変数sは、入力変数cに基づいて初期化され、変数cの数表現は、変数sの数表現を得るために、8ビットだけ左にシフトされる。
その後、テーブル検索508bは、ハッシュテーブル「ari_hash_m[]」のエントリのハッシュテーブルインデックス値「i_min」を確認するために、コンテクスト値cによって表されるコンテクスト値が、ハッシュテーブルエントリ「ari_hash_m[i_min]」によって表されるコンテクスト値と他のエントリ「ari_hash_m」が(そのハッシュテーブルインデックス値に関して)ハッシュテーブルエントリ「ari_hash_m[i_min]」に隣接する別のハッシュテーブルエントリ「ari_hash_m」によって表されるコンテクスト値とによって囲まれる間隔内に位置するように、実行される。このように、アルゴリズム508bは、ハッシュテーブルエントリ「ari_hash_m[i_min]」が少なくとも入力変数cによって表されるコンテクスト値に近似するように、ハッシュテーブル「ari_hash_m[]」のエントリ「j=ari_hash_m[i_min]」を指定するハッシュテーブルインデックス値「i_min」の決定を可能にする。
テーブル検索508bは、サブアルゴリズム508baの反復的な実行を含み、サブアルゴリズム508baは、所定の数の例えば9回の反復のために実行される。サブアルゴリズム508baの第1のステップにおいて、変数iは、変数「i_min」の値およびテーブルエントリ「i_diff[k]」の値の合計に等しい値に設定される。kは、サブアルゴリズム508baのそれぞれの反復で、k=0の初期値から始まる、インクリメントされる実行中の変数である点にここで留意すべきである。配列「i_diff[]」は、所定のインクリメント値を定義し、インクリメント値は、インクリメントするテーブルインデックスkすなわち反復のインクリメントする数とともに低減する。
サブアルゴリズム508baの第2のステップにおいて、テーブルエントリ「ari_hash_m[]」の値は、変数jにコピーされる。好ましくは、テーブル「ari_hash_m[]」のテーブルエントリの最上位ビットは、数値的なコンテクスト値重要な状態値を表し、さらに、テーブル「ari_hash_m[]」のエントリの最下位ビット(ビット0〜7)は、それぞれの重要な状態値と関連するマッピングルールインデックス値を表す。
サブアルゴリズム508baの第3のステップにおいて、変数Sの値は、変数jの値と比較され、さらに、変数「i_min」は、変数sの値が変数jの値よりも大きい場合、値「i+1」に選択的に設定される。その後、サブアルゴリズム508baの第1のステップ、第2のステップおよび第3のステップは、所定の回数、例えば9回、繰り返される。このように、サブアルゴリズム508baのそれぞれの実行において、変数「i_min」の値は、現在有効なハッシュテーブルインデックスi_min+i_diff[]によって表されるコンテクスト値が入力変数cによって表されるコンテクスト値よりも小さい場合およびその場合に限り、i_diff[]+1だけインクリメントされる。したがって、ハッシュテーブルインデックス値「i_min」は、入力変数cによってさらにしたがって変数sによって表されるコンテクスト値がエントリ「ari_hash_m[i=i_min+diff[k]]」によって表されるコンテクスト値よりも大きい場合(およびその場合に限り)、サブアルゴリズム508baのそれぞれの実行において(反復的に)増加される。
さらに、単一の比較、すなわち変数sの値が変数jの値よりも大きいかどうかに関する比較だけがサブアルゴリズム508baのそれぞれの実行において実行される点に留意すべきである。したがって、アルゴリズム508baは、計算的に特に効率的である。さらに、変数「i_min」の最終的な値に関して異なる可能な結果がある点に留意すべきである。例えば、テーブルエントリ「ari_hash_m[i_min]」によって表されるコンテクスト値が入力変数cによって表されるコンテクスト値よりも小さく、さらに、テーブルエントリ「ari_hash_m[i_min+1]」によって表されるコンテクスト値が入力変数cによって表されるコンテクスト値よりも大きいサブアルゴリズム512baの最後の実行の後に変数「i_min」の値があることが可能である。その代わりに、サブアルゴリズム508baの最後の実行の後、ハッシュテーブルエントリ「ari_hash_m[i_min−1]」によって表されるコンテクスト値が入力変数cによって表されるコンテクスト値よりも小さく、さらに、エントリ「ari_hash_m[i_min]」によって表されるコンテクスト値が入力変数cによって表されるコンテクスト値よりも大きいことが起こりうる。しかしながら、その代わりに、ハッシュテーブルエントリ「ari_hash_m[i_min]」によって表されるコンテクスト値が入力変数cによって表されるコンテクスト値と同一であることが起こりうる。
このために、決定ベースのリターン値提供508cが実行される。変数jは、ハッシュテーブルエントリ「ari_hash_m[i_min]」の値をとるために設定される。その後、入力変数cによって(さらに変数sによっても)表されるコンテクスト値がエントリ「ari_hash_m[i_min]」によって表されるコンテクスト値よりも大きい(条件「s>j」によって定義される第1の場合)かどうか、または、入力変数cによって表されるコンテクスト値がハッシュテーブルエントリ「ari_hash_m[i_min]」によって表されるコンテクスト値よりも小さい(条件「c<j>>8」によって定義される第2の場合)かどうか、または、入力変数cによって表されるコンテクスト値がエントリ「ari_hash_m[i_min]」によって表されるコンテクスト値に等しい(第3の場合)かどうかが、決定される。
第1の場合(s>j)において、テーブルインデックス値「i_min+1」によって指定されるテーブル「ari_lookup_m[]」のエントリ「ari_lookup_m[i_min+1]」は、関数「arith_get_pk()」の出力値としてリターンされる。第2の場合(c<(j>>8))において、テーブルインデックス値「i_min」によって指定されるテーブル「ari_lookup_m[]」のエントリ「ari_lookup_m[i_min]」は、関数「arith_get_pk()」のリターン値としてリターンされる。第3の場合(すなわち入力変数cによって表されるコンテクスト値がテーブルエントリ「ari_hash_m[i_min]」によって表される重要な状態値に等しい場合)において、ハッシュテーブルエントリ「ari_hash_m[i_min]」の最下位8ビットによって表されるマッピングルールインデックス値は、関数「arith_get_pk()」のリターン値としてリターンされる。
上記を要約すると、特に単純なテーブル検索がステップ508bにおいて実行され、テーブル検索は、入力変数cによって表されるコンテクスト値がテーブル「ari_hash_m[]」の状態エントリのうちの1つによって定義される重要な状態値に等しいかどうかを区別しないで変数「i_min」の変数値を提供する。テーブル検索508bに続いて実行されるステップ508cにおいて、入力変数cによって表されるコンテクスト値およびハッシュテーブルエントリ「ari_hash_m[i_min]」によって表される重要な状態値間の大きさ関係が評価され、さらに、関数「arith_get_pk()」のリターン値が前記評価の結果に基づいて選択され、テーブル評価508bにおいて決定される変数「i_min」の値は、入力変数cによって表されるコンテクスト値がハッシュテーブルエントリ「ari_hash_m[i_min]」によって表される重要な状態値と異なる場合であっても、マッピングルールインデックス値を選択するために考慮される。
アルゴリズムにおける比較は、好ましくは(またはその代わりに)、コンテクストインデックス(数値的なコンテクスト値)cおよびj=ari_hash_m[i]>>8間において行われるべきである点にさらに留意すべきである。実際、テーブル「ari_hash_m[]」のそれぞれのエントリは、第8のビットを超えて符号化されるコンテクストインデックスおよび8つの第1のビット(最下位ビット)に符号化されるその対応する確率モデルを表す。現在の実施において、我々は、主に、s=c<<8がari_hash_m[i]よりも大きいかどうかについて検出することに等しい現在のコンテクストcがari_hash_m[i]>>8よりも大きいかどうかについて知っていることに興味がある。
上記を要約すると、例えば図5cによるアルゴリズム「arith_get_context(c,i,N)」または図5dによるアルゴリズム「arith_get_context(c,i)」を用いて達成されうるコンテクスト状態が計算されると、最上位2ビット的なプレーンは、コンテクスト状態に対応する確率モデルに対応する適切な累積度数テーブルで呼び出される(以下に記載される)アルゴリズム「arith_decode」を用いて復号化される。対応は、関数「arith_get_pk()」、例えば図5fに関して述べられている関数「arith_get_pk()」によって行われる。
11.6 算術復号化
11.6.1 図5gによるアルゴリズムを用いる算術復号化
以下において、関数「arith_decode()」の好適な実施の機能が図5gに関して詳細に述べられる。図5gは、用いられたアルゴリズムを表す疑似Cコードを示す。
関数「arith_decode()」は、それがシーケンスの最初のシンボルである場合にTRUEをリターンし、そうでない場合にFALSEをリターンするヘルパー関数「arith_first_symbol(void)」を用いる点に留意すべきである。また、関数「arith_decode()」は、ビットストリームの次のビットを得てさらに提供するヘルパー関数「arith_get_next_bit(void)」も用いる。
加えて、関数「arith_decode()」は、グローバル変数「low」、「high」および「value」を用いる。さらに、関数「arith_decode()」は、入力変数として、選択された累積度数テーブルまたは累積度数サブテーブル(好ましくは、図23(1)、図23(2)、図23(3)のテーブル表現によって定義されるように、テーブルari_cf_m[64][17]のサブテーブルari_cf_m[pki=0][17]からari_cf_m[pki=63][17]までのうちの1つ)の(エレメントインデックスまたはエントリインデックス0を有する)最初のエントリまたはエレメントの方を指し示す変数「cum_freq[]」を受信する。また、関数「arith_decode()」は、変数「cum_freq[]」によって指定される選択された累積度数テーブルまたは累積度数サブテーブルの長さを示す入力変数「cfl」を用いる。
関数「arith_decode()」は、第1のステップとして、一連のシンボルの最初のシンボルが復号化されていることをヘルパー関数「arith_first_symbol()」が示す場合に実行される変数初期化570aを含む。値初期化550aは、変数「value」が前記ビットによって表される値をとるように、ヘルパー関数「arith_get_next_bit」を用いてビットストリームから得られる複数の例えば16のビットに基づいて変数「value」を初期化する。また、変数「low」は、0の値をとるために初期化され、さらに、、変数「high」は、65535の値をとるために初期化される。
第2のステップ570bにおいて、変数「range」は、変数「high」および「low」の値間の差よりも1だけ大きい値に設定される。変数「cum」は、変数「low」の値および変数「high」の値間の変数「value」の値の相対的な位置を表す値に設定される。したがって、変数「cum」は、例えば、変数「value」の値に基づいて0および216間の値をとる。
ポインタpは、選択された累積度数テーブルまたはサブテーブルの開始アドレスよりも1だけ小さい値に初期化される。
アルゴリズム「arith_decode()」は、反復的な累積度数テーブル検索570cも含む。反復的な累積度数テーブル検索は、変数1cfがlよりも小さいまたはそれに等しいまで繰り返される。反復的な累積度数テーブル検索570cにおいて、ポインタ変数qは、ポインタ変数pの現在の値および変数「cfl」の半分の値の合計に等しい値に設定される。エントリがポインタ変数qによって述べられる選択された累積度数テーブルのエントリ*qが変数「cum」の値よりも大きい場合、ポインタ変数pは、ポインタ変数qの値に設定され、さらに、変数「cfl」の値は、インクリメントされる。最後に、変数「cfl」は、1ビットだけ右にシフトされ、それによって、効果的に変数「cfl」の値を2で分割しさらにモジュロ部分を無視する。
したがって、反復的な累積度数テーブル検索570cは、値cumが確認された間隔内に位置するように、累積度数テーブルのエントリによって囲まれる選択された累積度数テーブル内で間隔を確認するために、変数「cum」の値を選択された累積度数テーブルの複数のエントリと効果的に比較する。したがって、選択された累積度数テーブルのエントリは、間隔を定義し、それぞれのシンボル値は、選択された累積度数テーブルの間隔のそれぞれに関連する。また、累積度数テーブルの2つの隣接する値間の間隔の幅は、その全体において選択された累積度数テーブルが異なるシンボル(またはシンボル値)の確率分布を定義するように、前記間隔と関連するシンボルの確率を定義する。利用できる累積度数テーブルまたは累積度数サブテーブルに関する詳細が図23を参照して以下に述べられる。
図5gを再び参照して、シンボル値は、ポインタ変数pの値から導き出され、シンボル値は、参照番号570dで示されるように導き出される。このように、ポインタ変数pの値および開始アドレス「cum_freq」間の差は、変数「symbol」によって表されるシンボル値を得るために評価される。
アルゴリズム「arith_decode」は、変数「high」および「low」の適合570eも含む。変数「symbol」によって表されるシンボル値が0と異なる場合、変数「high」は、参照番号570eに示されるように、更新される。また、変数「low」の値は、参照番号570eに示されるように、更新される。変数「high」は、変数「low」の値、変数「range」および選択された累積度数テーブルまたは累積度数サブテーブルのインデックス「symbol−1」を有するエントリによって決定される値に設定される。変数「low」は、増加し、増加の大きさは、変数「range」およびインデックス「symbol」を有する選択された累積度数テーブルのエントリによって決定される。したがって、変数「low」および「high」の値間の差は、選択された累積度数テーブルの2つの隣接するエントリ間の数値的な差に基づいて調整される。
したがって、低い確率を有するシンボル値が検出される場合、変数「low」および「high」の値間の間隔は、狭い幅に低減される。対照的に、検出されたシンボル値が比較的大きい確率を含む場合、変数「low」および「high」の値間の間隔の幅は、比較的大きい値に設定される。再び、変数「low」および「high」の値間の間隔の幅は、累積度数テーブルの検出されたシンボルおよび対応するエントリに依存する。
アルゴリズム「arith_decode()」は、間隔繰り込み570fも含み、ステップ570eにおいて決定される間隔は、「break」条件に達するまで反復的にシフトされさらにスケールされる。間隔繰り込み570fにおいて、選択的な下方シフト演算570faが実行される。変数「high」が32768よりも小さい場合、何も行われなく、さらに、間隔繰り込みが間隔サイズ増加演算570fbを続ける。しかしながら、変数「high」が32768よりも小さくなく、さらに、変数「low」が32768以上である場合、変数「value」、「low」および「high」の全ては、変数「low」および「high」によって定義される間隔が下方にシフトされ、さらに、変数「value」の値も下方にシフトされるように、32768だけ低減される。しかしながら、変数「high」の値が32768よりも小さくなく、さらに、変数「low」が32768以上でなく、さらに、変数「low」が16384以上であり、さらに、変数「high」が49152よりも小さいことが見いだされている場合、変数「value」、「low」および「high」の全ては、16384だけ低減され、それによって、変数「high」および「low」の値の間の間隔と変数「value」の値とを下方にシフトする。しかしながら、上述の条件のどちらも満たされない場合、間隔繰り込みは、停止される。
しかしながら、ステップ570faにおいて評価される上述の条件のいずれかが満たされる場合、間隔増加演算570fbは、実行される。間隔増加演算570fbにおいて、変数「low」の値は、2倍になる。また、変数「high」の値は、2倍になり、さらに、2倍にする結果は、1だけ増加される。また、変数「value」の値は、(1ビットだけ左にシフトされ)2倍になり、さらに、ヘルパー関数「arith_get_next_bit」によって得られるビットストリームのビットは、最下位ビットとして用いられる。したがって、変数「low」および「high」の値間の間隔のサイズは、近似的に2倍になり、さらに、変数「value」の精度は、ビットストリームの新しいビットを用いることによって増加される。上述のように、ステップ570faおよび570fbは、「break」条件に達するまで、すなわち変数「low」および「high」の値間の間隔が十分に大きくなるまで繰り返される。
アルゴリズム「arith_decode()」の機能に関して、変数「low」および「high」の値間の間隔は、変数「cum_freq」によって参照される累積度数テーブルの2つの隣接するエントリに基づいてステップ570eにおいて低減される点に留意すべきである。選択された累積度数テーブルの2つの隣接する値間の間隔が小さい場合、すなわち隣接する値が互いに比較的接近している場合、ステップ570eにおいて得られる変数「low」および「high」の値間の間隔は、比較的小さい。対照的に、累積度数テーブルの2つの隣接するエントリがさらに間隔を置かれる場合、ステップ570eにおいて得られる変数「low」および「high」の値間の間隔は、比較的大きい。
したがって、ステップ570eにおいて得られる変数「low」および「high」の値間の間隔が比較的小さい場合、多数の間隔繰り込みステップは、(条件評価570faの条件のどちらも満たされないように、)間隔を「sufficient(十分な)」サイズにリスケールするために実行される。したがって、ビットストリームからの比較的多数のビットが、変数「value」の精度を増加するために用いられる。対照的に、ステップ570eにおいて得られる間隔サイズが比較的大きい場合、間隔繰り込みステップ570faおよび570fbのより少数の反復だけが、変数「low」および「high」の値間の間隔を「sufficient(十分な)」サイズに繰り込むために必要とされる。したがって、ビットストリームからの比較的少数のビットだけが、変数「value」の精度を増加しさらに次のシンボルの復号化を準備するために用いられる。
上記を要約すると、比較的高い確率を含みさらに大きい間隔が選択された累積度数テーブルのエントリによって関連するシンボルが、復号化される場合、比較的少数のビットだけが、後のシンボルの復号化を可能にするために、ビットストリームから読み取られる。対照的に、比較的小さい確率を含みさらに小さい間隔が選択された累積度数テーブルのエントリによって関連するシンボルが、復号化される場合、比較的多数のビットが、次のシンボルの復号化を準備するために、ビットストリームからとられる。
したがって、累積度数テーブルのエントリは、異なるシンボルの確率を反映し、さらに一連のシンボルを復号化するために必要なビットの数も反映する。コンテクストに基づいてすなわち前に復号化されたシンボル(またはスペクトル値)に基づいて累積度数テーブルを変化することによって、例えば、コンテクストに基づいて異なる累積度数テーブルを選択することによって、後の(または隣接する)シンボルの特定のビットレート効率的な符号化を可能にする異なるシンボル間の確率論的な依存を利用することができる。
上記を要約すると、図5gに関して記載されている関数「arith_decode()」は、(リターン変数「symbol」によって表されるシンボル値に設定されうる)最上位ビットプレーン値mを決定するために関数「arith_get_pk()」によってリターンされるインデックス「pki」に対応する、累積度数テーブル「arith_cf_m[pki][]」で呼び出される。
上記を要約すると、算術デコーダは、スケーリングを有するタグ生成の方法を用いる整数実施である。詳しくは、K.Sayoodの書籍「Introduction to Data Compression」、第3版、2006年、Elsevier Inc.について述べる。
図5gによるコンピュータプログラムコードは、本発明の実施形態による用いられたアルゴリズムを表す。
11.6.2 図5hおよび図5iによるアルゴリズムを用いる算術復号化
図5hおよび図5iは、図5gに関して記載されるアルゴリズム「arith_decode」に代わるものとして用いることができるアルゴリズム「arith_decode()」の別の実施形態の疑似プログラムコード表現を示す。
図5gおよび図5hおよび図5iによる両方のアルゴリズムは、図3によるアルゴリズム「values_decode()」において用いられうる点に留意すべきである。
要約すると、値mは、(好ましくは図23(1)、図23(2)、図23(3)のテーブル表現において定義されるテーブルari_cf_m[67][17]のサブテーブルである)累積度数テーブル「arith_cf_m[pki][]」で呼び出される関数「arith_decode()」を用いて復号化され、「pki」は、関数「arith_get_pk()」によってリターンされるインデックスに対応する。算術コーダ(またはデコーダ)は、スケーリングを有するタグ生成の方法を用いる整数実施である。詳しくは、K.Sayoodの書籍「Introduction to Data Compression」、第3版、2006年、Elsevier Inc.について述べる。図5hおよび図5iによるコンピュータプログラムコードは、用いられたるアルゴリズムを表す。
11.7 エスケープメカニズム
以下において、図3による復号化アルゴリズム「values_decode()」において用いられるエスケープメカニズムが簡単に述べられる。
(関数「arith_decode()」のリターン値として提供される)復号化された値mがエスケープシンボル「ARITH_ESCAPE」であるときに、変数「lev」および「esc_nb」は、1だけインクリメントされ、さらに、別の値mは、復号化される。この場合、関数「arith_get_pk()」(または「get_pk()」)は、入力引数として値「c+esc_nb<<17」でもう一度呼び出され、変数「esc_nb」は、同じ2タプルのために前に復号化されさらに7にバウンドされるエスケープシンボルの数を表す。
要約すると、エスケープシンボルが確認される場合、最上位ビットプレーン値mは、増加された数値的な重みを含むと仮定される。さらに、現在の数値的な復号化は、繰り返され、修正された数値的な現在のコンテクスト値「c+esc_nb<<17」は、入力変数として関数「arith_get_pk()」に用いられる。したがって、異なるマッピングルールインデックス値「pki」は、サブアルゴリズムの異なる反復において典型的に得られる。
11.8 算術停止メカニズム
以下において、算術停止メカニズムが記載される。算術停止メカニズムは、上方の周波数部分がオーディオエンコーダにおいて0に完全に量子化される場合に、必要なビットの数の低減を可能にする。
実施形態において、算術停止メカニズムは、以下のように実施されうる。一旦、値mがエスケープシンボル「ARITH_ESCAPE」でないと、デコーダは、連続したmが「ARITH_STOP」シンボルを形成するかどうかをチェックする。条件「(esc_nb>0&&m==0)」が真である場合、「ARITH_STOP」シンボルは、検出され、さらに、復号化処理は、終了する。この場合、デコーダは、直接的に、以下に記載される符号復号化または以下に記載される「arith_finish()」関数にジャンプする。条件は、フレームの残りがゼロ値から成ることを意味する。
11.9 下位ビットプレーン復号化
以下において、1つ以上の下位ビットプレーンの復号化が記載される。下位ビットプレーンの復号化は、例えば、図3に示されるステップ312dにおいて実行される。しかしながら、その代わりに、図5jおよび図5nに示されるようなアルゴリズムが用いられうり、図5jのアルゴリズムは、好適なアルゴリズムである。
11.9.1 図5jによる下位ビットプレーン復号化
図5jをこれから参照して、変数aおよびbの値は、値mから導き出されることが明らかである。例えば、値mの数表現は、変数bの数表現を得るために、2ビットだけ右にシフトされる。さらに、変数aの値は、変数mの値から、2ビットだけ左にビットシフトされる、変数bの値のビットシフトされたバージョンを減算することによって得られる。
その後、最下位ビットプレーン値rの算術復号化は、繰り返され、反復の数は、変数「lev」の値によって決定される。最下位ビットプレーン値rは、関数「arith_decode」を用いて得られ、最下位ビットプレーン復号化に適している累積度数テーブルが、用いられる(累積度数テーブル「arith_cf_r」)。変数rの(1の数値的な重みを有する)最下位ビットは、変数aによって表されるスペクトル値の下位ビットプレーンを表し、さらに、変数rの2の数値的な重みを有するビットは、変数bによって表されるスペクトル値の下位ビットを表す。したがって、変数aは、変数aを1ビットだけ左にシフトし、さらに、最下位ビットとして変数rの1の数値的な重みを有するビットを加算することによって更新される。同様に、変数bは、変数bを1ビットだけ左にシフトし、さらに、変数rの2の数値的な重みを有するビットを加算することによって更新される。
したがって、変数a、bのビットを伝える2つの最も重要な情報は、最上位ビットプレーン値mによって決定され、さらに、値aおよびbの(もしあれば)1つ以上の最下位ビットは、1つ以上の下位ビットプレーン値rによって決定される。
上記を要約すると、「ARITH_STOP」シンボルが満たされない場合、残りのビットプレーンは、いずれかが存在する場合、現在の2タプルのためにそれから復号化される。残りのビットプレーンは、累積度数テーブル「arith_cf_r[]」で関数「arith_decode()」lev回数を呼び出すことによって、最上位から最下位レベルまで復号化される。復号化されたビットプレーンrは、疑似プログラムコードが図5jに示されるアルゴリズムに従って前に復号化された値mをリファインすることを許可する。
11.9.2 図5nによる下位ビットバンド復号化
しかしながら、その代わりに、疑似プログラムコード表現が図5nに示されるアルゴリズムを、下位ビットプレーン復号化のために用いることもできる。この場合、「ARITH_STOP」シンボルが満たされない場合、残りのビットプレーンは、いずれかが存在する場合、現在の2タプルのためにそれから復号化される。残りのビットプレーンは、累積度数テーブル「arith_cf_r()」で「lev」回数「arith_decode()」を呼び出すことによって、最上位から最下位レベルまで復号化される。復号化されたビットプレーンrは、図5nに示されるアルゴリズムに従って前に復号化された値mのリファインのために許可する。
11.10 コンテクスト更新
11.10.1 図5k、図5lおよび図5mによるコンテクスト更新
以下において、スペクトル値のタプルの復号化を完全にするために用いられる演算が図5kおよび図5lを参照して記載される。さらに、オーディオコンテンツの現在の部分(例えば現在のフレーム)と関連するスペクトル値のタプルのセットの復号化を完全にするために用いられる演算が記載される。
図5k、図5lおよび図5mによるアルゴリズムは、代わりのアルゴリズムが用いられうるにもかかわらず、好ましい点に留意すべきである。
図5kをこれから参照して、下位ビット復号化312dの後に、配列「x_ac_dec[]」のエントリインデックス2*iを有するエントリがaに等しく設定され、さらに、配列「x_ac_dec[]」のエントリインデックス「2*i+1」を有するエントリがbに等しく設定されることが明らかである。換言すれば、下位ビット復号化312dの後の時点で、2タプル{a,b}の符号なしの値は、完全に復号化される。それは、図5kに示されるアルゴリズムに従ってスペクトル係数を保持する配列(例えば配列「x_ac_dec[]」)に保存される。
その後、コンテクスト「q」は、次の2タプルのためにも更新される。このコンテクスト更新は、最後の2タプルのためにも実行されなければならない点に留意すべきである。このコンテクスト更新は、疑似プログラムコード表現が図5lに示される関数「arith_update_context()」によって実行される。
図5lをこれから参照して、関数「arith_update_context(i,a,b)」は、入力変数として、2タプルの復号化され符号なしの量子化されたスペクトル係数(またはスペクトル値)a、bを受信することが明らかである。加えて、関数「arith_update_context」は、入力変数として、復号化する量子化されたスペクトル係数のインデックスi(例えば周波数インデックス)も受信する。換言すれば、入力変数iは、例えば、絶対値が入力変数a、bによって定義されるスペクトル値のタプルのインデックスであってもよい。明らかなように、配列「q[][]」のエントリ「q[1][i]」は、a+b+1に等しい値に設定されうる。加えて、配列「q[][]」のエントリ「q[1][i]」の値は、「0xF」の16進値に制限されうる。このように、配列「q[][]」のエントリ「q[1][i]」は、周波数インデックスiを有するスペクトル値の現在復号化されたタプル{a,b}の絶対値の合計を計算しさらに前記合計の結果に1を加算することによって得られる。
配列「q[][]」のエントリ「q[1][i]」は、それが付加的なスペクトル値(またはスペクトル値のタプル)の後の復号化のために用いられるコンテクストのサブ区域を表すので、コンテクストサブ区域値として考慮されうる点にここで留意すべきである。
(その符号付きのバージョンが配列「x_ac_dec[]」のエントリ「x_ac_dec[2*i]」および「x_ac_dec[2*i+1]」に格納される)2つの現在復号化されたスペクトル値の絶対値aおよびbの合計は、復号化されたスペクトル値のノルム(例えばL1ノルム)の計算として考慮されうる点にここで留意すべきである。
複数の前に復号化されたスペクトル値によって形成されるベクトルのノルムを表すコンテクストサブ区域値(すなわち配列「q[][]」のエントリ)は、特に意味がありさらにメモリ効率がよいことが見いだされている。複数の前に復号化スペクトル値に基づいて計算されるそのようなノルムは、コンパクトな形式で意味のあるコンテクスト情報を含むことが見いだされている。スペクトル値の符号は、典型的にコンテクストの選択のために特に関連しないことが見いだされている。複数の前に復号化されたスペクトル値全体のノルムの形成は、いくつかの詳細が破棄される場合があるにもかかわらず、典型的に最も重要な情報を維持することも見いだされている。さらに、最大値への数値的な現在のコンテクスト値の制限は、典型的に情報の多大な損失をもたらさないことが見いだされている。むしろ、所定の閾値よりも大きい重要なスペクトル値のための同じコンテクスト状態を用いることがより効率的であることが見いだされている。このように、コンテクストサブ区域値の制限は、メモリ効率のさらなる改良をもたらす。さらに、特定の最大値へのコンテクストサブ区域値の制限は、例えば図5cおよび図5dに関して記載されている数値的な現在のコンテクスト値の特に単純なおよび計算的に効率的な更新を可能にすることが見いだされている。コンテクストサブ区域値を比較的小さい値に(例えば15の値に)制限することによって、複数のコンテクストサブ区域値に基づくコンテクスト状態を、図5cおよび図5dを参照して述べられている効率的な形式で表すことができる。
さらに、1および15間の値へのコンテクストサブ区域値の制限は、精度およびメモリ効率間の特に良好な妥協をもたらすことが見いだされているが、その理由は、4ビットがそのようなコンテクストサブ区域値を格納するために十分であるからである。
しかしながら、いくつかの他の実施形態において、コンテクストサブ区域値は、単一の復号化されたスペクトル値だけに基づいてもよい点に留意すべきである。この場合、ノルムの形成は、任意に省略されうる。
フレームの次の2タプルは、関数「arith_get_context()」から始まって、iを1だけインクリメントすることによってさらに上述と同じ処理をやり直すことによって、関数「arith_update_context」の完了の後に復号化される。
lg/2の2タプルがフレーム内で復号化されるときにまたは停止シンボル「ARITH_STOP」が生じると、スペクトル振幅の復号化処理が終了し、さらに、符号の復号化が開始する。
符号の復号化に関する詳細が図3に関して述べられ、符号の復号化は、参照番号314において示される。
一旦、全ての符号なしの量子化されたスペクトル係数が復号化されると、対応する符号が加算される。「x_ac_dec」のヌルでない量子化された値ごとに、ビットが読み取られる。読み取られたビット値が1に等しい場合、量子化された値は正であり、何も行われず、さらに、符号付きの値は前に復号化された符号なしの値に等しい。さもなければ(すなわち読み取られたビット値が0に等しい場合)、復号化された係数(またはスペクトル値)は負であり、さらに、2つの補数は符号なしの値からとられる。符号ビットは、下からより高い周波数まで読み取られる。詳しくは、図3についてさらに符号復号化314に関する説明について述べる。
復号化は、関数「arith_finish()」を呼び出すことによって終了される。残りのスペクトル係数は、0に設定される。それぞれのコンテクスト状態は、対応して更新される。
詳しくは、関数「arith_finish()」の疑似プログラムコード表現を示す図5mについて述べる。明らかなように、関数「arith_finish()」は、復号化され量子化されたスペクトル係数を表す入力変数lgを受信する。好ましくは、関数「arith_finish」の入力変数lgは、スペクトル値を考慮しないで、0値が「ARITH_STOP」シンボルの検出に応じて割り当てられている実際に復号化されたスペクトル係数の数を表す。関数「arith_finish」の入力変数Nは、現在のウィンドウ(すなわちオーディオコンテンツの現在の部分と関連するウィンドウ)のウィンドウの長さを表す。典型的に、長さNのウィンドウと関連するスペクトル値の数は、N/2に等しく、さらに、ウィンドウの長さNのウィンドウと関連するスペクトル値の2タプルの数は、N/4に等しい。
関数「arith_finish」は、入力値として、復号化されたスペクトル値のベクトル「x_ac_dec」または少なくとも復号化されたスペクトル係数のそのようなベクトルの参照を受信する。
関数「arith_finish」は、スペクトル値が算術停止条件の存在のため復号化されなかった配列(またはベクトル)「x_ac_dec」のエントリを0に設定するように構成される。さらに、関数「arith_finish」は、値が算術停止条件の存在のため復号化されなかったスペクトル値と関連するコンテクストサブ区域値「q[1][i]」を1の所定の値に設定する。1の所定の値は、スペクトル値のタプルに対応し、両方のスペクトル値は、0に等しい。
したがって、関数「arith_finish()」は、算術停止条件の存在においても、スペクトル値の全体の配列(またはベクトル)「x_ac_dec[]」およびコンテクストサブ区域値「q[1][i]」の全体の配列を更新することを可能にする。
11.10.2 図5oおよび図5pによるコンテクスト更新
以下において、コンテクスト更新の別の実施形態が図5oおよび図5pを参照して記載される。2タプル(a、b)の符号なしの値が完全に復号化される時点で、コンテクストqは、それから次の2タプルのために更新される。更新は、現在の2タプルが最後の2タプルである場合にも実行される。両方の更新は、疑似プログラムコード表現が図5oに示される関数「arith_update_context()」によって行われる。
フレームの次の2タプルは、それから、iを1だけインクリメトしさらに関数arith_decode()を呼び出すことによって復号化される。lg/2の2タプルがフレームですでに復号化された場合、または、停止シンボル「ARITH_STOP」が生じる場合、関数「arith_finish()」が呼び出される。コンテクストは、次のフレームのための配列(またはベクトル)「qs」において保存されさらに格納される。関数「arith_save_context()」の疑似プログラムコードは、図5pに示される。
一旦、全ての符号なしの量子化されたスペクトル係数が復号化されると、符号がそれから加算される。「qdec」の非量子化された値ごとに、ビットが読み取られる。読み取られたビット値が0に等しい場合、量子化された値は正であり、何も行われず、さらに、符号付の値は前に復号化された符号なしの値に等しい。さもなければ、復号化された係数は負であり、さらに、2つの補数は符号なしの値からとられる。符号付のビットは、下から高い周波数まで読み取られる。
11.11 復号化処理の要約
以下において、復号化処理が簡単に要約される。詳しくは、上述の議論および図3、図4、図5a、図5c、図5e、図5g、図5j、図5k、図5lおよび図5mについて述べる。量子化されたスペクトル係数「x_ac_dec[]」は、最も低い周波数係数から始まって最も高い周波数係数に進んでノイズレスに復号化される。それらは、({a,b}でも指定される)いわゆる2タプル(a、b)において集める2つの連続した係数a、bのグループによって復号化される。
周波数領域のための(すなわち周波数領域モードのための)復号化された係数「x_ac_dec[]」は、それから配列「x_ac_quant[g][win][sfb][bin]」に格納される。ノイズレス符号化コードワードの伝送の順序は、それらが受信される順序に復号化されさらに配列に格納されるときに、「bin」が最も急速にインクリメントするインデックスであり、さらに、「g」が最もゆっくりインクリメントするインデックスである。コードワード内において、復号化の順序は、aそしてbである。「TCX」のための(すなわち変換符号化された励起を用いるオーディオ復号化のための)復号化された係数「x_ac_dec[]」は、(例えば、)配列「x_tcx_invquant[win][bin]」に(直接的に)格納され、さらに、ノイズレス符号化コードワードの伝送の順序は、それらが受信される順序に復号化されさらに配列に格納されるときに、「bin」が最も急速にインクリメントするインデックスであり、さらに、「win」が最もゆっくりインクリメントするインデックスである。コードワード内において、復号化の順序は、aそしてbである。
最初に、フラグ「arith_reset_flag」は、コンテクストがリセットされなければならないかどうかを決定する。フラグが真である場合、これは、関数「arith_map_context」において考慮される。
復号化処理は、コンテクストエレメントベクトル「q」が「q[1][]」に格納される前のフレームのコンテクストエレメントを「q[0][]」にコピーしさらにマップすることによって更新される初期設定段階から始まる。「q」内のコンテクストエレメントは、2タプルごとに4ビットに格納される。詳しくは、図5aの疑似プログラムコードについて述べる。
ノイズレスデコーダは、符号なしの量子化されたスペクトル係数の2タプルを出力する。最初に、コンテクストの状態cは、復号化する2タプルを囲む前に復号化されたスペクトル係数に基づいて計算される。したがって、状態は、2つの新しい2タプルだけを考慮して、最後の復号化された2タプルのコンテクスト状態を用いて増加的に更新される。状態は、17ビットに復号化され、さらに、関数「arith_get_context」によってリターンされる。設定された関数「arith_get_context」の疑似プログラムコード表現は、図5cに示される。
コンテクスト状態cは、最上位2ビット的なプレーンmを復号化するために用いられる累積度数テーブルを決定する。cから対応する累積度数テーブルインデックス「pki」へのマッピングは、関数「arith_get_pk()」によって実行される。関数「arith_get_pk()」の疑似プログラムコード表現は、図5eに示される。
値mは、累積度数テーブル「arith_cf_m[pki][]」で呼び出される関数「arith_decode()」を用いて復号化され、「pki」は、「arith_get_pk()」によってリターンされるインデックスに対応する。算術コーダ(およびデコーダ)は、スケーリングを有するタグ生成の方法を用いる整数実施である。図5gによる疑似プログラムコードは、用いられたアルゴリズムを表す。
復号化された値mがエスケープシンボル「ARITH_ESCAPE」であるときに、変数「lev」および「esc_nb」は、1だけインクリメントされ、さらに、別の値mは、復号化される。この場合、関数「get_pk()」は、入力引数として値「c+esc_nb<<17」でもう一度呼び出され、「esc_nb」は、同じ2タプルのために前に復号化されさらに7にバウンドされるエスケープシンボルの数である。
一旦、値mがエスケープシンボル「ARITH_ESCAPE」でないと、デコーダは、連続したmが「ARITH_STOP」シンボルを形成するかどうかをチェックする。条件「(esc_nb>0&&m==0)」が真である場合、「ARITH_STOP」シンボルは、検出され、さらに、復号化処理は、終了する。デコーダは、直接的に、以下に記載される符号復号化にジャンプする。条件は、フレームの残りが0値から成ることを意味する。
「ARITH_STOP」シンボルが満たされない場合、残りのビットプレーンは、いずれかが存在する場合、現在の2タプルのためにそれから復号化される。残りのビットプレーンは、累積度数テーブル「arith_cf_r[]」で「arith_decode()」lev回数を呼び出すことによって、最上位から最下位レベルまで復号化される。復号化されたビットプレーンrは、擬似プログラムコードが図5jに示されるアルゴリズムに従って、前に復号化された値mのリファインを許可する。この時点で、2タプル(a、b)の符号なしの値は、完全に復号化される。それは、疑似プログラムコード表現が図5kに示されるアルゴリズムに従ってスペクトル係数を保持するエレメントに保存される。
コンテクスト「q」は、次の2タプルのためにも更新される。このコンテクスト更新は、最後の2タプルのためにも実行されなければならない点に留意すべきである。このコンテクスト更新は、疑似プログラムコード表現が図5lに示される関数「arith_update_context()」によって実行される。
フレームの次の2タプルは、関数「arith_get_context()」から始まって、iを1だけインクリメントすることによってさらに上述と同じ処理をやり直すことによって復号化される。lg/2の2タプルがフレーム内で復号化されるときにまたは停止シンボル「ARITH_STOP」が生じるときに、スペクトル振幅の復号化処理が終了し、さらに、符号の復号化が開始する。
復号化は、関数「arith_finish()」を呼び出すことによって終了される。残りのスペクトル係数は、0に設定される。それぞれのコンテクスト状態は、対応して更新される。関数「arith_finish」の疑似プログラムコード表現は、図5mに示される。
一旦、全ての符号なしの量子化されたスペクトル係数が復号化されると、対応する符号が加算される。「x_ac_dec」のヌルでない量子化された値ごとに、ビットが読み取られる。読み取られたビット値が1に等しい場合、量子化された値は正であり、何も行われず、さらに、符号付きの値は前に復号化された符号なしの値に等しい。さもなければ、復号化された係数は負であり、さらに、2つの補数は符号なしの値からとられる。符号付のビットは、下から高い周波数まで読み取られる。
11.12 凡例
図5qは、図5a、5c、5e、5f、5g、5j、5k、5lおよび5mによるアルゴリズムに関連する定義の凡例を示す。
図5rは、図5b、5d、5f、5h、5i、5n、5oおよび5pによるアルゴリズムに関連する定義の凡例を示す。
12. マッピングテーブル
本発明による実施形態において、特に有利なテーブル「ari_lookup_m」、「ari_hash_m」および「ari_cf_m」は、図5eまたは図5fによる関数「arith_get_pk()」の実行のために、さらに、図5g、図5hおよび図5iに関して述べられた関数「arith_decode()」の実行のために用いられる。しかしながら、異なるテーブルがいくつかの代わりの実施形態において用いられうる点に留意すべきである。
12.1 図22(1)、図22(2)、図22(3)および図22(4)によるテーブル「ari_hash_m[742]」
関数「arith_get_pk」によって用いられ、第1の好適な実施形態が図5eに関して記載されさらに第2実施形態が図5fに関して記載されている、テーブル「ari_hash_m」の特に有利な実施のコンテンツは、図22(1)から図22(4)のテーブルにおいて示される。図22(1)から図22(4)のテーブル表現は、テーブル(または配列)「ari_hash_m[742]」の742のエントリをリストする点に留意すべきである。図22(1)から図22(4)のテーブル表現は、最初の値「0x00000104UL」がエレメントインデックス(またはテーブルインデックス)0を有するテーブルエントリ「ari_hash_m[0]」に対応するように、さらに、最後の値「0xFFFFFF00UL」がエレメントインデックスまたはテーブルインデックス741を有するテーブルエントリ「ari_hash_m[741]」に対応するように、エレメントインデックスの順序にエレメントを示す点にも留意すべきである。「0x」は、テーブル「ari_hash_m[]」のテーブルエントリが16進形式において表されることを示す点にここでさらに留意すべきである。さらに、添え字「UL」は、テーブル「ari_hash_m[]」のテーブルエントリが(32ビットの精度を有する)符号なしの「long」整数値として表されることを示す点にここで留意すべきである。
さらに、図22(1)から図22(4)によるテーブル「ari_hash_m[]」のテーブルエントリは、関数「arith_get_pk()」のテーブル検索506b、508b、510bの実行を可能にするために、数値的な順序に配置される点に留意すべきである。
テーブル「ari_hash_m」のテーブルエントリの最上位24ビットは、特定の重要な状態値を表し(さらに第1のサブエントリとして考慮されうり)、その一方で、最下位8ビットは、マッピングルールインデックス値「pki」を表す(さらに第2のサブエントリとして考慮されうる)点にさらに留意すべきである。このように、テーブル「ari_hash_m[]」のエントリは、マッピングルールインデックス値「pki」上に、コンテクスト値の「direct hit(直接的なヒットの)」マッピングを表す。
しかしながら、テーブル「ari_hash_m[]」のエントリの最上位24ビットは、同時に、同じマッピングルールインデックス値が関連する数値的なコンテクスト値の間隔の間隔境界を表す。この概念に関する詳細は、すでに上述されている。
12.2 図21によるテーブル「ari_lookup_m」
テーブル「ari_lookup_m」の特に有利な実施形態のコンテンツが図21の表において示される。図21の表は、テーブル「ari_lookup_m」のエントリをリストする点にここで留意すべきである。エントリは、例えば、「i_max」または「i_min」または「i」で指定される(「element index(エレメントインデックス)」または「array index(配列インデックス)」または「table index(テーブルインデックス)」にも指定される)1次元整数型エントリインデックスによって参照される。742のエントリの合計を含むテーブル「ari_lookup_m」は、図5eまたは図5fによる関数「arith_get_pk」による使用のためによく適している点に留意すべきである。図21による「ari_lookup_m」は、テーブル図22によるテーブル「ari_hash_m」と協働するために適している点に留意すべきである。
テーブル「ari_lookup_m[742]」のエントリは、0および741間にテーブルインデックス「i」(例えば「i_min」または「i_max」または「i」)の昇順にリストされる点に留意すべきである。ターム「0x」は、テーブルエントリが16進形式に表されることを示す。したがって、最初のテーブルエントリ「0x01」は、テーブルインデックス0を有するテーブルエントリ「ari_lookup_m[0]」に対応し、さらに、最後のテーブルエントリ「0x27」は、テーブルインデックス741を有するテーブルエントリ「ari_lookup_m[741]」に対応する。
テーブル「ari_lookup_m[]」のエントリは、テーブル「arith_hash_m[]」の隣接するエントリによって定義される間隔と関連する点に留意すべきである。このように、テーブル「ari_lookup_m」のエントリは、数値的なコンテクスト値の間隔と関連するマッピングルールインデックス値を表し、間隔は、テーブル「arith_hash_m」のエントリによって定義される。
12.3. 図23(1)、図23(2)および図23(3)によるテーブル「ari_cf_m[64][17]」
図23は、1つが、例えば、関数「arith_decode()」の実行のために、すなわち最上位ビットプレーン値の復号化のために、オーディオエンコーダ100、700またはオーディオデコーダ200、800によって選択される、64の累積度数テーブル(またはサブテーブル)「ari_cf_m[pki][17]」のセットを示す。図23(1)から図23(3)に示される64の累積度数テーブル(またはサブテーブル)のうちの選択された1つは、関数「arith_decode()」の実行においてテーブル「cum_freq[]」の関数をとる。
図23(1)から図23(3)で明らかなように、それぞれのサブブロックまたはラインは、17のエントリを有する累積度数テーブルを表す。例えば、第1のサブブロックまたはライン2310は、「pki=0」のための累積度数テーブルの17のエントリを表す。第2のサブブロックまたはライン2312は、「pki=1」のための累積度数テーブルの17のエントリを表す。最後に、第64のサブブロックまたはライン2364は、「pki=63」のための累積度数テーブルの17のエントリを表す。このように、図23(1)から図23(3)は、「pki=0」から「pki=95」までのための64の異なる累積度数テーブル(またはサブテーブル)を効果的に表し、64の累積度数テーブルのそれぞれは、(波括弧よって囲まれる)サブブロックまたはラインによって表され、さらに、前記累積度数テーブルのそれぞれは、17のエントリを含む。
サブブロックまたはライン(例えば、サブブロックまたはライン2310または2312、または、サブブロックまたはライン2396)内で、最初の値(例えば最初のサブブロック2310の最初の値708)は、サブブロックまたはラインによって表される(0の配列インデックスまたはテーブルインデックスを有する)累積度数テーブルの最初のエントリを表し、さらに、最後の値(例えば最初のサブブロックまたはライン2310の最後の値0)は、サブブロックまたはラインによって表される(16の配列インデックスまたはテーブルインデックスを有する)累積度数テーブルの最後のエントリを表す。
したがって、図23のテーブル表現のそれぞれのサブブロックまたはライン2310、2312、2364は、図5gによるまたは図5hおよび図5iによる関数「arith_decode」による使用のための累積度数テーブルのエントリを表す。関数「arith_decode」の入力変数「cum_freq[]」は、(テーブル「arith_cf_m」の17のエントリの個々のサブブロックによって表される)64の累積度数テーブルのどれが現在のスペクトル係数の復号化のために用いられるべきであるかを表す。
12.4 図24によるテーブル「ari_cf_r[]」
図24は、テーブル「ari_cf_r[]」のコンテンツを示す。
前記テーブルの4つのエントリが図24に示される。しかしながら、テーブル「ari_cf_r」は、最終的には他の実施形態において異なってもよい点に留意すべきである。
13. 概要、パフォーマンス評価および効果
上述のように、本発明による実施形態は、計算の複雑度、必要メモリおよび符号化効率間の改良されたトレードオフを得るために、更新された関数(またはアルゴリズム)およびテーブルの更新されたセットを用いる。
一般的に言って、本発明による実施形態は、改良されたスペクトルノイズレス符号化を作り出す。本発明による実施形態は、USAC(統合スピーチオーディオ符号化)においてスペクトルノイズレス符号化の強化を記載する。
本発明による実施形態は、MPEG入力されたペーパm16912およびm17002に示されるようなスキームに基づいて、スペクトル係数の改良されたスペクトルノイズレス符号化上のCEのための更新された提案を作り出す。両方の提案は、評価され、潜在的な欠点が除去され、さらに、強さが組み合わされた。加えて、本発明の実施形態は、現在のUSAC仕様においてアプリケーションのためのノイズレススペクトル符号化テーブルの更新を含む。
13.1. 概要
以下において、簡単な概要が示される。USAC(統合スピーチオーディオ符号化)の進行中の規格化の間に、USACにおいて強化されたスペクトルノイズレス符号化スキーム(別称エントロピー符号化スキーム)が、提案された。この強化されたスペクトルノイズレス符号化スキームは、量子化されたスペクトル係数をロスレスの方法でより効率的に符号化するために役立つ。したがって、スペクトル係数は、可変長の対応するコードワードにマップされる。このエントロピー符号化スキームは、コンテクストベースの算術符号化スキームに基づく。スペクトル係数のコンテクスト(すなわち隣接するスペクトル係数)は、スペクトル係数の算術符号化のために用いられる確率分布(累積度数テーブル)を決定する。
本発明による実施形態は、USACのコンテクストにおいて前に提案されるように、スペクトル符号化スキームのためのテーブルの更新されたセットを用いる。背景を示すために、従来のスペクトルノイズレス符号化技術は、第1にアルゴリズムさらに第2に訓練されたテーブルのセットからなる(または、少なくともアルゴリズムおよび訓練されたテーブルのセットを含む)点に留意すべきである。訓練されたテーブルのこの従来のセットは、USAC WD4ビットストリームに基づく。USACが現在WD7に進んで、さらに、重要な変更がその間にUSAC仕様に適用されているので、再訓練されたテーブルの新しいセットは、ごく最近のUSACバージョンWD7に基づく本発明による実施形態において用いられる。アルゴリズムそのものは、不変のままである。副次的な効果として、再訓練されたテーブルは、前に示されたスキームのどれよりも良好な圧縮パフォーマンスを提供する。
本発明によれば、従来の訓練されたテーブルを、さらなる符号化パフォーマンスをもたらすここで示されるような再訓練されたテーブルと置き換えることが提案される。
13.2. 序文
以下において、序文が提供される。
USAC作業項目について、ノイズレス符号化スキームを更新することに関するいくつかの提案は、共同で最後の会議の間に言及された。しかしながら、この作業は、基本的に第89回の会議で始められた。それから、USAC WD4参照品質ビットストリームおよびデータベースを訓練するWD4上の訓練に基づいてパフォーマンス結果を示すことは、スペクトル係数符号化に関する全ての提案のための一般的なやり方であった。
一方、USACの他の分野に対する大きな改良は、特にステレオ処理およびウィンドウ化において、今日現在、USAC仕様に組み込まれている。これらの改良もスペクトルノイズレス符号化のための統計にわずかに影響を及ぼすことが見いだされた。したがって、ノイズレス符号化CEsのために示される結果は、準最適にみなされるが、その理由は、それらが最新のWD修正に対応しないからである。
したがって、更新されたアルゴリズムにさらに符号化されさらに復号化されるスペクトル値の統計により良好に適しているスペクトルノイズレス符号化テーブルが示唆される。
13.3. アルゴリズムの簡単な説明
以下において、アルゴリズムの簡単な説明が提供される。
メモリフットプリントおよび計算の複雑度の問題を解決するために、改良されたノイズレス符号化スキームは、ワーキングドラフト6/7(WD6/7)におけるようなスキームを置き換えるために提案された。開発における主な焦点は、圧縮効率を維持しさらに計算の複雑度を増加しないとともに、メモリ需要を低減することに置かれた。より詳しくは、目標は、圧縮パフォーマンス、複雑度および必要メモリの多次元複雑度スペースにおて最良のトレードオフに達することであった。
提案された符号化スキーム提案は、WD6/7ノイズレスコーダの主な特徴、すなわちコンテクスト適合を取り入れる。コンテクストは、過去および現在のフレームの両方からWD6/7におけるように生じる前に復号化されたスペクトル係数を用いて導き出される。しかしながら、スペクトル係数は、これから、2タプルを形成するための2係数を一緒に組み合わせることによって符号化される。別の違う点は、スペクトル係数がこれから3つの部分、符号、MSBおよびLSBに分割されるという事実にある。符号は、それらが存在する場合、2つの部分、2つの最上位ビットおよび残りのビットにさらに分割される大きさから、独立して符号化される。2つのエレメントの大きさが3よりも小さいまたはそれに等しい2タプルは、MSB符号化によって直接的に符号化される。さもなければ、エスケープコードワードは、いかなる付加的なビットプレーンも信号で伝えるために、最初に伝送される。ベースバージョンにおいて、失った情報、LSBおよび符号は、一様確率分布を用いて両方とも符号化される。
テーブルサイズ低減は、
・17のシンボルのための確率だけが格納される必要がある:{[0;+3][0;+3]}+ESCシンボル;
・グループ化テーブル(egroups、dgroups、dgvectors)を格納する必要がない;さらに
・ハッシュテーブルのサイズが適切な訓練で低減されうる
ので、まだ可能である。
13.3.1 MSB符号化
以下において、MSB符号化が記載される。
すでに述べたように、WD6/7、前の提案および現在の提案間の主な違いは、シンボルの次元である。WD6/7において、4タプルがコンテクスト生成およびノイズレス符号化のために考慮された。前の提案において、1タプルが必要ROMを低減するために代わりに用いられた。我々の開発の間に、2タプルは、計算の複雑度を増加しないで、必要ROMを低減するために最良の妥協であることが見いだされた。コンテクスト導出のための4つの4タプルを考慮する代わりに、現在、4つの2タプルが考慮される。図25に示されるように、3つの2タプルが過去のフレームからさらに1つが現在のフレームからもたらされる。
テーブルサイズ低減は、3つの主な要因による。第1に、17のシンボルのための確率だけが格納される必要がある(すなわち{[0;+3][0;+3]}+ESCシンボル)。グループ化テーブル(すなわちegroups、dgroups、dgvectors)がもはや必要ない。さらに、ハッシュテーブルのサイズが適切な訓練を実行することによって低減された。
次元が4から2に低減されたにもかかわらず、複雑度は、WD6/7におけるような範囲に維持された。それは、コンテクスト生成およびハッシュテーブルアクセスの両方を単純化することによって達成された。
異なる単純化および最適化は、符号化パフォーマンスが影響を受けなくしかもわずかに改良された方法で行われた。
13.3.2 LSB符号化
LSBは、一様確率分布で符号化される。WD6/7と比較して、LSBは、現在4tタプルの代わりに2タプルで考慮される。しかしながら、最下位ビットの異なる符号化が可能である。
13.3.3 符号符号化
符号は、複雑度低減のために算術コアコーダを用いないで符号化される。符号は、対応する大きさがヌルでないときにだけ、1ビットで伝送される。0は正の値をさらに1は負の値を意味する。
13.4. テーブルの提案された更新
この貢献は、USACスペクトルノイズレス符号化スキームのためのテーブルの更新されたセットを提供する。テーブルは、現在のUSAC WD6/7ビットストリームに基づいて再訓練された。訓練する処理から生じる実際のテーブルから離れて、アルゴリズムが不変のままである。
新しいテーブルの符号化効率および必要メモリの再訓練の効果を調査することは、前の提案(M17558)およびWD6に対して比較される。WD6は、a)第92回の会議の結果がこの参照に関して示された、さらに、b)WD6およびWD7間の違いが(スペクトル係数のエントロピー符号化または分布に関して効果なしにバグ修正する)非常に軽微なだけであるので、基準点として選択される。
13.4.1 符号化効率
最初に、テーブルの提案された新しいセットの符号化効率が、USAC WD6およびM17558において提案されるようなCEに対して比較される。図26のテーブル表現において明らかなように、純粋に再訓練することによって、符号化効率において平均増加は(WD6と比較して)1.74%(M17558)から2.45%(本発明の実施形態による新しい提案)に増加することができる。M17558と比較して、圧縮ゲインを、このように本発明による実施形態においておよそ0.7%だけ増加することができる。
図27は、全ての操作点のための圧縮ゲインを視覚化する。明らかなように、少なくとも2%の最小圧縮ゲインを、WD6と比較して本発明による実施形態を用いて達することができる。例えば12kbit/sおよび16kbit/sのような低いレートに対して、圧縮ゲインは、わずかにでも増加される。良好なパフォーマンスは、例えば64kbit/sのようなより高いビットレートでも保持され、3%を超える符号化効率において重要な増加を観察することができる。
全てのWD6参照品質ビットストリームのロスレストランスコーディングは、ビットリザーバ制約を違反しないで可能であることを証明された点に留意すべきである。より詳細な結果がセクション13.6.において示される。
13.4.2 メモリ需要および複雑度
第2に、メモリ需要および複雑度は、USAC WD6およびM17558において提案されるようなCEに対して比較される。図28のテーブルは、WD6、M17558における提案および本発明の実施形態による新しい提案におけるようなノイズレスコーダのためのメモリ需要を比較する。明らかに分かるように、メモリ需要は、M17558において提案されるように、新しいアルゴリズムを採用することによって著しく低減される。さらに、新しい提案のために、全テーブルサイズは、1441ワードの全ROM需要およびオーディオチャンネルごとに64ワード(32ビット)の全RAM需要をもたらす、ほとんど80ワード(32ビット)だけわずかに低減されることも明らかである。ROM需要において少なく保存することは、WD6訓練ビットストリームの新しいセットに基づいて自動訓練アルゴリズムによって見いだされる、確率モデルの数およびハッシュテーブルサイズ間のより良好なトレードオフの結果である。さらに詳しくは、図29のテーブルについて述べる。
複雑度に関して、新しく提案されたスキームの計算の複雑度は、USACにおいて現在のノイズレスの最適化されたバージョンに対して比較された。新しい符号化スキームは、現在のスキームと同じ複雑度の順序を有することが、「pen and paper(ペンおよびペーパ)」方法によってさらにコードに命令することによって見いだされた。32kbpsのステレオのための図30のテーブルおよび12kbpsのモノラルの操作点のための図31のテーブルにおいて報告されるように、推定された複雑度は、WD6ノイズレスデコーダの最適化された実施態様をそれぞれ超えて0.006の重み付けMOPSおよび0.024の重み付けMOPSの増加を示す。近似的に11.7のPCU[2]の全体の複雑度と比較して、これらの差をごくわずかであると考慮することができる。
13.5. 結論
以下において、いくつかの結論が提供される。
USACスペクトルノイズレス符号化スキームのためのテーブルの新しいセットが示された。より前のビットストリームに基づく訓練の結果である前の提案とは対照的に、提案された新しいテーブルは、現在、現在のUSAC WDビットストリームにおいて訓練され、高度な訓練概念が用いられている。この再訓練によって、前の提案と比較して、少ないメモリ需要を犠牲にしないでまたは複雑度を増加しないで、現在のUSACビットストリーム上の符号化効率を改良することができる。USAC WD6と比較して、メモリ需要を著しく低減することができる。
13.6. WD6ビットストリームのトランスコーディングに関する詳細な情報
ワーキングドラフト6(WD6)ビットストリームのトランスコーディングに関する詳細な情報が図32、図33、図34、図35および図36のテーブル表現において明らかである。
図32は、本発明による実施形態においてさらにWD6において算術コーダによって生成される平均ビットレートのテーブル表現を示す。
図33は、提案されたスキームを用いるフレームベースにおけるUSACの最小、最大および平均ビットレートのテーブル表現を示す。
図34は、WD6算術コーダを用いるUSACコーダおよび本発明による実施形態によるコーダ(「new proposal(新しい提案)」)によって生成される平均ビットレートのテーブル表現を示す。
図35は、本発明による実施形態のための最良のおよび最悪の場合のテーブル表現を示す。
図36は、本発明による実施形態のためのビットリザーバ制限のテーブル表現を示す。
14. ワーキングドラフト6またはワーキングドラフト7と比較したときの変更
以下において、従来のノイズレス符号化と比較したときのノイズレス符号化の変更が記載される。したがって、実施形態は、USAC規格案のワーキングドラフト6またはワーキングドラフト7と比較したときの修正に関して定義される。
特に、WDテキストに対する変更が記載される。換言すれば、このセクションは、USAC仕様WD7に対して変更の完全なセットをリストする。
14.1. 技術的な説明に対する変更
提案された新しいノイズレス符号化は、以下において記載されるMPEG USAC WDにおいて修正を生じる。主な違いがマークされる。
14.1.1. 構文およびペイロードの変更
図37は、算術的に符号化されたデータ「arith_data()」の構文の表現を示す。主な違いがマークされる。
以下において、スペクトルノイズレスコーダのペイロードに関する変更が記載される。
「linear perdiction−domain(線形予測領域)」符号化された信号および「frequency−domain(周波数領域)」符号化された信号の両方からのスペクトル係数は、量子化されさらにそれから最適にコンテクストに依存する算術符号化によってノイズレスに符号化されるスカラである。量子化された係数は、最も低い周波数から最も高い周波数まで伝送される前に2タプルにおいて集められる。2タプルの使用は、スペクトルノイズレス符号化の前のバージョンと比較したときの変更を構成する点に留意すべきである。
しかしながら、それぞれの2タプルは、符号s、最上位2ビット的なプレーンmおよび残りの下位ビットプレーンrに分割されることがさらなる変更である。また、値mは係数の近辺に従って符号化され、さらに、残りの下位ビットプレーンrはコンテクストを考慮しないでエントロピー符号化されることが変更である。また、値mおよびrは、算術コーダのシンボルを形成することが前のバージョンのいくつかに関する変更である。最後に、符号sは、ヌルでない量子化された係数ごとに1ビットを用いて算術コーダの外側で符号化されることが前のバージョンのいくつかに関する変更である。
詳細な算術を復号化手順がセクション14.2.3において以下に記載される。
14.1.2 定義およびヘルプエレメントの変更
定義およびヘルプエレメントの変更が図38に定義およびヘルプエレメントの表現において示される。
14.2 スペクトルノイズレス符号化
以下において、実施形態によるスペクトルノイズレス符号化が要約される。
14.2.1 ツールの説明
スペクトルノイズレス符号化は、量子化されたスペクトルの冗長性をさらに低減するために用いられる。
スペクトルノイズレス符号化スキームは、動的に適しているコンテクストに関連する算術符号化に基づく。ノイズレス符号化は、量子化されたスペクトル値によって供給され、さらに、4つの前に復号化された付近から導き出されるコンテクストに依存する累積度数テーブルを用いる。ここで、時間および周波数の両方における近辺は、図25に示されるように考慮される。累積度数テーブルは、それから、可変長2進コードを生成するために算術コーダによって用いられる。
算術コーダは、シンボルの所定のセットおよびそれらのそれぞれの確率のための2進コードを生成する。2進コードは、シンボルのセットが位置する確率間隔をコードワードにマップすることによって生成される。
14.2.2 定義
定義およびヘルプエレメントが図39に記載される。算術符号化の前のバージョンと比較したときの変更がマークされる。
14.2.3 復号化処理
量子化されたスペクトル係数qdecは、最も低い周波数係数から始まって最も高い周波数係数に進んでノイズレスに復号化される。それらは、いわゆる2タプル{a,b}において集める2連続した係数aおよびbのグループによって復号化される。
AACのための復号化された係数は、それから配列x_ac_quant[g][win][sfb][bin]に格納される。ノイズレス符号化コードワードの伝送の順序は、それらが受信される順序に復号化されさらに配列に格納されるときに、binが最も急速にインクリメントするインデックスであり、さらに、gが最もゆっくりインクリメントするインデックスである。コードワード内において、復号化の順序は、aそしてbである。
TCXのための復号化された係数は、配列x_tcx_invquant[win][bin]に格納され、さらに、ノイズレス符号化コードワードの伝送の順序は、それらが受信される順序に復号化されさらに配列に格納されるときに、binが最も急速にインクリメントするインデックスであり、さらに、winが最もゆっくりインクリメントするインデックスである。コードワード内において、復号化の順序は、aそしてbである。
復号化処理は、マッピングがqsに格納される保存された過去のコンテクストおよび現在のフレームqのコンテクスト間で行われる初期設定段階から始まる。過去のコンテクストqsは、周波数ラインごとに2ビットに格納される。
詳しくは、図40aにおけるアルゴリズム「arith_map_context」の疑似プログラムコード表現について述べる。
ノイズレスデコーダは、符号なしの量子化されたスペクトル係数の2タプルを出力する。最初は、コンテクストの状態cは、復号化する2タプルを囲む前に復号化されたスペクトル係数に基づいて計算される。状態は、2つの新しい2タプルだけを考慮して、最後の復号化された2タプルのコンテクスト状態を用いて増加的に更新される。状態は、17ビットに符号化され、さらに、関数arith_get_context()によってリターンされる。
関数「arith_get_context()」の疑似プログラムコード表現が図40bに示される。
一旦、コンテクスト状態cが計算されると、最上位2ビット的なプレーンmは、コンテクスト状態に対応する確率モデルに対応する適切な累積度数テーブルで供給されるarith_decode()を用いて復号化される。対応は、関数arith_get_pk()によって行われる。
関数arith_get_pk()の疑似プログラムコード表現が図40cに示される。
値mは、累積度数テーブルarith_cf_m[pki][]で呼び出される関数arith_decode()を用いて復号化され、pkiは、arith_get_pk()によってリターンされるインデックスに対応する。算術コーダは、スケーリングを有するタグ生成の方法を用いる整数実施である。図40dおよび図40eに示される疑似Cコードは、用いられたアルゴリズムを表す。
復号化された値mがエスケープシンボルARITH_ESCAPEであるときに、変数levおよびesc_nbは、1だけインクリメントされ、さらに、別の値mは、復号化される。この場合、関数get_pk()は、入力引数として値c&esc_nb<<17でもう一度呼び出され、esc_nbは、同じ2タプルのために前に復号化されさらに7にバウンドされるエスケープシンボルの数である。
一旦、値mがエスケープシンボルARITH_ESCAPEでないと、デコーダは、連続したmがARITH_STOPシンボルを形成するかどうかをチェックする。条件(esc_nb>0&&m==0)が真である場合、ARITH_STOPシンボルは、検出され、さらに、復号化処理は、終了する。デコーダは、直接的に、arith_save_context()関数にジャンプする。条件は、フレームの残りがゼロ値から成ることを意味する。
ARITH_STOPシンボルが満たされない場合、残りのビットプレーンは、いずれかが存在する場合、現在の2タプルのためにそれから復号化される。残りのビットプレーンは、累積度数テーブルarith_cf_r[]でlev回数arith_decode()を呼び出すことによって、最上位から最下位レベルまで復号化される。復号化されたビットプレーンrは、疑似プログラムコード表現が図40fに示される関数またはアルゴリズムによって前に復号化された値mをリファインすることを許可する。
この点で、2タプル{a,b}の符号なしの値は、完全に復号化される。コンテクストqは、それから次の2タプルのために更新される。それが最後の2タプルである場合も同様である。両方の更新は、疑似プログラムコード表現が図40gに示される関数arith_update_context()によって行われる。
フレームの次の2タプルは、それから、iを1だけインクリメントしさらに関数を呼び出すことによって復号化される。lg/2の2タプルがフレームですでに復号化された場合、または、停止シンボルARITH_STOPが生じる場合、関数arith_save_context()が呼び出される。コンテクストは、次のフレームのためのqsにおいて保存されさらに格納される。関数またはアルゴリズムarith_save_context()の疑似プログラムコード表現は、図40hに示される。
一旦、全ての符号なしの量子化されたスペクトル係数が復号化されると、符号がそれから加算される。qdecのヌルでない量子化された値ごとに、ビットが読み取られる。読み取られたビット値がゼロに等しい場合、量子化された値は正であり、何も行われず、さらに、符号付の値は前に復号化された符号なしの値に等しい。さもなければ、復号化された係数は負であり、さらに、2つの補数は符号なしの値からとられる。符号ビットは、下から高い周波数まで読み取られる。
14.2.4 更新されたテーブル
上述のアルゴリズムで用いられるための再訓練されたテーブルのセットが、図41(1)、図41(2)、図42(1)、図42(2)、図42(3)、図42(4)、図43(1)、図43(2)、図43(3)、図43(4)、図43(5)、図43(6)および図44に示される。
図41(1)および図41(2)は、本発明の実施形態によるテーブル「ari_lookup_m[742]」のコンテンツのテーブル表現を示す。
図42(1)、図42(2)、図42(3)、図42(4)は、本発明の実施形態によるテーブル「ari_hash_m[742]」のコンテンツのテーブル表現を示す。
図43(1)、図43(2)、図43(3)、図43(4)、図43(5)、図43(6)は、本発明の実施形態によるテーブル「ari_cf_m[96][17]」のコンテンツのテーブル表現を示す。
図44は、本発明の実施形態によるテーブル「ari_cf_r[4]」のテーブル表現を示す。
上記を要約すると、本発明による実施形態は、計算の複雑度、必要メモリおよび符号化効率間の特に良好なトレードオフを提供することが明らかである。
15. ビットストリーム構文
15.1 スペクトルノイズレスコーダのペイロード
以下において、スペクトルノイズレスコーダのペイロードに関するいくつか詳細が説明される。いくつかの実施形態において、例えばいわゆる「linear−prediction−domain(線形予測領域)」符号化モードおよび「frequency−domain(周波数領域)」符号化モード)などの複数の異なる符号化モードがある。線形予測領域符号化モードにおいて、ノイズシェーピングは、オーディオ信号の線形予測解析に基づいて実行され、さらに、ノイズシェープされた信号は、周波数領域に符号化される。周波数領域符号化モードにおいて、ノイズシェーピングは、心理音響解析に基づいて実行され、さらに、オーディオコンテンツのノイズシェープされたバージョンは、周波数領域に符号化される。
「linear−prediction−domain(線形予測領域)」符号化された信号および「frequency−domain(周波数領域)」符号化された信号の両方からのスペクトル係数は、量子化されさらにそれから最適にコンテクストに依存する算術符号化によってノイズレスに符号化されるスカラである。量子化された係数は、最も低い周波数から最も高い周波数まで伝送される前に2タプルにおいて集められる。それぞれの2タプルは、符号s、最上位2ビット的なプレーンmおよび(もしあれば)残りの1つ以上の下位ビットプレーンrに分割される。値mは、隣接するスペクトル係数によって定義されるコンテクストに従って符号化される。換言すれば、mは、係数近辺に従って符号化される。残りの下位ビットプレーンrは、コンテクストを考慮しないでエントロピー符号化される。mおよびrによって、これらのスペクトル係数の振幅を、デコーダ側に再構成することができる。全てのヌルでないシンボルのために、符号sは、1ビットを用いて算術コーダの外側で符号化される。換言すれば、値mおよびrは、算術コーダのシンボルを形成する。最後に、符号sは、ヌルでない量子化された係数ごとに1ビットを用いて算術コーダの外側で符号化される。
詳細な算術符号化手順がここに記載される。
15.2 図6aから図6jによる構文エレメント
以下において、算術的に符号化されたスペクトル情報を伝えるビットストリームのビットストリーム構文が図6aから図6jを参照して記載される。
図6aは、いわゆるUSAC生データブロック(「usac_raw_data_block()」)の構文表現を示す。
USAC生データブロックは、1つ以上の単一のチャンネルエレメント(「single_channel_element()」)および/または1つ以上のチャンネルペアエレメント(「channel_pair_element()」)を含む。
図6bをこれから参照して、単一のチャンネルエレメントの構文が記載される。単一のチャンネルエレメントは、コアモードに基づく線形予測領域チャンネルストリーム(「lpd_channel_stream()」)または周波数領域チャンネルストリーム(「fd_channel_stream()」)を含む。
図6cは、チャンネルペアエレメントの構文表現を示す。チャンネルペアエレメントは、コアモード情報(「core_mode0」、「core_mode1」)を含む。加えて、チャンネルペアエレメントは、構成情報「ics_info()」を含むことができる。さらに、コアモード情報に応じて、チャンネルペアエレメントは、チャンネルの第1と関連する線形予測領域チャンネルストリームまたは周波数領域チャンネルストリームを含み、さらに、チャンネルペアエレメントは、チャンネルの第2と関連する線形予測領域チャンネルストリームまたは周波数領域チャンネルストリームも含む。
構文表現が図6dに示される構成情報「ics_info()」は、本発明のための特定の関連性がない複数の異なる構成情報項目を含む。
構文表現が図6eに示される周波数領域チャンネルストリーム(「fd_channel_stream()」)は、ゲイン情報(「global_gain」)および構成情報(「ics_info()」)を含む。加えて、周波数領域チャンネルストリームは、異なるスケールファクタバンドのスペクトル値のスケーリングのために用いられるスケールファクタを表しさらに例えばスケーラ150およびリスケーラ240によって適用されるスケールファクタデータ(「scale_factor_data()」)を含む。周波数領域チャンネルストリームは、算術的に符号化されたスペクトル値を表す算術的に符号化されたスペクトルデータ(「ac_spectral_data()」)も含む。
構文表現が図6fに示される算術的に符号化スペクトルデータ(「ac_spectral_data()」)は、上述のように、コンテクストを選択的にリセットするために用いられる任意の算術リセットフラグ(「arith_reset_flag」)を含む。加えて、算術的に符号化されたスペクトルデータは、算術的に符号化されたスペクトル値を伝える複数の算術データブロック(「arith_data」)を含む。算術的に符号化されたデータブロックの構成は、(変数「num_bands」によって表される)周波数バンドの数にさらに以下において述べられる算術リセットフラッグの状態にも依存する。
以下において、算術的に符号化されたデータブロックの構成が、前記算術的に符号化されたデータブロックの構文表現を示す図6gを参照して記載される。算術的に符号化されたデータブロック内のデータ表現は、符号化されるスペクトル値の数lg、算術リセットフラグの状況に、さらに、コンテクストすなわち前に符号化されたスペクトル値にも依存する。
スペクトル値の現在のセット(例えば2タプル)の符号化のためのコンテクストは、参照番号660で示されるコンテクスト決定アルゴリズムに従って決定される。コンテクスト決定アルゴリズムに関する詳細は、図5aおよび図5bを参照して、上で説明されている。算術的に符号化されたデータブロックは、コードワードのlg/2セットを含み、コードワードのそれぞれのセットは、複数(例えば2タプル)のスペクトル値を表す。コードワードのセットは、1および20ビット間で用いるスペクトル値のタプルの最上位ビットプレーン値mを表す算術コードワード「acod_m[pki][m]」を含む。加えて、コードワードのセットは、スペクトル値のタプルが正しい表現のための最上位ビットプレーンよりも多くのビットプレーンを必要とする場合、1つ以上のコードワード「acod_r[r]」を含む。コードワード「acod_r[r]」は、1および14ビット間で用いる下位ビットプレーンを表す。
しかしながら、1つ以上の下位ビットプレーンがスペクトル値の適当な表現のために(最上位ビットプレーンに加えて)必要とされる場合、これは、1つ以上の算術エスケープコードワード(「ARITH_ESCAPE」)を用いることによって信号で送られる。このように、スペクトル値のために、どれくらいのビットプレーン(最上位ビットプレーンおよび、おそらく、1つ以上の付加的な下位ビットプレーン)が必要とされることが決定されると一般的にいえる。1つ以上の下位ビットプレーンが必要とされる場合、これは、累積度数テーブルインデックスが変数「pki」によって示される現在選択された累積度数テーブルに従って符号化される1つ以上の算術エスケープコードワード「acod_m[pki][ARITH_ESCAPE]」によって信号で送られる。加えて、コンテクストは、1つ以上の算術エスケープコードワードがビットストリームに含まれる場合、参照番号664、662から明らかなように、適している。1つ以上の算術エスケープコードワードの後に、算術コードワード「acod_m[pki][m]」は、参照番号663に示されるように、ビットストリームに含まれ、「pki」は、(考慮に算術エスケープコードワードの包含によって生じるコンテクスト適合をとる)現在有効な確率モデルインデックスを指定し、さらに、mは、符号化されまたは復号化されるスペクトル値の最上位ビットプレーン値を指定する(mは、「ARITH_ESCAPE」コードワードと異なる)。
上述のように、いかなる下位ビットプレーンの存在も、それぞれが第1のスペクトル値の最下位ビットプレーンの1ビットを表しさらにそれぞれが第2のスペクトル値の最下位ビットプレーンの1ビットも表す1つ以上のコードワード「acod_r[r]」の存在をもたらす。1つ以上のコードワード「acod_r[r]」は、例えば一定であってもコンテクストに依存しなくてもよい対応する累積度数テーブルに従って符号化される。しかしながら、1つ以上コードワード「acod_r[r]」の復号化のための累積度数テーブルの選択のための異なるメカニズムが可能である。
加えて、コンテクストは、参照番号668に示されるように、コンテクストがスペクトル値の2つの後のタプルを符号化しさらに復号化するために典型的に異なるように、スペクトル値のそれぞれタプルの符号化の後に更新される点に留意すべきである。
図6iは、算術的に符号化されたデータブロックの構文を定義する定義およびヘルプエレメントの凡例を示す。
さらに、図6jに示される定義およびヘルプエレメントの対応する凡例を有する算術データ「arith_data()」の代わりの構文が、図6hに示される。
上記を要約すると、オーディオエンコーダ100によって提供されうりさらにオーディオデコーダ200によって評価されうるビットストリーム形式が記載されている。算術的に符号化されたスペクトル値のビットストリームは、それが上述の復号化アルゴリズムに合うように、符号化される。
加えて、符号化は、エンコーダがデコーダによって実行されるテーブルルックアップに近似的に逆である上述のテーブルを用いるテーブルルックアップを実行すると一般的に仮定することができるように、復号化の逆の演算である点に一般的に留意すべきである。一般的に、復号化アルゴリズムおよび/または所望のビットストリーム構文を知っている当業者は、ビットストリーム構文において定義されさらに算術デコーダによって必要とされるデータを提供する算術エンコーダを設計することが容易に可能であるといえる。
さらに、数値的な現在のコンテクスト値を決定するためのさらにマッピングルールインデックス値を導き出すためのメカニズムは、オーディオエンコーダおよびオーディオデコーダで同一であってもよい点に留意すべきであり、その理由は、オーディオデコーダは、復号化が符号化に適しているように、オーディオエンコーダと同じコンテクストを用いることが典型的に要求されるからである。
15.3. 図6k、図6l、図6m、図6n、図6oおよび図6pによる構文エレメント
以下において、代わりのビットストリーム構文からの抜粋が図6k、図6l、図6m、図6n、図6oおよび図6pを参照して記載される。
図6kは、ビットストリームエレメント「UsacSingleChannelElement(indepFlag)」の構文表現を示す。前記構文エレメント「UsacSingleChannelElement(indepFlag)」は、1つのコアコーダチャンネルを表す構文エレメント「UsacCoreCoderData」を含む。
図6lは、ビットストリームエレメント「UsacChannelPairElement(indepFlag)」の構文表現を示す。前記構文エレメント「UsacChannelPairElement(indepFlag)」は、ステレオ構成に応じて、1つまたは2つのコアコーダチャンネルを表す構文エレメント「UsacCoreCoderData」を含む。
図6mは、図6mにおいて明らかなように、多数のパラメータの定義を含むビットストリームエレメント「ics_info()」の構文表現を示す。
図6nは、ビットストリームエレメント「UsacCoreCoderData()」の構文表現を示す。ビットストリームエレメント「UsacCoreCoderData()」は、1つ以上の線形予測領域チャンネルストリーム「lpd_channel_stream()」および/または1つ以上の周波数領域チャンネルストリーム「fd_channel_stream()」を含む。いくつかの他の制御情報は、図6nにおいて明らかなように、ビットストリームエレメント「UsacCoreCoderData()」に任意に含まれることもできる。
図6oは、ビットストリームエレメント「fd_channel_stream()」の構文表現を示す。ビットストリームエレメント「fd_channel_stream()」は、他の任意のビットストリームエレメントの中で、ビットストリームエレメント「scale_factor_data()」およびビットストリームエレメント「ac_spectral_data()」を含む。
図6pは、ビットストリームエレメント「ac_spectral_data()」の構文表現を示す。ビットストリームエレメント「ac_spectral_data()」は、ビットストリームエレメント「arith_reset_flag」を任意に含む。さらに、ビットストリームエレメントは、多くの算術的に符号化されたデータ「arith_data()」も含む。算術的に符号化されたデータは、例えば、図6gに関して記載されるビットストリーム構文に従いうる。
16. 実施代替案
いくつかの形態が装置のコンテクストに記載されているにもかかわらず、これらの形態が対応する方法の説明を表すことは明らかであり、ブロックまたはデバイスは、方法ステップまたは方法ステップの特徴に対応する。同様に、方法ステップのコンテクストに記載される形態は、対応する装置の対応するブロックまたは項目または特徴の説明を表す。方法ステップのいくつかまたは全ては、例えば、マイクロプロセッサ、プログラム可能なコンピュータまたは電子回路のように、ハードウェア装置によって(または用いて)実行されうる。いくつかの実施形態において、最も重要な方法ステップのいずれか1つ以上は、そのような装置によって実行されうる。
本発明の符号化されたオーディオ信号は、デジタル記憶媒体に格納することができまたは無線伝送媒体若しくは例えばインターネットなどの有線伝送媒体などの伝送媒体上に伝送することができる。
特定の実施要求に応じて、本発明の実施形態は、ハードウェアにおいてまたはソフトウェアにおいて実施することができる。実施は、それぞれの方法が実行されるように、プログラム可能なコンピュータシステムと協働する(または協働することができる)電子的に可読の制御信号が格納される、デジタル記憶媒体、例えばフロッピー(登録商標)ディスク、DVD、ブルーレイ(登録商標)、CD、ROM、PROM、EPROM、EEPROMまたはフラッシュメモリを用いて実行することができる。そのため、デジタル記憶媒体は、コンピュータ可読でありうる。
本発明によるいくつかの実施形態は、ここに記載される方法のうちの1つが実行されるように、プログラム可能なコンピュータシステムと協働することができる電子的に可読の制御信号を有するデータキャリアを含む。
一般的に、本発明の実施形態は、プログラムコードを有するコンピュータプログラム製品として実施することができ、そのプログラムコードは、コンピュータプログラム製品がコンピュータ上で実行されるときに、それらの方法のうちの1つを実行するために働く。プログラムコードは、例えば、機械可読のキャリアに格納されうる。
他の実施形態は、機械可読のキャリアに格納される、ここに記載される方法のうちの1つを実行するためのコンピュータプログラムを含む。
したがって、換言すれば、本発明の方法の実施形態は、コンピュータプログラムがコンピュータ上で実行されるときに、ここに記載される方法のうちの1つを実行するためのプログラムコードを有するコンピュータプログラムである。
したがって、本発明の方法のさらなる実施形態は、ここに記載される方法のうちの1つを実行するためのコンピュータプログラムが記録されるデータキャリア(またはデジタル記憶媒体またはコンピュータ可読の媒体)である。データキャリア、デジタル記憶媒体または記録された媒体は、典型的に、有形でありおよび/または一時的でない。
したがって、本発明の方法のさらなる実施形態は、ここに記載される方法のうちの1つを実行するためのコンピュータプログラムを表すデータストリームまたは一連の信号である。データストリームまたは一連の信号は、例えば、データ通信接続を介して例えばインターネットを介して、転送されるように構成されうる。
さらなる実施形態は、ここに記載される方法のうちの1つを実行するように構成されまたは適している処理手段、例えばコンピュータまたはプログラム可能な論理デバイスを含む。
さらなる実施形態は、ここに記載される方法のうちの1つを実行するためのコンピュータプログラムがインストールされているコンピュータを含む。
本発明によるさらなる実施形態は、ここに記載される方法のうちの1つを実行するためのコンピュータプログラムをレシーバに(例えば、電子的にまたは光学的に)転送するように構成される装置またはシステムを含む。レシーバは、例えば、コンピュータ、モバイルデバイス、メモリデバイスなどであってもよい。装置またはシステムは、例えば、コンピュータプログラムをレシーバに転送するためのファイルサーバを含みうる。
いくつかの実施形態において、プログラム可能な論理デバイス(例えばフィールドプログラム可能なゲートアレイ)は、ここに記載される方法の機能のいくつかまたは全てを実行するために用いられうる。いくつかの実施形態において、フィールドプログラム可能なゲートアレイは、ここに記載される方法のうちの1つを実行するために、マイクロプロセッサと協働しうる。一般的に、その方法は、好ましくは、いかなるハードウェア装置によっても実行される。
上述の実施形態は、本発明の原理のために単に例示するだけである。ここに記載される構成および詳細の修正および変更が他の当業者にとって明らかであるものと理解される。したがって、本発明は、特許の請求の範囲によってだけ制限され、ここに実施形態の記述および説明として示される具体的な詳細によって制限されないと意図される。
17. 結論
結論として、本発明による実施形態は、以下の形態の1つ以上を含み、その形態は、個々にまたは組合せで用いられうる。
a) コンテクスト状態ハッシングメカニズム
本発明の形態によれば、ハッシュテーブルにおける状態は、重要な状態およびグループ境界として考慮される。これは、必要なテーブルのサイズを著しく低減することを許可する。
b) 増加的なコンテクスト更新
形態によれば、本発明によるいくつかの実施形態は、コンテクストを更新するための計算的に効率的な方法を含む。いくつかの実施形態は、数値的な現在のコンテクスト値が数値的な前のコンテクスト値から導き出される増加的なコンテクスト更新を用いる。
c) コンテクスト導出
本発明の形態によれば、2つのスペクトル絶対値の合計を用いることは、切捨ての関連である。それは、(従来のシェープゲインベクトル量子化に対する反対のように)スペクトル係数の一種のゲインベクトル量子化である。それは、コンテクスト順序を制限することを意図し、その一方で、近辺から最も意味のある情報を伝達する。
d) 更新されたテーブル
本発明の形態によれば、符号化効率および計算の複雑度間の特に良好な妥協を提供する最適化されたテーブルari_hash_m[742]、ari_lookup_m[742]およびari_cf_m[64][17]が適用される。
本発明による実施形態において適用されるいくつかの他の技術は、特許出願PCT/EP2010/065725、PCT/EP2010/065726およびPCT/EP2010/065727に記載されている。さらに、本発明によるいくつかの実施形態において、停止シンボルが用いられる。さらに、いくつかの実施形態において、符号なしの値だけが、コンテクストのために考慮される。
しかしながら、上述の国際特許出願は、本発明によるいくつかの実施形態においてまだ用いられている形態を開示する。
例えば、ゼロ領域の識別が本発明のいくつかの実施形態において用いられる。したがって、いわゆる「small−value−flag(小さい値のフラグ)」が設定される(例えば数値的な現在のコンテクスト値cのビット16)。
いくつかの実施形態において、領域に依存するコンテクスト計算が用いられうる。しかしながら、他の実施形態において、領域に依存するコンテクスト計算が、複雑度およびテーブルのサイズを相当に小さく保つために省略されうる。
さらに、ハッシュ関数を用いるコンテクストハッシングは、本発明の重要な形態である。コンテクストハッシングは、上述の予めの公開がされていない国際特許出願に記載されている2テーブル概念に基づきうる。しかしながら、コンテクストハッシングの特定の適合が、計算効率を増加するために、いくつかの実施形態において用いられうる。それにしても、本発明によるいくつかの他の実施形態において、上述の国際特許出願に記載されているコンテクストハッシングが用いられうる。
さらに、増加的なコンテクストハッシングは、むしろ単純でさらに計算的に効率的である点に留意すべきである。また、本発明のいくつかの実施形態において用いられる値の符号からコンテクストに依存しないことは、コンテクストを単純化するために役立ち、それによって、必要メモリを相当に低く保つ。
本発明のいくつかの実施形態において、2スペクトル値の合計およびコンテクスト制限を用いるコンテクスト導出が用いられる。これらの2つの形態は、組み合わせることができる。両方とも、近辺から最も意味のある情報を伝達することによってコンテクスト順序を制限することを意図する。
いくつかの実施形態において、複数のゼロ値のグループの識別と類似しうる小さい値のフラグが用いられる。
本発明によるいくつかの実施形態において、算術停止メカニズムが用いられる。概念は、相当する機能を有する、JPEGにおいてシンボル「end−of−block(ブロックの終結)」の使用と類似している。しかしながら、本発明のいくつかの実施形態において、シンボル(「ARITH_STOP」)は、明確にエントロピーコーダに含まれない。その代わりに、前に生じることがないすでに存在しているシンボルの組合せすなわち「ESC+0」が用いられる。換言すれば、オーディオデコーダは、数値的な値を表すために通常用いられない存在するシンボルの組合せを検出し、さらに、すでに存在しているシンボルのそのような組合せの発生を算術停止条件として解釈するように構成される。
本発明による実施形態は、2テーブルコンテクストハッシングメカニズムを用いる。
さらに要約すると、本発明によるいくつかの実施形態は、以下の5つの主な形態の1つ以上を含みうる。
・改良されたテーブル
・近辺においてゼロ領域または小さい振幅領域を検出するための拡張されたコンテクスト
・コンテクストハッシング
・コンテクスト状態生成:コンテクスト状態の増加的な更新、および
・コンテクスト導出:振幅の合計および制限を含むコンテクスト値の特定の量子化
さらなる結論として、本発明による実施形態の1つの形態は、増加的なコンテクスト更新に位置する。本発明による実施形態は、ワーキングドラフトの(例えばワーキングドラフト5の)広範囲な計算を回避する、コンテクストの更新のための効率的な概念を含む。むしろ、単純なシフト演算および論理演算が、いくつかの実施形態において用いられる。単純なコンテクスト更新は、コンテクストの計算を著しく容易にする。
いくつかの実施形態において、コンテクストは、値(例えば復号化されたスペクトル値)の符号から独立している。値の符号からのコンテクストのこの独立は、コンテクスト変数の低減された複雑度をもたらす。この概念は、コンテクストにおいて符号の無視が符号化効率の多大な低下もたらさらないという知見に基づく。
本発明の形態によれば、コンテクストは、2スペクトル値の合計を用いて導き出される。したがって、コンテクストの記憶のための必要メモリは、著しく低減される。したがって、2スペクトル値の合計を表すコンテクスト値の使用は、場合によっては有利なものとして考慮されうる。
また、コンテクスト制限は、場合によっては重要な改良をもたらす。2スペクトル値の合計を用いるコンテクストの導出に加えて、コンテクスト配列「q」のエントリは、いくつかの実施形態において「0xF」の最大値に制限され、それは、次々に必要メモリの制限をもたらす。コンテクスト配列「q」の値のこの制限は、いくつかの効果をもたらす。
いくつかの実施形態において、いわゆる「small value flag(小さい値のフラグ)」が用いられる。(数値的な現在のコンテクスト値にも指定される)コンテクスト変数cを得ることにおいて、フラッグは、いくつかのエントリ「q[1][i−3]」から「q[1][i−1]」の値が非常に小さい場合、設定される。したがって、コンテクストの計算を高効率で実行することができる。特に意味のあるコンテクスト値(例えば数値的な現在のコンテクスト値)を得ることができる。
いくつかの実施形態において、算術停止メカニズムが用いられる。「ARITH_STOP」メカニズムは、ゼロ値だけが残っている場合、算術符号化または復号化の効率的な停止を可能にする。したがって、符号化効率を、複雑度に関して適度なコストで改良することができる。
本発明の形態によれば、2テーブルコンテクストハッシングメカニズムが用いられる。コンテクストのマッピングは、テーブル「ari_lookup_m」の後のルックアップテーブル評価との併用でテーブル「ari_hash_m」を評価する間隔分割アルゴリズムを用いて実行される。このアルゴリズムは、WD3アルゴリズムよりも効率的である。
以下において、いくつかの付加的な詳細が述べられる。
テーブル「arith_hash_m[742]」および「arith_lookup_m[742]」は、2つの異なるテーブルである点にここで留意すべきである。第1のものは、単一のコンテクストインデックス(例えば数値的なコンテクスト値)を確率モデルインデックス(例えばマッピングルールインデックス値)にマップするために用いられ、さらに、第2のものは、「arith_hash_m[]」においてコンテクストインデックスによって区切られる連続的なコンテクストのグループを単一の確率モデルにマップするために用いられる。
テーブル「arith_cf_m sb[64][16]」は、次元がわずかに異なるにもかかわらず、テーブル「ari_cf_m[64][17]」に代わるものとして用いられうる点にさらに留意すべきである。「ari_cf_m[][]」および「ari_cf_msb[][]」は、確率モデルの第17番目の係数が常にゼロであるように、同じテーブルを参照しうる。それは、テーブルを格納するための必要なスペースをカウントするときに、時々考慮されない。
上記を要約すると、本発明によるいくつかの実施形態は、MPEG USACワーキングドラフトにおいて(例えばMPEG USACワーキングドラフト5において)修正を生じる提案された新しいノイズレス符号化(符号化または復号化)を提供する。前記修正は、同封の図においておよび関連した説明において明らかである。
結びとして、変数、配列、関数などの名前において、接頭辞「ari」および接頭辞「arith」は、交互に用いられる点に留意すべきである。