最大 SNR 法 (Maximum Signal-to-Noise Ratio)を用いた音源分離を行う. 本アルゴリズムでは目的音源方向のゲインと既知雑音方向のゲインの比が最大となるように,分離行列を更新し音源分離を行う. 音源からマイクロホンまでの伝達関数情報を事前に与える必要はないが、音源の区間情報(発話区間の検出結果)が必要となる.
ノードの入力は,
混合音のマルチチャネル複素スペクトル
目的音源の方向データ
である. また,出力は分離音ごとの複素スペクトルである.
無し.
どんなときに使うのか
所与の音源方向に対して,マイクロホンアレーを用いて当該方向の音源分離を行う. なお,音源方向として,音源定位部での推定結果,あるいは,定数値を使用することができる. 目的音源のゲインと既知雑音のゲインの比を利用するため,既知雑音の発生区間情報が必要となる. 本ノードでは音源方向のデータ入力がない時間区間を雑音発生区間として扱うものとする.
典型的な接続例
MSNR ノードの接続例を図 6.73に示す. 入力は以下である.
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.
: int 型. フレームのシフト長[samples]. 前段階のノード(AudioStreamFromMic , MultiFFT など)における値と一致している必要がある. デフォルト値は 160.
: int 型. 入力音源波形のサンプリング周波数[Hz]. デフォルト値は 16000.
: 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.48 にまとめる. 演算はフレーム毎に周波数領域において行われるため, 各記号は周波数領域での,一般には複素数の値を表す. 音源分離は K 個の周波数ビン(1≤k≤K)それぞれに対して演算が行われるが,本節ではそれを略記する. N, M, f をそれぞれ,音源数,マイク数,フレームインデックスとする.
変数 |
説明 |
S(f)=[S1(f),…,SN(f)]T |
fフレーム目の音源の複素スペクトル |
X(f)=[X1(f),…,XM(f)]T |
マイクロホン観測複素スペクトルのベクトル.INPUT_FRAMES 入力に対応 |
N(f)=[N1(f),…,NM(f)]T |
加法性雑音 |
H=[H1,…,HN]∈CM×N |
1≤n≤N番目の音源から1≤m≤M番目のマイクまでの伝達関数行列 |
K(f)∈CM×M |
既知雑音相関行列 |
W(f)=[W1,…,WM]∈CN×M |
分離行列 |
Y(f)=[Y1(f),…,YN(f)]T |
分離音複素スペクトル |
音のモデルは以下の一般的な線形モデルを扱う.
X(f) | = | HS(f)+N(f) | (82) |
分離の目的は,
Y(f) | = | W(f)X(f) | (83) |
として,Y(f) が S(f) に近づくように,W(f) を推定することである.
目的音信号の相関行列を Rss(f) ,雑音信号の相関行列を Rnn(f)とすると, 分離行列更新のための評価関数JMSNR(W(f))は,以下のように表される.
JMSNR(W(f)) | = | W(f))Rss(f)W(f))HW(f))Rnn(f)W(f))H | (84) |
MSNR では,JMSNR(W(f))を最大とするW(f)を一般化固有値分解または一般化特異値分解を用いて求めている.
ここで,目的音信号の相関行列 Rss(f) は, INPUT_SOURCES 入力端子に目的音源の方向データ入力がある時間区間の信号から得た 相関行列 Rxx(f) を使って,以下のように更新される.
Rss(f+1) | = | αRss(f)+(1−α)Rxx(f) | (85) |
一方,雑音信号の相関行列 Rnn(f) は, INPUT_SOURCES 入力端子に目的音源の方向データ入力がない時間区間(雑音発生区間)の信号から得た 相関行列 Rxx(f) を使って,以下のように更新される.
Rnn(f+1) | = | αRnn(f)+(1−α)Rxx(f) | (86) |
式(85)と式(86)の α が プロパティ ALPHA で指定可能である.
Rss(f) と Rnn(f) から W(f) が更新される.
トラブルシューティング: 基本的には GHDSS ノードのトラブルシューティングと同じ.
P. W. Howells, ’Intermediate Frequency Sidelobe Canceller’, U.S. Patent No.3202990, 1965.