Hallo, ich hab vor einen Audio Spektrum Analyzer zu bauen und steck gerade bei der Umsetzung von der FFT. Ich hätt in den unteren Frequenzbereichen gerne eine Auflösung von 5Hz. Womit ich die Werte doch 200ms aufnehmen muss oder(Ich nehm die Werte auf und für auf diese dann die FFT aus)? Somit hätte ich eine Aktualisierungsrate von 5Hz. Was nun wirklich extrem wenig ist. Pc-Programme schaffen doch auch bei weitem mehr. Ich komm nur nicht drauf wo da mein Denkfehler liegt. Würde mich freuen wenn mich jemand aufklährt. mfg. skyscater
Neee, da hast Du was noch nicht richtig verstanden. Erstmal musst Du deine maximale Frequenz fmax wissen, denn es gibt da so ein Abtasttheorem: Abtastfrequenz fA > 2*fmax Nehmen wir also einfach mal fA = 40kHz, dann ergibt sich die Frequenzauflösung deiner fft in Abhängigkeit der Zahl der Abtastwerte N, mit denen Du das Spektrum berechnest. deltaf = fS/N. N kansnt du dir ja selber aussuchen, in meinem Beispiel mit deltaf = 5Hz N= fS/deltaf= 8000
Wenn ich das N mit 8000 annehme, muss ich das Signal bei einer Samplingrate von 40kHz -> 8k/40k = 0,2 = 200ms lang aufnehmen. Womit wir wieder bei der Aktualisierungsrate von 5Hz währen. Oder hab ich da wieder was falsch verstanden? mfg.skyscater
Ja jetzt versteh ich deine Frage auch erst, sorry. Dann stimmt das mit den 200ms.
Wie wird das in den ganzen Programmen realisiert? Wenn die eine Auflösung von 5 Hz haben aktualisiert sich die Anzeige ja trotzdem schneller. Das Die Frequenz 5Hz sich nur 5mal sekündlich ändern kann ist mir klar, aber alle anderen (höheren) Frequenzen ändern sich ja schneller. Hoffe ihr vertseht was ich meine. mfg.skyscater
Ich denk mal, die nutzen so eine Art Ringbuffer. Wenn du z.B. 200ms aufnimmst und dann die Daten auswertest, dann aber den Speicher nicht leer machst, sondern nur z.B. 20 weitere Werte einliest und in den Speicher "schiebst" so dass die 20 ältesten Werte raus fliegen, hast du eine höhere Aktualisierungsrate.
Du brauchst eine zeitliche Mindestlänge um die tiefen Frequenzen erfassen zu können. Aber bei genügender Rechenpower hindert dich niemand daran alle 10 oder 20 ms die letzten n Werte zu nehmen und zu rechnen und entsprechend oft deine Anzeige zu aktualisieren. Daß die Werte dann zu einem Großteil überlappen stört ja nicht. Wobei das kein Ballerspiel ist. Zu schnelle Änderungen in einer Anzeige dienen oft nur noch zur Verwirrung.
Michael Mokricky schrieb: > aber alle anderen (höheren) Frequenzen ändern sich ja > > schneller. Nein, auch eine 5Hz-Frequenz kann die Amplitude rascher ändern. Das ergibt esben ein Frequenzgemisch. Dasselbe ist es, wenn eine 10kHz-Welle langsam den Offset ändert: Ergibt eine eingebaute 10 Hz-Welle. Du analysierst immer einen Signalverlauf und splittest ihn in Frequenzen. Die Betrachtung, dass du eine Frequenzgemisch splittest, ist zwar richtig, aber es ist letztlich eine 2D-2D-Abbildung, die zu keinem anderen Ergebnis führt. Wenn Du einzelene Frequenzen betrachtest, dann darf sich die Frequenz gar nicht ändern, denn dadurch tauchen sofort immer andere mit auf. Wenn du die Amplitude einer starren Frequenz erhöhst, ist das während der Erhöhung so, als währe die Frequenz etwas geringer. Wenn Du die Phase vor schiebst, ist es so, als wäre sie höher. In den Übergängen gibt es immer zusätzliche oder geänderte Frequenzen.
An und für sich gibt es da auch noch einen ganz anderen Ansatz. Wenn man das Spektrum von Audiodateien über der Zeit ansehen will hat man genau das gleiche Problem: entweder wählt man ein kurzes Zeitfenster, also hohe zeitliche Auflösung, hat dann aber keine Auflösung mehr im unteren Frequenzbereich. Oder man wählt ein langes Zeitfenster, hat dann zwar eine gute Auflösung bei den tiefen Frequenzen, jedoch keine gute Zeitauflösung mehr. Hier geht man folgenden (wesentlich komplizierteren) Weg: Man beginnt mit kurzen Zeitfenstern. Das ergibt eine gute Zeitauflösung, verwendet aber nur die obere Hälfte des Spektrums für die direkte Darstellung. Die untere Hälfte des Spektrums kombiniert man aus 2 Zeitfenstern zu einem neuen, doppelt so langen Zeitfenster zusammen. Man halbiert also für die untere Hälfte die zeitliche Auflösung und verdoppelt dabei gleichzeitig die Frequenzauflösung. Auch davon verwendet man aber wieder nur die obere Hälfte des Spektrums direkt und kombiniert wieder von 2 aufeinanderfolgenden Spektren die untere Hälfte zusammen undsoweiter. Mit jeder Oktave (von oben nach unten) halbiert sich also die zeitliche Auflösung und verdoppelt sich die Frequenzauflösung (die damit auf die logarithmisch angeordneten Töne immer gleich ist). Dies wiederholt man solange bis man auch im untersten sinnvollen Bereich die gewünschte Frequenzauflösung erreicht. Wenn man alles richtig macht, ist das Verfahren auch umkehrbar. D.h. man kann das Spektrum editieren und anschließend wieder in das Zeitsignal zurückrechnen. Ich habe zu diesem Thema vor vielen Jahren eine Diplomarbeit gelesen, die ich jetzt nicht zur Hand habe, aber vl. herausfinden könnte wie sie heißt. Meines Wissens habe ich eine Kopie angefertigt und irgendwo herumliegen. Da müsste auch die Berechnung dokumentiert sein - kann man sich aber (wenn man den Fourier verstanden hat) aber sicher auch selbst überlegen. Ein digitales Filter müsste sich auch auf diese Weise realisieren lassen (um gleichermaßen kurze Durchlaufzeit für hohe Frequenzen und präzise Bearbeitbarkeit tiefer Frequenzen im Frequenzbereich zu realisieren). Man erhält dabei offensichtlich unterschiedliche Durchlaufzeiten für hohe und tiefe Frequenzen, also auch ohne Bearbeitung nicht mehr das Originalsignal.
Jo gibt es. Das wird entweder als Oktavfilter ausgeführt oder man nutzt nicht eine linear verteilte FFT sondern eine logarithmisch angeordete, wo die Freuquenzen gleich in Audiofrequenzen messen sind. Es bleibt aber denoch das Problem der Latenz und damit der Zuordnung der Frequenzen: Eine Basswelle beinhaltet Information aus einem viel längeren zeitlichen Bereich und kann nicht so ohne Weiteres mit einer hochfrequenten Welle wieder vereint werden. Selbst bei phasenlinearen Filtern ist das ein Erschwernis, zumal die FFT infolge des leakage-Effektes nie 100% arbeitet und Artefakte bringt. Ich habe mir mal testweise eine lückenhafte FFT aufgezogen, die nur Audiofrequenzen kennt, die aber ihrerseits ganzzahlig in die Messperioden passen. Wenn man sie komplex ausführt, gelangt man in der Tat zu einem Ergebnis, dass wieder synthesefähig wird, also z.B. zu einem Equalizer, der wirklich annähernd unverzerrt wieder gibt. Ich benutze einen solchen EQ fürs professionelle Mastering in meiner FGPA-Workstation. Problem: Man hat gewaltige Latenzen und einen ordentlichen RAM-Bedarf. Ein solcher Konstrukt eigent sich damit nicht für wirtschaftliche Produkte, ist also nicht verkäuflich.
ich hänge mich mal an die Diskussion dran, da ich eine grundlegende Frage habe: Freddy schrieb: > Nehmen wir also einfach mal fA = 40kHz, dann ergibt sich die > Frequenzauflösung deiner fft in Abhängigkeit der Zahl der Abtastwerte N, > mit denen Du das Spektrum berechnest. deltaf = fS/N. Welcher Frequenz entspricht denn dann die erste und die letzte Frequenz, die die FFT ermittelt?
Robert Kuhn schrieb: > Eigentlich einfach: Es ist der Frequenzbereich 1/n und (n-1)/n Der erste Wert, den die FFT ermittelt, liegt üblicherweise bei 0 Hz! Der zweite Wert bei N/T und der letzte dann bei (N-1)/T, die Anzahl der Punkte ist N, T ist die Länge des Messintervalls. Ich denke aber nicht, dass das den Fragesteller noch interessiert, die Frage ist schon ein paar Monate her.
Johannes E. schrieb: > Der zweite Wert bei N/T Du meintest sicher 1/T? Die mathematische Punkte sind ja N = 0 ... 1 (n-1) und die beiden ersten damit (N=0)/T und (N=1)/T. Was in dem Zusammenhang aber nochmal erwähnt werden sollte, ist der Umstand, dass diese sich bei der FFT real ergebenden Werte Repräsentanten eines Frequenzbandes sind. Die erste FFT-Frequenz-Wert ist daher nicht die Frequenz 0 = Gleichstrom, sondern beinhaltet einen gehörigen Anteil an geringen Frequenzen, die bei der Berechnung dort hineingemappt werden. Der echte Gleichanteil wird nur dann exakt erzielt, wenn eine unendliche (oder in der Praxis "genügend hohe") Zahl an Punkten verwendet wird.
Johannes E. schrieb: > Der erste Wert, den die FFT ermittelt, liegt üblicherweise bei 0 Hz! > Der zweite Wert bei N/T und der letzte dann bei (N-1)/T Meinst Du mit N die Punkte der Eingangsdaten oder der Frequenzen? Üblicherweise gehen N Daten rein und M Daten raus, wobei N=M. Wegen der Spiegelfrequenzen ist die obere Hälfte identisch. Also gilt M=N/2. Wie passt das aber damit zusammen, dass die erste Frequenz 0 ist und die letzte N-1? Die wären da dann nicht exakt symmetrisch zu einander, oder nicht? Bei einer 16fach FFT sieht das Spektrum in etwa so aus: .* *. .* *. .* *. .* ** *. .** ** *. .*** * ** * ***. .****************. .0123456789abcdef. .0123456776543210. also voll Symmetrie. Dann kann doch die letzte nicht N-1 sein sondern N, oder irre ich jetzt?
M. Fritsch schrieb: > Meinst Du mit N die Punkte der Eingangsdaten oder der Frequenzen? > > Üblicherweise gehen N Daten rein und M Daten raus, wobei N=M. Wegen der > Spiegelfrequenzen ist die obere Hälfte identisch. Also gilt M=N/2. Wenn man N Punkte im Zeitbereich hat und davon eine DFT bzw. FFT berechnet, dann bekommt man auch N Punkte im Frequenzbereich. Die obere Hälfte im Frequenzbereich ist spiegelbildlich, wenn das Signal im Zeitbereich reel ist. Aber trotzdem hat man M=N Punkte im Frequenzbereich. > Wie passt das aber damit zusammen, dass die erste Frequenz 0 ist und die > letzte N-1? Die wären da dann nicht exakt symmetrisch zu einander, oder > nicht? Ja, das ist richtig. der erste Punkt im Frequenzbereich ist 0. Der zweite Punkt ist bei 1/T, der letzte Punkt bei (N-1)/T, diese beiden Punkte sind spiegelbildlich zueinander, genau so wie 2/T und (N-2)/T, ... Durch die Abtastung ergibt sich ein periodisches Spektrum mit Periode N, des Spektrum wiederholt sich also in beide Richtungen periodisch. Das bedeutet, dass der Punkt N im Spektrum gleich dem Punkt 0 ist. Damit hat man auch hier wieder eine Symmetrie, genauso ist der Punkt -1/T gleich dem Punkt (N-1/t). > Bei einer 16fach FFT sieht das Spektrum in etwa so aus: Nein, so sieht das nicht aus! Eher so: x x x x x x x x xxx x xx xxx xx xxx x xxx x xxx xxxxxxxxxxxxxxxxx 0123456789abcdef0 01234567876543210 Ich habe 17 Punkte im Frequenzbereich gezeichnet, dadurch sieht man die periodische Wiederholung; die FFT liefert nur die vorderen 16 Punkte.
Hallo Um herauszufinden, was die FFT liefert, habe ich im LabVIEW ein kleines Spielchen gemacht: Die FFT erwartet einen numerischen Array der Länge 2 hoch x (x: natürliche Zahl). Das ergibt dann N Werte. Die Routine liefert als Resultat einen ebensolangen komplexen Array. Wie wir bereits gesehen haben lässt sich der Betrag der Frequenzanteile mittels Pythagoras berechnen. Die FFT hat ja keine Ahnung was beim Abtasten zeitlich geschah; sie interessiert sich nur für die Fensterfigur, egal ob es um ns oder Stunden geht. Jetzt interessiert es mich aber, wo die FFT die Spektrallinie hinlegt, wenn ich mit einer Sinuskurve daher komme. Ergebnis: Wenn ich eine einzige Periode in den Eingangsarray gebe, landet die Spektrallinie im Arrayelement 1 (Der Array beginnt bei Index 0). Wenn ich drei Perioden in den Eingangsarray gebe, landet die Spektrallinie im Arrayelement 3. u.s.w. Das ist unabhängig von der Arraylänge, die muss einfach 2 hoch x sein. Jetzt kann man ja die Zeit rsp. die Frequenz ins Spiel bringen. Wenn das Zeitfenster 1s ist, dann habe ich mit einer Periode die Frequenz 1Hz. Weil ich weiss, dass im Element 1 des Spektrumarrays der Ausschlag zu erwarten ist, habe ich somit die Skalierung der Frequenzachse. Gruss Matoph
Martin Schmidlechner schrieb: > Ein digitales Filter müsste sich auch auf diese Weise > realisieren lassen (um gleichermaßen kurze Durchlaufzeit für > hohe Frequenzen und präzise Bearbeitbarkeit tiefer Frequenzen > im Frequenzbereich zu realisieren). Das ginge in Richtung Halbbandfilter oder ?
Hey Leute habe ma eine Frage zu FFT. In einer lyrik stand, dass man die erfassten diskrete Werte nicht gleich fourier transformiert sondern erst zwischenspeichert. Warum ist das so ? Danke im Voraus
Da keiner geantwortet hat: Die gesampelten Werten werden gfs. mehrfach benötigt.
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.