6.3.6 GHDSS

6.3.6.1 ノードの概要

GHDSS  (Geometric High-order Dicorrelation-based Source Separation) アルゴリズムに基づいて,音源分離処理を行う.GHDSS アルゴリズムは, マイクロホンアレイを利用した処理で,

  1. 音源信号間の高次無相関化

  2. 音源方向へ指向性の形成

という2つの処理を行う. 2.の指向性は,事前に与えられたマイクロホンの位置関係を幾何的制約 として処理を行う.また,HARK に実装されている GHDSS アルゴリズムは, マイクロホンの位置関係に相当する情報として,マイクロホンアレイ の伝達関数を利用することができる.

ノードの入力は,混合音のマルチチャネル複素スペクトルと,音源方向のデータである. また,出力は分離音ごとの複素スペクトルである.

6.3.6.2 必要なファイル

Table 6.42: GHDSS に必要なファイル

対応するパラメータ名

説明

TF_CONJ_FILENAME

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

INITW_FILENAME

分離行列初期値

6.3.6.3 使用方法

どんなときに使うのか

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

典型的な接続例

GHDSS ノードの接続例を図 6.47 に示す. 入力は以下の2つが必要である.

  1. INPUT_FRAMES には,混合音の多チャネル複素スペクトル,

  2. INPUT_SOURCES には,音源方向.

出力である分離音声に対して音声認識を行うために,MelFilterBank などを利用して, 音声特徴量に変換する以外に,以下のような音声認識の性能向上方法もある.

  1. PostFilter ノードを利用して,音源分離処理によるチャネル間リークや 拡散性雑音を抑圧する(図 6.47 右上参照).

  2. PowerCalcForMap ,HRLE ,SpectralGainFilter を接続して, 音源分離処理によるチャネルリークや拡散性雑音を抑圧する(PostFilter と比較して,チューニングが容易).

  3. PowerCalcForMap ,MelFilterBank ,MFMGeneration を接続して, ミッシングフィーチャ理論を用いた音声認識を行うために, ミッシングフィーチャーマスクを生成する(図 6.47右下参照).

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

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

Table 6.43: GHDSS のパラメータ表

パラメータ名

デフォルト値

単位

説明

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 

   

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

INITW_FILENAME

string 

   

分離行列の初期値を記述したファイル名.COMPARE_MODEがTFINDEXである場合は利用できない

SS_METHOD

string 

ADAPTIVE

 

高次無相関化に基づくステップサイズの算出方法.FIX, LC_MYU, ADAPTIVE から選択.FIXは固定値,LC_MYUは幾何制約に基づくステップサイズに連動した値,ADAPTIVEは自動調節.

SS_METHOD==FIX

     

以下 SS_METHOD が FIX の時に有効.

SS_MYU

float 

0.001

 

高次無相関化に基づく分離行列更新時のステップサイズ

SS_SCAL

float 

1.0

 

高次相関行列計算におけるスケールファクタ

NOISE_FLOOR

float 

0.0

 

入力信号をノイズとみなす振幅の閾値(上限)

LC_CONST

string 

FULL

 

幾何制約の手法を決める.DIAG, FULLから選択.DIAGは対角成分を使うのみ.FULLは全成分を使用する.

LC_METHOD

string 

ADAPTIVE

 

幾何制約に基づくステップサイズの算出方法.FIX, ADAPTIVE から選択.FIXは固定値,ADAPTIVEは自動調節.

LC_METHOD==FIX

     

以下 LC_METHOD が FIX の時に有効.

LC_MYU

float 

0.001

 

高次無相関化に基づく分離行列更新時のステップサイズ

UPDATE_METHOD_TF_CONJ

string 

POS

 

伝達関数を更新する手法を指定.POS,ID から選択.

UPDATE_METHOD_W

string 

ID

 

分離行列を更新する手法を指定. ID,POS,ID_POS から選択.

UPDATE_ACCEPT_TFINDEX_DISTANCE

float 

300.0

[mm]

音源移動時に同一音源とみなす距離の閾値.

EXPORT_W

bool 

false

 

分離行列をファイルに書き出すかを指定. COMPARE_MODEがTFINDEXである場合は利用できない

EXPORT_W==true

     

以下 EXPORT_W が trueの時に有効.

EXPORT_W_FILENAME

string 

   

分離行列を書きだすファイル名.

UPDATE

string 

STEP

 

分離行列の更新方法を決める.STEP,TOTALから選択.STEPは高次無相関化に基づく更新を行った後に,幾何制約に基づく更新を行う.TOTALでは,高次無相関化に基づく更新と幾何制約に基づく更新を同時に行う.

入力

INPUT_FRAMES

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

INPUT_SOURCES

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

出力

OUTPUT

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

パラメータ

LENGTH

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

ADVANCE

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

SAMPLING_RATE

: int 型. 入力波形のサンプリング周波数.

LOWER_BOUND_FREQUENCY

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

UPPER_BOUND_FREQUENCY

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

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

INITW_FILENAME

: string 型. 分離行列の初期値を記したファイル名. 事前の計算により,値の収束した分離行列を初期値として与えることで, 音が鳴り始めた最初の部分から精度よく分離することが可能となる. ここで与えるファイルは,EXPORT_W を trueにすることで,予め用意しておく必要がある. ファイルフォーマットは 節を参照. COMPARE_MODEがTFINDEXである場合は未対応.libharkio3導入時に実装予定.

SS_METHOD

: string 型. 高次無相関化に基づくステップサイズの算出方法を選ぶ. ユーザが指定した値に固定する場合は FIX,幾何制約に基づくステップサイズ に連動した値にする場合は LC_MYU,自動調節する場合は ADAPTIVE を指定.

  1. FIX のとき: SS_MYU を設定する.
    SS_MYU: float 型. 0.01 がデフォルト.高次無相関化に基づく分離行列更新時のステップサイズを指定する. この値とLC_MYUを 0 にし,Delay and Sum 型のビームフォーマの分離行列を INITW_FILENAME として渡すことで,GHDSS は,Delay and Sum 型のビームフォーマと 等価な処理が可能となる.

SS_SCAL

: float 型. 1.0 がデフォルト.高次相関行列計算における双曲線正接関数(tanh)の スケールファクタを指定する. 0より大きい正の実数を指定する.値が小さいほど非線形性が少なくなり 通常の相関行列計算に近づく.

NOISE_FLOOR

: float 型. 0がデフォルト.入力信号をノイズとみなす振幅の閾値(上限)を指定する. 入力信号の振幅がこの値以下の場合,ノイズ区間とみなされ,分離行列の更新がされない. ノイズが大きく,分離行列が安定して収束しない場合に,正の実数を指定する.

LC_CONST

: string 型. 幾何制約の手法を選択する. 幾何制約に対角成分(直接音成分)のみを使う場合は DIAG 直接音成分に加えて,非対角成分も使用する場合は FULLを指定する. 死角は高次無相関化によって自動的に形成されるため, DIAG でも高精度な分離が可能. デフォルトは FULL.

LC_METHOD

: string 型. 幾何制約に基づくステップサイズの算出方法を選ぶ. ユーザが指定した値に固定する場合は FIX,自動調節する場合は ADAPTIVE を指定.

  1. FIX のとき: LC_MYU を設定する.
    LC_MYU: float 型. 0.001 がデフォルト.幾何制約に基づく分離行列更新時のステップサイズを指定する. この値とLC_MYUを 0 にし,Delay and Sum 型のビームフォーマの分離行列を INITW_FILENAME として渡すことで,GHDSS は,Delay and Sum 型のビームフォーマと 等価な処理が可能となる.

UPDATE_METHOD_TF_CONJ

: string 型. ID または POS を指定する.POS がデフォルト. 伝達関数の複素共役 TF_CONJ の更新をするかの判断を,各音源に付与された ID に基づいて行う (ID の場合) か,音源位置によって行う (POS の場合) かを指定する.

UPDATE_METHOD_W

: string 型. ID,POS または ID_POS を指定.ID がデフォルト. 音源位置情報が変わった際に,分離行列の再計算が必要となる. この時の音源位置情報が変わったとみなす方法を指定する. 分離行列は,内部で対応する音源 ID や音源方向の角度とともに一定時間保存され, 一度音が止んでも,同一の方向からの音源と判断される音が検出されると, 再び保存された分離行列の値を用いて分離処理が行われる. このとき,分離行列の更新を行うかどうかの基準を設定する. ID を設定した場合,音源 ID によって同方向音源かどうか判断する. POS を設定した場合,音源方向を比較して判断する. ID_POS を設定した場合,音源 ID を比較し,同一と判断されなかった場合は, さらに音源方向の角度を比較して判断を行う.

UPDATE_ACCEPT_DISTANCE

: int 型.300.0 がデフォルト.音源の移動に対して同一音源とみなす距離[mm].設定した距離の範囲内であれば更新された分離行列を利用して演算が行われる.

EXPORT_W

: bool 型. falseがデフォルト. GHDSS により更新された分離行列の結果を出力するかどうかを設定. trueのとき,EXPORT_W_FILENAME を指定.COMPARE_MODEがTFINDEXである場合は利用できない.libharkio3導入時に実装予定.

EXPORT_W_FILENAME

: string 型. EXPORT_W が trueのとき有効.分離行列を書きだすファイル名を指定. フォーマットは 節を参照.

UPDATE

: string 型. 分離行列の更新方法を決める.STEP,TOTALから選択.STEPは高次無相関化に基づく更新を行った後に,幾何制約に基づく更新を行う. TOTALでは,高次無相関化に基づく更新と幾何制約に基づく更新を同時に行う.

6.3.6.5 ノードの詳細

音源分離の定式化: 音源分離問題の定式化で用いる記号を表 6.44 にまとめる. インデックスの意味は,表 6.1 に準拠する. 演算は周波数領域において行われるため,各記号は周波数領域での,一般には複素数の値を表す. 伝達関数以外は一般に時間変化するが,同じ時間フレームにおける演算の場合は, 時間インデックス $f$ を省略して表記する. また,以下の演算は周波数ビン $k_ i$ について述べる. 実際には,$K$ 個それぞれの周波数ビン $k_0, \dots ,k_{K-1}$ に対して演算が行われている.

Table 6.44: 変数の定義

変数

説明

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

周波数ビン$k_ i$に対応する音源複素スペクトルのベクトル.

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

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

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

各マイクロホンに作用する加法性ノイズ.

$\boldsymbol {H}(k_ i) = \left[H_{m, n}(k_ i)\right]$

反射,回折などを含む伝達関数行列 ($M \times N$).

$\boldsymbol {H}_ D(k_ i) = \left[H_{Dm, n}(k_ i)\right]$

直接音の伝達関数行列 ($M \times N$).

$\boldsymbol {W}(k_ i) = \left[W_{n, m}(k_ i)\right]$

分離行列 ($N \times M$).

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

分離音複素スペクトル.

$\mu _{SS}$

高次無相関化に基づく分離行列更新時のステップサイズ,SS_MYUに対応.

$\mu _{LC}$

幾何制約に基づく分離行列更新時のステップサイズ.LC_MYUに対応.

6.3.6.5.1 混合モデル

$N$ 個の音源から発せられた音は,その空間の伝達関数 $\boldsymbol {H}(k_ i)$ の影響を受け, $M$ 個のマイクロホンを通じて式(38) のように観測される.

  $\displaystyle \boldsymbol {X}(k_ i) $ $\displaystyle = $ $\displaystyle \boldsymbol {H}(k_ i)\boldsymbol {S}(k_ i) + \boldsymbol {N}(k_ i). \label{eq:observation} $   (38)

一般に,伝達関数 $\boldsymbol {H}(k_ i)$ は,部屋の形や,マイクロホンと音源の位置関係により 変化するため,推定は困難である.

しかし,音の反射や回折を無視して,直接音のみに限定した伝達関数 $\boldsymbol {H}_ D(k_ i)$は, 音源とマイクロホンの相対位置が分かっている場合は,次の式 (39) のように計算可能である.

  $\displaystyle H_{Dm, n}(k_ i) $ $\displaystyle = $ $\displaystyle \exp \left(-j2\pi l_ ir_{m, n}\right),\label{eq:tfd} $   (39)
  $\displaystyle l_ i $ $\displaystyle = $ $\displaystyle \frac{2\pi \omega _ i}{c}, \label{eq:wavenumber} $   (40)

ただし,$c$ は音速で,$l_ i$ は周波数ビン $k_ i$ での周波数 $\omega _ i$ に対応する波数とする. また,$r_{m,n}$ は,マイクロホン $m$ から音源 $n$ までの距離と,座標系の基準点 (たとえば原点) から音源 $n$ までの距離の差である. つまり,音源から各マイクロホンまでの到達時間の差から生じる位相差として,$\boldsymbol {H}_ D(k_ i)$ は定義される.

6.3.6.5.2 分離モデル

分離音の複素スペクトルの行列$\boldsymbol {Y}(k_ i)$は,

  $\displaystyle \boldsymbol {Y}(k_ i) $ $\displaystyle = $ $\displaystyle \boldsymbol {W}(k_ i)\boldsymbol {X}(k_ i) \label{eq:GHDSS-separation} $   (41)

として求める. GHDSS アルゴリズムは,$\boldsymbol {Y}(k_ i)$ が $\boldsymbol {S}(k_ i)$ に近づくように, 分離行列 $\boldsymbol {W}(k_ i)$ を推定する.

6.3.6.5.3 モデルにおける仮定

このアルゴリズムで既知と仮定する情報は次の通り.

  1. 音源数 $N$

  2. 音源位置 (HARK では LocalizeMUSIC ノードが音源位置を推定する)

  3. マイクロホン位置

  4. 直接音成分の伝達関数 $\boldsymbol {H}_ D(k_ i)$ (測定する or 式 (39) による近似)

未知の情報としては,

  1. 観測時の実際の伝達関数 $\boldsymbol {H}(k_ i)$

  2. 観測ノイズ $\boldsymbol {N}(k_ i)$

6.3.6.5.4 分離行列の更新式

GHDSS は,下記を満たすように分離行列 $\boldsymbol {W}(k_ i)$ の推定を行う.

  1. 分離信号を高次無相関化
    すなわち,分離音 $\boldsymbol {Y}(k_ i)$ の高次相関行列 $\boldsymbol {R}^{\phi (y)y}(k_ i) = E[\phi (\boldsymbol {Y}(k_ i))\boldsymbol { Y}^ H(k_ i)]$ の対角成分以外が0になるようにする.ここで$^ H$ 作用素はエルミート転置を,$E[]$は時間平均作用素を,$\phi ()$は非線形関数であり,本ノードでは下記で定義される双曲線正接関数を用いている.

      $\displaystyle \phi (\boldsymbol {Y}) $ $\displaystyle = $ $\displaystyle [\phi (Y_1), \phi (Y_2), \dots , \phi (Y_ N)]^ T $   (42)
      $\displaystyle \phi (Y_ k) $ $\displaystyle = $ $\displaystyle \tanh (\sigma |Y_ k|) \exp (j\angle (Y_ k)) $   (43)

    ここで,$\sigma $ はスケーリングファクタ(SS_SCALに対応)である.

  2. 直接音成分は歪みなく分離される (幾何的制約)
    分離行列 $\boldsymbol {W}(k_ i)$ と 直接音の伝達関数 $\boldsymbol {H}_ D(k_ i)$ の積が 単位行列になるようにする ($\boldsymbol {W}(k_ i)\boldsymbol {H}_ D(k_ i) = \boldsymbol {I}$).

上の2つの要素をあわせた評価関数は以下のようになる. 簡単のため,周波数ビン $k_ i$ は略す.

  $\displaystyle J(\boldsymbol {W}) $ $\displaystyle = $ $\displaystyle \alpha J_1(\boldsymbol {W}) + \beta J_2(\boldsymbol {W}), \label{eq:evalFuncTotal} $   (44)
  $\displaystyle J_1(\boldsymbol {W}) $ $\displaystyle = $ $\displaystyle \sum _{i \ne j}|R^{\phi (y)y}_{i, j}|^2, \label{eq:evalFunc1} $   (45)
  $\displaystyle J_2(\boldsymbol {W}) $ $\displaystyle = $ $\displaystyle \| \boldsymbol {WH}_ D-\boldsymbol {I}\| ^2, \label{eq:evalFunc2} $   (46)

ただし,$\alpha $および$\beta $ は重み係数である. また行列のノルムは $\| \boldsymbol {M}\| ^2 = tr(\boldsymbol {MM}^ H) = \sum _{i, j}|m_{i, j}|^2$ として定義される.

式 (44) を最小化するための分離行列の更新式は,複素勾配演算$\frac{\partial }{\partial \boldsymbol {W}^*}$を利用した勾配法から,

  $\displaystyle \boldsymbol {W}(k_ i, f+1) $ $\displaystyle = $ $\displaystyle \boldsymbol {W}(k_ i, f) - \mu \frac{\partial J}{\partial \boldsymbol {W}^*}(\boldsymbol {W}(k_ i, f)) \label{eq:updateSepMatStat} $   (47)

となる.ここで,$\mu $は分離行列の更新量を調節するステップサイズである. 通常,式 (47) の右辺にある複素勾配を求めると, $\boldsymbol {R}^{xx} = E[\boldsymbol {XX}^ H]$ や $\boldsymbol {R}^{yy} = E[\boldsymbol {YY}^ H]$ などの 期待値計算に複数のフレームの値を要する. GHDSS ノードでの計算は,自己相関行列を求めず,1つのフレームだけを用いた以下の更新式 (48) を用いる.

  $\displaystyle \boldsymbol {W}(k_ i, f+1) $ $\displaystyle = $ $\displaystyle \boldsymbol {W}(k_ i, f) - \left[ \mu _{SS} \frac{\partial J_1}{\partial \boldsymbol {W}^*}(\boldsymbol {W}(k_ i, f)) + \mu _{LC} \frac{\partial J_2}{\partial \boldsymbol {W}^*}(\boldsymbol {W}(k_ i,f)) \right],\label{eq:updateSepMatInst} $   (48)
  $\displaystyle \frac{\partial J_1}{\partial \boldsymbol {W}^*}(\boldsymbol {W}) $ $\displaystyle = $ $\displaystyle \left(\phi (\boldsymbol {Y})\boldsymbol {Y}^ H - \mathrm{diag}[\phi (\boldsymbol {Y})\boldsymbol {Y}^ H] \right)\tilde{\phi }({{boldmath{$W$}}}\boldsymbol {X})\boldsymbol {X}^ H,\label{eq:J1} $   (49)
  $\displaystyle \frac{\partial J_2}{\partial \boldsymbol {W}^*}(\boldsymbol {W}) $ $\displaystyle = $ $\displaystyle 2\left(\boldsymbol {W}\boldsymbol {H}_ D - \boldsymbol {I} \right)\boldsymbol {H}_ D^ H, \label{eq:J2} $   (50)

ここで,$\tilde{\phi }$は$\phi $の偏微分であり,下記で定義される.

  $\displaystyle \tilde{\phi }(\boldsymbol {Y}) $ $\displaystyle = $ $\displaystyle [\tilde{\phi (Y_1)}, \tilde{\phi (Y_2)},\dots ,\tilde{\phi (Y_ N)}]^ T $   (51)
  $\displaystyle \tilde{\phi }(Y_ k) $ $\displaystyle = $ $\displaystyle \phi (Y_ k) + Y_ k \frac{\partial \phi (Y_ k)}{\partial Y_ k} $   (52)

また,$\mu _{SS} = \mu \alpha $,$\mu _{LC} = \mu \beta $ であり,それぞれ高次無相関化および幾何制約に基づくステップサイズをあらわす. ステップサイズの調節を自動にした場合,ステップサイズは次式で計算される.

  $\displaystyle \mu _{SS} $ $\displaystyle = $ $\displaystyle \frac{J_1(\boldsymbol {W})}{2 \| \frac{\partial J_1}{\partial \boldsymbol {W}}(\boldsymbol {W})\| ^2} $   (53)
  $\displaystyle \mu _{LC} $ $\displaystyle = $ $\displaystyle \frac{J_2(\boldsymbol {W})}{2 \| \frac{\partial J_2}{\partial \boldsymbol {W}}(\boldsymbol {W})\| ^2} $   (54)

式 (4950)では,各変数のインデックスを省略したが,いずれも $(k_ i, f)$である.

分離行列の初期値は次のようにして求める.

  $\displaystyle \boldsymbol {W}(k_ i) $ $\displaystyle = $ $\displaystyle \boldsymbol {H}_ D^ H(k_ i) / M, \label{eq:initSepMat} $   (55)

ただし,$M$ はマイクロホン数である.

処理の流れ:

\includegraphics[width=.8\textwidth ]{fig/modules/GHDSS-fc-overview.eps}
Figure 6.48: GHDSS の流れ図

GHDSS ノードにおける,時間フレーム $f$ における主な処理を 図 6.48 に示す. より詳細には,以下のように固定ノイズに関する処理などが含まれる.

  1. (直接音) 伝達関数の取得

  2. 分離行列 $\boldsymbol {W}$ 推定

  3. 式 (41) に従って音源分離処理を実行

  4. 分離行列の書き出し (EXPORT_W が trueのとき)

伝達関数の取得: パラメータ TF_CONJ_FILENAME で指定された伝達関数から,入力された音源定位結果の方向に最も近い位置にあるデータを検索する.

2フレーム以降については,以下の通りである.

UPDATE_METHOD_TF_CONJ が ID

  1. 1フレーム前のIDと取得したIDを比較

    • 同じ: 引き継ぐ

    • 異なる: 読み込む

UPDATE_METHOD_TF_CONJ が POS

  1. 1フレーム前の音源方向と取得した方向を比較

    • 誤差が UPDATE_ACCEPT_DISTANCE 未満: 引き継ぐ

    • 誤差が UPDATE_ACCEPT_DISTANCE 以上: 読み込む

分離行列の推定: 分離行列の初期値は,パラメータ INITW_FILENAME に値を指定するかによって異なる.
パラメータ INITW_FILENAME が指定されていないときは,伝達関数 $\boldsymbol {H}_ D$ から分離行列 $\boldsymbol {W}$ を計算する.
パラメータ INITW_FILENAME が指定されているときは,指定された分離行列から,入力された音源定位結果の方向に最も近い位置にあるデータを検索する.

2フレーム以降については,以下の通りである.

\includegraphics[width=.8\textwidth ]{fig/modules/GHDSS-fc-sep.eps}
Figure 6.49: 分離行列推定の流れ図

分離行列を推定するまでの流れを図 6.49 に示す. ここでは,式 (48) に従って,前フレームの分離行列を更新するか, 式 (55) を用いて,伝達関数を利用して分離行列の初期値の導出が行われる.

[c]UPDATE_METHOD_W が ID

  1. 前フレーム ID と比較

    • 同じ: $\boldsymbol {W}$ を更新

    • 異なる: $\boldsymbol {W}$ を初期化

[c]UPDATE_METHOD_W が POS

  1. 前フレーム定位方向と比較

    • 誤差が UPDATE_ACCEPT_DISTANCE 未満: $\boldsymbol {W}$ を更新

    • 誤差が UPDATE_ACCEPT_DISTANCE 以上: $\boldsymbol {W}$ を初期化

[c]UPDATE_METHOD_W が ID_POS

  1. 前フレーム ID と比較

    • 同じ: $\boldsymbol {W}$ を更新

  2. IDが異なった場合,定位方向を比較

    • 誤差が UPDATE_ACCEPT_DISTANCE 未満: $\boldsymbol {W}$ を更新

    • 誤差が UPDATE_ACCEPT_DISTANCE 以上: $\boldsymbol {W}$ を初期化

分離行列の書き出し (EXPORT_W が trueのとき): EXPORT_W が trueのとき,収束した分離行列を EXPORT_W_FILENAMEで指定したファイルに出力する.
複数の音源が検出された場合,それらの分離行列は全て1つのファイルに出力される. 音源が消滅した時点で,その分離行列をファイルに書き出す.
ファイルに書き出す際は,既に保存されている音源の定位方向と比較して,既存音源を上書きするか,新たな音源として追加するかを決定する.

[c]音源が消滅

  1. 既に保存されている音源の定位方向と比較

    • 誤差が UPDATE_ACCEPT_DISTANCE 未満: $\boldsymbol {W}$ を上書き保存

    • 誤差が UPDATE_ACCEPT_DISTANCE 以上: $\boldsymbol {W}$ を追加保存