Hallo zusammen! Ich hoffe mal ich hab mich jetzt in der Forenauswahl nicht komplett verhauen - wenn doch bitte verzeihen und verrschieben :) Und zwar habe ich ein paar allgemeinere Fragen zum Thema FFT bzw. zu deren Anwendung. Ausgangsbedingungen (momentan noch in der Theorie): Es geht um eine Art Schalldruckmessung. Ich digitalisiere mit einem µC ein Musiksignal. Die Auflösung beträgt 8 Bit Hierbei sind nur Frequenzen unter 250 Hz interessant. Als Abtastrate wählte ich 500 Hz (250*2). Die gesammte Abtastung dauert 30 Sekunden. Die abgetasteten Werte (15000 an der Zahl) werden auf den Computer übertragen und sollen dort verarbeitet werden. Hier soll jetzt eine FFT durchgeführt werden um herauszufinden bei welcher Frequenz der höchste Schalldruck vorlag. Die gewünschte / benötigte Frequenzauflösung liegt bei 1 Hz. Wie gehe ich jetzt am besten vor? 1. Entweder ich nehme die 15000 Werte, fülle mittels zero-padding auf 16384 auf (2er-Potenz da FFT, alternativ wäre es wohl einfacher die Abtastrate um ein paar Hz zu erhöhen damit ich nicht so viel auffüllen muss :)) und mache dann eine komplette FFT mit N=16384 Punkten. Hierbei erhalte ich eine Frequenzauflösung von 0,033 Hz (delta F = Abtastrate / Anzahl der Samples). 2. Angenommen ich möchte jetzt aber während der Messung eine (mehr oder weniger) Realtime-Anzeige der FFT haben. Für meine gewünschte Frequenzauflösung von 1 Hz muss ich nach obiger Formel mindestens eine Sekunden abtasten und könnte dann jeweils eine FFT mit N=512 Punkten durchführen. Ich könnte also meine "Realtime-Anzeige" mit etwa 1Hz aktualisieren. Soweit richtig? Im Endeffekt würde ich nach den 30 Sekunden also mit 30 einzelnen FFTs dastehen. Hier stehe ich etwas auf dem Schlauch... Wie müsste ich diese dann aufsummieren, um das Gesamtspektrum über die 30 Sekunden zu erhalten? 3. Ich mach das ganze "doppelt". 30 mal die 512-Punkt-FFT für die Realtime-Anzeige + einmal am ende die "große FFT" mit allen Samples für die endgültige Ausgabe. Vor-/Nachteile? (außer der doppelten Rechnerei) Passt das soweit oder habe ich irgendwelchen groben Denkfehler gemacht? Wäre super wenn mir noch jemand mit den unsicheren Punkten helfen könnte :) Einen schönen Mittag wünsche ich! Grüße Dominik
:
Verschoben durch Admin
Ein paar Antworten aus der Kalten, sprich, aus dem teilverschütteten Gedächtnis. Eine FFT über N Werte ergibt nur N/2 Frequenzpunkte, die restlichen sind 'virtuell' und vom Betrag mit ersteren identisch. Der Rechenaufwand steigt enorm mit N an (entweder quadratisch oder exponentiell, weiß ich nicht mehr aus dem Kopf). Je größer N, desto besser die Auflösung, und desto größer der Aufwand. Bei 8 Bit ADC-Daten lohnt sich N=16384 m.E. nicht, irgendwann werden ADC-Ungenauigkeit, Rechen- und Rundungsfehler größer als deine Koeffizienten... N muß keine Zweierpotenz sein, erlaubt aber häufig einfachere bzw. einfacher optimierbare Algorithmen. fftw (Linux FFT-Paket) kann beliebige N. > Hier soll jetzt eine FFT durchgeführt werden um herauszufinden bei > welcher Frequenz der höchste Schalldruck vorlag. Klingt, als wolltest du eigentlich die spektrale Leistungsdichte wissen. Die FFT liefert erst einmal Real- und Imaginäranteil. Die spektr. Leistungsdichte ist der Betrag derselben. > Hierbei sind nur Frequenzen unter 250 Hz interessant. >Als Abtastrate wählte ich 500 Hz (250*2). Kommt auf die Anforderungen drauf an, aber 2 x f(max) ist etwas wenig. Shannon besagt nur, daß du oberhalb von fs/2 --nichts-- mehr sehen kannst. Beispiel Audio: Die Abtastraten liegen üblicherweise bei 40...50 kHz, z.B. CD-Format. Für das menschliche Hören ist hauptsächlich der Bereich von 50 Hz ... 5kHz relevant, also zehnfaches Oversampling für die relevanten Frequenzen.
>>Kommt auf die Anforderungen drauf an, aber 2 x f(max) ist etwas >>wenig. Shannon besagt nur, daß du oberhalb von fs/2 --nichts-- mehr >>sehen kannst. Das stimmt so auch nicht. Signale die oberhalb von fs/2 liegen, versauen dir natürlich noch das Signal, Stichwort: Alias-Effekt. Man kann mit diesen Signalanteilen natürlich nichts anfangen, als "Geister" machen Sie sich aber schon bemerkbar. >>N muß keine Zweierpotenz sein, erlaubt aber häufig einfachere >>bzw. einfacher optimierbare Algorithmen. fftw (Linux FFT-Paket) kann >>beliebige N. Dem würde ich auch nicht so ganz zustimmen. Afaik wird die Berechnung auf die gleichen Schritte/Funktionsaufrufe zurückgeführt, weswegen es keinen Unterschied in der Berechnungsdauer macht, ob man 300 oder 512 Werte der FFT übergibt. Eine Antwort auf die Fragestellung habe ich an der Stelle nun auch nicht direkt. Das ist aber sicherlich eine Sache, die sich experimentell sehr leicht überprüfen lassen sollte.
frame schrieb: > Ein paar Antworten aus der Kalten, sprich, aus dem teilverschütteten > Gedächtnis. Ui, da war aber schon ein leichter Hangrutsch am Werk... > Eine FFT über N Werte ergibt nur N/2 Frequenzpunkte, die restlichen > sind 'virtuell' und vom Betrag mit ersteren identisch. Stimmt, die N/2 Werte sind dafür aber komplexwertig (d.h. Real- und Imaginärteil). > Der Rechenaufwand steigt enorm mit N an (entweder quadratisch oder > exponentiell, weiß ich nicht mehr aus dem Kopf). Bei FFT mit N*log2(N), so schlimm ist es nicht. > Je größer N, desto besser die Auflösung, und desto größer der > Aufwand. Bei 8 Bit ADC-Daten lohnt sich N=16384 m.E. nicht, > irgendwann werden ADC-Ungenauigkeit, Rechen- und Rundungsfehler > größer als deine Koeffizienten... Vorsicht. Die hinten fehlenden Bits lassen sich als Rauschen interpretieren (leider ist das nicht weiß). Mit der Frequenzauflösung hat das erst mal nichts zu tun. Wenn er irgendwo einen schmalen Peak sucht, muss die Wertauflösung nicht mal so toll sein, dafür ist eine ausreichende Frequenzauflösung notwendig. > > N muß keine Zweierpotenz sein, erlaubt aber häufig einfachere > bzw. einfacher optimierbare Algorithmen. fftw (Linux FFT-Paket) kann > beliebige N. Eine FFT lässt sich nur für Zweierpotenzen rechnen. Mit aktueller PC-Rechenleistung ist der Laufzeitunterschied zur DFT aber vernachlässigbar, wenn es nicht gerade Echtzeitanwendungen oder große Datenmengen sind. > Klingt, als wolltest du eigentlich die spektrale Leistungsdichte > wissen. Die FFT liefert erst einmal Real- und Imaginäranteil. > Die spektr. Leistungsdichte ist der Betrag derselben. Nö, das Betragsquadrat. > Kommt auf die Anforderungen drauf an, aber 2 x f(max) ist etwas > wenig. Shannon besagt nur, daß du oberhalb von fs/2 --nichts-- mehr > sehen kannst. Er sagt nur, dass dort das Gleiche wieder von vorn anfängt. Der Ausgangswert ist mit f_s periodisch, deswegen schneidet man bei der FFT nach f_s/2 ab. > Beispiel Audio: Die Abtastraten liegen üblicherweise bei 40...50 kHz, > z.B. CD-Format. Für das menschliche Hören ist hauptsächlich der Bereich > von 50 Hz ... 5kHz relevant, also zehnfaches Oversampling für die > relevanten Frequenzen. Du warst zu oft in der Disco. Der erwachsene Mensch hört bis irgendwo in den Bereich 15...20 kHz. 5 kHz ist nur knapp über Telefonbandbreite.
> Vorsicht. Die hinten fehlenden Bits lassen sich als Rauschen > interpretieren (leider ist das nicht weiß). Mit der Frequenzauflösung > hat das erst mal nichts zu tun. Wenn er irgendwo einen schmalen Peak Je größer N, desto größer auch die Anzahl der Operationen (N*log2(N), wie du so schön geschrieben hast). Wenn spektrale Leistungsanteil der meisten Koeffizienten in den Bereich des ADC-Fehlers kommt, macht man sich genauigkeitsmäßig etwas vor. >> Kommt auf die Anforderungen drauf an, aber 2 x f(max) ist etwas >> wenig. Shannon besagt nur, daß du oberhalb von fs/2 --nichts-- mehr >> sehen kannst. > Er sagt nur, dass dort das Gleiche wieder von vorn anfängt. Der > Ausgangswert ist mit f_s periodisch, deswegen schneidet man bei der FFT > nach f_s/2 ab. Wie oben erwähnt auch 'Alaising-Effekt' genannt. "--nichts-- mehr sehen" heißt, aus dem berechneten Spektrum läßt sich keine Aussage über Frequenzen größer fs/2 treffen. > Du warst zu oft in der Disco. Der erwachsene Mensch hört bis irgendwo in > den Bereich 15...20 kHz. 5 kHz ist nur knapp über Telefonbandbreite. Du wohl eher. Das Zauberwort heißt 'relevant'. Weder erzeugt der Mensch bei normaler Sprache relevante Frequenzanteile über 5 kHz (Frauen vielleicht ausgenommen), noch spielen sie für die Sprachverständigung eine Rolle. Darum können die netten Medienkonzerne auch ihre Watermarking-Abdrücke in dem Bereich ab ca. 8 kHz verstecken, ohne das es wirklich den Höreindruck stört.
frame schrieb: > Weder erzeugt der Mensch bei normaler Sprache relevante Frequenzanteile > über 5 kHz (Frauen vielleicht ausgenommen), noch spielen sie für die > Sprachverständigung eine Rolle. Für den Höreindruck bei Musik tun sie das allerdings. Mit 16 kHz abgetastete Musik will heutzutage niemand mehr hören. > Darum können die netten Medienkonzerne > auch ihre Watermarking-Abdrücke in dem Bereich ab ca. 8 kHz verstecken, > ohne das es wirklich den Höreindruck stört. Das hat damit nichts zu tun, die Maskierungseffekte erlauben es bei allen Frequenzen unhörbare Daten zu verstecken.
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.