6.2.16 NormalizeMUSIC

6.2.16.1 ノードの概要

LocalizeMUSIC モジュールで計算された MUSIC スペクトルを $[0~ 1]$ の範囲に正規化し, SourceTracker モジュールによる音源検出を安定化させるモジュール.

6.2.16.2 必要なファイル

無し.

6.2.16.3 使用方法

どんなときに使うのか

HARK での音源定位では,各時間・方向1 で計算された MUSIC スペクトルに閾値を設定し, 閾値を超える MUSIC スペクトルを持つ時間・方向に音源が存在すると判定する. このモジュールは,LocalizeMUSIC モジュールによって計算される MUSIC スペクトルに対して, SourceTracker モジュールで閾値を設定するのが困難な場合に利用することができる. このモジュールは観測音に対する MUSIC スペクトルを $[0~ 1]$ の範囲に正規化するため, SourceTracker モジュールで設定する閾値は $0.95$ などに設定すれば音源定位が安定する.

内部では,正規化用パラメータ推定と,MUSIC スペクトルの正規化処理を行なっている. 正規化用パラメータ推定は MUSIC スペクトルがある程度たまると計算され, 観測された MUSIC スペクトルから音源が存在する/しない場合の MUSIC スペクトルの分布を得る. 推定された正規化用パラメータを利用して,各フレームでの MUSIC スペクトルの正規化処理をパーティクルフィルタによって行う.

典型的な接続例

図 6.32NormalizeMUSIC の使用例を示す. 図 6.32 では,LocalizeMUSIC モジュールの出力 (OUTPUT: 音源位置や対応する MUSIC スペクトル値などの音源情報, SPECTRUM: 各方向の MUSIC スペクトル) を, NormalizeMUSIC にそれぞれ入力している. NormalizeMUSIC の出力 SOURCES_OUT は,LocalizeMUSIC の出力 OUTPUT と同様に SourceTracker モジュールに接続できる.

\includegraphics[width=.5\textwidth ]{fig/modules/NormalizeMUSIC}
Figure 6.32: NormalizeMUSIC example

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

Table 6.28: NormalizeMUSIC のパラメータ表

パラメータ名

デフォルト値

単位

説明

SHOW_ALL_PARAMETERS

bool 

false

 

INITIAL_THRESHOLD 以外の設定可能なパラメータの表示/非表示を設定.

INITIAL_THRESHOLD

float 

30

 

音源が存在する/しないときの MUSIC スペクトルのおおまかな境目の値.最初の正規化用パラメータ更新にも利用する.

ACTIVE_PROP

float 

0.05

 

正規化用パラメータ更新を行うか否かの閾値.

UPDATE_INTERVAL

int 

10

 

正規化用パラメータ更新の周期,および,更新に利用する MUSIC スペクトルの時間フレーム数.

PRIOR_WEIGHT

float 

0.02

 

正規化用パラメータ更新時の正則化パラメータ.

MAX_SOURCE_NUM

int 

2

 

下記パーティクルフィルタの 1 つのパーティクルが持つ音源数.実際の音源数より少なくても良い.

PARTICLE_NUM

int 

100

 

正規化スペクトル計算時に利用するパーティクルフィルタのパーティクル数.

LOCAL_PEAK_MARGIN

float 

0

 

MUSIC スペクトルが極大になる方向を取得する際,隣接方向同士で無視する MUSIC スペクトルの差.

入力

SOURCES_IN

: Vector<ObjectRef> 型.LocalizeMUSIC の OUTPUT と接続.音源情報 (音源位置と対応する MUSIC スペクトル) が格納されている.

MUSIC_SPEC

: Vector<float> 型.LocalizeMUSIC の SPECTRUM と接続.各方向ごとの MUSIC スペクトル値.パラメータ更新や正規化に利用.

出力

SOURCES_OUT

: Vector<ObjectRef> 型.入力の SOURCES_IN と同じ音源情報が入っている.ただし,各音源の MUSIC スペクトルは $[0~ 1]$ に正規化された値に書き換えられている.

01_SPEC

: Vector<float> 型.入力の MUSIC_SPEC を正規化した値.デバッグなどに使用.

パラメータ

SHOW_ALL_PARAMETERS

: bool 型.デフォルトは false.下記の INITIAL_THRESHOLD 以外のパラメータを変更したい場合は trueにして表示させる. 多くの場合,INITIAL_THRESHOLD 以外はデフォルト値で問題なく動作する.

INITIAL_THRESHOLD

: float 型.この値は 2 つの役割を果たす. (1) パラメータ更新時に音源が存在する/しない場合の境目の事前知識として利用. (2) 下記 ACTIVE_PROP と併用して最初のパラメータ更新をするかを決定する.

ACTIVE_PROP

: float 型.デフォルト値は $0.05$.MUSIC スペクトルが UPDATE_INTERVAL フレーム集まったとき, その観測値に基づいて正規化用パラメータを更新するかを決める閾値. MUSIC スペクトルが $T$ フレーム,$D$ 方向,合計 $TD$ 個あり,ACTIVE_PROP が $\theta $ のとき, INITIAL_THRESHOLD よりも大きな MUSIC スペクトルの値を持つ時間・方向点が $\theta TD$ 個以上あった場合, 正規化用パラメータの更新処理が行われる.

UPDATE_INTERVAL

: 正規化用パラメータ更新に使う MUSIC スペクトルのフレーム数. ここで指定したフレーム数を周期として更新が行われる. HARK を初期設定で利用した場合,16000 (Hz) サンプリングされた音声信号が MultiFFT モジュールにて, 160 (pt),つまり 0.01 (sec) 間隔で短時間フーリエ変換が行われる. LocalizeMUSIC では,初期設定では 50 フレームおき,つまり 0.5 (sec) おきに MUSIC スペクトルが計算される. したがって,UPDATE_INTERVAL を 10 に設定すると,5 (sec) のデータを使って正規化パラメータの更新が行われる.

PRIOR_WEIGHT

: 正規化パラメータ更新でのパラメータ計算を安定化させる正則化パラメータ. 具体的な意味は下記の 技術的な詳細,値設定の目安は トラブルシューティング をそれぞれ参照されたい.

MAX_SOURCE_NUM

: MUSIC スペクトル正規化に用いるパーティクルフィルタで, 各パーティクルは音源が存在する方向を仮説として持っている. その時に各パーティクルが持つことのできる音源数の最大値. 入力音の実際の音源数にかかわらず,1–3 に設定すると安定する.

PARTICLE_NUM

: MUSIC スペクトル正規化に用いるパーティクルフィルタが利用するパーティクル数. 経験的には,MUSIC スペクトルが 72 方向 ($5^\circ $ 解像度で水平面 1 周分) の場合,100 程度で十分. より多くの方向 (例えば,仰角方向も考慮し $72\times 30$ 方向など) を扱う場合,より多くの粒子数が必要の可能性がある.

LOCAL_PEAK_MARGIN

: MUSIC スペクトル正規化のパーティクルフィルタでは, MUSIC スペクトルが極大値をとる方向を利用する. 隣接方向の MUSIC スペクトル値と比較する際,無視する MUSIC スペクトルの差を設定する. この値を大きくし過ぎると,どの方向でも MUSIC スペクトルが極大と解釈され, 音源の誤検出につながるおそれがある.

6.2.16.5 ノードの詳細

技術的な詳細: 正規化パラメータの計算や,そのパラメータによる MUSIC スペクトルの正規化の詳細は下記の参考文献を参照されたい. 下記の文献中で,正規化パラメータの計算は VB-HMM (変分ベイズ隠れマルコフモデル) の事後分布推定に対応し, MUSIC スペクトルの正規化処理は,パーティクルフィルタによるオンライン確率推定に対応している.

\includegraphics[width=.5\textwidth ]{fig/modules/NormalizeMUSIC_histogram.eps}
Figure 6.33: MUSIC スペクトルからのパラメータ学習

おおまかには,図 6.33 に示すように, 観測した MUSIC スペクトルの分布 (図 6.33 中,青い度数分布) から, 音源が存在しない場合の分布 (赤)と,音源が存在する場合の分布 (緑) をガウス分布でフィッティングしている.

以下では,この文献中の変数の値と,このノードのパラメータの対応関係を述べる. 正規化パラメータ計算用の VB-HMM に対する入力は,フレーム数 $T$,方向数 $D$ の MUSIC スペクトルである. $T$ は UPDATE_INTERVAL に指定されたフレーム数で,$D$ は LocalizeMUSIC モジュールから出力される方向数である. VB-HMM が用いるハイパーパラメータは $\alpha _{0}, \beta _{0}, m_0, a_0, b_0$ がある. これらのうち,$\alpha _0, a_0, b_0$ は文献と同様に 1 に設定されている. $m_0$ としては INITIAL_THRESHOLD を利用し, $\beta _0$ は,PRIOR_WEIGHT の値を $\varepsilon $ としたとき,$\beta _0 = TD\varepsilon $ とする.

処理の流れ図:

\includegraphics[width=.7\textwidth ]{fig/modules/NormalizeMUSIC_process_flow.eps}
Figure 6.34: 処理の流れ図

図 6.34 に,NormalizeMUSIC モジュール内の処理の流れずを示す. 青線が SOURCES_IN から SOURCES_OUT への音源情報のデータの流れ, 赤実線が正規化前の MUSIC スペクトル,赤破線が正規化後の MUSIC スペクトルの値の流れを示す. 毎フレーム行われる処理は,(1) 最新の正規化パラメータを利用した MUSIC スペクトルの正規化処理と (中央列), (2) 音源情報内の MUSIC パワー値を正規化したものに置き換える処理 (左列) である. 後段の SourceTracker モジュールは,音源情報内の MUSIC パワー値を参照して音源の検出処理を行なっている.

右列は,観測した MUSIC スペクトルからの正規化パラメータ更新処理に相当する. 正規化パラメータの更新処理は,次の 2 つの基準が満たされると実行される.

  1. MUSIC スペクトルのバッファが UPDATE_INTERVAL フレームだけたまった,かつ

  2. 音源が存在する時間・方向点の割合が ACTIVE_PROP を超える.

1. が満たされたとき,フレーム数 $T$,方向数 $D$ の MUSIC スペクトル $x_{t,d}$ に対して, 2. の判定を行う. ACTIVE_PROP の値を $\theta $ とする.
最初の更新: プログラムが実行されてから,1 度も正規化パラメータ更新が行われていない場合, $x_{t,d}$ のうち,INITIAL_THRESHOLD を超える時間・方向点の個数が $\theta TD$ を超える場合, 正規化パラメータ更新処理が行われる.
以降の更新: それ以降は,前回の正規化パラメータ更新が観測音の MUSIC スペクトルを反映しているため, 正規化された MUSIC スペクトルの合計値が $\theta TD$ を超える場合に次の 正規化パラメータの更新処理が行われる.

トラブルシューティング: ここでは,正しく音源定位・検出が行われない場合のモジュールパラメータ調整の指針を示す.

基本はMUSIC スペクトルを可視化: MUSIC スペクトルが音源が存在するときに高い値,音源が存在しないときは低い値になっているか確認する. 可視化の方法は LocalizeMUSIC モジュールのパラメータ DEBUG を trueにして, ネットワークを実行した時に標準出力に現れる MUSIC スペクトルの値を適当なツール (例: python+matplotlib,matlab など) で可視化する. HARK クックブック 「3.3 うまく定位できない」に同様の説明がある. もし,MUSIC スペクトルの計算結果が信頼出来ない場合,HARK クックブック 「8 音源定位」などを参照し,問題点を確認する. LocalizeMUSIC の NUM_SOURCE を 1 にする,LOWER_BOUND_FREQUENCY を 1000 (Hz) に上げることで MUSIC スペクトルの計算が安定化する場合がある.

まず試すこと: パラメータ ACTIVE_PROP,PRIOR_WEIGHT を 0 にし, INITIAL_THRESHOLD を 低め (例: 20 程度) にする. NormalizeMUSIC の SOURCES_OUT を接続した SourceTracker モジュールの THRESH パラメータを 0.95 に設定する. この状態で何も定位できない場合,MUSIC スペクトルが正しく計算されていない可能性が高い. 音源が過度に検出される場合,INITIAL_THRESHOLD を 5 刻み程度で上げて調整していく (例: 20 $\rightarrow $ 25 $\rightarrow $ 30).

音源が過度に検出される: 考えられる要因は (1) 検出したくない方向の MUSIC スペクトル値が高い, (2) 図 6.33 の音源が存在する緑の分布の平均値が低い,などが考えられる. (1) の場合,雑音相関行列を利用した MUSIC アルゴリズムの利用 (LocalizeMUSIC モジュール参照), LocalizeMUSIC の LOWER_BOUND_FREQUENCY パラメータを 800–1000 (Hz) に上げるなどで問題が和らぐことがある. 後者は特に,音源間が近いため,音源間の MUSIC スペクトル値が高い場合に有用である. (2) の場合,INITIAL_THRESHOLD の値を上げる (例: 30 から 35 に上げてみる), PRIOR_WEIGHT の値を上げる (例: 0.05–0.1 程度にする),

音源が検出されない: 考えられる要因は (1) 検出するべき方向の MUSIC スペクトル値が低い, (2) INITIAL_THRESHOLD が大きすぎる. (1) の場合,LocalizeMUSIC の調整が必要である. NUM_SOURCES パラメータを実際の音源数と揃える (あるいは $M-1$, $M-2$ など大きめの値を使う,ただし $M$ はマイク数), LOWER_BOUND_FREQUENCY,UPPER_BOUND_FREQUENCY を目的音に適った周波数帯域に設定する. (2) の場合,INITIAL_THRESHOLD を下げてみる.

6.2.16.6 参考文献


Footnotes

  1. 例えば,10 ms の時間解像度,$5^\circ $ おきの方向解像度など.
  2. http://winnie.kuis.kyoto-u.ac.jp/members/okuno/Public/Interspeech2011-Otsuka.pdf
  3. http://winnie.kuis.kyoto-u.ac.jp/SIG-Challenge/SIG-Challenge-B102/SIG-Challenge-B102.pdf