PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FFT und der Drehfaktor



Charly_cs
07.03.2008, 11:20
Hallo!

Ich beschäftige mich zur Zeit mit der DFT und FFT und habe auch schon beide Algorithmen in LabView geschrieben. Meine DFT gibt mir immer das richtige Ergebnis zurück, nur die FFT nicht.
Folgendes Problem:
Ich habe ein Signal mit 512Hz, sample das mit 2048Hz und nehme 1024 Werte auf. Hier funktionieren beide Algorithmen. Immer wenn das Eingangssignal ein Ergebnis aus 2^x ist, zeigt es meine FFT richtig an. Ist das nicht der Fall, kommen viele andere Linien im Spektrum dazu. Meine Vermutung ist nun, das es an der Unstetigkeitsstelle liegt und hierdurch Frequenzen errechnet werden, die nicht vorhanden sind. Eine Lösung wäre hier ein Fenster(z.B. Hanning) einzubauen?
Im DFT-Algorithmus habe ich kein Fenster und alles wird richtig angezeigt.

Als zweites kommt mir der Drehfaktor als Fehlerquelle in den Sinn. Bin mir aber sicher, diesen an den richtigen Stellen einzusetzen.
Beispiel einer 16 Punkte FFT:
16 Punkte --> 4 Butterfly Operationen (Stufen)
-->Benötigt werden 16/2 = 8 Drehfaktoren k = (0,1,2,3,4,5,6,7)
mit Drehfaktor = w^k
(Drehfaktoren berechne ich mir aus dem Einheitskreis)
Einsetzen der Drehfaktoren (Ziffer ist das k) in Butterflystufe:

1.Stufe: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2.Stufe: 0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2
3.Stufe: 0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3
4.Stufe: 0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7

Steckt da irgendwo ein Fehler oder fehlt es bei mir am Verständniss der FFT? Eigentlich muss ja die FFT und DFT exakt das selbe Ergebnis liefern, egal welche Frequenzen als Eingang kommen...

Grüße
Charly

Herkulase
07.03.2008, 15:49
Hallöle,

ich hab mich letztens auch mal ein bisschen mit FFT beschäftigt, allerdings nicht so tiefgründig wie Du :oops:

Ich hab ein kleines progrämmle in Java geschrieben, was audiodateien analysieren kann, und zwar einmal mit einem Hanning Window , und einmal mit einem Rechteck (also quasi ohne Fensterfunktion). Wenn ich keine Windowfunction nehme, sind, wie bei Dir sehr viele zusätzliche Frequenzen drin. Die kommen, denke ich, von dem übelagerten Rechteckssignal, das ebenfalls in seine Frequenzkomponenten zerlegt wird.

Versuch einfach mal eine Kurve über dein Fenster zu legen, dann sollte es klappen. Ich hab einfach eine Normalverteilungskurve genommen, weiss aber nicht ob das jetzt richtig ist, jedenfalls sieht das Spektrum jetzt viel besser aus.

Gerald

Charly_cs
07.03.2008, 16:04
Hallo!

Danke für die Antwort! Hab mittlerweile ein Hanning Fenster versucht. Sieht schon etwas besser aus, allerdings immer noch nicht so wie ich es mir vorgestellt habe...
Kann mir das vielleicht jemand erklären:
In meinem Fall simuliere ich mir einen einfachen Sinus mit beliebiger Frequenz. Ergebnis ist ein Linienspektrum mit vielen Linien außer ich lege einen Sinus der Frequenz 2^x an. Für die spezielle Frequenz aus 2^x bekomme ich genau eine Linie --> So sollte es ja auch für beliebige Frequenzen sein :-k
Was kann da bei mir falsch sein?
Wie ich in meinem Algorithmus den Drehfaktor nutze habe ich oben beschrieben. Liegt da der Fehler?

Gruß
Charly

mare_crisium
12.03.2008, 22:02
Charly_cs,

ich würde Dir auch zu einer Window-Funktion raten. Die Erklärung für die Nebenlinien und ihre Frequenzabhänigigkeit geht so:

Die zeitabhängige Funktion, die Du der FFT vorsetzt, hat auf der Zetiachse einen Anfangs- und einen Endzeitpunkt. Ausserhalb dieses Bereiches ist sie gleich Null.

Diese Beschränkung auf ein endliches Intervall kann man auch als Multiplikation einer unendlichen Sinusfunktion (die mit der FT eine scharfe Linie ergäbe) mit einer Rechteckfunktion (die das bekannte sin^2x/x^2-Spektrum liefert, die sog. Spaltfunktion) auffassen. Folglich liefert die Fouriertransformation die Faltung der Fouriertransformierten des Sinus mit der der Rechteckfunktion.

Der Effekt ist umso drastischer, je grösser der Sprung ist, den der Sinus an beiden Enden des Definitionsintervalls macht. Geht er an beiden Enden auf Null, dann siehst Du fast keine Nebenlinien. Je stärker er an den Enden von Null verschieden ist, desto stärker werden die Nebenlinien.

Diesen Effekt kann man abschwächen, indem man den Sinus mit etwas multipliziert, das ihn am linken und rechten Ende des Intervalls sanft auf Null drückt, z.B. mit einer invertierten Parabel oder einer Gaussfunktion. Das verbreitert dann zwar die Spektrallinie, unterdrückt aber die Nebenlinien. Andere Methoden verwenden z.B. gerade oder ungerade periodische Forsetzung, aber es stellt sich die Frage, ob dadurch die Originalfunkton nicht zu stark verfälscht wird.

Is'n bisschen kompliziert; ich hoffe Du kannst's verstehen...

mare_crisium

Charly_cs
12.03.2008, 22:11
Hallo!

Danke für die Erklärung! Habs schon hinbekommen. Lag am Drehfaktor und mit der Fensterfunktion schaut das Signal super aus!

Grüße
Charly