6.3.9 MSNR

6.3.9.1 ノードの概要

最大 SNR 法 (Maximum Signal-to-Noise Ratio)を用いた音源分離を行う. 本アルゴリズムでは目的音源方向のゲインと既知雑音方向のゲインの比が最大となるように,分離行列を更新し音源分離を行う. 音源からマイクロホンまでの伝達関数情報を事前に与える必要はないが、音源の区間情報(発話区間の検出結果)が必要となる.

ノードの入力は,

である. また,出力は分離音ごとの複素スペクトルである.

6.3.9.2 必要なファイル

無し.

6.3.9.3 使用方法

どんなときに使うのか

所与の音源方向に対して,マイクロホンアレーを用いて当該方向の音源分離を行う. なお,音源方向として,音源定位部での推定結果,あるいは,定数値を使用することができる. 目的音源のゲインと既知雑音のゲインの比を利用するため,既知雑音の発生区間情報が必要となる. 既知雑音の発生区間情報の入力には音源方向と同じく,Source型を用いる.

典型的な接続例

MSNR ノードの接続例を図 6.56に示す. 入力は以下である.

  1. INPUT_FRAMES : MultiFFT 等から来る混合音の多チャネル複素スペクトル

  2. INPUT_SOURCES : LocalizeMUSIC や ConstantLocalization 等から来る音源方向

  3. INPUT_NOISE_SOURCES : 既知雑音の音源方向(INPUT_SOURCESと音源IDが同一である必要がある)

出力は分離音声となる.

\includegraphics[width=.8\textwidth ]{fig/modules/MSNR.png}
Figure 6.56: MSNR の接続例

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

入力

INPUT_FRAMES

: Matrix<complex<float> > 型.マルチチャネル複素スペクトル. 行がチャネル,つまり,各マイクロホンから入力された波形の 複素スペクトルに対応し,列が周波数ビンに対応する.

INPUT_SOURCES

: Vector<ObjectRef> 型.音源定位結果等が格納された Source 型オブジェクトの Vector 配列である. 典型的には, SourceTracker ノード,SourceIntervalExtender ノードと 繋げ,その出力を用いる.

INPUT_NOISE_SOURCES

: Vector<ObjectRef> 型.INPUT_SOURCES と同じ Source 型オブジェクトの Vector 配列である.既知雑音の発生方向.

出力

OUTPUT

: Map<int, ObjectRef> 型.分離音の音源IDと,分離音の1チャネル複素スペクトル
(Vector<complex<float> > 型) のペア.

パラメータ

LENGTH

: int 型. 分析フレーム長[samples].前段階における値(AudioStreamFromMic ,MultiFFT ノードなど) と一致している必要がある. デフォルト値は512[samples].

ADVANCE

: int 型. フレームのシフト長[samples].前段階における値(AudioStreamFromMic ,MultiFFT ノードなど) と一致している必要がある. デフォルト値は160[samples].

SAMPLING_RATE

: int 型. 入力波形のサンプリング周波数[Hz].デフォルト値は16000[Hz].

DECOMPOSITION_ALGORITHM

: 型. 音源分離で用いる演算アルゴリズムの選択. GEVDは一般化固有値分解を,GSVDは一般化特異値分解を表す. GEVDはGSVDに比べて雑音抑制性能が良好だが計算時間がかかる. 使用目的や計算機環境に応じて演算アルゴリズムの使い分けができる.

ALPHA

: float 型. フィルタ更新係数.デフォルト値は 0.99.

ENABLE_DEBUG

: bool 型. デフォルトは falsetrueが与えられると, 分離状況が標準出力に出力される.

Table 6.49: MSNRで利用するパラメータ

パラメータ名

デフォルト値

単位

説明

LENGTH

int 

512

[pt]

分析フレーム長

ADVANCE

int 

160

[pt]

フレームのシフト長

SAMPLING_RATE

int 

16000

[Hz]

サンプリング周波数

DECOMPOSITION_ALGORITHM

string 

GEVD

 

演算アルゴリズム

ALPHA

float 

0.99

 

フィルタ更新係数.

ENABLE_DEBUG

bool 

false

 

デバッグ出力の可否

6.3.9.5 ノードの詳細

技術的な詳細: 基本的に詳細は下記の参考文献を参照されたい.

音源分離概要: 音源分離問題で用いる記号を表 6.39 にまとめる. 演算はフレーム毎に周波数領域において行われるため, 各記号は周波数領域での,一般には複素数の値を表す. 音源分離は$K$個の周波数ビン($1 \leq k \leq K$)それぞれに対して演算が行われるが,本節ではそれを略記する. $N$, $M$, $f$をそれぞれ,音源数,マイク数,フレームインデックスとする.

Table 6.50: 変数の定義

変数

説明

$\boldsymbol {S}(f) = \left[S_1(f), \dots , S_ N(f)\right]^ T$

$f$フレーム目の音源の複素スペクトル

$\boldsymbol {X}(f) = \left[X_1(f), \dots , X_ M(f)\right]^ T$

マイクロホン観測複素スペクトルのベクトル.INPUT_FRAMES 入力に対応.

$\boldsymbol {N}(f) = \left[N_1(f), \dots , N_ M(f)\right]^ T$

加法性雑音

$\boldsymbol {H} = \left[ \boldsymbol {H}_1, \dots , \boldsymbol {H}_ N \right] \in \mathbb {C}^{M \times N}$

$1 \leq n \leq N$番目の音源から$1 \leq m \leq M$番目のマイクまでの伝達関数行列

  $\boldsymbol {K}(f) \in \mathbb {C}^{M \times M}$

既知雑音相関行列

$\boldsymbol {W}(f) = \left[ \boldsymbol {W}_1, \dots , \boldsymbol {W}_ M \right] \in \mathbb {C}^{N \times M}$

分離行列

$\boldsymbol {Y}(f) = \left[Y_1(f), \dots , Y_ N(f)\right]^ T$

分離音複素スペクトル

音のモデルは以下の一般的な線形モデルを扱う.

  $\displaystyle \boldsymbol {X}(f) $ $\displaystyle = $ $\displaystyle \boldsymbol {H}\boldsymbol {S}(f) + \boldsymbol {N}(f) \label{eq:beamforming_ observation} $   (67)

分離の目的は,

  $\displaystyle \boldsymbol {Y}(f) $ $\displaystyle = $ $\displaystyle \boldsymbol {W}(f)\boldsymbol {X}(f) \label{eq:Beamforming-separation} $   (68)

として,$\boldsymbol {Y}(f)$ が $\boldsymbol {S}(f)$ に近づくように,$\boldsymbol {W}(f)$ を推定することである.

分離行列更新のための評価関数$J_{\textrm{MSNR}}(\boldsymbol {W}(f))$は, INPUT_SOURCES 入力端子と INPUT_NOISE_SOURCES 入力端子から入ってくる音源方向と雑音方向の情報で定義される.

目的音信号の相関行列を $\boldsymbol {R}_{ss}(f)$ ,雑音信号の相関行列を $\boldsymbol {R}_{nn}(f)$とすると, 分離行列更新のための評価関数$J_{\textrm{MSNR}}(\boldsymbol {W}(f))$は,以下のように表される.

  $\displaystyle J_{\textrm{MSNR}}(\boldsymbol {W}(f)) $ $\displaystyle = $ $\displaystyle \frac{\boldsymbol {W}(f))\boldsymbol {R}_{ss}(f)\boldsymbol {W}(f))^ H}{\boldsymbol {W}(f))\boldsymbol {R}_{nn}(f)\boldsymbol {W}(f))^ H} \label{eq:MSNR} $   (69)

MSNR では,$J_{\textrm{MSNR}}(\boldsymbol {W}(f))$を最大とする$\boldsymbol {W}(f)$を一般化固有値分解または一般化特異値分解を用いて求めている. ここで,信号の相関行列 $\boldsymbol {R}_{ss}(f)$ は INPUT_SOURCES 入力端子に音源が存在する信号区間(目的音の存在区間)の信号から得られる相関行列 $\boldsymbol {R}_{xx}(f)$から以下のように更新される.

  $\displaystyle \boldsymbol {R}_{ss}(f+1) $ $\displaystyle = $ $\displaystyle \alpha \boldsymbol {R}_{ss}(f) + (1-\alpha )\boldsymbol {R}_{xx}(f) \label{eq:MSNR_ Rss} $   (70)

一方,雑音の相関行列$\boldsymbol {R}_{nn}(f)$ は, INPUT_NOISE_SOURCES 入力端子に音源が存在する信号区間(雑音の存在区間)の信号から得られる相関行列 $\boldsymbol {R}_{xx}(f)$から以下のように更新される.

  $\displaystyle \boldsymbol {R}_{nn}(f+1) $ $\displaystyle = $ $\displaystyle \alpha \boldsymbol {R}_{nn}(f) + (1-\alpha )\boldsymbol {R}_{xx}(f) \label{eq:MSNR_ Rnn} $   (71)

式()と式()の$\alpha $が プロパティ ALPHA で指定可能である. $\boldsymbol {R}_{ss}(f)$と$\boldsymbol {R}_{nn}(f)$から$\boldsymbol {W}(f)$が更新されて分離ができる.

トラブルシューティング: 基本的には GHDSS ノードのトラブルシューティングと同じ.

6.3.9.6 参考文献