Pregunta

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

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

¿Fue útil?

Solución

AForge.net es una biblioteca gratuita (de código abierto) con soporte para Fast Fourier Transform . (Consulte Fuentes / Imágenes / ComplexImage.cs para uso, Sources / Math / FourierTransform.cs por implementación)

Otros consejos

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

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

La biblioteca Math.Net tiene su propia rareza cuando se trabaja con transformadas de Fourier e imágenes / números complejos. Al igual que, si no me equivoco, genera la transformada de Fourier en un formato visible para humanos, lo cual es bueno para los humanos si desea ver una imagen de la transformada pero no es tan bueno cuando espera que los datos estén en un determinado Formato (el formato normal). Podría equivocarme al respecto, pero solo recuerdo que había algunas rarezas, así que fui al código original que usaron para las cosas de Fourier y funcionó mucho mejor. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/ )

Math.net también tenía otras cosas extrañas que no me gustaban al tratar con los datos de la FFT, no puedo recordar qué era, solo sé que era mucho más fácil obtener lo que quería de ExoCortex DSP biblioteca. Aunque no soy matemático o ingeniero; para esos tipos podría tener perfecto sentido.

Entonces! 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 comencé a analizar el uso de FFTW ( http: // www .fftw.org / ). Y este tipo ya hizo una envoltura de C #, así que iba a comprobarlo pero aún no lo he usado. ( http://www.sdss.jhu.edu/~tamas/bytes /fftwcsharp.html )

¡OH! No sé si estás haciendo esto por 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.

https://podcasts.apple .com / us / podcast / the-fourier-transforms-and-its-applications / id384232849

Veo que este es un subproceso antiguo, pero para lo que vale, tengo una implementación gratuita de C-FFT C # 1 (potencia M-D) de 1-D gratuita:    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 de números.

http://www.exocortex.org/dsp/ es una fuente abierta de matemáticas de C # biblioteca con algoritmos FFT.

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

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

El sitio web de Recetas Numéricas (http://www.nr.com/) tiene un FFT si no le importa escribirlo. Estoy trabajando en un proyecto para convertir un programa Labview a C # 2008, .NET 3.5 a Adquirir datos y luego mirar el espectro de frecuencias. Desafortunadamente, Math.Net usa el último marco .NET, así que no pude usar esa FFT. Probé el Exocortex, que funcionó pero los resultados coincidieron con los resultados de Labview y no conozco la teoría de FFT suficiente 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 programar la ventana del lateral lateral inferior de Labview (y tuve que introducir un factor de escala).

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

Una pregunta antigua, pero aún aparece en los resultados de Google ...

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

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

Esta biblioteca es rápida, ya que se enlaza de forma paralela a múltiples núcleos y está muy completa y lista para usar.

Para una implementación de subprocesos múltiples ajustada para procesadores Intel, revisaría la biblioteca MKL de Intel. No es gratis, pero es asequible (menos de $ 100) y es muy rápido, pero necesitarías llamar a Cdll's a través de P / Invokes. El proyecto Exocortex detuvo el desarrollo hace 6 años, así que tendría cuidado de usarlo si este es un proyecto importante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top