SyntaxHighlighter

ラベル fft の投稿を表示しています。 すべての投稿を表示
ラベル fft の投稿を表示しています。 すべての投稿を表示

2011-08-29

KinectでFFT

注)β時代のSDKを使っていた頃の記事です。最新版では動かないと思います。。。

KinectのマイクロフォンからのデータをFFTできたら面白いかなあと思った続き。

いろいろあって、すごく時間が空いてしまったような気がするけど、とりあえず、kinectのマイクロフォンのデータを取得する関数からの出力を使って、FFTができるようになった。

いろいろ変なところもあろうが、該当部分のソースを晒してみることにした。

  • FFTの本体
const int fftLength = 1024;
byte[] rawData;
const int rawDataLength = 1024 * 2;
AForge.Math.Complex[] fftBuf;

public void doFFT(Stream audioStream)
{
  int recordLength = rawDataLength;
  while (recordLength > 0)
  {
    int count = audioStream.Read(rawData, 0, recordLength);
    recordLength -= count;
  }
  for (int i = 0; i < fftLength; i++)
  {
    fftBuf[i].Re = (rawData[2 * i + 1] << 8 | rawData[2 * i]);
    fftBuf[i].Im = 0;
  }
  AForge.Math.FourierTransform.FFT(fftBuf, AForge.Math.FourierTransform.Direction.Forward);
}
  • 使う側
using (var source = new KinectAudioSource())
 {
   source.SystemMode = SystemMode.OptibeamArrayOnly;
   using (var audioStream = source.Start())
   {
     while (true)
     {
       doFFT(audioStream);
     }
   }
}

ぶっちゃけ、これだけ。あとは枝葉末節(AForgeライブラリに関しては、以前の記事を参照のこと)。


スピードは、FFTの処理自体は付いてきてくれているはずだけど。。。この後、前回記事のように、FFTの結果をスペクトルっぽく表示しているのだけど、ちょっと遅れているように感じる。。。どこか悪いのだろうか??
あと、関数から取得できるデータって、1入力だけなのかしら。マイク4つあるはずだから、4入力取得できる方法があるのかしら(しっかりマニュアル読んでないだけだけど)。


しかし、慣れてないせいもあって、C#、というよりWindowsで図とか表示するの難しいなあ。KinectやらFFTで悩んでいる時間より、画面に図形とかを表示する方法が分からなくて悩んでいる時間のほうが長いや。。。


2011-07-10

FFT

MSのKinect SDK betaで取得できるマイクからのデータを、フーリエ変換できたら面白そうだなあと思いつきで、C#でFFTが行えるライブラリを探していました。そしたら、AForge というライブラリを見つけた。あまり日本語解説が見当たらないけど、ページを軽く見てみると、NeuroとかMachineLearningとかが見えてなかなか面白そうと思う機会があったら別の関数も試してみたい。
ただ今回はFFTがしたいだけなので、AForge.Mathだけが必要のようだ。
ほかにもC#でFFTができるライブラリはあるらしいけど、とりあえずやってみる用途だと、これが一番簡単そう、ということで、とりあえず使ってみた。(FFTなんて学生時代のプログラム課題以来だなあ・・・)

Kinectとかとりあえず忘れて、難しいことはすべて置いておいて、単純にwavファイルからFFTを実施した結果。何とか窓関数はまったく使ってないです。
ちゃんとそれらしいグラフが得られているような気がするけど、確かめる術はないなあ。。。

FFTより画面に描写している時間のほうが長いような。。。

でもって、ここから先に進める日は何時のことだろうか???(きっとそのうち忘れそう・・・)
Related Posts Plugin for WordPress, Blogger...