Schnelle Fourier-Transformation (FFT) Ein- und Ausgabe zur Analyse der Häufigkeit von Audiodateien in Java?

7

Ich muss FFT verwenden, um die Häufigkeit einer Audiodatei zu analysieren. Aber ich weiß nicht, was der Ein- und Ausgang ist.

Muss ich ein 1-dimensionales, 2-dimensionales oder 3-dimensionales Array verwenden, wenn ich die Audiodatei des Spektrums zeichnen möchte? Und kann jemand mir Bibliothek für FFT auf J2ME vorschlagen?

    
thongcaoloi 08.07.2011, 06:10
quelle

3 Antworten

22

@thongcaoloi,

Die einfache Antwort bezüglich der Dimensionalität Ihrer Eingabedaten ist: Sie benötigen 1D Daten. Jetzt werde ich erklären, was das bedeutet.

Da Sie Audiodaten analysieren möchten, ist Ihre Eingabe in die diskrete Fourier-Transformation (DFT oder FFT) eine eindimensionale Folge von reellen Zahlen, die die sich ändernde Spannung des Audiosignals über die Zeit und Ihre Audiodatei darstellt ist eine digitale Darstellung dieser sich ändernden Spannung über die Zeit.

Ihre Audiodatei wurde durch Abtasten der Spannung eines kontinuierlichen Audiosignals mit einer festen Abtastrate (auch bekannt als Abtastfrequenz), typischerweise 44,1 kHz für Audio in CD-Qualität, erstellt.

Aber Ihre Datendatei könnte mit einer viel niedrigeren Frequenz abgetastet worden sein. Versuchen Sie daher, die Abtastfrequenz Ihrer Daten herauszufinden, bevor Sie eine FFT für diese Daten durchführen.

Nun müssen Sie die einzelnen Samples aus Ihrer Audiodatei extrahieren. Wenn Ihre Datei stereo ist, wird sie zwei separate Sample-Sequenzen haben, eine für den rechten Kanal und eine für den linken Kanal. Wenn die Datei Mono ist, hat sie nur eine Sample-Sequenz.

Wenn es sich bei Ihrer Datei um Stereo oder ein anderes mehrkanaliges Audioformat wie 5.1 oder 7.1 handelt, können Sie jeden Kanal separat faxen, oder Sie können eine beliebige Anzahl von Kanälen unter Verwendung der zusätzlichen Spannung kombinieren. Das hängt von Ihnen ab und hängt davon ab, was Sie mit Ihren FFT-Ergebnissen zu tun versuchen.

Die Ausgabe der DFT oder FFT ist eine Folge komplexer Zahlen. Jede komplexe Zahl ist ein Paar, bestehend aus einem Realteil und einem Imaginärteil, typischerweise als Paar (re, im) dargestellt.

Wenn Sie die spektrale Leistungsdichte Ihrer Audiodatei grafisch darstellen möchten, was die meisten Leute von der FFT wollen, werden Sie 20 * log10 (sqrt (re ^ 2 + im ^ 2)) mit der ersten graphisch darstellen N / 2 komplexe Zahlen des FFT-Ausgangs, wobei N die Anzahl der Eingangsabtastwerte für die FFT ist.

Sie können versuchen, Ihr eigenes Spektrumanalysator-Softwareprogramm zu bauen, aber ich schlage vor, etwas zu verwenden, das bereits gebaut und getestet wurde.

Diese beiden FFT-Spektrumanalysatoren liefern sofort Ergebnisse und verfügen über eine integrierte IFFT-Synthese, dh Sie können Fourier-Transformation der Frequenzbereichs-Spektraldaten durchführen, um das ursprüngliche Signal im Zeitbereich zu rekonstruieren.

Ссылка

Ссылка

Es gibt noch viel mehr zu diesem Thema und dem Thema der digitalen Signalverarbeitung im Allgemeinen, aber diese kurze Einführung sollte Ihnen den Einstieg erleichtern.

    
Ernest Barkowski 21.07.2011 05:46
quelle
3

Im theoretischen Sinne bildet eine FFT den Komplex [N] = & gt; Komplex [N]. Wenn Ihre Daten jedoch nur eine Audiodatei sind, sind Ihre Eingaben einfach komplexe Zahlen ohne imaginäre Komponente. So werden Sie Real [N] = & gt; Komplex [N] zuordnen. Mit etwas Mathematik sehen Sie jedoch, dass das Format der Ausgabe immer ausgegeben wird [i] == complex_conjugate (Ausgabe [N-i]). Sie müssen also nur die ersten N / 2 + 1 Samples betrachten. Darüber hinaus gibt Ihnen die komplexe Ausgabe der FFT Informationen über Phase und Größe. Wenn alles, was dich interessiert, ist, wie viel von einer bestimmten Frequenz in deinem Audio ist, musst du nur die Größe betrachten, die als Quadratwurzel (imaginär ^ 2 + echt ^ 2) berechnet werden kann, z jedes Element der Ausgabe.

Natürlich müssen Sie sich die Dokumentation der von Ihnen verwendeten Bibliothek ansehen, um zu verstehen, welches Array-Element dem reellen Teil des N-ten komplexen Ausgangs entspricht, und ebenso den Imaginärteil des N-ten komplexen Ausgangs.

    
Jeremy Salwen 08.07.2011 08:54
quelle
1

Wie ich mich erinnere, ist der FFT-Algorithmus nicht so komplex, ich habe eine Klasse von FFT-Berechnungen für meine These geschrieben. Zu dieser Zeit ist die Eingabe ein 1D-Array von Werten, die aus den * .WAV-Dateien gelesen werden. Aber vor der FFT wurde eine Filterung und Normalisierung durchgeführt.

    
user591593 08.07.2011 07:26
quelle

Tags und Links