最大 SNR 法 (Maximum Signal-to-Noise Ratio)を用いた音源分離を行う. 本アルゴリズムでは目的音源方向のゲインと既知雑音方向のゲインの比が最大となるように,分離行列を更新し音源分離を行う. 音源からマイクロホンまでの伝達関数情報を事前に与える必要はないが、音源の区間情報(発話区間の検出結果)が必要となる.
ノードの入力は,
混合音のマルチチャネル複素スペクトル
音源方向のデータ
である. また,出力は分離音ごとの複素スペクトルである.
無し.
どんなときに使うのか
所与の音源方向に対して,マイクロホンアレーを用いて当該方向の音源分離を行う. なお,音源方向として,音源定位部での推定結果,あるいは,定数値を使用することができる. 目的音源のゲインと既知雑音のゲインの比を利用するため,既知雑音の発生区間情報が必要となる. 本ノードでは音源方向のデータ入力がない時間区間を雑音発生区間として扱うものとする.
典型的な接続例
MSNR ノードの接続例を図 6.66に示す. 入力は以下である.
INPUT_FRAMES : MultiFFT 等から来る混合音の多チャネル複素スペクトル
INPUT_SOURCES : LocalizeMUSIC や ConstantLocalization 等から来る音源方向
出力は分離音声となる.
入力
: Matrix<complex<float> > 型.マルチチャネル複素スペクトル. 行がチャネル,つまり,各マイクロホンから入力された波形の複素スペクトルに対応し,列が周波数ビンに対応する.
: Vector<ObjectRef> 型.音源定位結果等が格納された Source 型オブジェクトの Vector 配列である. 典型的には, SourceTracker ノード,SourceIntervalExtender ノードと繋げ,その出力を用いる.
出力
: Map<int, ObjectRef> 型.分離音の音源IDと,分離音の1チャネル複素スペクトル
(Vector<complex<float> > 型) のペア.
パラメータ
: int 型. 分析フレーム長[samples].前段階における値(AudioStreamFromMic ,MultiFFT ノードなど)と一致している必要がある. デフォルト値は512[samples].
: int 型. フレームのシフト長[samples].前段階における値(AudioStreamFromMic ,MultiFFT ノードなど)と一致している必要がある. デフォルト値は160[samples].
: int 型. 入力波形のサンプリング周波数[Hz].デフォルト値は16000[Hz].
: int 型. 分離処理を行う際に利用する最小周波数値であり,これより下の周波数に対しては処理を行わず,出力スペクトルの値は0となる. 0以上サンプリング周波数値の半分までの範囲で指定する.
: int 型. 分離処理を行う際に利用する最大周波数値であり,これより上の周波数に対しては処理を行わず,出力スペクトルの値は0となる. LOWER_BOUND_FREQUENCY $<$ UPPER_BOUND_FREQUENCY である必要がある.
: string 型. 音源分離で用いる演算アルゴリズムの選択. GEVDは一般化固有値分解を,GSVDは一般化特異値分解を表す. GEVDはGSVDに比べて雑音抑制性能が良好だが計算時間がかかる. 使用目的や計算機環境に応じて演算アルゴリズムの使い分けができる.
: float 型. フィルタ更新係数.デフォルト値は 0.99.
: bool 型. デフォルトは false. trueが与えられると, 分離状況が標準出力に出力される.
パラメータ名 |
型 |
デフォルト値 |
単位 |
説明 |
LENGTH |
512 |
[pt] |
分析フレーム長 |
|
ADVANCE |
160 |
[pt] |
フレームのシフト長 |
|
SAMPLING_RATE |
16000 |
[Hz] |
サンプリング周波数 |
|
LOWER_BOUND_FREQUENCY |
0 |
[Hz] |
分離処理で用いる周波数の最小値 |
|
UPPER_BOUND_FREQUENCY |
8000 |
[Hz] |
分離処理で用いる周波数の最大値 |
|
DECOMPOSITION_ALGORITHM |
GEVD |
演算アルゴリズム |
||
ALPHA |
0.99 |
フィルタ更新係数 |
||
ENABLE_DEBUG |
false |
デバッグ出力の可否 |
技術的な詳細: 基本的に詳細は下記の参考文献を参照されたい.
音源分離概要: 音源分離問題で用いる記号を表 6.44 にまとめる. 演算はフレーム毎に周波数領域において行われるため, 各記号は周波数領域での,一般には複素数の値を表す. 音源分離は$K$個の周波数ビン($1 \leq k \leq K$)それぞれに対して演算が行われるが,本節ではそれを略記する. $N$, $M$, $f$をそれぞれ,音源数,マイク数,フレームインデックスとする.
変数 |
説明 |
$\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} $ | (77) |
分離の目的は,
$\displaystyle \boldsymbol {Y}(f) $ | $\displaystyle = $ | $\displaystyle \boldsymbol {W}(f)\boldsymbol {X}(f) \label{eq:Beamforming-separation} $ | (78) |
として,$\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} $ | (79) |
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} $ | (80) |
一方,雑音の相関行列$\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} $ | (81) |
式(80)と式(81)の$\alpha $が プロパティ ALPHA で指定可能である. $\boldsymbol {R}_{ss}(f)$と$\boldsymbol {R}_{nn}(f)$から$\boldsymbol {W}(f)$が更新されて分離ができる.
トラブルシューティング: 基本的には GHDSS ノードのトラブルシューティングと同じ.
P. W. Howells, ’Intermediate Frequency Sidelobe Canceller’, U.S. Patent No.3202990, 1965.