6.3.10 MVDR

6.3.10.1 ノードの概要

最小分散無歪応答法 (Minimum Variance Distortionless Response; MVDR) を用いた音源分離を行う. 本アルゴリズムでは目的音源を歪ませない線形拘束条件の下で,出力パワーを最小化するような分離行列を求める. 音源からマイクロホンまでの伝達関数情報,音源の区間情報(発話区間の検出結果),および既知雑音の相関行列が必要となる.

ノードの入力は,

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

6.3.10.2 必要なファイル

Table 6.56: MVDR に必要なファイル

対応するパラメータ名

説明

TF_CONJ_FILENAME

マイクロホンアレーの伝達関数.

6.3.10.3 使用方法

どんなときに使うのか

所与の音源方向に対して,マイクロホンアレーを用いて当該方向の音源分離を行う. なお,音源方向として,音源定位部での推定結果,あるいは,定数値を使用することができる.

典型的な接続例

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

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

  2. INPUT_SOURCES : LocalizeMUSIC や ConstantLocalization 等から得られる目的音源方向

  3. INPUT_NOISE_CM : CMLoad 等から得られる既知雑音の相関行列

出力は分離音声となる.

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

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

入力

INPUT_FRAMES

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

INPUT_SOURCES

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

INPUT_NOISE_CM

: Matrix<complex<float> > 型. 各周波数ビン毎の相関行列. 行は周波数ビン($NFFT / 2 + 1$ 行),列は$M$次の複素正方行列である相関行列($M * M$ 列)に対応する. この入力は必須であるためノイズ相関行列を入力しない場合は、 CMIdentityMatrix ノードと繋げ,その出力を用いる.

出力

OUTPUT

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

パラメータ

LENGTH

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

ADVANCE

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

SAMPLING_RATE

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

LOWER_BOUND_FREQUENCY

: int 型. 分離処理を行う際に利用する最小周波数値であり,これより下の周波数に対しては処理を行わず,出力スペクトルの値は0となる. 0以上サンプリング周波数値の半分までの範囲で指定する.

UPPER_BOUND_FREQUENCY

: int 型. 分離処理を行う際に利用する最大周波数値であり,これより上の周波数に対しては処理を行わず,出力スペクトルの値は0となる. LOWER_BOUND_FREQUENCY $<$ UPPER_BOUND_FREQUENCY である必要がある.

TF_CONJ_FILENAME

: string 型. 伝達関数の記述されたバイナリファイル名を記す. ファイルフォーマットは 5.3.1 節を参照.

REG_FACTOR

: float 型. 係数. 式 (85) 参照. デフォルト値は 0.001.

ENABLE_DEBUG

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

Table 6.57: MVDR で利用するパラメータ

パラメータ名

デフォルト値

単位

説明

LENGTH

int 

512

[pt]

分析フレーム長.

ADVANCE

int 

160

[pt]

フレームのシフト長.

SAMPLING_RATE

int 

16000

[Hz]

サンプリング周波数.

LOWER_BOUND_FREQUENCY

int 

0

[Hz]

分離処理で用いる周波数の最小値.

UPPER_BOUND_FREQUENCY

int 

8000

[Hz]

分離処理で用いる周波数の最大値.

TF_CONJ_FILENAME

string 

   

マイクロホンアレーの伝達関数を記したファイル名.

REG_FACTOR

float 

0.001

 

係数.式(85).

ENABLE_DEBUG

bool 

false

 

デバッグ出力の可否.

6.3.10.5 ノードの詳細

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

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

Table 6.58: 変数の定義

変数

説明

$\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:MDVR_ observation} $   (82)

分離の目的は,

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

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

MVDR 法に基づく分離行列 $W_{\textrm{MVDR}}$ は次式であらわされる.

  $\displaystyle W_{\textrm{MVDR}}(f) $ $\displaystyle = $ $\displaystyle \frac{\tilde{\boldsymbol {K}}^{-1}(f)\boldsymbol {H}}{\boldsymbol {H}^{H}\tilde{\boldsymbol {K}}^{-1}(f)\boldsymbol {H}} $   (84)

ここで,

  $\displaystyle \label{eq:MDVRsep} \tilde{\boldsymbol {K}}(f) $ $\displaystyle = $ $\displaystyle \boldsymbol {K}(f) + \alpha \boldsymbol {I} $   (85)

であり,ここで $\alpha $ はパラメータ REG__FACTOR, $\boldsymbol {I}$ は相関行列の正則化を行うための対角行列である.

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

6.3.10.6 参考文献