C#中快速傅里叶变换(FFT)的实现

时间:2008-10-04 14:12:20

标签: c# signal-processing fft

在哪里可以找到C#中免费,快速,可靠的FFT实现?

那可以在产品中使用吗?或者有任何限制吗?

9 个答案:

答案 0 :(得分:49)

做AForge的那个人做得相当不错,但这不是商业品质。这是很好的学习,但你可以告诉他他也在学习,所以他有一些非常严重的错误,比如假设一个图像的大小,而不是每个像素使用正确的位。

我不是要敲那个人,我尊重他的学习所有这一切并向我们展示如何去做。我认为他现在是博士,或者至少他是这样的,所以他非常聪明,这不是一个商业上可用的图书馆。

使用傅里叶变换和复杂图像/数字时,Math.Net库有其独特之处。就像,如果我没有弄错的话,它会输出人类可视格式的傅立叶变换,如果你想看一下变换的图片,这对人类来说很不错,但是当你期望数据在某个特定的情况下它不是那么好格式(正常格式)。我可能会对此有所误解,但我只记得有些奇怪,所以我实际上去了他们用于傅里叶东西的原始代码,它的效果要好得多。 (ExocortexDSP v1.2 http://www.exocortex.org/dsp/

在处理来自FFT的数据时,Math.net也有一些我不喜欢的时髦,我不记得它是什么我只是知道从ExoCortex DSP获得我想要的东西要容易得多图书馆。我不是数学家或工程师;对那些人来说,这可能是完全合理的。

原来如此!我使用的是Math.Net基于ExoCortex的FFT代码,没有任何其他功能,而且效果很好。

最后,我知道这不是C#,但我开始考虑使用FFTW(http://www.fftw.org/)。而这个人已经制作了一个C#包装器,所以我要检查它,但还没有实际使用它。 (http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html

OH!我不知道你是在上学还是上班,但无论哪种方式都有斯坦福大学教授在iTunes大学上发表的大型免费讲座系列。

http://deimos3.apple.com/WebObjects/Core.woa/Browse/itunes.stanford.edu.1617315771

答案 1 :(得分:32)

AForge.net是一个免费(开源)库,支持快速傅里叶变换。 (有关用法,请参阅来源/影像/ ComplexImage.cs,有关实施的来源/数学/ FourierTransform.cs

答案 2 :(得分:13)

Math.NET Iridium library提供快速,定期更新的数学相关函数集合,包括FFT。它是根据LGPL许可的,因此您可以在商业产品中自由使用它。

答案 3 :(得分:7)

我认为这是一个旧线程,但是为了它的价值,我在这里有一个免费的(MIT许可证)1-D 2-power-of-only-only C#FFT实现:   http://gerrybeauregard.wordpress.com/2011/04/01/an-fft-in-c/

我没有将其性能与其他C#FFT实现进行比较。我写它主要是为了比较Flash / ActionScript和Silverlight / C#的性能。后者要快得多,至少对于数字运算而言。

答案 4 :(得分:5)

http://www.exocortex.org/dsp/是一个带有FFT算法的开源C#数学库。

答案 5 :(得分:4)

这是另一个; Ooura FFT的C#端口。它的速度相当快。该软件包还包括重叠/添加卷积和其他一些DSP内容,根据MIT许可证。

https://github.com/hughpyle/inguz-DSPUtil/blob/master/Fourier.cs

答案 6 :(得分:2)

如果您不介意输入,那么Numerical Recipes网站(http://www.nr.com/)会有一个FFT。我正在开发一个将Labview程序转换为C#2008,.NET 3.5的项目获取数据,然后查看频谱。不幸的是,Math.Net使用最新的.NET框架,因此我无法使用该FFT。我试过Exocortex一个 - 它工作但结果与Labview结果相匹配,我不知道足够的FFT理论知道导致问题的原因。所以我在数字食谱网站上尝试了FFT,它运作良好!我还能够编写Labview低旁瓣窗口(并且必须引入缩放因子)。

您可以在他们的网站上阅读“数字食谱”一书的章节,但这本书非常有用,我非常推荐购买它。即使您最终使用Math.NET FFT。

答案 7 :(得分:2)

一个老问题,但它仍会出现在Google搜索结果中......

可以在

找到非常不受限制的MIT许可C#/ .NET库

https://www.codeproject.com/articles/1107480/dsplib-fft-dft-fourier-transform-library-for-net

这个库很快,因为它在多个内核上并行运行,并且非常完整且可以随时使用。

答案 8 :(得分:1)

对于针对英特尔处理器进行调整的多线程实现,我会查看英特尔的MKL库。它不是免费的,但是它的价值(低于100美元)和快速 - 但你需要通过P / Invokes调用它的C dll。 Exocortex项目在6年前停止了开发,所以如果这是一个重要的项目,我会小心使用它。