Hallo Ich muss ein Programm schreiben das aus Audio Daten ein Power Spektrum erstellt. Eingangs Daten: 44100Hz; Stereo; 5 Sekunden; float Ausgangs Daten: log. 20-22500Hz --> 20Hz=0,9 25Hz=1,1 30Hz=0,8 .... Nun die Audio Daten habe ich im Speicher. Nur wie mache ich daraus meine Ausgangs Daten? Wie eine FFT genau funktioniert habe ich bis jetzt noch nicht richtig verstanden. Klar ist nur das ich sie brauche. Nun ja eigentlich muss ich sie ja nur anwenden, aber WIE? Dirk
Auf opensource und sourceforge gibt es c-codes die das direkt leisten. Die fft ermittelt dir aber erstmal nur die Verteilung. Bei der Leistung must Du die f noch gesondert beruecksichtigen.
Ich habe mir die FFT Routinen aus dem Audacity Projekt mal angesehen. Nur habe ich keine Idee, wie ich damit umgehen muss. Oder anders gesagt, wie & was ich da rein schieben muss, um mein Ergebniss zu bekommen. Ist mit Sicherheit ganz einfach, nur ich sehe nicht wie ich es machen muss und bin ein wenig am verzweifeln. Dirk
Musst du das in C machen oder in Matlab oder sowas? In Matlab ist es ja drin. Ein bisschen Erklärung zum fft Algorithmus von Matlab findest du auf deren Seite: http://www.mathworks.com/access/helpdesk/help/techdoc/ref/fft.html Dann gibts auch noch auf folgenden Seiten Hilfe: http://www.kgw.tu-berlin.de/statisch/lehre/skript/ds/node36.html http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation
Mein Code ist sogar in C++ geschreiben. Also da ist nichts mit Matlab oder sowas. Eigentlich will ich auch gar nicht verstehen wie eine FFT geht, sondern nur wissen wie ich sie anwenden muss. Ich habe mir in den letzten Tagen einige FFT Routinen angesehen und eingebaut. Nun bekomme ich zwar Ausgangs-Daten (Array) nur es fehlt mir der Bezug zur Frequenz (Array[X]--> ??Hz). Soweit ich es verstanden habe sind die Daten linear im Array. Ich brauche sie aber mit einer log. Aufteilung. Muss ich mir da die gewünschten Frequenzen aus dem Array selber raus suchen?
Die Daten sind mit der Samplerate f_s=44100 abgetastet, das ergibt t_0 = 1/f_s = ... Du machst die FFT über N Samples => f_0 = f_s / N beispielsweise 1024 Punkte FFT f_0 = 44100 / 1024 = 43.0664Hz Das heißt der Abstand deiner Spektrallinien im Bildbereich ist ca 43Hz. Die erste Spektrallinie die du hast steht für 0Hz, die nächste für 43Hz, die nächste für 86Hz, ..., bis zu letzten, die für (44100-43)Hz steht. Alles über f_s/2 sind aber in Wirklichkeit die Werte für die negativen Frequenzen, am besten du schmeißt sie gleich weg. Du siehst also, dass du im Frequenzbereich auch eine lineare Skala erhälst. Wie du das ganze jetzt am besten logarithmisch machst fällt mir jetzt auch nicht sofort ein. Ich denke die passenden Linien raussuchen reicht nicht aus. Eventuell musst du du schon alle Linien verwenden, und dann eben in den höheren Frequenzen immer mehrere zusammenaddieren. Dabei gehts darum, dass die Gesamtenergie ja stimmen muss.
Ist es wirklich so einfach! Und ich habe es nicht selber gesehen. Hätte ich das nur mal richtig gelernt oder besser aufgepasst. Danke Dirk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.