Wo finde ich eine kostenlose, sehr schnelle und zuverlässige Implementierung von FFT in C #?
Das kann in einem Produkt verwendet werden? Oder gibt es irgendwelche Einschränkungen?
Antworten:
AForge.net ist eine kostenlose (Open-Source-) Bibliothek mit Unterstützung für Fast Fourier Transform. ( Informationen zur Verwendung finden Sie unter Sources / Imaging / ComplexImage.cs , Implementierungen unter Sources / Math / FourierTransform.cs. )
Der Typ, der AForge gemacht hat, hat einen ziemlich guten Job gemacht, aber es ist keine kommerzielle Qualität. Es ist großartig, daraus zu lernen, aber man merkt, dass er auch gelernt hat, so dass er einige ziemlich schwerwiegende Fehler hat, wie die Annahme der Größe eines Bildes, anstatt die richtigen Bits pro Pixel zu verwenden.
Ich klopfe den Kerl nicht an, ich respektiere ihn zum Teufel dafür, dass er das alles gelernt hat und zeige uns, wie es geht. Ich denke, er ist jetzt promoviert oder zumindest steht er kurz davor, also ist er wirklich schlau, es ist einfach keine kommerziell nutzbare Bibliothek.
Die Math.Net-Bibliothek hat ihre eigene Verrücktheit, wenn sie mit Fourier-Transformationen und komplexen Bildern / Zahlen arbeitet. Wenn ich mich nicht irre, gibt es die Fourier-Transformation in einem für Menschen sichtbaren Format aus, was für Menschen gut ist, wenn Sie sich ein Bild der Transformation ansehen möchten, aber es ist nicht so gut, wenn Sie erwarten, dass die Daten in einem bestimmten Format vorliegen Format (das normale Format). Ich könnte mich irren, aber ich erinnere mich nur, dass es etwas seltsam war, also ging ich tatsächlich zu dem ursprünglichen Code, den sie für das Fourier-Zeug verwendet haben, und es funktionierte viel besser. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/ )
Math.net hatte auch eine andere Funkyess, die ich beim Umgang mit den Daten aus der FFT nicht mochte. Ich kann mich nicht erinnern, was es war. Ich weiß nur, dass es viel einfacher war, das, was ich wollte, aus der ExoCortex DSP-Bibliothek herauszuholen. Ich bin jedoch kein Mathematiker oder Ingenieur. Für diese Leute könnte es durchaus Sinn machen.
Damit! Ich verwende den aus ExoCortex gezogenen FFT-Code, auf dem Math.Net basiert, ohne irgendetwas anderes und es funktioniert großartig.
Und schließlich weiß ich, dass es nicht C # ist, aber ich habe angefangen, FFTW zu verwenden ( http://www.fftw.org/ ). Und dieser Typ hat bereits einen C # -Wrapper erstellt, also wollte ich ihn überprüfen, habe ihn aber noch nicht verwendet. ( http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html )
OH! Ich weiß nicht, ob Sie dies für die Schule oder für die Arbeit tun, aber so oder so gibt es eine großartige kostenlose Vorlesungsreihe, die von einem Stanford-Professor an der iTunes University gehalten wird.
https://podcasts.apple.com/us/podcast/the-fourier-transforms-and-its-applications/id384232849
Die Iridium-Bibliothek von Math.NET bietet eine schnelle, regelmäßig aktualisierte Sammlung mathematischer Funktionen, einschließlich der FFT. Es ist unter der LGPL lizenziert, sodass Sie es in kommerziellen Produkten verwenden können.
Ich sehe, dass dies ein alter Thread ist, aber für das, was es wert ist, habe ich hier eine kostenlose (MIT-Lizenz) 1-D-C # FFT-Implementierung mit nur 2 Längen. Http://gerrybeauregard.wordpress.com/2011 / 04/01 / an-fft-in-c /
Ich habe die Leistung nicht mit anderen C # FFT-Implementierungen verglichen. Ich habe es hauptsächlich geschrieben, um die Leistung von Flash / ActionScript und Silverlight / C # zu vergleichen. Letzteres ist viel schneller, zumindest für das Knacken von Zahlen.
http://www.exocortex.org/dsp/ ist eine Open-Source-C # -Mathematikbibliothek mit FFT-Algorithmen.
Hier ist ein anderes; ein C # -Port der Ooura FFT. Es ist ziemlich schnell. Das Paket enthält auch Überlappungs- / Add-Faltung und einige andere DSP-Inhalte unter der MIT-Lizenz.
https://github.com/hughpyle/inguz-DSPUtil/blob/master/Fourier.cs
Eine alte Frage, die aber immer noch in den Google-Ergebnissen angezeigt wird ...
Eine sehr uneingeschränkte MIT Licensed C # / .NET-Bibliothek finden Sie unter:
https://www.codeproject.com/articles/1107480/dsplib-fft-dft-fourier-transform-library-for-net
Diese Bibliothek ist schnell, da sie parallele Threads auf mehreren Kernen enthält und sehr vollständig und einsatzbereit ist.
Die Numerical Recipes-Website (http://www.nr.com/) verfügt über eine FFT, wenn Sie nichts dagegen haben, sie einzugeben. Ich arbeite an einem Projekt, das ein Labview-Programm in C # 2008, .NET 3.5 konvertiert, um Daten zu erfassen und dann schauen Sie sich das Frequenzspektrum an. Leider verwendet das Math.Net das neueste .NET-Framework, sodass ich diese FFT nicht verwenden konnte. Ich habe den Exocortex ausprobiert - er hat funktioniert, aber die Ergebnisse stimmen mit den Labview-Ergebnissen überein, und ich kenne nicht genug FFT-Theorie, um zu wissen, was das Problem verursacht. Also habe ich die FFT auf der Website für numerische Rezepte ausprobiert und es hat funktioniert! Ich konnte auch das Labview-Fenster mit niedrigen Nebenkeulen programmieren (und musste einen Skalierungsfaktor einführen).
Sie können das Kapitel des Buches "Numerische Rezepte" als Gast auf ihrer Website lesen, aber das Buch ist so nützlich, dass ich den Kauf sehr empfehlen kann. Auch wenn Sie am Ende die Math.NET FFT verwenden.
Für eine Multithread-Implementierung, die auf Intel-Prozessoren abgestimmt ist, würde ich die MKL-Bibliothek von Intel überprüfen. Es ist nicht kostenlos, aber erschwinglich (weniger als 100 US-Dollar) und blitzschnell - aber Sie müssen C-DLLs über P / Invokes aufrufen. Das Exocortex-Projekt hat die Entwicklung vor 6 Jahren eingestellt, daher würde ich es vorsichtig verwenden, wenn dies ein wichtiges Projekt ist.