C#中的快速傅里叶变换

5

可能是重复问题:
C#中的快速傅里叶变换

我正在寻找一个在C#中执行实时FFT(快速傅里叶变换)的例子,用于处理音频数据。我的目标是实时确定音频数据中是否存在特定的音符。感谢提供任何示例。


请看此链接,这里有在C语言中实现快速傅里叶变换(FFT)的解决方案。 - Robert Greiner
3
实际上,这个问题并没有完全涵盖相同的领域,因为确定音频数据中是否存在一个音符可能涉及到对FFT结果的重要后处理,甚至可能需要使用完全不同的音高估计方法(自相关、小波等)。 音高 != FFT峰值频率。 - hotpaw2
1个回答

8

AForge.NET是一个开源库,支持快速傅里叶变换。
ExocortexDSP也是另一个选择。

ExocortexDSP的示例可能如下所示:

   Exocortex.DSP.ComplexF[] complexData = new Exocortex.DSP.ComplexF[512];
   for (int i = 0; i < 512; ++i)
   {
      // Fill the complex data
      complexData[i].Re = 1; // Add your real part here
      complexData[i].Im = 2; // Add your imaginary part here
   }

   // FFT the time domain data to get frequency domain data
   Exocortex.DSP.Fourier.FFT(complexData, Exocortex.DSP.FourierDirection.Forward);

   float[] mag_dat_buffer = new float[complexData.Length];
   // Loop through FFT'ed data and do something with it
   for (int i = 0; i < complexData.Length; ++i)
   {
      // Calculate magnitude or do something with the new complex data
      mag_data_buffer[i] = ImaginaryNumberMagnitude(complexData[i].Im, complexData[i].Re);
   }

感谢您提供的库链接。我需要的是示例 :) - Phil
更新了一个ExocortexDSP的示例。AForge看起来也很类似。 - SwDevMan81
谢谢,就像原问题一样,我需要从麦克风或线路输入中提取数据的示例。我需要另一个库吗?谢谢。 - Phil
正确。没有内置的声音功能。您需要类似于此的东西:codeproject.com/KB/audio-video/cswavrec.aspx - SwDevMan81
这个“512长度数组”是指512个连续的音频采样片段吗?如果是,我明白了。 - bh_earth0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接