web-dev-qa-db-fra.com

Une implémentation de la transformée de Fourier rapide (FFT) en C #

Où puis-je trouver une implémentation gratuite, très rapide et fiable de FFT en C #?

Cela peut être utilisé dans un produit? Ou y a-t-il des restrictions?

71
AnnaR

AForge.net est une bibliothèque libre (open-source) prenant en charge la transformation rapide de Fourier. (Voir Sources/Imaging/ ComplexImage.cs pour utilisation, Sources/Math/ FourierTransform.cs pour l'implémentation)

31
torial

Le gars qui a fait AForge a fait un assez bon travail mais ce n’est pas de qualité commerciale. Il est bon d’apprendre, mais vous pouvez constater qu’il apprenait aussi. Il a donc commis des erreurs assez graves, telles que supposer la taille d’une image au lieu d’utiliser les bits par pixel corrects.

Je ne frappe pas le gars, je le respecte pour avoir appris tout cela et nous montre comment le faire. Je pense qu'il est doctorant maintenant ou du moins qu'il est sur le point de l'être, alors il est vraiment intelligent, ce n'est tout simplement pas une bibliothèque utilisable commercialement.

La bibliothèque Math.Net a sa propre bizarrerie quand on travaille avec des transformations de Fourier et des images/nombres complexes. Par exemple, si je ne me trompe pas, il affiche la transformation de Fourier au format visualisable par l'homme, ce qui est bien pour les humains si vous souhaitez regarder une image de la transformation, mais que ce n'est pas si bon lorsque vous vous attendez à ce que les données soient dans une certaine format (le format normal). Je peux me tromper à ce sujet mais je viens de me rappeler qu’il y avait une certaine bizarrerie et j’ai donc consulté le code original qu’ils utilisaient pour le logiciel Fourier et cela fonctionnait beaucoup mieux. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/ )

Math.net a également eu une certaine funkynessité que je n’aimais pas quand je traitais les données de la FFT, je ne me souviens plus de ce que c’était, je savais simplement que c’était beaucoup plus facile d’obtenir ce que je voulais de la bibliothèque DSP ExoCortex. Je ne suis cependant ni mathématicien ni ingénieur; pour ces gars, cela pourrait avoir un sens parfait.

Alors! J'utilise le code FFT extrait d'ExoCortex, sur lequel Math.Net est basé, sans rien d'autre et cela fonctionne très bien.

Et enfin, je sais que ce n’est pas du C #, mais j’ai commencé à envisager d’utiliser FFTW ( http://www.fftw.org/ ). Et ce gars a déjà créé un wrapper en C #, donc j'allais le vérifier mais je ne l'ai pas encore utilisé. ( http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html )

OH! Je ne sais pas si vous faites cela à l'école ou au travail, mais dans tous les cas, une excellente série de conférences gratuites est donnée par un professeur de Stanford sur iTunes University.

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

50
Mike Bethany

Math.NET bibliothèque Iridium fournit une collection rapide et régulièrement mise à jour de fonctions liées aux mathématiques, y compris la FFT. Il est sous licence LGPL, vous êtes donc libre de l'utiliser dans des produits commerciaux.

13
Jacob

Je vois que c’est un vieux fil de discussion, mais pour ce que cela vaut, j’ai une implémentation CFT-FFT 1-D gratuite (licence MIT) 1-D seule-longueur ici: http: //gerrybeauregard.wordpress .com/2011/04/01/an-fft-in-c /

Je n'ai pas comparé ses performances à d'autres implémentations C # FFT. Je l'ai écrit principalement pour comparer les performances de Flash/ActionScript et de Silverlight/C #. Ce dernier est beaucoup plus rapide, du moins pour le calcul des chiffres.

7
Gerry Beauregard

Voici un autre; un port C # de la FFT d’Ooura. C'est assez rapide. Le paquet inclut également la convolution de chevauchement/ajout et quelques autres éléments DSP, sous la licence MIT).

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

5
Hugh

http://www.exocortex.org/dsp/ est une bibliothèque de mathématiques à code source libre C # avec des algorithmes FFT.

5
pookleblinky

Une question ancienne mais qui apparaît toujours dans les résultats de Google ...

Une bibliothèque très peu contraignante MIT) est disponible à l’adresse suivante:

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

Cette bibliothèque est rapide car elle met en parallèle des threads sur plusieurs cœurs et est très complète et prête à être utilisée.

3
Steve Hageman

Le site Web Numerical Recipes (http://www.nr.com/) contient une FFT si vous n’avez pas peur de la taper. Je travaille sur un projet de conversion d’un programme Labview en C # 2008, .NET 3.5 pour acquérir des données et puis regardez le spectre de fréquence. Malheureusement, Math.Net utilise le dernier framework .NET, je ne pouvais donc pas utiliser cette FFT. J'ai essayé l'exocortex - cela a fonctionné, mais les résultats correspondent à ceux de Labview et je ne connais pas suffisamment la théorie FFT pour savoir ce qui cause le problème. J'ai donc essayé la FFT sur le site Web des recettes numériques et cela a fonctionné! J'ai également pu programmer la fenêtre de lobes latéraux de Labview (et avoir à introduire un facteur de mise à l'échelle).

Vous pouvez lire le chapitre du livre de recettes numériques en tant qu'invité sur leur site, mais ce livre est tellement utile que je recommande vivement de l'acheter. Même si vous finissez par utiliser le FFT Math.NET.

2
Curt

Pour une implémentation multithread optimisée pour les processeurs Intel, je voudrais jeter un œil à la bibliothèque MKL d'Intel. Ce n'est pas gratuit, mais c'est abordable (moins de 100 $) et rapide - mais vous devez appeler ses dll C via P/Invokes. Le projet Exocortex a cessé de se développer il y a 6 ans, je ferais donc attention de ne pas l'utiliser s'il s'agit d'un projet important.

1
Paul