はじめての音源定位

Problem

HARK で音源定位をしたいが,何からすればよいかよくわからない.

Solution

(1) 音声ファイルの音源定位

\includegraphics[width=.5\linewidth ]{fig/recipes/LearningHARK_002_01_1.eps}
(a) メインシート \includegraphics[width=.8\linewidth ]{fig/recipes/LearningHARK_002_01_2.eps}
(b) イタレーターシート
: Waveファイルを入力とした音源定位のネットワークファイル

音源定位をするための最も簡単なネットワークファイルの例として, 録音済みの音声データ(マルチチャネルのWaveファイル)を使って音源定位し, その結果を表示するシステムを図 #.#.#に示す.

各モジュールのプロパティの設定に関しては HARK ドキュメントの 6.2章のモジュールリファレンスを参照されたい.

音源定位が含まれた HARK のネットワークファイルの一例を, HARK音声認識ファイルセット の中の recog.n で提供している. HARK音声認識ファイルセット をダウンロードして解凍し,解凍先のディレクトリの中で次のコマンドを実行する.

./recog.n MultiSpeech.wav loc_tf.dat sep_tf.dat

すると,図 2.5のような音源定位結果を見ることができる. この音源定位結果を表示するウィンドウが出力されれば,音源定位は正しくできている.

\includegraphics[width=90mm]{fig/recipes/LearningHARK_002_02_1.eps}
: recog.n 実行時の音源定位結果のスナップショット

(2) マイクロホンからのリアルタイム音源定位

次に,マイクロホンアレイから録音したマルチチャネルの音声入力信号を使って音源定位し, その結果を表示するシステムを図 2.6を示す.

\includegraphics[width=.3\linewidth ]{fig/recipes/LearningHARK_002_03_1.eps}
(a) メインシート \includegraphics[width=.8\linewidth ]{fig/recipes/LearningHARK_002_03_2.eps}
(b) イタレータシート
: マイクロホンアレイの音声入力による音源定位のネットワークファイル

変更点は AudioStreamFromWave が,AudioStreamFromMic になるのみである. AudioStreamFromMic モジュールのパラメータを HARK ドキュメント 6.1節のモジュールリファレンスに従って, 適切に設定することで,マイクロホンアレイの音声入力信号をリアルタイムに定位することができる. 図 #.#.#のような音源定位結果が出てくるかを確認されたい.

もし動かないときは, レシピ 「うまく録音できていない」や 「うまく定位できない」 を参照されたい.

(3) 定常雑音を白色化する機能を用いた音源定位

図 #.#.#と図 #.#.#で示した音源定位では, 目的音や雑音を区別することなく定位するため,目的音よりも大きなパワーを持つ雑音が存在する環境下では, 雑音方向の定位結果が出力されやすくなる. 結果として,音声認識に必要な音声方向の定位結果が得られなくなり,認識性能が著しく劣化してしまう.

特に,ロボットに搭載されたマイクロホンアレイによる音声認識では, ロボットのファンやサーボモータの雑音が, 音声よりもマイクロホンアレイに近いところに存在するため, 音源定位性能が劣化する問題がある.

この問題を解決するため,HARK では,既知の定常雑音を白色化する機能を持つ音源定位をサポートしている. 本機能を使用するためには以下の手順が必要となる.

以下では,この一つ一つについて,解説する.

(3-1) 既知の音源定位用雑音情報ファイルの生成

\includegraphics[width=.6\linewidth ]{fig/recipes/LearningHARK_002_04_1.eps}
(a) メインシート \includegraphics[width=.8\linewidth ]{fig/recipes/LearningHARK_002_04_2.eps}
(b) イタレータシート
: 音源定位用雑音情報ファイルを生成するネットワークファイルの例

図 #.#.#に既知の雑音情報ファイルを生成するネットワークファイルの例を示す. 各モジュールのパラメータの設定については,HARK ドキュメント 6.2節のモジュールリファレンスを参照されたい. また,イタレータシート内の FlowDesigner の標準モジュールである Constant , IterCount , Smaller , Equal  については, 以下のようにパラメータを設定している.

また,ここでは node_Constant_1 の VALUE を 200 と設定しているため,CMMakerFromFFTwithFlag のパラメータである, MAX_SUM_COUNT は 200より大きな値に設定するのが良い.

このネットワークファイルは,AudioStreamFromWave に雑音情報が入った Wave ファイルを入力することを想定し, 先頭フレームから node_Constant_1 で指定したフレーム数までの雑音情報を用いて音源定位用の雑音情報ファイルを生成する.

本ネットワークファイルを実行すると,カレントディレクトリに NOISEr.dat と NOISEi.dat が生成されるはずである. この2つのファイルを次節の音源定位で使用する.

本稿では,先頭フレームから指定したフレーム数までの雑音情報を使用したが, Smaller  などの条件分岐を表すモジュールを適切に接続することで, 雑音情報ファイル生成に用いるフレームを変更することも可能である.

(3-2) 雑音白色化機能を持つ音源定位

\includegraphics[width=.5\linewidth ]{fig/recipes/LearningHARK_002_05_1.eps}
(a) メインシート \includegraphics[width=.9\linewidth ]{fig/recipes/LearningHARK_002_05_2.eps}
(b) イタレータシート
: 雑音を白色化する機能を持つ音源定位のネットワークファイルの例

(3-1)で生成した雑音情報ファイル (NOISEr.dat, NOISEi.dat)を用いた, 雑音白色化機能を持つ音源定位のネットワークファイルの例を 図 #.#.#に示す. 各モジュールのパラメータの設定については,HARK ドキュメント 6.2節のモジュールリファレンスを参照されたい. また,イタレータシート内の FlowDesigner の標準モジュールである Constant については, 以下のようにパラメータを設定している.

このように雑音ファイルを CMLoad によって読み込むことで,音源定位において,そのファイルの雑音情報を白色化することができる. 白色化機能を用いるには,LocalizeMUSIC のパラメータ MUSIC_ALGORITHM を,GEVD または GSVD に設定すれば良い. 雑音白色化の詳細については HARK ドキュメント 6.2節のモジュールリファレンスを参照されたい.

このネットワークファイルを実行することで, 図 #.#.#のような音源定位結果が出てくる. 大きなパワーを持つ雑音がある場合に,その雑音が白色化され,音声方向の定位がしやすくなっていることが確認できるだろう.

Discussion

音源定位のアルゴリズムの詳細や雑音情報の白色化については HARK ドキュメント 6.2節のモジュールリファレンスに詳しく書かれているので参照されたい. より精度を上げるには, 8 章のレシピも参考になるだろう.

See Also

うまく録音できないけどどうすればいいの?」 「うまく定位できない