Ich wollte Apache math commons-Implementierung für FFT ( FastFourierTransformer -Klasse) verwenden, um einige Dummy-Daten zu verarbeiten, deren 8 Datenproben zu einer kompletten Sinuswelle beitragen. Das Maximum ist die Amplitude 230. Das Code-Snippet, das ich ausprobiert habe, ist unten:
%Vor%1) Die von der Methode transform zurückgegebenen Daten sind jetzt ein Array mit komplexen Zahlen. Enthält dieses Array die Frequenzkomponenteninformation über Eingabedaten? oder das von mir erstellte TempConversion-Array enthält die Häufigkeitsinformationen? Die Werte im tempConversion-Array lauten:
%Vor%2) Ich habe viel gesucht, aber an den meisten Stellen gibt es keine klare Dokumentation darüber, welches Format von Datenalgorithmen erwartet (in Bezug auf Beispielcode besser zu verstehen) und wie verwende ich das Array von Ergebnissen, um die Häufigkeiten zu berechnen im Signal enthalten?
Ihre Ausgabedaten sehen korrekt aus. Sie haben die Größe der komplexen FFT-Ausgabe an jedem Frequenz-Bin berechnet, die der Energie im Eingangssignal mit der entsprechenden Frequenz für diesen Bin entspricht. Da Ihre Eingabe rein real ist, ist die Ausgabe komplex konjugiert symmetrisch, und die letzten 3 Ausgabewerte sind redundant.
Sie haben also:
%Vor% Alle Werte sind effektiv 0, abgesehen von Bin 1 (und Bin 6), was wie erwartet einer Häufigkeit von Fs/8
entspricht.
Tags und Links java fft apache-commons signal-processing