|
|
FFT? Was steht eigentlich richtig dahinter? |
|
Scriptor |
Forum-Century
|
|
Beiträge: 217
|
|
|
|
Anmeldedatum: 22.02.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.12.2010, 15:37
Titel: FFT? Was steht eigentlich richtig dahinter?
|
|
|
|
|
Sehr geehrte Comunity. Ich habe im Signalverarbeitungsthread festgestellt, dass anscheinend viele nicht wissen, was hinter der FFT mathematisch/algorithmisch eigentlich steht. Es geht nicht um die Beschleunigung der DFT, sondern nur um die reine Mathematik.
Dadurch dass die Matlab FFT so simpel gehalten ist
(siehe hier klick),
kann sie etwas verwirrend sein.Warum dass so ist erkläre ich jetzt hier:
Angenommen wir haben eine zu messende Vorrichtung an einen Abtaster angeschlossen und erhalten ein Signal, das ausgehend vom Zeitpunkt null konstant abgetastet wird. Dieses Signal nennen wir y(t).
Dieses Signal y(t) hat folgende Eigenschaften. Es hat die Anzahl der Samples N und die Abtastdauer T. Die Samplefrequenz Fs erhalten wir durch
Fs = N/T;
Y(w) = sum_über_y f(t)*exp(-i*2*pi*f*t)
Ich beschreibe das immer als Matrix, da das anschaulicher ist.
Y=y*E
Y ist wieder unser Spektrum, y unsere Zeitfunktion und E die Matrix mit den Exponentiellen aus der Gleichung auch Fouriermatrix genannt.
Diese E wird folgendermaßen gebildet.
Man hat seine gegebenen Zeitachsenpunkte t und gewünschten Frequenzpunkte f.
Wenn man im Matlab diese nun mit t'*w multipliziert, hat man diese zu einer Matrix mit der Größe nt * nw. Schaut euch diese Daten schonmal an. Man kann sehr gut erkennen, wie diese Matrix aufgebaut ist. Oben links hat man die erste Frequenz mit dem ersten Zeitpunkt multipliziert, unten rechts die beiden letzten, links unten die erste Frequenz und letzten Zeitpunkt und so weiter.
Nun werden alle Matrixpunkte mit -i*2*pi multipliziert und als Exponent von e genommen.
Es entsteht folgender Zwischenausdruck
E = exp(-i*2*pi*t'*f)
Dieser Ausdruck wird nun einfach nach dem
Falkschen Schema
mit y*E multipliziert zu Y. Nun spielen wir einfach mal mit t und f rum.
Angenommen man multipliziert t mit 2. Dann muss f halbiert werden um ztum gleichen Ergebnis zu kommen. Wie macht das nun die FFT in Matlab?
Die FFT geht von einigen Voraussetzungen aus.
Es geht davon aus...
- dass t immer von 0 aus losgeht!!
- dass t und f Ganzzahlige sind!!
- dass die Anzahl von t und w immer! gleich sind!!
- dass t wird noch einmal durch die Gesamtzahl geteilt wird (siehe Gleichung auf FFTW. n ist die Anzahl der Samples und k die Frequenz)
Nun stellen wir mal die FFT Fouriermatrix mit der normalen gegenüber, aber nur die exponenten.
-i*2*pi*k*j/n und -i*2*pi*f'*t
Was fällt auf?
- k entspricht w (eigentlich auch k', ist aber keine Matrizenschreibweise).
- t entspricht j/n
- j ist die Laufvariable von 0 bis n-1 oder n, also etwas zwischen 0 und eins. Das Fenster was die FFT betrachtet geht also von 0 auf 1.
und k ist auch eine Matrix von 0 : n-1.
Zurück zu unser anfangs besprochenen Aufnahmereihe. Sie beinhaltet beispielsweise Datenpunkte bei t = 0 :0.2: 10.2. Deren Anzahl also 52. Wir wissen auch dass die FFT nach oben beschriebenen Vorschriften handelt.
setzen wir also gleich
(j/n)'*k = t'*f
((0:51)/52)'*(0:51) = (0:0.2:10.2)'*f
Uns fehlt also f. Bei der FFT können wir f nicht ganz festlegen wie gesagt. Es errechnet sich einfach. Ich ziehe mal dieGleichungen auseinander.
((0:51)/52)'*(0:51) = (0:51)'/5*f
gekürzt ergibt das
(0:51)/52 = f/5
f = 5/52(0:51)
f geht also von rund 0:1/10.2:5
ICh hoffe die Zusammenhänge klar und deutlich rübergebracht zu haben.
Falls nicht stoßt mich an oder korrigiert mich gegebenenfalls.
Mfg Ich!
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|