2011-12-29 32 views
-3

我在實現FFT時遇到了問題。目標設備是Windows Phone 7.FFT實現

這就是我如何做到的。 緩衝區的字節數組有固定大小的1024

var o = Observable.FromEvent<EventArgs>(Microphone.Default, "BufferReady"); 
     o.Subscribe(evt => 
     { 
      double[] dImageArray = this.buffer.Select(i => Convert.ToDouble(i)).ToArray(); 

      fftoutput = Saluse.MediaKit.Sample.FourierTransform.FFTDb(ref dImageArray); 

     }); 

我使用(因爲你可以看到)類是從SaluseMediakit(source

這是正確的道路?或者我錯了嗎?

+4

我在實現FFT時遇到了問題。 - 然後描述問題。包含詳細信息(編譯器錯誤,異常詳細信息,...) – 2011-12-29 21:47:55

+0

這是關於fftoutput的。我不知道如何驗證結果。這是否合適?來自mikrophone的字節數組,我能正確轉換它嗎? – 2011-12-29 22:19:36

+0

'我錯了嗎?'是的,如果它不起作用。 – 2011-12-29 22:26:45

回答

1

我已經設法執行一個很好的FFT,與AFORGE(這個庫保存了幾次)。從麥克風獲取波形信息的正確方法。

double[] sampleBuffer = new double[buffer.Length/2]; 
      int h = 0; 
      for (int i = 0; i < buffer.Length; i += 2) 
      { 
       sampleBuffer[h] = Convert.ToDouble(BitConverter.ToInt16((byte[])buffer, i)); 
       h++; 
      } 

跟進另一個問題。我很想製作一個視覺均衡器。但我不知道怎麼做。

+0

你從麥克風(字節[])獲取數據將其轉換爲double []使用AFortge進行了一些更改。你能描述一下你如何轉換你的數據(double [] - > byte [])嗎? – RredCat 2012-10-29 10:16:45

+0

看起來像這個http://stackoverflow.com/questions/6952923/conversion-double-array-to-byte-array是答案。 – RredCat 2012-10-29 18:43:38

+0

但還有其他方法比你顯示.. – RredCat 2012-10-30 08:01:27