(57)【要約】      （修正有）【課題】リーズナブルな複雑さを使用して最良の可能な量子化ベクトルを見つけることができる、ピラミッドベクトル量子化器（ＰＶＱ）形状サーチのための符号器及びその符号器における方法を提供する。【解決手段】ＰＶＱは、ターゲットベクトルｘを入力として取得し、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導く。方法は、単位パルス追加のための次のインナ次元サーチループに入る前に、今度のインナ次元ループにおけるｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定することを含む。変数ｅｎｌｏｏｐｙはベクトルｙの累積エネルギに関する。【効果】本方法を行うことにより、符号器は、サーチの複雑さをリーズナブルなレベルに維持することができる。【選択図】図１
2020010353.tif 000002
【特許請求の範囲】
【請求項１】
符号器により行われるピラミッドベクトル量子化器（ＰＶＱ）形状サーチ方法であって、前記ＰＶＱはターゲットベクトルｘを入力として取得し、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導き、前記方法は、
単位パルス追加のための次のインナ次元サーチループに入る前に、前記今度のインナ次元ループ（１０３）におけるｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定すること（１０２、２０４）を含む方法。
【請求項２】
単位パルス追加のための次のインナ次元ループに入る前に、ｘと前記ベクトルｙとの間の前記次のループの累積インループ相関値、ｃｏｒｒｘｙのビットワードでの可能なアップシフトを、前記入力ベクトルｘの最大絶対値、ｘａｂｓｍａｘに基づいて、決定すること（２０３）をさらに含む請求項１に記載の方法。
【請求項３】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要（１０２、２０４、３０４、４０３）な場合、ｅｎｌｏｏｐｙを表すためにより長いビットワード長を使用して前記インナループ計算を行う（１０３、２０５、３０５、４０４）ことをさらに含む請求項１または２に記載の方法。
【請求項４】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、前記インナループにおけるｘと前記ベクトルｙとの間の二乗累積インループ相関値、ｃｏｒｒｘｙ２を表すためにより長いビットワード長を使用して前記インナループ計算を行う（３０５）ことをさらに含む請求項１から３のいずれか１項に記載の方法。
【請求項５】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、ｅｎｌｏｏｐｙを表すために第１ビットワード長を使用した第１単位パルス追加ループを用いることにより前記インナループ計算を行うこと（４０５）と、
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、ｅｎｌｏｏｐｙを表すために、前記第１単位パルス追加ループよりも長いビットワード長を使用した第２単位パルス追加ループを用いることにより前記インナループ計算を行うこと（４０４）と、をさらに含む請求項１から４のいずれか１項に記載の方法。
【請求項６】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、所定の精度を有する第１単位パルス追加ループを用いることにより前記インナループ計算を行うこと（４０５）と、
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、前記第１単位パルス追加ループよりも高い精度を有する第２単位パルス追加ループを用いることにより前記インナループ計算を行うこと（４０４）と、をさらに含む請求項１から５のいずれか１項に記載の方法。
【請求項７】
前記ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要か否かをｍａｘａｍｐｙに基づいて決定することは、前記今度のインナサーチループにおいて前記単位パルスがｍａｘａｍｐｙに関連付けられたｙにおける前記位置に加えられる場合の特性を決定することを含む請求項１から６のいずれか１項に記載の方法。
【請求項８】
単位パルス追加のための前記インナ次元サーチループにおいて、ｙにおける各位置ｎについて、前記現在のｎの相関およびエネルギ値と、以前のｎの値から保存された二乗相関、ＢｅｓｔＣｏｒｒＳｑおよびエネルギ値ｂｅｓｔＥｎと、のたすき掛けを評価することで単位パルス追加のためのｙにおける位置ｎｂｅｓｔを
【数１】
2020010353.tif 000040
のように決定することをさらに含む請求項１から７のいずれか１項に記載の方法。
【請求項９】
前記ターゲットベクトルｘに関連するＫの最終値がしきい値を超える場合、ｍａｘａｍｐｙを追跡することをさらに含む請求項１から８のいずれか１項に記載の方法。
【請求項１０】
ピラミッドベクトル量子化（ＰＶＱ）形状サーチのために構成された符号器であって、前記ＰＶＱはターゲットベクトルｘを入力として取得し、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導き、前記符号器は、
単位パルス追加のための次のインナ次元サーチループに入る前に、前記今度のインナ次元ループにおけるｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定するよう構成される符号器。
【請求項１１】
さらに、単位パルス追加のための次のインナ次元ループに入る前に、ｘと前記ベクトルｙとの間の前記次のループの累積インループ相関値、ｃｏｒｒｘｙのビットワードでの可能なアップシフトを、前記入力ベクトルｘの最大絶対値、ｘａｂｓｍａｘに基づいて、決定するよう構成される請求項１０に記載の符号器。
【請求項１２】
さらに、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、ｅｎｌｏｏｐｙを表すためにより長いビットワード長を使用して前記インナループ計算を行うよう構成される請求項１０または１１に記載の符号器。
【請求項１３】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、第１ビットワード長を使用した第１単位パルス追加ループを用いることにより前記インナループ計算を行い、
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、前記第１単位パルス追加ループよりも長いビットワード長を使用した第２単位パルス追加ループを用いることにより前記インナループ計算を行うよう構成される請求項９から１２のいずれか１項に記載の符号器。
【請求項１４】
さらに、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、所定の精度を有する第１単位パルス追加ループを用いることにより前記インナループ計算を行い、
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、前記第１単位パルス追加ループよりも高い精度を有する第２単位パルス追加ループを用いることにより前記インナループ計算を行うよう構成される請求項９から１３のいずれか１項に記載の符号器。
【請求項１５】
前記ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要か否かをｍａｘａｍｐｙに基づいて決定することは、前記今度のインナサーチループにおいて前記単位パルスがｍａｘａｍｐｙに関連付けられたｙにおける前記位置に加えられる場合の特性を決定することを含むよう構成される請求項９から１４のいずれか１項に記載の符号器。
【請求項１６】
さらに、単位パルス追加のための前記インナ次元サーチループにおいて、ｙにおける各位置ｎについて、前記現在のｎの相関およびエネルギ値と、以前のｎの値から保存された相関、ＢｅｓｔＣｏｒｒＳｑおよびエネルギ値ｂｅｓｔＥｎと、のたすき掛けを評価することで単位パルス追加のためのｙにおける位置ｎｂｅｓｔを
【数２】
2020010353.tif 000041
のように決定するよう構成される請求項９から１５のいずれか１項に記載の符号器。
【請求項１７】
さらに、前記ターゲットベクトルｘに関連する最終単位パルスの数、Ｋがしきい値を超える場合、ｍａｘａｍｐｙを追跡するよう構成される請求項９から１６のいずれか１項に記載の符号器。
【請求項１８】
請求項９から１７のいずれか１項に記載の前記符号器を備える通信デバイス。
【請求項１９】
少なくともひとつのプロセッサにより実行された場合、請求項１から８のいずれか１項に記載の前記方法を前記少なくともひとつのプロセッサに実行させるインストラクションを備えるコンピュータプログラム。
【請求項２０】
前記少なくともひとつのプロセッサのうちの少なくともひとつは固定精度ＤＳＰなどのデジタルシグナルプロセッサ、ＤＳＰである請求項１９に記載のコンピュータプログラム。
【請求項２１】
請求項１９または２０に記載の前記コンピュータプログラムを含むキャリアであって、前記キャリアは、電気信号、光信号、無線信号、またはコンピュータ可読保持媒体のうちのひとつであるキャリア。
【請求項２２】
ピラミッドベクトル量子化（ＰＶＱ）形状サーチのために構成された符号器（１１００、２）であって、前記ＰＶＱはターゲットベクトルｘを入力として取得し、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導き、前記符号器は第１決定部（１１０６、Ｕ４）を備え、前記第１決定部は、
単位パルス追加のための次のインナ次元サーチループに入る前に、前記今度のインナ次元ループにおけるｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定するためのものである符号器。
【請求項２３】
単位パルス追加のための次のインナ次元ループに入る前に、ｘと前記ベクトルｙとの間の前記次のループの累積インループ相関値、ｃｏｒｒｘｙのビットワードでの可能なアップシフトを、前記入力ベクトルｘの最大絶対値、ｘａｂｓｍａｘに基づいて、決定するための第２決定部（Ｕ２）をさらに備える請求項２２に記載の符号器。
【請求項２４】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、ｅｎｌｏｏｐｙを表すためにより長いビットワード長を使用して前記インナループ計算を行うためのファインサーチ部（１１０７、Ｕ６）をさらに備える請求項２２または２３に記載の符号器。
【請求項２５】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、第１ビットワード長を使用した第１単位パルス追加ループを用いることにより前記インナループ計算を行い、
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、前記第１単位パルス追加ループよりも長いビットワード長を使用した第２単位パルス追加ループを用いることにより前記インナループ計算を行うためのファインサーチ部（１１０７、Ｕ６）を備える請求項２２から２４のいずれか１項に記載の符号器。
【請求項２６】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、所定の精度を有する第１単位パルス追加ループを用いることにより前記インナループ計算を行い、
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、前記第１単位パルス追加ループよりも高い精度を有する第２単位パルス追加ループを用いることにより前記インナループ計算を行うためのファインサーチ部（１１０７、Ｕ６）を備える請求項２２から２５のいずれか１項に記載の符号器。
【請求項２７】
前記今度のインナサーチループにおいて前記単位パルスがｍａｘａｍｐｙに関連付けられたｙにおける前記位置に加えられる場合の特性を決定することにより、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要か否かをｍａｘａｍｐｙに基づいて決定することを実行するよう構成される請求項２２から２６のいずれか１項に記載の符号器。
【請求項２８】
単位パルス追加のための前記インナ次元サーチループにおいて、ｙにおける各位置ｎについて、前記現在のｎの相関およびエネルギ値と、以前のｎの値から保存された相関、ＢｅｓｔＣｏｒｒＳｑおよびエネルギ値ｂｅｓｔＥｎと、のたすき掛けを評価することで単位パルス追加のためのｙにおける位置ｎｂｅｓｔを
【数３】
2020010353.tif 000042
のように決定するためのファインサーチ部（１１０７、Ｕ６）を備える請求項２２から２７のいずれか１項に記載の符号器。
【請求項２９】
前記ターゲットベクトルｘに関連する最終単位パルスの数、Ｋがしきい値を超える場合、ｍａｘａｍｐｙを追跡するための格納部（Ｕ３）をさらに備える請求項２２から２８のいずれか１項に記載の符号器。
【請求項３０】
請求項２２から２９のいずれか１項に記載の前記符号器を備える通信デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は主に符号器により行われるベクトル量子化（ＶＱ）に関する。
【背景技術】
【０００２】
非拘束ベクトル量子化は所定長のグループ化されたサンプル、すなわちベクトルについての最適な量子化方法であることが知られている。しかしながら、非拘束ベクトル量子化の実装は、複雑さとメモリ容量に関する高い要求を暗示する。メモリ拘束およびサーチ複雑さの拘束を伴う状況においてもベクトル量子化を実装可能とするという願いにより、いわゆるストラクチャードベクトル量子化器の開発が導かれた。異なる構造は、サーチ複雑さおよびメモリ要求に関する異なるトレードオフを与える。そのような方法のひとつはいわゆる利得−形状ベクトル量子化であり、ターゲットベクトルｔは形状ベクトルｘおよび利得値Ｇを使用して表される。
【数１】
2020010353.tif 000003
（式０）
利得−形状ベクトル量子化のコンセプトは、ターゲットベクトルｔを直接量子化する代わりに{ｘ、Ｇ}のペアを量子化することである。正規化された形状入力に対して調整された形状量子化器および信号のダイナミクスを取り扱う利得量子化器を使用して、利得（Ｇ）成分および形状（ｘ）成分が符号化される。ダイナミクスと形状とへの分割は、ファインストラクチャとも呼ばれ、知覚的聴覚モデルによく合うので、この利得−形状構造は音声符号化においてよく使用される。利得−形状コンセプトは、離散コサイン変換係数やビデオ符号化で使用される他の係数に適用可能である。
【０００３】
ＩＴＵ−Ｔ  Ｇ．７１８やＩＥＴＦ  Ｏｐｕｓ（ＲＦＣ６７１６）などの多くのスピーチおよびオーディオコーデックは、ターゲットスピーチ／オーディオ信号のスペクトル係数を符号化するためにストラクチャードＰＶＱに基づく利得−形状ＶＱを使用する。
【０００４】
ＰＶＱコーディングコンセプトはＲ．Ｆｉｓｃｈｅｒにより１９８３年〜１９８６年頃に紹介され、それ以来、より効率的なデジタルシグナルプロセッサ、ＤＳＰｓの登場により実用化に至るまで発展してきた。ＰＶＱ符号化コンセプトは、Ｋ単位パルスの整数Ｌ１ノルムを伴うＮ次元ハイパーピラミッド上の点をサーチして見つけ、符号化することを含む。いわゆるＬ１ノルムは、ベクトルの絶対値の和である。すなわち、符号付き整数のＰＶＱベクトルの絶対値和は正確にＫになるよう拘束されている。ここで、単位パルスは整数値「１」により表される。非負の整数のみを表すことができる符号なしの場合との関係で、符号付き整数は負の整数を表すことができる。
【０００５】
他の多くのストラクチャードＶＱｓと比べた場合のストラクチャードＰＶＱコーディングアプローチの興味深い利点のひとつは、次元Ｎに関して生来的な制限はなく、したがってＰＶＱコーディングのために開発されたサーチ方法は任意の次元Ｎおよび任意のＫ値に対して適用可能であることである。
【０００６】
ストラクチャードＰＶＱ−形状量子化に伴うひとつの課題は、リーズナブルな複雑さを使用して最良の可能な量子化ベクトルを見つけることである。スピーチおよびオーディオコーディングのレートがより高い場合には許される単位パルスの数Ｋが非常に大きくなりかつ次元Ｎも大きくなりうるが、そのような場合には、効率的なＰＶＱ−サーチを得つつも再構成されたスピーチ／オーディオの例えば信号対雑音比、ＳＮＲの観点での質を維持するというより強い要請が存在する。
【０００７】
さらに、ＰＶＱコンセプトの使用はスピーチおよびオーディオコーディング分野に限られるものではない。現在、いわゆるインターネットエンジニアリングタスクフォース、ＩＥＴＦはビデオコーデック開発を進めており、そこではＰＶＱベースのアルゴリズムを使用して離散コサイン変換、ＤＣＴ係数が符号化される。ビデオコーディングでは、ディスプレイが大きくなると係数の数も非常に大きくなりうるので、効率的なサーチ手順を有することがオーディオコーディングの場合よりも重要である。
【発明の概要】
【０００８】
ストラクチャードＰＶＱについて、高い信号対雑音比を提供しつつも計算効率のよい形状サーチを可能とすることが望まれている。特に、固定精度ＤＳＰを含む実装について。本明細書で提供される解決法は、改良されたＰＶＱファインサーチを提供することで、計算効率のよいＰＶＱ形状サーチを可能とする。
【０００９】
第１の態様によると、符号器により行われるＰＶＱ形状サーチ方法が提供される。ＰＶＱは、前提として、ターゲットベクトルｘを入力として取得することと、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導くことと、を含む。提供される方法は、単位パルス追加のための次のインナ次元サーチループに入る前に、変数、ｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定することを含む。変数ｅｎｌｏｏｐｙは今度のインナ次元ループにおけるｙの累積エネルギに係る。
【００１０】
第２の態様によると、ＰＶＱ形状サーチのための符号器が提供される。ＰＶＱは、前提として、ターゲットベクトルｘを入力として取得することと、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導くことと、を含む。提供される符号器は、単位パルス追加のための次のインナ次元サーチループに入る前に、変数、ｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定するよう構成される。変数ｅｎｌｏｏｐｙは今度のインナ次元ループにおけるｙの累積エネルギに係る。
【００１１】
単位パルス追加のための次のインナ次元ループに入る前に、ｘとベクトルｙとの間の次のループの累積インループ相関値、ｃｏｒｒｘｙのビットワードでの可能なアップシフトを、入力ベクトルｘの最大絶対値、ｘａｂｓｍａｘに基づいて、決定することを方法が含んでもよいし、符号器がそのように決定するよう構成されてもよい。
【００１２】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、ｅｎｌｏｏｐｙを表すためにより長いビットワード長を使用してインナループ計算を行うことを方法が含んでもよいし、符号器がそれを行うよう構成されてもよい。
【００１３】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、インナループにおけるｘとベクトルｙとの間の二乗累積インループ相関値、ｃｏｒｒｘｙ２を表すためにより長いビットワード長を使用してインナループ計算を行うことを方法が含んでもよいし、符号器がそれを行うよう構成されてもよい。
【００１４】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、ｅｎｌｏｏｐｙを表すために第１ビットワード長を使用した第１単位パルス追加ループを用いることによりインナループ計算を行うことと、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、ｅｎｌｏｏｐｙを表すために、第１単位パルス追加ループよりも長いビットワード長を使用した第２単位パルス追加ループを用いることによりインナループ計算を行うことと、を方法が含んでもよいし、符号器がそれを行うよう構成されてもよい。
【００１５】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要か否かをｍａｘａｍｐｙに基づいて決定することは、今度のインナサーチループにおいて単位パルスがｍａｘａｍｐｙに関連付けられたｙにおける位置に加えられる場合の特性を決定することを含んでもよい。
【００１６】
単位パルス追加のためのインナ次元サーチループにおいて、ｙにおける各位置ｎについて、現在のｎの相関およびエネルギ値と、以前のｎの値から保存された二乗相関、ＢｅｓｔＣｏｒｒＳｑおよびエネルギ値ｂｅｓｔＥｎと、のたすき掛けを評価することで単位パルス追加のためのｙにおける位置ｎｂｅｓｔを
【数２】
2020010353.tif 000004
のように決定することをさらに方法が含んでもよいし、符号器がそれを行うよう構成されてもよい。
【００１７】
ターゲットベクトルｘに関連するＫの最終値がしきい値を超える場合、ｍａｘａｍｐｙを追跡することを方法が含んでもよいし、符号器がそれを行うよう構成されてもよい。ここで、Ｋの現在の値が上の文で言及されたしきい値であってもよいしきい値を超える場合にのみ、エネルギマージンｅｎ＿ｍａｒｇｉｎを計算することを方法が含んでもよいし、符号器がそれを行うよう構成されてもよい。
【００１８】
第３の態様によると、第２の態様に係る符号器を備える通信デバイスが提供される。
【００１９】
第４の態様によると、ＤＳＰなどの少なくともひとつのプロセッサ上で実行された場合、第１の態様に係る方法を少なくともひとつのプロセッサに実行させるインストラクションを備えるコンピュータプログラムが提供される。
【００２０】
第５の態様によると、第４の態様に係るコンピュータプログラムを含むキャリアが提供される。このキャリアは、電気信号、光信号、無線信号、またはコンピュータ可読保持媒体のうちのひとつである。
【００２１】
第６の態様によると、ＰＶＱ形状サーチのために構成された符号器が提供される。ＰＶＱはターゲットベクトルｘを入力として取得し、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導く。提供される符号器は第１決定部を備える。第１決定部は、単位パルス追加のための次のインナ次元サーチループに入る前に、今度のインナ次元ループにおけるｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定するためのものである。
【００２２】
第６の態様に係る符号器は、単位パルス追加のための次のインナ次元ループに入る前に、ｘとベクトルｙとの間の次のループの累積インループ相関値、ｃｏｒｒｘｙのビットワードでの可能なアップシフトを、入力ベクトルｘの最大絶対値、ｘａｂｓｍａｘに基づいて、決定するための第２決定部を備えてもよい。
【００２３】
第６の態様に係る符号器は、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、ｅｎｌｏｏｐｙを表すためにより長いビットワード長を使用してインナループ計算を行うためのファインサーチ部を備えてもよい。
【００２４】
第６の態様に係る符号器は、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、第１ビットワード長を使用した第１単位パルス追加ループを用いることによりインナループ計算を行い、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、第１単位パルス追加ループよりも長いビットワード長を使用した第２単位パルス追加ループを用いることによりインナループ計算を行うためのファインサーチ部を備えてもよい。
【００２５】
第６の態様に係る符号器は、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、所定の精度を有する第１単位パルス追加ループを用いることによりインナループ計算を行い、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、第１単位パルス追加ループよりも高い精度を有する第２単位パルス追加ループを用いることによりインナループ計算を行うためのファインサーチ部を備えてもよい。
【００２６】
第６の態様に係る符号器は、今度のインナサーチループにおいて単位パルスがｍａｘａｍｐｙに関連付けられたｙにおける位置に加えられる場合の特性を決定することにより、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要か否かをｍａｘａｍｐｙに基づいて決定することを実行するよう構成されてもよい。
【００２７】
第６の態様に係る符号器は、単位パルス追加のためのインナ次元サーチループにおいて、ｙにおける各位置ｎについて、現在のｎの相関およびエネルギ値と、以前のｎの値から保存された相関、ＢｅｓｔＣｏｒｒＳｑおよびエネルギ値ｂｅｓｔＥｎと、のたすき掛けを評価することで単位パルス追加のためのｙにおける位置ｎｂｅｓｔを
【数３】
2020010353.tif 000005
のように決定するためのファインサーチ部を備えてもよい。第６の態様に係る符号器は、ターゲットベクトルｘに関連する最終単位パルスの数、Ｋがしきい値を超える場合、ｍａｘａｍｐｙを追跡するための格納ユニットを備えてもよい。
【００２８】
第７の態様によると、第６の態様に係る符号器を備える通信デバイスが提供される。
【図面の簡単な説明】
【００２９】
本明細書で開示される技術の前述のおよび他の目的、特徴および利点は、添付の図面で説明されるように、以下の実施の形態のより具体的な説明から明らかとなるであろう。図面は必ずしも実寸通りではなく、むしろ本明細書で開示される技術の原理の説明に重きが置かれている。
【００３０】
【図１】図１−４は、異なる例示的実施の形態に係る、ＰＶＱ形状サーチ（ファインサーチ）の方法を説明する。
【図２】図１−４は、異なる例示的実施の形態に係る、ＰＶＱ形状サーチ（ファインサーチ）の方法を説明する。
【図３】図１−４は、異なる例示的実施の形態に係る、ＰＶＱ形状サーチ（ファインサーチ）の方法を説明する。
【図４】図１−４は、異なる例示的実施の形態に係る、ＰＶＱ形状サーチ（ファインサーチ）の方法を説明する。
【図５】例示的な実施の形態に係る、ＰＶＱ形状サーチ（ファインサーチ）の実施の形態のステップを示す。
【図６】例示的な実施の形態に係る、図５のＰＶＱ形状サーチ（ファインサーチ）のステップをより詳細に示す。
【図７】ＰＶＱ形状サーチの実施の形態を示す。
【図８】ＥＶＳ符号器を装備する通信デバイスの実施の形態を示す。
【図９】通信デバイスの実施の形態を示す。
【図１０】通信デバイスの実施の形態を示す。
【図１１ａ】図１１ａ−ｃは、例示的な実施の形態に係る符号器を示す。
【図１１ｂ】図１１ａ−ｃは、例示的な実施の形態に係る符号器を示す。
【図１１ｃ】図１１ａ−ｃは、例示的な実施の形態に係る符号器を示す。
【図１２】ＰＶＱオーディオコーディングシステムの一例を示す。ここで、システムの少なくとも一部は符号器および／またはコーデックに含まれ、その符号器および／またはコーデックは携帯電話などの通信デバイスに含まれる。
【発明を実施するための形態】
【００３１】
浮動小数点演算においては、インナループＰＶＱ形状サーチ繰り返しパラメータのダイナミクスを確立することに関する大きな課題はない。しかしながら、例えば１６／３２ビット限定アキュムレータ（中間演算および／または論理結果が保持されるレジスタ）および変数を伴う固定精度ＤＳＰｓにおいては、ＤＳＰ変数の制限されたダイナミックレンジが最大化され、かつ精度が最大化されつつも利用可能な高速制限ダイナミックレンジＤＳＰ動作をできるだけ多く使用できる、効率的なサーチ方法を用いることが非常に重要である。
【００３２】
上記の「精度」という言葉は、できる限り小さな数を表すことができることを指す。すなわち、あるワード長についての小数点以下のビットの数である。他の言い方としては、精度は表現の分解能に対応する。これは、再び、十進数または二進数の桁数により定義される。以下に説明される実施の形態における精度が小数点以下のビット数と相関し必ずしもワード長そのものとは相関しないと言えることの理由は、固定小数点演算では、同じワード長に対して異なる精度が存在しうることである。例えば、１Ｑ１５というデータフォーマットおよび２Ｑ１４というデータフォーマットの両方はワード長として１６を有するが、最初のものは小数点以下１５ビットを有し、他のものは１４ビットを有する。表現可能な最小数はそれぞれ２＾−１５と２＾−１４であろう。
【００３３】
形状のピラミッドベクトル量子化を行う方法は、Valin et.al, "A full-bandwidth audio codec with low complexity and very low delay", EUSIPCO, 2009のセクション３．２に開示される。この書類では、各バンドにおける詳細すなわち形状が球状コードブックを使用して代数的に量子化され、かつ、符号器と復号器との間で共有される情報からビット割り当てが推測されるようなＭＤＣＴコーデックが提案されている。本願の開示の態様および実施の形態は、Valin et. alにあるようなフロート値の代わりに例えば１６／３２ビット演算に制限された固定小数点において効率的な方法でValin et. alの式４−７に係るサーチをどのように行うかに関する。
【００３４】
以下に開示されるある態様および実施の形態では、所定の次元Ｎのターゲットベクトルｘ（ｎ）（式０のｔ）が与えられ、かつ、単位パルスの所定数Ｋが与えられた場合に、形状が解析され、適した再構成ベクトルｘｑ（ｎ）＝ｆｕｎｃ（ｙ（ｎ））が決定される。この再構成ベクトルは、形状量子化誤差を最小化し、したがって例えばオーディオコーディングの場合に知覚品質を最大化する。態様および実施の形態の少なくともいくつかは、複雑さを制御下におきつつ、すなわちそれを実際上可能な限り低くしつつ、Ｌ１ノルムを固守する必要があるベクトルｙ（ｎ）においてＫ単位パルスの最適なコンステレーションを見つけることを目的として実装される。
【００３５】
インナループダイナミックレンジおよびアキュムレータ精度の近似値を決めるために従来の開ループ手法を使用する代わりに、態様および実施の形態のいくつかは、必要なＤＳＰサイクルの点でおよび必要な追加的プログラムリードオンリーメモリ（ＲＯＭ）の点で低コストな「準最適（near optimal）な」プレ解析を使用するよう設計される。このプレ解析は、最も内側のサーチループにおけるＰＶＱ−形状歪み指数の高コストな評価を始める前の、最悪の場合の分子および／または最悪の場合の分母のプレ解析である。「準最適な」プレ解析は値を正確な最適最大ダイナミックレンジにスケールすることを狙っているものではなく、プレ解析は準最適な２の累乗のスケールファクタを決定する。２の累乗のスケーリングは、二進数のシフトとして実装可能であり、そのようなシフトはＤＳＰサイクルおよびＤＳＰのＲＯＭにおいて低コストを有する。
【００３６】
スペクトルにおいてピーク的な領域にはより平らな領域よりも高い精度が割り当てられるであろうから、分母精度選択は知覚的に動機付けられる。
【００３７】
本開示で説明される主たるコンセプトのいくつかは種々の変形例および代替的構成をカバーするが、態様の実施の形態は図面および例示的コードに示され、以下に詳細に説明される。
【００３８】
ＰＶＱ−サーチの一般的な最適化のイントロダクション
Ｌ１ノルムストラクチャードＰＶＱ−量子化器はいくつかのサーチ最適化を可能とする。主な最適化は、Ｎ次元空間においてターゲットを全て正の「象限（quadrant）」（象限（orthant）やオクタント（octant）とも称されうる）に動かすことであり、２番目の最適化はＬ１ノルム射影をｙ（ｎ）の開始時の近似として使用することである。ＰＶＱ（Ｎ、Ｋ）のＫのＬ１ノルムは、ターゲット形状ベクトルｘ（ｎ）の全ての要素の絶対値和のように、ＰＶＱ−ベクトルｙ（ｎ）の全ての要素の絶対値和がＫでなくてはならないことを意味する。
【００３９】
３番目の最適化は、引き続くインデクシングステップについて要求されることであるＬ１ノルムＫに到達することを求めて、ベクトルｙ（ｎ）に対する変更候補ごとに、全ベクトル空間Ｎに亘って式４（後述）を再計算する代わりにＱＰＶＱ指数項ｃｏｒｒｘｙ２とｅｎｅｒｇｙｙとを繰り返し更新することである。
【００４０】
上記の３つの主な最適化ステップは、ＣＥＬＴやＩＥＴＦ−ＯｐｕｓやＧ．７１８の一部などの過去のＰＶＱ−実装において一般に存在しうる最適化である。しかしながら、態様および実施の形態の説明を完全なものとするために、これらのステップは以下に短く概説される。
【００４１】
効率的なＰＶＱベクトル形状サーチ
本明細書で提案されるＰＶＱ形状サーチの実施の形態を適用したオーディオ符号化および復号システムの概要は図１２に示される。ピラミッド射影を使用し、その次にファイン（形状）サーチフローを行う一般的な形状サーチは例えば図５に示される。形状サーチのファインサーチ部分の他の実施の形態は図６に示される。ＰＶＱ形状サーチは、ピラミッド射影と、ファインサーチと、を備えてもよい。ピラミッド射影が適用されない場合、形状サーチはファインサーチのみを備える。したがって、本明細書では、「ファインサーチ」と「形状サーチ」とは可換なものとして使用される場合がある。ファインサーチは形状サーチの一部であり、ピラミッド射影による最初の粗いサーチがない場合には形状サーチを行うことはファインサーチを行うことと同じであるからである。言い換えると、ファインサーチは形状サーチである場合もあれば、形状サーチを構成する場合もあり、ピラミッド射影が適用される場合はファインサーチは形状サーチの一部である。
【００４２】
ＰＶＱ−サーチイントロダクション
ＰＶＱ（Ｎ、Ｋ）サーチ手順の目標は、最良にスケールされかつ正規化された出力ベクトルｘｑ（ｎ）を見つけることである。ｘｑ（ｎ）は以下のように定義される。
【数４】
2020010353.tif 000006
（式１）
ここで、ｙ＝ｙＮ、ＫはＮ次元ハイパーピラミッドの表面上の点であり、ｙＮ、ＫのＬ１ノルムはＫである。言い換えると、ｙＮ、Ｋは、以下の式にしたがうような、次元Ｎとも称されるサイズＮの選択された整数形状コードベクトルである。
【数５】
2020010353.tif 000007
（式２）
すなわち、ベクトルｘｑは単位エネルギ正規化された整数サブベクトルy_(N,K)ｙＮ、Ｋである。最良のｙベクトルは、ターゲットベクトルｘ（ｎ）とスケールされ正規化され量子化された出力ベクトルｘｑとの間の平均二乗形状誤差を最小化するものである。これは、以下のサーチ歪みを最小化することにより得られる。
【数６】
2020010353.tif 000008
（式３）
または、同じことであるが、分子および分母を二乗することにより、指標ＱＰＶＱを最大化する。
【数７】
2020010353.tif 000009
（式４）
ここで、ｃｏｒｒｘｙはｘとｙとの相関である。Ｌ１ノルムＫを伴う最適なＰＶＱベクトル形状ｙ（ｎ）のサーチにおいて、以下にしたがい、Ｎ次元空間の全て正の「象限」のなかでＱＰＶＱ変数の繰り返し更新が行われる。
【数８】
2020010353.tif 000010
ここで、ｃｏｒｒｘｙ（ｋ−１）は前のｋ−１単位パルスを置くことによりこれまで得られた相関を表し、ｅｎｅｒｇｙｙ（ｋ−１）は前のｋ−１単位パルスを置くことによりこれまで得られた累積エネルギを表し、ｙ（ｋ−１、ｎ）はｋ−１単位パルスの前の配置からの位置ｎにおけるｙの振幅を表す。インループ繰り返し処理をさらにスピードアップするために、エネルギ項ｅｎｅｒｇｙｙ（ｋ）は２だけスケールダウンされ、したがってインナループにおいてひとつの掛け算が除かれる。
【数９】
2020010353.tif 000011
（式７）
ここで、ｅｎｌｏｏｐｙ（ｋ、ｎ）は最も内側の単位パルスサーチループの内部で使用され累積される好適なエネルギ変数である。その繰り返し更新はｅｎｅｒｇｙｙ（ｋ、ｎ）よりも１回少ない掛け算を必要とするからである。
【数１０】
2020010353.tif 000012
（式８）
ｋ番目の単位パルスについての最良の位置ｎｂｅｓｔは、ｎを０からＮ−１まで増やすことにより繰り返し更新される。
【数１１】
2020010353.tif 000013
（式９）
【００４３】
高コストな割り算を避けるために、これは特に固定小数点演算において重要であるが、ＱＰＶＱ最大化更新決定は、保存されたこれまでで最良の二乗相関分子ｂｅｓｔＣｏｒｒＳｑと保存されたこれまでで最良のエネルギ分母ｂｅｓｔＥｎとのたすき掛けを使用して行われる。これは以下のように表現されうる。
【数１２】
2020010353.tif 000014
（式１０）
ＱＰＶＱ（ｋ、ｎ）の繰り返し最大化は、ゼロ個の配置単位パルスから、または適応低コストでプレ配置された単位パルスから、スタートしてもよい。これはＫ番目のピラミッドの表面の下の点への整数射影に基づくものであり、ターゲットのＬ１ノルムＫにおける単位パルスの保証されたアンダーシュートを伴うものである。
【００４４】
ＰＶＱサーチ準備解析 
全ての可能な符号の組み合わせが許されており全ての符号の組み合わせを符号化可能であるというｙＮ、ＫＰＶＱ整数ベクトルのストラクチャード的性質のため、結果として得られるベクトルがＫ単位パルスのＬ１ノルムに固守される限り、サーチは全て正の第１「象限」において行われる（「象限」にカギ括弧が付いている理由は、真の象限はＮ＝２の場合にのみ存在し、ここではＮは２より大きいものであり得るからである）。さらに、本発明者の認識によると、制限された精度での実装においてできる限り高い確度を得るために、入力信号ｘ（ｎ）の最大絶対値ｘａｂｓｍａｘがインナループ相関累積手順のセットアップにおいて将来の使用のためにプレ解析されてもよい。
【数１３】
2020010353.tif 000015
【００４５】
非常に低エネルギのターゲットおよび非常に低エネルギのサブベクトルの取り扱い
入力ターゲットベクトル（式３のｘまたは式０のｔ）が全てゼロのベクトルである場合、および／またはベクトル利得（例えば、式０のＧ）が非常に低い場合、ＰＶＱ−サーチはバイパスされてもよく、有効なＰＶＱ−ベクトルｙは最初の位置
【数１４】
2020010353.tif 000016
にＫ単位パルスのうちの半分を割り当て残りの単位パルスを最後の位置（ｙ［Ｎ−１］＝ｙ［Ｎ−１］＋（Ｋ−ｙ［０］））に割り当てることにより決定論的に生成されてもよい。
【００４６】
「非常に低エネルギのターゲット」および「非常に低いベクトル利得」という言葉は、ある実施の形態では、ゼロ程度であり、これは以下に開示される例示的なＡＮＳＩ  Ｃ言語で説明される通りである。対応するコードは、
【数１５】
2020010353.tif 000017
【００４７】
しかしながら、それはイプシロンすなわちＥＰＳ以下であってもよい。ＥＰＳはゼロより大きい最小値であり、選択された精度において表す価値のあるものとして見なされる。例えば、符号付き１６ビットワードのＱ１５精度において、サブベクトル利得は１／２＾１５＝１／３２７６８のＥＰＳ以下となる（例えば、0.000030517578125以下のベクトル利得）。また、ターゲットベクトルｘ（ｎ）についての符号付き１６ビットワードのＱ１２精度において、「非常に低い」値はＥＰＳ＝（１／２＾１２）となり、例えばｓｕｍ（ａｂｓ（ｘ（ｎ）））は0.000244140625以下となる。１６ビットワードの固定小数点ＤＳＰ演算のある実施の形態では、符号なし整数フォーマットは０から６５５４６のうちの任意の整数値を取り得る一方、符号付き整数は−３２７６８から＋３２７６７のうちの値を取り得る。符号なし分数フォーマットを使用すると、５６５５３６個のレベルは０と＋１との間に一様に分布する。一方、符号付き分数フォーマットの実施の形態では、レベルは−１と＋１との間で等間隔になる。
【００４８】
ゼロベクトルおよび低利得値に関するこのオプションステップを適用することにより、ＰＶＱ−サーチの複雑さが低減され、符号器インデクシングと復号器デインデクシングとの間でインデクシングの複雑さが分散／共有される。つまり、結局はゼロにスケールダウンされてしまうであろうゼロターゲットベクトルや非常に小さなターゲットベクトルをサーチするために処理を「無駄にする（wasted）」ことはない。
【００４９】
オプションのＰＶＱプレサーチ射影
パルス密度比Ｋ／Ｎが変更離散コサイン変換係数などの係数当たり０．５単位パルスより大きい場合、Ｋ−１サブピラミッドへの低コスト射影が行われ、ｙの開始点として使用されてもよい。一方、パルス密度比が係数当たり０．５単位パルスより小さい場合、繰り返しＰＶＱ−サーチは０のプレ配置された単位パルスから開始される。「Ｋ−１」への低コスト射影は多くの場合、単位パルスインナループサーチをＫ−１回繰り返すよりも、ＤＳＰサイクルにおいて計算機的に廉価である。しかしながら、低コスト射影の欠点は、Ｎ次元床関数アプリケーションのために不正確な結果が生成されることである。床関数を使用した低コスト射影の結果得られるＬ１ノルムは多くの場合、「Ｋ−１」とおよそ「Ｋ−５」との間の任意の値であり得る。すなわち、射影後の結果は、Ｋのターゲットノルムに至るためにファインサーチされる必要がある。
【００５０】
低コスト射影は以下のように行われる。
【数１６】
2020010353.tif 000018
射影が行われない場合、開始点は全てのゼロのｙ（ｎ）ベクトルである。ＤＳＰサイクルにおける射影のＤＳＰコストは、Ｎ（絶対値和）＋２５（割り算）＋２Ｎ（乗算および床）サイクルの近傍である。
【００５１】
Ｋ番目のピラミッドの表面に至るためのファインサーチの準備において、開始点に対する単位パルスの累積数ｐｕｌｓｅｔｏｔと、累積相関ｃｏｒｒｘｙ（ｐｕｌｓｅｔｏｔ）と、累積エネルギｅｎｅｒｇｙｙ（ｐｕｌｓｅｔｏｔ）と、は以下のように計算される。
【数１７】
2020010353.tif 000019
【００５２】
ＰＶＱファインサーチ
本明細書で開示されるソリューションはＰＶＱファインサーチに関する（これはＰＶＱ形状サーチを構成するかその一部であることは上述した通り）。以前のセクションで説明されたことは主に従来のＰＶＱであるが、前もってｘａｂｓｍａｘを決めることは例外であり、それについては以下で詳述される。次元Ｎの最終的な整数形状ベクトルｙ（ｎ）はＫパルスのＬ１ノルムを固守しなければならない。ファインサーチは前提として、ピラミッドにおけるより低い点から、すなわちＫ番目のピラミッドの下から始まるよう構成され、Ｎ次元のＫ番目のハイパーピラミッドの表面への道を繰り返し見つけるよう構成される。ファインサーチにおけるＫ値は多くの場合１から５１２単位パルスの範囲をとる。
【００５３】
サーチおよびＰＶＱインデクシングの複雑さをリーズナブルなレベルに維持するために、サーチは２つの主なブランチに分けられてもよいことを、本発明者は認識した。次のインナサーチループ繰り返しの間ｙ（ｎ）のインループエネルギ表現が符号付きまたは符号なし１６ビットワードに留まることが知られている場合に一方のブランチが使用され、次のインナサーチループ繰り返しの間インループエネルギが１６ビットワードのダイナミックレンジを超えうる場合に他方のブランチが使用される。
【００５４】
少数の単位パルスについての固定精度ファインサーチ
最終的なＫがｔｐ＝１２７単位パルスのしきい値以下である場合、ｅｎｅｒｇｙｙ（Ｋ）のダイナミクスは常に１４ビット内に留まるであろうし、１ビットアップシフトされたｅｎｌｏｏｐｙ（Ｋ）のダイナミクスは常に１５ビット内に留まるであろう。これにより、ｋ＝Ｋに至るまでの全てのファインパルスサーチインナループ繰り返し内の全てのｅｎｌｏｏｐｙ（ｋ）を表すのに符号付き１６ビットワードを使用することが可能となる。言い換えると、Ｋ＜１２７の場合、任意のファインパルスサーチインナループ繰り返しにおいてｅｎｅｒｇｙｙ（Ｋ）やｅｎｌｏｏｐｙ（Ｋ）を表すのに１６ビットを超えるワードビット長は不要であろう。
【００５５】
符号なし１６ビット変数についての効率的なＤＳＰ乗算、乗算加算（multiply-add）および乗算減算（multiply-subtract）オペレータが利用可能である場合、しきい値をｔｐ＝２５５まで増やすことができる。ｅｎｌｏｏｐｙ（Ｋ）は常に符号なし１６ビットワード内に留まるであろうからであろう。ある実施の形態では、乗算加算は、オーディオおよびビデオ信号を表すデータ値とフィルタまたは変換値とを乗算し、その積を累算して結果を生成するための乗算加算インストラクションまたは等価な動作である。乗算減算動作は、加算が減算に置き換えられることを除き、乗算加算動作と同じである。
【００５６】
次の単位パルス追加の準備において、符号付き３２ビットワードの次のループの累積インループ相関値ｃｏｒｒｘｙの準最適な可能なアップシフトの最大値が、前に計算された最大の絶対入力値ｘａｂｓｍａｘを使用して以下のようにプレ解析される。
【数１８】
2020010353.tif 000020
（式１９）
式１９で計算されるこのアップシフトは「最悪の場合」を表しており、次のインナループにおいてなされうる可能なアップシフトの最大値をカバーする。したがって、最悪の場合のシナリオであっても、インナループ繰り返し中に、相関に関する最も重要な情報は失われもアウトシフトもしないことが確実となる。
【００５７】
この最悪の場合のプレインナループダイナミクス解析は、乗算加算およびノルムインストラクション（正規化）を使用する大抵のＤＳＰアーキテクチャ２−３サイクルで実行可能である。この解析は常に次元Ｎによらずに同じである。ＩＴＵ−Ｔ  Ｇ．１９１仮想１６／３２ビットＤＳＰでは、式１９の動作は「corr_upshift = norm_l(L_mac(*L_corrxy,1, xabs_max));」となり、２サイクルのコストを伴う。ここでのnorm_l(x)は「31 - ceil(log2(x))」に対応し、代替的に 31 - ceil(log2(x))と表されうることに注意されたい。ここで、ceil(x)はいわゆる天井関数であり、実数を以降の整数のうちの最小のものにマッピングする。より正確には、
【数１９】
2020010353.tif 000021
はｘ以上の最小の整数である。ｃｏｒｒｕｐｓｈｉｆｔについて、上側に水平の棒が付いている括弧内の項は常に正の数である。ｃｏｒｒｕｐｓｈｉｆｔは代替的には床関数を使用して以下のように計算されうる。
【数２０】
2020010353.tif 000022
ここで、
【数２１】
2020010353.tif 000023
はｘ以下の最大の整数である。
【００５８】
準最適形状サーチ相関スケーリングに対する本明細書で提案されるアプローチの他の利点は、提案される方法はプレ正規化されたターゲットベクトルｘを要求しないことである。これにより、形状サーチを始める前の追加的な複雑さをいくらか抑える。
【００５９】
式１０の繰り返し更新をできる限り効率的にするために、ｃｏｒｒｘｙ（ｋ，ｎ）２分子は、１６ビットワードにフィットする以上の情報を含む場合でも、以下のアプローチにより１６ビット符号付きワードにより表されてもよい。
【数２２】
2020010353.tif 000024
ここで、関数「Ｒｏｕｎｄ１６」は符号付き３２ビット変数から上位の１６ビットを丸めて抽出する。この準最適アップシフト（式１０）および二乗相関ｂｅｓｔＣｏｒｒＳｑ１６の１６ビット表現の使用は、ＤＳＰの最適化された乗算、乗算加算、乗算減算関数を使用する場合、式２１テストおよび３つの変数更新を行うための〜９サイクルのみを使用する非常に高速なインナループサーチを可能とする。
【００６０】
ベクトルｙにおける次の単位パルスの位置は、式２０、式６および式２１を用いつつベクトルｙのｎ＝０、...、Ｎ−１の可能な位置に亘って繰り返すことで決定される。
【００６１】
（これまでに得られたベクトルｙにおける）単位パルスの最良な位置ｎｂｅｓｔが決定された場合、累積相関ｃｏｒｒｘｙ（ｋ）と、累積インループエネルギｅｎｌｏｏｐｙ（ｋ）と、累積単位パルスの数ｐｕｌｓｅｔｏｔと、が更新される。追加すべきさらなる単位パルスが存在する場合、すなわちｐｕｌｓｅｔｏｔ＜Ｋの場合、次の単位パルスの追加についての新たな準最適ｃｏｒｒｕｐｓｈｉｆｔ解析（式１９）と共に新たなインナループが始まる。
【００６２】
合わせると、この提案されたアプローチは、ｙ（ｎ）に追加される各単位パルスについて、最悪の場合の複雑さとして、量子化された係数当たりおよそ５／Ｎ＋１５サイクルを有する。言い換えると、単位パルスを追加するためのサイズＮのベクトルに亘るループは、最悪の場合の複雑さとして約Ｎ＊（５／Ｎ＋１５）サイクル、すなわち５＋１５＊Ｎサイクルを有する。
【００６３】
多数の単位パルスについての固定精度ファインサーチ
１６／３２ビット制限ＤＳＰを前提とする本例示的実施の形態ではｔｐ＝１２７単位パルスであるところのしきい値ｔｐよりもＫが大きい場合、パラメータｅｎｅｒｇｙｙ（Ｋ）のダイナミクスは１４ビットを超え、１ビットアップシフトｅｎｌｏｏｐｙ（Ｋ）のダイナミクスは１５ビットを超える可能性がある。したがって、不必要な高精度を使用しないように、ファインサーチは、Ｋがｔｐより大きい場合、組｛ｃｏｒｒｘｙ（ｋ，ｎ）２、ｅｎｌｏｏｐｙ（ｋ、ｎ）｝の１６ビット表現と３２ビット表現との間で適応的に選択するよう構成される。ベクトルｙ（ｎ）のＫが１２７より大きい最終値になることが前もって分かっている場合、ファインサーチはそれまでに得られたｙにおける最大パルス振幅ｍａｘａｍｐｙを追跡するであろう。これは、ｍａｘａｍｐｙが決定されるとも称されうる。この最大パルス振幅情報は、最適化されたインナ次元ループに入る前のプレ解析ステップで使用される。プレ解析は、今度の単位パルス追加インナループにおいてどの精度が使用されるべきかを決定することを含む。図１２においてＮ、ＫをＰＶＱ−形状サーチに入力することから示される通り、ＰＶＱサーチが始まる前にビット割り当ては知られている／決定されている。ビット割り当ては、ＰＶＱ−形状サーチに入力されるべきＫを取得、決定および／または計算するための式または保持されるテーブルを使用してもよい。例えば、次元Ｎおよび所定数のｂｉｔｓ（ｂａｎｄ）を伴う所定のバンドについて、Ｋ＝ｆｕｎｃｔｉｏｎ（ｂｉｔｓ（ｂａｎｄ）、Ｎ）である。
【表１】
2020010353.tif 000025
【００６４】
例えば、上述のような保持されたテーブルを使用して、Ｋの値を決定または選択してもよい。次元Ｎが８でバンドについて利用可能なビットｂｉｔｓ（ｂａｎｄ）が１４．０である場合、Ｋは５と選択されるであろう。ＰＶＱ（Ｎ＝８、Ｋ＝６）は１４．７２１１ビットを要求するが、これは利用可能なビット数１４．０よりも大きいからである。
【００６５】
プレ解析が、エネルギ情報を失うことなくインループエネルギを表すのに符号付き１６ビットワードより多くが必要であることを示す場合、より高精度で計算的により強度の高精度単位パルス追加ループが用いられる。ここでは、保存された最良の二乗相関項および保存された最良の累積エネルギ項の両方が３２ビットワードで表される。
【数２３】
2020010353.tif 000026
【００６６】
最悪の場合のプレインナループダイナミック解析は大抵のＤＳＰにおいて５−６の追加サイクルで実行可能である。その解析コストは全ての次元について同じである。ＩＴＵ−Ｔ  Ｇ．１９１  ＳＴＬ  ２００９仮想１６／３２ビットＤＳＰでは、式２２および式２３の動作は以下のようになる。
【数２４】
2020010353.tif 000027
これは最大で６サイクルのコストを伴う。
【００６７】
ＡＮＳＩ−Ｃコードでの対応するコード例は以下のようになる。
【数２５】
2020010353.tif 000028
【００６８】
あるいはまた、式２２のエネルギマージンｅｎ＿ｍａｒｇｉｎは、Ｇ．１９１  ＳＴＬ関数ｎｏｒｍ＿ｌ（）の動作に沿った形で、以下のように床関数を使用して計算されうる。
【数２６】
2020010353.tif 000029
ｈｉｇｈｐｒｅｃｉｓｉｏｎａｃｔｉｖｅがＦＡＬＳＥすなわち＝０である場合、式２０、式６および式２１の低精度インナサーチループが用いられる。一方、ｈｉｇｈｐｒｅｃｉｓｉｏｎａｃｔｉｖｅがＴＲＵＥすなわち＝１の場合、本例では３２ビットワードでｅｎｌｏｏｐｙおよびｃｏｒｒｘｙ２を表す高精度インナループを用いて次の単位パルスの位置特定が行われる。すなわち、ｈｉｇｈｐｒｅｃｉｓｉｏｎａｃｔｉｖｅがＴＲＵＥである場合、ｙ（ｎ）における次の単位パルスの位置は、式２４、式６および式２５を使用してｎ＝０、...、Ｎ−１の可能な位置に亘って繰り返すことで決定される。
【数２７】
2020010353.tif 000030
【００６９】
言い換えると、ｅｎ＿ｍａｒｇｉｎは、次のループでエネルギを正規化するためにどれだけ多くのアップシフトが使用されうるかを示す。１６／３２ビットワード長を前提とすると、１６以上のアップシフトが使用されうる場合、エネルギはより少ないワード長に留まり、高精度（３２ビット表現）ループは必要ない。したがって、ｈｉｇｈｐｒｅｃｉｓｉｏｎａｃｔｉｖｅはＦＡＬＳＥに設定される。それをこのように（エネルギ情報がL_energy３２ビットワードの下位部分に留まることを許す）行うひとつの実装上の理由は、それが計算的に廉価であるからである。それはextract_l(L_energy)を計算するのに１サイクルのみかかる。一方、代替的なround_fx(L_shl(L_energy,en_margin))は２サイクルかかる。
【００７０】
単位パルスの最良な位置ｎｂｅｓｔが決定された場合、累積相関ｃｏｒｒｘｙ（ｋ）と、累積インループエネルギｅｎｌｏｏｐｙ（ｋ）と、累積単位パルスの数ｐｕｌｓｅｔｏｔと、が更新される。さらに、それまでで最良の整数ベクトルｙの最大振幅ｍａｘａｍｐｙは次の単位パルス追加ループのために最新に保たれる、すなわち決定される。
【数２８】
2020010353.tif 000031
（式２６）
追加すべきさらなる単位パルスが存在する場合、すなわちｐｕｌｓｅｔｏｔ＜Ｋの場合、新たな準最適ｃｏｒｒｕｐｓｈｉｆｔ解析、式１９、および新たなエネルギ精度解析、式２２および式２３、と共に新たなインナループが始まる。そして次の単位パルスループを式２４、式６および式２６と共に始める。
【００７１】
高精度アプローチ（本例では３２ビットワード）は、ｙ（ｎ）に追加される各単位パルスについて、最悪の場合の複雑さは量子化された係数当たりおよそ７／Ｎ＋３１サイクルである。
【００７２】
インループ累積エネルギベースインナループ精度選択の効果は、高いピーク性を有するかまたは非常に細かい粒度を有する、すなわち最終的なＫが大きいターゲットサブベクトルはより高精度のループを使用し、より多くのサイクルをより頻繁に使用するであろうこと、その一方でピーク的でないまたはパルス粒度の低いサブベクトルはより低い精度のループおよびより少ない数のサイクルをより頻繁に使用するであろうこと、である。
【００７３】
上のセクションで説明された解析はＫ＜ｔｐの場合にも実行可能であることに注意されたい。しかしながら、上述の解析を適用するためのしきい値ｔｐを導入することにより、実施の形態はより効率的になり得る。
【００７４】
ＰＶＱベクトル最終化および正規化
形状サーチの後、各ノンゼロＰＶＱ−ベクトル要素には適切な符号が割り当てられ、ベクトルは単位エネルギに対してＬ２正規化（ユークリッド正規化としても知られる）される。加えて、バンドが分割された場合、それはさらにサブベクトル利得でスケールされる。
【数２９】
2020010353.tif 000032
【００７５】
上で、２つの精度手法が提案され、特定される。上のセクションで定義される（式１９から式２１）「Ｅｎ１６ｘＣｏｒｒＳｑ１６」と、「Ｅｎ３２ｘＣｏｒｒＳｑ３２」（式２２から式２６）と、である。分子の相関二乗項およびエネルギ項の精度が変わる２つのさらなる中間の複雑さを有する方法が以下に説明される。
【００７６】
「Ｅｎ１６ｘＣｏｒｒＳｑ３２」および「Ｅｎ３２ｘＣｏｒｒＳｑ１６」方法
「Ｅｎ１６ｘＣｏｒｒＳｑ３２」方法は「Ｅｎ３２ｘＣｏｒｒＳｑ３２」と似ているが、差分として、インナループの発見された最良の単位パルス更新および比較がこれまでで最良のエネルギｂｅｓｔＥｎ１６の１６ビット表現を使用することがある。
【数３０】
2020010353.tif 000033
（式３０）
「Ｅｎ１６ｘＣｏｒｒＳｑ３２」方法の単位パルス当たりのおおよそのコストは５／Ｎ＋２１サイクルである。
【００７７】
「Ｅｎ３２ｘＣｏｒｒＳｑ１６」方法は「Ｅｎ３２ｘＣｏｒｒＳｑ３２」と似ているが、差分として、インナループの発見された最良の単位パルス更新および比較がこれまでで最良の二乗相関ｂｅｓｔＣｏｒｒＳｑ１６の１６ビット表現を使用することがある。
【数３１】
2020010353.tif 000034
（式３１）
「Ｅｎ３２ｘＣｏｒｒＳｑ１６」方法の単位パルス当たりのおおよそのコストは係数当たり６／Ｎ＋２０サイクルである。
【００７８】
態様および例示的実施の形態
以下に、図１−４を参照して、本明細書で開示される解決手段のいくつかの例示的実施の形態を説明する。
【００７９】
図１は、ＰＶＱ−形状サーチのファインサーチに係る方法を説明するフローチャートである。方法は、オーディオおよび／またはビデオ信号のメディア符号器などの符号器により実行されることが意図されている。ＰＶＱは、ターゲット形状ベクトルｘを入力として取得し、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導く。方法はプレ解析に関し、それはインナループに入る前に行われる。上述した通り、ベクトルｙに基づき出力ベクトルｘｑが導出されるであろう。しかしながら、ｘｑの形成は本明細書で開示される解決手段にとって中心的ではないので、ここではこれ以上詳述しない。
【００８０】
図１で説明される方法では、前提として、符号器は現在のベクトルｙのｍａｘａｍｐｙの値を追跡する。「現在のベクトルｙ」により、ここでは、これまでに構成され、見つけられ、または構築されたベクトルｙ、すわなちｋ＜Ｋについてのベクトルｙを意味する。上述した通り、ベクトルｙの開始点は、Ｋ番目のピラミッドの下の表面への射影か、または空の全てゼロのベクトルであってもよい。図１で説明される方法は、単位パルス追加のための次のインナ次元サーチループに入る前に、今度のインナ次元ループにおけるｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定すること１０１を含む。変数ｅｎｌｏｏｐｙはベクトルｙの累積エネルギに関する。本方法を行うことにより、符号器はサーチの複雑さをリーズナブルなレベルに維持することができる。例えば、今度のインナループにおける「最悪の場合のシナリオ」が現在使用されているものよりも高い精度を伴うインナループを要求するか否かを解析することにより、符号器は増大された精度（より高い複雑さを暗示する）のループをそれが必要な場合にのみ適用することができる。
【００８１】
上述のプレ解析は、インナループへのエントリ１０２のそれぞれの前に、すなわちベクトルｙへの単位パルスの追加のそれぞれの前に、行われる。２つの異なるビット表現のみ、すなわち１６および３２ビットのビットワード長、が利用可能であるような例示的な実施の形態では、ｅｎｌｏｏｐｙを表すためにより長いビットワードが必要であると判定されるまではインナループはｅｎｌｏｏｐｙの１６ビット表現を使用して行われ、そのように判定された後は、より大きなビットワード長、すなわち３２ビット表現がインナループ計算に適用されるであろう。１６ビット表現を使用するループは「低精度ループ」と称されてもよく、３２ビット表現を使用するループは「高精度ループ」と称されてもよい。
【００８２】
最初のまたは現在のビットワード長より多くが必要とされるか否かを決定すること１０２は、代替的に、次のインナループ中に「最悪の場合」（最大の可能な増加）のｅｎｌｏｏｐｙを表すために少なくとも２つの異なる代替的なビットワード長のなかからどのビットワード長が要求されるであろうかを決定することとして表現されうる。その少なくとも２つの異なるワードビット長は例えば１６および３２ビットワード長を含んでもよい。
【００８３】
言い換えると、次のインナループにおけるｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要となると決定された１０２場合、インナループ計算はそのインナループにおけるｅｎｌｏｏｐｙを表すために最初のまたは現在のビットワード長よりも長いビットワード長で行われる１０３。一方、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でないと決定された場合、ｅｎｌｏｏｐｙを表すために第１のまたは現在のビットワード長を使用する第１単位パルス追加ループを用いてインナループ計算が行われてもよい。すなわち、現在のビットワード長が使用され続けてもよい。これは、図４において、２つの異なるループの使用として説明されている。図４は、現在の（低い）ビットワード長で十分であると判定４０３された場合に実行４０５されるひとつの低精度インナループと、情報を失わないためにインナループにおけるエネルギを表すためのより大きなビットワード長が必要であると判定４０３された場合に実行されるひとつの高精度インナループと、を示す。
【００８４】
この方法は、次のインナループにおけるｅｎｌｏｏｐｙなどのエネルギ変数の可能な最大の増大は、単位パルスが現在のｍａｘａｍｐｙに関連付けられたｙにおける位置に追加される場合に生じるという認識に基づくものである。これを認識したことにより、インナループに入る前に、次のインナループ中に例えば１６ビットの現在使用されているビットワード長の表現能力を超えるリスクがあるか否かを判定することが可能となる。言い換えると、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要か否かを決定することは、今度のインナサーチループにおいて単位パルスがｍａｘａｍｐｙに関連付けられたｙにおける位置に加えられる場合の特性を決定することを含んでもよい。例えば、今度のインナループにおいてｅｎｌｏｏｐｙを表すために必要となるビット数が決定されてもよいし、あるいはまた、今度のインナループにおいてｅｎｌｏｏｐｙを表すビットワードの残存マージンが決定されてもよい。
【００８５】
低いＫに関連付けられたターゲット形状ベクトルについては、最初のおよび現在使用されているビットワード長により提供されるものよりも長いビットワード長は必要ないと前もって言うことができる。したがって、しきい値Ｔｋを超えるＫに関連付けられたターゲット形状ベクトルに対してのみ所定の演算を実行するよう、しきい値Ｔｋを適用することが可能である。そのようなターゲットベクトルについて、符号器は、各パルス追加の後にこの値を更新することでｍａｘａｍｐｙを追跡する。しきい値よりも低いＫに関連付けられたターゲットベクトルについては、ｍａｘａｍｐｙを追跡する必要はない。１６および３２ビットワードの例では、可能なＴｋは上述の通り１２７でありうる。言い換えると、ｍａｘａｍｐｙを追跡し、現在のビットワード長より多くが必要か否かを決定することは、例えば入力ターゲット形状ベクトルに関連付けられたＫの最終値がしきい値Ｔｋを超える場合にのみ、実行される。
【００８６】
図２で説明される実施の形態は、ｍａｘａｍｐｙを追跡または決定すること２０１と、ｘａｂｓｍａｘを決定すること２０２と、を含む。ｍａｘａｍｐｙの値はインナループに新たな単位パルスを追加すると変化しうる。したがって、各ループの後でｍａｘａｍｐｙを最新に維持するために、ｍａｘａｍｐｙを更新する必要がある。例えば、アクション２０１は、ｅｎｌｏｏｐｙを表すために使用される最初のまたは現在のビットワード長がもはや十分でなくなるしきい値にｋの値が到達し、例えばアクション２０４により表される解析が始まるまで、ｍａｘａｍｐｙを追跡することを含んでもよい。例えばアクション２０４の解析に続くインナループの後のｍａｘａｍｐｙの更新は、図２においてアクション２０６として示される。しかしながら、ｘａｂｓｍａｘはその処理で変更されないので、一回２０２だけ決定されればよいことに注意されたい。図２に示されるように、方法の実施の形態は、単位パルス追加のための次のインナ次元ループに入る２０５前に、ｘとベクトルｙとの間の次のループの累積インループ相関値、ｃｏｒｒｘｙのビットワードでの可能なアップシフトを、入力形状ベクトルｘの最大絶対値、ｘａｂｓｍａｘに基づいて、決定すること２０３を含んでもよい。アップシフトはアップスケーリングと称されてもよい。上記の式１９は、最大の可能なアップシフトの決定を示す。これを行うことにより、インナループ評価中に、できる限り多くの相関情報ビット、特に最上位ビット、が維持されることをより確実にすることができる。ここで、ｃｏｒｒｘｙ２の形での相関値ｃｏｒｒｘｙは必ずしも損失の無い態様で表される必要はないことに注意されたい。最大アップシフトの決定は、インナループにおいて使用される現在のビットワード長によらず、「より長いビットワード」で行われてもよい。すなわち、最大の可能なアップシフトは、インナループにおいて１６ビットワードが使用される場合でも、３２ビットワードで決定されてもよい。インナループにおいてより短いビットワードが使われるべきである場合、式２０により示される通り、決定されたアップシフトは「丸め」られてより短いビットワードとなる。相関値ｃｏｒｒｘｙは相関値に対して適用されるＤＳＰ精度において常に１（１．０）以下である、すなわちｃｏｒｒｘｙ＜１．０であることに注意されたい。したがって、ｃｏｒｒｘｙについて決定された最大アップシフトはｃｏｒｒｘｙ２についても正しい。
【００８７】
ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要であると決定された場合、インナループ計算は、ｅｎｌｏｏｐｙを表すために（現在のビットワード長よりも、例えば、１６ビットの代わりに３２ビットの）より長いビットワード長を使用して行われてもよい。
【００８８】
ある実施の形態では、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要であると決定された場合、インナループ計算は（現在のビットワード長よりも）長いビットワード長で行われ、インナループにおける累積インループ相関値ｃｏｒｒｘｙ２もまたその長いビットワード長で表される。これは例えば図３のアクション３０５に示される。すなわち、エネルギ値ｅｎｌｏｏｐｙについて決定されたビットワード長はｃｏｒｒｘｙ２に適用されてもよい。
【００８９】
上述の通り、単位パルス追加のためのインナ次元サーチループにおいて式８の割り算を行うのを避けることが好ましい。したがって、式１０に示されるようなたすき掛けが行われてもよい。すなわち、単位パルス追加のためのｙにおける位置ｎｂｅｓｔは、ｙにおける各位置ｎについて、現在のｎの相関およびエネルギ値と、以前のｎの値から保存された「これまでで最良の」相関、ＢｅｓｔＣｏｒｒＳｑおよび「これまでで最良の」エネルギ値ｂｅｓｔＥｎと、のたすき掛けを以下のように評価することで決定されてもよい。
【数３２】
2020010353.tif 000035
位置ｎｂｅｓｔは単位パルス追加のためのｙにおける「最良の」位置と称されてもよい。上記表現において、「＞」の代わりに「≧」が使用されてもよいことに注意されたい。しかしながら、「＞」すなわち「より大きい」は、例えばサイクル数について計算コストをできる限り低く抑えたい場合により好適でありうる。上述の実施の形態のうちの任意のものに係る方法を実行することにより、このたすき掛けは（例えば実際必要なものよりも高い精度を使用しないことにより）より効率的な態様で実行可能となる。
【００９０】
実装
上述の方法および技術は、例えば通信デバイスが備える符号器やコーデックに実装可能である。
【００９１】
符号器、図１１ａ−１１ｃ
符号器の例示的実施の形態は一般的な態様で図１１ａに示される。符号器はメディア符号器であってもよく、例えばオーディオおよび／またはビデオ信号の符号化用に構成される。符号器１１００は、図１−５のいずれかを参照して上述された方法の実施の形態のうちの少なくともひとつを行うよう構成される。符号器１１００は、前述の方法の実施の形態と同じ技術的特徴、目的および利点を伴う。ある実装では、符号器は、例えば符号器が固定精度ＤＳＰで構成される場合のように、メモリおよび／または複雑さに関する拘束をを伴う。不必要な繰り返しを避けるため、符号器は簡潔に説明される。
【００９２】
符号器は以下のように実装および／または説明されてもよい。
エンコーダ１１００は、いわゆるファインサーチまたはファイン形状サーチを含むピラミッドベクトル量子化用に構成される。ピラミッドベクトル量子化器、ＰＶＱはターゲットベクトルｘを入力として取得し、インナ次元サーチループに単位パルスを繰り返し加えることでベクトルｙを導く。入力ベクトルｘは次元ＮとＬ１ノルムＫとを有する。符号器１１００は、処理回路または処理手段１１０１と、通信インタフェース１１０２と、を備える。処理回路１１０１は符号器１１００に、単位パルス追加のための次のインナ次元サーチループに入る前に、今度のインナ次元ループにおけるｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長より多くが必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定させるよう構成される。通信インタフェース１１０２は例えば入力／出力（Ｉ／Ｏ）インタフェースとも称され、他のエンティティやモジュールにデータを送信しかつそれらからデータを受信するためのインタフェースを含む。
【００９３】
図１１ｂに示される通り、処理回路１１０１は、例えばＣＰＵであるプロセッサ１１０３などの処理手段と、インストラクションを格納または保持するためのメモリ１１０４と、を備えてもよい。メモリは例えばコンピュータプログラム１１０５の形でインストラクションを含む。インストラクションは、処理手段１１０３によって実行された場合、符号器１１００に上述のアクションを行わせる。
【００９４】
処理回路１１０１の代替的な実装が図１１ｃに示される。ここでの処理回路は決定部１１０６を備え、該決定部１１０６は、符号器１１００に、単位パルス追加のための次のインナ次元サーチループに入る前に、今度のインナ次元ループにおけるｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを無損失な態様で表すために現在のビットワード長で許されるものよりも高い精度が必要か否かを、現在のベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定させるよう構成される。処理回路１１０１は、符号器に所定のビットワード長および／または所定の精度でインナ次元ループを実行させるよう構成されたファインサーチ部１１０７などのより多くの部を備えてもよい。
【００９５】
上述の符号器は本明細書で説明された異なる方法の実施の形態用に構成されてもよい。そのような形態は例えば、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要だと決定された場合、ｅｎｌｏｏｐｙおよび場合によってはｃｏｒｒｘｙ２を表すより長いビットワードを使用してインナループ計算を行うものである。ここで「より長い」は、現在のまたは最初のビットワード長よりも長いことを指す。
【００９６】
符号器１１００は、前提として、通常の符号器機能を果たすためのさらなる機能を備えてもよい。
【００９７】
上述の符号器は、通信デバイスなどのデバイスに備えられてもよい。通信デバイスは、携帯電話やビデオカメラやサウンドレコーダやタブレットやデスクトップやラップトップやＴＶセットトップボックスやホームサーバ／ホームゲートウエイ／ホームアクセスポイント／ホームルータなどの形のユーザ装置（ＵＥ）であってもよい。通信デバイスは、ある実施の形態では、コーディングおよび／またはトランスコーディングに適した通信ネットワークデバイスであってもよい。そのような通信ネットワークデバイスの例は、メディアサーバやアプリケーションサーバなどのサーバやルータ、ゲートウエイ、無線基地局である。通信デバイスは、船舶や、飛翔ドローンや、航空機や、車、バス、ローリーなどの車両などのベッセルに配置される、すなわち組み込まれるよう適合されてもよい。そのような組み込みデバイスは多くの場合、車両テレマティクスユニットまたは車両インフォテイメントシステムに属する。
【００９８】
本明細書で説明されるステップや機能や手順やモジュールや部および／またはブロックは、ディスクリート回路技術や集積回路技術などの従来技術を使用してハードウエアに実装されてもよい。そのようなハードウエアは、汎用電子回路および特定用途向け回路の両方を含む。
【００９９】
特定の例は、ひとつ以上の適切に設計されたデジタルシグナルプロセッサと、特定の機能を行うよう相互接続されたディスクリート論理ゲートすなわち特定用途向け集積回路（ＡＳＩＣｓ）などの他の既知の電子回路と、を含む。
【０１００】
あるいはまた、上述のステップや機能や手順やモジュールや部および／またはブロックのうちの少なくともいくつかは、ひとつ以上の処理部を含む適切な処理回路により実行されるコンピュータプログラムなどのソフトウエアで実装されてもよい。ソフトウエアは、通信デバイスにおいてコンピュータプログラムが使用される前および／または使用されている間、電気信号、光信号、無線信号、またはコンピュータ可読保持媒体などのキャリアによって運ばれてもよい。
【０１０１】
本明細書で提供されるフロー図は、ひとつ以上のプロセッサによって実行される場合にコンピュータフロー図と見なされてもよい。対応する装置は機能モジュールのグループとして定義されてもよい。ここで、プロセッサによって行われる各ステップはひとつの機能モジュールに対応する。この場合、機能モジュールは、プロセッサ上で実行されるコンピュータプログラムとして実装される。機能モジュールは実際のソフトウエアモジュールに対応しなくてもよいことは理解されるべきである。
【０１０２】
処理回路の例は、ひとつ以上のマイクロプロセッサや、ひとつ以上のデジタルシグナルプロセッサ、ＤＳＰｓや、ひとつ以上の中央処理装置、ＣＰＵｓ、および／またはひとつ以上のフィールドプログラマブルゲートアレイ、ＦＰＧＡｓ、ひとつ以上のプログラマブルロジックコントローラ、ＰＬＣｓなどの適切なプログラマブル論理回路を含むが、それらに限定されない。すなわち、上述の異なる複数のデバイスの構成におけるユニットやモジュールは、アナログ回路とデジタル回路との組み合わせおよび／または例えばメモリに保持されるソフトウエアおよび／またはファームウエアで構成されたひとつ以上のプロセッサにより実装可能であろう。これらのプロセッサのうちのひとつ以上は、他のデジタルハードウエアと共に、単一の特定用途向け集積回路ＡＳＩＣに含まれてもよい。または、いくつかのプロセッサおよび種々のデジタルハードウエアは、いくつかの別個のコンポーネントに亘って分散し、個々にパッケージされまたはアセンブルされてシステムオンチップ、ＳｏＣとなってもよい。
【０１０３】
提案される技術が実装された通常のデバイスやユニットの一般的な処理能力を再利用することができることは理解されるべきである。例えば既存のソフトウエアの再プログラミングや新たなソフトウエアコンポーネントの追加により、既存のソフトウエアを再利用することも可能である。
【０１０４】
さらなる例示的実施の形態
ここでの開示は、少し異なる態様で表現され、例えば以下の態様および実施の形態に係る。
【０１０５】
態様のひとつは符号器／コーデックであり、符号器／コーデックは例えば図５−６に示される以下のステップのうちのひとつ、ひとつ以上またはすべてを行うよう構成される。
−例えばある実施の形態においては上記の式１１および式１２にしたがい例えば図５のステップＳ１で説明されるように、入力ターゲットベクトル（ｘ（ｎ））の最大絶対値（ｘａｂｓｍａｘ）を決定、計算または取得すること、
−例えばある実施の形態では以下の式１９を通じておよび図５のステップＳ２で説明されるように符号付き３２ビットワードで次のループの累積インループ相関値の可能なアップシフトを計算することにより、少なくとも最大絶対値（ｘａｂｓｍａｘ）に基づいて相関値の可能なアップシフトを決定、計算または取得すること、
−最終単位パルスの数（Ｋ）が例えば１２７単位パルスであってもよいしきい値（ｔｐ）よりも高くなりそうな場合、例えば上記の式１３および式１４にしたがい定義されてもよい上記のベクトル（ｙ（ｎ））の式２６にしたがって計算される最大パルス振幅（ｍａｘａｍｐｙ）値／情報を決定、例えば追跡／保持すること、
・エネルギ情報を失うこと無くまたは実質的に失うこと無くインループエネルギを表すために所定のワード長より多いこと、例えば符号付き１６ビットワードより多いことや符号付き３２ビットワードより多いこと、が必要かどうかまたはそれが使用されるべきかどうか、を、例えば以下の式２２および式２３にしたがう計算を通じておよび図６のステップＳ３により説明されるように、保持される最大パルス振幅に基づいて判定／計算／決定／選択すること、
・所定のワード長より多くが必要とされる場合、最良の二乗相関項／パラメータ／値と最良の累積エネルギ項／パラメータ／値とを所定のワード長より多いもの、例えば３２ビットワードや６４ビットワードによって表すこと、
・所定のワード長より少ないものが必要とされる場合、第１ループを実行すること、
・所定のワード長より多くが必要とされる場合、所定のワード長より多いワード長のワードで表された「これまでで最良の」（準最適な）累積エネルギ項および最良の二乗相関項で第２の代替的ループを実行すること。
【０１０６】
第２ループは、低精度（すなわち、第２ループとの関係で）第１ループよりも高精度かつ計算的により強度の高精度単位パルスループであってもよい。インナループ精度のインループ累積エネルギベース選択は、高いピーク性を有するかまたは非常に細かい粒度を有する（最終的なＫが大きい）ターゲットサブベクトルはより高精度のループを使用可能であるか使用するであろうし、より多くのサイクルをより頻繁に使用可能であるか使用するであろうということ、その一方でピーク的でないまたはパルス粒度の低いサブベクトルはより低い精度のループおよびより少ない数のサイクルをより頻繁に使用可能であるか使用するであろうという効果を有する。
【０１０７】
ひとつの態様は、図９に示される通信デバイス１に関する。通信デバイス１は、例えばＥＶＳ符号器などのビデオまたはオーディオコーディングのための符号器またはコーデック２を備える。
【０１０８】
符号器またはコーデックは全体としてまたは部分的に、通信デバイス内に配置されるＤＳＰとして実装されてもよい。ある第１の実施の形態では、符号器／コーデックは、ターゲットサブベクトル（ｘ（ｎ））と有限単位パルスの数（Ｋ）と、ターゲットサブベクトルのサブベクトル次元数（Ｎ）とオプションとしてひとつ以上の利得値（ｇｓｕｂ）とに基づいてＰＶＱ−形状サーチを行うよう構成される。符号器またはコーデックはＰＶＱバンド分割を行うよう構成されてもよい。その場合、ＰＶＱ−形状サーチはバンドのサブベクトルの数／値（ＮＳ）と利得ベクトルＧの最大利得とに基づいてもよい。ここで
【数３３】
2020010353.tif 000036
符号器またはコーデックはさらに、ＰＶＱ−形状サーチから整数ベクトル（ｙ）および／または形状サブベクトルｘｑ（ｎ）を出力するよう構成される。それらは符号器によってＰＶＱインデクシングのために使用される。整数ベクトル（ｙ）は要素値を含み、サブベクトル次元値（Ｎ）と同じ長さを有する。また、全ての要素値の絶対値和は単位パルスの数（Ｋ）と等しい。
【０１０９】
符号器／コーデック／通信デバイスはＰＶＱ−形状サーチを行うよう構成される。符号器／コーデック／通信デバイスは、以下を行うよう構成される。
−例えば上記の式１１および式１２にしたがい入力（ターゲット）ベクトル（ｘ（ｎ））の最大絶対値（ｘａｂｓｍａｘ）を決定、計算または取得する（Ｓ１、Ｓ２３）、
−例えば上記の式１９を通じて符号付き３２ビットワードで次のループの累積インループ相関値の可能なアップシフトを計算することにより、少なくとも最大絶対値（ｘａｂｓｍａｘ）に基づいて相関値の可能なアップシフトを決定、計算または取得する（Ｓ２、Ｓ２８）、
−最終単位パルスの数（Ｋ）が例えば１２７単位パルスであってもよいしきい値（ｔｐ）よりも高くなりそうな場合、例えば上記の式１３および式１４にしたがい定義されてもよい上記のベクトル（ｙ（ｎ））の式２６にしたがって計算される最大パルス振幅（ｍａｘａｍｐｙ）値／情報を追跡／保持する（Ｓ３０）、
・インループエネルギを表すために所定のワード長より多いこと、例えば符号付き１６ビットワードより多いことや符号付き３２ビットワードより多いこと、が必要かどうかまたはそれが使用されるべきかどうか、を、例えば上記の式２２および式２３にしたがう計算を通じて、保持される最大パルス振幅に基づいて判定／計算／決定／選択する（Ｓ３、Ｓ３２）、
・所定のワード長より多くが必要とされる場合、最良の二乗相関項／パラメータ／値と最良の累積エネルギ項／パラメータ／値とを所定のワード長より多いもの、例えば３２ビットワードや６４ビットワードによって表す（Ｓ３４）、
・所定のワード長より少ないものが決定される場合、第１ループを実行する（Ｓ３３）、
・所定のワード長より多くが決定される場合、所定のワード長より多いワード長のワードで表された最良の累積エネルギ項および最良の二乗相関項で第２の代替的ループを実行する（Ｓ３５）。
【０１１０】
上記のＰＶＱ−形状サーチは制限された精度のＰＶＱ−形状サーチであってもよく、ある実施の形態ではベクトル量子化器によって実行される。ベクトル量子化器は符号器／コーデックの一部であり、少なくとも部分的にまたは全体的にＤＳＰユニットとして実装されてもよく、通信デバイス内に配置されるか通信デバイス内に配置されるよう適合されてもよい。したがって、符号器／コーデックは全体的にまたは部分的に、例えばＤＳＰやプログラマブルフィールドゲートアレイ（ＦＰＧＡ）などのハードウエアとして実装されてもよい。しかしながら、代替的な実施の形態では、それは汎用プロセッサおよびコーデックコンピュータプログラムの助けを借りて実装されてもよい。このコーデックコンピュータプログラムは、汎用プロセッサ上で実行されると、通信デバイスに、上記パラグラフで言及されたステップのうちのひとつ以上を行わせる。プロセッサは、縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサであってもよい。
【０１１１】
本明細書の開示の他の態様は、上記パラグラフで示された通り、図１０に示されるコンピュータプログラム６である。ここで、ひとつの実施の形態は、下記付録１にあるＡＮＳＩ−Ｃコード例によって十分に開示されている。例えば、符号器コンピュータプログラムまたはコーデックコンピュータプログラムはコンピュータ可読コードを備え、該コードは通信デバイス１のプロセッサ／プロセッサ部４上で実行されると、通信デバイスに、以下のパラグラフにおける方法に関連して言及されるステップのうちのひとつ以上または図７に関連して言及されるステップのうちの任意のものを行わせる。
【０１１２】
さらに別の態様は、通信デバイス／コーデック／符号器によって行われるＰＶＱ−形状サーチ方法である。その方法は、以下のステップのうちのひとつ以上を含む。
−例えば上記の式１１および式１２にしたがい入力（ターゲット）ベクトル（ｘ（ｎ））の最大絶対値（ｘａｂｓｍａｘ）を決定、計算または取得すること（Ｓ１）、
−例えば上記の式１９を通じて符号付き３２ビットワードで次のループの累積インループ相関値の可能なアップシフトを計算することにより、少なくとも最大絶対値（ｘａｂｓｍａｘ）に基づいて相関値の可能なアップシフトを決定、計算または取得すること（Ｓ２、Ｓ２８）、
−最終単位パルスの数（Ｋ）が例えば１２７単位パルスであってもよいしきい値（ｔｐ）よりも高くなりそうな場合、例えば上記の式１３および式１４にしたがい定義されてもよい上記のベクトル（ｙ（ｎ））の式２６にしたがって計算される最大パルス振幅（ｍａｘａｍｐｙ）値／情報を追跡／保持する、
・インループエネルギを表すために所定のワード長より多いこと、例えば符号付き１６ビットワードより多いことや符号付き３２ビットワードより多いこと、が必要かどうかまたはそれが使用されるべきかどうか、を、例えば上記の式２２および式２３にしたがう計算を通じて、保持される最大パルス振幅に基づいて判定／計算／決定／選択すること（Ｓ３）、
・所定のワード長より多くが必要とされる場合、最良の二乗相関項／パラメータ／値と最良の累積エネルギ項／パラメータ／値とを所定のワード長より多いもの、例えば３２ビットワードや６４ビットワードによって表すこと、
・所定のワード長より少ないものが決定される場合、第１ループを実行すること、
・所定のワード長より多くが決定される場合、所定のワード長より多いワード長のワードで表された最良の累積エネルギ項および最良の二乗相関項で第２の代替的ループを実行すること。
【０１１３】
通信デバイスは、上で定義されたとおり、携帯電話やビデオカメラやサウンドレコーダやタブレットやデスクトップやラップトップやＴＶセットトップボックスやホームサーバ／ホームゲートウエイ／ホームアクセスポイント／ホームルータなどの形のユーザ装置（ＵＥ）であってもよい。
【０１１４】
さらに別の態様は、コンピュータプログラムの上記実施の形態のうちの任意のものが保持されるコンピュータ可読保持媒体５（図１０参照）である。コンピュータ可読保持媒体は、ＥＥＰＲＯＭ（電気的消去可能ＰＲＯＭ）やＦＰＧＡや（ソリッドステートドライブを含む）フラッシュメモリやハードドライブなどの揮発性または不揮発性メモリの形をとってもよい。
【０１１５】
通信デバイス１の実施の形態は図９に示される。ＰＶＱ−形状サーチを行うために、通信デバイス１は、以下のユニットのうちのひとつ、ひとつ以上または全てを備える。
−例えば上記の式１１および式１２にしたがい入力（ターゲット）ベクトル（ｘ（ｎ））の最大絶対値（ｘａｂｓｍａｘ）を決定、計算または取得するための第１決定部Ｕ１、
−例えば上記の式１９を通じて符号付き３２ビットワードで次のループの累積インループ相関値の可能なアップシフトを計算することにより、少なくとも最大絶対値（ｘａｂｓｍａｘ）に基づいて相関値の可能なアップシフトを決定、計算または取得するための第２決定部Ｕ２、
−最終単位パルスの数（Ｋ）がしきい値（ｔｐ）よりも高くなりそうな場合、例えば上記の式１３および式１４にしたがい定義されてもよい上記のベクトル（ｙ（ｎ））の式２６にしたがって計算される最大パルス振幅（ｍａｘａｍｐｙ）値／情報を追跡／保持するための格納部Ｕ３、
−インループエネルギを表すために所定のワード長より多いこと、例えば符号付き１６ビットワードより多いことや符号付き３２ビットワードより多いこと、が必要かどうかまたはそれが使用されるべきかどうか、を、例えば上記の式２２および式２３にしたがう計算を通じて、保持される最大パルス振幅に基づいて判定／計算／決定／選択するための選択部Ｕ４、
−選択部によって所定のワード長より多くが選択された場合、最良の二乗相関項／パラメータ／値と最良の累積エネルギ項／パラメータ／値とを所定のワード長より多いワード長、例えば３２ビットワードや６４ビットワードで生成するための表現部Ｕ５、
−インナループ処理部Ｕ６であって、
・選択部によって所定のワード長より少ないものが選択された場合、第１ループを実行し、
・所定のワード長より多いものが決定された場合、所定のワード長より多いワード長のワードで表される最良の累積エネルギ項および最良の二乗相関項で第２の代替的ループを実行する、ためのインナループ処理部。
【０１１６】
上記のパラグラフで言及されたユニットは、通信ユニットのＤＳＰの形でコーデック／符号器２に含まれてもよいし、さらにはＤＳＰのハードウエアベクトル量子化器に含まれてもよい。代替的な実施の形態では、上記のパラグラフの全てのユニットは、通信デバイスにソフトウエアとして実装される。
【０１１７】
図９にさらに示される通り、通信デバイス１は符号器／コーデックに関するさらなるユニットを備えてもよく、特にベクトル量子化およびＰＶＱ−形状サーチに関するユニットを備えてもよい。そのようなユニットは、本願に含まれる記載および図面に係る形状サーチを可能とするよう構成される。
【０１１８】
図９に示される例示的なユニットは以下の通りである。
−図７に関連して説明されたオプションのステップＳ２１を行うためのＰＶＱバンド分割部Ｕ７、
−以下で図７に関連して説明されるステップＳ２４を行うための比較部Ｕ８、
−以下で説明されるステップＳ２５を行うためのＰＶＱベクトル生成部Ｕ９、
−以下で説明されるステップＳ２６を行うための開始点生成部Ｕ１０、
−以下で説明されるステップＳ２７を行うためのパラメータ計算部Ｕ１１、
−例えば形状サーチにＫおよびＮを供給するためのビット割り当て部Ｕ１２、
−本明細書で開示されるＰＶＱ−形状サーチからの出力のレシーバとして見ることが可能な、ＰＶＱインデクシング部Ｕ１３、
−以下で説明されるステップＳ３６を行うための正規化部Ｕ１４、
−以下で説明されるステップＳ３７を行うための出力部Ｕ１５。
【０１１９】
通信デバイスへのソフトウエア実装の場合、通信デバイス１の実施の形態は、プロセッサ４とメモリの形でのコンピュータプログラム保持製品５とを備える通信デバイスとして定義されてもよい。そのメモリはそのプロセッサによって実行可能なインストラクションを含み、それによりその通信デバイスは以下のうちのひとつ、ひとつ以上またはすべてを実行するよう動作可能である。
−例えば上記の式１１および式１２にしたがい入力（ターゲット）ベクトル（ｘ（ｎ））の最大絶対値（ｘａｂｓｍａｘ）を決定、計算または取得する、
−例えば上記の式１９を通じて符号付き３２ビットワードで次のループの累積インループ相関値の可能なアップシフトを計算することにより、少なくとも最大絶対値（ｘａｂｓｍａｘ）に基づいて相関値の可能なアップシフトを決定、計算または取得する、
−最終単位パルスの数（Ｋ）が例えば１２７単位パルスであってもよいしきい値（ｔｐ）よりも高くなりそうな場合、例えば上記の式１３および式１４にしたがい定義されてもよい上記のベクトル（ｙ（ｎ））の式２６にしたがって計算される最大パルス振幅（ｍａｘａｍｐｙ）値／情報を追跡／保持する、
・インループエネルギを表すために所定のワード長より多いこと、例えば符号付き１６ビットワードより多いことや符号付き３２ビットワードより多いこと、が必要かどうかまたはそれが使用されるべきかどうか、を、例えば上記の式２２および式２３にしたがう計算を通じて、保持される最大パルス振幅に基づいて判定／計算／決定／選択する、
・所定のワード長より多くが必要とされる場合、最良の二乗相関項／パラメータ／値と最良の累積エネルギ項／パラメータ／値とを所定のワード長より多いもの、例えば３２ビットワードや６４ビットワードによって表す、
・所定のワード長より少ないものが決定される場合、第１ループを実行する、
・所定のワード長より多くが決定される場合、所定のワード長より多いワード長のワードで表された最良の累積エネルギ項および最良の二乗相関項で第２の代替的ループを実行する。
【０１２０】
態様および実施の形態をさらに説明するために、それらのいくつかは以下に図７−８に関連して説明されるであろう。
【０１２１】
図８は、現れてきている３ＧＰＰ  ＥＶＳの送信側の概要を提供する。その送信側はＥＶＳ符号器３を含み、ここではその符号器３は通信デバイス１に含まれている。
【０１２２】
図７は、図５−６に示される実施の形態に関連するいくつかの実施の形態を説明する別法におけるいくつかの方法ステップを示す。図７に関して言及されたステップのいくつかはＰＶＱ−形状サーチに関連して行われると言うことが可能であるが、そのステップのうちのいくつかはＰＶＱ−形状サーチの前に実行可能であると言うこともできることは明らかであろう。オプションの第１ステップＳ２１において、ＰＶＱバンド分割が行われる。
【０１２３】
オプションでステップＳ２１からの形状ターゲットサブベクトルは第２ステップＳ２２で受け取られる。ここで、実施の形態によっては、ｇｓｕｂ、ｇｍａｘおよびＮＳが受け取られてもよい。
【０１２４】
図５のステップＳ１に対応する第３ステップＳ２３において、例えばまずターゲットベクトルのサブベクトルｘ（ｎ）の絶対値を計算し次いでサブベクトルの最大の絶対値を選択することにより、ターゲットベクトルの最大絶対値が決定される。
【０１２５】
オプションの第４ステップＳ２４において、ターゲットベクトルの値が第１しきい値以下か否かが判定される。しきい値は、非常に低いエネルギ値を有すると考えられるターゲットベクトルを「フィルタアウト」するよう設定される。ある実施の形態では、上述の通り、しきい値はゼロに等しく設定されうる。この第４ステップにおいて、サブベクトル利得が第２しきい値以下か否かが決定されうる。ある実施の形態では第２しきい値はゼロに設定される。しかしながら、他の実施の形態では、第２しきい値は、処理されるワードについて使用される精度に依存して機械イプシロンに設定されてもよい。
【０１２６】
第４ステップＳ２４においてターゲットベクトルが第１しきい値以下であると決定された場合および／またはサブベクトル利得が第２しきい値以下であると決定された場合、オプションの第５ステップＳ２５においてＰＶＱ−ベクトルが生成される。ある実施の形態では、生成は、最初の位置
【数３４】
2020010353.tif 000037
にＫ単位パルスの半分を割り当て、かつ、残りの単位パルスは最後の位置（ｙ［Ｎ−１］＝ｙ［Ｎ−１］＋（Ｋ−ｙ［０］） ）に割り当てられることにより決定論的に生成される。このステップは第４ステップＳ２４と合わせて、実際のＰＶＱ−形状サーチの全体をバイパスしているとして見ることもできるし、一般的なＰＶＱ−形状サーチ手順のコンテキスト内のサブルーチンとして見ることもできる。
【０１２７】
オプションの第６ステップＳ２６において、ＰＶＱ−形状サーチがしたがうｙの初期値（開始点）、ｙ＿ｓｔａｒｔが設定される。この初期値はＫとＮとの間の比に依存する。その比が係数当たり０．５単位パルスであってもよい第３しきい値より大きい場合、以降のステップにおける初期ベクトルｙ＿ｓｔａｒｔとしてＫ−１サブピラミッドへの第１射影が使用される。第１射影は上記の式１３および式１４にあるように計算されてもよい。第３しきい値より小さい場合、初期ベクトルｙ＿ｓｔａｒｔは０がプレ配置された単位パルスから開始すると決定される。
【０１２８】
第７ステップＳ２７において、続くＰＶＱ−形状サーチステップのための準備として、ｙ＿ｓｔａｒｔにおける全ての初期ベクトル値はゼロに設定される。このステップにおいて、累積単位パルス数ｐｕｌｓｅｔｏｔと称される第１パラメータと、累積相関ｃｏｒｒｘｙ（ｐｕｌｓｅｔｏｔ）と称される第２パラメータと、累積エネルギｅｎｅｒｇｙｙ（ｐｕｌｓｅｔｏｔ）と称される第３パラメータと、を例えばそれぞれ式１５−１７にしたがい、計算する。このステップにおいて、ｅｎｌｏｏｐｙ（ｐｕｌｓｅｔｏｔ）と称される第４パラメータを、上記の式１８にしたがい計算してもよい。
【０１２９】
第８ステップＳ２８において、ＰＶＱ−形状サーチを開始する。あるいはまた、それを別の視点から表現すると、以前に取得、決定または計算されたＫ、Ｎ、Ｘ＿ａｂｓ、ｍａｘ＿ｘａｂｓおよびｙそしてある実施の形態ではｇｓｕｂ、ｇｍａｘおよびＮＳを助けとする、Ｋまでの残存単位パルスについての、ＰＶＱ−形状サーチの第２ファインサーチ部分を開始する。このファインサーチのいくつかの実施の形態の詳細なステップは例えば図６に十分に示されている。しかしながら、ある実施の形態では、ファインサーチは、ファインサーチまたはインナループが行われる単位パルスのうちの少なくともいくつか、ある実施の形態ではその全て、について計算される、相関値のアップシフトｃｏｒｒｕｐｓｈｉｆｔと称される第５パラメータ／値の決定を含むことを強調しておく。ある実施の形態では、符号付き３２ビットワードでの次のループの累積インループ相関値の可能なアップシフトは上記の式１９に基づいて計算され、次いで式２０の相関値ｃｏｒｒｘｙの計算への入力としてｃｏｒｒｕｐｓｈｉｆｔが使用される。
【０１３０】
第９ステップＳ２９はファインＰＶＱ−形状サーチの一部と称されてもよい。第９ステップＳ２９において、最終単位パルスの数Ｋが最終単位パルスの数についての第３しきい値ｔｐより大きくなりそうか否かが判定される。そうである場合、第１０ステップＳ３０において、最大パルス振幅ｍａｘａｍｐｙが格納される。
【０１３１】
第１１ステップＳ３１において、例えば式２２にしたがい第６パラメータｅｎｍａｒｇｉｎが計算される。
【０１３２】
第１２ステップＳ３２において、第６パラメータは、所定のワード長に対応する第４しきい値と比較される。
【０１３３】
回答が（図７のステップＳ３２において）ＹＥＳであるか（付録１のＡｎｓｉ−コード例において）Ｆａｌｓｅである場合、すなわち例示的な式／決定２３のｅｎｍａｒｇｉｎが第４しきい値「１６」以上である場合、ステップＳ３３において、ファインサーチの第２ループよりも速く「粗い」第１ループが実行される。第１ループの実施の形態は例えば図６に示される。
【０１３４】
回答が（図７のステップＳ３２において）「Ｎｏ」であるか（付録１のＡｎｓｉ−コード例において）Ｔｒｕｅである場合、すなわち例示的な式／決定２３のｅｎｍａｒｇｉｎが「１６」より小さい場合、第１４ステップＳ３４において、第７パラメータすなわち最良の二乗相関項／パラメータ／値と、第８パラメータすなわち最良の累積エネルギ項／パラメータ／値と、を所定のワード長より多いワード長となるように、生成／変換する。これらのパラメータは次いで、第１５ステップＳ３５において、ファインサーチのより詳細な第２インナループで使用される。第２ループの実施の形態は例えば図６により詳細に示される。
【０１３５】
第１６ステップＳ３６において、少なくとも各ノンゼロＰＶＱ−サブベクトル要素には適切な符号が割り当てられ、ベクトルは単位エネルギに対してＬ２正規化される。ある実施の形態では、バンドが分割された場合、それはサブベクトル利得ｇｓｕｂでスケールされる。式２８に基づき正規化されたｘｑを決定してもよい。このステップの例示的な手順は上でより完全に記載される。
【０１３６】
第１７ステップＳ３７において、ＰＶＱ−形状サーチ処理から正規化されたｘｑおよびｙが出力され、例えばコーデックに含まれるＰＶＱ−インデクシング処理に転送される。
【０１３７】
実施の形態および態様のいくつかの利点
上記の態様および実施の形態のうちの少なくともいくつかにより可能となる、従来技術に対するいくつかの利点は以下の通りである。
【０１３８】
現在の累積最大相関のプレ解析を使用した提案される相関スケーリング方法／アルゴリズムは、制限された精度のＰＶＱ−形状量子化サーチ実装の最悪の場合の（最小）ＳＮＲを改善する。前段階相関マージン解析における適応的基準は、非常にわずかな追加的複雑さを要求する。さらに、例えば単位エネルギに対するターゲットベクトルｘの高コストなプレ正規化は不要である。
【０１３９】
予備的結果における最大パルス振幅の追跡を使用した適応的基準と、それに続く例えばソフト１６／３２ビット精度インナループ決定に対する最悪の場合の累積エネルギのプレ解析と、は、非常にわずかな追加的計算的複雑さを要求し、かつ、よいトレードオフを提供する。トレードオフとは、高精度相関および高精度エネルギ指標を関係する入力信号について使用しつつも複雑さを低く維持し、かつさらに主観的に重要なピーク性の信号にはより多くの精度が割り当てられることである。言い換えると、実施の形態および態様のうちの少なくともいくつかは、コンピュータ／プロセッサそのものの機能を改善する。
【０１４０】
以下の付録２の上のテーブル２／３において、適応的精度を使用した例示的ＰＶＱ−ベースのシステムの論理コストは6.843 WMOPSであることが見て取れる。全ての（任意のＫについての）インナサーチループにおいて３２ビットのエネルギおよび二乗相関精度を使用する場合、コストは10.474 WMOPSに増大する。
【０１４１】
結語
上述の実施の形態は単に例として与えられており、提案される技術はそれらに限定されないことは理解されるべきである。本請求の範囲から離れることなく、実施の形態に対して種々の変更や組み合わせや変化を加えることができることは、当業者に理解されるであろう。特に、技術的に可能であれば、異なる実施の形態の異なる部分的解決手段を他の構成と組み合わせることができる。
【０１４２】
「備える（comprise）」や「備えている（comprising）」という言葉を使用する場合、それは非限定的として解釈されるべきである、すなわち、「少なくとも  からなる（consist at least of）」を意味する。
【０１４３】
ある代替的な実装では、ブロック中に記載された機能／動作はフローチャートに記載された順序通りではない形で生じうることを注意しておく。例えば、連続して示される２つのブロックは実際は実質的に同時に実行されてもよいし、ある場合にはそれらのブロックは逆の順序で実行されてもよいのであって、これは含まれる機能／動作に依存する。さらに、フローチャートおよび／またはブロック図の所与のブロックの機能は複数ブロックへと分割されてもよいし、および／またはフローチャートおよび／またはブロック図の２以上のブロックの機能は少なくとも部分的に統合されてもよい。最後に、示されるブロックの間に他のブロックが追加／挿入されてもよいし、および／またはブロック／動作は発明思想の範囲から離れることなく除かれうる。
【０１４４】
相互作用するユニットの選択は、本開示内でのユニットの名称付与と共に、例示のみを目的としており、上記の方法のうちの任意のものを実行するのに適したノードは提案された手順動作を実行可能とするために複数の代替的方法で構成されうることは理解されるべきである。
【０１４５】
本開示で説明されるユニットは論理エンティティとして見なされるべきであり、別個の物理的エンティティとして見なされる必要性はないことを注意しておく。
【０１４６】
単数形での要素への参照は、そのように明記されない限り、「ひとつおよびひとつのみ」を意味することを意図しておらず、むしろ「ひとつ以上」を意味することを意図するものである。上述の実施の形態の要素に対する構造的均等物および機能的均等物であって当業者に知られている物の全ては、明示的に、本明細書に参照により組み入れられ、本明細書によって包含されることが意図されている。さらに、デバイスや方法が、本明細書によって包含されるために、本明細書で開示される技術により解決されるべきおのおの全ての課題を解決する必要は無い。
【０１４７】
本明細書におけるいくつかの例では、開示される技術の説明を不必要な詳細で不明瞭にしないよう、周知のデバイス、回路および方法の詳細な説明は省略される。開示される技術の原理、態様および実施の形態に言及する本明細書の全ての記載は、その具体例と共に、その構造的均等物および機能的均等物の両方を包含することが意図されている。加えて、そのような均等物は、現在知られている均等物および将来開発される均等物、例えば同じ機能を行う開発された任意の要素、の両方を、構造如何に関わらず、含むことが意図されている。
【０１４８】
略語
N ベクトル次元
Ns サブベクトル次元
x ターゲットベクトル
xq 量子化形状ベクトル
yfinal Ｌ１ノルムＫに固守された整数ベクトル
K 最終単位パルスの数
k 累積単位パルスインデックスの数
n 係数またはサンプルインデックス
i サブベクトルインデックス
MDCT 変更離散コサイン変換
PVQ ピラミッドベクトル量子化器（量子化）
WC 最悪の場合
WMOPS 重み付け毎秒百万回動作
AccEn 累積エネルギ
ROM リードオンリーメモリ
PROM プログラムＲＯＭ
SNR 信号対雑音比
EVS エンハンストボイスサービス
3GPP  第３世代パートナーシッププロジェクト
DSP デジタルシグナルプロセッサ
CELT 拘束エネルギラップ変換
IETF インターネットエンジニアリングタスクフォース
MAC 乗算−累算
ACELP 代数的コード励起線形予測
EPS 機械イプシロン
【０１４９】
付録１：ＡＮＳＩ−Ｃコードでの実施の形態の例示的実装
以下は、ＳＴＬ  ２００９  Ｇ．１９１仮想１６／３２ビットを使用するＡＮＳＩーＣコードでの例示的実施の形態の実装の例である（ＤＳＰのシミュレーション）。
static
Word16 max_val_fx(                  /* o  : 入力ベクトルの最大値              */
const Word16 *vec,   /* i  : 入力ベクトル                                   */
const Word16 lvec    /* i  : 入力ベクトルの長さ                         */        
)
{
Word16 j,tmp;
tmp = vec[0];     move16();
FOR ( j=1 ; j<lvec ; j++ )
{ 
tmp = s_max(vec[j],tmp);
}
return tmp;
}
/*  pulse_totから始まる、en_dn_shiftにおける次元ループに要求されるエネルギ精度／ダウンスケーリングについての情報を伴う、ひとつの単一追加単位パルスのためのインナサーチループ、および準最適相関アップスケーリングに使用されるべき現在のmax_xabs絶対値。imaxで最良の位置に配置された単位パルスのインデックスを返す。
*/
static
Word16 one_pulse_search(const Word16 dim,       /* ベクトル次元       */
const Word16* x_abs,    /* 絶対ベクトル値 */
Word16* y,              /* 出力ベクトル          */ 
Word16 *pulse_tot_ptr, 
Word32* L_xy_ptr,       /* 累積相関 */
Word32* L_yy_ptr,       /* 累積エネルギ      */
Word16 high_prec_active, 
Word16 en_dn_shift,
Word16 max_xabs)         /* 現在のパルス累積最大振幅 */
{
Word16  i, corr_up_shift, corr_tmp, imax,  corr_sq_tmp, en_max_den, cmax_num, en_tmp;
Word32  L_tmp_en_lc, L_tmp_corr  ;
Word32  L_tmp_en, L_en_max_den, L_corr_sq_max, L_tmp_corr_sq; 
Word32  L_left_h, L_right_h;
UWord32 UL_left_l, UL_right_l, UL_dummy;
#ifndef NONBE_PVQ_SEARCH_FIX
Word16   corr_margin;
#endif
#ifdef  BE_CLEAN_PVQ_SEARCH
Word32  L_tmp;
UWord32 UL_tmp;
UWord16 u_sgn;
#endif
/* ベクトルへの各単位パルス追加の前に、相関精度を最大化 */
corr_up_shift     =  norm_l(L_mac(*L_xy_ptr, 1, max_xabs)); 
/* 次元ループにおける最悪の場合のL_xy更新のプレ解析        , 2 ops */
/* クリーンなＢＥコード、分割された低／高精度ループを伴う                                            */
/* 結果として得られるエネルギがリミット内にあるという条件付きで低い複雑さのen/corrサーチセクションをアクチベート */
/* より高次元の場合に典型的                                                                */
IF( high_prec_active == 0 )
{
en_max_den        =  0; /*move16()*/; /* OPT: moveはhigh_prec_activeを使用して以下としてセーブされる
en_max_den */         
cmax_num          = -1;  move16();    /* n==0についての第１更新を強制するよう要求   */                            
FOR(i = 0; i < dim; i++)     /* FOR 3 ops  */
{  
L_tmp_corr     = L_shl(L_mac(*L_xy_ptr,1,x_abs[i]), corr_up_shift ); /* 実際のインループターゲット */
corr_tmp          = round_fx(L_tmp_corr);                
corr_sq_tmp    = mult(corr_tmp, corr_tmp);  /* CorrSqは低い複雑さのたすき掛けについて１６ビットである */
L_tmp_en_lc    = L_mac(*L_yy_ptr, 1,y[i] );   
/*Q1 結果、エネルギは~14+1(Q1)+1(sign)=16ビットの範囲に亘りうる,  1 op */            
/* シフトの伴わないextract_lが、このセクションについては常に使用可能である。エネルギはより低いワードに留まることが保証されているからである。, 1 op */ 
en_tmp     = extract_l(L_tmp_en_lc); 
/* L_shl + round_fxもまた使用可能であるが、(2-3 ops)のアップシフトコストが追加されうる。*/      
/* 16/32ビット比較    WC (4 +1+1 + (1+1+1) = 9                       */
/*  corr_sq_tmp/en_tmp_den    >   cmax_num/en_max_den  */
/*  corr_sq_tmp * en_max_den  >   cmax_num * en_tmp    */                  /* IF         4 ops  */ 
IF( L_msu(L_mult(corr_sq_tmp, en_max_den),cmax_num , en_tmp)  > 0)         /*            2 ops  */ 
{
cmax_num    = corr_sq_tmp;  move16();    /* 1 op */
en_max_den  = en_tmp;       move16();    /* 1 op */
imax        = i;            move16();    /* 1 op */ 
}
} /* dim  */
} 
ELSE 
{   /* ベクトルエネルギが高くなるとき（ピーク性または多くのパルス）、高分解能セクションがアクチベートされる。 
*/ 
/* BASOPオペレータMpy32_32_ssはCorrSq項およびEnergy項の両方について高分解能を可能とするために使用される。 */
/*パフォーマンス:   浮動小数点リファレンスに近い                                                        */
L_en_max_den  = L_deposit_l(0);                                                          /* 1 op  */
L_corr_sq_max = L_deposit_l(-1); /* 第１更新を強制するよう要求   */                      /* 1 op  */
FOR(i = 0; i < dim; i++)                                                              /* FOR 3 ops */
{  
L_tmp_corr        = L_shl(L_mac(*L_xy_ptr,1,x_abs[i]), corr_up_shift );/* 実際のインループWC値 */
Mpy_32_32_ss(L_tmp_corr,L_tmp_corr, &L_tmp_corr_sq, &UL_dummy); 
/* CorrSq 32 bits,4 ops  */
L_tmp_en = L_mac(*L_yy_ptr, 1, y[i]);         /* Q1,エネルギはsign+19 bitsまでに亘る , 1 op    */
/* 最高の確度のために、最大アップシフトされた３２×３２ビットの符号付き値のペアを使用する              */
/*  (L_tmp_corr_sq / L_tmp_en)     >  (L_corr_sq_max/L_en_max_den)                          */
/*  (L_tmp_corr_sq * L_en_max_den) >  (L_corr_sq_max * L_tmp_en)                            */
Mpy_32_32_ss( L_en_max_den, L_tmp_corr_sq, &L_left_h, &UL_left_l);                  /* 4 ops */
Mpy_32_32_ss( L_tmp_en, L_corr_sq_max, &L_right_h, &UL_right_l);                    /* 4 ops */
/* 32/64ビット比較  WC (1+1+ 2x2+ 4 +(2+2+1) = 15                                       */
L_tmp  = L_sub(L_left_h, L_right_h);              /* 高い符号付きワードのチェック            1 op  */    
UL_tmp = UL_subNs(UL_right_l, UL_left_l, &u_sgn); 
/* 低い符号無しワードのチェック、 UL_subNsの">="によるスイッチに注意, 1 op */
IF( ( L_tmp > 0 )  ||  ( (L_tmp == 0)  &&  (u_sgn != 0 ) ) )   /* IF  4 ops */ 
{
L_corr_sq_max =  L_tmp_corr_sq;  move32(); /* 2 ops */
L_en_max_den  =  L_tmp_en;       move32(); /* 2 ops */
imax          =  i;              move16(); /* 1 op  */
}  
}  /* 次元ループ */     
} 
/*  最後に、次のパルスループのために、過去のL_xy, Lyyに発見された単位パルス寄与を追加    */
*L_xy_ptr = L_mac(*L_xy_ptr, x_abs[imax], 1);            /* xy_flt += xabs[imax];  Q12+1 */
*L_yy_ptr = L_mac(*L_yy_ptr, 1, y[imax]);                /* yy_flt += y[imax];           */
y[imax]           = add(y[imax],1);       move16();       /* Q0 追加パルス              */
(*pulse_tot_ptr)  = add((*pulse_tot_ptr) ,1);             /* トータルパルス和のインクリメント   */
return imax;
}
/*-----------------------------------------------------------------------*
* Function pvq_encode_fx()                                              *
*                                                                       *
* 基本的ＰＶＱサーチアルゴリズム:                                           *
*  より低い~(K-1)ピラミッドへの選択的Ｌ１ノルム射影             *
*  ＡＣＥＬＰ様の単位パルス追加ファインサーチが続く           *
*-----------------------------------------------------------------------*/
void pvq_encode_fx(
Encoder_State_fx *st_fx,
const Word16 *x,        /* i:   量子化対象ベクトル             Q15-3=>Q12       */
Word16 *y,              /* o:   生パルス  (スケールされてない短い) Q0               */
Word16 *xq,             /* o:   量子化されたベクトル               Q15              */
const short pulses,     /* i:   割り当てパルスの数                      */
const short dim,        /* i:   ベクトル長  == N                          */
const Word16 neg_gain   /* i:  -サブベクトル利得   我々はQ15  0..1における−負の利得を使用する   */
)
{
Word16  i;
Word16 pulse_tot;
Word16 xabs[PVQ_MAX_BAND_SIZE];
Word16 max_xabs;
Word32 L_xsum; 
Word32 L_proj_fac; 
Word32 L_yy, L_xy;
Word16  max_amp_y, imax;
Word16  k, en_margin, en_dn_shift, high_prec_active ;
Word32 L_num, L_tmp;
Word16 proj_fac, tmp, shift_den,shift_num,shift_delta, num,den;
UWord16 u16_tmp;
Word16 dim_m1; 
Word32 L_isqrt;
Word16 neg_gain_norm, shift_tot;
Word16    high_pulse_density_flag; 
PvqEntry_fx entry;
/* 絶対ベクトルを生成し、絶対ベクトルの和を計算  */
L_xsum   =  L_deposit_h(0); 
max_xabs =  -1;                 move16();
FOR( i = 0; i < dim; i++)
{
xabs[i]    = abs_s(x[i]);                 move16();           /* Q12 */   
max_xabs   = s_max(max_xabs, xabs[i] );            /* 効率的なサーチ相関スケーリングのために */
L_xsum     = L_mac0(L_xsum, 1, xabs[i] );                     /* Q12に留まる */   
y[i]       = 0;                            move16();          /* init */
}
test();
IF( L_xsum == 0  ||  neg_gain == 0  )
{   /*  ゼロ入力またはゼロ利得の場合 */
/*  最初と最後に「半分の」パルス和を置くか、全てのパルスを位置０に置く */ 
pulse_tot = pulses;        move16();
dim_m1    = sub(dim,1);
y[dim_m1] = 0;             move16();
y[0]      = shr(pulses,1); move16();
y[dim_m1] = add(y[dim_m1], sub(pulses, y[0]));  move16();
L_yy      = L_mult(y[0],y[0]); /* 正規化のためL_yyが必要 */
if(dim_m1 != 0) {
L_yy = L_mac(L_yy, y[dim_m1],y[dim_m1]);  /* (single basop) */
}  
} 
ELSE
{  /* 通常サーチ */
/* proj_fac_flt = (pulses - 1)/xsum_flt; */  /* normalize to L1 norm = absolute k-1 pyramid */
num = sub(pulses,1);
high_pulse_density_flag = 0; move16();
if ( sub(pulses, shr(dim, 1)) > 0 )
{
high_pulse_density_flag = 1;  move16();
}
test();
IF( (num > 0) && (high_pulse_density_flag != 0) )
{       
shift_den = norm_l(L_xsum);                      /* x_sum入力  Q12                         */
den       = extract_h(L_shl(L_xsum, shift_den)); /* now in Q12+shift_den                     */
L_num     = L_deposit_l(num);
shift_num = sub(norm_l(L_num)   ,1);
L_num     = L_shl(L_num, shift_num) ;             /* now in Q0 +shift_num -1                  */
proj_fac  = div_l(L_num,  den );                  /* L_numは常にden<<16より小さいものでなければならない */
shift_delta=sub(shift_num,shift_den);         
L_proj_fac = L_shl(L_deposit_l(proj_fac), sub(9, shift_delta));  /* 固定Q12へと運ぶ     */
}
pulse_tot = 0;                   move16();
L_yy = L_deposit_l(0);
L_xy = L_deposit_l(0);
/* パルス密度が０．５よりも大きい場合、より低いサブピラミッド上の開始位置を見つける */
IF((num > 0) &&  (high_pulse_density_flag != 0) ) 
{
FOR( i = 0; i < dim ; i++) /* max 64 */
{
/* y_flt[i]   = (short)floor(xabs_flt[i] * proj_fac_flt); */    /* FLOATピラミッド切頭 */
/* y[i]       =  shr(xabs[i]*L_proj_fac);                 */    /* BASOPピラミッド切頭 */
Mpy_32_16_ss(L_proj_fac,xabs[i],&L_tmp,&u16_tmp);               /*Q12 *Q12  +1 */
y[i]        = extract_l(L_shr( L_tmp, 12+12-16+1 )); move16();  /* ピラミッド「切頭」 */
/* Q12 *Q12  ->  Q0 */  
pulse_tot   = add(pulse_tot, y[i]);          /* Q0                                         */
L_yy        = L_mac(L_yy, y[i], y[i]);       /* エネルギ、結果はL_macにより２だけスケールアップされる */
L_xy        = L_mac(L_xy, xabs[i], y[i]);    /* Corr, Q0*Q12  +1 --> Q13                   */
}
}
/*   ＰＶＱファインサーチループの説明            */    
/*   ＡＣＥＬＰ様の完全CorrSq/Energyサーチの実行 */
/*   基本サーチロジックは、出力ベクトルｙにおける各位置ｎにひとつの単位パルスを追加することをテストし、相関項およびエネルギ項を繰り返し更新することである
Rxy(k,n)   = Rxy(k-1) + 1*abs(x(k,n))         % ターゲットと単位相関との積の追加
Ryy(k,n)   = Ryy(k-1) + 2*y(k-1,n) + 1^2      % 単位エネルギ寄与の追加   
RxySq(k,n) = Rxy(k,n)*Rxy(k,n)
minimize ( -Rxy(k,n)/Sqrt(Ryy(k,n)) ),          over n  and k
( or equiv. maximize ( RxySq(k,n)/Ryy(k,n) ),  over n  and k  )
RxySq(k,n)            bestRxySq
-----------         >     ---------                  ? 最良候補の更新
Ryy(k,n)                bestRyy
bestRyy *  RxySq(k,n)  >   bestRxySq *  Ryy(k,n)   ?  最良候補の更新 
Misc:
Ryy(k,n)の1^2は次元ループの前に追加可能。   
Ryy(k,n)はオプションで、ひとつの掛け算／シフトを避けるために、２．０だけ予めダウンスケーリングされうる。
Rxy(k,n)は、RxySqを最適化するために、各単位パルスループに対して動的にスケール可能。           
CorrSqTerm =(Rxy(k,n))^2,はWord16/Word32変数において最大精度を有する   
Energy term:Ryy(k, n)
はゼロになるべきではない。すなわち、大抵の場合切頭にならないような十分な精度を有する
すなわち、１２７パルスより多くがQ1に累積された場合、３２ビット変数の使用が好ましい
k=127=>log2(127^2 ) = 13.9774 bits,  Q1符号付きにフィットする。Q1により２つへのプレ分割はうまくいく。               
k=255=>log2(255^2 ) = 15.9887 bits,  すなわち、１ビットスケーリング。Q1符号無し１６ビット値にフィットする。
次元アスペクト:
６以上の次元は常に１６ビットエネルギセーフである。最大パルスは９６であるからである。
(for 1+31 bits short codewords)
次元５、４、３、２には１２７パルスより高いもの（またはより低いもの）が割り当てられてもよい  
次元１はサーチを必要としない。符号のみが関係する。 
現在、我々はKMAX=512を有する。より正確には、DIM 5についてkmaxは238である
DIM 4,3,2,1 kmaxは512である
符号無しＤＳＰ演算が使用されてもよい, 
しかしながらそうすると「スタートアップ」ケース／今は負のセンチネルを特別な方法で扱わなければならない。
また、さらに、現在UL_mac,UL_mac0,UL_msu,UL_msu0はＳＴＬ符号無しbasopsとして利用可能でない。
ＰＶＱサーチコードを効率的に働かせるために、我々は以下を行う:  
1. これまでの累積相関(k-1パルスのRxy)を解析することにより、相関項の準最適norm_lベースダイナミックアップスケーリングを常に使用し、プレ解析された最大の可能なターゲット値max_xabsを使用する
2. プレ累積エネルギによってエネルギ項の１６または３２ビット表現を選択的に使用する
さらに、エネルギ項Ryyが１６ビットより多くを必要とする場合、我々は３２ビットエネルギ表現にスイッチし、相関Rxyについてより高い３２ビット表現にスイッチする。また、歪みたすき掛け計算の精度を６４ビット程度まで増やす。      
*/
/* Rxy_max=(k,*)= max( L_xy + 1*max_x_abs)       
準最適L_xy正規化(corr, corrSq)のために必要な解析    */
/* Ryy_max(k,*) = max(L_yy(k-1) + .5  + 1*max_amp_y(k-1)) 
pulses > 127の場合のエネルギ(L_yy)精度選択のために必要な解析 , 
( (127^2)*2 fits in Signed Word16) */
L_yy=L_shr(L_yy,1);   /* サーチループドメインについて２だけスケールダウン  */ 
IF (sub(pulses,127)<=0 )  
{   /* ＬＣインナループ、６以上の次元の場合は常に、１…５次元の場合はときどき、ここに入る。  */
/* ( エネルギ高精度が非アクティブの場合、max_amp_yは不要で、max_amp_y(k-1)更新はない )           */
FOR (k=pulse_tot; k<pulses;k++){
L_yy = L_add(L_yy,1);  /* pulse_tot+1について、.5がエネルギに追加 */
imax = one_pulse_search(dim, xabs,y,&pulse_tot,&L_xy,&L_yy,0, 0,max_xabs); 
}
} 
ELSE 
{  /* HC or LC+HC インナループ */ 
max_amp_y = max_val_fx(y, dim); /* このループは最大５の値に亘る  */
/* pulses_sumが１２７を超える場合、射影されたｙからのmax_amp_yが必要      */
/* ３２ビットエネルギの第１セクションは非アクティブ、しかしながらmax_amp_yは更新され続ける    */
FOR( k=pulse_tot; k<128; k++){
L_yy        = L_add(L_yy,1);                            /* .5 追加 */
imax        = one_pulse_search(dim, xabs,y,&pulse_tot,&L_xy,&L_yy,0,0,max_xabs);  
max_amp_y   = s_max(max_amp_y, y[imax]);
}
/* より大きなパルス数を伴う第２セクション、３２ビットエネルギ精度は適応的に選択される、max_amp_yは更新され続ける                */
FOR( k=pulse_tot; k<pulses; k++){
L_yy        = L_add(L_yy,1);    /* .5追加          */
en_margin   = norm_l(L_mac(L_yy,1, max_amp_y)); /*最大の「追加」を見つける, マージン,~2 ops */
en_dn_shift = sub(16, en_margin);  /* より低いワードへのシフトの計算 */
high_prec_active = 1;     move16();
if( en_dn_shift <= 0 ){  /* 実際に必要な場合にのみ３２ビットエネルギを使用 */       
high_prec_active = 0;  move16();            
}
/* ３２ビットエネルギおよび相関は適応的にアクティブ, max_amp_yは更新され続ける */
imax        = one_pulse_search(dim,xabs,y,&pulse_tot,&L_xy,&L_yy,high_prec_active,
en_dn_shift, max_xabs); 
max_amp_y   = s_max(max_amp_y, y[imax]);
}              
}
L_yy = L_shl(L_yy,1);  /*  yy= yy*2.0  */  /* 単位／逆利得計算に対してエネルギを正しくするために、サーチループ解析エネルギダウンシフトを１だけ補償 */  
}
/* 単位エネルギ(L2)正規化スケーリングの適用、常に少なくともひとつのパルス、したがってdiv-by-zeroチェックは不要 */
L_isqrt        = L_deposit_l(0);                      
IF( neg_gain != 0  ){ 
L_isqrt = Isqrt(L_shr(L_yy,1));      /* 注意:fltにあるようなひとつの単一利得ファクタは計算されない */
} 
shift_num     = norm_s(pulse_tot);                      /* yの最大の可能なパルス振幅を説明、
max_amp_yが利用不可でも使用可能 */
shift_den     = norm_s(neg_gain);                        /* 利得ダウンスケーリングシフトを説明   */
neg_gain_norm = shl(neg_gain, shift_den);         /* このノルムなしで10 dBまでの損失   */
shift_tot     = sub(add(shift_num, shift_den), 15);
/* DSP OPT : 平均の複雑さを抑えるために、共通利得==1.0の場合について、特別なループを実行可能  */
/* DSP OPT PROM : 共通復号器正規化ループの再利用                                      */
L_isqrt = L_negate(L_isqrt);
FOR( i = 0; i < dim; i++)
{
tmp = shl(y[i],shift_num);  /* アップシフトされたabs(y[i])がスケーリングに使用される */
if( x[i] < 0 ) 
{
tmp = negate(tmp);                                    /* 符号付与 */
}
if( y[i] != 0 )           
{
y[i]      = shr(tmp, shift_num);   move16();  /* y[i}の符号の更新,~range -/+ 512),array move */
}
Mpy_32_16_ss( L_isqrt, tmp, &L_tmp, &u16_tmp);            /* Q31*Q(0+x)  +1         */
Mpy_32_16_ss( L_tmp, neg_gain_norm , &L_tmp, &u16_tmp);   /* Q31*Q(0+x) *Q15 +1     */
L_tmp   = L_shr(L_tmp, shift_tot);                        /* Q31+x                  */       
xq[i]   = round_fx(L_tmp);         move16();              /* Q15, array move        */  
L_xq[i] = L_tmp;                                          /* Q31 現在不使用  */ 
}
/* 発見されたＰＶＱベクトルを短いコードワードにインデックスする */
entry = mpvq_encode_vec_fx(y, dim, pulses);  
/* 短いコードワードをレンジ復号器に送信 */
rc_enc_bits_fx(st_fx,  UL_deposit_l(entry.lead_sign_ind) , 1);  /* 0 or 1 */
IF( sub( dim, 1) != 0 )
{    
rc_enc_uniform_fx(st_fx, entry.index, entry.size);
} 
return;
【０１５０】
上記のコードは全ての当業者にとって読みやすいものであり、より詳細に説明する必要はない。しかしながら、当業者でない者のために、関係演算子「＝＝」は、「Ａ＝＝Ｂ」の例ではＡの値とＢの値とが等しい場合に論理１（真）に設定される論理値を返し、そうでなければ論理０（偽）を返すような演算子であることを言及しておく。L_mac (L_v3, v1, v2) = L_v3+v1*v2という意味の範囲で、L_macは乗算−累算である。
【０１５１】
付録２： テーブル化されたシミュレーション結果
シミュレーションの背景
本明細書の開示の実施の形態がシミュレーションされた。行われた全てのＰＶＱ−形状サーチシミュレーションについて、使用されたビットレートは64000 bpsであり、コーデックはＭＤＣＴモードで動作し、初期ＭＤＣＴ係数サブバンドサイズは［8, 12, 16, 24, 32］係数であった。これらのバンドはより小さいバンドセクションに非常によく分割され、各セクションはＰＶＱバンド分割アルゴリズムによりサブベクトルによって表現される。例えば、サイズ８のバンドは、十分なビットが割り当てられる場合、例えば「４、４」や「３、３、２」などのより小さいサブセクションに分割されうる。典型的には、各最終サブベクトルの形状コーディングのために最大３２ビットが使用可能となるように、各バンドは分割される。
【０１５２】
このＰＶＱ−インデクシング実装では、サイズ８のバンドは３６単位パルスまでを有し、サイズ７のサブセクションは５３単位パルスまでを有し、サイズ６のセクションは９５単位パルスまでを有し、サイズ５のセクションは２３８単位パルスまでを有し、サイズ４、３、２、１のセクションは５１２単位パルスまでを有しうる。パルス数が多いより短いセクションはバンド分割により動的に生成されるので、それらは、より長いサブベクトルサイズよりもまれである。以下の結果テーブルのＷＭＯＰＳ値は、( PVQ-pre-search, PVQ-fine search , PVQ-normalization and PVQ-indexing.)を含む。以下の結果テーブルにおける「％同一」値は、非拘束浮動小数点ＰＶＱ形状サーチに対する、評価された限定精度形状サーチアルゴリズムで発見された同一ベクトルの数である。
【０１５３】
結果テーブル
【表２】
2020010353.tif 000038
【表３】
2020010353.tif 000039
【図１】
2020010353.tif 000043
【図２】
2020010353.tif 000044
【図３】
2020010353.tif 000045
【図４】
2020010353.tif 000046
【図５】
2020010353.tif 000047
【図６】
2020010353.tif 000048
【図７】
2020010353.tif 000049
【図８】
2020010353.tif 000050
【図９】
2020010353.tif 000051
【図１０】
2020010353.tif 000052
【図１１ａ】
2020010353.tif 000053
【図１１ｂ】
2020010353.tif 000054
【図１１ｃ】
2020010353.tif 000055
【図１２】
2020010353.tif 000056
【手続補正書】
【提出日】令和1年9月11日(2019.9.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
デジタルシグナルプロセッサにより行われるピラミッドベクトル量子化器（ＰＶＱ）形状サーチ方法であって、前記ＰＶＱはターゲットベクトルｘを入力ベクトルとして取得し、インナ次元サーチループの中で単位パルスを繰り返し加えることでベクトルｙを導き、前記方法は、
単位パルス追加のための次のインナ次元サーチループに入る前に、前記入力ベクトルｘと前記ベクトルｙとの間の、次のインナ次元サーチループの累積インループ相関値、ｃｏｒｒｘｙのビットワードでの可能なアップシフトを、前記入力ベクトルｘの最大絶対値、ｘａｂｓｍａｘに基づいて、決定すること（２０３）を含む方法。
【請求項２】
前記ベクトルｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要（１０２、２０４、３０４、４０３）な場合、ｅｎｌｏｏｐｙを表すためにより長いビットワード長を使用して前記インナ次元サーチループの計算を行う（１０３、２０５、３０５、４０４）ことをさらに含む請求項１に記載の方法。
【請求項３】
前記ベクトルｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、前記インナ次元サーチループにおける前記入力ベクトルｘと前記ベクトルｙとの間の二乗累積インループ相関値、ｃｏｒｒｘｙ２を表すためにより長いビットワード長を使用して前記インナ次元サーチループの計算を行う（３０５）ことをさらに含む請求項１または２に記載の方法。
【請求項４】
前記ベクトルｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、ｅｎｌｏｏｐｙを表すために第１ビットワード長を使用した第１単位パルス追加ループを用いることにより前記インナ次元サーチループの計算を行うこと（４０５）と、
ｅｎｌｏｏｐｙを表すために前記現在のビットワード長より多くが必要な場合、ｅｎｌｏｏｐｙを表すために、前記第１単位パルス追加ループよりも長いビットワード長を使用した第２単位パルス追加ループを用いることにより前記インナ次元サーチループの計算を行うこと（４０４）と、をさらに含む請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記ベクトルｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、所定の精度を有する第１単位パルス追加ループを用いることにより前記インナ次元サーチループの計算を行うこと（４０５）と、
ｅｎｌｏｏｐｙを表すために前記現在のビットワード長より多くが必要な場合、前記第１単位パルス追加ループよりも高い精度を有する第２単位パルス追加ループを用いることにより前記インナ次元サーチループの計算を行うこと（４０４）と、をさらに含む請求項１から４のいずれか１項に記載の方法。
【請求項６】
ｅｎｌｏｏｐｙを表すために前記現在のビットワード長より多くが必要か否かを、現在の前記ベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定することをさらに含み、
前記決定することは、前記次のインナ次元サーチループにおいて前記単位パルスがｍａｘａｍｐｙに関連付けられた前記ベクトルｙにおける位置に加えられる場合の特性を決定することを含む請求項２から５のいずれか１項に記載の方法。
【請求項７】
単位パルス追加のための前記インナ次元サーチループにおいて、前記ベクトルｙにおける各位置ｎについて、現在のｎの相関およびエネルギ値と、以前のｎの値から保存された二乗相関、ＢｅｓｔＣｏｒｒＳｑおよびエネルギ値ｂｅｓｔＥｎと、のたすき掛けを評価することで単位パルス追加のための前記ベクトルｙにおける位置ｎｂｅｓｔを
【数１】
2020010353.tif 000057
のように決定することをさらに含む請求項１から６のいずれか１項に記載の方法。
【請求項８】
前記入力ベクトルｘに関連するＫの最終値がしきい値を超える場合、ｍａｘａｍｐｙを追跡することをさらに含む請求項１から７のいずれか１項に記載の方法。
【請求項９】
ピラミッドベクトル量子化（ＰＶＱ）形状サーチのために構成されたデジタルシグナルプロセッサであって、前記ＰＶＱはターゲットベクトルｘを入力ベクトルとして取得し、インナ次元サーチループの中で単位パルスを繰り返し加えることでベクトルｙを導き、前記デジタルシグナルプロセッサは、
単位パルス追加のための次のインナ次元サーチループに入る前に、前記入力ベクトルｘと前記ベクトルｙとの間の次のインナ次元サーチループの累積インループ相関値、ｃｏｒｒｘｙのビットワードでの可能なアップシフトを、前記入力ベクトルｘの最大絶対値、ｘａｂｓｍａｘに基づいて、決定するよう構成されるデジタルシグナルプロセッサ。
【請求項１０】
さらに、前記ベクトルｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要な場合、ｅｎｌｏｏｐｙを表すためにより長いビットワード長を使用して前記インナ次元サーチループの計算を行うよう構成される請求項９に記載のデジタルシグナルプロセッサ。
【請求項１１】
さらに、前記ベクトルｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、第１ビットワード長を使用した第１単位パルス追加ループを用いることにより前記インナ次元サーチループの計算を行い、
ｅｎｌｏｏｐｙを表すために前記現在のビットワード長より多くが必要な場合、前記第１単位パルス追加ループよりも長いビットワード長を使用した第２単位パルス追加ループを用いることにより前記インナ次元サーチループの計算を行うよう構成される請求項９または１０に記載のデジタルシグナルプロセッサ。
【請求項１２】
さらに、前記ベクトルｙの累積エネルギに係る変数、ｅｎｌｏｏｐｙを表すために現在のビットワード長より多くが必要でない場合、所定の精度を有する第１単位パルス追加ループを用いることにより前記インナ次元サーチループの計算を行い、
ｅｎｌｏｏｐｙを表すために前記現在のビットワード長より多くが必要な場合、前記第１単位パルス追加ループよりも高い精度を有する第２単位パルス追加ループを用いることにより前記インナ次元サーチループの計算を行うよう構成される請求項９から１１のいずれか１項に記載のデジタルシグナルプロセッサ。
【請求項１３】
前記デジタルシグナルプロセッサは、さらに、ｅｎｌｏｏｐｙを表すために前記現在のビットワード長より多くが必要か否かを、現在の前記ベクトルｙの最大パルス振幅、ｍａｘａｍｐｙに基づいて決定するよう構成され、
前記決定することは、前記次のインナ次元サーチループにおいて前記単位パルスがｍａｘａｍｐｙに関連付けられた前記ベクトルｙにおける位置に加えられる場合の特性を決定することを含む請求項１０から１２のいずれか１項に記載のデジタルシグナルプロセッサ。
【請求項１４】
さらに、単位パルス追加のための前記インナ次元サーチループにおいて、前記ベクトルｙにおける各位置ｎについて、現在のｎの相関およびエネルギ値と、以前のｎの値から保存された相関、ＢｅｓｔＣｏｒｒＳｑおよびエネルギ値ｂｅｓｔＥｎと、のたすき掛けを評価することで単位パルス追加のための前記ベクトルｙにおける位置ｎｂｅｓｔを
【数２】
2020010353.tif 000058
のように決定するよう構成される請求項９から１３のいずれか１項に記載のデジタルシグナルプロセッサ。
【請求項１５】
さらに、前記入力ベクトルｘに関連する最終単位パルスの数、Ｋがしきい値を超える場合、ｍａｘａｍｐｙを追跡するよう構成される請求項９から１４のいずれか１項に記載のデジタルシグナルプロセッサ。
【請求項１６】
前記デジタルシグナルプロセッサが固定精度デジタルシグナルプロセッサである請求項９から１５のいずれか１項に記載のデジタルシグナルプロセッサ。
【請求項１７】
請求項９から１６のいずれか１項に記載の前記デジタルシグナルプロセッサを備える通信デバイス。
【外国語明細書】
2020010353000001.pdf