6.2.19 SourceTracker

6.2.19.1 ノードの概要

時系列で入力された ID 無しの音源定位結果に対して, 到来方向の近さに応じてクラスタリングを行い, IDを与えるノード. 本ノードを通過した後の音源定位結果は,同じ音源か否かを ID のみから判 定することが可能になる. ただし, 音長による信号の削除は行わない.

6.2.19.2 必要なファイル

無し.

6.2.19.3 使用方法

どんなときに使うのか

定位された音源の到来方向は, 音源を固定していても(直立した人,固定したスピーカなど) 通常同一方向であり続けることはない.従って,異なる時刻での到来方向が,同一音源 となるように音源 ID を統一するためには,音源定位結果を追跡する必要がある. SourceTracker では,しきい値より近い到来方向の音源同士に対して同じID を 与えるというアルゴリズムを用いている. 本ノードを用いることで,音源に ID が付与され, ID 毎の処理が行える.

典型的な接続例

通常は,ConstantLocalization ,LocalizeMUSIC などの音源定位ノードの出力を 本ノードの入力端子に接続する.すると適切な ID が定位結果に付加されるので, 音源定位に基づく音源分離ノード GHDSS などや音源定位結果の表示ノード (DisplayLocalization )に接続する.

6.42に接続例を示す. ここでは,固定の音源定位結果を, SourceTracker を通して表示している. このとき, ConstantLocalization の出力する定位結果が 近ければ,それらは一つの音源にまとめて出力される. 図中のConstantLocalization に次のプロパティを与えた場合は,2 つの音源の 成す角は MIN_SRC_INTERVALのデフォルト値 20 [deg] より小さいので, 1 つの音源だけが表示される.

ANGLES:

<Vector<float> 10 15> 

ELEVATIONS:

<Vector<float> 0 0> 

設定値の意味は ConstantLocalization を参照.

\includegraphics[width=\linewidth ]{fig/modules/SourceTracker}
Figure 6.42: SourceTracker の接続例

6.2.19.4 ノードの入出力とプロパティ

入力

INPUT

: Vector<ObjectRef> 型.ID が振られていない音源定位結果.

出力

OUTPUT

: Vector<ObjectRef> 型.位置が近い音源に同じ ID を与えた音源定位結果

パラメータ

Table 6.32: SourceTracker のパラメータ表

パラメータ名

デフォルト値

単位

説明

THRESH

float 

   

音源のMUSICパワーがこれより小さければ無視.

PAUSE_LENGTH

float 

800

10 [frame]

音源の生存時間.

COMPARE_MODE

string 

DEG

DEG or TFINDEX

音源間の距離の計算方法. DEG は角度計算, TFINDEX はインデックスの比較.

MIN_SRC_INTERVAL

float 

20

[deg]

同一の音源とみなす角度差の閾値. (COMPARE_MODE = DEG のとき有効)

MIN_TFINDEX_INTERVAL

int 

3

 

同一の音源とみなすインデックス差の閾値. (COMPARE_MODE = TFINDEX のとき有効)

MIN_ID

int 

0

 

割り当てられる 音源ID の最小値

DEBUG

bool 

false

 

デバッグ出力の有無。

THRESH

: float 型. 音源定位結果を無視すべきノイズか否かを,そのMUSICパワーで判定する. MUSICパワーがTHRESHより小さければノイズであると判断し, その定位結果は出力には反映されなくなる. 小さくしすぎるとノイズを拾い,大きくしすぎると目的音の定位が困難になるので, このトレードオフを満たす値を見つける必要がある.

PAUSE_LENGTH

: float 型. 一度定位結果として出力した音源が,どれだけ長く続くと仮定するかを決めるパラメータ. 一度定位した方向は,それ以降に音源定位結果が無くても, PAUSE_LENGTH / 10 [frame] の繰り返しの間だけ同一方向の定位結果を出力し続ける. デフォルト値は800なので,1度定位した方向は,それ以降の80 [frame] の繰り返しの間は 定位結果を出力し続ける.

COMPARE_MODE

: 型. DEG を選択すると音源を追跡時の音源方向の比較を三角関数を使った角度計算になり、 TFINDEX を選択すると伝達関数中の対応するインデックスの単なる比較になる。 インデックスと角度差が等価ならば (順番に録音しているならば、) 計算量が削減可能。

MIN_SRC_INTERVAL

: float 型.音源の到来方向の差が MIN_SRC_INTERVAL より小さければ 同一の音源とみなして片方の音源定位結果を削除する. こうして音源定位が揺らいでも追跡できる. COMPARE_MODE が DEG のとき有効。  

MIN_TFINDEX_INTERVAL

: int 型. MIN_SRC_INTERVAL とほぼ同じ。比較するのみ値が異なる。 COMPARE_MODE が TFINDEX のとき有効。

MIN_ID

: int 型.定位結果ごとに割り振られるIDの開始番号を定める.

DEBUG

: bool 型. trueが与えられると, 音源定位結果が標準エラー出力に も出力される。

6.2.19.5 ノードの詳細

まず,本節で用いる記号を定義する.

  1. ID : 音源のID

  2. MUSICパワー $p$: LocalizeMUSIC で計算された、定位された音源方向の MUSIC スペクトルのパワー.

  3. 座標 $x,y,z$: 音源定位方向に対応する,単位球上の直交座標.

  4. 継続時間 $r$: 定位された音源がそれ以降どれだけ続くと仮定するかの指標.

定位された音源のMUSICパワーを$p$, 音源方向に対応する単位球上の直交座標を $x$,$y$,$z$ とする.

現在ノードが保持している音源数を$N$, 新たに入力された音源数を$M$とする. また,直前の値には$^{last}$を,現在の値には$^{cur}$の添字をつける. 例えば,$i$番号めの新たに入力された音源のMUSICパワーは $p^{cur}_ i$ と表示する.

音源の近さを判定する指標の,音源同士の成す角を $\theta \in [0, 180] $ とする.

音源方向の近さの判定方法:

成す角 $\theta $ は,二つの音源方向を, ${\boldsymbol q}_1 = (x_1,y_1,z_1)$ と ${\boldsymbol q}_2 = (x_2,y_2,z_2)$ で表現すると次のように求まる.

  \begin{equation} {\boldsymbol q}_1 \cdot {\boldsymbol q}_2 = |{\boldsymbol q}_1| |{\boldsymbol q}_2| \cos \theta \end{equation}   (17)

ここで逆余弦関数を用いると,$\theta $が求まる.

  \begin{equation} \theta = \cos ^{-1} \left( \frac{ {\boldsymbol q}_1 \cdot {\boldsymbol q}_2 }{ |{\boldsymbol q}_1| |{\boldsymbol q}_2| } \right) = \cos ^{-1} \left( \frac{ x_1\cdot x_2 + y_1 \cdot y_2 + z_1 \cdot z_2 }{ \sqrt { x_1^2 + y_1^2 + z_1^2 } \sqrt { x_2^2 + y_2^2 + z_2^2 } } \right) \end{equation}   (18)

以下では,表記を簡単にするために,第$i$音源と第$j$音源との成す角を$\theta _{ij}$と表記する.

音源追跡方法:

SourceTracker の音源追跡アルゴリズムを図6.43に まとめる. また,青い丸が既にノードが持っている音源位置 ($^{last}$), 緑の丸が新たに入力された音源位置 ($^{cur}$)を表す.

まず,すべての音源に対して,MUSICパワー$p^{cur}_ i$,$p^{last}_ j$がTHRESHより小さければそれを削除する. 次に,既にノードが持つ定位情報と 新たに入力された音源位置を比較し,十分近い(=$\theta _{ij}$がMIN_SRC_INTERVAL[deg]以下)なら統合する. 統合された音源には同じIDが付与され, 継続時間$r^{last}$がPAUSE_LENGTHでリセットされる. 統合は,1つの音源を残して他のすべての音源位置を削除することで実現される.

$\theta _{ij}$が MIN_SRC_INTERVAL [deg]より大きい音源は,異なる音源とみなされる. ノードが保持しているが,新たに入力されなかった音源位置は, $r^{last}$を10だけ減らす. もし,$r^{last}$が0を下回ったら, 音源が消えたとみなして,その音源位置を削除する. 新たに入力された音源位置が,既にノードが持つ音源位置のいずれとも異なる場合は, 新たなIDを付与され,$r^{cur}$がPAUSE_LENGTHで初期化される.

\includegraphics[width=.6\linewidth ]{fig/modules/SourceTracker.eps}
Figure 6.43: SourceTracker の音源追跡方法.横軸が時間(=繰り返し回数)で,縦軸が音源方向を表す.