FFT < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 09:16 Do 06.01.2011 | Autor: | Curly |
Hallo zusammen,
ich mache mit einem Array aus N abgetasteten Datenwerten eine FFT (N Durchläufe, bei denen ich jeweils alle Datenwerte aufsummiere, gewichtet mit der jeweiligen e-Funktion). Anschließend habe ich ein Array mit komplexen Datenwerten. Ich frage mich un, wie ich auf die zu den Frequenzen komme, die zu den einzelnen Elementen gehören?
Grüße und Danke.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:28 Do 06.01.2011 | Autor: | Infinit |
Hallo Curly,
Die FFT arbeitet mit Datensätzen. Welchen physikalischen Ursprung diese haben, kann man den Zahlen nicht mehr ansehen. Falls es sich um die Abtastung eines Zeitsignals handelt, so gelten die folgenden Zusammenhänge, wobei die Anzahl der Abtastpunkte im Zeit- und im Frequenzbereich gleich sind. Bezeichne ich mit [mm] T_{ges} [/mm] die Gesamtzeitdauer, mit [mm] F_{ges} [/mm] den Frequenzbereich, mit [mm] \Delta t [/mm] den Abtastabstand im Zeitbereich und mit [mm] \Delta f [/mm] den Abtastabstand im Frequenzbereich, so gilt
[mm] T_{ges} = N \Delta t [/mm]
[mm] F_{ges} = N \Delta f [/mm]
und
[mm] F_{ges} = \bruch{1}{\Delta t} [/mm] und
[mm] T_{ges} = \bruch{1}{\Delta f} [/mm]
Wenn Du also die Anzahl der Abtastpunkte kennst und einen Abtastabstand, so kannst Du die anderen Größen daraus bestimmen.
Viele Grüße,
Infinit
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:13 Do 06.01.2011 | Autor: | Curly |
Okay, danke erstmal. Ja, es handelt sich zB um einen abgetasteten Sinus (als einfachsten Fall).
Wie kann ich nun aber die Frequenz herausfinden, die zu dem Ersten Element des Arrays gehört?
Und wechselt nach dem (N/2)-ten Element die Frequenz zu negativen Werten (insgesamt also symmetrisch um den Ursprung bei F=0)?
|
|
|
|
|
Hallo!
Was du mit den negativen Werten meinst, weiß ich nicht so recht.
Fakt ist erstmal folgendes:
Die FFT berechnet die Anteile von SIN-förmigen Funktionen verschiedener Frequenz in deinem Datensatz. Du bekommst dabei nicht nur eine Amplitude, sondern auch eine Phaseninformation.
Oft wird eine Fourier-Reihe als [mm] $\sum_n a_n*\sin(n\frac{2\pi}{T}*t)+b_n*\cos(n\frac{2\pi}{T}*t) [/mm] $ dargestellt, die Phase wird durch eine Mischung von SIN und COS erzeugt, und aus den [mm] a_n [/mm] und [mm] b_n [/mm] läßt sich sowas wie eine Amplitude angeben (-> Additionstheoreme)
Möglich wäre auch [mm] $\sum_n a_n*\sin(n\frac{2\pi}{T}*t+\phi_n)$ [/mm] , dann bekommt man direkt Phasen und Amplituden.
Meist gibt es einen komplexen Ansatz
[mm] $\sum_n a_n*\exp(i*n\frac{2\pi}{T}*t)=\sum_n a_n*\left(i\sin(n\frac{2\pi}{T}*t)+\cos(n\frac{2\pi}{T}*t)\right) [/mm] $ mit [mm] a_n\in\IC
[/mm]
Da hier [mm] a_n\in\IC [/mm] ist, ergibt sich eben so eine Mischung wie im ersten Fall. Real- und Imaginärteil von [mm] a_n [/mm] können dann auch negativ sein, das hat alleine mit der Phase zu tun, aber die Amplitude mußt du auch erstmal aus [mm] a_n [/mm] berechnen.
Zu den Frequenzen: Der erste Wert ist der Fourier-Koeffizient für die Frequenz 0, er steht also für den Offset. Der zweite Wert beschreibt eine SIN-Funktion, die von der Wellenlänge her genau in deinen Datensatz rein paßt, der dritte Wert eine SIN-Funktion mit halber Wellenlänge, ...
Es sollte klar sein, daß deine Datenpunkte irgendwann zu grob sind, um noch höhere Frequenzen / kleinere wellenlängen darzustellen, daher bekommst du genau so viele FFT-Koeffizienten, wie du auch Datenpunkte hast.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 08:35 Fr 07.01.2011 | Autor: | Curly |
Genau, und wieviele der N FFT-Koeffizienten gehören zu positiven Frequenzen?
Und wenn der erste Datensatz den Offset darstellt, wie finde ich dann heraus, zu welcher Frequenz der zweite Datensatz gehört?
|
|
|
|
|
Hallo!
ich frag mal so: Was verstehst du denn unter "positiven Frequenzen"? Negative Frequenzen gibt es nicht, höchstens 0 für den Offset.
Ansonsten schert sich eine FFT normalerweise nicht um die Zeitachse.
Schau dir mal das Bild an:
[Dateianhang nicht öffentlich]
Oben siehst du einen Datensatz geplottet, mit 80 Punkten. Jetzt denk dir die x-Achse einfach mal weg.
- es gibt keinen Offset.
- In die Daten paßt die Sinus-Funktion exakt drei mal rein.
Unten siehst du die FFT. (Da stimmt nebenbei die Beschriftung der x-Achse nicht.) Die FFT hat eigentlich auch 80 Punkte (koeffizienten), ich habe aber hineingezoomt, damit man diesen Peak besser sieht. Du siehst, daß alle Werte =0 sind, bis auf den für x=3. Und das besagt exakt, daß in die Daten im oberen Plot genau drei Wellenzüge hinein passen, daß deine Daten also eine Sin-Funktion der "Frequenz 3" beschreiben.
Nun bist du selbst dafür verantwortlich, das in eine reale Frequenz oder so umzurechnen. Wenn die Daten innerhalb von 1ms aufgezeichnet wurden, dann wird die wahre Frequenz 3kHz sein.
Die Daten könnten auch aus der Qualitätssicherung der Wellpappe-Produktion stammen, also räumliche Wellen beschreiben. Da macht der Begriff Frequenz keinen Sinn, hier würde man von Wellenlängen oder Wellenzahlen sprechen.
Allerdings muß ich dazu sagen, daß ich auch schon FFT-Implementationen gesehen habe, die doch auf die x-Achse gucken, und dir zu den FFT-Koeffizienten auch gleich Frequenzwerte liefern. Aber letztendlich ist das nur Kosmetik, und hat wenig mit der FFT selbst zu tun.
Dateianhänge: Anhang Nr. 1 (Typ: png) [nicht öffentlich]
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:35 Fr 07.01.2011 | Autor: | felixf |
Moin!
> [Dateianhang nicht öffentlich]
> [...]
> Du siehst, daß alle Werte =0 sind, bis auf den für x=3.
Naja, der Theoretiker wuerde sagen, dass da ein paar mehr Werte [mm] $\neq [/mm] 0$ sind, die meisten aber vernachlaessigbar klein, bis halt auf den fuer $x = 3$ Das liegt wohl an einem Haufen Rundungsfehlern (sowohl bei der Erstellung der Eingabe sowie bei der FFT selber). Das ist allerdings voellig normal, sollte also niemanden wundern.
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:44 Fr 07.01.2011 | Autor: | Infinit |
Wow, so ein schönes Bild hätte ich jetzt nicht auf die Schnelle beizaubern können, aber was Du dort siehst, entspricht genau meiner Beschreibung.
Vielen Dank an Felix für die visuelle Unterstützung.
Viele Grüße,
Infinit
|
|
|
|
|
Hallo Inifinit!
Naja, das Bild hatte ich noch irgendwo rum fliegen.
Prinzipiell ist das mit Labview erstellt worden, einer graphischen Programmiersprache, wo alle Funktionen inklusive den grafischen Sachen als Symbole vorliegen, und man nur noch "Datenleitungen" dazwischen legen muß. Der Aufwand für dieses Programm hier liegt bei 30 Sekunden.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:41 Fr 07.01.2011 | Autor: | Infinit |
Hallo curly,
EventHorizon hat Dir Antworten für eine Fourierreihendarstellung gegeben, die zwar mit der Fourier-Transformation verwandt ist, aber eben nicht dasselbe ist.
Bei der Abtastung eines reellwertigen Signals entsteht nach der FFT eine Spektraldarstellung, die auch negative Frequenzen umfasst. Wo sich jetzt Deine "Nullfrequenz" befindet, hängt von der Implementierung des FFT-Verfahrens ab. Du hast eine gerade Anzahl von Abtastwerten. Diese werden dann normalerweise in einem Array der Größe N mit den Feldindizes 0 bis N-1 abgespeichert. Der FFT-Wert zu Deiner Nullfrequenz befindet sich dann im Feld mit dem Index N/2. Probiere es doch zum Spaß mal mit einem Gleichsignal aus und schaue Dir an, welches Feld überhaupt einen Wert beinhaltet. Die übrigen Felder sollten Null sein bzw. extrem kleine Werte nur aufweisen, je nach Implementierungsgenauigkeit.
ZU Deiner Frage nach der Frequenz kann ich Dich nur wieder auf meinen ersten Beitrag verweisen, Du musst wenigstens den zeitlichen Abtastabstand kennen, um hier was explizites ausrechnen zu können.
Viele Grüße,
Infinit
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:17 Sa 08.01.2011 | Autor: | Curly |
Hallo und erstmal vielen Dank für die ausführlichen Hilfestellungen.
Angenommen, ich taste in T = 1ms N = 1024 Werte ab. Ist es dann richtig, dass meine untereste Frequenz, die ich auflösen kann f = 1/T ist, und die maximale Frequenz f = (N/2-1)/T beträgt? (Wobei diese in den ersten N/2 Array-Einträgen enthalten sind.)
Wie kommt dieser Zusammenhang zustande?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:24 Sa 08.01.2011 | Autor: | Infinit |
Hallo curly,
Deine Vermutung ist richtig, in meinem ersten Post stand es so auch schon drin. Das Ganze ist eine Folge des Shannonschen Abtasttheorems. Wenn Du ein Signal mit einer Dauer von 1ms abtastet, dann ist der Kehrwert die kleinste darstellbare Frequenz. Diesen Zusammenhang kennst Du übrigens auch aus der Schwingungsphysik.
Viele Grüße,
Infinit
|
|
|
|