Auf Thema antworten

Hi,

man müsste es anders ausdrücken: Ein Lied hat zu jedem Zeitpunkt alle Frequenzen, wobei jede Frequenz individuell stark ausgeprägt ist.


Du kannst dir das so vorstellen das ein (Musik-)Signal zunächst mal eine "beliebg geartete Schwingung" ist. Wenn du deinen Song in einem Waveeditor öffnest und einen Ausschnitt daraus betrachtest (z.B. die 11. Sekunde), dann bekommst du vermutlich so etwas hier angezeigt:


Das ist aber keine einfache Schwingung zu der man irgendeine Frequenz angeben könnte, sondern eine Überlagerung von mehreren monofrequenten Schwingungen. Soll heißen, es ist eine Überlagerung von verschiedenen Sinuswellen mit individueller Amplitude.


Wenn wir zum Beispiel eine Sinusschwingung von einem Hertz und der Amplitude 0.5 mit einer Sinusschwingung von 2 Hertz und der Amplitude 0.4 überlagern erhalten wir als Ergebnis die Schwingung S = sin(1*t)*0.5 + sin(2*t)*0.4.


Addieren wir noch eine Sinusschwingung von 10 Hertz und einer Amplitude von 0.1 hinzu erhalten wir S = sin(1*t)*0.5 + sin(2*5)*0.4 + sin(10*t)*0.1


Jetzt noch schnell einen Sinus von 0.25 Herz und einer Amplitude von -0.6 addiert und wir haben wie von Zauberhand unser obiges Beispielsignal.




Die Fouriertransformation liefert dir zu einem gegebenen Eingangssignal die zugehörige Zerlegung in monofrequente Schwingungen. Oder besser gesagt, sie liefert dir für jede Frequenz die zugehörige Amplitude (damit die Überlagerung aller Frequenzen das gewünschte Eingangssignal ergibt). Bei unserem Beispiel würde die FT folgendes ergeben:


FT (0 Hertz) = 0.0

FT (0.25) = -0.6

FT (1) = 0.5

FT (2) = 0.4

FT (3) = 0.0

FT (4) = 0.0

...

FT (9) = 0.0

FT (10) = 0.1

FT (11) = 0.0

FT (12) = 0.0

...

Das bedeutet halt das sich das Eingangssignal als sin(0*t)*0.0 + sin(0.25*t)*(-0.6) + sin(1*t)*0.5 + sin(2*t)*0.4 + sin(3*t)*0.0 + sin(4*t)*0.0 + ... + sin(9*t)*0.0 + sin(10*t)*0.1 + sin(11*t)*0.0 + ... schreiben lässt. Diese Amplitudenwerte sind übrigens auch das, was dir der Equalizer bei Winamp anzeigt (die ständig hüpfenden Balken). Auch daran sieht man, wie oben schon gesagt, das ein Lied nicht nur eine Frequenz hat sondern alle gleichzeitig, nur halt unterschliedlich stark ausgeprägt.

Es empfiehlt sich dabei natürlich das gewünschte Eingangssignal - also das gesamte Lied - in ganz kleine Häppchen zu zerlegen (wobei die errechneten Amplituden dann natürlich nur für ein jeweiliges Häppchen gelten). Eine Sekunde ist da schon recht lang, nimm lieber noch kleinere Einheiten. Dann hast du weniger Rundungsfehler, und schneller geht die Berechnung auch noch.


Codeschnipsel oder eine Library für das Ganze habe ich jetzt leider auch nicht zur Hand. Aber wenn du mal nach der eindimensionalen diskreten Fouriertransformation googelst müsstest du schnell was passendes finden.



Oben