(58)【調査した分野】(Int.Cl.,DB名)
前記累積インデックスを前記増加させることは、nが前記整数入力ベクトルの次元でありkが単位パルスの数である場合の第1のオフセットパラメータU(n,k)に少なくとも部分的に基づき、前記第1のオフセットパラメータU(n,k)は、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の次の先行符号を有した、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項2又は3に記載の方法。
前記累積インデックスの前記増加は、nが前記整数入力ベクトルの次元でありkが単位パルスの数である場合の第2のオフセットパラメータA(n,k)に少なくとも部分的に基づき、前記第2のオフセットパラメータA(n,k)は、正の先行値を有するとともに先行する0を持たない、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項2から5のいずれか1項に記載の方法。
前記累積インデックスの前記増加は、nが前記整数入力ベクトルの次元でありkが単位パルスの数である場合の、第1のオフセットパラメータU(n,k)と、第2のオフセットパラメータA(n,k)との両方に基づき、前記第1のオフセットパラメータU(n,k)は、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の次の先行符号を有した、次元n及びkのL1ノルムの整数ベクトルの数として定められ、前記第2のオフセットパラメータA(n,k)は、正の先行値を有するとともに先行する0を持たない、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項2から7のいずれか1項に記載の方法。
前記残存インデックスの前記減少は、nが前記整数出力ベクトルの次元でありkが単位パルスの数である場合の第1のオフセットパラメータU(n,k)に少なくとも部分的に基づき、前記第1のオフセットパラメータU(n,k)は、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の次の先行符号を有した、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項11又は12に記載の方法。
前記残存インデックスの前記減少は、nが前記整数出力ベクトルの次元でありkが単位パルスの数である場合の第2のオフセットパラメータA(n,k)に少なくとも部分的に基づき、前記第2のオフセットパラメータA(n,k)は、正の先行値を有するとともに先行する0を持たない、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項11から14のいずれか1項に記載の方法。
前記残存インデックスの前記減少は、nが前記整数出力ベクトルの次元でありkが単位パルスの数である場合の、第1のオフセットパラメータU(n,k)と、第2のオフセットパラメータA(n,k)との両方に基づき、前記第1のオフセットパラメータU(n,k)は、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の次の先行符号を有した、次元n及びkのL1ノルムの整数ベクトルの数として定められ、前記第2のオフセットパラメータA(n,k)は、正の先行値を有するとともに先行する0を持たない、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項11から16のいずれか1項に記載の方法。
前記符号化器(10)は、プロセッサ(800)及びメモリ(810)を有し、前記メモリ(810)は、前記プロセッサ(800)により実行可能な命令を含み、それにより、前記プロセッサ(800)は、前記整数入力ベクトル(5)から前記先行符号(15)を抽出し、前記先行符号を無視する前記変形ピラミッドベクトル量子化列挙方式を用いて、前記オーディオ/ビデオ信号のサンプルを表す前記出力インデックス(25)に前記整数入力ベクトル(5)をインデクシングするように動作可能である、
ことを特徴とする請求項20に記載の符号化器。
符号化器(10)は、前記オーディオ/ビデオ信号のサンプルを表す前記整数入力ベクトル(5)を取得し、前記出力ビットストリーム(2)へと、前記先行符号(15)及び前記出力インデックス(25)を出力するように構成される通信回路(804、806、808)を有する、
ことを特徴とする請求項20又は21に記載の符号化器。
前記累積インデックスの前記増加は、nが前記整数入力ベクトルの次元でありkが単位パルスの数である場合の第1のオフセットパラメータU(n,k)に少なくとも部分的に基づき、前記第1のオフセットパラメータU(n,k)は、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の次の先行符号を有した、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項23又は24に記載の符号化器。
前記累積インデックスの前記増加は、nが前記整数入力ベクトルの次元でありkが単位パルスの数である場合の第2のオフセットパラメータA(n,k)に少なくとも部分的に基づき、前記第2のオフセットパラメータA(n,k)は、正の先行値を有するとともに先行する0を持たない、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項23から26のいずれか1項に記載の符号化器。
前記累積インデックスの前記増加は、nが前記整数入力ベクトルの次元でありkが単位パルスの数である場合の第1のオフセットパラメータU(n,k)と、nが前記整数入力ベクトルの次元でありkが単位パルスの数である場合の第2のオフセットパラメータA(n,k)との両方に基づき、前記第1のオフセットパラメータU(n,k)は、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の次の先行符号を有した、次元n及びkのL1ノルムの整数ベクトルの数として定められ、前記第2のオフセットパラメータA(n,k)は、正の先行値を有するとともに先行する0を持たない、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項23から28のいずれか1項に記載の符号化器。
前記復号器(60)は、プロセッサ(850)及びメモリ(860)を有し、前記メモリ(860)は、前記プロセッサ(850)により実行可能な命令を含み、それにより、前記プロセッサ(850)は、前記先行符号を無視する前記変形ピラミッドベクトル量子化列挙解除方式を用いて前記入力インデックス(25')を前記整数出力ベクトル(6')にデインデクシングし、受信された前記先行符号(15')に従って、前記終端非零係数の符号を割り当てるように動作可能である、
ことを特徴とする請求項31に記載の復号器。
前記復号器(60)は、入力ビットストリーム(2')から、オーディオ/ビデオ信号のサンプルを表す先行符号(15')及び入力インデックス(25')を受信し、前記変形整数出力ベクトルを出力するように構成される通信回路(854、856、858)を有する、
ことを特徴とする請求項31又は32に記載の復号器。
前記残存インデックスの前記減少は、nが前記整数出力ベクトルの次元でありkが単位パルスの数である場合の第1のオフセットパラメータU(n,k)に少なくとも部分的に基づき、前記第1のオフセットパラメータU(n,k)は、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の次の先行符号を有した、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項34又は35に記載の復号器。
前記残存インデックスの前記減少は、nが前記整数出力ベクトルの次元でありkが単位パルスの数である場合の第2のオフセットパラメータA(n,k)に少なくとも部分的に基づき、前記第2のオフセットパラメータA(n,k)は、正の先行値を有するとともに先行する0を持たない、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項34から37のいずれか1項に記載の復号器。
前記残存インデックスの前記減少は、nが前記整数出力ベクトルの次元でありkが単位パルスの数である場合の第1のオフセットパラメータU(n,k)と、nが前記整数出力ベクトルの次元でありkが単位パルスの数である場合の第2のオフセットパラメータA(n,k)との両方に基づき、前記第1のオフセットパラメータU(n,k)は、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の次の先行符号を有した、次元n及びkのL1ノルムの整数ベクトルの数として定められ、前記第2のオフセットパラメータA(n,k)は、正の先行値を有するとともに先行する0を持たない、次元n及びkのL1ノルムの整数ベクトルの数として定められる、
ことを特徴とする請求項34から39のいずれか1項に記載の復号器。
請求項20から30のいずれか1項又は請求項45に記載の符号化器と、請求項31から41のいずれか1項又は請求項46に記載の復号器と、の少なくともいずれかを有することを特徴とするネットワークノード。
請求項20から30のいずれか1項又は請求項45に記載の符号化器と、請求項31から41のいずれか1項又は請求項46に記載の復号器と、の少なくともいずれかを有することを特徴とするユーザ端末。
【発明を実施するための形態】
【0040】
実施形態は、その更なる目的及び利点と共に、添付の図面に関連する以下の説明を参照することにより最もよく理解されるだろう。
【0041】
図面を通して、同じ図中符号は、類似する要素又は対応する要素に使用される。
【0042】
インデクシングアルゴリズムは、PVQ構造及びインデックスを先行符号区分に反復して分解する。分解は、発見されるPVQベクトルのインデクシングすべき非零要素の数にかかわらず常に1つの先行符号が抽出されるように実行される。符号抽出の複雑度がこのように低いため、ランタイム計算PVQインデクシングオフセットに関して縮小ダイナミックレンジを作成できる。
【0043】
PVQインデクシングオフセットは、PVQインデックス合成及びPVQインデックス分解で使用される。構造化PVQ量子化器は本質的に次元(l)及び単位パルス(k)の大きな変化、従って、ビットレートの大きな変化に対処できるので、通常、オフセットは、符号化されるべき現在の次元及び現在の単位パルスの数に関してのみ計算される。ビットレートはlog2(N
PVQ(l,k))に対応し、その結果、可能なPVQオフセットは膨大な量になる。オフセットはダイナミックRAMに記憶される。しかし、l,k限定PVQ量子化器の実現形態は、インデクシング/デインデクシングオフセットを記憶するためにテーブルルックアップを使用してもよい。
【0044】
提案される技術を更によく理解するために、付録Aにまとめられた従来の技術のIETF/OPUS探索/インデクシング/デインデクシングの説明の抜粋を参照することは有用だろう。
【0045】
図1には、本明細書で提示される方式を使用するオーディオ符号化システムの一例が示される。これは、MPVQインデクシング及びデインデクシングを使用する符号化器10及び復号器60を有するオーディオコーデックシステムの一例である。第1の部分は、符号化器10に含まれる部分に対応し、図の第2の部分は、復号器60に含まれる部分に対応する。入力サンプル1は符号化器10に提供される。符号化器10は、入力ベクトルを少なくともMPVQインデックス及び先行符号として表すビットストリーム2を提供する。符号化器10からの好ましくは本質的にビットストリーム2と等しいビットストリーム2’は復号器60に提供され、復号器は、MPVQインデックス及び先行符号を再構成サンプル3に復号化する。通常、MPVQインデックス及び先行符号は個別の符号語として提供される。
【0046】
符号化器10の一実施形態が
図2に更に詳細に示される。オーディオ/ビデオサンプルxを表す入力サンプル1が受信される。ノルム計算器12で、ノルム係数gが計算される。ノルム量子化器14は、入力ベクトルのノルムを表すノルム量子化ビットNORMQ-bitsを作成する。それらのビットは、通常、ビットストリームに含まれるように提供される。入力ベクトルは、ノルム係数により正規化ベクトル4として正規化される。ノルム量子化器14は、オプションとして、ノルム係数を例えばNORMQ-bitsとしてビット割り当て部16にも提供しており、ビット割り当て部16は、N及びKの適切な値、すなわち、整数ベクトルの次元及び単位パルスの合計を計算するか、又はルックアップテーブルから検索する。それらの値は、オプションとして、出力ビットストリームで提供されるか、又は受信側でビットストリーム中の先行パラメータから導出されてもよい。PVQ形状探索部18は、正規化ベクトル4をPVQの整数入力ベクトル5に変換する。整数入力ベクトル5はMPVQインデクシング部20に提供され、そこで実際のMPVQインデクシングが実行される。このことは以下に更に詳細に説明される。第1の符号語である先行符号15及び第2の符号語である出力インデックス、通常はMPVQサイズが付随するMPVQインデックス25は、MPVQインデクシング部20からビットストリームマルチプレクサMUX30へ出力される。そこで、異なる情報量が1つのビットストリーム2に併合され、ビットストリームMUX30から出力される。
【0047】
復号器60の一実施形態が
図3に更に詳細に示される。入力ビットストリーム2’はビットストリームDEMUX80に提供される。そこで、情報の異なる部分は複数の部分に分割される。N値及びK値又はNORMQ-bitsなどのビット割り当てを支援する情報はビット割り当て部62に提供され、ビット割り当て部は、N及びKの関連値をサイズ/オフセット計算部64及びMPVQデインデクシング部70へ出力する。サイズ/オフセット計算部64は、N値及びK値並びに通常はMPVQサイズが付随する、再構成MPVQインデックス25’の情報25’から取得され、MPVQデインデクシング区分70に提供されるMPVQサイズに基づいて、オフセット8を計算する。第2の符号語である再構成MPVQインデックス25’及び第1の符号語である再構成先行符号15’もMPVQデインデクシング区分70に提供され、そこで、実際のMPVQデインデクシングが実行される。このことは以下に更に詳細に説明される。符号化器における整数入力ベクトルの再構成である整数出力ベクトル6’は単位エネルギー正規化部68へ出力され、そこで正規化が確保される。ノルム逆量子化器66は、NORMQ-bitsを使用してノルム係数
を提供する。次に、ノルム係数は、元のオーディオ/ビデオサンプルの再構成サンプル3である最終出力ベクトル
を形成するために使用される。
【0048】
尚、MPVQ方式は、
図2及び
図3の特定のシステムに限定されず、どのようなPVQベース量子化システムのインデクシングにも、例えば、線形予測(LP)ヴォコーダにおける時間領域信号又はビデオコーデックにおける変換領域係数にも採用可能である。
【0049】
例えば、
図2及び
図3において、「ビットストリームMUX」ブロック及び「ビットストリームDEMUX」ブロックは、オプションとして、本開示の別の場所で説明されるようにPVQインデックス切り捨て損失を制限するために算術符号化器及び算術復号器をそれぞれ採用してもよい。「MUX」ブロック及び「DEMUX」ブロックは、MPVQ(n,k)符号語に関する正しいビット数を抽出可能にするために、短い各PVQ符号語の整数サイズ(MPVQサイズ)を知る必要がある。算術符号化器/復号器なしの場合、短いMPVQ(n,k)符号語に関するビットストリームをパースするときにcell(log2(MPVQ-size))完全非分数ビットを使用する。算術符号化器/復号器対を使用する場合には、算術符号化器/復号器対により使用されるビット分解能及び分布関数は、「MUX」ブロック及び「DEMUX」ブロックにより使用される分数ビットを決定する。算術符号化器/復号器対は、ビットストリームから復号化されたビット(この時点で分数)をどのようにパースすべきかを判定するために整数MPVQサイズを更に必要とする。
【0050】
このような演算は当業者にはよく知られており、以下の説明中、PVQシステムの当然の一部分であると想定される。
【0051】
図2では、MPVQサイズはMPVQインデクシングループの一部として計算され、その後、MUXに提供される。
図3では、復号器で、MPVQオフセット及びMPVQサイズを計算する関数がまず呼び出され、次に、この整数サイズ情報を使用してMUXから符号語が抽出される。抽出されたインデックス(第2の符号語)及び初期オフセットは、その後、MPVQデインデクシングブロックに提供される。
【0052】
図2及び
図3の符号化器部分及び/又は復号器部分は、いくつかの用途では、通信ネットワークの1つのノード又はユーザ機器に構成されてもよい。通信ネットワークのノードは、例えば、無線ネットワークノード、例えば、基地局であってもよい。符号化器部分と復号器部分との間の通信は、有線送信及び/又は無線送信により実行可能である。符号化器部分及び復号器部分は個別に動作してもよい。例えば、符号化器部分は記録機器の一部であることが可能であり、生成されるビットストリームは将来の使用に備えて記憶されることが可能だろう。同様に、復号器部分は、再生機器の一部であることが可能であり、再生機器は、例えば、記憶装置からビットストリームを検索し、ビットストリームをオーディオ/ビデオ信号に復号化する。
【0053】
MPVQ列挙方法の一実施形態は、本発明による組み合わせ大きさ/単一先行符号ビットベース列挙、N
PVQ(l,k)=2
*N
MPVQ(l,k)を使用しており、MPVQ方式は、反復付加大きさ列挙を使用しているのが好ましく、残存ベクトルにおける第1の非零要素の確定済み先行符号に基づくのが更に好ましい。
【0054】
従来の技術のIETF/OPUSコーデックは、当初のフィッシャー列挙の最適化バージョンを使用しており、行ごとの直接行オフセット計算再帰、ラッピング乗算による高速厳密整数除算並びに直接非再帰方程式オフセット及びサイズ計算は改善される(次元l及び単位パルスの数kがそのような直接計算を可能にするのに十分に低い場合)。IETF/OPUS−AudioPVQ実現形態及びOPUS−c符号参照のRFCテキスト説明の抜粋に関して付録Aを参照。OPUSの実現の複雑度を軽減するために、PVQ符号語の最大インデックス値は2
32-1(多くのデスクトップコンピュータで典型的なフォーマットである符号なし32ビット整数算術で表すことが可能なインデックス値)に制限される。
【0055】
ここで提示されている技術の第1の部分では、先行符号方式を使用する先行符号モジュラーPVQ(MPVQ)列挙を説明する。この新規な改善されたMPQ列挙は、同一の一般技術(例えば、行ごと、直接行オフセット計算再帰、厳密整数除算及び直接非再帰方程式オフセット及びサイズ計算)を使用しているが、別の再帰方式を採用することによりこれを実行する。オフセットのダイナミクス及びサイズ計算は軽減されるので、短いPVQ符号語のインデクシングを効率よく実現でき、効率よくインデクシング及びデインデクシングすることが可能な符号語中のエントリの数のサイズは2倍になる(1ビット多い)。
【0056】
このインデクシング/デインデクシングの改善は、特定の一例では、33ビットインデックスに関して複雑度の低い割り当て手順を可能にし、1ビットにより使用できる可能な限り大きいPVQを拡張しようとするものである(あるいは32ビットにわたるPVQに関して符号付き算術を使用できるように列挙を変形することにより、PVQを1+31ビットに保持する)。
【0057】
オフセットパラメータU(n,k)を、先行する0を持たず、先行値kを持たず、先行する正の値を有し且つ正の先行符号を有する次元n及びkのL1ノルムの整数ベクトルの数として定義する。先行符号は、再帰の方向に現在の値の後に遭遇する最初の符号である。
【0058】
オフセットパラメータA(n,k)を、正の先行値を有し且つ先行する0を持たない次元n及びkのL1ノルムの整数ベクトルの数として定義する。
【0059】
そこで、A(n,k)=1+2
*U(n,k)となる。「1」は単一の初期「k」値ベクトルに由来し、因数「2」は、次の先行符号が正の符号及び負の符号になる可能性による。A(n,k)は、従来の技術インデクシングオフセットとして使用されていた和である(N
PVQ(n,k-1)+N
PVQ(n-1,k-1))/2にも等しい。
【0060】
U(n,k)及びそれとN
MPVQ(n,k)ベクトルを有するMPVQ(n,k)構造におけるベクトルの合計との関係の表構造の図に関して
図4を参照。
図4は、次の先行符号情報の最下位ビット(LSB)の最初の「インタリービング」を使用する、好適な最下位ビット(LSB)先行符号列挙の変形を含む基本MPVQ反復の一実施形態のハイレベル概略図を示す。好適な解では、先行符号インタリービングは、pos[0]固有振幅k_deltaごとに、例えば、k_delta=k-1又はk-2ブロックに対して実行される。pos[0]値=「k」の場合、すべての単位パルスはpos[0]で消費され、反復を停止できる。pos[0]値が0ではない正又は負の次の先行符号である場合、最初に遭遇する非零位置符号は1ビットの情報を必要とする。これは、LSBビットとして常に偶数サイズの「2
*U(n-k)」サブセクションに記憶される。pos[0]値=「k」である場合、反復は、新たな先行符号情報なしでpos[0]に拡張される。
【0061】
この第1の部分の基本インデクシング/列挙方式を以下に説明する。インデクシング/列挙すべきPVQベクトルは、[0...2
B+1-1]の範囲にあることがわかっており、B+1ビットに当てはまる。この場合、通常、現在のDSPハードウェアではB=32ビットである。例えば、PVQ(N,K)である場合、すなわち、次元がN,単位パルスの数がKである場合、インデックスの数はN
PVQ≦(2
B+1-1)である。
【0062】
図5は、オーディオ/ビデオサンプルのピラミッドベクトル量子化インデクシングの方法の一実施形態のステップのフローチャートを示す。方法はステップ400で開始される。ステップ402で、オーディオ/ビデオ信号サンプルを表す整数入力ベクトルが取得される。整数入力ベクトルは複数の整数値係数を有する。ステップ404で、整数入力ベクトルから先行符号が抽出される。先行符号は、整数入力ベクトルにおける終端非零係数の符号である。終端非零係数は、整数入力ベクトルにおける最初の非零係数及び最後の非零係数のうち一方である。ステップ406で、整数入力ベクトルは、ピラミッドベクトル量子化列挙方式によって出力インデックスにインデクシングされ、この出力インデックスは、先行符号と共にオーディオ/ビデオ信号サンプルを表す。ピラミッドベクトル量子化列挙方式は、前記終端非零係数の符号を無視するように設計される。別の実施形態では、ステップ406は、ステップ404と組み合わせて同時に実行可能であるか又はステップ404の前に実行可能である。ステップ408で、先行符号及び出力インデックスは、第1の符号語及び第2の符号語としてそれぞれ出力ビットストリームへ出力される。手順はステップ449で終了する。
【0063】
特定の一実施形態では、インデクシングするステップ406は反復列挙手順により実行される。更に別の特定の一実施形態では、反復列挙手順は、考慮に入れるために整数入力ベクトルの1つの現在係数を考慮するために選択する反復ステップの繰り返しを含む。反復ステップは、整数入力ベクトルの現在係数の前に処理された前記整数入力ベクトルのすべての係数と関連するオフセットパラメータを発見することと、オフセットパラメータに応じて累積インデックスを増加させることとを順次含む。繰り返しは、少なくとも整数入力ベクトルのすべての係数が考慮されるまで、現在の係数として順次選択される整数入力ベクトルの係数を用いて継続される。反復列挙手順は、すべての反復ステップが終了した後に出力インデックスが累積インデックスと等しくなるように設定される終了ステップを含む。
【0064】
図6は、一般的レベルのMPQインデクシングの一実施形態を示す。MPVQインデクシングの送信側の態様を実現する詳細なブロック図は以下に示される。MPVQインデクシング処理はステップ200で開始され、ステップ210で、コーデックビット割り当てループからVQ次元N及び単位パルスの数Kが取得される。ステップ220で、PVQ探索からPVQベクトル「PVQ-vec」が取得される。ステップ230で、先行符号ビット及びMPVQサイズを発見することによりMPVQインデックスが合成される。ステップ240で、先行符号はビットストリームへ送信され、ステップ245で、インデックスはビットストリームへ送信される。手順はステップ249で終了する。
【0065】
図5のフローチャートと比較して、ステップ210及び220は、ステップ402に含まれると考えることができる。ステップ404及び406は、同様にステップ230に含まれると考えることができる。最後に、ステップ240及び250はステップ408に含まれると考えらえる。
【0066】
図7A及び
図7Bは、MPVQインデックス合成の一実施形態を示し、例えば、
図6のステップ230として提供される。
図7A及び
図7Bにおいて、MPVQインデックスの合成並びに先行符号及びMPVQサイズの発見はステップ300で開始される。本実施形態は、LSB位置にあるベクトルの次の符号による解に基づく。ステップ302において、処理は、既知のオフセット反復ベースケースにより初期化される。ステップ304において、現在位置パラメータが設定される。本実施形態では、インデクシングは、ベクトルの終端から始めに向かって実行される。インデクシングはデインデクシングと比較して逆の位置順序で実行される。以下の更なる説明を参照。これは、先行符号により発生されるように各反復ステップで累積インデックスを増加させる場合に、整数入力ベクトル中の以前の先行符号に従って、累積インデックスが最下位ビットを与えられることを意味する。
【0067】
別の実施形態では、インデクシングとデインデクシングとの間でベクトルの位置順序を変更できる。
【0068】
ステップ306で、累積インデックスは0に初期化される。パラメータk_accは、解析される累積単位パルスを示し、0に初期化される。フラグgot_sign_flagは、符号が抽出されるか否かを示し、当初は同様に0に設定される。ステップ308で、ベクトルからの現在係数「vec(pos)」はパラメータ「val」として考慮される。ステップ310で、第1の符号が発見され、現在係数が0に等しくない場合に、処理はステップ312へ続くが、0に等しい場合には、処理はステップ314へ直接続く。ステップ312で、以前のステップからセーブされた先行符号情報がLSBに導入される。以前のステップにおける負の符号は、値next_sign_ind=1に対応し、正の符号は、値next_sign_ind=0に対応する。ステップ314で、現在符号の探索が開始される。値が0に等しい場合、新たな符号は存在せず、最前の符号が転送されるべきであり、これは、処理がステップ324(
図7B)へ直接続くことを意味する。現在の係数が0ではない場合に、まず、ステップ316で、符号が発見されたというフラグがセットされる。これは実際には第1の符号に関してのみ必要であるが、本実施形態では、流れを簡略にするため、非零値が発見されるたびにフラグはセットされる。ステップ318で、next_sign_ind、すなわち、次の符号の標識が正の符号を指示するように設定される。ステップ320で、現在係数の値が実際に正であるか否かが検査される。現在係数が正であることが発見された場合、流れはステップ324へ続き、正でない場合には、next_sign_ind、すなわち、次の符号の標識は負の符号を指示するように変更される。
【0069】
ステップ324で、現在次元n及び解析される累積単位パルスに基づいてオフセット値に従って累積インデックスは増加される。言い換えれば、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元n及びk_accのL1ノルムの整数ベクトルの数に対応する数だけカウントアップされる。本実施形態では、累積インデックスの修正にAオフセットが使用される。以下に更に説明されるように、他の実施形態では、Aオフセットの代わりに、Uオフセットを使用でき、あるいはAオフセットとUオフセットの組み合わせを使用できる。ステップ326で、現在係数の値を加算することにより、k_accパラメータは更新される。ベクトルのすべての位置が考慮されてはいない場合、すなわち、パラメータ「pos」が0より大きい場合、次の繰り返しが準備される。ステップ330で、以下に更に詳細に説明されるように、次元は増加され、オフセットは更新される。ステップ332で、現在係数の位置は1ステップだけ減少される。次に、処理は、考慮されるべき整数入力ベクトルからの新たな現在係数による別の繰り返しのためにステップ308(
図7A)に戻る。
【0070】
ベクトルのすべての位置が考慮されていた場合には、流れはステップ334へ続き、先行符号は、現在の次符号指示と等しくなるように設定される。言い換えれば、ベクトルのまさに最初の符号は累積インデックスには含まれておらず、インデクシングの残存部分に影響を与えない別のパラメータとして抽出されることになる。これは、使用されるピラミッドベクトル量子化列挙方式が最初の非零係数の符号を無視することを意味する。その代わりに、この符号は、インデクシング処理から「押し出され」、「先行符号」又は「lead_sign」として示される。その他の符号も、通常、反復中に抽出されるが、インデックス累積に影響を与える。最後に、ステップ336で、MPVQサイズが計算され、本実施形態では、この計算を2つの異なる方法で実行できる。累積インデックスは、MPVQピラミッドベクトル量子化列挙方式の出力インデックスとしてこの処理から抜ける。手順はステップ349で終了する。
【0071】
上記の構造は、符号化されるべき非零ベクトル値のすべての符号を選択された方向に次の非零係数へ1ステップシフトするように動作する。次の位置が存在しない場合、すなわち、処理が当初のベクトルの外にある場合には、その符号を残存lead_signとして記憶する。この符号シフトは、以下の説明から更にわかるように別の前処理ステップとして実行可能であるが、好適な実施形態では、前述のように次元反復ループ全体の中にある。そこで、lead_sign(+1又は−1)をビットストリーム中の個別のビットとして、lead_sign_ind(0又は1)として送信可能である。
【0072】
残存シフト済み符号及び当初のベクトルの振幅は、当初のPVQベクトルから常に厳密に1つの符号が抽出/シフトされることを利用する変形インデクシング/列挙方式によって符号化される。この抽出は、当初のPVQ目標ベクトルPVQ_vecの非零要素の数とは無関係である。
【0073】
図7A及び
図7Bの構造を容易に理解するために、以下に3つの例を説明する。説明を限度内にとどめ、例全体を理解できるようにするために、それらの例は極めて複雑度の低いものである。しかし、通常の現実の例では、次元及び単位パルスの数は、それよりはるかに多い。しかし、原理は同一である。
【0074】
第1の例では、次元N=3及び単位パルスの数K=5として、[2,2,-1]の整数入力ベクトルを考える。初期化が実行され、「pos」は「2」に設定され、インデックスk_accは「0」に設定され、次元はn=1に設定され、got_sign_flagはセットされない(=0)。第1の値「val」はベクトルの係数2として、すなわち、−1として選択される。(ベクトルの係数は0、1及び2と番号付けされる。)非零値はまだ評価されていないので、符号は抽出されておらず、流れは、検出された符号に基づくインデックスの調整を飛び越す。これにより、流れは、0と同じではない値「val」の評価へ直接進む。この結果、符号フラグはセットされる。第1の符号が検出されており、検出された符号に従ってnext_sign_indは設定され、この場合next_sign_ind=1、すなわち、負の値(−1)に設定される。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元1の及び0のL1ノルムの整数ベクトルの数に対応するオフセットA(1,0)だけカウントアップされる。A(1,0)は0に等しい。そこで、累積インデックスはindex=0となる。次に、累積kパラメータk_accは、「val」の絶対値だけ、すなわち、1単位だけ更新され、すなわち、k_acc=1となる。
【0075】
数nを1増加させ、すなわち、n=2とし且つ位置標識「pos」を1減少させ、例えば、pos=1とすることにより、次の繰り返しが準備される。流れはステップ308に戻り、位置の新たな値1が選択され、すなわち、この例では、val=vec(1)=2となる。符号フラグ「got_sign_flag」は、符号が検出されたことを指示し、現在の値「val」は0に等しくないので、「next_sign_ind」はLSBとして累積インデックス「index」に加算され、累積インデックスは1(=2
*0+1)となる。流れは値「val」の評価へ続き、この場合も、値「val」は0と同じではない。next_sign_indは検出された符号に従って設定され、この場合、next_sign_ind=0、すなわち、正の値(2)となる。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元2及び1のL1ノルムの整数ベクトルの数に対応するオフセットA(2,1)だけカウントアップされる。A(2,1)は1に等しい。そこで、累積インデックスはindex=2となる。次に、累積kパラメータk_accは、vec(1)の絶対値だけ、すなわち2単位だけ更新され、すなわち、k_acc=3となる。
【0076】
数nを1増加させ、すなわち、n=3とし且つ位置標識「pos」を1減少させ、例えば、pos=0とすることにより、次の繰り返しが準備される。流れはステップ308に戻り、位置の新たな値0が選択され、すなわち、この例ではval=vec(0)=2となる。符号フラグ「got_sign_flag」は、符号が検出されたことを指示し、現在の値「val」は0に等しくないので、「next_sign_ind」はLSBとして累積インデックス「index」に加算され、累積インデックスは4(=2
*2+0)となる。流れは、値「val」の評価へ続き、この場合にも、値「val」は0と同じではない。next_sign_indは、検出された符号に従って設定され、この場合、next_sign_ind=0となり、すなわち、正の値(2)となる。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元3及び3のL1ノルムの整数ベクトルの数に対応するオフセットA(3,3)だけカウントアップされる。A(3,3)は13に等しい。そこで、累積インデックスはindex=17となる。次に、累積kパラメータk_accは、「val」の絶対値だけ、すなわち、2単位だけ更新され、すなわち、k_acc=5となる。
【0077】
この時点で累積kaccは最大のK=5に等しく、ベクトルのすべての位置が考慮されている。従って、出力インデックスは現在累積インデックスに等しく、すなわち、出力インデックスは17である。最後に識別された符号は累積インデックスにはまだ含まれておらず、別のパラメータとして、すなわち、先行符号=「+1」(next_sign_ind=0)として抽出される。
【0078】
第2の例では、次元N=3且つ単位パルスの数K=5として、[-4,0,-1]の整数入力ベクトルを考える。初期化が実行され、「pos」は「2」に設定され、インデックス、k_accは「0」に設定され、次元n=1に設定され、got_sign_flagはセットされない(=0)。第1の値「val」はベクトルの係数2として、すなわち−1として選択される。非零値はまだ評価されていないので、符号は抽出されておらず、流れは、検出された符号に基づくインデックスの調整を飛び越す。これにより、流れは値「val」の評価へ直接進み、値「val」は0と同じではない。これにより、符号フラグはセットされる。第1の符号が検出されており、next_sign_indは、検出された符号に従って設定され、この場合、next_sign_ind=1、すなわち、負の値(−1)に設定される。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元1及び0のL1ノルムの整数ベクトルの数に対応するオフセットA(1,0)だけカウントアップされる。A(1,0)は0に等しい。そこで、累積インデックスはindex=0となる。次に、累積kパラメータk_accは、「val」の絶対値だけ、すなわち、1単位だけ更新され、すなわち、k_acc=1となる。
【0079】
数nを1増加させ、すなわち、n=2とし且つ位置標識「pos」を1減少させ、例えば、pos=1とすることにより、次の繰り返しが準備される。流れはステップ308に戻り、位置1の新たな値が選択され、すなわち、この例では、val=vec(1)=0となる。符号フラグ「got_sign_flag」は、符号が検出されたことを指示するが、現在の値「val」は0に等しいので、「next_sign_flag」は次の繰り返しのためにセーブされる。流れは値「val」の評価へ続き、値「val」は0と同じである。従って、next_sign_indは変更されない。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元2及び1のL1ノルムの整数ベクトルの数に対応するオフセットA(2,1)だけカウントアップされる。A(2,1)は1に等しい。そこで、累積インデックスはindex=1となる。次に、累積kパラメータk_accは、「val」の絶対値だけ、すなわち、0単位だけ更新され、すなわち、依然としてk_acc=1である。
【0080】
数nを1増加させ、すなわちn=3とし且つ位置標識「pos」を1減少させ、例えば、pos=0とすることにより、次の繰り返しが準備される。流れはステップ308に戻り、位置0の新たな値が選択され、すなわち、この例では、val=vec(0)=-4となる。符号フラグ「got_sign_flag」は、符号が検出されたことを指示し、現在の値「val」は0に等しくないので、ベクトル位置2から生じる「next_sign_ind」はLSBとして累積インデックス「index」に加算され、この結果、累積インデックスは3(=2
*1+1)となる。流れは値「val」の評価へ続き、値「val」は0と同じではない。next_sign_indは、検出された符号に従って設定され、この場合、next_sign_ind=1となり、すなわち、負の値(−4)である。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元3及び1のL1ノルムの整数ベクトルの数に対応するオフセットA(3,1)だけカウントアップされる。A(3,1)は1に等しい。そこで、累積インデックスはindex=4となる。次に、累積kパラメータk_accは、「val」の絶対値だけ、すなわち、4単位だけ更新され、すなわち、k_acc=5となる。
【0081】
この時点で、累積k_accは最大限のK=5に等しく、ベクトルのすべての位置が考慮されている。従って、出力インデックスは、現在の累積インデックスに等しく、出力インデックス4となる。最後に識別された符号は累積インデックスにまだ含まれておらず、別のパラメータとして、すなわち、先行符号=「−1」(next_sign_ind=1)として抽出される。
【0082】
第3の例では、次元N=3とし且つ単位パルスの数K=5として、[0,5,0]の整数入力ベクトルを考える。初期化が実行され、「pos」は「2」に設定され、インデックス、k_accは「0」に設定され、次元n=1に設定され、got_sign_flagはセットされない(=0)。第1の値「val」は、ベクトルの係数2として、すなわち、0として選択される。非零値はまだ評価されていないので、符号は抽出されておらず、流れは、検出された符号に基づくインデックスの調整を飛び越す。これにより、流れは、値「val」の評価へ直接進み、値「val」は0と同じである。これにより、符号フラグのトリギング(trigging)は飛び越される。従って、第1の符号はまだ検出されていない。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元1及び0のL1ノルムの整数ベクトルの数に対応するオフセットA(1,0)だけカウントアップされる。A(1,0)は0に等しい。そこで、累積インデックスはindex=0となる。次に、累積kパラメータk_accは、「val」の絶対値だけ、すなわち、0単位だけ更新され、すなわち、依然としてk_acc=0である。
【0083】
数nを1増加させ、すなわち、n=2とし且つ位置標識「pos」を1減少させ、例えば、pos=1とすることにより、次の繰り返しが準備される。流れはステップ308に戻り、位置1の新たな値が選択され、すなわち、この例では、val=vec(1)=5となる。符号フラグ「got_sign_flag」は、符号がまだ検出されていないことを指示する。これにより、流れは、値「val」の評価へ直接進み、値「val」は0と同じではない。これにより、符号フラグはセットされる。この時点で第1の符号が検出されており、next_sign_indは、検出された符号に従って設定され、すなわち、この場合、next_sign_ind=0となり、すなわち、正の値(5)である。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元2及び0のL1ノルムの整数ベクトルの数に対応するオフセットA(2,0)だけカウントアップされる。A(2,0)は0に等しい。そこで、累積インデックスは依然としてindex=0である。次に、累積kパラメータk_accは、「val」の絶対値だけ、すなわち、5単位だけ更新され、すなわち、k_acc=5となる。
【0084】
数nを1増加させ、すなわち、n=3とし且つ位置標識「pos」を1減少させ、例えば、pos=0とすることにより、次の繰り返しが準備される。流れはステップ308に戻り、位置0の新たな値が選択され、すなわち、本例ではval=vec(0)=0となる。符号フラグ「got_sign_flag」は、符号が検出されたことを指示するが、現在の値「val」は0に等しいので、「next_sign_ind」は、次の繰り返しのために又は本例では最終ステップのためにセーブされる。流れは、値「val」の評価へ続き、値「val」は0と同じである。従って、next_sign_indは変更されない。次に、累積インデックスは、正の先行値を有し且つ先行する0を持たない、次元3及び5のL1ノルムの整数ベクトルの数に対応するオフセットA(3,5)だけカウントアップされる。A(3,5)は41に等しい。そこで、累積インデックスはindex=41となる。次に、累積kパラメータk_accは、「val」の絶対値だけ、すなわち、0単位だけ更新され、すなわち、依然としてk_acc=5である。
【0085】
累積k_accはこの時点で最大限のK=5に等しく、ベクトルのすべての位置が考慮されている。従って、出力インデックスは現在の累積インデックスに等しく、すなわち、出力インデックス41となる。最後に識別された符号は累積インデックスにまだ含まれておらず、別のパラメータとして、すなわち、先行符号=「+1」(next_sign_ind=0)として抽出される。
【0086】
図8には、代わりに区分化先行符号符号化を使用する基本MPVQ反復の一実施形態のハイレベル概略図が示される。図は、先行符号情報の区分化を使用する基本MPVQ反復の一実施形態のハイレベル概略図を示す。好適な解では、固有pos[0]振幅k_deltaごとに、例えば、k_delta=[k-1,k-2,...1]に関して2つの符号区分が実現される。pos[0]値=「k」の場合、すべての単位パルスはpos[0]で消費され、反復を停止できる。pos[0]値が非零の場合に、最初に遭遇した非零位置符号である正の次の先行符号は1ビットの情報を必要とする。pos[0]値が非零の場合、最初に遭遇した非零位置符号である負の次の先行符号は1ビットの情報を必要とする。pos[0]値=「0」である場合、反復は、新たな先行符号情報を必要とすることなくpos[0]に拡張される。
【0087】
以上のような反復の定義から、次のような式を確立できる。
M(n,k)=1+U(n,k)+U(n,k)+M(n-1,k)=1+2*U(n,k)+M(n-1,k)
M(n,k)-M(n-1,k)=1+2*U(n,k)
【0088】
フィッシャーのPVQ再帰を適用することにより、次の式が得られる。
M(n,k)-M(n-1,k)=M(n-1,k-1)+M(n,k-1)
1+2*U(n,k)=M(n-1,k-1)+M(n,k-1)-M(n-1,k-1)+M(n-1,k-1)
1+2*U(n,k)=1+2*U(n,k-1)+2*M(n-1,k-1)
U(n,k)=U(n,k-1)+M(n-1,k-1)
M(n-1,k-1)=U(n,k)-U(n,k-1)
この結果、
M(n-1,k)=[U(n,k+1)-U(n,k)]
となる。再帰の定義から、次のことがわかる。
M(n,k)=1+2*U(n,k)+[U(n,k+1)-U(n,k)]=1+U(n,k)+U(n,k+1)
そこで、MPVQサイズを再帰的に次のように判定できる。
N
MPVQ(n,k)=M(n,k)=1+U(n,k)+U(n,k+1)
採用されるMPVQ再帰公式の導出に関しては、更に付録Bを参照。
N
MPVQ(n,k)=1+2*U(n,k)+N
MPVQ(n-1,k)
【0089】
列挙/インデクシングでは、以下に定義される特性(a〜g)のいずれかを使用する。
a)N
PVQ(n,k)=2*N
MPVQ(n,k)、
(効率のよいインデクシングのために再帰的に適用される)
b)U(n,k)=1+U(n,k-1)+U(n-1,k-1)+U(n-1,k)、
初期条件はU(0,
*)=0、U(
*,0)=0、U(1,
*)=0、U(
*,1)=0及びU(a,b)=U(b,a)であり、効率を得るために更にU(2,k)=k-1及びU(n,2)=n-1及びU(3,k)=K
*(k-1)及びU(n,3)=n(n-1)を使用できる。
c)N
MPVQ(n,k)=1+U(n,k)+U(n,k+1)、
(最終MPVQサイズ計算)
d)N
MPVQ(n,k)=1+floor((A(n,k))/2)+U(n,k+1)、
(代替最終サイズ計算)
e)N
MPVQ(n,k)-N
MPVQ(n-1,k)=1+2*U(n,k)=A(n,k)、
(反復振幅インデックス追加判定に使用可能である)
f)A(n,k)=A(n,k-1)+A(n-1,k-1)+A(n-1,k)、
(例えば、CELT/OPUS−audioでも使用されるこの再帰は、複雑度の低い振幅インデクシングオフセット更新にも使用できる)
g)PVQオフセット=U(n,k=0..K+1)を反復更新するか、又は好ましくはA(n,k=0...K)及びU(n,K+1)を反復更新する。A(n,k)再帰はU(n,k)再帰よりわずかに速く、最終要素U(n,K+1)はA(n,K+1)より低いダイナミックレンジを有する。
【0090】
この場合、c)及びd)は、ビットストリームからインデックスを取得するために必要とされるか、あるいはビットストリーム又はビットストリームにインタフェースする演算符号化器/復号器に提供される最終MPVQ(n,k)符号語のサイズを計算するために使用される。
【0091】
図9は、次元を増加させる場合のPVQ−A/Uオフセット再帰の3つの実施形態の組み合わせを示す。
【0092】
オフセットを更新する手順はステップ350で開始される。入力パラメータは、次元n及びk_max+1値である。この手順は、行nのインデクシングオフセットに行n-1のインデクシングオフセットを提供し、0...(k_max+1)のkに関するオフセットの更新を含む。ステップ352で、Aオフセットのみが使用されるべきか否かが決定される。Aオフセットのみが使用されるべきである場合、ステップ354で、A(n,k)が次のように計算される。
【0093】
A(n,k)=A(n-1,k)+A(n-1,k-1)+A(n,k-1)
この特定の再帰は従来の技術でも利用されているが、PVQインデクシング処理の効率は劣る。ステップ397で、A(n,k)は返送される。ステップ356で、Uオフセットのみが使用されるべきか否かが決定される。Uオフセットのみが使用されるべきである場合、ステップ358で、U(n,k)が次のように計算される。
【0094】
U(n,k)=1+U(n-1,k-1)+U(n-1,k)+U(n,k-1)
ステップ398で、U(n,k)は返送される。ステップ360で、AオフセットとUオフセットの組み合わせが使用されるべきである。ステップ362において、k=0...(k_max)に関する再帰は、
A(n,k)=A(n-1,k)+A(n-1,k-1)+A(n,k-1)
に従って実行される。この特定の再帰は従来の技術でも利用されているが、PVQインデクシング処理の効率は劣る。最高ダイナミクスオフセット(k_max+1)に関して、ステップ364で再帰が実行される。特定の一実施形態において、
U(n,k_max+1)=1+U(n-1,k_max)+U(n-1,k_max+1)+U(n,k_max)
に従って純粋U再帰が使用される。別の特定の実施形態では、
U(n,k_max+1)=1+(A(n-1,k_max)>>1)+(A(n,k_max)>>)+U(n-1,k_max+1)
に従って混合A/U再帰が使用される。式中、(y>>1)はy=floor(y/2)を意味する。ステップ399において、A(n,k)及びU(n,k_max+1)は返送される。
【0095】
受信機側では、逆の手順が実行されなければならず、先行符号及びインデックスは整数出力ベクトルに変換される。
図10は、オーディオ/ビデオサンプルのピラミッドベクトル量子化デインデクシングの方法の一実施形態のステップのフローチャートを示す。方法はステップ450で開始される。ステップ452で、第1の符号語としての先行符号及び第2の符号語としての入力インデックスが入力ビットストリームから受信される。先行符号及び入力インデックスはオーディオ/ビデオ信号サンプルを表す。先行符号は、オーディオ/ビデオ信号サンプルを表す符号であって、作成されるべき整数出力ベクトル中の終端非零係数の符号である。整数出力ベクトルは複数の整数値係数を有する。終端非零係数は、前記整数出力ベクトル中の最初の非零係数及び最後の非零係数のうち一方である。ステップ454で、入力インデックスはピラミッドベクトル量子化列挙解除方式によって整数出力ベクトルにデインデクシングされる。列挙方式により作成される入力インデックスは、終端非零係数の符号を無視している。ステップ456で、整数出力ベクトル中の終端非零係数の符号は、受信された先行符号に従って割り当てられる。別の実施形態では、ステップ456は、ステップ454と同時に、ステップ456と組み合わせて又はステップ456の前に実行可能である。ステップ458で、整数出力ベクトルは出力される。処理はステップ499で終了する。
【0096】
特定の一実施形態において、デインデクシングするステップ454は、反復列挙解除手順により実行される。更なる特定の実施形態では、反復列挙解除手順は、残存インデックスが入力インデックスと等しくなるように設定される初期化ステップと、考慮に入れるために整数出力ベクトルの1つの現在係数が選択される反復ステップの繰り返しとを含む。反復ステップは、整数出力ベクトルの中の現在係数の位置及び残存インデックスに適合しているオフセットパラメータを発見することと、オフセットパラメータに応じて残存インデックスを減少させることと、整数入力ベクトルの現在係数の振幅をオフセットパラメータと関連する振幅と等しくなるように設定することとを含む。繰り返しは、残存インデックスが0に等しくなるまで、整数入力ベクトルの係数が現在係数として順次選択されている間は継続される。
【0097】
MPVQデインデクシングの受信側のいくつかの態様が処理の実施形態を実現する詳細なブロック図を使用して以下に例示される。MPVQデインデクシングの一実施形態の概要が
図11に示される。MPVQデインデクシングはステップ250で開始される。ステップ260で、コーデックビット割り当てループからVQ次元N及び単位パルスの数Kが獲得される。ステップ270で、サイズ及びオフセットが発見される。ステップ280で、入力ビットストリームから先行符号が抽出され、ステップ285で、入力ビットストリームからMPVQインデックスが取得される。これらの量は、MPVQインデックスが分解されるステップ290で利用される。処理はステップ299で終了する。
【0098】
図10のフローチャートと比較して、ステップ260、270、280及び285は、ステップ452に含まれると考えることができる。ステップ454及び456も同様にステップ290に含まれると考えられる。
【0099】
例えば、
図11のステップ270に対応するサイズ及びオフセットを発見するための手順の一実施形態が
図12に示される。デインデクシングにおけるA(n,k)オフセットは、通常、振幅オフセットであるが、残存符号も考慮に入れる。U(n,k)オフセットも同様である。これも振幅オフセットである。しかし、U(n,k)オフセットは第1の先行符号(「2」)を含まず、残存先行符号の残りのすべてが含まれる。一般に、オフセットは、振幅及び先行符号の残存する可能な組み合わせに関するセクションサイズを示す。場合によっては、これは、現在の先行符号(A(n,k))によって実行されるが、次の先行符号なしで、残存するすべての先行符号によって実行されることもある(U(n,k)の場合)。k=0〜k=K+1で次元Nに関してMPVQサイズN
MPVQ(N,K)及びインデクシングオフセットA、Uを発見するための手順はステップ500で開始される。尚、A(n,k)の直接式、A(n,k)行専用再帰及びA基本再帰は従来の技術で知られている。ステップ502で、サイズ及びオフセットがROMテーブルに記憶されているか否かが検査される。N及びKの双方がローであるときに現実に起こりうるように、記憶されている場合、手順はステップ519によって直接継続する。ステップ504で、効率のよい直接計算が可能であるか否かが検査される。Nがローであるときに現実に起こりうるように、可能である場合、処理はステップ506へ続き、MPVQサイズ(N,K)及び振幅オフセットA(N,K)に対して直接式が使用される。次に、手順はステップ519へ続く。ステップ508で、効率のよい行再帰が可能であるか否かが検査される。いくつかのKに対して現実的であるように、可能である場合、処理はステップ510へ続き、A(N,k=0...K)及びU(N,K+1)を計算するために行Nに対して再帰行専用式が使用される。次に、手順はステップ514へ続く。ステップ508で行専用再帰が実現不可能であることが判明した場合に、手順はステップ512へ続き、オフセットをA(N,k=0...K)及びU(N,K+1)として計算するために行0〜行Nに対して基本列/行オフセット再帰式に関してオフセット更新処理が使用される。これは、すべてのN及びKに対して可能である。そのようなオフセット更新ルーチンの一例は、例えば、
図9で見られる。ステップ514において、MPVQサイズをMPVQ-size=1+(A(N,K)>>1)+U(N,K+1)として、あるいはMPVQ-size=1+U(N,K)+U(N,K+1)として計算できる。ステップ519において、オフセット(A,U)及びMPVQサイズを返送することにより、手順は終了する。
【0100】
図13は、MPVQインデックス分解の一実施形態を示す。MPVQインデックスを分解する手順はステップ520で開始される。パラメータN、K、入力インデックス及び先行符号並びにオフセット値が提供される。残存インデックスは入力インデックスと等しくなるように設定される。ステップ522で、出力ベクトル「vec」は0によって初期化される。ステップ524で、ローカル最大値k、k_max_localはKと等しくなるように設定され、ベクトル中の位置は0から開始され、nはNに設定される。ステップ526で、ベクトル中のすべての位置が考慮された否かが検査される。すべての位置が考慮されていた場合、ステップ548で、出力ベクトルとしてベクトルが返送され、すなわち、最終位置の後の処理を抜ける。ステップ528で、残存インデックスが0であるか否かが検査される。0である場合に、非零値で充填されるべきベクトル位置はそれ以上残っていない。手順はステップ530へ続き、先行符号が組み込まれ、ステップ549で、出力ベクトルとしてベクトルが返送され、すなわち、最終位置の前の処理を速く抜ける。残存インデックスが0より大きい場合に、手順はステップ532へ続き、k_delta、すなわち、検査すべきベクトル位置の絶対振幅及び振幅オフセット「amp_offset」が発見される。このことは以下に更に詳細に説明される。ステップ534で、残存インデックスは振幅オフセットだけ減少される。ステップ536の検査に従って、ベクトル位置の振幅が非零の場合に、手順はステップ538へ続き、ベクトル位置は、振幅に先行符号を乗算した値に等しい値を与えられる。最初の非零係数の場合、先行符号は、ビットストリームから抽出される先行符号である。ステップ540で、将来位置に関する次の先行符号が推論される。このことは以下に更に詳細に説明される。ステップ542で、ローカル最大k値は現在のk値「k_delta」によって減少される。次に、ステップ544で次元nを増加させ、オフセットを更新し且つベクトル中の位置を1ステップ増分することにより、次の繰り返しが準備される。次に、手順はステップ526に戻る。
【0101】
図13に示されるように、受信されたインデックスから、現在位置の振幅「k_delta」が判定される。これは、利用可能なA(n,k)オフセット及び/又はU(n,k)オフセットを使用することにより実行されるのが好ましい。振幅情報オフセットが更に推論され、残存インデックスは、この振幅情報オフセット「amp_offset」だけ減少される。そのような手順の一実施形態が
図14に示される。
【0102】
振幅k_delta及び振幅オフセットamp_offsetを発見する手順の一実施形態はステップ550で開始される。言い換えれば、この手順は、現在位置の振幅及び対応するインデックスオフセットを発見することであると想定される。A(n,k)のオフセットを使用する線形探索又はツリー探索自体は、従来の技術で利用可能である。入力パラメータは、ローカル最大値k「k_max_local」、インデックス及びオフセットH(n,k)=A(n,k)である。ステップ552でツリー探索又は線形探索が選択される。線形探索を選択した場合、ステップ554は、累積k値k_accをローカル最大値kと等しくなるように設定し、振幅オフセットは、現在のn及び累積k値に関するオフセットと等しくなるように設定される。ステップ556で、オフセットがインデックスより大きいか否かが検査される。大きい場合に、ステップ558でk_acc値は1単位減少され、新たな振幅オフセットが導出される。次に、手順はステップ556に戻る。残存インデックス以下の最大振幅オフセット値が発見されるまで、これが繰り返される。次に、手順はステップ560へ続き、k_delta、すなわち、現在位置の振幅は、k_acc値だけ減少されたローカル最大k値として計算される。
【0103】
ツリー手順が選択された場合、ステップ562でハイパラメータ及びローパラメータが定義され、n及びハイパラメータに関する振幅オフセットが推論される。ステップ564で、探索すべきk領域は、k_testパラメータによって2つの部分に分割され、n及びハイパラメータに関する振幅オフセットが推論される。ステップ566で決定されるような、振幅オフセットがインデックスより大きいか又は小さいかに応じて、ステップ568でハイパラメータが変更されるか、又はステップ572でローパラメータが変更される。ステップ570及び574でそれぞれ検査されるように、振幅オフセットとインデックスとの差が0になるか、又はk_testポイントがハイパラメータと等しくなるまで、これが繰り返される。ステップ576で、k_delta、すなわち、現在位置の振幅は、k_test値だけ減少されたローカル最大k値として計算される。ステップ579で、振幅k_delta、k_acc及びamp_offsetは区分化符号符号化に使用され、この場合、k_acc=k_max_local-k_deltaである。
【0104】
図13のステップ536で、大きさが0ではなく、最大残存K単位パルス値より小さい場合に、ステップ538で、以前に抽出(記憶)された先行符号が現在位置振幅に適用される。その後、次の先行符号は、受信され、分解されたMPVQインデックスから抽出されるべきである。次の先行符号を発見し、抽出された符号情報(ビット又はsign_offset)をインデックスから除去する手順の一実施形態は
図15に示される。
【0105】
次の先行符号を獲得する手順はステップ580で開始される。入力パラメータは残存インデックス、オフセット及び累積k値k_accである。ステップ582で符号位置決め方法が選択される。現時点で好適な実施形態であると考えられるLSB方式が選択された場合に、ステップ584で、先行符号は、最初に正(+1)に設定される。ステップ586で、ビットごと「and」演算を使用してインデックス中の最下位ビットが判定される。ビットが「1」である場合に、これは負の符号を意味し、その結果、ステップ588で先行符号は「−1」に変更される。ステップ590でインデックスは位置1つだけシフトされ、すなわち、符号ビットをシフトアウトする。
【0106】
LSB方式よりわずかに複雑である区分化先行符号復号化が選択された場合に、ステップ592で、先行符号は、最初に正(1)に設定される。ステップ594で、k_deltaセグメントのサイズは2分割される。インデックスがこの符号オフセット以上である場合に、符号は負であり、その結果、ステップ597で先行符号は変更される。ステップ598で、インデックスも、発見された符号オフセットだけ減少される。ステップ599で、先行符号及び修正後のインデックスが返送される。
【0107】
再び
図13に戻ると、現在位置が0振幅を有する場合に、先行符号は保持され、すなわち、現在位置の後の次の位置で使用するために記憶される。
【0108】
大きさが最大残存K単位パルス値と等しい場合に、記憶された先行符号が適用される。オプションとしてこの最後の非零エントリの代わりに処理を反復して速く抜けることができ、一連の末尾0によって早期に処理を抜けることができる。DSP−HWでは、最適化一定長ループを条件付きで処理を抜けることのコストは、場合によってはループにとどまることより高いので、これは任意である。
【0109】
残存ベクトルに関してオフセットA(n,k)又はU(n,k)を再帰的に更新することができ、その場合、デインデクシングするために1次元減少させ且つデインデクシングするために単位パルスを「k_delta」だけ減少させる。1次元減少させる場合のオフセット更新の手順の一実施形態が
図16に示される。手順は
図9に提示される手順に類似しているが、この場合、次元は増加されるのではなく、減少される。
【0110】
オフセットを更新する手順はステップ600で開始される。入力パラメータは、次元n及びk_max値である。この手順は、0...k_maxのkに関するオフセットを更新することを含めて、行n+1のインデクシングオフセットを行nのインデクシングオフセットに提供する。ステップ602で、Aオフセットのみが使用されるべきであるか否かが決定される。Aオフセットのみが使用されるべきである場合に、ステップ604で、A(n,k)は次のように計算される。
A(n,k)=A(n+1,k)-A(n,k-1)-A(n+1,k-1)
この特定の再帰は従来の技術でも利用されているが、PVQインデクシング処理の効率は劣る。ステップ617でA(n,k)が返送される。ステップ606で、Uオフセットのみが使用されるべきであるか否かが決定される。Uオフセットのみが使用されるべきである場合に、ステップ608で、U(n,k)は次のように計算される。
U(n,k)=U(n+1,k)-U(n,k-1)-U(n+1,k-1)-1
ステップ618でU(n,k)は返送される。ステップ610で、AオフセットとUオフセットの組み合わせが使用されるべきである。ステップ612で、k=0...(k_max-1)に関する再帰は、
A(n,k)=A(n+1,k)-A(n,k-1)-A(n+1,k-1)
に従って実行される。この特定の再帰は従来の技術でも利用されているが、PVQインデクシング処理の効率は劣る。k_max=K+1である場合の最高ダイナミクスオフセットk_maxに関して、ステップ614で再帰が実行される。特定の一実施形態では、純粋なU再帰は、
U(n,k_max)=U(n+1,k_max)-U(n,k_max-1)-U(n+1,k_max-1)-1
に従って使用される。別の特定の実施形態では、
U(n,k_max)=U(n+1,k_max)-(A(n,k_max-1)>>1)-(A(n+1,k_max-1)>>1)-1
に従って混合A/U再帰が使用され、式中、(y>>1)は、y=floor(y/2)を意味する。ステップ619で、A(n,k)及びU(n,k_max)が返送される。
【0111】
ここで、
図13の構造を容易に理解するために、3つの例を以下に説明する。説明を限度内にとどめ、例全体を理解できるようにするために、それらの例は極めて複雑度の低いものである。しかし、通常の現実の例では、次元及び単位パルスの数は、それよりはるかに多い。しかし、原理は同一である。
【0112】
第1の例では、次元N=3及び単位パルスの数K=5として、17の入力インデックス及び先行符号「+1」、すなわち、正の符号を考える。初期化が実行され、「pos」は「0」に設定され、すなわち、デインデクシングは、ベクトル中の第1の係数から開始され、k_max_localが5とされ、次元n=3とされる。入力インデックスは残存インデックスに「リネーム」される。位置は3より低く、残存インデックスは0ではない。振幅k_delta及びオフセットamp_offsetが探索される(例えば、
図14に従って)。例えば、Aオフセットが使用される場合に、オフセット群A(3,0...5)が検査され、まだ残存インデックス以下である最大AオフセットはA(3,3)=13である。従って、k_accは3になり、k_deltaは2になり、amp_offsetは13に等しい。残存インデックスはamp_offsetだけ減少され、4に等しくなる。k_deltaは0に等しくないので、適用されるべき符号は存在する。従って、ベクトル位置は、絶対値(k_delta)と、受信され、記憶された正である先行符号との積に設定される。そこで、出力ベクトルは[2,0,0]になる。次に、例えば、
図15に従って、次の先行符号の判定が実行される。LSB符号位置決めを想定すると、残存インデックス(4)のLSBは0であり、これは正の符号に対応する。従って、lead_signは「+1」に設定される。残存インデックスは、インデックスを1ステップシフトすることにより減少され、すなわち、2による整数除算に等しい。そこで、残存インデックスは2に等しくなる。最後に、残存パルス単位k_max_localが更新され、この時点で3になる。
【0113】
数nを1減少させ、すなわち、n=2とし且つ位置標識「pos」を1増加させ、例えば、pos=1とすることにより、次の繰り返しが準備される。新たなnに従って、利用可能オフセットも更新される。流れはステップ526に戻り、新たな振幅及びオフセットが発見されるべきである(例えば、
図14に従って)。例えば、Aオフセットが使用される場合に、オフセット群A(2,0...3)が検査され、まだ残存インデックス以下である最大AオフセットはA(2,1)=1である。従って、k_accは1になり、k_deltaは2になり、amp_offsetは1に等しい。残存インデックスはamp_offsetだけ減少され、1に等しくなる。k_deltaは0に等しくないので、適用されるべき符号は存在する。従って、ベクトル位置は、絶対値(k_delta)と、最近抽出され、正であった先行符号との積に設定される。そこで、出力ベクトルは[2,2,0]になる。次に、例えば、
図15に従って、次の先行符号の判定が実行される。LSB符号位置決めを想定すると、残存インデックス(1)のLSBは1であり、これは負の符号に対応する。従って、lead_signは−1に設定される。残存インデックスも、インデックスを1ステップシフトすることにより減少され、すなわち、2による整数除算に等しい。そこで、残存インデックスは0に等しくなる。最後に、残存パルス単位k_max_localが更新され、この時点で1になる。
【0114】
数nを1減少させ、すなわちn=1とし且つ位置標識「pos」を1増加させて、例えば、pos=2とすることにより、次の繰り返しが準備される。新たなnに従って、利用可能オフセットも更新される。流れはステップ526に戻る。残存インデックスは0であるので、最後のベクトル係数を提供するためにステップ530が実行される。lead_signは−1に等しく、k_max_localは1に等しく、これにより、[2,2,-1]の出力ベクトルが得られる。
【0115】
第2の例では、次元N=3とし且つ単位パルスの数K=5として、4の入力インデックス及び負の先行符号を考える。初期化が実行され、「pos」は「0」に設定され、すなわち、デインデクシングは、ベクトル中の第1の係数、k_max_local「5」及び次元n=3から開始される。入力インデックスは残存インデックスに「リネーム」される。位置は3より低く、残存インデックスは0ではない。振幅k_delta及びオフセットamp_offsetが探索される(例えば、
図14に従って)。例えば、Aオフセットが使用される場合に、オフセット群A(3,0...5)が検査され、まだ残存インデックス以下である最大AオフセットはA(3,1)=1である。従って、k_accは1になり、k_deltaは4になり、amp_offsetは1に等しい。残存インデックスはamp_offsetだけ減少され、3に等しくなる。k_deltaは0に等しくないので、適用されるべき符号は存在する。従って、ベクトル位置は、絶対値(k_delta)と、受信され、負であった先行符号との積に設定される。そこで、出力ベクトルは[-4,0,0]になる。次に、例えば、
図15に従って、次の先行符号の判定が実行される。LSB符号位置決めを想定すると、残存インデックス(3)のLSBは1であり、これは負の符号に対応する。従って、lead_signは−1に設定される。残存インデックスは、インデックスを1ステップシフトすることにより減少され、すなわち、2による整数除算に等しい。そこで、残存インデックスは2に等しくなる。最後に、残存パルス単位k_max_localが更新され、この時点で1になる。
【0116】
数nを1減少させ、すなわち、n=2とし且つ位置標識「pos」を1増加させて、例えば、pos=1とすることにより、次の繰り返しが準備される。新たなnに従って、利用可能オフセットも更新される。流れはステップ526に戻り、新たな振幅及びオフセットが発見されるべきである(例えば、
図14に従って)。例えば、Aオフセットが使用される場合に、オフセット群A(2,0...1)が検査され、まだ残存インデックスより小さい最大AオフセットはA(2,1)=1である。従って、k_accは1になり、k_deltaは0になり、amp_offsetは1に等しい。残存インデックスはamp_offsetだけ減少され、1に等しくなる。k_deltaは0に等しいので、次の繰り返しに備えて最後の抽出符号がセーブされる。出力ベクトルは依然として[-4,0,0]である。
【0117】
数nを1減少させ、すなわち、n=1とし且つ位置標識「pos」を1増加させて、例えば、pos=2とすることにより、次の繰り返しが準備される。新たなnに従って、利用可能オフセットも更新される。流れはステップ526に戻り、新たな振幅及びオフセットが発見されるべきである(例えば、
図14に従って)。例えば、Aオフセットが使用される場合に、オフセット群A(1,0...1)が検査され、まだ残存インデックス以下である最大AオフセットはA(1,1)=1である。従って、k_accは1になり、k_deltaは0になり、amp_offsetは1に等しい。残存インデックスはamp_offsetだけ減少され、0に等しくなる。k_deltaは0に等しくないので、適用されるべき符号は存在する。従って、ベクトル位置は、絶対値(k_delta)と、先に抽出され、負であった先行符号との積に設定される。最終出力ベクトルは[-4,0,-1]になる。
【0118】
第3の例では、次元N=3とし且つ単位パルスの数K=5として、41の入力インデックス及び正の先行符号を考える。初期化が実行され、「pos」は「0」に設定され、すなわち、デインデクシングは、ベクトル中の第1の係数、k_max_local「5」及び次元n=3から開始される。入力インデックスは残存インデックスに「リネーム」される。位置は3より低く、残存インデックスは0ではない。振幅k_delta及びオフセットamp_offsetが探索される(例えば、
図14に従って)。例えば、Aオフセットが使用される場合に、オフセット群A(3,0...5)が検査され、まだ残存インデックス以下である最大AオフセットはA(3,5)=41である。従って、k_accは5になり、k_deltaは0になり、amp_offsetは41に等しい。残存インデックスはamp_offsetだけ減少され、0に等しくなる。k_deltaは0に等しいので、後の反復に備えて符号はセーブされる。出力ベクトルは依然として[0,0,0]である。
【0119】
数nを1減少させ、すなわち、n=2とし且つ位置標識「pos」を1増加させて、例えば、pos=1とすることにより、次の繰り返しが準備される。新たなnに従って、利用可能オフセットも更新される。流れはステップ526に戻り、新たな振幅及びオフセットが発見されるべきである(例えば、
図14に従って)。例えば、Aオフセットが使用される場合に、オフセット群A(2,0...5)が検査され、まだ残存インデックス以下である最大AオフセットはA(2,0)=0である。従って、k_accは0になり、k_deltaは5になり、amp_offsetは0に等しい。残存インデックスはamp_offsetだけ減少され、0に等しくなる。k_deltaは0に等しくないので、適用されるべき符号は存在する。従って、ベクトル位置は、絶対値(k_delta)と、受信され、記憶された、正であった先行符号とを乗算した値に設定される。そこで、出力ベクトルは[0,5,0]になる。
【0120】
数nを1減少させ、すなわち、n=1とし且つ位置標識「pos」を1増加させて、例えば、pos=2とすることにより、次の繰り返しが準備される。流れはステップ526に戻る。ステップ528で、インデックスは0であり、ステップ530及び549を介して処理を速く抜けれることがわかる。
【0121】
本開示で提示されるこの新規なインデクシング方式は、改善された複雑度の低い短符号語方式である。設計上、これは、最適化された純粋大きさインデクシング方式(Fischer/Hung/Opus/CELT)であるが、それに加えて、あらゆるPVQ構造の大きさは常に偶数のベクトルであるという事実を効率よく利用する。
【0122】
非常に大きなPVQベクトル(1+Bより大きい)ビットを効率よく処理する必要がある。これは、例えば、目標ベクトル次元分割、PVQベクトル次元分割又はコストが高いダイナミックレンジ整数計算、例えば、n
*16又はn
*32仮想、ソフトウェア定義の大きな整数により実行可能である。
【0123】
BビットからB+1ビットへ(例えば、32ビットから33ビットへ)移行することの利得は、拡張R=ビット/係数範囲能力として定量化でき、この場合、所定の次元に関して次元分割は必要とされない。例えば、次元N=8の場合、R=32/8=4ビット/係数(又はサンプル)から係数又はサンプルごとにR=33/8=4.125ビットへ移行する。通常、高品質周波数領域オーディオPVQ方式では、R=7形状ビット/係数(又はサンプル)が要求される。
【0124】
図17Aは、いくつかの一般的なハードウェアビット限界に関するPVQ符号語の概要を示す。曲線900はPVQ(n,k)ビット限界33を示し、曲線901はPVQ(n,k)ビット限界32を示し、曲線902はPVQ(n,k)ビット限界31を示し、曲線903はPVQ(n,k)ビット限界17を示し、曲線904はPVQ(n,k)ビット限界16を示し、曲線905はPVQ(n,k)ビット限界15を示す。33ビットは、新規な方式及び符号なし32ビット整数と共に使用可能であり、32ビットは符号なし32ビット整数に対応し、31ビットは符号付き32ビット整数に対応し、17ビットは、新規な方式及び符号なし16ビット整数と共に使用可能であり、16ビットは符号なし16ビット整数に対応し、15ビットは符号付き16ビット整数に対応する。
【0125】
図17Bは、異なるBIT限界を有する最適のPVQ符号語量子化器に関するビット/サンプル単位の関連R値の概要を示す。曲線910はPVQ(n,k)ビット限界33を示し、曲線911はPVQ(n,k)ビット限界32を示し、曲線912はPVQ(n,k)ビット限界31を示し、曲線913はPVQ(n,k)ビット限界17を示し、曲線914はPVQ(n,k)ビット限界16を示し、曲線915はPVQ(n,k)ビット限界15を示す。R値が高いほど、高い符号化品質を実現できる。
【0126】
図17Cは、利得−形状PVQの結果である形状整合能力に直接相関させた対応する実現可能なパルス密度を示す。曲線920はPVQ(n,k)ビット限界33を示し、曲線921はPVQ(n,k)ビット限界32を示し、曲線922はPVQ(n,k)ビット限界31を示し、曲線923はPVQ(n,k)ビット限界17を示し、曲線924はPVQ(n,k)ビット限界16を示し、曲線925はPVQ(n,k)ビット限界15を示す。R値が高いほど、高い符号化品質を実現できる。異なるBIT限界と共に、最適PVQ符号語量子化器に関する可能なパルス密度が示される。パルス密度が高いほど、高い符号化品質、例えば、高いVQ SNRを実現できる。
【0127】
図17Dは、公正な比較のために、共に最大サイズ32のPVQ符号語を使用する従来の方式PVQの例及び新規な方式MPVQに関するインデクシング/デインデクシングにおけるワーストケースのMOPS命令トレードオフを示す。曲線930はMPVQに関する総合的複雑度を示し、曲線931はPVQに関する総合的複雑度を示し、曲線932はMPVQに関するデインデクシング複雑度を示し、曲線933はPVQに関するデインデクシング複雑度を示し、曲線934はMPVQに関するインデクシング複雑度を示し、曲線935はPVQに関するインデクシング複雑度を示す。上記のMPVQは符号付き32ビットアーキテクチャで実現可能であり、従来の技術のPVQは符号なし32ビットアーキテクチャを要求する。
【0128】
ここで提示される技術の第2の部分では、オフセットの低ダイナミックMPVQランタイム計算が説明される。付録Aには、背景としてOPUS RFCからのハイレベルテキスト記述が転載される。IETF−OPUS c−code(cwrs.c)では、符号インデクシング及び振幅インデクシングの双方で動的にランタイム計算されたインデクシングオフセットA(n,k)が使用される。しかし、尚OPUS c−code内で異なるオフセット可変名が使用される。数A(n,k)は、第1の位置で正の非零値から開始されるベクトルPVQ(n,k)の数を表す。従来の技術では、
A(n,k)=(N
PVQ(n,k-1)+N
PVQ(n-1,k-1))/2
であることがわかっている。言い換えれば、数Aは、PVQサイズマトリクスN(n,k)の行nの要素と先行する行n-1の要素との加重和である。
【0129】
A(n,k)に関する表1は、従来の技術(CELT/OPUS)のPVQオフセットデータ方式が使用され、メモリ効率に関して前方再帰の所定のポイントでRAMメモリに1つの行のみ、例えば、n=3が記憶され、その後、行n=3に基づいてn=4が計算され、それが繰り返される例を示す。
【0130】
尚、音声及びオーディオの符号化の実世界におけるPVQ実現形態の場合、目標DSPの容量に応じて、次元nは256になり、単位パルスkの数は約512になる可能性がある。従って、n
*k個のオフセットを記憶することは多くの場合に実現不可能である。
【0131】
表1 例えば、IETF−OPUS−Audioのようなインデクシング方式でPVQ復号化/符号化を実行する場合に計算されるPVQ(n=6,k=5)に必要とされる従来の技術のA(n,k)オフセット。
【0132】
しかし、動的インデクシングオフセット計算を改善することができる。ここで提案される新規な再帰は次の通りである。
U(n,k)=U(n,k-1)+U(n-1,k-1)+U(n-1,k)+1
これは、以前に採用されていた従来の技術のOPUS/CELTのオフセットA(n,k)と次のように関連していることがわかる。
A(n,k)=2*U(n,k)+1
U(n,k)の整数レンジダイナミクスは常にA(n,k)レンジの少なくとも2分の1である。これは、例えば32ビット語の中で高速インデクシングのために1ビット余分に利用可能にできることを意味する。また、U(2,k)及びU(3,k)をA(2,k)及びA(3,k)の場合より速く、対称的にU(2,k)=k-1,U(3,k)=k
*(k-1)及びU(a,b)=U(b,a)として直接計算できる。
【0133】
表2 MPVQ(n=6,k=5)に関して計算された新たな低ダイナミックレンジU(n,k)インデクシングオフセット。
【0134】
上記の表1及び表2から、A(n=6,k=6)=1683は10ビットの中に当てはまらないことがわかる。10ビットは1024のエントリ、例えば、値0〜1023に対応する。しかし、新たなオフセットU(n=6,k=6)は10ビットの中に当てはまる。正確なインデクシング/デインデクシングを成功させるためにはインデクシングオフセットを正確に計算する必要があるので、オフセットA(6,6)が1023で飽和するか、又は不正確な低い値で完了することは許されない。
【0135】
以前の(IETF/OPUS−Audio PVQ−従来の技術)再帰は
A(n,k)=A(n,k-1)+A(n-1,k-1)+A(n-1,k)
である。これは3つの追加の項を有するため、4つの項が追加される新たなU(n,k)再帰と比較して、特に高いn又は高いkに関しては計算がわずかに速くなる。
【0136】
再帰効率を保ち且つ必要に応じて低いダイナミックレンジを維持するために、別の実施形態では、好適な混合再帰を定義することが可能であり、混合再帰の場合、U(n,KMAX)は、以前のA(n,低いk)オフセット値の関数であり、Bビット語のレンジ限界に近いダイナミック再帰データに関してのみ使用される。これは、通常、N行ベース再帰における最終列KMAXに関しては真である。表3では、最終エントリが10ビットを超える表1と比較して、オフセットは10ビットに収まっていることがわかる。
【0137】
表3 効率がよく且つレンジが保障されたインデクシング再帰のために計算された混合A(n,k)及び最終k列U(n,6=KMAX)オフセット。
【0138】
尚、通常、ダイナミックレンジの支障を引き起こすのは最終n行NMAX(この場合は6)及び最高のk(この場合はk=6)である。しかし、場合によっては、例えば、読み取り専用再帰計算において、除算の分子がハードウェアビット限界に近いときに、最後から2番目の行(NMAX-1)がレンジの問題を引き起こすこともある。
【0139】
MPVQ方式に関する上記の再帰関係の導出を付録Bで確認できる。
【0140】
従来の技術のPVQインデクシング方式の一例が表4に示される。この場合、最大インデックス値A(n,k)+A(k+1)-1は、例えば、232より小さくなければならない。従来の技術のOPUS/CELTでは、符号切り替え[{+,0}/−]を伴う表4の方式が使用される。注:a)ベクトル[-2,-1,1];b)インデックス25〜40に関して、位置p0における0のデインデクシングは、p1では最終的には正の値又は負の値又は0になってもよい;c)p0正の決定限界。
【0141】
[{+,0}/−]PVQインデクシングPVQ再帰デインデクシング方式PVQ(n=3,k=4)、NPVQ=66による従来のPVQ−インデクシング、[{−,0}/+]従来のインデクシング(青色、白色)セルpX=3次元ベクトル[p0,p1,p2]における位置、k=4単位パルスを符号化でき、例えば、復号化されたインデックス7→ベクトル[-2,-1,1]であり、符号を判定するためにオフセットA(n,k)が使用され、それらのオフセットからサイズを判定するために、関係NPVQ(n=3,k=4)=A(n,k)+A(n,k+1)が使用される。
【0142】
表4 従来のPVQインデクシング方式の例。
【0143】
AとUの関係は、MPVQ(3,5)の例に関して、先行符号再帰解法を使用して、表5に図式的に示される。N
PVQ(n=3,k=5)=2
*N
MPVQ(3,5)=2
*51=102となり、式中、「2」は、ここで事前抽出される先行符号ビットに対応する。ベクトルPVQ-vec=[p0,p1,p2]、例えば、復号化されたインデックス8は[3,-1,1]、和(abs(PVQ-vec))=5である。以下の表5では、ここで事前抽出される初期符号は正(+)であり、すなわち、以下に示す値p0は常に0以上である。この例において、次の先行符号は、2
*U(n,k)個の区分のLSBビットに記憶される。
【0144】
表5 例 MPVQ(3,5)LSBに基づく先行符号列挙。
【0145】
表6は、表5に従ったインデックス構成の例を示す。
【0146】
表6 MPVQ(3,5)LSBに基づく先行符号列挙の例、インデックス構成例。
【0147】
尚、すべてのn,kに対してA(n,k+1)を2
*N
MPVQ(n,k)ビット限界(例えば、32ビット)の中で保障なく計算することは不可能であるので、表5のPVQサイズは、ここではN
MPVQ=1+U(n,k)+U(n,K+1)を使用して計算されなければならない。従来の技術は、PVQ-size=A(n,K+1)+A(n,k)を使用するか、あるいはMOPSのコストの高い組み合わせ関数又は記憶された値のコストの高いROMテーブルルックアップを使用する非零要素の合計を使用する。
【0148】
図5(先行符号の区分化位置決め)及び
図2(先行符号のLSB位置決め)の基本再帰の概要では、A(n,k)を1+2
*U(n,k)とみなすこともできる。
【0149】
ここで提示される技術の別の部分では、符号の符号化位置の事前抽出による最適化MPVQインデクシングが説明される。符号の符号化位置encode_sign[0...N-1]のベクトルへのMPVQ先行符号、並びにその位置で符号化すべき実際の符号及び残存初期先行符号を事前抽出することによって符号化器側MPVQインデックス合成内部ループを最適化することも可能である。しかし、このためには、前処理符号シフト関数を実行しなければならず、パルス数が少ない場合、そのコストは高くなるだろう。しかし、場合によっては、インデックス合成の内部ループはいっそう容易になり、例えば、DSPパイプライン化に関して強力に最適化されることが可能であるので、MPVQインデクシングを実現することは好適な方法であるといえる。
【0150】
以下の符号事前シフトの例はN=8及びK=13を利用する。
【0151】
上記の例では、符号化は右から左へ、すなわち、位置(N-1)から位置0に向かって実行される。
【0152】
事前シフト関数は、第1の符号を変数「lead_sign」へシフトし、PVQ-vecの残存する符号は次の(左側の)非零位置へシフトされる。PVQ-vecの最後の非零位置は、encode_signベクトルでは常に0の値を獲得する。
【0153】
図18は、事前抽出された先行符号を使用するMPVQインデックス合成の一実施形態を示す。
図18には、このMPVQインデックス合成の実現形態に関して詳細なブロック図の実施形態が示される。事前抽出された先行符号及びMPVQサイズによってMPVQインデックスを合成するための手順はステップ700で開始される。本実施形態は、LSB位置の次の符号による解法に基づく。入力パラメータは、N、K及び「vec」としてのPVQベクトルである。ステップ702は、既知のオフセット再帰ベースケースを伴う初期化ステップであり、n=1を設定する。ステップ704で、位置パラメータはN-1に設定され、すなわち、ベクトルは、最終位置から始めて、最初に向かって終端から解析される。ステップ706で、累積インデックス及び累積パルスは0に設定される。最初に、ステップ708で符号が解析されるが、このことは以下に更に詳細に説明される。これにより、先行符号が判定され、符号ベクトルを利用可能である。ステップ710で、値は現在入力ベクトル係数と等しくなるように設定される。ステップ712〜720では、係数が非零である場合に、本実施形態ではLSBを追加することにより、累積インデックスは係数の符号に適応される。ステップ722で、残存単位パルス及び現在次元と関連するオフセットに従って、累積インデックスが修正される。ステップ724の検査に従って、現在位置が非零である場合、すなわち、探索が入力ベクトルの前部にまだ到達していない場合、ステップ726及び728で新たな繰り返しが準備され、手順はステップ710に戻る。ベクトル全体が探索されていた場合には、ステップ730でMPVQ-SIZEが計算され、ステップ739で、出力インデックス、先行符号及びMPVQサイズが提供される。
【0154】
図19は、符号抽出関数の一実施形態である。手順はステップ740で開始される。ステップ742で、初期化が実行され、正の先行符号を想定して符号化符号ベクトルに0係数が与えられ、初期非零係数の一次的位置は−1と設定され、位置番号0から開始される。ステップ744で、位置が最大に至っておらず、まだ先行符号が発見されていないかどうかが検査される。その通りである場合に、ステップ746で、現在位置のベクトル係数が0であるか否かが検査される。0である場合に、ステップ754で、現在位置は1ステップ前へ進められ、処理が反復される。現在ベクトル係数が非零の場合、手順はステップ748へ続き、ステップ750で、負の係数は負のlead_signをもたらす。ステップ752で、第1の非零係数の位置がinitial_posとして記録され、その後、手順はステップ754へ続く。ステップ744で、先行符号が発見されたと判定された場合に、手順はステップ756へ続き、符号ベクトルencode_sign手順は初期化される。ステップ758〜766は、非零係数に関して入力ベクトルを探索し続け、符号ベクトル中の対応する位置は、続く非零係数の符号を与えられる。すべての位置が検査され終わると、ステップ769で、先行符号及び符号ベクトルが返送される。
【0155】
この方式の利点は、先行符号の符号化位置の事前シフト又は事前特定により、インデクシング内部反復ループにおける先行符号のシャッフルを回避できることである。これは、分岐(IFs/ELSEs)を実現することのコストが大きい特定のハードウェアにおいて符号化内部ループを最適化することが望まれる場合に有益であるといえる。
【0156】
表7は、MPVQ区分化先行符号反復の例を示す。N
PVQ(n=3,k=5)=2
*N
MPVQ(3,5)=2
*51=102であり、式中、「2」は、現時点で事前抽出された先行符号ビットに対応する。ベクトルPVQ-vec=[p0,p1,p2]であり、例えば、復号化インデックス8は[3,0,2]であり、sum(abs(PVQ-vec))=5となる。表7において、現時点で事前抽出された初期符号は正であり、この例で、2
*U(n,k)初期振幅区分のロー/ハイ区分から導出された次の先行符号である。
【0157】
表7 MPVQ(3,5)区分化先行符号列挙の例。
【0158】
表8は、表7に従ったインデックス構成の例を示す。
【0159】
現時点で提示される技術の更に別の部分では、混合低ダイナミクス行専用再帰が説明される。k値が十分に低い場合に、以下に更に提示される新たな行専用再帰公式を使用して、オフセットマトリクスA(n,k)の所定の行nに関して必要とされるオフセットを計算することが可能である。新たな再帰公式の詳細な抜粋は付録Bに示される。PVQ差オフセットA(n,k)の所定の行nに関する一般再帰式は、2012従来技術IETF/OPUS−Audio符号で使用される。
A(n,k)=A(n,k-2)+((2*n-1)*A(n,k-1)-A(n,k-2)) /(k-1)
【0160】
表8 MPVQ(3,5)区分化先行符号列挙の例、インデックス構成例。
【0161】
上記の式のマッサージング(massaging)及び操作により、新たな関係
U(n,k)=(A(n,k)-1)/2,
を使用して、新たな好適な低ダイナミックレンジ混合再帰公式
U(n,k)=U(n,k-2)+(n*A(n,k-1)-N
MPVQ(n,k-2))/(k-1)
を取得でき、式中、N
MPVQ(n,k)=1+U(n,k)+U(n,k+1)、(MPVQ(n,k)サイズ)である。
【0162】
ここで新たな分子項n
*A(n,k-1)は、対応する従来の技術の分子項(2
*n-1)
*A(n,k-1)よりはるかに低いダイナミックレンジである。
【0163】
好適な解法では、k>0の場合にA(n,k)は奇数であるという事実を使用することにより、行nに関する以前のA(n,k)のみを使用するために、この行専用再帰を更にマッサージングすることができる。そこで、新たな非常に効率のよい混合再帰公式
U(n,k)=A(n,k-2)>>1+(n*A(n,k-1)-(1+A(n,k-1)>>1+A(n,k-2)>>1))/(k-1)
を取得し、式中、「>>」は2による整数除算であり、多くのハードウェアにおいて低コストの右シフトである。
【0164】
これにより、従来の技術の行専用再帰より高いn及び高いkに対して、限定された精度で、例えば、64ビット以内又は32ビット以内又は33ビット以内の高速行専用再帰を使用可能である。言い換えれば、行再帰に関してn又はkの範囲を拡大したので、新たなn
*A(n,k-1)の項は、旧来の項2
*n
*A(n,k-1)より遅くオーバフロー/終結する。
【0165】
U(n,k)の結果のオフセットは、以前に使用されていたA(n,k)より低いダイナミクスを有するので、最適化行専用再帰のダイナミクスに関わる利点は、表2の縮小ダイナミックオフセットから間接的に見て取ることができ、また、表3の混合再帰オフセットでもわかる。
【0166】
ここで提示される技術の更に別の部分では、混合MPVQ先行符号反復及びいずれかのレガシーPVQ反復が説明される。それに代わる別の可能な列挙方式は、ベクトルの残存部分に関して、初期MPVQ先行符号列挙段階及びそれに続く他の何らかの効率のよいPVQ列挙方式を採用することである。言い換えれば、第2の先行符号が列挙されるべきである場合、その都度、使用されるPVQ列挙方法をレガシー方式に切り替えることができる。初期先行符号MPVQ段階は、レガシー短符号語方式より1ビット多いビットを使用することを可能にし、初期MPVQ段階は、第1のMPVQ段階の後にオフセット(A,U)のダイナミクスを少なくとも1ビット少なくなるように縮小する。
【0167】
表9は、デインデクシング構造の一例、並びに第1のMPVQ段階と、その後に続く第2のOPUS/IETF−Audio大きさ及び(サイズPVQ(n,k)=A(n,k)+A(n,k+1))ベース列挙段階とのハイブリッドな組み合わせであるMPVQHの結果とを示す。
【0168】
表9 MPVQH(3,5)ハイブリッド単一先行符号列挙の例。
【0169】
(n=3,k=5)の場合のMPVQの変形例。このハイブリッドバージョンは、単一先行符号反復インデクシング段階と、その後に続く従来の技術のIETF/OPUSに類似する[{−,0}/+]の大きさに基づくPVQインデクシング段階セルとを使用し、N
PVQ=2
*N
MPVQH=2
*51=102となり、式中、「2」は、単一の初期単一抽出先行符号ビットに対応する。
【0170】
第1のMPVQ(n,k)段階を使用し、次に、第2の符号が追加されるべき場合に別のピラミッドベースPVQ列挙段階(IETF/OPUSに類似する大きさ段階)を使用するハイブリッド方式の欠点は(先に例示したMPVQHと同様に)、PROM符号サイズがきわめて大きくなることと、反復ループ内でインデクシング方法を切り替えるために、クリティカル反復ループの中で更に別のDSPサイクルを要求する更なる決定論理が必要になることである。また、いくつかのオフセットメモリを維持しなければならない。しかし、ハイブリッドMPVQ単一先行符号段階と、それに続く後続正規PVQ方式の段階とは、総合的な短符号語サイズを1ビット拡張するという利点、例えば、32ビットから33ビットに拡張するという利点も提供できる。
【0171】
以上説明した実施形態において、先行符号は、ベクトル中の最初の非零係数の符号として選択されていた。しかし、他の実施形態では、ベクトル中の最後の非零係数として先行符号を選択することも可能である。従って、先行符号は、整数入力ベクトル又は整数出力ベクトルの終端非零係数の符号である。終端非零係数は、整数入力ベクトル又は整数出力ベクトルの最初の非零係数及び最後の非零係数のうち一方である。先行符号を抽出することにより、残りのインデクシングを簡略化できる。顕著な理由の1つは、インデクシング方式を2分の1にまで縮小できることである。インデクシング前に、処理すべきベクトルの中にどれほどの数の非零係数が存在するかはわかっていない。しかし、常に終端非零係数は存在する。
【0172】
以上説明した実施形態において、整数入力ベクトルのインデクシングは最後の係数から開始され、最初の係数で終了すること、及びデインデクシングは整数出力ベクトルの最初の係数で開始され、最後の係数で終了するということも想定されていた。別の実施形態では、その代わりに、インデクシングは最初のベクトル係数で開始され、最後のベクトル係数で終了してもよく、デインデクシングは最後の係数で開始され、最初の係数で終了する。これに代わる終端非零係数の中の係数のいずれかとこれを組み合わせることができる。更なる実施形態では、インデクシングは、整数入力ベクトルの係数を何らかの所定の順序で取り上げてもよく、その場合、対応するデインデクシングは、整数出力ベクトルの係数を逆方向にたどる。ピラミッドベクトル量子化列挙方式及びピラミッドベクトル量子化列挙解除方式は、それに従って適応されてもよい。特定の一実施形態では、整数入力/出力ベクトル中の「位置」は、想定される処理順序における位置であることが可能であり、ベクトル自体の中の実際の位置に対応する必要はない。
【0173】
提案される技術は、特定の実施形態において、有線デバイス又は無線デバイスのいずれであってもよいユーザ端末又はユーザ機器に適用されてもよい。
【0174】
本明細書で使用される場合の非限定的な用語「ユーザ機器」(UE)及び「無線デバイス」は、移動電話、携帯電話、無線通信能力を備えるパーソナルデジタルアシスタント(PDA)、スマートフォン、内部又は外部にモバイルブロードバンドモデムを備えるラップトップコンピュータ又はパーソナルコンピュータ、無線通信能力を有するタブレットPC、目標デバイス、デバイスツーデバイスUE、マシン型UE又はマシンツーマシン通信が可能なUE、iPAD、顧客構内機器(CPE)、ラップトップ組み込み機器(LEE)、ラップトップ実装機器(LME)、ユニバーサルシリアルバス(USB)ドングル、ポータブル電子無線通信デバイス、無線通信能力を備えるセンサデバイスなどを表してもよい。特に、用語「UE」及び用語「無線デバイス」は、セルラ通信システム又は移動通信システムで無線ネットワークノードと通信するあらゆる種類の無線デバイス、あるいはセルラ通信システム又は移動通信システムの中における通信に関する何らかの関連規格に従った無線通信のための無線回路網を備えるあらゆるデバイスを含む非限定的な用語として解釈されるべきである。
【0175】
本明細書で使用される場合の用語「有線デバイス」は、ネットワークに有線接続するように構成又は準備されたあらゆるデバイスを表してもよい。特に、有線デバイスは、無線通信能力を備えているか又は備えていないかにかかわらず、有線接続するように構成されている場合の上記のデバイスのうち少なくともいくつかであってもよい。
【0176】
提案される技術は、特定の実施形態において、有線デバイス又は無線デバイスのいずれであってもよいネットワークノードに適用されてもよい。
【0177】
特定の実施形態において、ネットワークノードは無線ネットワークノードであることが可能である。本明細書で使用される場合の非限定的な用語「無線ネットワークノード」は、基地局、ネットワークコントローラなどのネットワーク制御ノード、無線ネットワークコントローラ、基地局コントローラなどを表してもよい。特に、用語「基地局」は、Node B又は進化型Node B(eNB)などの標準化基地局を含み、マクロ/マイクロ/ピコ無線基地局、フェムト基地局としても知られるホーム基地局、リレーノード、中継局、無線アクセスポイント、基地トランシーバ局(BTS)、更には1つ以上の遠隔無線ユニット(RRU)を制御する無線制御ノードなどを更に含む異なる種類の無線基地局を含んでもよい。
【0178】
ネットワークノードは、特定の実施形態において、有線通信システムの中のネットワークノードであることが可能である。
【0179】
UE又はネットワークノードは、情報の送信及び/又は受信を含めて、1つ以上の他のノードと通信するための無線回路を更に含んでもよい。
【0180】
本明細書で説明される方法及びデバイスは多様な方法で組み合わせ可能且つ再配置可能であることが理解されるだろう。
【0181】
例えば、実施形態は、ハードウェアで実現されてもよく、適切な処理回路により実行するためにソフトウェアで実現されてもよく、あるいはハードウェアとソフトウェアの組み合わせで実現されてもよい。
【0182】
本明細書で説明されるステップ、機能、手順、モジュール及び/又はブロックは、汎用電子回路網及び特定用途向け回路網の双方を含めて、ディスクリート回路技術又は集積回路技術のような従来のいずれかの技術を使用してハードウェアで実現されてもよい。
【0183】
特定の例は、1つ以上の適切に構成されたデジタルシグナルプロセッサ及び他の既知の電子回路、例えば、特殊化機能を実行するように相互に接続された個別の論理ゲート又は特定用途向け集積回路(ASIC)を含む。
【0184】
あるいは、本明細書で説明されるステップ、機能、手順、モジュール及び/又はブロックのうち少なくともいくつかは、1つ以上のプロセッサ又は処理ユニットなどの適切な処理回路網により実行するためのコンピュータプログラムのようなソフトウェアで実現されてもよい。
【0185】
従って、本明細書で提示されるフローチャートは、1つ以上のプロセッサにより実行される場合にコンピュータフローチャートとみなされてもよい。対応する装置は機能モジュール群として定義されてもよく、プロセッサにより実行される各ステップは1つの機能モジュールに対応する。この場合、機能モジュールは、プロセッサで実行されるコンピュータプログラムとして実現される。
【0186】
処理回路網の例は、1つ以上のマイクロプロセッサ、1つ以上のデジタルシグナルプロセッサ(DSP)、1つ以上の中央処理装置(CPU)、ビデオアクセラレーションハードウェア及び/又は1つ以上のフィールドプログラマブルゲートアレイ(FPGA)又は1つ以上のプログラマブルロジックコントローラ(PLC)のような何らかの適切なプログラム可能論理回路網を含むが、それらに限定されない。
【0187】
また、提案される技術が実現される従来の何らかのデバイス又はユニットの汎用処理能力を再利用することも可能だろうということを理解すべきである。更に、既存のソフトウェアの再プログラミングにより又は新たなソフトウェアコンポーネントの追加により既存のソフトウェアを再利用することも可能だろう。
【0188】
提案される技術は、オーディオ/ビデオ信号を符号化するように構成された符号化器を提供し、符号化器は、オーディオ/ビデオ信号サンプルを表す整数入力ベクトルを取得するように構成され、前記整数入力ベクトルは複数の整数値係数を有し、符号化器は、前記整数入力ベクトルから先行符号を抽出するように更に構成され、前記先行符号は、入力ベクトル中の終端非零係数の符号であり、前記終端非零係数は、整数入力ベクトル中の最初の非零係数及び最後の非零係数のうち一方であり、符号化器は、前記整数入力ベクトルをピラミッドベクトル量子化列挙方式によって出力インデックスにインデクシングするように更に構成され、前記出力インデックスは、前記先行符号と共にオーディオ/ビデオ信号サンプルを表し、ピラミッドベクトル量子化列挙方式は、終端非零係数の符号を無視するように設計され、符号化器は、先行符号を第1の符号語として且つ出力インデックスを第2の符号語として出力ビットストリームへ出力するように更に構成される。
【0189】
特定の一例において、符号化器はプロセッサ及びメモリを備える。メモリは、プロセッサにより実行可能な命令を備え、それにより、符号化器/プロセッサは、オーディオ/ビデオ信号サンプルを表す整数入力ベクトルを取得するように動作し、前記整数入力ベクトルは複数の整数値係数を有し、符号化器/プロセッサは、前記整数入力ベクトルから先行符号を抽出するように更に動作し、前記先行符号は、入力ベクトル中の終端非零係数の符号であり、前記終端非零係数は、整数入力ベクトル中の最初の非零係数及び最後の非零係数のうち一方であり、符号化器/プロセッサは、前記整数入力ベクトルをピラミッドベクトル量子化列挙方式によって出力インデックスにインデクシングするように更に動作し、前記出力インデックスは、先行符号と共にオーディオ/ビデオ信号サンプルを表し、ピラミッドベクトル量子化列挙方式は、終端非零係数の符号を無視するように設計され、符号化器/プロセッサは、先行符号を第1の符号語として且つ出力インデックスを第2の符号語として出力ビットストリームへ出力するように更に動作する。
【0190】
提案される技術は、ピラミッドベクトル量子化によりオーディオ/ビデオサンプルにデインデクシングするように構成された復号器を更に提供し、復号器は、入力ビットストリームから先行符号を第1の符号語として受信し、入力インデックスを第2の符号語として受信するように構成され、先行符号及び入力インデックスはオーディオ/ビデオ信号サンプルを表し、先行符号は、オーディオ/ビデオ信号サンプルを表す符号であって、作成されるべき整数出力ベクトル中の終端非零係数の符号であり、整数出力ベクトルは複数の整数値係数を有し、終端非零係数は、整数出力ベクトル中の最初の非零係数及び最後の非零係数のうち一方であり、復号器は、入力インデックスをピラミッドベクトル量子化列挙解除方式によって整数出力ベクトルにデインデクシングするように更に構成され、列挙方式により作成される入力インデックスは、終端非零係数の符号を無視するように設計され、復号器は、終端非零係数の符号を受信された先行符号に従って割り当て、ベクトルを出力するように更に構成される。
【0191】
特定の一例において、復号器はプロセッサ及びメモリを備える。メモリは、プロセッサにより実行可能な命令を備え、それにより、復号器/プロセッサは、入力ビットストリームから先行符号を第1の符号語として受信し、入力インデックスを第2の符号語として受信するように動作し、先行符号及び入力インデックスはオーディオ/ビデオ信号サンプルを表し、先行符号は、オーディオ/ビデオ信号サンプルを表す符号であって、作成されるべき整数出力ベクトル中の終端非零係数の符号であり、整数出力ベクトルは複数の整数値係数を有し、終端非零係数は、整数出力ベクトル中の最初の非零係数及び最後の非零係数のうち一方であり、復号器/プロセッサは、入力インデックスをピラミッドベクトル量子化列挙解除方式によって整数出力ベクトルにデインデクシングするように更に動作し、列挙方式により作成される入力インデックスは、終端非零係数の符号を無視するように設計され、復号器/プロセッサは、終端非零係数の符号を受信された先行符号に従って割り当て、ベクトルを出力するように更に動作する。
【0192】
以下に、
図20を参照して、コンピュータ実現形態の一例を説明する。符号化器10は、1つ以上のプロセッサ800などの処理回路網及びメモリ810を備える。この特定の例では、本明細書で説明されるステップ、機能、手順、モジュール及び/又はブロックのうち少なくともいくつかは、処理回路網により実行するためにメモリにロードされるコンピュータプログラム820〜826で実現される。処理回路網及びメモリは、通常のソフトウェア実行を可能にするために互いに接続される。オプションの入力/出力デバイス804〜808も、入力パラメータ及び/又は生成される出力パラメータなどの関連データの入力及び/又は出力を可能にするために処理回路網及び/又はメモリに相互接続されてよい。
【0193】
以下に、
図21を参照して、コンピュータ実現形態の別の例を説明する。復号器60は、1つ以上のプロセッサ850などの処理回路網及びメモリ860を備える。この特定の例では、本明細書で説明されるステップ、機能、手順、モジュール及び/又はブロックのうち少なくともいくつかは、処理回路網により実行するためにメモリにロードされるコンピュータプログラム870〜876で実現される。処理回路網及びメモリは、通常のソフトウェア実行を可能にするために互いに接続される。オプションの入力/出力デバイス854〜858も、入力パラメータ及び/又は生成される出力パラメータなどの関連データの入力及び/又は出力を可能にするために処理回路網及び/又はメモリに相互接続されてよい。
【0194】
用語「コンピュータ」は、一般的な意味で、特定の処理、判定又は計算タスクを実行するためにプログラムコード又はコンピュータプログラム命令を実行することが可能な何らかのシステム又はデバイスとして解釈されるべきである。
【0195】
特定の一実施形態において、コンピュータプログラムは命令を備え、命令は、少なくとも1つのプロセッサにより実行される場合に、プロセッサに、前記オーディオ/ビデオ信号サンプルを表す整数入力ベクトルを取得させ、整数入力ベクトルは複数の整数値係数を有し、命令は、更に、プロセッサに、整数入力ベクトルから先行符号を抽出させ、先行符号は、整数入力ベクトル中の終端非零係数の符号であり、終端非零係数は、整数入力ベクトル中の最初の非零係数及び最後の非零係数のうち一方であり、命令は、更に、プロセッサに、整数入力ベクトルをピラミッドベクトル量子化列挙方式によって出力インデックスにインデクシングさせ、出力インデックスは、先行符号と共にオーディオ/ビデオ信号サンプルを表し、ピラミッドベクトル量子化列挙方式は終端非零係数の符号を無視し、命令は、更に、プロセッサに、第1の符号語としての先行符号及び第2の符号語としての出力インデックスを出力ビットストリームへ出力させる。
【0196】
特定の一実施形態において、コンピュータプログラムは命令を備え、命令は、少なくとも1つのプロセッサにより実行される場合に、プロセッサに、入力ビットストリームから第1の符号語としての先行符号及び第2の符号語としての入力インデックスを受信させ、先行符号及び入力インデックスはオーディオ/ビデオ信号サンプルを表し、先行符号は、オーディオ/ビデオ信号サンプルを表す符号であって、作成されるべき整数出力ベクトル中の終端非零係数の符号であり、整数出力ベクトルは複数の整数値係数を有し、終端非零係数は、整数出力ベクトル中の最初の非零係数及び最後の非零係数のうち一方であり、命令は、更に、プロセッサに、入力インデックスをピラミッドベクトル量子化列挙解除方式によって整数出力ベクトルにデインデクシングさせ、入力インデックスは、前記終端非零係数の符号を無視する列挙方式により作成され、命令は、更に、プロセッサに、終端非零係数の符号を受信された先行符号に従って割り当てさせ、整数出力ベクトルを出力させる。
【0197】
提案される技術は、コンピュータプログラムを備えるキャリアを更に提供し、キャリアは、電子信号、光信号、電磁信号、磁気信号、電気信号、無線信号、マイクロ波信号又はコンピュータ可読記憶媒体のうち1つである。
【0198】
従って、ソフトウェアプログラム又はコンピュータプログラムは、通常はコンピュータ可読媒体で搬送されるか又はコンピュータ可読媒体に記憶されるコンピュータプログラムとして実現されてもよい。コンピュータ可読媒体は、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、コンパクトディスク(CD)、デジタルバーサタイルディスク(DVD)、ブルーレイディスク、ユニバーサルシリアルバス(USB)メモリ、ハードディスクドライブ(HDD)記憶デバイス、フラッシュメモリ、磁気テープ又は他の何らかの従来のメモリデバイスを含む1つ以上の取り外し可能な又は取り外し不可能なメモリデバイスを含んでもよいが、それらに限定されない。従って、コンピュータプログラムは、コンピュータ又はそれと同等の処理デバイスの処理回路網により実行するために、コンピュータ又はそれと同等の処理デバイスのオペレーティングメモリにロードされてもよい。
【0199】
本明細書で指示されるように、符号化器は機能モジュール群として定義されてもよく、それらの機能モジュールは、少なくとも1つのプロセッサで実行されるコンピュータプログラムとして実現される。
【0200】
図22は、機能モジュール群830〜836を備える符号化器10の一例を示す概略ブロック図である。
【0201】
メモリ810に常駐するコンピュータプログラムは、プロセッサ800により実行される場合に、本明細書で説明されるステップ及び/又はタスクの少なくとも一部を実行するように構成された適切な機能モジュール830〜836として編成されてもよい。そのような機能モジュール830〜836の一例が
図22に示される。
【0202】
本明細書で指示されるように、復号器は機能モジュール群として定義されてもよく、それらの機能モジュールは、少なくとも1つのプロセッサで実行されるコンピュータプログラムとして実現される。
【0203】
図23は、機能モジュール群880〜886を備える復号器60の一例を示す概略ブロック図である。
【0204】
メモリ860に常駐するコンピュータプログラムは、プロセッサ850により実行される場合に、本明細書で説明されるステップ及び/又はタスクの少なくとも一部を実行するように構成された適切な機能モジュール880〜886として編成されてもよい。そのような機能モジュール880〜886の一例が
図23に示される。
【0205】
提案される方式は、短符号語に基づくピラミッドベクトル量子化方式の性能を改善する。この方式は、必要とされるインデクシングオフセットのダイナミックレンジを縮小する。ダイナミックレンジの縮小に伴う望ましい副次効果は、所定のHWに対して、重大なペナルティなく1ビット大きい「短」PVQ符号語を使用できることである。
【0206】
これにより、Bビット符号なし演算を支援するDSPハードウェアでB+1ビットPVQ符号語方式を使用することが可能になり、また、符号付きBビット整数演算(B−1ビットの大きさによる)のみを支援するDSPハードウェアでBビットPVQ符号語方式を実現することが可能になる。
【0207】
更に、1ビット大きい符号語を効率よく符号化可能であるため、分割側情報を送信するために必要とされるオーバヘッドが減少される。次元N=128でk個の均等に分散したパルスのPVQ符号化を例にとると、2値次元分割ごとに関係を符号化するために5ビットが使用され、次元N=128にわたり、オーディオコーデックビット割り当てアルゴリズムにより71ビットがPVQに割り当てられた。
【0208】
最適の無制限PVQは次の結果を与える。
log2(N
PVQ(N=128,k=12))=67.2ビット、
log2(N
MPVQ(N=128,k=12+1))=71.5ビット
67.2<71<71.5であり、すなわち、N=128にわたり最適無制限PVQを使用すると、12の単位パルスが可能であり、その結果、パルス密度は12/128となる。
【0209】
レガシーB=32ビット方式は、ほぼ等しい次元[N1=43,N2=43,N3=42]への2回の分割を必要とするので、
2*log2(N
PVQ(43,4))+log2(N
PVQ(42,4))+2*5=63.25+2*5=73.25ビット
となり、73.25はビット予定71を超える。パルスの数を1減少させて11にしようと試みることにより、次の式が取得される。
2*log2(N
PVQ(43,4))+log2(N
PVQ(42,3))+2*5=58.84+2*5=68.84<71
この結果得られるパルス密度は11/128となる。
【0210】
レガシーB=32ビット方式は、不均一分割次元[N1=64,N2=32,N3=32]への2回の分割を必要とするので、
log2(N
PVQ(64,6))+2*log2(N
PVQ(32,3))+2*5=53.34+2*5=73.34ビット
となり、73.25はビット予定71を超える。パルスの数を1減少させて11にしようと試みることにより、次の式が取得される。
2*log2(N
PVQ(32,3))+log2(N
PVQ(64,5))+2*5=58.92+2*5=68.9<71
この結果得られるパルス密度は11/128となる。
【0211】
新規な(B+1)33ビットMPVQ方式は、[N1=64,N2=64]への1回の分割を必要とする。
2*log2(2*N
MPVQ(64,6))+5=2*32.51+5=70.02ビット<71
式中、
2*N
MPVQ(64,6)=N
PVQ(64,6)=32.51>B
この結果得られるパルス密度は12/128となる。言い換えれば、次元N=128のベクトルに割り当てられる71ビットが与えられた場合、以前の32ビット符号語方式は11パルスしか提供できないが、新規な33ビット符号語方式は12個のパルスを提供できる。
【0212】
符号化範囲が1ビット大きくなって33ビットになることによって、追加のベクトル分割のオーバヘッドを(多くの場合に)減少できるので、新規な方式は、オーディオコーデックの当初のビット割り当て命令に従ったビットの割り当てに更に適切に適合される。
【0213】
オーディオコーデックビット割り当て方式の一例は、ITU−TG.719仕様、第7.5.2章又はOPUS RFC716、第4.3.4.1章で確認できる。
【0214】
以上説明した実施形態は単なる例として提示されたにすぎず、提案される技術がそれらに限定されないことを理解すべきである。添付の特許請求の範囲により定義される本発明の範囲から逸脱せずに、種々の変形、組み合わせ及び変更が実施されてもよいことは当業者には理解されるだろう。特に、異なる実施形態における異なる部分の解法は、技術的に可能であれば、他の構成で組み合わせることができる。
【0215】
略語
VQ ベクトル量子化器/量子化
PVQ ピラミッドVQ
PVQ(n,k) 次元n及び単位パルスの数kを有するPVQ構造、PVQ(n,k)はkと等しいL1ノルムを有するピラミッド構造である。
MPVQ 先行符号モジュールPVQ
MPVQ(n,k) 次元n及び単位パルスの数kを有するMPVQ構造、MPVQ(n,k)構造はスライスされたPVQ(n,k)ピラミッド構造であり、MPVQ(n,k)のL1ノルムはkである。
N
PVQ(N,K) PVQ(次元N、単位パルスの数K)のサイズ
N
MPVQ(N,K) MPVQ(次元N,単位パルスの数K)のサイズ
SIMD 単一命令多重データ(DSP命令カテゴリ)
DSP デジタルシグナルプロセッサ
HW ハードウェア
SW ソフトウェア
N、dim 次元
n、l 現在次元
k、K PVQ(n,k)及びMPVQ(n,k)の単位パルスの数
KMAX 最大K値
B 効率のよい動作のための目標ハードウェアシステムにおけるビット限界、今日のプロセッサでは通常(16)、32又は64ビット
R サンプルごとのビット数又は係数ごとのビット数
X 目標ベクトル
r、vec 形状ベクトル(残存ベクトルと呼ばれる場合もある)
G 目標ベクトルをスケーリングするための利得(スカラ又はベクトル)
RAM ランダムアクセスメモリ
OPS 毎秒演算回数
MOPS 100万命令毎秒
P-ROM プログラムROM
ROM 読み取り専用メモリ(通常、事前記憶データ)
LSB 最下位ビット
MSB 最上位ビット
LP 線形予測
【0216】
付録A
本付録には、従来の技術の状態を確認するために、IETF/OPUS audio PVQの章からの関連事項の抜粋が含まれる。改善され、最適化されたOPUS−Audio PVQインデクシング/デインデクシングアルゴリズムは、RFC6716のテキスト説明では説明されないが、付属のIETF/OPUS−Audio RFC6716 PVQ−デインデクシングではc−コードファイル(cwrs.c)として提供されるいくつかの最適化を含む。
「PVQ復号化
PVQベクトルの復号化はdecode_pulses()(cwrs.c)で実現される。固有符号語インデックスは、均一に分散する0とV(N,K)−1との間の整数値として復号化され、V(N,K)は、N個のサンプル中のK個のパルスの可能な組み合わせの数である。次に、インデックスは、[PVQ]で指定されるのと同一の方法でベクトルに変換される。インデクシングはV(N,K)の計算に基づく([PVQ]ではN(L,K)と示される)。
【0217】
組み合わせの数は、V(N,K)=N(N-1,K)+V(N,K-1)+V(N-1,K-1)として再帰的に計算可能であり、V(N,0)=1及びV(0,K)=0、K!=0である。事前計算テーブル及び再帰公式化の直接使用を含めて、V(N,K)を計算する多くの異なる方法が存在する。基準実現形態は、任意の行を初期化するための代替一変量反復及び小さなNに対する直接多項式解法と共に、メモリ使用時にセーブするために、再帰的公式化を一度に1行(又は1列)適用する。これらの方法はすべて同等であり、速度、メモリ利用度及び符号サイズに関して様々に異なるトレードオフを有する。実現形態は、数学的定義と同等であるならば、好適であるどの方法を使用してもよい。
【0218】
復号化ベクトルXは次のように回復される。ft=V(N,K)として、第4.1.5章の手順によって復号化されるインデックスをiとすると、0≦iV(N,K)である。k=Kとする。そこで、jを0以上、(N-1)以下として、次のことを実行する。
1.p=(V(N-j-1,k)+N(N-j,k))/2とする。
2.i<pである場合、sgn=1とし、そうでない場合には、sgn=-1とし且つi=i-pと設定する。
3.k0=k及びp=p-V(N-j-1,k)と設定する。
4.p>iである場合、k=k-1及びp=p-V(N-j-1,k)と設定する。
5.X[j]=sgn
*(k0-k)及びi=i-pと設定する。
【0219】
次に、復号化ベクトルXのL2ノルムが1に等しくなるように、復号化ベクトルXは正規化される。
【0220】
IETF/OPUS−audio PVQ符号語の限界及び分割
「分割復号化
PVQ符号ベクトルを復号化する場合に多精度計算の必要を回避するために、コードブックに許容される最大サイズは32ビットである。これより大型のコードブックが必要とされる場合、ベクトルは、サイズN/2の2つのサブベクトルに分割される。現在の割り当てから導出される精度を有する量子化利得ベクトルは、分割の各側の相対利得を表すためにエントロピー符号化され、復号化処理全体は再帰的に適用される。LM+1回の分割という限界まで、多数の分割レベルが適用されてもよい。ステレオオーディオの合同符号化には同一の再帰メカニズムが適用される。」
【0221】
IETF/OPUS Audio RFC−6716 PVQ探索
「球形ベクトル量子化
CELTは、ピッチ予測器により予測されなかった各帯域のスペクトルの詳細を量子化するためにピラミッドベクトル量子化器(PVQ)[PVQ]を使用する。PVQコードブックは、N個のサンプルから成るベクトル中のK個の符号付きパルスのすべての和から構成され、同一の位置の2つのパルスは同一の符号を有することが要求される。従って、コードブックは、sum(abs(y(j)))=Kを満たすN個の次元のすべての整数符号ベクトルyを含む。
【0222】
割り当てられた十分な数のビットが存在する帯域では、第5.3.2章の正規化の結果得られた単位ベクトルを直接符号化するためにPVQが使用される。PVQ符号ベクトルyが与えられた場合、単位ベクトルXはX=y/||y||として取得され、式中、||.||はL2ノルムを示す。」
【0223】
「PVQ探索
最良の符号ベクトルyの探索は、alg_quant()(vq.c)により実行される。探索のためのいくつかの可能な方式があり、それらの方式では、品質と複雑度とのトレードオフが図られる。基準実現形態で使用される方法は、正規化スペクトルXをK-1個のパルスのコードブックピラミッドに投影することにより初期符号語y1を計算する。
y0=truncate_towards_zero((K-1)*X/sum(abs(X)))
N、K及び入力データに応じて、初期符号語y0は、0〜K-1個の非零値を含んでもよい。最後のパルスを除き、すべての残存パルスは、yとXとの正規化相関を最小限にする貪欲探索によって繰り返し発見される。
T
J=-X*y/||y||
以上説明した探索は、品質と計算コストとの適切なトレードオフであると考えられる。しかし、PVQコードブックを探索する他の方法も可能であり、実現に際しては、他のどのような探索方法を使用してもよい。celt/vq.cのalg_quant()を参照。」
【0224】
IETF/OPUS Audio RFC6716 PVQインデクシング
「PVQインデクシング
符号化すべきベクトルXは、0≦i<V(N,K)となるように次のようにインデックスiに変換される。次に、(N-1)以下、0以上のjに対して、次のことを実行する。
1.k>0である場合、i=i+(V(N-j-1,k-1)+V(N-j,k-1))/2と設定する。
2.k=k+abs(X[j])と設定する。
3.X[j]<0である場合、i=i+(V(N-j-1,k)+V(N-j,k))/2と設定する。
【0225】
次に、ft=V(N,K)として、第5.1.4章の手順を使用してインデックスiは符号化される。
【0226】
付録B
MPVQ関連再帰式の導出
フィシャーの公式を使用するU(n,k)とM(n,k)=N
MPVQ(n,k)とのサイズ関係の導出:
k個の単位パルスを有する次元nのPVQベクトルの数であるN
PVQ(n,k)の短縮表記としてN(n,k)を使用する。
【0227】
フィッシャーの1986年当時の当初のPVQ再帰は、
N(n,k)=N(n-1,k)+N(n-1,k-1)+N(n-1,k) (1)
である。
M(n,k)=N(n,k)/2と定義する。 (2)
M(n,k)は、N
MPVQ(n,k)を表す短縮表記として以下のように使用される。
正の初期符号を有するPVQベクトルの数であるM(n,k)は、完全PVQピラミッドN(n,k)のエントリの数の2分の1である。
【0228】
U(n,k)をsum(j=1,j=k-1,M(n-1,j)と定義する。 (3)
「k」の初期位置値を有するベクトルを除き且つ「0」の初期位置値を有するベクトルを除く残存先行+(正)符号を有するベクトルの数。
M(n,k)=1+2*U(n,k)+M(n-1,k); (4)
k=KMAXの場合に1、新たな/次の先行符号を有するベクトルの数に関して可能なただ1つのそのような先行ベクトル2
*U(n,k)(新たな/次の先行符号が正又は負であるために「2」)(「(U(n,k)」ベクトルは初期正振幅[KMAX-1,KMAX-2...1]を有し、先行0値を有する残存ベクトルに関してM(n-1,k)
(M(n,k)=N
MPVQ(n,k)と同等)
N
MPVQ(n,k)=1+2*U(n,k)+N
MPVQ(n-1,k); (4b)
M(n,k)-M(n-1,k)=1+2*U(n,k)=A(n,k) (5)
(1)、(2)、(5)を組み合わせると、
M(n-1,k)=U(n,k+1)-U(n,k) (6)
(4)、(6)を組み合わせると、
M(n,k)=1+U(n,k)+U(n,k+1) (7)
ここで、U(n,k)及びU(n,k+1)の双方が<M(n,k)(5)であるように、(7)をサイズ計算に使用でき、差(5)(A(n,k))は、振幅オフセット反復に依然として使用でき、A(n,KMAX+1)のようにA(n,KMAX)までのオフセットにのみ使用される場合に、M(n,KMAX)を超えてもよく、従って、精度が限定されたハードウェアで数値の問題を引き起こしうる。
【0229】
U(n,k)に関する直接行計算再帰の導出
U(n,k)=(A(n,k)-1)/2 (式(5)から)
CELT/OPUS−Audioで使用されるPVQ差行A(n,k)に関する一般式
は次の通りである。
A(n,k)=A(n,k-2)+((2*n-1)*A(n,k-1)-A(n,k-2))/(k-1) (8)
(5)、(8)を組み合わせると、
U(n,k)=((2*n-1)*(U(n,k-1)+(k-2)*U(n,k-2)+n-1)/(k-1) (9)
あるいは、混合再帰を可能にすると、
U(n,k)=(A(n,k-2)-1)/2+((2*n-1)*A(n,k-1)-A(n,k-2))/(2*(k-1)) (10)
(8及び9、10)の分子のダイナミックレンジが高いため、特に精度が限定された演算システム(例えば、32ビットシステム)においては、この直接関数を評価する場合に特別な注意を払わなければならない。
【0230】
(8)はIETF/OPUS及び元来のCELTで使用される。
【0231】
先行するすべてのA(n,k<KMAX+1)が十分に低い値を有することは事前にわかっているので、(10)はU(n,KMAX+1)のMPVQシステム計算で使用できる。
【0232】
(10)を更に簡略化できる(k>1の場合、A(n,k)は常に奇数であるため)。
U(n,k)=floor(A(n,k-2)/2)+(n*A(n,k-1)-(floor(A(n,k-1)/2)+floor(A(n,k-2)/2+1)))/(k-1) (11)
又はU(n,k)=U(n,k-2)+(n*A(n,k-1)-N
MPVQ(n,k-2))/(k-1) (11b)
【0233】
MPVQ n,k-マトリクス再帰関係
フィッシャーの関係(1)から、N(n,k)=N(n-1,k)+N(n-1,k-1)+N(n-1,k)。
【0234】
(7)と(5)を組み合わせると、次のような再帰関係を発見できる。
初期条件
U(0,*)=0、U(1,*)=0、及びU(a,b)=U(b,a)
の場合、
U(n,k+1)=1+U(n-1,k)+U(n-1,k+1)+U(n,k) (12)
初期条件
A(0,0)=1、A(0,1+)=0、A(1,*)=1、及びA(a,b)=A(b,a)
の場合、
A(n,k+1)=A(n-1,k)+A(n-1,k+1)+A(n,k) (13)
A(n,k)に関して先行ベクトル行n-1,k=0:KMAXから行n,k=0:KMAXを反復計算するために(13)を使用でき、また、U(n,k)に関して先行ベクトル行n-1,k=0:KMAX+1から行n,k=0:KMAX+1を反復計算するために(12)を使用できる。
【0235】
(13)はIETF−OPUS−Audioで使用される。
【0236】
(12)及びA(n,k)が奇数であるという事実を使用して、新たな効率のよい混合再帰公式
U(n,k+1)=1+A(n-1,k)>>1+U(n-1,k+1)+A(n,k)>>1 (14)
を取得し、式中、「>>」は2による整数除算(右シフト)であり、A(大きなn,k+1)は飽和してもよいので、所定のダイナミックレンジ、例えば(最後の(k+1)オフセット列に関して32ビット)の中にとどまるために式14が使用される。
ベクトル半径関係、列挙の副次的結果及びベクトル長再帰関係
1998年に、Hung、Tsern、Mengは、サイズがN(l,k)=N
PVQ(l,k)であるPVQ(1==n,k)ピラミッドに関していくつかの関連する追加の関係を更に要約している。以下に示すベクトル半径再帰関係「(43)」は、行l=nに関する基本行専用サイズ関係である。
【0237】
以下の列挙公式の副次的結果「(44)」は、PVQサイズに関するいくつかの非零要素ベース積関係である。
【0238】
ベクトル長再帰(42)
ベクトル半径再帰(43)
列挙公式の副次的結果(44)