6.2.4 CMMakerFromFFT

6.2.4.1 ノードの概要

MultiFFT ノードから出力されるマルチチャネル複素スペクトルから, 音源定位のための相関行列を一定周期で生成する.

6.2.4.2 必要なファイル

無し.

6.2.4.3 使用方法

どんなときに使うのか

LocalizeMUSIC ノードの音源定位において, 雑音等の特定の音源を抑圧したい場合は, あらかじめ雑音情報を含む相関行列を用意する必要がある. 本ノードは,MultiFFT ノードから出力されるマルチチャネル複素スペクトルから, 相関行列を一定周期で生成する. 本ノードの出力を LocalizeMUSIC ノードの NOISECM 入力端子に接続することで, 一定周期前の情報を常に雑音とみなして抑圧した音源定位が実現できる.

典型的な接続例

図 6.14CMMakerFromFFT ノードの使用例を示す.

INPUT 入力端子へは,MultiFFT ノードから計算される入力信号の複素スペクトルを接続する.
型はMatrix<complex<float> > 型である. 本ノードは入力信号の複素スペクトルから周波数ビン毎にチャネル間の相関行列を計算し出力する. 出力の型は Matrix<complex<float> > 型だが,相関行列を扱うため,三次元複素配列を二次元複素行列に変換して出力している.

\includegraphics[width=.6\textwidth ]{fig/modules/CMMakerFromFFT}
Figure 6.14: CMMakerFromFFT の接続例

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

Table 6.17: CMMakerFromFFT のパラメータ表

パラメータ名

デフォルト値

単位

説明

WINDOW

int 

50

 

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

PERIOD

int 

50

 

相関行列の更新フレーム周期

ENABLE_DEBUG

bool 

false

 

デバッグ情報出力のON/OFF

入力

INPUT

: Matrix<complex<float> > , 入力信号の複素スペクトル表現 $M \times ( NFFT / 2 + 1)$.

出力

OUTPUT

: Matrix<complex<float> > 型. 各周波数ビン毎の相関行列.$M$次の複素正方行列である相関行列が $NFFT / 2 + 1$ 個出力される. Matrix<complex<float> > の行は周波数($NFFT / 2 + 1$ 行)を,列は複素相関行列($M * M$ 列)を表す.

パラメータ

WINDOW

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

PERIOD

: int 型.50 がデフォルト値. 相関行列の更新フレーム周期を指定する. ノード内では,入力信号の複素スペクトルから相関行列を毎フレーム生成し,WINDOW で指定されたフレームで 加算平均を取ったものが新たな相関行列として出力される.PERIOD フレーム間は最後に計算された相関行列が出力される. この値を大きくすると,相関行列の時間解像度が改善される計算負荷が高い.

ENABLE_DEBUG

: bool 型.false がデフォルト値.trueの場合は相関行列が生成される時に,標準出力に生成した時のフレーム番号が出力される.

6.2.4.5 ノードの詳細

MultiFFT ノードから出力される入力信号の複素スペクトルを以下のように表す.

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

ここで,$\omega $は周波数ビン番号,$f$ は HARK  で扱うフレーム番号,$M$は入力チャネル数を表す.

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

  \begin{equation} \label{eq:CMMakerFromFFT_ R} {\boldsymbol R}(\omega ,f) = {\boldsymbol X}(\omega ,f){\boldsymbol X}^*(\omega ,f) \end{equation}   (2)

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

  \begin{equation} \label{eq:CMMakerFromFFT_ Rn} {\boldsymbol R}’(\omega ,f) = \frac{1}{{\rm WINDOW}}\sum _{i=0}^{{\rm WINDOW}-1}{\boldsymbol R}(\omega ,f+i) \end{equation}   (3)

${\boldsymbol R}’(\omega ,f)$が CMMakerFromFFT ノードの OUTPUT 端子から PERIOD で指定したフレーム周期ごとに出力される.