実測によってマイクロホンアレイの推定伝達関数ファイルを作成する.推定は次の手順で行う. まず,ホワイトノイズ等を発音する音源1つを,マイクロホンアレイ周囲の計算想定位置(音源座標)から発音させ,マイクロホンアレイで収録を行う. 各マイク間の相対伝達関数を算出し,その計算想定位置(音源座標)の伝達関数を推定する. この手順のうち,本ノードでは相対伝達関数の算出と計算想定位置(音源座標)の伝達関数の推定を行う. なお,計算想定位置(音源座標)の推定には LocalizeMUSIC などの定位ノードを用いる.
ベースとなる伝達関数ファイル,または,中間ファイル群(マイクロホン座標ファイル,音源座標ファイル,伝達関数ファイル,中間データファイルを含む)
どんなときに使うのか
本ノードは実測によってマイクロホンアレイの推定伝達関数ファイルを作成する. 本ノードによる推定伝達関数ファイルは,音源定位や音源分離に利用される.
典型的な接続例
典型的な接続例を図 6.163 に示す.
また,オンライン処理の場合の接続例を図 6.164 に示す. EstimateTF の前段に置かれた PyCodeExcecutor3 は,定位処理結果を受信し,定位座標と定位処理に対応する処理対象のカウント番号を出力する. EstimateTF は入力された定位座標と処理対象カウントに対応するスペクトルデータを使用して,ノード内の伝達関数データの更新を行い,後段に出力する. LocalizeMUSIC は EstimateTF から出力された伝達関数データでノード内の伝達関数データベースを更新し,定位処理を行う. 定位処理の結果は SourceTracker を経由し,PyCodeExcecutor3 を使用して送信され,EstimateTF 前段の PyCodeExcecutor3 で受信する. これにより,LocalizeMUSIC は常に最新の伝達関数データで使って定位処理を実行することができる.
入力
: Matrix<complex<float> > , 入力信号の複素周波数表現 $M \times (NFFT/2+1)$.
: Vector<ObjectRef> 型で音源位置(方向)を表す. ObjectRef は,Source であり、音源位置で構成される.
: bool , 処理中を表すフラグ. falseとなったとき,伝達関数ファイルにアーカイブする.
: bool , データ転送フラグ. 出力端子 TRANSFER_FUNCTION が存在する場合,本入力が trueとなったとき,伝達関数データを送信する.
: bool , リセット転送フラグ. trueとなったとき,ノード内に更新中の伝達関数データを初期状態に初期化する. また,出力端子 TRANSFER_FUNCTION が存在する場合,全音源位置の伝達関数データを送信する.
: bool , 全転送フラグ. 出力端子 TRANSFER_FUNCTION が存在する場合,本入力が trueとなったとき,全音源位置の伝達関数データを送信する.
: int , 伝達関数更新対象count. 本端子で指定されたcountのスペクトルデータを用いて,伝達関数の更新を行う. 本入力端子は,デフォルトでは非表示である.
非表示入力の追加方法は図 6.165を参照されたい.
出力
: bool , 処理中を表すフラグ. この出力には INPUT_INPROGRESS と同じものが出力される.
: TransferFunction , 伝達関数データ. パラメータや入力端子の設定により,全音源位置の伝達関数データまたは一部の伝達関数データが出力される. 本出力端子は,デフォルトでは非表示である.
非表示出力の追加方法は図 6.166を参照されたい.
パラメータ
パラメータ名 |
型 |
デフォルト値 |
単位 |
説明 |
EST_TF_FILENAME |
推定伝達関数保存ファイル名 |
|||
LENGTH |
512 |
[pt] |
FFT点数 |
|
SAMPLING_RATE |
16000 |
[Hz] |
サンプリング周波数 |
|
INPUT_TYPE |
TF |
ベースとなる伝達関数ファイルの入力方法 |
||
BASE_TF_FILENAME |
ベースとなる伝達関数のファイル名 |
|||
IMPORT_INTERMEDIATE_DATA |
ベースとする中間ファイル群を含むディレクトリ |
|||
EXPORT_INTERMEDIATE_DATA |
更新後の中間ファイル群を含むディレクトリ |
|||
EXPORT_HISTORY_FILE |
false |
ヒストリファイルの出力フラグ |
||
HISTORY_FILE_FRAMES |
10000 |
1ファイルあたりのヒストリフレーム数 |
||
HISTORY_FILE_ PERIOD |
1 |
ヒストリ保存する周期 |
||
INITIAL_TF_OUTPUT |
ALL |
伝達関数データの初回出力方法 |
||
LOOK_BACK_COUNT |
10 |
伝達関数更新対象countの検索範囲 |
||
DEBUG |
false |
デバッグ出力のON/OFF |
: string 型.伝達関数の推定結果の書き出し先ファイル名を指定する. $INPUT\_ INPROGRESS=false$ となったとき,現在保持している伝達関数の書き出しを行う.
: int 型.512 がデフォルト値.フーリエ変換の際の FFT 点数. 前段までの FFT 点数と合わせる必要がある.
: int 型.16000 がデフォルト値. 入力音響信号のサンプリング周波数.LENGTH と同様,他のノードとそろえる必要がある.
: string 型.TF がデフォルト値. ベースとなる伝達関数ファイルの入力方法を TF または INTERMEDIATE で指定する. TF とした場合,BASE_TF_FILENAME の指定が必須となる. INTERMEDIATE とした場合,IMPORT_INTERMEDIATE_DATA を指定した上,当該ディレクトリにマイクロホン座標ファイル (microphones.xml) および音源座標ファイル (source.xml) が存在する必要がある.
: string 型.デフォルト値はなし. ベースとなる定位用伝達関数ファイルを指定する. 本パラメータは $INPUT\_ TYPE=TF$ のときのみ表示される.
: string 型.デフォルト値はなし. ベースとする中間ファイル群を含むディレクトリを指定する. 当該ディレクトリにマイクロホン座標ファイル (microphone.xml) および音源座標ファイル (source.xml) が存在する必要がある.本パラメータは $INPUT\_ TYPE=INTERMEDIATE$ のときのみ表示される.
: string 型.デフォルト値はなし. 更新後の中間ファイル群を含むディレクトリ.入力がない場合は出力しない. 中間データのヒストリファイルを出力する場合には指定が必要.
: bool 型.デフォルト値は false.ヒストリファイル出力の ON/OFF. trueのとき,EXPORT_INTERMEDIATE_DATA にヒストリファイルが出力される.
: bool 型.デフォルト値は10000. 1ファイルあたりのヒストリフレーム数.ヒストリファイルの出力時に使用する. EXPORT_HISTORY_FILE が trueのとき表示される.
: int 型.デフォルト値は1.ヒストリ保存する周期. ヒストリファイルの出力時に使用する. EXPORT_HISTORY_FILE が trueのとき表示される.
: string 型.デフォルト値はALL.伝達関数データの初回出力方法を ALL または PARTIAL で指定する. ALL の場合,初回出力時には全伝達関数データを出力する. PARTIAL の場合,更新分の伝達関数データのみを出力する.
: int 型.デフォルト値は10.伝達関数更新対象countの検索範囲. この範囲を超える TARGET_COUNT が指定された場合,更新処理は実行されない.
: bool 型.デバッグ出力のON/OFF,デバッグ出力のフォーマットは,以下の通りである. 更新された音源座標ががタブ区切りで出力される. 続けて更新後の伝達関数値が出力される.
伝達関数推定方法:
伝達関数の推定は,マイクロホンアレイに入力された音響信号からマイクロホン間の振幅差,位相差を平均化することにより行う. このため,伝達関数の推定を行うにはまず音源定位を行う必要がある. 推定は下記の手順で行う.
パラメータ入力されたベースの伝達関数について正規化を行っておく
入力スペクトルを正規化し,定位された位置の伝達関数に対し線形平均となるように更新する
これら手順における正規化は入力信号に対し,周波数ラインごとの振幅のノルムが 1 ,位相の平均が 0deg となるように行う.
中間ファイル群:
中間ファイル群は伝達関数ファイルにアーカイブする前の下記ファイルを含む.
whatisthis.txt…”transfer function”
source.xml…音源位置ファイル
microphones.xml…マイクロホン位置ファイル
localization/tf#####.mat…定位用伝達関数ファイル
separation/tf#####.mat…分離用伝達関数ファイル(定位用伝達関数の共役)
intermediate.mat…中間データ
history.mat…推定履歴
これらをアーカイブし,伝達関数ファイル (.zip) を作成する. 中間ファイル群を入力して伝達関数推定を行う場合,source.xml と microphones.xml の入力は必須となる.
中間データファイル仕様:
中間データファイルは,伝達関数推定の追加更新を行う際に使用するファイルである. ファイル形式は,Matrix バイナリ形式となっており,型は float である. 行は音源位置に,列は下記に対応する.
1 〜 5 列 : TFID, xyz 座標, 当該音源座標の処理済みフレーム数
6 〜 $(M \times LENGTH \times 2)+5$ 列 : 推定された伝達関数の平均値を実数,虚数の順に保存 (データは $マイク \times 周波数$ の順に並ぶ)
$(M \times LENGTH \times 2)+6$ 〜 $(M \times LENGTH \times 2) \times 2+5$ 列 : 推定された伝達関数の分散を実数,虚数の順に保存 (データは $マイク \times 周波数$ の順に並ぶ)
ヒストリファイル仕様:
ヒストリファイルは,伝達関数推定の更新履歴分析を行う際に使用するファイルである. フレームの経過とともに,推定された伝達関数の平均や分散の変化を知ることができる. ヒストリ保存周期は HISTORY_FILE_PERIOD によって指定することができ,HISTORY_FILE_FRAMES を超えたデータについては,ヒストリファイル中最も古いデータを上書き更新していく. ファイル形式は,Matrix バイナリ形式となっており,型は float である. 行はフレームに,列は下記に対応する.
2 〜 6 列 : フレームインデックス, TFID, xyz 座標, 当該音源座標の処理済みフレーム数
7 〜 $(M \times LENGTH \times 2)+6$ 列 : 推定された伝達関数の平均値を実数,虚数の順に保存 (データは $マイク \times 周波数$ の順に並ぶ)
$(M \times LENGTH \times 2)+7$ 〜 $(M \times LENGTH \times 2) \times 2+6$ 列 : 推定された伝達関数の分散を実数,虚数の順に保存 (データは $マイク \times 周波数$ の順に並ぶ)