Una implementación de la transformada rápida de Fourier (FFT) en C #

¿Dónde puedo encontrar una implementación gratuita, muy rápida y confiable de FFT en C #?

Eso se puede usar en un producto? ¿O hay alguna restricción?

AForge.net es una biblioteca gratuita (de código abierto) con soporte de Fast Fourier Transform. (Consulte Sources / Imaging / ComplexImage.cs para el uso, Sources / Math / FourierTransform.cs para la implementación)

El tipo que hizo AForge hizo un buen trabajo, pero no es de calidad comercial. Es grandioso aprender de él, pero puedes decir que él también estaba aprendiendo, así que tiene algunos errores bastante serios como asumir el tamaño de una imagen en lugar de usar los bits correctos por píxel.

No lo estoy golpeando, lo respeto mucho por aprender todo eso y mostrarnos cómo hacerlo. Creo que ahora es un Ph.D. o al menos está a punto de serlo, por lo que es realmente inteligente, simplemente no es una biblioteca comercialmente utilizable.

La biblioteca Math.Net tiene su propia rareza cuando se trabaja con transformadas de Fourier e imágenes / números complejos. Por ejemplo, si no me equivoco, muestra la transformada de Fourier en formato visible para humanos, lo que es bueno para los humanos si quieres ver una imagen de la transformación, pero no es tan buena cuando esperas que los datos estén en un cierto formato (el formato normal). Podría estar equivocado al respecto, pero recuerdo que había cierta rareza, así que de hecho fui al código original que utilizaron para las cosas de Fourier y funcionó mucho mejor. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/ )

Math.net también tenía otros funkyness que no me gustaban cuando manejaba los datos de la FFT, no recuerdo qué era, solo sé que era mucho más fácil obtener lo que quería de la biblioteca ExoCortex DSP. Aunque no soy un matemático o ingeniero; para esos tipos podría tener perfecto sentido.

¡Asi que! Utilizo el código FFT extraído de ExoCortex, en el que se basa Math.Net, sin nada más y funciona muy bien.

Y finalmente, sé que no es C #, pero he comenzado a buscar usando FFTW ( http://www.fftw.org/ ). Y este tipo ya hizo un envoltorio de C #, así que lo iba a verificar, pero aún no lo he usado. ( http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html )

¡OH! No sé si estás haciendo esto para la escuela o el trabajo, pero de cualquier manera hay una GRAN serie de conferencias gratuitas impartidas por un profesor de Stanford en la Universidad de iTunes.

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

La biblioteca Iridium de Math.NET proporciona una colección rápida y regularmente actualizada de funciones relacionadas con las matemáticas, incluida la FFT. Está licenciado bajo LGPL por lo que puede usarlo en productos comerciales.

Veo que este es un hilo viejo, pero por lo que vale, tengo una implementación de C # FFT de potencia de 2 de 2 dimensiones gratuita (licencia MIT) aquí: http://gerrybeauregard.wordpress.com/2011 / 04/01 / an-fft-in-c /

No he comparado su rendimiento con otras implementaciones de C # FFT. Lo escribí principalmente para comparar el rendimiento de Flash / ActionScript y Silverlight / C #. Este último es mucho más rápido, al menos para el cálculo numérico.

http://www.exocortex.org/dsp/ es una biblioteca matemática de código abierto C # con algoritmos FFT.

Aquí está otro; un puerto C # de la FFT Ooura. Es razonablemente rápido. El paquete también incluye superposición / add convolution y algunas otras cosas de DSP, bajo la licencia de MIT.

http://github.com/hughpyle/inguz-DSPUtil/commits/master/Fourier.cs

El sitio web Numerical Recipes (http://www.nr.com/) tiene una FFT si no te importa escribirla. Estoy trabajando en un proyecto que convierte un progtwig Labview en C # 2008, .NET 3.5 para adquirir datos y luego mira el espectro de frecuencia. Desafortunadamente, Math.Net usa el último framework .NET, así que no pude usar esa FFT. Probé el Exocortex, funcionó, pero los resultados coincidieron con los resultados de Labview y no conozco suficiente teoría FFT para saber qué está causando el problema. ¡Así que probé la FFT en el sitio web de recetas numéricas y funcionó! También pude progtwigr la ventana LabVIEW low sidelobe (y tuve que introducir un factor de escala).

Puede leer el capítulo del libro Recetas numéricas como invitado en su sitio, pero el libro es tan útil que recomiendo comprarlo. Incluso si terminas usando Math.NET FFT.

Para una implementación multiproceso configurada para procesadores Intel, verificaría la biblioteca MKL de Intel. No es gratis, pero es afforable (menos de $ 100) y sorprendentemente rápido, pero necesitarás llamarlo a través de P / Invocaciones. El proyecto Exocortex detuvo el desarrollo hace 6 años, por lo que sería prudente utilizarlo si se trata de un proyecto importante.

Una vieja pregunta, pero aún aparece en los resultados de Google …

Puede encontrar una biblioteca de C # / .NET con licencia de MIT muy poco restrictiva en,

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

Esta biblioteca es rápida ya que es paralela a los hilos en múltiples núcleos y es muy completa y está lista para usar.