www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP FFT-Grundlegendes Verständnis


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Michael Mokricky (skyscater)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Freddy (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Michael Mokricky (skyscater)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Freddy (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ja jetzt versteh ich deine Frage auch erst, sorry.

Dann stimmt das mit den 200ms.

Autor: Michael Mokricky (skyscater)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Sven H. (dsb_sven)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Udo Schmitt (urschmitt)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Robert Kuhn (Firma: Medizintechnik) (robident)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Martin Schmidlechner (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Unwissender (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net