Scilabでマイクロフォン・アレイ

 Scilabで音源と各マイクロフォンの座標から各遅延量を変数で与えといて、xcosで信号源からの信号を各マイクロフォンの遅延に応じて遅延させてシミュレーションするという方法を行ってみた。
 先ずは一番簡単な方法の、各マイクの信号を何もせず足し合わせる方法。横一列に並んだマイクは動かさず、音源を0°から180°まで移動させる。音源との距離が各マイクで凡そ同じ位置になる90°で信号は大きくなり、それ以外では打ち消しあい小さくなる。当然、マイク間の距離は結果に影響を与える。つまり横一列のマイクを動かし、信号が大きくなった先に音源が有ると言う訳で、2つのユニットで探査すればその交点に有る。それによって位置が判る。
 上の方法は昔のレーダーみたいに回転している先の音源は判るが、同時に複数の音源を追う事は出来ない。そこでマイクは動かさず、各マイクの信号に遅延を与えて擬似的にマイクを回転させてようと言うのが、次なる試み。これなら処理速度によるが複数の音源を追う事が可能になる・・筈。
 ちなみに、このようなデータを時間軸上で同期させて増幅させる方法の他に、相互相関を用いて各マイク間の遅延量を求め、そこから位相差を出し音の進入角を出す方法もある。但しこの場合はノイズの影響を受け易そう。振動みたいな波の場合は此方でも良いかも知れない。相互相関はScilabでも関数で持っているのだが、使い方がよく判らないので自分で作る事に。

xcosによるシミュレーション。


相互相関の結果。上が元波形。中段が元波形にノイズを加えて遅延を与えた波形。下段が相互相関係数のグラフ。ピークが立っている場所が遅延量。


各マイクの信号を何もせず足し合わせる方法の結果。