Problem
HARK で音源定位をしたいが,何からすればよいかよくわからない.
Solution
(1) 音声ファイルの音源定位
音源定位をするための最も簡単なネットワークファイルの例として, 録音済みの音声データ(マルチチャネルのWaveファイル)を使って音源定位し, その結果を表示するシステムを図 #.#.#に示す.
各モジュールのプロパティの設定に関しては HARK ドキュメントの 6.2章のモジュールリファレンスを参照されたい.
音源定位が含まれた HARK のネットワークファイルの一例を, HARK音声認識ファイルセット の中の recog.n で提供している. HARK音声認識ファイルセット をダウンロードして解凍し,解凍先のディレクトリの中で次のコマンドを実行する.
./recog.n MultiSpeech.wav loc_tf.dat sep_tf.dat
すると,図 2.5のような音源定位結果を見ることができる. この音源定位結果を表示するウィンドウが出力されれば,音源定位は正しくできている.
(2) マイクロホンからのリアルタイム音源定位
次に,マイクロホンアレイから録音したマルチチャネルの音声入力信号を使って音源定位し, その結果を表示するシステムを図 2.6を示す.
変更点は AudioStreamFromWave が,AudioStreamFromMic になるのみである. AudioStreamFromMic モジュールのパラメータを HARK ドキュメント 6.1節のモジュールリファレンスに従って, 適切に設定することで,マイクロホンアレイの音声入力信号をリアルタイムに定位することができる. 図 #.#.#のような音源定位結果が出てくるかを確認されたい.
もし動かないときは, レシピ 「うまく録音できていない」や 「うまく定位できない」 を参照されたい.
(3) 定常雑音を白色化する機能を用いた音源定位
図 #.#.#と図 #.#.#で示した音源定位では, 目的音や雑音を区別することなく定位するため,目的音よりも大きなパワーを持つ雑音が存在する環境下では, 雑音方向の定位結果が出力されやすくなる. 結果として,音声認識に必要な音声方向の定位結果が得られなくなり,認識性能が著しく劣化してしまう.
特に,ロボットに搭載されたマイクロホンアレイによる音声認識では, ロボットのファンやサーボモータの雑音が, 音声よりもマイクロホンアレイに近いところに存在するため, 音源定位性能が劣化する問題がある.
この問題を解決するため,HARK では,既知の定常雑音を白色化する機能を持つ音源定位をサポートしている. 本機能を使用するためには以下の手順が必要となる.
既知の雑音情報ファイルを生成する.
雑音情報ファイルを使用して,雑音白色化機能を持つ音源定位を行う.
以下では,この一つ一つについて,解説する.
(3-1) 既知の音源定位用雑音情報ファイルの生成
図 #.#.#に既知の雑音情報ファイルを生成するネットワークファイルの例を示す. 各モジュールのパラメータの設定については,HARK ドキュメント 6.2節のモジュールリファレンスを参照されたい. また,イタレータシート内の FlowDesigner の標準モジュールである Constant , IterCount , Smaller , Equal については, 以下のようにパラメータを設定している.
node_Constant_1
VALUE
int 型.VALUE = 200.
先頭フレームから数えて,雑音ファイル作成に使用する雑音のフレーム数を表す.
node_Constant_2
VALUE
string 型.VALUE = NOISEr.dat.
雑音ファイルの実部のファイル名を表す.
node_Constant_3
VALUE
string 型.VALUE = NOISEi.dat.
雑音ファイルの虚部のファイル名を表す.
node_IterCount_1
パラメータ無し
HARK の処理でのフレーム番号を int 型で常に出力する.
node_Smaller_1
パラメータ無し
node_IterCount_1と組み合わせることで,あるフレーム番号との大小関係を比較できる.
node_Equal_1
パラメータ無し
node_IterCount_1と組み合わせることで,指定したフレームのみに真を出力できる.
また,ここでは node_Constant_1 の VALUE を 200 と設定しているため,CMMakerFromFFTwithFlag のパラメータである, MAX_SUM_COUNT は 200より大きな値に設定するのが良い.
このネットワークファイルは,AudioStreamFromWave に雑音情報が入った Wave ファイルを入力することを想定し, 先頭フレームから node_Constant_1 で指定したフレーム数までの雑音情報を用いて音源定位用の雑音情報ファイルを生成する.
本ネットワークファイルを実行すると,カレントディレクトリに NOISEr.dat と NOISEi.dat が生成されるはずである. この2つのファイルを次節の音源定位で使用する.
本稿では,先頭フレームから指定したフレーム数までの雑音情報を使用したが, Smaller などの条件分岐を表すモジュールを適切に接続することで, 雑音情報ファイル生成に用いるフレームを変更することも可能である.
(3-2) 雑音白色化機能を持つ音源定位
(3-1)で生成した雑音情報ファイル (NOISEr.dat, NOISEi.dat)を用いた, 雑音白色化機能を持つ音源定位のネットワークファイルの例を 図 #.#.#に示す. 各モジュールのパラメータの設定については,HARK ドキュメント 6.2節のモジュールリファレンスを参照されたい. また,イタレータシート内の FlowDesigner の標準モジュールである Constant については, 以下のようにパラメータを設定している.
node_Constant_1
VALUE
string 型.VALUE = NOISEr.dat.
読み込み対象の雑音ファイルの実部のファイル名を表す.
node_Constant_2
VALUE
string 型.VALUE = NOISEi.dat.
読み込み対象の雑音ファイルの虚部のファイル名を表す.
node_Constant_3
VALUE
int 型.VALUE = 0.
毎フレーム雑音情報ファイル読み込むかを表す.0の場合は最初のフレームのみ読み込まれる.
このように雑音ファイルを CMLoad によって読み込むことで,音源定位において,そのファイルの雑音情報を白色化することができる. 白色化機能を用いるには,LocalizeMUSIC のパラメータ MUSIC_ALGORITHM を,GEVD または GSVD に設定すれば良い. 雑音白色化の詳細については HARK ドキュメント 6.2節のモジュールリファレンスを参照されたい.
このネットワークファイルを実行することで, 図 #.#.#のような音源定位結果が出てくる. 大きなパワーを持つ雑音がある場合に,その雑音が白色化され,音声方向の定位がしやすくなっていることが確認できるだろう.
Discussion
音源定位のアルゴリズムの詳細や雑音情報の白色化については HARK ドキュメント 6.2節のモジュールリファレンスに詳しく書かれているので参照されたい. より精度を上げるには, 8 章のレシピも参考になるだろう.
See Also