(57)【要約】  本技術は、より効率よく音を再生することができるようにする信号処理装置および方法、並びにプログラムに関する。信号処理装置は、聴取者の頭部回転に対応する回転行列に基づいて、回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させる回転演算部と、その演算により得られた回転後の頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成する合成部とを備える。本技術は音声処理装置に適用することができる。
2019009085.tif 000002
【特許請求の範囲】
【請求項１】
聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させる回転演算部と、
前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成する合成部と
を備える信号処理装置。
【請求項２】
前記回転演算部は、少なくとも１つの回転方向に対する前記頭部伝達関数の回転演算について、所定時刻よりも前の他の時刻における前記回転方向の前記回転演算の演算結果を用いて前記所定時刻の前記回転演算を行うことで、前記所定時刻における前記回転後の前記頭部伝達関数を求める
請求項１に記載の信号処理装置。
【請求項３】
前記回転演算部は、前記所定時刻における前記聴取者の頭部の前記回転方向の回転角度と、前記他の時刻における前記聴取者の頭部の前記回転方向の回転角度との差分に応じた回転行列、および前記他の時刻における前記回転方向の前記回転演算の演算結果に基づいて、前記所定時刻における前記回転方向の前記回転演算を行う
請求項２に記載の信号処理装置。
【請求項４】
前記回転演算部は、前記位数を制限した演算として、所定範囲の前記位数の要素についてのみ前記回転演算を行う
請求項３に記載の信号処理装置。
【請求項５】
前記回転演算部は、前記回転方向としての仰角方向について、前記他の時刻における前記回転方向の前記回転演算の演算結果を用いて、前記所定時刻における前記回転方向の前記回転演算を行う
請求項３に記載の信号処理装置。
【請求項６】
前記回転演算部は、
回転行列のリセットを行わない場合、前記他の時刻における前記回転方向の前記回転演算の演算結果を用いて、前記所定時刻における前記回転方向の前記回転演算を行い、
回転行列のリセットを行う場合、前記所定時刻における前記聴取者の頭部の前記回転方向の回転角度に応じた回転行列と前記頭部伝達関数とに基づいて、前記所定時刻における前記回転方向の前記回転演算を行う
請求項３に記載の信号処理装置。
【請求項７】
前記リセットは次数ごと、位数ごと、または時間周波数ごとに行われる
請求項６に記載の信号処理装置。
【請求項８】
複数の前記聴取者ごとに前記ヘッドホン駆動信号が生成される場合、前記聴取者ごとに前記リセットが行われる
請求項６に記載の信号処理装置。
【請求項９】
前記回転演算部は、前記リセットを行う場合、前記所定時刻における前記聴取者の頭部の前記回転方向の回転角度に応じた回転行列として、予め求められた回転行列を用いて前記回転演算を行う
請求項６に記載の信号処理装置。
【請求項１０】
前記回転演算部は、前記頭部回転に対応する前記回転行列を構成する所定回転方向への回転を行う回転行列が複数の行列の和により表される場合、前記位数を制限した演算として、前記複数の前記行列のうちのいくつかの前記行列の和を前記所定回転方向への回転を行う回転行列として用いて前記頭部伝達関数を回転させる演算を行う
請求項１に記載の信号処理装置。
【請求項１１】
聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させ、
前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成する
ステップを含む信号処理方法。
【請求項１２】
聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させ、
前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成する
ステップを含む処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、信号処理装置および方法、並びにプログラムに関し、特に、より効率よく音を再生することができるようにした信号処理装置および方法、並びにプログラムに関する。
【背景技術】
【０００２】
近年、音声の分野において全周囲からの空間情報を収録、伝送、および再生する系の開発や普及が進んできている。例えばスーパーハイビジョンにおいては22.2チャネルの３次元マルチチャネル音響での放送が計画されている。【０００３】
また、バーチャルリアリティの分野においても全周囲を取り囲む映像に加え、音声においても全周囲を取り囲む信号を再生するものが世の中に出回りつつある。【０００４】
その中でアンビソニックスと呼ばれる、任意の収録再生系に柔軟に対応可能な３次元音声情報の表現手法が存在し、注目されている。特に次数が２次以上となるアンビソニックスは高次アンビソニックス（HOA（Higher Order Ambisonics））と呼ばれている（例えば、非特許文献１参照）。【０００５】
３次元のマルチチャネル音響においては、音の情報は時間軸に加えて空間軸に広がっており、アンビソニックスでは３次元極座標の角度方向に関して周波数変換、すなわち球面調和関数変換を行って情報を保持している。球面調和関数変換は、音声信号の時間軸に対する時間周波数変換に相当するものと考えることができる。【０００６】
この方法の利点としては、マイクロホンの数やスピーカの数を限定せずに任意のマイクロホンアレイから任意のスピーカアレイに対して情報をエンコードおよびデコードすることができることにある。【０００７】
一方で、アンビソニックスの普及を妨げる要因としては、再生環境に大量のスピーカからなるスピーカアレイが必要とされることや、音空間が再現できる範囲（スイートスポット）が狭いことが挙げられる。【０００８】
例えば音の空間解像度を上げようとすると、より多くのスピーカからなるスピーカアレイが必要となるが、家庭などでそのようなシステムを作ることは非現実的である。また、映画館のような空間では音空間を再現できるエリアが狭く、全ての観客に対して所望の効果を与えることは困難である。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Jerome Daniel, Rozenn Nicol, Sebastien Moreau, “Further Investigations of High Order Ambisonics and Wavefield Synthesis for Holophonic Sound Imaging,” AES 114th Convention, Amsterdam, Netherlands, 2003.
【発明の概要】
【発明が解決しようとする課題】
【００１０】
そこで、アンビソニックスとバイノーラル再生技術とを組み合わせることが考えられる。バイノーラル再生技術は、一般に聴覚ディスプレイ（VAD（Virtual Auditory Display））と呼ばれており、頭部伝達関数（HRTF（Head-Related Transfer Function））が用いられて実現される。【００１１】
ここで、頭部伝達関数とは、人間の頭部を取り囲むあらゆる方向から両耳鼓膜までの音の伝わり方に関する情報を周波数と到来方向の関数として表現したものである。【００１２】
目的となる音声に対してある方向からの頭部伝達関数を合成したものをヘッドホンで提示した場合、聴取者にとってはヘッドホンからではなく、その用いた頭部伝達関数の方向から音が到来しているかのように知覚される。VADは、このような原理を利用したシステムである。【００１３】
VADを用いて仮想的なスピーカを複数再現すれば、現実には困難な多数のスピーカからなるスピーカアレイシステムでのアンビソニックスと同じ効果を、ヘッドホン提示で実現することが可能となる。【００１４】
しかしながら、このようなシステムでは、十分効率的に音を再生することができなかった。例えば、アンビソニックスとバイノーラル再生技術とを組み合わせた場合、頭部伝達関数の畳み込み演算等の演算量が多くなるだけでなく、演算等に用いるメモリの使用量も多くなってしまう。【００１５】
本技術は、このような状況に鑑みてなされたものであり、より効率よく音を再生することができるようにするものである。
【課題を解決するための手段】
【００１６】
本技術の一側面の信号処理装置は、聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させる回転演算部と、前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成する合成部とを備える。【００１７】
本技術の一側面の信号処理方法またはプログラムは、聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させ、前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成するステップを含む。【００１８】
本技術の一側面においては、聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数が回転され、前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とが合成されてヘッドホン駆動信号が生成される。
【発明の効果】
【００１９】
本技術の一側面によれば、より効率よく音を再生することができる。【００２０】
なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載された何れかの効果であってもよい。
【図面の簡単な説明】
【００２１】
【図１】頭部伝達関数を用いた立体音響のシミュレートについて説明する図である。
【図２】第１の手法における駆動信号の算出について説明する図である。
【図３】ヘッドトラッキングを行う場合の駆動信号の算出について説明する図である。
【図４】第２の手法における駆動信号の算出について説明する図である。
【図５】第３の手法における駆動信号の算出について説明する図である。
【図６】演算量と必要メモリ量について説明する図である。
【図７】第４の手法における駆動信号の算出について説明する図である。
【図８】回転行列について説明する図である。
【図９】回転行列について説明する図である。
【図１０】回転行列について説明する図である。
【図１１】音声処理装置の構成例を示す図である。
【図１２】仰角方向の差分について説明する図である。
【図１３】駆動信号生成処理について説明するフローチャートである。
【図１４】音声処理装置の構成例を示す図である。
【図１５】駆動信号生成処理について説明するフローチャートである。
【図１６】制御システムの構成例を示す図である。
【図１７】リセットと演算量について説明する図である。
【図１８】次数ごとのリセットについて説明する図である。
【図１９】時間周波数ごとのリセットについて説明する図である。
【図２０】制御システムの構成例を示す図である。
【図２１】コンピュータの構成例を示す図である。
【発明を実施するための形態】
【００２２】
以下、図面を参照して、本技術を適用した実施の形態について説明する。
【００２３】
〈第１の実施の形態〉
〈第１の手法について〉
本技術は、微小な回転の積み重ねを利用して、頭部の回転に応じた球面調和領域における頭部伝達関数を求め、球面調和領域で頭部伝達関数と再生する音の入力信号とを合成することで、演算量やメモリ使用量においてより効率のよい再生系を実現するものである。
【００２４】
例えば、球座標上での関数f(θ,φ)に対しての球面調和関数変換は、次式（１）で表される。
【００２５】
【数１】
2019009085.tif 000003
【００２６】
式（１）においてθおよびφは、それぞれ球座標における仰角および水平角を示しており、Ynm(θ,φ)は球面調和関数を示している。また、球面調和関数Ynm(θ,φ)上部に「−」が記されているものは、球面調和関数Ynm(θ,φ)の複素共役を表している。
【００２７】
ここで球面調和関数Ynm(θ,φ)は、次式（２）により表される。
【００２８】
【数２】
2019009085.tif 000004
【００２９】
式（２）においてnおよびmは球面調和関数Ynm(θ,φ)の次数および位数を示しており、−n≦m≦nである。位数mはorderやperiodなどとも呼ばれており、以下では、nおよびmを特に区別する必要のないときには、次数nと位数mをあわせて次数とも称することとする。
【００３０】
また、式（２）においてiは純虚数を示しており、Pnm(x)はルジャンドル陪関数である。
【００３１】
このルジャンドル陪関数Pnm(x)は、n≧0および0≦m≦nであるときには、以下の式（３）または式（４）により表される。なお、式（３）はm＝0における場合である。
【００３２】
【数３】
2019009085.tif 000005
【００３３】
【数４】
2019009085.tif 000006
【００３４】
また、−n≦m≦0である場合、ルジャンドル陪関数Pnm(x)は以下の式（５）により表される。
【００３５】
【数５】
2019009085.tif 000007
【００３６】
さらに、球面調和関数変換された関数Fnmから球座標上の関数f(θ,φ)への逆変換は次式（６）に示すようになる。
【００３７】
【数６】
2019009085.tif 000008
【００３８】
以上のことから球面調和領域で保持される、半径方向の補正を行った後の音の入力信号D’nm(ω)から、半径Rの球面上に配置されたL個の各スピーカのスピーカ駆動信号S(xi,ω)への変換は、次式（７）に示すようになる。
【００３９】
【数７】
2019009085.tif 000009
【００４０】
なお、式（７）においてxiはスピーカの位置を示しており、ωは音の信号の時間周波数を示している。入力信号D’nm(ω)は、所定の時間周波数ωについての球面調和関数の各次数nおよび位数mに対応する音の信号である。
【００４１】
また、xi＝（Rsinβicosαi,Rsinβisinαi,Rcosβi）であり、iはスピーカを特定するスピーカインデックスを示している。ここで、i＝1,2,…,Lであり、βiおよびαiはそれぞれi番目のスピーカの位置を示す仰角および水平角を表している。
【００４２】
このような式（７）により示される変換は、式（６）に対応する球面調和逆変換である。また、式（７）によりスピーカ駆動信号S(xi,ω)を求める場合、再現スピーカの数であるスピーカ数Lと、球面調和関数の次数N、つまり次数nの最大値Nとは次式（８）に示す関係を満たす必要がある。
【００４３】
【数８】
2019009085.tif 000010
【００４４】
ところで、ヘッドホン提示により耳元で立体音響をシミュレートする手法として一般的なものは、例えば図１に示すように頭部伝達関数を用いた方法である。
【００４５】
図１に示す例では、入力されたアンビソニックス信号がデコードされて、複数の仮想的なスピーカである仮想スピーカSP11-1乃至仮想スピーカSP11-8のそれぞれのスピーカ駆動信号が生成される。このときデコードされる信号は、例えば上述した入力信号D’nm(ω)に対応する。
【００４６】
ここでは、各仮想スピーカSP11-1乃至仮想スピーカSP11-8が環状に並べられて仮想的に配置されており、各仮想スピーカのスピーカ駆動信号は、上述した式（７）の計算により求められる。なお、以下、仮想スピーカSP11-1乃至仮想スピーカSP11-8を特に区別する必要のない場合、単に仮想スピーカSP11とも称することとする。
【００４７】
このようにして各仮想スピーカSP11のスピーカ駆動信号が得られると、それらの仮想スピーカSP11ごとに、実際に音を再生するヘッドホンHD11の左右の駆動信号（バイノーラル信号）が頭部伝達関数を用いた畳み込み演算により生成される。そして、仮想スピーカSP11ごとに得られたヘッドホンHD11の各駆動信号の和が最終的な駆動信号とされる。
【００４８】
なお、このような手法は、例えば「ADVANCED SYSTEM OPTIONS FOR BINAURAL RENDERING OF AMBISONIC FORMAT(Gerald Enzner et. al. ICASSP 2013)」などに詳細に記載されている。
【００４９】
ヘッドホンHD11の左右の駆動信号の生成に用いられる頭部伝達関数H(x,ω)は、自由空間内において聴取者であるユーザの頭部が存在する状態での音源位置xから、ユーザの鼓膜位置までの伝達特性H1(x,ω)を、頭部が存在しない状態での音源位置xから頭部中心Oまでの伝達特性H0(x,ω)で正規化したものである。すなわち、音源位置xについての頭部伝達関数H(x,ω)は、次式（９）により得られるものである。
【００５０】
【数９】
2019009085.tif 000011
【００５１】
ここで、頭部伝達関数H(x,ω)を任意の音声信号に畳み込み、ヘッドホンなどにより提示することで、聴取者に対してあたかも畳み込んだ頭部伝達関数H(x,ω)の方向、つまり音源位置xの方向から音が聞こえてくるかのような錯覚を与えることができる。
【００５２】
図１に示した例では、このような原理が用いられてヘッドホンHD11の左右の駆動信号が生成される。
【００５３】
具体的には各仮想スピーカSP11の位置を位置xiとし、それらの仮想スピーカSP11のスピーカ駆動信号をS(xi,ω)とする。
【００５４】
また、仮想スピーカSP11の数をL（ここではL=8）とし、ヘッドホンHD11の最終的な左右の駆動信号を、それぞれPlおよびPrとする。
【００５５】
この場合、スピーカ駆動信号S(xi,ω)をヘッドホンHD11提示でシミュレートすると、ヘッドホンHD11の左右の駆動信号Plおよび駆動信号Prは、次式（１０）を計算することにより求めることができる。
【００５６】
【数１０】
2019009085.tif 000012
【００５７】
なお、式（１０）において、Hl(xi,ω)およびHr(xi,ω)は、それぞれ仮想スピーカSP11の位置xiから聴取者の左右の鼓膜位置までの正規化された頭部伝達関数を示している。
【００５８】
このような演算により、球面調和領域の入力信号D’nm(ω)を、最終的にヘッドホン提示で再生することが可能となる。すなわち、アンビソニックスと同じ効果をヘッドホン提示で実現することが可能となる。
【００５９】
なお、以下では、時間周波数ωについての駆動信号Plおよび駆動信号Prを特に区別する必要のない場合、単に駆動信号P(ω)とも称する。また、以下、頭部伝達関数Hl(xi,ω)および頭部伝達関数Hr(xi,ω)を特に区別する必要のない場合、単に頭部伝達関数H(xi,ω)とも称することとする。
【００６０】
さらに、以下では、以上において説明したアンビソニックスとバイノーラル再生技術とを組み合わせる手法を第１の手法とも称することとする。
【００６１】
第１の手法では、1×1、つまり１行１列の駆動信号P(ω)を得るために、例えば図２に示す演算が行われる。
【００６２】
図２では、H(ω)は、L個の頭部伝達関数H(xi,ω)からなる1×Lのベクトル（行列）を表している。また、D’(ω)は入力信号D’nm(ω)からなるベクトルを表しており、同じ時間周波数ωのビンの入力信号D’nm(ω)の数をKとすると、ベクトルD’(ω)はK×1となる。さらにY(x)は、各次数の球面調和関数Ynm(βi,αi)からなる行列を表しており、行列Y(x)はL×Kの行列となる。
【００６３】
したがって、第１の手法では、L×Kの行列Y(x)とK×1のベクトルD’(ω)との行列演算から得られる行列（ベクトル）Sが求められ、さらに行列Sと1×Lのベクトル（行列）H(ω)との行列演算が行われて、１つの駆動信号P(ω)が得られることになる。
【００６４】
また、ヘッドホンHD11を装着した聴取者の頭部が回転行列ｇｊにより表される所定方向（以下、方向ｇｊとも称する）へと回転した場合、例えばヘッドホンHD11の左ヘッドホンの駆動信号Pl(gj,ω)は、次式（１１）に示すようになる。
【００６５】
【数１１】
2019009085.tif 000013
【００６６】
なお、回転行列ｇｊは、オイラー角の回転角であるφ、θ、およびψにより表される３次元、すなわち３×３の回転行列である。また、式（１１）において、駆動信号Pl(gj,ω)は上述した駆動信号Plを示しており、ここでは位置、つまり方向gjと時間周波数ωを明確にするために駆動信号Pl(gj,ω)と記されている。
【００６７】
この場合、何らかのセンサにより聴取者の頭部の回転方向、つまり聴取者の頭部の方向ｇｊを取得し、複数の頭部伝達関数のうち、聴取者の頭部からみた各仮想スピーカSP11の相対的な方向gj-1xiの頭部伝達関数を用いてヘッドホンHD11の左右の駆動信号を算出すればよい。これにより、実スピーカを用いた場合と同様に、ヘッドホンHD11により音を再生する場合においても、聴取者から見た音像位置を空間内で固定することができる。
【００６８】
〈第２の手法について〉
また、第１の手法においては時間周波数領域にて行われていた頭部伝達関数の畳み込みを、球面調和領域において行うようにしてもよい。このようにすることで、第１の手法よりも演算量や必要なメモリ量を低減させ、より効率よく音を再生することができるようになる。このような球面調和領域において頭部伝達関数の畳み込みを行う手法を第２の手法とも称し、以下、この第２の手法について説明する。
【００６９】
例えば左ヘッドホンに注目すると、聴取者であるユーザ（リスナ）の頭部の全回転方向に対する左ヘッドホンの各駆動信号Pl(gj,ω)からなるベクトルPl(ω)は、次式（１２）に示すように表される。
【００７０】
【数１２】
2019009085.tif 000014
【００７１】
なお、式（１２）において、S(ω)はスピーカ駆動信号S(xi,ω)からなるベクトルであり、S(ω)＝Y(x)D’(ω)である。また、式（１２）においてY(x)は以下の式（１３）により示される、各次数および各仮想スピーカの位置xiの球面調和関数Ynm(xi)からなる行列を表している。ここで、i＝1,2,…,Lであり、次数nの最大値（最大次数）はNである。
【００７２】
D’(ω)は以下の式（１４）により示される、各次数に対応する音の入力信号D’nm(ω)からなるベクトル（行列）を表している。各入力信号D’nm(ω)は球面調和領域の音の信号である。
【００７３】
さらに、式（１２）において、H(ω)は、以下の式（１５）により示される、聴取者の頭部の方向が方向ｇｊである場合における、聴取者の頭部からみた各仮想スピーカの相対的な方向gj-1xiの頭部伝達関数H(gj-1xi,ω)からなる行列を表している。この例では、方向ｇ１乃至方向ｇＭの合計M個の各方向について、各仮想スピーカの頭部伝達関数H(gj-1xi,ω)が用意されている。
【００７４】
【数１３】
2019009085.tif 000015
【００７５】
【数１４】
2019009085.tif 000016
【００７６】
【数１５】
2019009085.tif 000017
【００７７】
聴取者の頭部が方向ｇjを向いているときの左ヘッドホンの駆動信号Pl(gj,ω)の算出にあたっては、頭部伝達関数の行列H(ω)のうち、聴取者の頭部の向きである方向ｇjに対応する行、つまりその方向ｇjについての頭部伝達関数H(gj-1xi,ω)からなる行を選択して式（１２）の計算を行なえばよい。
【００７８】
この場合、例えば図３に示すように必要な行のみ計算が行われる。
【００７９】
この例では、M個の各方向について頭部伝達関数が用意されているので、式（１２）に示した行列計算は、矢印A11に示すようになる。
【００８０】
すなわち、時間周波数ωの入力信号D’nm(ω)の数をKとすると、ベクトルD’(ω)はK×1、つまりK行1列の行列となる。また、球面調和関数の行列Y(x)はL×Kとなり、行列H(ω)はM×Lとなる。したがって、式（１２）の計算では、ベクトルPl(ω)はM×1となる。
【００８１】
ここで、オンラインでの演算で、まず行列Y(x)とベクトルD’(ω)との行列演算（積和演算）を行ってベクトルS(ω)を求めれば、駆動信号Pl(gj,ω)の算出時には、矢印A12に示すように行列H(ω)のうち、聴取者の頭部の方向ｇｊに対応する行を選択し、演算量を削減することができる。図３では、行列H(ω)における斜線の施された部分が、方向ｇｊに対応する行を表しており、この行とベクトルS(ω)との演算が行われ、左ヘッドホンの所望の駆動信号Pl(gj,ω)が算出される。
【００８２】
ここで、次式（１６）に示すように行列H’(ω)を定義すると、式（１２）に示したベクトルPl(ω)は以下の式（１７）で表すことができる。
【００８３】
【数１６】
2019009085.tif 000018
【００８４】
【数１７】
2019009085.tif 000019
【００８５】
式（１６）では、球面調和関数を用いた球面調和関数変換によって頭部伝達関数、より詳細には時間周波数領域の頭部伝達関数からなる行列H(ω)が球面調和領域の頭部伝達関数からなる行列H’(ω)へと変換されている。
【００８６】
したがって、式（１７）の計算では、球面調和領域においてスピーカ駆動信号と頭部伝達関数の畳み込みが行われることになる。換言すれば、球面調和領域において頭部伝達関数と入力信号の積和演算が行われることになる。なお、行列H’(ω)は事前に計算して保持しておくことが可能である。
【００８７】
この場合、聴取者の頭部が方向ｇｊを向いているときの左ヘッドホンの駆動信号Pl(gj,ω)の算出にあたっては、予め保持されている行列H’(ω)のうち、聴取者の頭部の方向ｇｊに対応する行を選択して式（１７）の計算を行なえばよいことになる。
【００８８】
このような場合、式（１７）の計算は、次式（１８）に示す計算となる。これにより、大幅に演算量および必要メモリ量を削減することができる。
【００８９】
【数１８】
2019009085.tif 000020
【００９０】
式（１８）において、H’nm(gj,ω)は行列H’(ω)の１つの要素、つまり行列H’(ω)における頭部の方向ｇｊに対応する成分（要素）となる球面調和領域の頭部伝達関数を示している。頭部伝達関数H’nm(gj,ω)におけるnおよびmは、球面調和関数の次数nおよび位数mを示している。
【００９１】
このような式（１８）に示す演算では、図４に示すように演算量が削減されている。すなわち、式（１２）に示した計算は、図４の矢印A21に示すようにM×Lの行列H(ω)、L×Kの行列Y(x)、およびK×1のベクトルD’(ω)の積を求める計算となっている。
【００９２】
ここで、式（１６）で定義したようにH(ω)Y(x)が行列H’(ω)であるから、矢印A21に示した計算は、結局、矢印A22に示すようになる。特に、行列H’(ω)を求める計算は、オフラインで、つまり事前に行うことが可能であるので、行列H’(ω)を予め求めて保持しておけば、その分だけオンラインでヘッドホンの駆動信号を求めるときの演算量を削減することが可能である。
【００９３】
このように予め行列H’(ω)が求められると、実際にヘッドホンの駆動信号を求めるときには、矢印A22に示す計算、つまり上述した式（１８）の計算が行われることになる。
【００９４】
すなわち、矢印A22に示すように行列H’(ω)のうち、聴取者の頭部の方向ｇｊに対応する行が選択されて、その選択された行と、入力された入力信号D’nm(ω)からなるベクトルD’(ω)との行列演算により、左ヘッドホンの駆動信号Pl(gj,ω)が算出される。図４では、行列H’(ω)における斜線の施された部分が、方向ｇｊに対応する行を表しており、この行を構成する要素が式（１８）に示した頭部伝達関数H’nm(gj,ω)となる。
【００９５】
〈第３の手法について〉
ところで、以上において説明した第２の手法では、演算量や必要となるメモリ量を大幅に削減可能である一方で、頭部伝達関数の行列H’(ω)として、聴取者の全ての頭部の回転方向、つまり各方向ｇｊに対応する行をメモリ上に保持しておく必要がある。
【００９６】
そこで、１つの方向ｇｊについての球面調和領域の頭部伝達関数からなる行列（行ベクトル）をHS(ω)＝H’(gj)として、行列H’(ω)の１つの方向ｇｊに対応する行である行ベクトルHS(ω)のみを保持するようにし、球面調和領域において聴取者の頭部回転に対応する回転を行う回転行列R’(gj)を複数の各方向ｇｊの数だけ保持するようにしてもよい。以下では、そのような手法を第３の手法と称することとする。
【００９７】
各方向ｇｊの回転行列R’(gj)は、行列H’(ω)とは異なり、時間周波数依存性がない。そのため、第３の手法では、頭部の回転の方向ｇｊの成分を行列H’(ω)に持たせるよりも大幅にメモリ量を削減することができる。
【００９８】
まず、次式（１９）に示すように、行列H(ω)の所定の方向ｇｊに対応する行H(gj-1x,ω)と、球面調和関数の行列Y(x)との積H’(gj-1,ω)を考える。
【００９９】
【数１９】
2019009085.tif 000021
【０１００】
上述した第２の手法では、聴取者の頭部の回転の方向ｇｊに対して使用する頭部伝達関数の座標をxからgj-1xに回転させていたが、頭部伝達関数の位置xの座標は変更せずに、球面調和関数の座標をxからgjxに回転しても同じ結果が得られる。すなわち、以下の式（２０）が成立する。
【０１０１】
【数２０】
2019009085.tif 000022
【０１０２】
さらに、球面調和関数の行列Y(gjx)は行列Y(x)と回転行列R’(gj-1)の積であり、次式（２１）に示すようになる。なお、回転行列R’(gj-1)は、球面調和領域において座標をgjだけ回転させる行列である。
【０１０３】
【数２１】
2019009085.tif 000023
【０１０４】
ここで、以下の式（２２）に示す集合Qについて、回転行列R’(gj)のうちの(n2+n+1+k), (n2+n+1+m)∈Qとなる(n2+n+1+k)行(n2+n+1+m)列にある要素以外の要素はゼロとなる。
【０１０５】
【数２２】
2019009085.tif 000024
【０１０６】
したがって、行列Y(gjx)の要素となる球面調和関数Ynm(gjx)は、回転行列R’(gj)の(n2+n+1+k)行(n2+n+1+m)列の要素R’(n)k,m(gj)を用いて次式（２３）のように表すことができる。
【０１０７】
【数２３】
2019009085.tif 000025
【０１０８】
ここで、要素R’(n)k,m(gj)は、次式（２４）により表されるものである。
【０１０９】
【数２４】
2019009085.tif 000026
【０１１０】
なお、式（２４）においてiは純虚数を示しており、θ、φ、およびψは回転行列のオイラー角の回転角を示しており、r(n)k,m(θ)は次式（２５）に示されるものである。
【０１１１】
【数２５】
2019009085.tif 000027
【０１１２】
以上のことから、回転行列R’(gj-1)を用いて聴取者の頭部の回転を反映させたバイノーラル再生信号、例えば左ヘッドホンの駆動信号Pl(gj,ω)は、次式（２６）を計算することにより得られることになる。また、左右の頭部伝達関数を対称とみなしてよい場合は、式（２６）の前処理として入力信号の行列D’(ω)または左の頭部伝達関数の行ベクトルHS(ω)の何れかを左右反転させるような行列Rrefを用いて反転させることで、左の頭部伝達関数の行ベクトルHS(ω)のみを保持するだけで右のヘッドホン駆動信号を得ることができる。ただし、以下では基本的には左右別々の頭部伝達関数が必要な場合について述べることとする。
【０１１３】
【数２６】
2019009085.tif 000028
【０１１４】
式（２６）では、行ベクトルHS(ω)、回転行列R’(gj-1)、およびベクトルD’(ω)を合成することで、駆動信号Pl(gj,ω)が求められている。
【０１１５】
以上のような計算は、例えば図５に示す計算となる。すなわち、左ヘッドホンの駆動信号Pl(gj,ω)からなるベクトルPl(ω)は、図５の矢印A41に示すように、M×Lの行列H(ω)と、L×Kの行列Y(x)と、K×1のベクトルD’(ω)との積により求まる。この行列演算は、上述した式（１２）に示した通りである。
【０１１６】
この演算をM個の各方向gjについて用意した球面調和関数の行列Y(gjx)を用いて表すと、矢印A42に示すようになる。つまり、M個の各方向gjに対応する駆動信号Pl(gj,ω)からなるベクトルPl(ω)は、式（２０）に示した関係から、行列H(ω)の所定の行H(x,ω)と、行列Y(gjx)と、ベクトルD’(ω)との積により求まる。
【０１１７】
ここで、ベクトルである行H(x,ω)は1×Lであり、行列Y(gjx)はL×Kであり、ベクトルD’(ω)はK×1である。これを、さらに式（１７）および式（２１）に示した関係を利用して変形すると、矢印A43に示すようになる。すなわち、式（２６）に示したように、ベクトルPl(ω)は、1×Kの行ベクトルHS(ω)と、M個の各方向gjのK×Kの回転行列R’(gj-1)と、K×1のベクトルD’(ω)との積により求まる。
【０１１８】
なお、図５では、回転行列R’(gj-1)の斜線が施された部分が回転行列R’(gj-1)のゼロでない要素を表している。
【０１１９】
また、このような第３の手法における演算量と必要なメモリ量は図６に示すようになる。
【０１２０】
すなわち、図６に示すように各時間周波数ビンωごとに1×Kの行ベクトルHS(ω)が用意され、M個の方向gjについてK×Kの回転行列R’(gj-1)が用意され、ベクトルD’(ω)がK×1であるとする。また、時間周波数ビンωの数がWであり、球面調和関数の次数nの最大値、つまり最大の次数がJであるとする。
【０１２１】
このとき、回転行列R’(gj-1)のゼロでない要素の数は(J＋1)(2J＋1)(2J＋3)/3であるから、第３の手法における各時間周波数ビンω当たりの積和演算回数の合計calc/Wは、次式（２７）に示すようになる。
【０１２２】
【数２７】
2019009085.tif 000029
【０１２３】
また、第３の手法による演算には、各時間周波数ビンωについての1×Kの行ベクトルHS(ω)を左右の耳について保持しておく必要があり、さらにM個の各方向の分だけ回転行列R’(gj-1)のゼロでない要素を保持しておく必要がある。したがって、第３の手法による演算に必要となるメモリ量memoryは次式（２８）に示すようになる。
【０１２４】
【数２８】
2019009085.tif 000030
【０１２５】
第３の手法では、回転行列R’(gj-1)のゼロでない要素の数を保持しておくことで、第２の手法よりも必要なメモリ量を大幅に削減することができる。
【０１２６】
〈第４の手法について〉
なお、第３の手法では、聴取者の頭部の３軸の回転の分だけ、つまり任意のM個の各方向ｇｊの分だけ回転行列R’(gj-1)を保持しておく必要がある。このような回転行列R’(gj-1)を保持することは、時間周波数依存性のある行列H’(ω)を保持しておくよりは少ないにせよ、それなりにメモリ量が必要となる。
【０１２７】
そこで、演算時に逐次、聴取者の頭部を回転中心として球面調和領域での回転を行う回転行列R’(gj-1)を求めるようにしてもよい。以下、このような手法を第４の手法とも称することとする。
【０１２８】
ここで、回転行列R’(g)は以下の式（２９）のように表すことができる。また、式（２９）におけるｇは回転行列であり、以下の式（３０）に示すように行列u(φ)、行列a(θ)、および行列u(ψ)の積により表される。
【０１２９】
【数２９】
2019009085.tif 000031
【０１３０】
【数３０】
2019009085.tif 000032
【０１３１】
なお、式（２９）において、a(θ)およびu(φ)は、聴取者の頭部の位置が原点である座標系の座標軸を回転軸として座標を角度θおよび角度φだけ回転させる回転行列である。また、u(ψ)はu(φ)と回転角度が異なるだけで、同じ座標軸を回転軸として座標を角度ψだけ回転させる回転行列である。なお、各行列u(φ)、行列a(θ)、および行列u(ψ)の回転角度、つまり角度φ、角度θ、および角度ψは、オイラー角である。
【０１３２】
例えば聴取者の頭部の位置を原点とし、互いに直交するx軸、y軸、およびz軸を各軸とする直交座標系があるとする。ここで、x軸の正の方向は聴取者が真正面を向いている状態における、その真正面の方向であり、z軸は真正面を向いている聴取者から見て上下方向、つまり鉛直方向の軸である。角度φ、角度θ、および角度ψは、聴取者が真正面、つまりx軸の正の方向を向いている状態を基準とした各回転方向への回転角度である。
【０１３３】
具体的には、聴取者が真正面を見ている状態で、y軸を回転軸として上下方向に頭部を動かしたときの頭部の回転角度が仰角である角度θである。さらに、聴取者が真正面を向いている状態で、z軸を回転軸として、聴取者から見て頭部を水平方向に動かしたときの頭部の回転角度が水平角である角度φである。
【０１３４】
行列a(θ)は、y軸を回転軸として角度θだけ座標（座標系）を回転させる回転行列であり、行列u(φ)はz軸を回転軸として角度φだけ座標（座標系）を回転させる回転行列である。具体的には、これらの行列a(θ)および行列u(φ)は、それぞれ以下の式（３１）および式（３２）に示す通りである。
【０１３５】
【数３１】
2019009085.tif 000033
【０１３６】
【数３２】
2019009085.tif 000034
【０１３７】
したがって、例えば聴取者の頭部の位置を原点とする座標系における任意の位置v＝（vx,vy,vz）Tに対して行列a(θ)を作用させると、位置vに対してy軸を回転軸とした回転を与えることができ、位置vの回転後の位置v2は以下の式（３３）により表される。
【０１３８】
同様に、位置vに対して行列u(φ)を作用させると、位置vに対してz軸を回転軸とした回転を与えることができ、位置vの回転後の位置v3は、以下の式（３４）により表される。
【０１３９】
【数３３】
2019009085.tif 000035
【０１４０】
【数３４】
2019009085.tif 000036
【０１４１】
したがって、回転行列R’(g)＝R’(u(φ)a(θ)u(ψ))は、球面調和領域において、座標系を水平角方向に角度φだけ回転させた後、角度φの回転後の座標系を、その座標系から見て仰角方向に角度θだけ回転させ、さらに角度θの回転後の座標系を、その座標系から見て水平角方向に角度ψだけ回転させる回転行列である。
【０１４２】
また、R’(u(φ))、R’(a(θ))、およびR’(u(ψ))は、行列u(φ)、行列a(θ)、および行列u(ψ)のそれぞれにより回転される分だけ、座標を回転させるときの回転行列R’(g)を示している。
【０１４３】
換言すれば、回転行列R’(u(φ))は、球面調和領域において座標を水平角方向に角度φだけ回転させる回転行列であり、回転行列R’(a(θ))は、球面調和領域において座標を仰角方向に角度θだけ回転させる回転行列である。また、回転行列R’(u(ψ))は、球面調和領域において座標を水平角方向に角度ψだけ回転させる回転行列である。
【０１４４】
したがって、例えば図７の矢印A51に示すように角度φ、角度θ、および角度ψを回転角度として座標を３度回転させる回転行列R’(g)＝R’(u(φ)a(θ)u(ψ))は、３個の回転行列R’(u(φ))、回転行列R’(a(θ))、および回転行列R’(u(ψ))の積で表すことができる。
【０１４５】
この場合、回転行列R’(gj-1)を得るためのデータとして、各回転角度φ、θ、およびψの値ごとの回転行列R’(u(φ))、回転行列R’(a(θ))、および回転行列R’(u(ψ))のそれぞれをテーブルでメモリに保持しておけばよいことになる。また、左右で同じ頭部伝達関数を用いてよい場合、行ベクトルHS(ω)を片耳分のみ保持し、前述の左右を反転させる行列Rrefに関しても事前に保持して、これと生成された回転行列との積を求めることで逆の耳に対する回転行列を得ることができる。
【０１４６】
また、実際にベクトルPl(ω)を算出する際には、テーブルから読み出された各回転行列の積を計算することで１つの回転行列R’(gj-1)が算出される。そして、矢印A52に示すように時間周波数ビンωごとに、1×Kの行ベクトルHS(ω)と、全時間周波数ビンωで共通するK×Kの回転行列R’(gj-1)と、K×1のベクトルD’(ω)との積が計算されて、ベクトルPl(ω)が求められる。
【０１４７】
ここで、例えば各回転角度の回転行列R’(gj-1)そのものをテーブルに保持しておく場合、各回転の角度φ、角度θ、および角度ψの精度を１度（1°）とすると、3603＝46656000個の回転行列R’(gj-1)を保持しておく必要がある。
【０１４８】
これに対して、各回転の角度φ、角度θ、および角度ψの精度を１度（1°）として、各回転角度の回転行列R’(u(φ))、回転行列R’(a(θ))、および回転行列R’(u(ψ))をテーブルに保持しておく場合、360×3＝1080個の回転行列を保持しておくだけでよい。
【０１４９】
したがって、回転行列R’(gj-1)そのものを保持しておくときにはO(n3)のオーダーのデータを保持しておく必要があったのに対して、回転行列R’(u(φ))、回転行列R’(a(θ))、および回転行列R’(u(ψ))を保持しておくときにはO(n)のオーダーのデータで済み、大幅にメモリ量を削減することができる。
【０１５０】
しかも矢印A51に示すように回転行列R’(u(φ))および回転行列R’(u(ψ))は対角行列であるから、対角成分のみ保持しておけばよい。
【０１５１】
また、回転行列R’(u(φ))および回転行列R’(u(ψ))はともに水平角方向への回転を行う回転行列であるから、回転行列R’(u(φ))と回転行列R’(u(ψ))は共通の同じテーブルから得ることができる。つまり、回転行列R’(u(φ))のテーブルと回転行列R’(u(ψ))のテーブルは同じものとすることができる。
【０１５２】
なお、図７では、各回転行列のハッチが施された部分がゼロでない要素を表している。
【０１５３】
さらに、上述した式（２２）に示す集合Qに(n2+n+1+k)と(n2+n+1+m)が属すときのｋとｍについて、回転行列R’(a(θ))の要素のうちの(n2+n+1+k)行(n2+n+1+m)列以外の要素はゼロとなるため、回転行列R’(a(θ))としてゼロ以外の要素のみを保持しておけばよく、メモリ量を削減することができる。
【０１５４】
以上のことから、回転行列R’(gj-1)を得るためのデータを保持するのに必要となるメモリ量をさらに削減することができる。
【０１５５】
具体的には、例えば回転行列R’(u(φ))、回転行列R’(a(θ))、および回転行列R’(u(ψ))を、それぞれΦ個、Θ個、およびΨ個だけ保持するとすると、頭部の回転の方向ｇｊの数Mは、M＝Φ×Θ×Ψとなる。
【０１５６】
第４の手法では回転行列R’(a(θ))については角度θの精度の分だけ、つまりΘ個だけ回転行列を保持しておくので、回転行列R’(a(θ))の保持に必要なメモリ量はmemory(a)＝Θ×(J＋1)(2J＋1)(2J＋3)/3となる。
【０１５７】
また、回転行列R’(u(φ))および回転行列R’(u(ψ))については、共通のテーブルを用いることができ、角度φと角度ψの精度が同じであるとすると、角度φの分だけ、つまりΦ個だけ回転行列を保持しておくけばよく、またそれらの回転行列の対角成分のみ保持しておけばよい。したがって、ベクトルD’(ω)の長さをKとすると、回転行列R’(u(φ))および回転行列R’(u(ψ))の保持に必要なメモリ量はmemory(b)＝Φ×Kとなる。
【０１５８】
さらに、各時間周波数ビンωの個数をWとすると、左右の耳について1×Kの行ベクトルHS(ω)を各時間周波数ビンωの分だけ保持しておくのに必要なメモリ量は2×K×Wとなる。
【０１５９】
したがって、これらを合計すると、第４の手法で必要なメモリ量は、memory＝memory(a)＋memory(b)＋2KWとなる。
【０１６０】
このような第４の手法は、第３の手法と同程度の演算量で大幅に必要なメモリ量を削減可能である。特に第４の手法は、ヘッドトラッキング機能を実現する場合に、より実用に耐え得るように、例えば角度φ、角度θ、および角度ψの精度を１度（1°）などとしたときに、より効果を発揮する。
【０１６１】
〈提案手法１について〉
ところで、第４の手法では３軸に対する回転を例えば１度刻みごとに持つことで、つまり角度φ、角度θ、および角度ψの精度を１度（1°）とすることで、保持しておく回転行列の数を1080個にまで減らすことができた。
【０１６２】
しかし、第４の手法では、演算量の面では球面調和関数の次数nの最大の次数Jに関して３乗のオーダーまでしか減らすことができない。
【０１６３】
その理由は、聴取者（ユーザ）の頭部の回転に対する追従を行うための回転行列R’(a(θ))が、例えば図８に示すようにブロック対角行列になっているからである。
【０１６４】
なお、図８において横軸は回転行列R’(a(θ))の列の成分を示しており、縦軸は回転行列R’(a(θ))の行の成分を示している。また、図８において、回転行列R’(a(θ))の各位置における濃淡は、それらの位置に対応する回転行列R’(a(θ))の要素のレベル（dB）を示している。
【０１６５】
図８は、回転角度θが１度であるときの回転行列R’(a(θ))を示している。この例では、回転行列R’(a(θ))のうち、例えば-400dB以上の値を持つ要素に注目すると、そのような値を持つ要素からなる部分が次数nに対して(2n+1)×(2n+1)の大きさのブロックとなっている。例えば矢印A71に示す正方形の部分が、ブロック対角行列の１つのブロックの部分となっており、そのブロックの幅（太さ）W11は2n+1となっている。つまり、矢印A71に示す正方形の部分では、行方向に（2n+1）個の要素が並んでおり、列方向にも（2n+1）個の要素が並んでいる。
【０１６６】
このようなブロック対角行列である回転行列R’(a(θ))を用いると、ある程度は演算量を低減させることができるが、さらに演算量を低減することができれば、より迅速に効率よく駆動信号を得ることができる。
【０１６７】
そこで、本技術では、微小な回転に対する回転行列の特徴に注目し、その微小な回転の累積によって聴取者（ユーザ）の頭部の回転に対する追従を行うことで演算量を次数Jに関して２乗のオーダーまで低減させることができるようにした。
【０１６８】
以下、本技術の手法（以下、提案手法１とも称する）について具体的に説明する。
【０１６９】
聴取者の頭部の３軸の回転、すなわち、回転行列R’(u(φ))、回転行列R’(a(θ))、および回転行列R’(u(ψ))のうち、ブロック対角行列となっているものは回転行列R’(a(θ))のみであり、他の回転行列R’(u(φ))と回転行列R’(u(ψ))は完全な対角行列である。
【０１７０】
但し、回転軸の選び方によっては、２つ以上の回転行列がブロック対角行列となる場合もある。本明細書の例においては、２つ以上の回転行列がブロック対角行列となるような回転軸は用いないが、２つ以上の回転行列がブロック対角行列となる場合においても本技術を適用することが可能である。
【０１７１】
聴取者が上下方向（鉛直方向）、つまり仰角方向において正面の方向を向いているときの角度θを０度であるとする。
【０１７２】
角度θが０度である状態から、聴取者が上方向（z軸の正の方向）に＋1度だけ頭部を動かしたとき、つまりy軸を回転軸としてz軸の正の方向に＋1度だけ頭部を回転させたとき、角度θは1度となる。
【０１７３】
このように角度θが1度であるときの回転行列R’(a(θ))は、上述したように図８に示したようになる。
【０１７４】
図８に示した例では、回転行列R’(a(θ))はブロック対角行列となっており、そのブロック対角行列の各ブロックの部分は、各次数nに対して１辺が（2n+1）個の要素からなる正方形となっていることが分かる。同時に回転行列R’(a(θ))と、対角行列である回転行列R’(u(φ))と、対角行列である回転行列R’(u(ψ))との合成である回転行列R’(g)も同様のブロック対角行列となる。ここで、方向ｇｊは離散値であっても連続値であっても構わないため、以下ではｇｊを単にｇとも記すこととする。
【０１７５】
いま、ブロック対角行列である回転行列R’(g)の１つのブロック、つまりある次数nに対して、球面調和領域の頭部伝達関数を回転させると、その回転後の頭部伝達関数H’nm(g-1)は、次式（３５）に示すようになる。すなわち、回転行列R’(g)の次数nのブロックの部分を用いて、球面調和領域の頭部伝達関数を、方向gの角度分だけ回転させると、回転後の頭部伝達関数H’nm(g-1)は次式（３５）に示すようになる。
【０１７６】
【数３５】
2019009085.tif 000037
【０１７７】
なお、式（３５）において、kは回転前の位数を示しており、mは回転後の位数を示している。また、H’nkは行ベクトルHS(ω)における次数nおよび位数kの要素を示している。
【０１７８】
このような式（３５）の計算から、１つの回転後の位数mの要素を求めるために、(2n+1)個すべての要素R’(n)k,m(g)が使われていることが分かる。
【０１７９】
しかしながら、角度θ＝１度であるときなど、角度θが微小であるときの回転では、ブロック対角行列である回転行列R’(a(θ))の各要素のうちの殆どの要素は微小な値となっている。したがって、回転行列R’(g)の各要素R’(n)k,m(g)のうちの殆どの要素も微小な値となっている。
【０１８０】
すなわち、例えば図９に示す回転行列R’(a(θ))は、図８に示した回転行列R’(a(θ))と同じ、角度θが1度であるときの回転行列R’(a(θ))を示している。
【０１８１】
すなわち、図９において横軸は回転行列R’(a(θ))の列の成分を示しており、縦軸は回転行列R’(a(θ))の行の成分を示している。また、回転行列R’(a(θ))の各位置における濃淡は、それらの位置に対応する回転行列R’(a(θ))の要素のレベル（dB）を示している。
【０１８２】
但し、図８では回転行列R’(a(θ))の各要素のレベルのレンジが-400dBから0dBまでであるのに対して、図９では回転行列R’(a(θ))の各要素のレベルのレンジが-100dBから0dBまでに限定されている。
【０１８３】
図９に示す例のように、回転行列R’(a(θ))における有効な値を持っている要素を、レベルが-100dBから0dBまでの要素とすると、有効な値を有する要素が対角成分の周辺にしか存在していないことが分かる。
【０１８４】
さらに、回転行列R’(a(θ))の１つの行を見たときに有効な値を持つ要素の数、すなわち、図９中、横方向に連続して並ぶ、有効な値を有する要素の数（以下、有効要素幅とも称する）は、全ての次数nで殆ど同じであることが分かる。
【０１８５】
したがって、各次数nにおける有効な値を有する要素の数は、次数nが増えてもほぼ次数nの最大値であるJの２乗のオーダーでしかない。
【０１８６】
そこで、回転行列R’(a(θ))の-100dBから0dBまでのレベルの要素など、所定のレベルの範囲内の値の要素を有効な要素とし、その有効な要素のみを用いて球面調和領域で頭部伝達関数を回転させる演算を行うようにすれば、演算量を削減することができる。換言すれば、回転行列R’(g)の所定のレベルの範囲内の値の要素を有効な要素とし、その有効な要素のみを用いて球面調和領域で頭部伝達関数を回転させる演算を行うようにすれば、演算量を削減することができる。回転行列R’(g)の有効要素幅は、回転行列R’(a(θ))の有効要素幅と同じである。
【０１８７】
例えば有効要素幅が2C+1である場合、上述した式（３５）の計算は、次式（３６）に示すようになる。
【０１８８】
【数３６】
2019009085.tif 000038
【０１８９】
但し、式（３６）においてmin(a,b)はaとbのうちの小さい方を選択する関数を示している。また、式（３６）においてmax(a,b)はaとbのうちの大きい方を選択する関数を示している。
【０１９０】
式（３５）では、各次数nについて、位数kが-nからnまでの(2n+1)個の要素R’(n)k,m(g)が用いられていたが、式（３６）の計算では位数kがmを中心としてm-Cからm+Cまでの範囲内にある(2C+1)個の要素R’(n)k,m(g)のみが用いられており、演算量の削減が実現されている。なお、kがnより大きい場合、またはkが-nより小さい場合には、行列の範囲を超えないように、それぞれnまでのk、-nまでのkで演算が行われる。このように、位数kを制限して演算を行うことにより、つまり位数kがCにより定まる範囲内の値である要素についてのみ演算を行うことで、演算量を削減することができる。
【０１９１】
この場合、全ての次数nにおいて有効要素幅2C+1が同じであるので、上述した第４の手法と比較したときに、次数Jが大きくなるほど、提案手法１が演算面でより有利になることが分かる。
【０１９２】
なお、式（３６）では、全ての次数nについて、有効要素幅から定まる定数Cが適用されることになる。しかし、有効要素幅2C+1を定めるCは定数に限らず、次数nの関数C(n)（但し、C(n)<n）をCとして用いたり、次数nおよび位数kの関数C(n,k)をCとして用いたりしてもよい。ここで、関数C(n)や関数C(n,k)は次数nより小さい自然数であればよい。つまり、ブロック対角行列である回転行列R’(a(θ))、すなわち回転行列R’(g)のブロック全体の要素を用いて演算を行うより、少しでも少ない要素数で演算が行われるようにすればよい。
【０１９３】
また、回転行列R’(a(θ))のうちの演算に用いられる要素は、回転行列R’(a(θ))の要素そのものであってもよいし、回転行列R’(a(θ))の要素の近似的な値であってもよい。
【０１９４】
つまり、より一般的に言えば、回転行列R’(a(θ))をある複数の行列の組み合わせにより、R’(a(θ))＝A1+A2+A3+…として表現できるとする。この場合、回転行列R’(a(θ))を構成するそれらの行列のうちのいくつかを取り出したものの和で表される近似的な回転行列Rs’(a(θ))について、それぞれn次のブロックにおいて(2n+1)×(2n+1)の要素より少ない要素を用いて演算が行われるようにすればよい。
【０１９５】
例えば回転行列R’(a(θ))のうちn次のブロック対角行列R’(n)(β)は次式（３７）のように表すことができる。
【０１９６】
【数３７】
2019009085.tif 000039
【０１９７】
ここで、式（３７）における行列Sn(β)は次式（３８）のように表される。この行列Sn(β)を用いて、近似的な回転行列Rs’(a(θ))の太さをCにしたい場合は、式（３７）に示す行列の多項式のうちのC乗までの計算に限定してやればよい。
【０１９８】
【数３８】
2019009085.tif 000040
【０１９９】
このようにすることで回転行列R’(a(θ))として用いられる回転行列Rs’(a(θ))では、ゼロでない値を有する要素がほぼ対角成分だけになる。したがって、回転行列Rs’(a(θ))を用いて得られた回転行列R’(g)のゼロでない要素を用いて頭部伝達関数を回転させる回転演算、つまり回転行列R’(g)と行ベクトルHS(ω)との行列演算を行えば、結果的に回転行列R’(g)の位数が制限された演算が行われることになり、演算量を削減することができる。
【０２００】
なお、この場合、例えば回転行列R’(u(φ))と、回転行列Rs’(a(θ))と、回転行列R’(u(ψ))とを合成して回転行列R’(g)とし、位数が制限された行列演算が行われることになる。
【０２０１】
以上のような提案手法１により聴取者の頭部の回転に対する追従を行う場合、例えば聴取者が上方向、つまり仰角方向に３０度だけ頭部を回転させてしまったとする。すなわち、聴取者の頭部の方向を示す仰角（角度θ）が３０度となってしまったとする。
【０２０２】
この場合、回転行列R’(a(θ))は、図１０に示すようになる。なお、図１０において横軸は回転行列R’(a(θ))の列の成分を示しており、縦軸は回転行列R’(a(θ))の行の成分を示している。また、回転行列R’(a(θ))の各位置における濃淡は、それらの位置に対応する回転行列R’(a(θ))の要素のレベル（dB）を示している。
【０２０３】
図１０では、図９における場合と同様に、回転行列R’(a(θ))の各要素のレベルのレンジが-100dBから0dBまでとなっている。
【０２０４】
しかし、図１０に示す例では次数nが大きくなるほど、その次数nについてのブロックの有効要素幅は太く（大きく）なっている。すなわち、-100dB以下の成分を切り捨てても、回転行列R’(a(θ))は有効要素幅が太いブロック対角行列となってしまう。
【０２０５】
このように回転行列R’(a(θ))では、回転角度θが小さいときには有効要素幅が細く、図９を参照して説明したように演算量を低減させることが可能であるが、回転角度θが大きくなるにしたがって有効要素幅が太くなり、演算量削減効果が小さくなる。
【０２０６】
また、このままでは聴取者の仰角方向に対する頭部の回転が大きくなるにしたがって有効要素幅2C+1を決定する定数Cを大きくしていかなければならなくなる。
【０２０７】
演算量を少なく保ったまま大きい仰角方向の回転角度θまで頭部の回転に対する追従を行うためには、微小回転の累積を用いればよい。
【０２０８】
すなわち、例えば所定の時刻における聴取者（ユーザ）の頭部の方向を、オイラー角を用いて（φ,θ,ψ）と表すとする。ここで、角度φ、角度θ、および角度ψは、それぞれ上述の回転角度φ、回転角度θ、および回転角度ψに対応する。なお、ここでは聴取者の頭部の回転方向である方向gを、オイラー角を用いて表しているが、その他、例えばクオータニオンなどの別の方法で表すようにしてもよい。以下では、特にことわりのない限りは方向gはオイラー角が用いられて表されているものとして説明を続ける。
【０２０９】
特に、角度φおよび角度ψは聴取者から見た水平角であり、角度θは聴取者から見た仰角である。以下では、特に時刻ｔにおける角度θを角度θtと記すこととする。同様に、以下、時刻ｔにおける角度φおよび角度ψを、それぞれ角度φtおよび角度ψtと記すこととする。
【０２１０】
微小回転の累積を利用する場合、時刻ｔにおける方向ｇを示す角度ｇtと、その直前の時刻（t-1）、つまり時刻ｔよりも前の時刻（t-1）における角度ｇt-1との差分Δｇt＝ｇtｇt-1-1を求め、前回得られた回転行列R’(gt-1)を差分Δgtの分だけ回転させることで、回転行列R’(gt)を更新すればよい。すなわち、前回得られた時刻（t-1）における回転行列R’(gt-1)と、差分Δgtに対応する回転行列R’(Δgt)との積を、時刻ｔにおける回転行列R’(gt)とすればよい。
【０２１１】
これにより、微小な回転角である差分Δgtのうちの差分Δθtについての、有効要素幅が細い回転行列R’(a(Δθt))と、差分Δgtのうちの差分Δφtについての対角行列である回転行列R’(u(Δφt))と、差分Δgtのうちの差分Δψtについての対角行列である回転行列R’(u(Δψt))とを合成して得られる回転行列R’(Δgt)＝R’(u(Δφt))R’(a(Δθt))R’(u(Δψt))を用いて、より少ない演算量で回転行列R’(gt)を得ることができる。
【０２１２】
なお、差分Δθtは角度θtと角度θt-1との差分、すなわち差分Δθt＝θt-θt-1である。同様に、差分Δφtは角度φtと角度φt-1との差分であり、差分Δψtは角度ψtと角度ψt-1との差分である。
【０２１３】
〈音声処理装置の構成例〉
ここで、以上において説明した本技術を適用した音声処理装置について説明する。図１１は、本技術を適用した音声処理装置の一実施の形態の構成例を示す図である。
【０２１４】
図１１に示す音声処理装置１１は、例えばヘッドホン等に内蔵され、再生しようとする音の音響信号である球面調和領域の入力信号D’nm(ω)を入力とし、時間領域の２チャネルの音の駆動信号を出力する信号処理装置である。なお、ここでは、音声処理装置１１がヘッドホンに内蔵される例について説明するが、音声処理装置１１はヘッドホンとは異なる別の装置に内蔵されていたり、ヘッドホン等とは異なる他の装置とされたりしてもよい。
【０２１５】
音声処理装置１１は、頭部回転センサ部２１、前回方向保持部２２、回転行列演算部２３、回転演算部２４、回転係数保持部２５、頭部伝達関数保持部２６、頭部伝達関数合成部２７、および時間周波数逆変換部２８を有している。
【０２１６】
頭部回転センサ部２１は、例えば必要に応じて聴取者（ユーザ）の頭部に取り付けられた加速度センサや画像センサなどからなり、聴取者の頭部の回転（動き）を検出して、その検出結果を回転行列演算部２３に供給する。
【０２１７】
なお、ここでいう聴取者とは、ヘッドホンを装着したユーザ、つまり時間周波数逆変換部２８で得られる左右のヘッドホンの駆動信号に基づいてヘッドホンにより再生された音を聴取するユーザである。
【０２１８】
頭部回転センサ部２１では、聴取者の頭部の回転、つまり聴取者の頭部が向いている方向の検出結果として、現時刻である時刻ｔにおける角度φt、角度θt、および角度ψtが得られる。以下、角度φt、角度θt、および角度ψtからなる聴取者の頭部の方向（回転）を示す情報を頭部回転情報とも称することとする。この頭部回転情報により示されるある時刻ｔの方向は上述した方向ｇに対応する角度gtであり、例えばx軸方向を基準としたときの頭部の方向を示す角度情報である。
【０２１９】
前回方向保持部２２は、回転行列演算部２３から供給された各時刻の角度を前回方向情報として保持するとともに、その次の時刻において保持している前回方向情報を回転行列演算部２３に供給する。したがって、例えば頭部回転センサ部２１から回転行列演算部２３へと時刻ｔの頭部回転情報が供給されたときには、前回方向保持部２２から回転行列演算部２３には、前回方向情報として時刻（t-1）の角度gt-1が供給される。
【０２２０】
回転行列演算部２３は、各角度φにおける回転行列R’(u(φ))を示すテーブルと、各角度θにおける回転行列R’(a(θ))を示すテーブルとを保持している。なお、回転行列R’(u(φ))を示すテーブルは、回転行列R’(u(ψ))を求めるときにも用いられる。つまり、回転行列R’(u(φ))と回転行列R’(u(ψ))のテーブルは共通で用いられる。
【０２２１】
回転行列演算部２３は、保持しているテーブルと、頭部回転センサ部２１から供給された頭部回転情報と、前回方向保持部２２から供給された前回方向情報とに基づいて、回転行列R’(u(Δφt))、回転行列R’(a(Δθt))、および回転行列R’(u(Δψt))を求めて出力する。回転行列演算部２３は、回転行列R’(u(Δφt))、回転行列R’(a(Δθt))、および回転行列R’(u(Δψt))を回転演算部２４に供給する。
【０２２２】
回転行列R’(u(Δφt))、回転行列R’(a(Δθt))、および回転行列R’(u(Δψt))の合成である回転行列R’(Δgt)は、時刻ｔにおける聴取者の頭部の回転gtと、時刻（t-1）における聴取者の頭部の回転gt-1との差分の角度（差分Δgt）だけ回転を行う回転行列である。
【０２２３】
なお、回転行列R’(u(Δφt))、回転行列R’(a(Δθt))、および回転行列R’(u(Δψt))については、テーブルを用いるのではなく、回転行列演算部２３が差分Δφt、差分Δθt、および差分Δψtに基づいて、演算により回転行列R’(u(Δφt))、回転行列R’(a(Δθt)) 、および回転行列R’(u(Δψt))を求めてもよい。また、回転行列R’(a(Δθt))のテーブルは、回転行列R’(a(Δθt))の近似である回転行列Rs’(a(Δθt))を示すものでもよいし、回転行列Rs’(a(Δθt))をテーブルからではなく演算により求めてもよい。
【０２２４】
また、回転行列演算部２３は、頭部回転センサ部２１から供給された頭部回転情報gtを前回方向情報として前回方向保持部２２に供給して保持させる。
【０２２５】
回転演算部２４は、行ベクトルH’(gt-1,ω)を算出し、回転係数保持部２５および頭部伝達関数合成部２７に供給する。
【０２２６】
ここで行ベクトルH’(gt-1,ω)は、時刻ｔにおける回転行列R’(gt)に基づいて、球面調和領域の頭部伝達関数、つまり行ベクトルHS(ω)を角度gtだけ回転させる回転演算を行うことで得られる行ベクトルである。
【０２２７】
実際には、回転演算部２４は、回転行列演算部２３から供給された回転行列R’(Δgt)と、回転係数保持部２５から供給された時刻（t-1）における行ベクトルH’(gt-1-1,ω)とに基づいて、時刻ｔにおける行ベクトルH’(gt-1,ω)を算出する。
【０２２８】
このような演算は、時刻（t-1）における回転演算の演算結果、つまり行ベクトルHS(ω)を角度gt-1だけ回転させる回転演算により得られた回転後の頭部伝達関数に対して、さらに差分Δgtにより示される角度だけ回転を行う回転演算である。
【０２２９】
しかも、回転行列R’(Δgt)に基づく回転演算は、回転行列R’(Δgt)における所定の値Cにより定まる範囲内の位数kを有する要素についてのみ計算が行われる、つまり位数kにより制限された演算が行われる行列演算である。したがって、回転行列R’(Δgt)は、所定の値Cにより定まる範囲内の位数kを有する要素のみがゼロでない有効な値を有する要素とされた、つまり位数kにより制限された回転行列であるといえる。
【０２３０】
なお、回転演算部２４は、処理開始時、つまり行ベクトルH’(gt-1-1,ω)がない状態においては、頭部伝達関数保持部２６から供給された頭部伝達関数の行ベクトルHS(ω)と、回転行列演算部２３から供給された回転行列R’(Δgt)とに基づいて行ベクトルH’(gt-1,ω)を算出する。この場合、角度gt-1は０度であるので回転行列R’(Δgt)は回転行列R’(gt)と等価である。
【０２３１】
回転係数保持部２５は、回転演算部２４から供給された時刻ｔにおける行ベクトルH’(gt-1,ω)を保持し、次の時刻（t+1）において保持している行ベクトルH’(gt-1,ω)を回転演算部２４に供給する。
【０２３２】
頭部伝達関数保持部２６は、予め定められた行ベクトルHS(ω)、または外部から供給された行ベクトルHS(ω)を保持しており、保持している行ベクトルHS(ω)を回転演算部２４に供給する。なお、行ベクトルHS(ω)は聴取者（ユーザ）ごとに用意されていてもよいし、全聴取者や１つのグループを構成する複数人の聴取者に対して共通する行ベクトルHS(ω)が用意されてもよい。
【０２３３】
ここで、行ベクトルH’(g-1,ω)は、頭部伝達関数からなる行ベクトルHS(ω)を、回転行列R’(g-1)により球面調和領域で回転させることで得られた行列、つまり回転後の頭部伝達関数からなる行列である。換言すれば、行ベクトルH’(g-1,ω)は、球面調和領域において聴取者の頭部の方向により定まる角度だけ水平方向に角度φ、仰角方向に角度θ、および水平方向に角度ψだけ回転させた頭部伝達関数を要素とする行列（ベクトル）である。
【０２３４】
なお、ここでは角度θ、角度φ、および角度ψの方向全てにおいて、時刻（t-1）における演算結果である行ベクトルH’(gt-1-1,ω)を用いて、時刻ｔと時刻（t-1）における回転の差分の分だけ頭部伝達関数を回転させる例について説明した。しかし、これに限らず、角度φ、角度θ、および角度ψのうちの少なくとも何れか１つの角度の方向（回転方向）について時刻ｔと時刻（t-1）における角度の差分の分だけ、時刻（t-1）における頭部伝達関数の回転演算の結果をさらに回転さるようにしてもよい。
【０２３５】
頭部伝達関数合成部２７は、外部から供給された、球面調和領域の音の信号である各時間周波数ビンωについての入力信号D’nm(ω)と、回転演算部２４から供給された行ベクトルH’(gt-1,ω)とを合成し、左右のヘッドホンの駆動信号を生成する。
【０２３６】
すなわち、頭部伝達関数合成部２７では、左右のヘッドホンごとに行ベクトルH’(gt-1,ω)と、球面調和領域の音の信号である入力信号D’nm(ω)からなる行列D’(ω)との積を求めることで、左右のヘッドホンの駆動信号Pl(g,ω)および駆動信号Pr(g,ω)を算出し、時間周波数逆変換部２８に供給する。
【０２３７】
ここで、駆動信号Pl(g,ω)は時間周波数領域の左ヘッドホンの駆動信号（バイノーラル信号）であり、駆動信号Pr(g,ω)は時間周波数領域の右ヘッドホンの駆動信号（バイノーラル信号）である。
【０２３８】
頭部伝達関数合成部２７では、入力信号に対する頭部伝達関数の合成と、入力信号に対する球面調和逆変換とが同時に行われることになる。
【０２３９】
時間周波数逆変換部２８は、左右のヘッドホンごとに、頭部伝達関数合成部２７から供給された時間周波数領域の駆動信号に対して時間周波数逆変換を行うことで、時間領域の左ヘッドホンの駆動信号pl(g,t)と、時間領域の右ヘッドホンの駆動信号pr(g,t)とを求め、それらの駆動信号を後段に出力する。後段のヘッドホン、より詳細にはイヤホンを含むヘッドホンやトランスオーラル技術を用いたスピーカなど、２チャネルまたは複数チャネルで音を再生する再生装置では、時間周波数逆変換部２８から出力された駆動信号に基づいて音が再生される。なお、入力される信号が時間周波数変換されていない場合には、信号の入力部分、すなわち例えば頭部伝達関数合成部２７の前段に時間周波数変換部が設けられるか、または頭部伝達関数合成部２７で時間領域での畳み込み演算が行われることになる。
【０２４０】
ここで、音声処理装置１１の各部における処理について具体的に説明する。
【０２４１】
例えば回転行列演算部２３は、時刻ｔの頭部回転情報、つまり時刻ｔの角度gtと時刻（t-1）の角度gt-1との差分Δgt＝gtgt-1-1を求める。そして、回転行列演算部２３は、差分Δgtから差分Δθt、差分Δφt、および差分Δψtを求め、保持している回転行列R’(a(θ))および回転行列R’(u(φ))のテーブルから、角度θが差分Δθtであるときの回転行列R’(a(θ))、角度φが差分Δφtおよび差分Δψtであるときの回転行列R’(u(φ))を読み出して回転行列R’(a(Δθt))、回転行列R’(u(Δφt))、および回転行列R’(u(Δψt))とする。
【０２４２】
さらに、回転行列演算部２３は、上述した式（２９）と同様の演算を行って、このようにして得られた回転行列R’(u(Δφt))、回転行列R’(a(Δθt))、および回転行列R’(u(Δψt))を合成し、回転行列R’(Δgt)とする。
【０２４３】
例えば入力信号D’nm(ω)のフレームごと、つまり１フレームごとに差分Δθtを求めると、差分Δθtは図１２に示すようになる。なお、図１２において縦軸は各時刻における角度θ（仰角θ）を示しており、横軸は時間を示している。
【０２４４】
図１２に示す例では、曲線L11は各時刻における角度θを示しており、その曲線L11における領域RZ11の部分を拡大すると、図中、下側に示すようになる。
【０２４５】
ここでは、時刻（t-1）から時刻ｔまでの期間が１フレームの期間となっている。そのため、時刻ｔにおける角度θである角度θtと、時刻（t-1）における角度θである角度θt-1との差分がΔθtとなっている。
【０２４６】
回転行列演算部２３では、差分Δgtに基づいて得られた回転行列R’(Δgt)が回転演算部２４に供給されるとともに、時刻ｔの角度gtが前回方向保持部２２に供給されて前回方向情報が更新される。つまり、新たに供給された時刻ｔの角度gtが更新後の前回方向情報として保持される。
【０２４７】
回転演算部２４では、回転行列R’(Δgt)と、時刻（t-1）における行ベクトルH’(gt-1-1,ω)とに基づいて、時刻ｔにおける行ベクトルH’(gt-1,ω)が算出される。
【０２４８】
例えば任意の回転行列ｇ１および回転行列ｇ２に対して、次式（３９）が成立する。
【０２４９】
【数３９】
2019009085.tif 000041
【０２５０】
このことから、次式（４０）が成立し、行ベクトルH’(gt-1-1,ω)と回転行列R’(Δgt)との積を求めることにより、行ベクトルH’(gt-1,ω)が求まることが分かる。
【０２５１】
【数４０】
2019009085.tif 000042
【０２５２】
すなわち、行ベクトルH’(gt-1,ω)の次数nおよび位数mの要素をH’nm(gt-1,ω)とし、回転行列R’(Δgt)の次数nおよび位数mの要素をR’(n)k,m(Δgt)とし、回転行列R’(Δgt)の次数nにおける有効要素幅を定める定数をCとする。この場合、次式（４１）が成立する。すなわち、次式（４１）の演算により、行ベクトルH’(gt-1,ω)のゼロでない各要素を求めることができる。
【０２５３】
【数４１】
2019009085.tif 000043
【０２５４】
回転演算部２４は、式（４１）を計算することで行ベクトルH’(gt-1,ω)を得る。式（４１）の演算は、上述した式（３６）と同様に位数kがmを中心とするm-Cからm+Cまでの範囲内にある(2C+1)個の要素のみ計算が行われている。但し、-n≦k≦nの範囲に限られる。つまり、位数kがCにより定まる範囲内の値である要素についてのみ演算が行われる、位数kを制限した回転演算となっており、演算量が削減されている。
【０２５５】
なお、回転行列演算部２３では、回転行列R’(a(Δθt))を逐次、計算により求めるようにしてもよいし、事前に用意された１または複数の候補のなかから回転行列R’(a(Δθt))を選択するようにしてもよい。
【０２５６】
さらに、時刻によって回転行列R’(a(Δθt))を演算する方法と、１または複数の候補のなかから回転行列R’(a(Δθt))を選択する方法とを組み合わせて、それらの各方法を用いる頻度を変更しながら実際の聴取者の頭部の回転の角度θtに追従させて頭部伝達関数を回転させる角度の調整をするようにしてもよい。
【０２５７】
〈駆動信号生成処理の説明〉
次に、図１３のフローチャートを参照して、音声処理装置１１により行われる駆動信号生成処理について説明する。
【０２５８】
ステップＳ１１において、頭部回転センサ部２１は、聴取者であるユーザの頭部の回転を検出し、その検出結果として得られた頭部回転情報を回転行列演算部２３に供給する。
【０２５９】
ステップＳ１２において、回転行列演算部２３は、頭部回転センサ部２１から供給された頭部回転情報の角度gtと、前回方向保持部２２に前回方向情報として保持されている時刻（t-1）の角度gt-1との差分Δgtを求める。
【０２６０】
また、回転行列演算部２３は、差分Δgtが得られると、ステップＳ１１で得られた頭部回転情報の角度gtを前回方向保持部２２に供給し、前回方向情報を更新させる。前回方向保持部２２は、回転行列演算部２３から供給された角度gtが新たな前回方向情報となるように前回方向情報を更新し、その更新結果を保持する。
【０２６１】
ステップＳ１３において、回転行列演算部２３は、ステップＳ１２で得られた差分Δgtに基づいて、その差分Δgtのうちの差分Δθtに応じた仰角方向の回転行列R’(a(Δθt))を求める。なお、ステップＳ１３において回転行列演算部２３が上述した回転行列Rs’(a(θ))に対応する、差分Δθtに応じた回転行列Rs’(a(Δθt))を回転行列R’(a(Δθt))として求めるようにしてもよい。
【０２６２】
ステップＳ１４において、回転行列演算部２３は、ステップＳ１２で得られた差分Δgtから求められる頭部回転の差分Δφtおよび差分Δψtに基づいて、それらの差分に応じた水平方向の回転行列R’(u(Δφt))および回転行列R’(u(Δψt))を求める。
【０２６３】
ステップＳ１５において、回転行列演算部２３は、ステップＳ１３で得られた仰角方向の回転行列R’(a(Δθt))と、ステップＳ１４で得られた水平方向の回転行列R’(u(Δφt))および回転行列R’(u(Δψt))とを合成して、頭部の全体の回転の差分の分だけ回転を行う回転行列R’(Δgt)を求め、回転演算部２４に供給する。
【０２６４】
ステップＳ１６において、回転演算部２４は、回転行列演算部２３から供給された回転行列R’(Δgt)と、回転係数保持部２５に保持されている行ベクトルH’(gt-1-1,ω)とに基づいて回転演算を行う。
【０２６５】
すなわち、例えばステップＳ１６では定数Cにより定まる有効要素幅2C+1に基づいて、回転演算として上述した式（４１）の計算が行われ、行ベクトルH’(gt-1,ω)が算出される。
【０２６６】
回転演算部２４は、得られた行ベクトルH’(gt-1,ω)を回転係数保持部２５に供給して保持させるとともに、行ベクトルH’(gt-1,ω)を頭部伝達関数合成部２７にも供給する。
【０２６７】
ステップＳ１７において、頭部伝達関数合成部２７は、供給された入力信号D’nm(ω)と、回転演算部２４から供給された頭部伝達関数の行ベクトルH’(gt-1,ω)とを合成し、左右のヘッドホンの駆動信号を生成する。
【０２６８】
例えばステップＳ１７では、左右のヘッドホンごとに、行ベクトルH’(gt-1,ω)と行列D’(ω)との積が求められ、左右のヘッドホンの駆動信号Pl(g,ω)および駆動信号Pr(g,ω)が算出される。頭部伝達関数合成部２７は、得られた駆動信号Pl(g,ω)および駆動信号Pr(g,ω)を時間周波数逆変換部２８に供給する。
【０２６９】
ステップＳ１８において、時間周波数逆変換部２８は、頭部伝達関数合成部２７から供給された駆動信号Pl(g,ω)および駆動信号Pr(g,ω)に対して時間周波数逆変換を行い、その結果得られた駆動信号pl(g,t)および駆動信号pr(g,t)を後段に出力し、駆動信号生成処理は終了する。
【０２７０】
以上のようにして音声処理装置１１は、差分Δgtに基づいて回転行列R’(Δgt)を求め、その回転行列R’(Δgt)と、前回の行ベクトルH’(gt-1-1,ω)とに基づいて、今回の行ベクトルH’(gt-1,ω)を求める。
【０２７１】
このように微小な回転角度である差分Δｇt分ずつ回転を累積して行ベクトルH’(gt-1,ω)を求めることで、使用するメモリ量と演算量を低減させることができる。その結果、より効率よく音を再生することができる。特に、以上において説明した提案手法１によれば、第４の手法と同等のメモリ量で、かつ第４の手法よりも少ない演算量で駆動信号を得ることができる。
【０２７２】
〈第２の実施の形態〉
〈音声処理装置の構成例〉
ところで、上述した提案手法１では、定数Cにより定まる有効要素幅2C+1のブロック内の要素、つまり有効な要素のみが用いられて演算が行われるため、少なからず回転行列R’(gt)、つまり行ベクトルH’(gt-1,ω)に誤差が発生してしまう。
【０２７３】
また、そのような誤差が生じる演算をしばらく繰り返し行うと誤差が蓄積されていき、行ベクトルH’(gt-1,ω)が本来の値とは離れた値となってしまう。つまり、行ベクトルH’(gt-1,ω)の誤差が大きくなってしまう。
【０２７４】
そこで、所定のタイミングで正確な回転行列R’(gt-1)を求める演算を行い、回転行列R’(gt-1)の値、すなわち行ベクトルH’(gt-1,ω)をリセットする（以下、単にリセットと称する）ことで、誤差の蓄積を防止するようにしてもよい。以下、提案手法１において、さらに所定のタイミングでリセットを行う手法を提案手法２とも称することとする。
【０２７５】
提案手法２では、リセット時には行ベクトルH’(gt-1,ω)を求めるために次数nの３乗のオーダーの演算量の演算が必要となるが、リセットを頻繁には行わないようにすることで、全体として演算量を低減させることができる。
【０２７６】
このように適宜、リセットが行われる場合、音声処理装置１１は図１４に示すように構成される。なお、図１４において図１１における場合と対応する部分には同一の符号を付してあり、その説明は適宜省略する。
【０２７７】
図１４に示す音声処理装置１１は、頭部回転センサ部２１、前回方向保持部２２、回転行列演算部２３、回転演算部２４、回転係数保持部２５、頭部伝達関数保持部２６、頭部伝達関数合成部２７、および時間周波数逆変換部２８を有している。
【０２７８】
図１４に示す音声処理装置１１は、頭部回転センサ部２１乃至時間周波数逆変換部２８を有している点では図１１の音声処理装置１１と同じであるが、回転行列演算部２３および回転演算部２４にリセットを行うタイミングを示す信号であるリセットトリガが供給される点で図１１の音声処理装置１１と異なっている。
【０２７９】
回転行列演算部２３は、リセットトリガが供給されていないとき、すなわちリセットトリガがオフであるときには、頭部回転情報の角度gtと、前回方向情報としての角度gt-1とに基づいて回転行列R’(Δgt)を求め、回転演算部２４に供給する。
【０２８０】
これに対して、リセットトリガが供給されたとき、すなわちリセットトリガがオンであるときには、回転行列演算部２３は頭部回転情報の角度gtに基づいて回転行列R’(gt)を求め、回転演算部２４に供給する。つまり、リセットが行われて正確な回転行列R’(gt)が求められる。換言すれば、回転行列R’(Δgt)等の差分により求められたものではなく、絶対的な回転行列R’(gt)が求められる。
【０２８１】
また、リセットトリガがオフである場合、回転演算部２４は、回転行列演算部２３から供給された回転行列R’(Δgt)と、回転係数保持部２５に保持されている行ベクトルH’(gt-1-1,ω)とに基づいて行ベクトルH’(gt-1,ω)を算出する。
【０２８２】
これに対して、リセットトリガがオンである場合、回転演算部２４は、回転行列演算部２３から供給された回転行列R’(gt)と、頭部伝達関数保持部２６に保持されている頭部伝達関数の行ベクトルHS(ω)とに基づいて行ベクトルH’(gt-1,ω)を算出する。
【０２８３】
この場合、回転演算部２４では、上述した式（３５）または式（３６）と同様の計算が行われて行ベクトルH’(gt-1,ω)が算出される。つまり、回転行列R’(gt)と行ベクトルHS(ω)との積が求められて行ベクトルH’(gt-1,ω)が算出される。
【０２８４】
このようにリセットトリガの入力に応じて、リセットを行い、正確な回転行列R’(gt)や行ベクトルH’(gt-1,ω)を求めることで、必要なメモリ量や演算量を低く抑えつつ誤差の少ない駆動信号を得ることができるようになる。
【０２８５】
なお、ここでは任意のタイミングでリセットトリガがオン、オフされる例について説明するが、常にリセットトリガがオンされた状態とされてもよい。つまり、常に回転行列R’(gt)が算出されるようにしてもよい。
【０２８６】
また、リセットトリガがオンされるタイミングは、いつでもよい。例えばリセットトリガがオンされるタイミングは所定の時間間隔などの予め定められた定期的（周期的）なタイミングであってもよいし、差分Δθtが閾値以上となったタイミングなどであってもよいし、角度θtが所定値以上となったタイミングでもよい。
【０２８７】
〈駆動信号生成処理の説明〉
次に、図１５のフローチャートを参照して、図１４の音声処理装置１１により行われる駆動信号生成処理について説明する。
【０２８８】
なお、ステップＳ５１の処理は図１３のステップＳ１１の処理と同様であるので、その説明は省略する。
【０２８９】
ステップＳ５２において、回転行列演算部２３は外部から供給されたリセットトリガに基づいて、リセットを行うか否かを判定する。例えばリセットトリガがオンとされた場合、リセットを行うと判定される。
【０２９０】
ステップＳ５２においてリセットを行わないと判定された場合、処理はステップＳ５３へと進み、ステップＳ５３乃至ステップＳ５７の処理が行われる。
【０２９１】
なお、ステップＳ５３乃至ステップＳ５７の処理は、図１３のステップＳ１２乃至ステップＳ１６の処理と同様であるので、その説明は省略する。
【０２９２】
ステップＳ５７の処理が行われると、回転演算部２４は得られた行ベクトルH’(gt-1,ω)を頭部伝達関数合成部２７および回転係数保持部２５に供給し、その後、処理はステップＳ６０へと進む。
【０２９３】
これに対してステップＳ５２においてリセットを行うと判定された場合、ステップＳ５８において、回転行列演算部２３は、頭部回転センサ部２１から供給された頭部回転情報の角度gtに基づいて仰角方向の回転行列R’(a(θt))と、水平方向の回転行列R’(u(φt))および回転行列R’(u(ψt))を求める。
【０２９４】
さらに回転行列演算部２３は、これらの回転行列R’(a(θt))、回転行列R’(u(φt))、および回転行列R’(u(ψt))を合成して回転行列R’(gt)を求め、回転演算部２４に供給する。なお、ステップＳ５８では、角度θtに基づいてテーブルから回転行列R’(a(θt))を得るようにしてもよいし、角度θtに基づいて演算により回転行列R’(a(θt))を得るようにしてもよい。同様に、角度φtおよび角度ψtに基づいて演算により回転行列R’(u(φt))、および回転行列R’(u(ψt))を求めるようにしてもよいし、角度φtおよび角度ψtに基づいてテーブルから回転行列R’(u(φt))、および回転行列R’(u(ψt))を得るようにしてもよい。
【０２９５】
ステップＳ５９において、回転演算部２４は、回転行列演算部２３から供給された回転行列R’(gt)と、頭部伝達関数保持部２６に保持されている頭部伝達関数の行ベクトルHS(ω)とに基づいて回転演算を行い、行ベクトルH’(gt-1,ω)を算出する。例えばステップＳ５９では、上述した式（３５）または式（３６）と同様の計算が行われて行ベクトルH’(gt-1,ω)が算出される。
【０２９６】
行ベクトルH’(gt-1,ω)が得られると、回転演算部２４は、得られた行ベクトルH’(gt-1,ω)を頭部伝達関数合成部２７および回転係数保持部２５に供給し、その後、処理はステップＳ６０へと進む。
【０２９７】
ステップＳ５７またはステップＳ５９の処理が行われると、その後、ステップＳ６０およびステップＳ６１の処理が行われて駆動信号生成処理は終了するが、これらの処理は図１３のステップＳ１７およびステップＳ１８の処理と同様であるので、その説明は省略する。
【０２９８】
以上のようにして音声処理装置１１は、リセットトリガがオンされると正確な回転行列R’(gt)や行ベクトルH’(gt-1,ω)を求めて駆動信号を生成する。このようにすることで、必要なメモリ量や演算量を低く抑えつつ誤差の少ない駆動信号を得ることができる。
【０２９９】
なお、例えば聴取者の頭部が仰角方向に急激に大きく回転した場合、差分Δθtが急激に大きくなる。そのため、聴取者の頭部の回転に追従して行ベクトルH’(gt-1,ω)を求めようとしたときに、正確に行ベクトルH’(gt-1,ω)を求めようとすると演算量が多くなり、少ない演算量で行ベクトルH’(gt-1,ω)を求めようとすると誤差が大きくなる。
【０３００】
このような場合に、例えば演算量を低く抑えたい場合には、実際の差分Δθtが、３０度以上などの所定の閾値以上となったときには、実際の差分Δθtの値によらず差分Δθtの値を１度以下の値などに制限して回転行列演算部２３が回転行列R’(a(Δθt))を求めるようにしてもよい。
【０３０１】
このようにすることで、実際の差分Δθtが閾値未満となるまでの間、追従しきれずに回転行列R’(a(Δθt))に誤差が生じてしまうが演算量を低く抑えることが可能となる。なお、このような処理はリセットトリガのオン、オフとは独立に行うようにすることができる。
【０３０２】
また、例えば実際の差分Δθtが、３０度以上などの所定の閾値以上となった場合に、回転行列演算部２３が有効要素幅2C+1を定めるCを所定の値として、そのCに対して定まる有効要素幅2C+1のブロック内の要素、つまり有効な要素についてのみ回転行列R’(a(θt))を求めるようにしてもよい。この場合、回転演算部２４において、Cに対して定まる有効な要素についてのみ式（３６）の計算が行われ、行ベクトルH’(gt-1,ω)が求められる。
【０３０３】
この例では、回転行列R’(ｇt)を用いるために演算量が増加するが、有効要素幅2C+1を定めるCによって定まる有効な要素のみの演算で済むので、聴取者の頭部の回転に追従しつつ演算量をある程度低く抑えることができる。このような処理もリセットトリガのオン、オフとは独立に行うようにすることができる。
【０３０４】
さらに、例えば実際の差分Δθtが、３０度以上などの所定の閾値以上となった場合に、回転行列R’(a(Δθt))を求め、その回転行列R’(a(Δθt))により求められる回転行列R’(Δgt)と行ベクトルH’(gt-1-1,ω)とから行ベクトルH’(gt-1,ω)を求めるが、その際に回転演算部２４が一時的に有効要素幅2C+1を定めるCを通常時よりも大きくするようにしてもよい。ここで、Cの値は定数であってもよいし、次数nや差分Δθtなどにより定められるようにしてもよい。
【０３０５】
このようにすることで、行ベクトルH’(gt-1,ω)を求めるときの演算量は増加するものの聴取者の頭部の回転に対する追従を行うことが可能となる。この場合においてもCの値を変化させる処理はリセットトリガのオン、オフとは独立に行うようにすることができる。
【０３０６】
その他、例えば頭部回転情報の角度θtが予め定められた値（以下、リセットポイントとも称する）となったときに、リセットが行われるようにしてもよい。
【０３０７】
具体的には、例えば回転行列演算部２３には、１または複数のリセットポイントごとに、リセットポイントである角度θについて予め求められた回転行列R’(a(θ))が保持されている。例えばリセットポイントとして定められた角度θ1に対して回転行列R’(a(θ1))が予め保持されているものとする。
【０３０８】
この場合、例えば角度θtが角度θ1であるとき、回転行列演算部２３は、保持している回転行列R’(a(θ1))を回転行列R’(a(θt))として回転行列R’(gt)を求め、回転演算部２４に供給する。このようにすることで、リセットポイントごとに回転行列R’(a(θ))を保持しておくメモリが必要となるが、回転行列R’(a(θt))の演算を行う必要はないので、正確な回転行列R’(a(θt))となるようにリセットを行いつつ演算量を低く抑えることができる。
【０３０９】
〈第２の実施の形態の変形例１〉
〈複数の装置でのリセット制御について〉
また、例えば空間上に複数の聴取者がおり、図１６に示すように各聴取者が装着しているヘッドホン等のそれぞれに対して、複数の音声処理装置のそれぞれが駆動信号を出力する制御システムがあったとする。
【０３１０】
図１６に示す制御システムは、音声処理装置７１−１乃至音声処理装置７１−４と、スイッチ７２とを有している。
【０３１１】
ここで、音声処理装置７１−１乃至音声処理装置７１−４のそれぞれは、図１４に示した音声処理装置１１と同じ構成とされている。なお、以下、音声処理装置７１−１乃至音声処理装置７１−４を特に区別する必要のない場合、単に音声処理装置７１とも称することとする。
【０３１２】
各音声処理装置７１は、入力信号D’nm(ω)を入力とし、図１５を参照して説明した駆動信号生成処理と同様の処理を行って、ヘッドホンの左右の駆動信号pl(g,t)および駆動信号pr(g,t)を出力する。
【０３１３】
なお、各音声処理装置７１は独立した１つの装置であってもよいし、それらの音声処理装置７１が１つの装置に設けられていてもよいが、ここでは各音声処理装置７１が中央にある１つの計算機システム（装置）に設けられているものとする。
【０３１４】
スイッチ７２は、任意のタイミングにおいて、音声処理装置７１−１乃至音声処理装置７１−４のうちの何れか１つの音声処理装置７１にリセットトリガが供給されるように、音声処理装置７１へのリセットトリガの供給を制御する。
【０３１５】
このような制御システムでは、複数の各聴取者は、それぞれヘッドホンを装着しており、それらのヘッドホンのそれぞれは、互いに異なる音声処理装置７１のそれぞれから供給された駆動信号に基づいて音を再生する。
【０３１６】
そして、各音声処理装置７１は、駆動信号の出力先となるヘッドホン、つまりヘッドホンが装着された聴取者の頭部の動き（回転）を頭部回転センサ部２１で検出し、聴取者の頭部の動きに追従して頭部伝達関数を回転させ、駆動信号を生成する。
【０３１７】
制御システムでは、スイッチ７２により４つの音声処理装置７１のそれぞれに対して互いに異なるタイミングでリセットトリガが供給されるため、複数の音声処理装置７１において同時にリセットが行われることがない。したがって、制御システム全体で、突発的に演算負荷が上昇してしまうことを抑制することができる。すなわち、演算量が一時的に多くなってしまうことを防止することができる。
【０３１８】
制御システムにおいて、４つの音声処理装置７１で同時にリセットを行った場合、例えば図１７の矢印Q11に示すように、制御システム全体における演算量は、リセットを行った時刻で一時的に多く（大きく）なる。
【０３１９】
なお、図１７において縦軸は制御システム全体における演算量を示しており、横軸は時間を示している。
【０３２０】
例えば矢印Q11に示す例では、制御システムにおいて、所定の周期で４つの音声処理装置７１で同時にリセットが行われている。例えば時刻t11でリセットが行われており、この時刻t11では演算量が多く（大きく）なっているが、リセットが行われていない他の時刻では演算量は低く抑えられている。
【０３２１】
この場合、演算量が多くなる頻度は少ないものの、リセット時には一時的に制御システムにおける演算負荷が大きくなってしまう。
【０３２２】
これに対して、例えば矢印Q12に示す例では、複数の音声処理装置７１で同時にリセットが行われずに、各音声処理装置７１で互いに異なるタイミングでリセットが行われている。この場合、演算量が増加する頻度は増えるものの、各時刻における演算量はそれほど多くはならない。すなわち、リセット時には演算量は上昇するものの、そのときの演算量の増加は１つの音声処理装置７１におけるリセット分で済むため、複数の音声処理装置７１で同時にリセットを行ったときほど演算負荷はかからない。
【０３２３】
例えば時刻t12では１つの音声処理装置７１でリセットが行われているが、矢印Q11に示した例における時刻t11と比較すると演算量が低く抑えられている。
【０３２４】
なお、ここでは１つの音声処理装置７１ずつリセットを行う例について説明したが、全音声処理装置７１で同時にリセットが行われなければ、演算負荷を抑制することが可能である。例えば全ての音声処理装置７１を、１または複数の音声処理装置７１からなる複数のグループに分け、それらのグループごとにリセットを行うようにしてもよい。
【０３２５】
以上のように複数の音声処理装置７１がある場合には、互いに異なるタイミングで各音声処理装置７１でリセットを行うことで、一時的に演算量が多くなってしまうことを抑制することができる。
【０３２６】
〈第２の実施の形態の変形例２〉
〈次数または位数ごとのリセットについて〉
また、図１４に示した音声処理装置１１の例や図１６に示した制御システムの例によらず、すなわち聴取者が１人か複数人かによらず、リセットを次数nごとや位数mごとに行うようにしてもよい。そのようにすることでもリセット時における演算負荷の上昇を抑制することができる。
【０３２７】
例えば、図１８に示すように行ベクトルH’(gt-1,ω)が、次数n＝０である要素からなる行列H0(ω)、次数n＝１である要素からなる行列H1(ω)、次数n＝２である要素からなる行列H2(ω)、および次数n＝３である要素からなる行列H3(ω)から構成されるとする。
【０３２８】
このような場合に、例えば次数nについて所定の次数の成分のみリセットを行うようにしてもよい。その際、各次数の成分が互いに異なるタイミングでリセットされるようにしてもよいし、いくつかの次数の成分が同時にリセットされるようにしてもよい。
【０３２９】
例えば次数nの０次の成分、つまり次数n＝０の成分のみリセットが行われる場合、０次の成分について回転行列R’(gt)と行ベクトルHS(ω)との積が求められて行列H0(ω)が生成される。
【０３３０】
これに対して、次数nの１次乃至３次の成分については、回転行列R’(Δgt)と行ベクトルH’(gt-1-1,ω)との積が求められて、すなわち式（４１）の計算が行われて行列H1(ω)、行列H2(ω)、および行列H3(ω)が生成される。
【０３３１】
そして、このようにして得られた行列H0(ω)、行列H1(ω)、行列H2(ω)、および行列H3(ω)から、最終的な行ベクトルH’(gt-1,ω)が得られる。
【０３３２】
したがって、例えば図１４に示した音声処理装置１１において、次数nの０次の成分のみリセットが行われるタイミングでは、０次の成分については図１５のステップＳ５８およびステップＳ５９の処理が行われて行列H0(ω)が生成される。これに対して、次数nの１次乃至３次の成分については、ステップＳ５３乃至ステップＳ５７の処理が行われて行列H1(ω)、行列H2(ω)、および行列H3(ω)が生成される。そして、それらの行列H0(ω)、行列H1(ω)、行列H2(ω)、および行列H3(ω)から行ベクトルH’(gt-1,ω)が生成される。
【０３３３】
なお、次数ごとにリセットを行う場合についても、例えば次数nの０次と１次からなるグループなど、いくつかのグループを設けて、それらのグループごとにリセットを行うようにしてもよい。
【０３３４】
例えば図１８に示した例では、次数nの０次から２次までは要素数が少ないため、それらの０次から２次までの次数nを１つのグループとし、次数nの０次、１次、および２次の成分が同時にリセットされるようにしてもよい。この場合、次数nの０次、１次、および２次の成分のリセットのタイミングと、次数nの３次の成分のリセットのタイミングとが互いに異なるタイミングとなる。
【０３３５】
なお、ここでは具体例として次数nごとにリセットを行う場合について説明したが、位数mごとにリセットを行う場合においても次数nごとにリセットを行う場合と同様である。
【０３３６】
〈第２の実施の形態の変形例３〉
〈時間周波数ごとのリセットについて〉
また、図１４に示した音声処理装置１１の例や図１６に示した制御システムの例によらず、すなわち聴取者が１人か複数人かによらず、リセットを時間周波数ωごとに行うようにしてもよい。そのようにすることでもリセット時における演算負荷の上昇を抑制することができる。
【０３３７】
例えば図１９に示すように時間周波数ビンωの数がW個であり、W個の時間周波数ω1乃至時間周波数ωWについて行ベクトルH’(gt-1,ω)が求められるとする。すなわち、行ベクトルH’(gt-1,ω1)乃至行ベクトルH’(gt-1,ωW)が得られるものとする。
【０３３８】
このような場合に、例えば所定の時間周波数ωについてのみリセットを行うようにしてもよい。その際、時間周波数ωごとに異なるタイミングでリセットされるようにしてもよいし、いくつかの時間周波数ωで同時にリセットされるようにしてもよい。
【０３３９】
例えば図１４に示した音声処理装置１１において、時間周波数ω1についてのみリセットが行われるタイミングでは、時間周波数ω1については図１５のステップＳ５８およびステップＳ５９の処理が行われて行ベクトルH’(gt-1,ω1)が生成される。
【０３４０】
これに対して、時間周波数ω2乃至時間周波数ωWについては、図１５のステップＳ５３乃至ステップＳ５７の処理が行われて行ベクトルH’(gt-1,ω2)乃至行ベクトルH’(gt-1,ωW)が生成される。
【０３４１】
なお、時間周波数ωごとにリセットを行う場合についても、１または複数の時間周波数ωからなるグループをいくつか設けて、それらのグループごとにリセットを行うようにしてもよい。
【０３４２】
〈第２の実施の形態の変形例４〉
〈制御システムの他の例〉
また、図１６に示した制御システムでは、複数の聴取者に対応する音声処理装置７１が中央にある１つの計算機システムにより動作している場合が想定されていた。
【０３４３】
しかしながら、聴取者の人数がダイナミックに変化するような場合には、中央の計算機システムの性能を予め決めることが困難である。
【０３４４】
そこで、スマートフォンなどの聴取者ごとのシステム（スレーブ）が独立に各聴取者についての駆動信号を生成する処理を行い、スレーブ側において上述したリセットを行うのに十分な処理性能を有していない場合に、スレーブが接続された中央の装置（マスタ）でリセット時の演算の一部または全部を行うようにしてもよい。
【０３４５】
そのような場合、制御システムは、例えば図２０に示すように構成される。
【０３４６】
図２０に示す制御システムは、マスタ装置１０１とスレーブ１０２−１乃至スレーブ１０２−９とを有している。
【０３４７】
この例では、マスタ装置１０１とスレーブ１０２−１乃至スレーブ１０２−９のそれぞれとが、有線または無線のネットワークを介して相互に接続されている。なお、以下、スレーブ１０２−１乃至スレーブ１０２−９を特に区別する必要のない場合、単にスレーブ１０２とも称することとする。
【０３４８】
マスタ装置１０１は、本来、スレーブ１０２において行われる演算（処理）の一部をスレーブ１０２に代わって行い、その演算結果をスレーブ１０２に対して供給する。
【０３４９】
スレーブ１０２は、例えばヘッドホンやスマートフォンなどからなり、図１４に示した音声処理装置１１に対応する。スレーブ１０２は、聴取者の頭部の回転等に応じて図１５を参照して説明した駆動信号生成処理を行って駆動信号を出力するが、リセット時の演算など、駆動信号生成処理の一部の演算をマスタ装置１０１に依頼する。
【０３５０】
具体的な例として、例えばリセット時の演算をマスタ装置１０１が行うようにすることができる。
【０３５１】
この場合、スレーブ１０２は、マスタ装置１０１に対して角度gtまたは回転行列R’(gt)とともに、行ベクトルH’(gt-1,ω)の算出を要求する演算要求を送信する。
【０３５２】
すると、スレーブ１０２から演算要求と、角度gtまたは回転行列R’(gt)とを受信したマスタ装置１０１は、演算要求に応じて以下の式（４２）の演算を行い、その結果得られた行ベクトルH’(gt-1,ω)をスレーブ１０２へと送信する。
【０３５３】
【数４２】
2019009085.tif 000044
【０３５４】
なお、式（４２）の演算に用いられる行ベクトルHS(ω)は、マスタ装置１０１が事前にスレーブ１０２から取得するようにしてもよいし、マスタ装置１０１に予め保持されているようにしてもよい。
【０３５５】
このようにすることで、スレーブ１０２は、マスタ装置１０１から受信した行ベクトルH’(gt-1,ω)を用いて、少ない演算量で聴取者に対して提示する音の駆動信号を得ることができる。
【０３５６】
なお、上述したように聴取者ごとや次数nごと、位数mごと、時間周波数ωごとなどにリセットが行われるようにしてもよく、そのリセットのタイミングを適切に定めることでマスタ装置１０１における演算負荷を低減させることができる。例えば互いに異なるタイミングで各スレーブ１０２についてのリセットが行われるようにすれば、マスタ装置１０１における演算負荷を低減させることができる。
【０３５７】
〈第２の実施の形態の変形例５〉
〈制御システムの他の例〉
また、第２の実施の形態の変形例４における場合とは逆に、スレーブ１０２においてリセット時の演算を行うようにしてもよい。
【０３５８】
そのような場合、マスタ装置１０１は、逐次、スレーブ１０２から角度gtや回転行列R’(Δgt)などを受信して次式（４３）に示す演算を行い、行ベクトルH’(gt-1,ω)を算出する。
【０３５９】
【数４３】
2019009085.tif 000045
【０３６０】
なお、マスタ装置１０１では、行ベクトルH’(gt-1,ω)を算出するまでの演算が行われ、駆動信号を得るまでの残りの演算はスレーブ１０２で行われるようにしてもよいし、マスタ装置１０１において行ベクトルH’(gt-1,ω)を用いて駆動信号を算出し、スレーブ１０２に供給するようにしてもよい。
【０３６１】
また、リセット時にはスレーブ１０２側において、上述した式（４２）の演算が行われ、その結果得られた行ベクトルH’(gt-1,ω)がスレーブ１０２からマスタ装置１０１に送信される。これにより、マスタ装置１０１は、スレーブ１０２から受信した行ベクトルH’(gt-1,ω)を保持しておき、次回に行う式（４３）の演算に用いることができる。
【０３６２】
このようにスレーブ１０２側でリセット時の演算を行うことで、マスタ装置１０１では、通常、差分を基に計算している行ベクトルH’(gt-1,ω)を、より正確な行ベクトルH’(gt-1,ω)に更新し、誤差をリセットすることができる。
【０３６３】
なお、リセット時の演算に必要となる行ベクトルHS(ω)は、スレーブ１０２が事前にマスタ装置１０１から取得するようにしてもよいし、スレーブ１０２に予め保持されているようにしてもよいし、マスタ装置１０１とスレーブ１０２の両方に予め保持されていてもよい。
【０３６４】
また、マスタ装置１０１とスレーブ１０２の何れか一方の装置のみが行ベクトルHS(ω)等を保持している場合には、接続時や初期化時などの任意のタイミングで、一方の装置が保持している行ベクトルHS(ω)等を他方の装置に送信するようにしてもよい。
【０３６５】
さらに、この実施の形態における場合においても、聴取者ごとや次数nごと、位数mごと、時間周波数ωごとなどにリセットが行われるようにしてもよく、そのリセットのタイミングも適切に定めることができる。ただし、スレーブ１０２側でリセット時の演算を行う場合には、１つのスレーブ１０２において、複数の聴取者についてのリセット時の演算を同時に行うことはないので、リセットのタイミングを分散させる必要はない。
【０３６６】
その他、マスタ装置１０１とスレーブ１０２とで、図１３や図１５を参照して説明した駆動信号生成処理を分担して行うようにしてもよい。つまり、駆動信号生成処理を行うための一部の機能をマスタ装置１０１が担うことで、受聴者の人数がダイナミックに増加したときなどにおいても柔軟に対応することができる。
【０３６７】
〈コンピュータの構成例〉
ところで、上述した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。一連の処理をソフトウェアにより実行する場合には、そのソフトウェアを構成するプログラムが、コンピュータにインストールされる。ここで、コンピュータには、専用のハードウェアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のコンピュータなどが含まれる。
【０３６８】
図２１は、上述した一連の処理をプログラムにより実行するコンピュータのハードウェアの構成例を示すブロック図である。
【０３６９】
コンピュータにおいて、ＣＰＵ（Central Processing Unit）５０１，ＲＯＭ（Read Only Memory）５０２，ＲＡＭ（Random Access Memory）５０３は、バス５０４により相互に接続されている。
【０３７０】
バス５０４には、さらに、入出力インターフェース５０５が接続されている。入出力インターフェース５０５には、入力部５０６、出力部５０７、記録部５０８、通信部５０９、及びドライブ５１０が接続されている。
【０３７１】
入力部５０６は、キーボード、マウス、マイクロホン、撮像素子などよりなる。出力部５０７は、ディスプレイ、スピーカアレイなどよりなる。記録部５０８は、ハードディスクや不揮発性のメモリなどよりなる。通信部５０９は、ネットワークインターフェースなどよりなる。ドライブ５１０は、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどのリムーバブル記録媒体５１１を駆動する。
【０３７２】
以上のように構成されるコンピュータでは、ＣＰＵ５０１が、例えば、記録部５０８に記録されているプログラムを、入出力インターフェース５０５及びバス５０４を介して、ＲＡＭ５０３にロードして実行することにより、上述した一連の処理が行われる。
【０３７３】
コンピュータ（ＣＰＵ５０１）が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブル記録媒体５１１に記録して提供することができる。また、プログラムは、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の伝送媒体を介して提供することができる。
【０３７４】
コンピュータでは、プログラムは、リムーバブル記録媒体５１１をドライブ５１０に装着することにより、入出力インターフェース５０５を介して、記録部５０８にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部５０９で受信し、記録部５０８にインストールすることができる。その他、プログラムは、ＲＯＭ５０２や記録部５０８に、あらかじめインストールしておくことができる。
【０３７５】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【０３７６】
また、本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
【０３７７】
例えば、本技術は、１つの機能をネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
【０３７８】
また、上述のフローチャートで説明した各ステップは、１つの装置で実行する他、複数の装置で分担して実行することができる。
【０３７９】
さらに、１つのステップに複数の処理が含まれる場合には、その１つのステップに含まれる複数の処理は、１つの装置で実行する他、複数の装置で分担して実行することができる。
【０３８０】
また、本明細書中に記載された効果はあくまで例示であって限定されるものではなく、他の効果があってもよい。
【０３８１】
さらに、本技術は、以下の構成とすることも可能である。
【０３８２】
（１）
聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させる回転演算部と、
前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成する合成部と
を備える信号処理装置。
（２）
前記回転演算部は、少なくとも１つの回転方向に対する前記頭部伝達関数の回転演算について、所定時刻よりも前の他の時刻における前記回転方向の前記回転演算の演算結果を用いて前記所定時刻の前記回転演算を行うことで、前記所定時刻における前記回転後の前記頭部伝達関数を求める
（１）に記載の信号処理装置。
（３）
前記回転演算部は、前記所定時刻における前記聴取者の頭部の前記回転方向の回転角度と、前記他の時刻における前記聴取者の頭部の前記回転方向の回転角度との差分に応じた回転行列、および前記他の時刻における前記回転方向の前記回転演算の演算結果に基づいて、前記所定時刻における前記回転方向の前記回転演算を行う
（２）に記載の信号処理装置。
（４）
前記回転演算部は、前記位数を制限した演算として、所定範囲の前記位数の要素についてのみ前記回転演算を行う
（３）に記載の信号処理装置。
（５）
前記回転演算部は、前記回転方向としての仰角方向について、前記他の時刻における前記回転方向の前記回転演算の演算結果を用いて、前記所定時刻における前記回転方向の前記回転演算を行う
（３）または（４）に記載の信号処理装置。
（６）
前記回転演算部は、
回転行列のリセットを行わない場合、前記他の時刻における前記回転方向の前記回転演算の演算結果を用いて、前記所定時刻における前記回転方向の前記回転演算を行い、
回転行列のリセットを行う場合、前記所定時刻における前記聴取者の頭部の前記回転方向の回転角度に応じた回転行列と前記頭部伝達関数とに基づいて、前記所定時刻における前記回転方向の前記回転演算を行う
（３）乃至（５）の何れか一項に記載の信号処理装置。
（７）
前記リセットは次数ごと、位数ごと、または時間周波数ごとに行われる
（６）に記載の信号処理装置。
（８）
複数の前記聴取者ごとに前記ヘッドホン駆動信号が生成される場合、前記聴取者ごとに前記リセットが行われる
（６）または（７）に記載の信号処理装置。
（９）
前記回転演算部は、前記リセットを行う場合、前記所定時刻における前記聴取者の頭部の前記回転方向の回転角度に応じた回転行列として、予め求められた回転行列を用いて前記回転演算を行う
（６）乃至（８）の何れか一項に記載の信号処理装置。
（１０）
前記回転演算部は、前記頭部回転に対応する前記回転行列を構成する所定回転方向への回転を行う回転行列が複数の行列の和により表される場合、前記位数を制限した演算として、前記複数の前記行列のうちのいくつかの前記行列の和を前記所定回転方向への回転を行う回転行列として用いて前記頭部伝達関数を回転させる演算を行う
（１）乃至（９）の何れか一項に記載の信号処理装置。
（１１）
聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させ、
前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成する
ステップを含む信号処理方法。
（１２）
聴取者の頭部回転に対応する回転行列に基づいて、前記回転行列の位数を制限した演算により球面調和領域の頭部伝達関数を回転させ、
前記演算により得られた回転後の前記頭部伝達関数と、球面調和領域の音の信号とを合成することでヘッドホン駆動信号を生成する
ステップを含む処理をコンピュータに実行させるプログラム。
【符号の説明】
【０３８３】
１１  音声処理装置，  ２１  頭部回転センサ部，  ２２  前回方向保持部，  ２３  回転行列演算部，  ２４  回転演算部，  ２５  回転係数保持部，  ２６  頭部伝達関数保持部，  ２７  頭部伝達関数合成部，  ２８  時間周波数逆変換部
【図１】
2019009085.tif 000046
【図２】
2019009085.tif 000047
【図３】
2019009085.tif 000048
【図４】
2019009085.tif 000049
【図５】
2019009085.tif 000050
【図６】
2019009085.tif 000051
【図７】
2019009085.tif 000052
【図８】
2019009085.tif 000053
【図９】
2019009085.tif 000054
【図１０】
2019009085.tif 000055
【図１１】
2019009085.tif 000056
【図１２】
2019009085.tif 000057
【図１３】
2019009085.tif 000058
【図１４】
2019009085.tif 000059
【図１５】
2019009085.tif 000060
【図１６】
2019009085.tif 000061
【図１７】
2019009085.tif 000062
【図１８】
2019009085.tif 000063
【図１９】
2019009085.tif 000064
【図２０】
2019009085.tif 000065
【図２１】
2019009085.tif 000066
【国際調査報告】
2019009085.tif 000067
2019009085.tif 000068