ロボットの耳

両耳をつけた。ちょっと見にくいか。

小さいが、SPH0645LM4HのI2Cマイクである。これで録音したデータを、一サンプルずつずらしながら、音の到着時間さを測る。そうすると、およその方向がわかるというわけである。これについては、以下の金井宏一郎氏の学士論文「音の到着時間さを用いた音源空間推定」(2008年、高知工科大学)を参考にさせていただいた。
http://www.kochi-tech.ac.jp/library/ron/2007/2007info/1080351.pdf
とても分かり易かった。
頭は、25センチなので、最大到着時間さは25センチ。音速を使って計算すると、0.6ミリ秒くらいである。
一方のマイクに近づいて話しかけると、こんなデータが取れる。

このデータ(実際のデータは、これよりもはるかにでかい、以下参照)を、一サンプルずつずらしながら相関係数を取るとこんな風になる。(縦軸は相関係数、横軸はシフトサンプル数)
厳密には、26サンプル、プラス側にずらすと、相関係数が最大になる。計算結果は次のようである。
データ総数:132300
一サンプル辺りの時間:0.02268 ミリ秒
最大相関係数: 0.71358
最大相関係数を出すサンプルシフト: 26
距離差:20.06245 cm
三秒間、片方に偏りながら話したので、毎秒44,100サンプル取れるので、データ総数は上記のようになる。その逆数が一サンプル辺りの時間である。サンプルを26だけシフトした時に最大相関係数、0.71358を得る。悪くない。これを距離にすると、25センチより少し小さい20センチになる。方向的に、両マイクが完全に直線になる方向から、少しずれていることになる。
今の所、最大相関係数が0.5以上の時に、ロボットが反応する(振り向く)ようにしてみようかと思っている。