Grundgebrauch von Java FFTPACK
Frage
Ich habe einige einfache Audioverarbeitungsalgorithmen in Matlab geschrieben, die ich für eine Android-Anwendung verwenden werde. Ich habe Probleme, die FFT-Implementierung in Java zu übersetzen.
Ich versuche die Java-Version von fftpack , das angeblich effizient ist, aber ist Auch ein bisschen kryptisch für mich, vielleicht, weil mein Mangel an einem festen FFT im Allgemeinen auf FFT erfolgt.
Ich habe einfach ein doppelte Array, von dem ich ein entsprechendes Array von komplexen Zahlen erstellen möchte, die die FFT darstellt. Die einzige Berechnung, die ich an der FFT tue, ist der absolute Wert seiner Elemente.
wegen der Klarheit sake ist hier der wesentliche Matlab-Code, den ich mit Java FFTPack replizieren möchte:
generasacodicetagpre.Ich erwarte, dass dies ziemlich einfach ist, aber ich kann keine Einstiegspunkte in FFTPack identifizieren.
Gelöst:
Die untenstehende Antwort von Lutzl arbeitet, aber das Erstellen eines komplexen1d-Objekts ist eigentlich nicht erforderlich, da FFTPACK ein doppeltes Array als Eingabe unterstützt:
generasacodicetagpre.Lösung
Lesen von SourceForge JFFTPACK-Repository
Sie initialisieren ein neues FFT-Objekt über
generasacodicetagpre.Verwenden Sie dann die Vorwärtstransformation des FFT-Objekts mit
generasacodicetagpre.und kann dann auf die absoluten Werte wie
zugreifen generasacodicetagpre. teilen optional durch N
, um die FFT zu normalisieren.
Geeignete variable Erklärungen hinzufügen.
Die üblichen Übereinkommen gelten, wenn das Signal mit Abtastfrequenz FS abgetastet wird, wobei der Eintrag X (XY) [k] die Frequenzkomponente bei k * fs / n für k= n / 2 bis n-1 darstellt. < / p>
Möglicherweise möchten Sie nach einer anderen, besser unterstützten FFT-Implementierung suchen, die in reiner Java durchgeführt wird. Es ist nicht so kompliziert, dass die FFT für dyadische Längen umgesetzt wird. Die einzige Komplikation ist bei der Implementierung der Umwandlung an Ort und Stelle, um den letzten Beschleunigungsfaktor zu erhalten.