6.2.14 LocalizeMUSIC

6.2.14.1 ノードの概要

マルチチャネルの音声波形データから,MUltiple SIgnal Classification (MUSIC) 法を用いて,マイクロホンアレイ座標系で水平面方向での音源方向を推定する. HARK  における音源定位のメインノードである.

6.2.14.2 必要なファイル

ステアリングベクトルからなる定位用伝達関数ファイルが必要. マイクロホンと音源の位置関係,もしくは,測定した伝達関数に基づき生成する.

6.2.14.3 使用方法

どんなときに使うのか

本ノードは MUSIC法 によって,どの方向にどのくらいのパワーの音があるかを推定する. 大きなパワーを持つ方向を各フレームで検出することで, 音源の方向や,音源数, 発話区間などをある程度知ることが可能である. 本ノードから出力される定位結果が,後段の音源追跡や音源分離に利用される.

典型的な接続例

典型的な接続例を図6.31に示す.

\includegraphics[width=0.85\linewidth ]{fig/modules/LocalizeMUSIC}
Figure 6.31: LocalizeMUSIC の接続例

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

入力

INPUT

: Matrix<complex<float> > , 入力信号の複素周波数表現 $M \times (NFFT/2+1)$.

NOISECM

: Matrix<complex<float> > 型. 各周波数ビン毎の相関行列.$M$次の複素正方行列である相関行列が $NFFT / 2 + 1$ 個入力される. Matrix<complex<float> > の行は周波数($NFFT / 2 + 1$ 行)を,列は複素相関行列($M * M$ 列)を表す. 本入力端子は開放することも可能であり,開放した場合は相関行列に単位行列が用いられる.

TRANSFER_FUNCTION

: TransferFunction 型. 本ノードでは伝達関数ファイルを読み込みこんで演算を行うことができるが EstimateTF ノードなどの出力から伝達関数をTransferFunction 型の入力とすることも可能である.ノードの入力として利用する際はパラメータTF_INPUT_TYPEをONLINEと指定する. 本入力端子は,デフォルトでは非表示である.

非表示入力の追加方法は図 6.32を参照されたい.

\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_input1}
Step 1: LocalizeMUSIC を右クリックし,Add Input をクリック
\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_input2}
Step 2: Iutputs の入力フォームに TRANSFER_FUNCTION を記入し,Add をクリック
\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_input3}
Step 3: ノードに TRANSFER_FUNCTION 入力端子が追加される
Figure 6.32: 非表示入力の使用例 : TRANSFER_FUNCTION 端子の表示

出力

OUTPUT

: Vector<ObjectRef> 型で音源位置(方向)を表す. ObjectRef は,Source であり,音源位置とその方向のMUSIC スペクトルの パワーからなる構造体である.Vector の要素数は音源数 ($N$) . MUSIC スペクトルの詳細については,ノードの詳細を参照されたい.

SPECTRUM

: Vector<float> 型.各方向毎の MUSIC スペクトルのパワー. 式(16)の$\bar{P}(\theta )$に相当する. 三次元音源定位の場合は$\theta $が三次元となる. 出力形式についてはノードの詳細を参照. 本出力端子は,デフォルトでは非表示である.

非表示出力の追加方法は図 6.33を参照されたい.

\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_output1}
Step 1: LocalizeMUSIC を右クリックし,Add Output をクリック
\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_output3}
Step 2: Outputs の入力フォームに SPECTRUM を記入し,Add をクリック
\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_output4}
Step 3: ノードに SPECTRUM 出力端子が追加される
Figure 6.33: 非表示出力の使用例 : SPECTRUM 端子の表示

パラメータ

Table 6.31: LocalizeMUSIC のパラメータ表

パラメータ名

デフォルト値

単位

説明

MUSIC_ALGORITHM

string 

SEVD

 

MUSICのアルゴリズム

TF_CHANNEL_SELECTION

Vector<int> 

下記参照

 

使用チャネル番号

LENGTH

int 

512

[pt]

FFT点数($NFFT$)

SAMPLING_RATE

int 

16000

[Hz]

サンプリングレート

TF_INPUT_TYPE

string 

FILE

 

伝達関数の入力方法

A_MATRIX

string 

   

定位用伝達関数ファイル名

WINDOW

int 

50

[frame]

相関行列の平滑化フレーム数

WINDOW_TYPE

string 

FUTURE

 

相関行列の平滑化区間

PERIOD

int 

50

[frame]

定位結果を算出する周期

NUM_SOURCE

int 

2

 

MUSICで仮定する音源数

MIN_DEG

int 

-180

[deg]

ピーク探索方位角の最小値

MAX_DEG

int 

180

[deg]

ピーク探索方位角の最大値

LOWER_BOUND_FREQUENCY

int 

500

[Hz]

使用周波数帯域の最小値

UPPER_BOUND_FREQUENCY

int 

2800

[Hz]

使用周波数帯域の最大値

SPECTRUM_WEIGHT_TYPE

string 

Uniform

 

定位周波数重みの種類

A_CHAR_SCALING

float 

1.0

 

A 特性重みの伸展係数

MANUAL_WEIGHT_SPLINE

Matrix<float> 

下記参照

 

スプライン重みの係数

MANUAL_WEIGHT_SQUARE

Matrix<float> 

下記参照

 

矩形重みの周波数転換点

ENABLE_EIGENVALUE_WEIGHT

bool 

true

 

固有値重みの有無

ENABLE_INTERPOLATION

bool 

false

 

伝達関数補間の有無

INTERPOLATION_TYPE

string 

FTDLI

 

伝達関数補間手法

HEIGHT_RESOLUTION

float 

1.0

[deg]

仰角の補間間隔

AZIMUTH_RESOLUTION

float 

1.0

[deg]

方位角の補間間隔

RANGE_RESOLUTION

float 

1.0

[m]

半径の補間間隔

PEAK_SEARCH_ALGORITHM

string 

LOCAL_MAXIMUM

 

音源探索アルゴリズム

MAXNUM_OUT_PEAKS

int 

-1

 

最大出力音源数

DEBUG

bool 

false

 

デバッグ出力の ON/OFF

MUSIC_ALGORITHM

: string 型.MUSIC 法において,信号の部分空間を計算するために使うアルゴリズムの選択. SEVD は標準固有値分解を,GEVD は一般化固有値分解を,GSVD は一般化特異値展開を表す. LocalizeMUSIC は,NOISECM 端子から雑音情報を持つ相関行列を入力することで, その雑音を白色化(抑圧)した音源定位ができる機能を持つ. SEVD はその機能がついていない音源定位を実現する. SEVD を選択した場合は NOISECM 端子からの入力は無視される. GEVD と GSVD は共に NOISECM 端子から入力された雑音を白色化する機能を持つが, GEVD は GSVD に比べて雑音抑圧性能が良好だが計算時間がおよそ4倍かかる問題を持つ. 使用したい場面や計算機環境に合わせて,三つのアルゴリズムを適宜使い分けられる. アルゴリズムの詳細については,ノードの詳細を参照されたい.

TF_CHANNEL_SELECTION

: Vector<int> 型.定位用伝達関数ファイルに格納されている マルチチャネルのステアリングベクトルの中で,指定したチャネルのステアリングベクトルを選択するパラメータである. ChannelSelector と同様に,チャネル番号は 0 から始まる. デフォルトでは 8 チャネルの信号処理を想定し,<Vector<int> 0 1 2 3 4 5 6 7>  と設定されている. 本パラメータの成分数($M$)を入力信号のチャネル数と合わせる必要がある. また,INPUT 端子に入力されるチャネルの順序と TF_CHANNEL_SELECTION のチャネル順序を合わせる必要がある.

LENGTH

: int 型.512 がデフォルト値.フーリエ変換の際のFFT点数.前段までのFFT点数と合わせる必要がある.

SAMPLING_RATE

: int 型.16000 がデフォルト値.入力音響信号のサンプリング周波数.LENGTH と同様,他のノードとそろえる必要がある.

TF_INPUT_TYPE

: string 型.FILEがデフォルト.FILE選択時はA_MATRIXで選択された定位用伝達関数ファイルが利用され, ONLINE選択時はTRANSFER_FUNCTIONの入力が伝達関数として利用される. FILE選択時にTRANSFER_FUNCTIONの入力が接続されている,あるいはONLINE選択時に入力が接続されていない場合はエラーとなる.

A_MATRIX

: string 型.デフォルト値はなし. 定位用伝達関数ファイルのファイル名を指定する. 絶対パスと相対パスの両方に対応している. 定位用伝達関数ファイルの作成方法については,harktool4 を参照.

WINDOW

: int 型.50 がデフォルト値. 相関行列計算時の平滑化フレーム数を指定する. ノード内では,入力信号の複素スペクトルから相関行列を毎フレーム生成し,WINDOW で指定されたフレームで加算平均を取る. この値を大きくすると,相関行列が安定するが,区間が長い分,時間遅れが長くなる.

WINDOW_TYPE

: string 型.FUTURE がデフォルト値. 相関行列計算時の平滑化フレームの使用区間を指定する. FUTURE に指定した場合,現在のフレーム $f$ から $f+WINDOW-1$ までが平滑化に使用される. MIDDLE に指定した場合,$f-(WINDOW/2)$ から $f+(WINDOW/2)+(WINDOW\% 2)-1$ までが平滑化に使用される. PAST に指定した場合,$f-WINDOW+1$ から $f$ までが平滑化に使用される.

PERIOD

: int 型.50 がデフォルト値. 音源定位結果算出の周期をフレーム数で指定する. この値が大きいと,定位結果を得るための時間間隔が大きくなり, 発話区間が正しく取りにくくなったり,移動音源の追従性が悪くなる. ただし,小さくすると計算負荷がかかるため,計算機環境に合わせたチューニングが必要となる.

NUM_SOURCE

: int 型.2 がデフォルト値. MUSIC 法における信号の部分空間の次元数であり, 実用上は,音源定位のピーク検出で強調すべき目的音源数と解釈できる. 下記のノード詳細では$N_ s$と表わされている. $1 \leq N_ s \leq M - 1$ である必要がある. 目的音の音源数に合わせておくことが望ましいが,例えば目的音源数が3の場合にも, 一つ一つの音源が発音している区間が異なるため,実用上はそれより少ない値を選択すれば十分である.

MIN_DEG

: int 型.-180 がデフォルト値. 音源探索する際の最小角度であり,ノード詳細 で $\theta _{min}$ として表わされている.0度がロボット正面方向であり, 負値がロボット右手方向,正値がロボット左手方向である.指定範囲は,便 宜上 $\pm 180$度としてるが,360度以上の回り込みにも対応しているので, 特に制限はない.

MAX_DEG

: int 型.180 がデフォルト値. 音源探索する際の最大角度であり,ノード詳細 で $\theta _{max}$ として表わされている.その他は,MIN_DEG と同様である.

LOWER_BOUND_FREQUENCY

: int 型.500 がデフォルト値. 音源定位のピーク検出時に考慮する周波数帯域の下限 であり,ノードの詳細では,$\omega _{min}$ で表わされている. $0 \leq \omega _{min} \leq {\rm SAMPLING\_ RATE} / 2$ である必要がある.

UPPER_BOUND_FREQUENCY

: int 型.2800 がデフォルト値. 音源定位のピーク検出時に考慮する周波数帯域の上限 であり,下記では,$\omega _{max}$ で表わされている. $\omega _{min} < \omega _{max} \leq {\rm SAMPLING\_ RATE} / 2$ である必要がある.

SPECTRUM_WEIGHT_TYPE

: string 型.Uniform がデフォルト値. 音源定位のピーク検出時に使用する MUSIC スペクトル の周波数軸方向に対する重みの様式を指定する. Uniform は重みづけを OFF に設定する. A_Characteristic は人間の聴覚の音圧感度を模した重み付けを MUSIC スペクトルに与える. Manual_Spline は,MANUAL_WEIGHT_SPLINE で指定した点を補間点とした Cubic スプライン曲線に合わせた重み付けを MUSIC スペクトルに与える. Manual_Square は,MANUAL_WEIGHT_SQUARE で指定した周波数に合わせた矩形重みを生成し,MUSIC スペクトルに付与する.

A_CHAR_SCALING

: float 型.1.0 がデフォルト値. A特性重みを周波数軸方向に伸展するスケーリング項を指定する. A特性重みは人間の聴覚の音圧感度を模しているため,音声帯域外を抑圧するフィルタリングが可能である. A特性重みは規格値があるが,雑音環境によっては,雑音が音声帯域内に入ってしまい, うまく定位できないことがある. そこで,A特性重みを周波数軸方向に伸展し,より広い低周波帯域を抑圧するフィルタを構成する.

MANUAL_WEIGHT_SPLINE

: Matrix<float> 型.
<Matrix<float> <rows 2> <cols 5> <data 0.0 2000.0 4000.0 6000.0 8000.0 1.0 1.0 1.0 1.0 1.0> > がデフォルト値. 2 行 $K$ 列の float 値で指定する.$K$ はスプライン補間で使用するための補間点数に相当する. 1 行目は周波数を,2 行目はそれに対応した重みを指定する. 重み付けは補間点を通るスプライン曲線に合わせて行われる. デフォルト値では 0 [Hz] から 8000[Hz] までの周波数帯域に対して全て 1 となる重みが付与される.

MANUAL_WEIGHT_SQUARE

: Vector<float> 型. <Vector<float> 0.0 2000.0 4000.0 6000.0 8000.0> がデフォルト値. MANUAL_WEIGHT_SQUARE で指定した周波数によって矩形重みを生成し,MUSIC スペクトルに付与する. MANUAL_WEIGHT_SQUARE の奇数成分から偶数成分までの周波数帯域は 1 の重みを, 偶数成分から奇数成分までの周波数帯域は 0 の重みを付与する. デフォルト値では 2000 [Hz] から 4000[Hz],6000 [Hz] から 8000[Hz]までの MUSICスペクトルを抑圧することができる.

ENABLE_EIGENVALUE_WEIGHT

: bool 型.true がデフォルト値. true の場合,MUSIC スペクトルの計算の際に,相関行列の固有値分解(または特異値分解)から得られる 最大固有値(または最大特異値)の平方根を重みとして,付与する. この重みは,MUSIC_ALGORITHM に GEVD や GSVD を選ぶ場合は NOISECM 端子から入力される相関行列の固有値に依存して 大きく変化するため,false にするのが良い.

ENABLE_INTERPOLATION

: bool 型.false がデフォルト値. A_MATRIX で指定した伝達関数を補間し,音源定位の解像度を改善したい場合に true にする. 補間手法は INTERPOLATION_TYPE で指定したものを使う. 補間後の伝達関数の解像度は 仰角は HEIGHT_RESOLUTION で, 方位角は AZIMUTH_RESOLUTION で,半径は RANGE_RESOLUTION で指定できる.

INTERPOLATION_TYPE

: string 型.FTDLI がデフォルト値. 伝達関数の補間手法を指定する.

HEIGHT_RESOLUTION

: float 型.1.0[deg] がデフォルト値. 伝達関数補間の仰角の間隔を指定する.

AZIMUTH_RESOLUTION

: float 型.1.0[deg] がデフォルト値. 伝達関数補間の方位角の間隔を指定する.

RANGE_RESOLUTION

: float 型.1.0[deg] がデフォルト値. 伝達関数補間の半径の間隔を指定する.

PEAK_SEARCH_ALGORITHM

: string 型.LOCAL_MAXIMUM がデフォルト値. MUSICスペクトルのピーク探索に使用するアルゴリズムを選択する. LOCAL_MAXIMUM の場合は,探索点の上下左右を用いて,探索点が最大となる点(極大点)が探索される. HILL_CLIMBING の場合は,まず水平面上の方位角のみでピークを探索し, 次に探索されたピーク水平角方向にある仰角を用いてピークが探索される.

MAXNUM_OUT_PEAKS

: int 型.-1 がデフォルト値. 出力最大音源数を表す. 0 の場合は,探索された全てのピークが出力される. MAXNUM_OUT_PEAKS $> 0$ の場合は,パワーの大きなピークから順に MAXNUM_OUT_PEAKS 個が出力される. -1 の場合は,MAXNUM_OUT_PEAKS = NUM_SOURCE として処理される.

DEBUG

: bool 型.デバッグ出力のON/OFF,デバッグ出力のフォーマットは,以下の通りである. まず,フレームで検出された音源数分だけ, 音源のインデックス,方向,パワーのセットがタブ区切りで出力される. ID はフレーム毎に 0 から順番に便宜上付与される番号で,番号自身には意味はない. 方向[deg]は小数を丸めた整数が表示される. パワーは MUSIC スペクトルのパワー値(式(16)の$\bar{P}(\theta )$)がそのまま出力される. 次に,改行後,“MUSIC spectrum: ” と出力さ れ,式(16)の$\bar{P}(\theta )$ の値が,すべての $\theta $ について表示される.

6.2.14.5 ノードの詳細

MUSIC 法は,入力信号のチャネル間の相関行列の固有値分解を利用して,音源方向の推定を行う手法である. 以下にアルゴリズムをまとめる.

伝達関数の生成:

MUSIC 法では,音源から各マイクロホンまでの伝達関数を計測または数値的に求め,それを事前情報として用いる. マイクロホンアレイからみて,$\theta $方向にある音源$S(\theta )$から$i$番目のマイク $M_ i$ までの周波数領域での伝達関数を $h_ i(\theta ,\omega )$とすると,マルチチャネルの伝達関数ベクトルは以下のように表せる.

  \begin{equation} \label{eq:tf} {\boldsymbol H}(\theta ,\omega ) = [h_1(\theta ,\omega ),\cdots ,h_ M(\theta ,\omega )] \end{equation}   (8)

この伝達関数ベクトルを,適当な間隔 $\Delta \theta $ 毎(非等間隔でも可)に, 事前に計算もしくは計測によって用意しておく. HARK  では,計測によっても数値計算によっても伝達関数ファイルを生成できるツールとして,harktool4 を提供している. 具体的な伝達関数ファイルの作り方に関しては harktool4 の項を参照されたい(harktool4より三次元の伝達関数に対応した). LocalizeMUSIC ノードでは,この事前情報ファイル(定位用伝達関数ファイル)を A_MATRIX で指定したファイル名で読み込んで用いている. このように伝達関数は,音源の方向ごとに用意することから,方向ベクトル,もしくは,この伝達関数を用い て定位の際に方向に対して走査を行うことから,ステアリングベクトルと呼ぶことがある.

入力信号のチャネル間相関行列の算出:

HARK  による音源定位の処理はここから始まる. まず,$M$チャネルの入力音響信号を短時間フーリエ変換して得られる 周波数領域の信号ベクトルを以下のように求める.

  \begin{equation} {\boldsymbol X}(\omega ,f) = [X_1(\omega ,f), X_2(\omega ,f), X_3(\omega ,f), \cdots , X_ M(\omega ,f)]^ T \label{eq:LocalizeMUSIC-cor} \end{equation}   (9)

ここで,$\omega $は周波数, $f$ はフレームを表す. HARK  では,ここまでの処理を前段の MultiFFT ノードで行う.

入力信号 ${\boldsymbol X}(\omega ,f)$ のチャネル間の相関行列は,各フレーム,各周波数ごとに以下のように定義できる.

  \begin{equation} {\boldsymbol R}(\omega ,f) = {\boldsymbol X}(\omega ,f){\boldsymbol X}^*(\omega ,f) \label{eq:LocalizeMUSIC-1} \end{equation}   (10)

ここで$()^*$は複素共役転置演算子を表す. 理論上は,この${\boldsymbol R}(\omega ,f)$をそのまま以降の処理で利用すれば問 題はないが,実用上,安定した相関行列を得るため,HARK  では,時間方向に平 均したものを使用している.

  \begin{equation} {\boldsymbol R}’(\omega ,f) = \frac{1}{{\rm WINDOW}}\sum _{i=W_ i}^{W_ f}{\boldsymbol R}(\omega ,f+i) \label{eq:LocalizeMUSIC-period} \end{equation}   (11)

平滑化に使用する区間は WINDOW_TYPE パラメータによって変更できる. WINDOW_TYPE=FUTURE の場合,$W_ i = 0$, $W_ f = {\rm WINDOW}-1$ となる. WINDOW_TYPE=MIDDLE の場合,$W_ i = -{\rm WINDOW}/2$, $W_ f = {\rm WINDOW}/2+{\rm WINDOW}\% 2-1$ となる. WINDOW_TYPE=PAST の場合,$W_ i = -{\rm WINDOW}+1$, $W_ f = 0$ となる.

信号と雑音の部分空間への分解 :

MUSIC 法では,式(11)で求まった相関行列 ${\boldsymbol R}’(\omega ,f)$の固有値分解,もしくは特異値分解を行い, $M$次の空間を,信号の部分空間と,それ以外の部分空間に分解する.

本節以降の処理は計算負荷が高いため,HARK  では計算負荷を考慮し,数フレームに一回演算されるように設計されている. LocalizeMUSIC では,この演算周期を PERIOD で指定できる.

LocalizeMUSIC では,部分空間に分解する方法が MUSIC_ALGORITHM によって指定できる.

MUSIC_ALGORITHM を SEVD に指定した場合,以下の標準固有値分解を行う.

  \begin{equation} {\boldsymbol R}’(\omega ,f) = {\boldsymbol E}(\omega ,f) {\boldsymbol \Lambda }(\omega ,f) {\boldsymbol E}^{-1}(\omega ,f) \label{eq:LocalizeMUSIC-SEVD} \end{equation}   (12)

ここで,${\boldsymbol E}(\omega ,f)$ は互いに直交する固有ベクトルからなる行列 ${\boldsymbol E}(\omega ,f) = [{\boldsymbol e}_1(\omega ,f), {\boldsymbol e}_2(\omega ,f), \cdots , {\boldsymbol e}_ M(\omega ,f)]$ を,${\boldsymbol \Lambda }(\omega )$は各固有ベクトルに対応する固有値を対角成分とした対角行列を表す. なお,${\boldsymbol \Lambda }(\omega )$ の対角成分 $[\lambda _1(\omega ), \lambda _2(\omega ),\dots ,\lambda _ M(\omega )]$は降順にソートさ れているとする.

MUSIC_ALGORITHM を GEVD に指定した場合,以下の一般化固有値分解を行う.

  \begin{equation} {\boldsymbol K}^{-\frac{1}{2}}(\omega ,f){\boldsymbol R}’(\omega ,f){\boldsymbol K}^{-\frac{1}{2}}(\omega ,f) = {\boldsymbol E}(\omega ,f) {\boldsymbol \Lambda }(\omega ,f) {\boldsymbol E}^{-1}(\omega ,f) \label{eq:LocalizeMUSIC-GEVD} \end{equation}   (13)

ここで,${\boldsymbol K}(\omega ,f)$は$f$フレーム目で NOISECM 端子から入力される相関行列を表す. ${\boldsymbol K}(\omega ,f)$との一般化固有値分解により${\boldsymbol K}(\omega ,f)$に含まれる雑音由来の大きな固有値を白色化することができるため, 雑音を抑圧した音源定位が実現できる.

MUSIC_ALGORITHM を GSVD に指定した場合,以下の一般化特異値分解を行う.

  \begin{equation} {\boldsymbol K}^{-1}(\omega ,f){\boldsymbol R}’(\omega ,f) = {\boldsymbol E}(\omega ,f) {\boldsymbol \Lambda }(\omega ,f) {\boldsymbol E}_ r^{-1}(\omega ,f) \label{eq:LocalizeMUSIC-GSVD} \end{equation}   (14)

ここで,${\boldsymbol E}(\omega ,f), {\boldsymbol E}_ r(\omega ,f)$は,それぞれ左特異ベクトル,右特異ベクトルからなる行列を表し, ${\boldsymbol \Lambda }(\omega )$は各特異値を対角成分とした対角行列を表す.

分解によって得た固有ベクトル空間 ${\boldsymbol E}(\omega ,f)$に対応する固有値(または特異値)は音源のパワーと相関があることから, 値が大きな固有値に対応した固有ベクトルを取ることで,パワーの大きな目的音の部分空間のみを選択することができる. すなわち,考慮する音源数を$N_ s$とすれば,$[e_1(\omega ), \cdots , e_{N_ s}(\omega )]$ が音源に対応する固有ベクトル, $[e_{N_ s+1}(\omega ), \cdots , e_ M(\omega )]$ が雑音に対応する固有ベクトルとなる. LocalizeMUSIC では $N_ s$ を NUM_SOURCE として指定できる.

MUSIC スペクトルの算出:

音源定位のための MUSIC スペクトルは, 雑音に対応した固有ベクトルのみを用いて次のように計算される.

  \begin{equation} P(\theta ,\omega ,f) = \frac{\left| {\boldsymbol H}^*(\theta ,\omega ) {\boldsymbol H}(\theta ,\omega ) \right|}{\sum _{i=N_ s+1}^ M \left| {\boldsymbol H}^*(\theta ,\omega ) e_ i(\omega ,f) \right|} \label{eq:LocalizeMUSIC-music-spectrum-bin} \end{equation}   (15)

右辺の分母は,入力のうち雑音に起因する固有ベクトルと伝達関数の内積を 計算している.固有ベクトルによって張られる空間上では,小さい固有値に対 応する雑音の部分空間と大きい固有値に対応する目的信号の部分空間は互いに直交するため, もし,伝達関数が目的音源に対応するベクトルであれば,この内積値は理論上0にな る.よって,$P(\theta ,\omega ,f)$ は無限大に発散する.実際には,ノイズ等の影 響により,無限大には発散しないが,遅延和などのビームフォーミングと比較 すると鋭いピークが観測されるため,音源の抽出が容易になる.右辺の分子は 正規化を行うための正規化項である.

$P(\theta ,\omega ,f)$ は,各周波数ごとに得られる MUSIC スペクトルであるため, 以下のようにして周波数方向の統合を行う.

  \begin{equation} \bar{P}(\theta ,f) = \sum _{\omega =\omega _{min}}^{\omega _{max}} W_{\Lambda }(\omega ,f) W_{\omega }(\omega ,f) P(\theta ,\omega ,f) \label{eq:LocalizeMUSIC-music-spectrum} \end{equation}   (16)

ここで,$\omega _{min}, \omega _{max}$は,それぞれ MUSIC スペクトルの周波数方向統合で扱う周波数帯域の下限と上限を示し, LocalizeMUSIC では,それぞれ LOWER_BOUND_FREQUENCY, UPPER_BOUND_FREQUENCY として指定できる.

また,$W_{\Lambda }(\omega ,f)$は,周波数方向統合の際の固有値重みであり,最大固有値(または最大特異値)の平方根である. LocalizeMUSIC では,固有値重みの有無を ENABLE_EIGENVALUE_WEIGHT によって選択することができ, false の場合は $W_{\Lambda }(\omega ,f) = 1$,true の場合は$W_{\Lambda }(\omega ,f) = \sqrt {\lambda _1(\omega ,f)}$となる.

また,$W_{\omega }(\omega ,f)$は,周波数方向統合の際の周波数重みであり,LocalizeMUSIC では SPECTRUM_WEIGHT_TYPE でその種類を以下のように指定できる.

出力端子 SPECTRUM からは,式(16)の$\bar{P}(\theta ,f)$が 一次元配列として出力される. $\theta $は三次元定位の場合は三次元となり,SPECTRUMからは三次元の$\bar{P}(\theta ,f)$が 一次元配列として変換されて出力される. Ne, Nd, Nr をそれぞれ,仰角数,方位角数,半径数とすると,変換は以下のようになる.

FOR ie = 1 to Ne 
  FOR id = 1 to Nd 
    FOR ir = 1 to Nr
      SPECTRUM[ir + id * Nr + ie * Nr * Nd] = P[ir][id][ie] 
    ENDFOR
  ENDFOR
ENDFOR
\includegraphics[width=.5\linewidth ]{fig/modules/LocalizeMUSIC_AFilter_dB.eps}
Figure 6.34: SPECTRUM_WEIGHT_TYPE = A_Charasteristic とした時の A特性重みの周波数特性
\includegraphics[width=.5\linewidth ]{fig/modules/LocalizeMUSIC_AFilter.eps}
Figure 6.35: SPECTRUM_WEIGHT_TYPE = A_Charasteristic, A_CHAR_SCALING = 1 とした時の $W_{\omega }(\omega ,f)$
\includegraphics[width=.5\linewidth ]{fig/modules/LocalizeMUSIC_Spline.eps}
Figure 6.36: SPECTRUM_WEIGHT_TYPE = Manual_Spline とした時の$W_{\omega }(\omega ,f)$
\includegraphics[width=.5\linewidth ]{fig/modules/LocalizeMUSIC_Square.eps}
Figure 6.37: SPECTRUM_WEIGHT_TYPE = Manual_Square とした時の$W_{\omega }(\omega ,f)$

音源の探索:

次に,式(16)の$\bar{P}(\theta ,f)$ について $\theta _{min}$ から $\theta _{max}$ までの範囲からピークを検出し, 値の大きい順に,上位 MAXNUM_OUT_PEAKS 個について音源方向に対応 する方向ベクトル,および,MUSICスペクトルのパワーを出力する.また,ピー クが MAXNUM_OUT_PEAKS 個に満たない場合は,出力が MAXNUM_OUT_PEAKS 個以下になることもある. ピークの検出アルゴリズムは PEAK_SEARCH_ALGORITHM によって,極大値探索か山登り法かを選択できる. LocalizeMUSIC では,方位角の$\theta _{min}$と$\theta _{max}$をそれぞれ,MIN_DEG と MAX_DEG で指定できる. 仰角と半径に関しては全てを用いる.

考察:

終わりに,MUSIC_ALGORITHM に GEVD や GSVD を選んだ場合の白色化が, 式(15)の MUSIC スペクトルに与える効果について簡単に述べる.

ここでは,例として,4人(75度,25度,-25度,-75度方向)が同時に発話している状況を考える.

図 6.38(a) は,MUSIC_ALGORITHM に SEVD を選択し, 雑音を白色化していない音源定位結果である. 横軸が方位角,縦軸が周波数,値は式(15)の$P(\theta ,\omega ,f)$である. 図のように低周波数領域に拡散性雑音と,-150度方向に方向性雑音があり,正しく4話者の方向のみにピークを検出できていないことがわかる.

図 6.38(b) は,MUSIC_ALGORITHM に SEVD を選択し, 4話者が発話していない区間の MUSIC スペクトルである. 図 6.38(a) で観察された拡散性雑音と方向性雑音が確認できる.

図 6.38(c) は,雑音情報として,図 6.38(b) の情報から ${\boldsymbol K}(\omega ,f)$を生成し,MUSIC_ALGORITHM に GSVD を選択して雑音を白色化した時の MUSIC スペクトルである. 図のように,${\boldsymbol K}(\omega ,f)$に含まれる拡散性雑音と方向性雑音が正しく抑圧され, 4話者の方向のみに強いピークが検出できていることが確認できる.

このように,既知の雑音に対して,GEVD や GSVD を用いることは有用である.

\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_Spectrum_SEVD.eps}
(a) MUSIC_ALGORITHM = SEVD の MUSIC スペクトル(話者数 4)
\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_Spectrum_NOISE.eps}
(b) ${\boldsymbol K}(\omega ,f)$を生成した雑音の MUSIC スペクトル(話者数 0)
\includegraphics[width=\linewidth ]{fig/modules/LocalizeMUSIC_Spectrum_GSVD.eps}
(c) MUSIC_ALGORITHM = GSVD の MUSIC スペクトル(話者数 4)
Figure 6.38: MUSIC スペクトルの比較

6.2.14.6 参考文献