在C#中实现快速傅立叶变换(FFT)
我在哪里可以find一个免费的,非常快速,可靠的C#执行FFT?
那可以用在产品上? 还是有任何限制?
AForge.net是一个免费(开源)库,支持快速傅里叶变换。 (请参阅Sources / Imaging / ComplexImage.cs的使用情况,Sources / Math / FourierTransform.cs的实现)
那个做了AForge的人做得相当不错,但这不是商业质量。 学习很棒,但是你可以知道他也在学习,所以他有一些非常严重的错误,比如假设图像的大小,而不是每个像素使用正确的位数。
我并不是在嘲笑那个人,我尊重他的学习,并告诉我们如何去做。 我认为他现在是博士,或者至less他即将成为博士,所以他非常聪明,它不是一个商业上可用的图书馆。
Math.Net库在使用傅立叶变换和复杂的图像/数字时有其自身的奇怪之处。 就像,如果我没有弄错,它会输出人类可视化格式的傅里叶变换,这对人类来说是很好的,如果你想看看变换的图像,但是当你期望数据在某个特定的格式(正常格式)。 我可能会误解,但是我只记得有一些奇怪的地方,所以我真的去了他们用于傅立叶的原始代码,它运行得更好。 (ExocortexDSP v1.2 http://www.exocortex.org/dsp/ )
在处理FFT数据的时候,Math.net也有一些我不喜欢的东西,我不记得它是什么了,我只知道从ExoCortex DSP库中获得我想要的东西要容易得多。 我不是math家或工程师, 对那些家伙来说,这可能是完美的。
所以! 我使用从Math.Net所基于的ExoCortex中抽取的FFT代码,没有其他任何东西,它工作的很好。
最后,我知道这不是C#,但我已经开始使用FFTW( http://www.fftw.org/ )。 而这个人已经做了一个C#包装,所以我要检查出来,但还没有真正使用它。 ( http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html )
哦! 我不知道你是为了学校还是在工作,但是无论哪种方式,都有一个由斯坦福大学iTunes大学教授提供的非常棒的免费系列讲座。
http://deimos3.apple.com/WebObjects/Core.woa/Browse/itunes.stanford.edu.1617315771
Math.NET的铱星库提供了一个快速的,定期更新的与math相关的function,包括FFT。 它是根据LGPL许可的,所以你可以自由地在商业产品中使用它。
我看到这是一个古老的线程,但为了什么是值得的,我有一个免费的(MIT许可证)一维功率为2长度的C#FFT实现在这里: http : //gerrybeauregard.wordpress.com/2011 / 04/01 / AN-FFT-在-C /
我没有将其性能与其他C#FFT实现进行比较。 我写的主要是为了比较Flash / ActionScript和Silverlight / C#的性能。 后者要快得多,至less对于数字运算来说。
这是另一个; Ooura FFT的C#端口。 这是相当快的。 该软件包还包括在MIT许可证下的重叠/添加卷积以及一些其他DSP内容。
http://github.com/hughpyle/inguz-DSPUtil/commits/master/Fourier.cs
数值食谱网站(http://www.nr.com/)有一个FFT,如果你不介意input英寸我正在一个项目转换Labview程序到C#2008,;.NET 3.5获取数据和然后看频谱。 不幸的是,Math.Net使用最新的.NET框架,所以我不能使用FFT。 我尝试了Exocortex的 – 它工作,但结果匹配Labview的结果,我不知道什么是造成问题的FFT理论。 所以我尝试了数字食谱网站上的FFT,它工作! 我也能够编程Labview低旁瓣窗口(并且必须引入一个缩放因子)。
你可以在他们的网站上作为客人阅读数字食谱书的章节,但这本书是非常有用的,我高度推荐购买它。 即使你最终使用Math.NET FFT。
对于针对英特尔处理器的multithreading实现,我会查看英特尔的MKL库。 这不是免费的,但它是可爱的(不到100美元),快速 – 但你需要通过P / Invokes调用它的C DLL。 Exocortex项目6年前停止开发,所以如果这是一个重要的项目,我会小心使用它。
一个古老的问题,但它仍然显示在谷歌的结果…
一个非常限制的MIT许可的C#/ .NET库可以在,
https://www.codeproject.com/articles/1107480/dsplib-fft-dft-fourier-transform-library-for-net
这个库在多核上并行线程的速度很快,并且非常完整,可以随时使用。