Eine Implementierung der schnellen Fourier-Transformation (FFT) in C # [geschlossen]


72

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:



52

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


2
Ich würde mich für weitere Details über die Verrücktheit in der Math.NET Iridium fft-Implementierung interessieren - damit wir das Problem beheben können! ;). Hängt es damit zusammen, wie komplexe Zahlen behandelt werden? Keine Ahnung, was Sie mit dem "Human Viewable Format" meinen. Beispiele: mathnet.opensourcedotnet.info/doc/IridiumFFT.ashx
Christoph Rüegg

6
fftw hat eine problematische Lizenz; Überprüfen Sie dies: "Es sind auch nicht kostenlose Lizenzen für FFTW verfügbar, die andere Nutzungsbedingungen als die GPL zulassen."
Daniel Mošmondor

Dies ist eine Frage an Mike Bethany. Ich versuche zu lernen, wie man Daten vom Zeitbereich in den Frequenzbereich konvertiert. Ist Ihr Exocortex-Link der richtige Weg, dies zu tun?
T ony

exo cortext löst eine Systemausnahme außerhalb des Bereichs ohne zusätzliche Informationen auf.net4 aus. funktioniert nicht.
bh_earth0

13

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.


2
+1. Math.NET Iridium eignet sich hervorragend für die Übersetzung von Java-Code (der Apache Commons-Math verwendet) in .NET, da die Klassen und Methoden der einzelnen Klassen eng miteinander verbunden sind. In 95% der Fälle müssen Sie lediglich die Klassen- und Methodennamen ändern, und alles funktioniert.
Finnw

7

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.





2

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.


Seien Sie vorsichtig mit Code, den Sie aus numerischen Rezepten verwenden. An dem Code ist nichts auszusetzen, es ist die Lizenz, die das Problem darstellt. Sie müssen zahlen, um den Code zu verwenden, und keine Ausnahmen für nichtkommerzielle oder wissenschaftliche Anwendungen. Siehe diesen Link für weitere Informationen.
Bob Bryan

1

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.


2
Der Einzelbenutzerpreis ab Juni 2013 beträgt 499 US-Dollar.
RickNZ

Ab Oktober 2015
kostet die

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.