MultiFFT ノードから出力されるマルチチャネル複素スペクトルから, 音源定位のための相関行列を入力フラグで指定した区間で生成する.
無し.
どんなときに使うのか
CMMakerFromFFT ノードと使用する場面は同じであり,詳細は CMMakerFromFFT ノードの項を参照されたい. 相違点は,相関行列の計算区間である. CMMakerFromFFT ノードでは,一定周期 (PERIOD) 毎に相関行列の更新が行われたが, 本ノードでは,入力端子から得られるフラグの値に合わせて指定した区間の相関行列を生成することができる.
典型的な接続例
図 6.15に CMMakerFromFFTwithFlag ノードの使用例を示す.
INPUT 入力端子へは,MultiFFT ノードから計算される入力信号の複素スペクトルを接続する. 型はMatrix<complex<float> > 型である. ADDER_FLAG は int 型,または bool 型の入力で,相関行列計算に関するイベントを制御する. イベント制御の詳細はノードの詳細の項に譲る. 本ノードは入力信号の複素スペクトルから周波数ビン毎にチャネル間の相関行列を計算し出力する. 出力の型は Matrix<complex<float> > 型だが,相関行列を扱うため,三次元複素配列を二次元複素行列に変換して出力している.
パラメータ名 |
型 |
デフォルト値 |
単位 |
説明 |
DURATION_TYPE |
FLAG_PERIOD |
フラグ値に従うかフレーム周期に従うかの選択 |
||
WINDOW |
50 |
相関行列の平滑化フレーム数 |
||
PERIOD |
50 |
相関行列の更新フレーム周期 |
||
WINDOW_TYPE |
FUTURE |
相関行列の平滑化区間 |
||
MAX_SUM_COUNT |
100 |
相関行列の平滑化フレーム数の最大値 |
||
ENABLE_ACCUM |
false |
過去の相関行列との加算平均を取るかの選択 |
||
ENABLE_DEBUG |
false |
デバッグ情報出力のON/OFF |
入力
: Matrix<complex<float> > , 入力信号の複素スペクトル表現 $M \times ( NFFT / 2 + 1)$.
: int 型,または bool 型. 相関行列計算に関するイベントを制御する. イベント制御の詳細についてはノードの詳細の項を参照されたい.
出力
: Matrix<complex<float> > 型. 各周波数ビン毎の相関行列.$M$次の複素正方行列である相関行列が $NFFT / 2 + 1$ 個出力される. Matrix<complex<float> > の行は周波数($NFFT / 2 + 1$ 行)を,列は複素相関行列($M * M$ 列)を表す.
: bool 型. OUPUT から出力される相関行列が更新されている時は trueを,それ以外は falseを出力する. 本出力はデフォルトでは非表示である.表示方法は LocalizeMUSIC の図 6.25を参照されたい.
パラメータ
: string 型.FLAG_PERIOD がデフォルト値. 相関行列を更新する周期と加算平均する区間をフラグ値に従うか,フレーム周期に従うかを選択する. 詳細はノードの詳細の項を参照されたい.
: int 型.50 がデフォルト値. DURATION_TYPE=FRAME_PERIOD の時のみ指定する. 相関行列計算時の平滑化フレーム数を指定する. ノード内では,入力信号の複素スペクトルから相関行列を毎フレーム生成し,WINDOW で指定されたフレームで 加算平均を取ったものが新たな相関行列として出力される.PERIOD フレーム間は最後に計算された相関行列が出力される. この値を大きくすると,相関行列が安定するが計算負荷が高い.
: int 型.50 がデフォルト値. DURATION_TYPE=FRAME_PERIOD の時のみ指定する. 相関行列の更新フレーム周期を指定する. ノード内では,入力信号の複素スペクトルから相関行列を毎フレーム生成し,WINDOW で指定されたフレームで 加算平均を取ったものが新たな相関行列として出力される.PERIOD フレーム間は最後に計算された相関行列が出力される. この値を大きくすると,相関行列の時間解像度が改善される計算負荷が高い.
: string 型.FUTURE がデフォルト値. 相関行列計算時の平滑化フレームの使用区間を指定する. FUTURE に指定した場合,現在のフレーム $f$ から $f+WINDOW-1$ までが平滑化に使用される. MIDDLE に指定した場合,$f-(WINDOW/2)$ から $f+(WINDOW/2)+(WINDOW\% 2)-1$ までが平滑化に使用される. PAST に指定した場合,$f-WINDOW+1$ から $f$ までが平滑化に使用される.
: int 型.100 がデフォルト値. DURATION_TYPE=FLAG_PERIOD の時のみ指定する. 相関行列計算時の平滑化フレーム数の最大値を指定する. 本ノードは,ADDER_FLAG によって相関行列の平滑化フレーム数を制御できる. このため,ADDER_FLAG が 常に 1 の場合は,相関行列の加算のみが行われ,いつまでも出力されないことになってしまう. そこで,MAX_SUM_COUNT を正しく設定することで,平滑化フレーム数の上限に来た時に強制的に 相関行列を出力することができる. この機能を OFF にするには MAX_SUM_COUNT = 0 を指定すれば良い.
: bool 型.false がデフォルト値. DURATION_TYPE=FLAG_PERIOD の時のみ指定する. 過去に生成した相関行列も含めて加算平均を取るかどうかを指定できる.
: bool 型.false がデフォルト値.trueの場合は相関行列が生成される時に,標準出力に生成した時のフレーム番号が出力される.
CMMakerFromFFT ノードと相関行列算出のアルゴリズムは同じであり, 詳細は CMMakerFromFFT のノードの詳細を参照されたい. CMMakerFromFFT ノードとの相違点は相関行列の平滑化フレームを ADDER_FLAG 入力端子のフラグによって制御できることである.
CMMakerFromFFT ノードでは,PERIOD で指定したフレーム数によって以下の式で相関行列を算出していた.
\begin{equation} \label{eq:CMMakerFromFFTwithFlag_ Rn} {\boldsymbol R}’(\omega ,f) = \frac{1}{{\rm PERIOD}}\sum _{i=W_ i}^{W_ f}{\boldsymbol R}(\omega ,f+i) \end{equation} | (4) |
ここで,平滑化に使用する区間は 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$ となる.
本ノードでは DURATION_TYPE=FLAG_PERIOD の場合,ADDER_FLAG の値によって次のように相関行列を生成する.
ADDER_FLAG が 0 (または偽)から 1 (または真)に変化する時
相関行列を零行列に戻し,PERIOD を 0 に戻す.
${\boldsymbol R}’(\omega ) = {\boldsymbol O}$
PERIOD = 0
ただし,${\boldsymbol O} \in \mathbb {C}^{(NFFT / 2 + 1) \times M \times M}$は零行列を表す.
ADDER_FLAG が 1 (または真)を保持する区間
相関行列を加算する.
${\boldsymbol R}’(\omega ) = {\boldsymbol R}’(\omega ) + {\boldsymbol R}(\omega ,f+i)$
PERIOD = PERIOD + 1
ADDER_FLAG が 1 (または真)から 0 (または偽)に変化する時
加算した相関行列の平均を取って OUTPUT から出力する.
${\boldsymbol R}_{out}(\omega ,f) = \frac{1}{{\rm PERIOD}}{\boldsymbol R}’(\omega )$
ADDER_FLAG が 0 (または偽)を保持する区間
最後に生成した相関行列を保持する.
${\boldsymbol R}_{out}(\omega ,f)$
ここで,${\boldsymbol R}_{out}(\omega ,f)$ が OUTPUT 端子から出力される相関行列となる. つまり,新たな相関行列が ${\boldsymbol R}_{out}(\omega ,f)$ に格納されるのは C) のフェイズとなる.
また,DURATION_TYPE=FRAME_PERIOD の場合,ADDER_FLAG が 1 (または真)の時のみ, 式()が実行され,相関行列の更新が起こる.