Alternative zur FFT, Freq. genau bestimmen

Dec 13, 2007 78 Replies

"Rafael Deliano" schrieb:

Ja, XOR (XNOR wg. +-1) ist auch eine Multiplikation, ja sogar "die Mutter aller Multiplikationen" :) also kein 'umgehen von Multiplikation'.

Der ganze Krom setzt übrigens strenge Stationarität voraus, wird auch immer gerne übersehen von den Herren Praktikern.

Ergebnis ist natürlich stark verzerrte Variante der ACF, die meisten Leute stört das aber nicht. Lässt sich ansonsten leicht rückrechnen, siehe Grundlagenbuch Statistik. Zu praktischen Auswirkungen dann 'van Vleck-Relation'. Ergebnis: Soll angeblich 'robust' gegenüber Verteilungsannahmen sein, Stationarität vorausgesetzt, drum u.a. auch sehr beliebt in parameterfreier Teststatistik u.s.w. ;)

Aber alles in allem wirklich ur-ur-ur-uralte Hüte! (Im vorletzten Jahrhundert entwickelt worden, die AKF oder neumodisch ACF. Tönnies? Kendall?)

Nicht die Sorte Controller die die Zeitschrift betreut.

Keep it simple. Es ist nichtnur eine Frage der Hardwarekosten: alles was zu Kompexität führt fördert Bugs.

MfG JRD

Matthias Weingart schrieb:

Michael hatte ja schon gesagt, dass man die transformierte Fenster- funktion an den Peak fitten müsste.

Eine simple Funktion, die man ausprobieren könnte: Afmax_m1,Afmax,Afmax_p1 = Amplituden bei den Frequenzen fmax-1,fmax, fmax+1

dl := Afmax - Afmax_m1; dr := Afmax - Afmax_p1; if dl>dr then begin g := dr / dl * 0.5 + 0.5; f := fmax*g + fmax_p1*(1-g); else if dr>0 then begin g := dl / dr * 0.5 + 0.5; f := fmax*g + fmax_m1*(1-g); end else;//Peak zu breit

Man könnte das Ganze auch mal mit berechneten Samples simulieren und dann verschiedene Fenster und Funktionen ausprobieren. Wenn das Signal verrauscht ist, sind mehr Samples für eine Schwerpunkterkennung natürlich besser.

Jens

Moin,

Michael Eggert schrub:

Und wenn eine kleine Oberwelle doch mal einen Nulldurchgang mehr erzeugt? Oder viele mehr?

Abgesehen davon war ja eh schon gesagt worden, dass das mit den Nulldurchgängen gar nicht so einfach ist, wegen wechselndem DC-Anteil.

CU Rollo

Moin!

Ein kleine Oberwelle ist kein Problem, ein adaptiver Schmitt-Trigger sollte ja leicht zu implementieren sein.

Gruß, Michael.

Moin!

Vorausgesetzt, die Frequenz ist über den Abtastzeitraum konstant genug...

Gruß, Michael.

Ich überlege gerade ob das stimmt oder nicht. Denn prinzipiell ist in einer DFT die ich nicht mit Nullsamples aufgefüllt habe auch alles an Information drinn. Ich bekomme mit Nullsamples am Ende ja eine feinere Frequenzauflösung weil das Signal von der DFT nicht mehr als so ganz periodisch (bzw. mit entsprechend längeren Periode) angesehen wird. Würde man mit unendlich vielen Nullsamples auffüllen kommt man ja zu der Zeitdiskrete Fouriertransformation. Wenn das mit der Interpolation stimmt müsste man ja über eine DFT mit Interpolation zu einer Zeitdiskrete Fouriertransformation kommen.

Viele Grüße, Martin L.

Moin,

Martin Laabs schrub:

Angenommen ich habe ein Signal, welche für alle sagen wir 100 Samples konstant =1 ist. Eine Touriertrafo davon sieht eindeutig aus: Nur Gleichanteil, alle Frequenzen gleich Null. Nun fülle ich die 100 Samples bis zum Sample 128 mit 0 auf. FFT geht ja davon aus, dass das Signal sich zyklisch schließt. Ich bekomme also die Fouriertransformierte eines Rechtecksignals, dass

100*1, dann 28*0 ist. Das hat satt Frequenzanteile in dem Frequenzbereich, der auch bei der Analyse der 100 Werte vorkommen würde.

Nein, das ist nicht das selbe.

Aber ich sähe kein Problem darin, in die 100 Samples 128 Stützstellen reinzuinterpolieren und mit denen dann weiterzurechnen. Also die 100 Werte also Polylinie ansehen und zwischen den Samples linear interpolieren. Der Fehler der dadurch entsteht, sollte im Bereich der grenze liegen, die sowieso nicht mehr genau erfasst werden kann. Natürlich kann man wohl auch noch besser interpolieren.

CU Rollo

Damit hab ich mich noch nicht beschäftigt, aber obiges hab ich grad mal ausprobiert:

- 1s in 16384 Abtastschritte zerlegt

Das gibt später eine Auflösung der FFT von 1 Hz!

- Sinus mit 123,456 Hz angelegt

- Gauss mit FWHM = 0,333s drübergelegt

Das gibt im Frequenzbereich einen Peak mit FWHM = 3 Hz!

- FFT

- Peak +-8 Werte ausgeschnitten:

116Hz 6,19365E-5 117Hz 6,52461E-5 118Hz 6,46904E-5 119Hz 2,04981E-4 120Hz 0,00309 121Hz 0,0327 122Hz 0,15339 123Hz 0,3268 124Hz 0,31566 125Hz 0,13814 126Hz 0,02751 127Hz 0,00239 128Hz 1,82678E-4 129Hz 7,58646E-5 130Hz 7,2227E-5 121Hz 6,64908E-5

- Gauss in nur diese Werte reingefittet: 123,45601 Hz.

Da sieht man, wieviel mehr Information über die Frequenz in den Werten um den Peak herum noch drinsteckt. Man braucht eben nur die passende Fensterfunktion mit schön kontinuierlicher FT...

Gruß, Michael.

Es kommt auf die Art der Fouriertransformation aus. Bei der DTF hat man tatsächlich nur einen Gleichanteil weil das Signal ja periodisch fortgesetzt wird.

Wenn ich eine Zeitdiskrete Fouriertransformation auf dieses Signal ansetze brauche ich noch ein paar mehr Informationen zu dem Signal. Entweder ist es tatsächlich ein periodisches Signal - dann stimmt das Ergebnis mit der DFT überein - oder es ist eben ein Rechteck- impuls und nicht periodisch fortgesetzt. Dann werde ich das Spektrum welches ich durch die Zeitdiskrete Fouriertransformation erhalte durch eine DFT die ich an den Rändern mit Nullsamples auffülle aproximieren.

Ich ging bei meinem letzen Posting vom letzen Fall aus weil das Signal vom OP zwar ein bisschen periodisch ist - es aber keine wirklich

100%ig Periodizität gibt. Denn sonst müsste er sich den Aufwand nicht machen und hätte auch nicht das Problem mit den "krummen" Frequenzen der DFT - die gäbe es dann ja per Definition gar nicht.

Viele Grüße, Martin L.

Martin Laabs schrieb:

Ihr habt gewissermaßen beide recht:

Wenn man z.B. ein Signal, das aus 128 zusammenhängenden Einsen besteht einer 128 Punkte-DFT unterzieht, erhält man eine Transformierte, die aus einer Eins (oder was auch immer, hängt vom Normierungsfaktor ab) und 127 Nullen besteht. Wenn man die anschauliche Betrachtung verwendet, daß durch periodische Fortsetzung ein reines Gleichsignal entsteht, dann ist das ja auch durchaus logisch. Das Ergebnis der DFT widerspricht aber _nicht_ dem Ansatz mit der Fouriertransformierten! Verzichtet man auf die DFT und nimmt die "normale" FT des Signals aus

128 Einsen mit jeweils unendlich vielen Nullen links und rechts davon, so gelangt man zu einem (kontinuierlichen) Spektrum, das eine Dirichlet-Funktion darstellt (die anschaulich daraus entsteht, daß das Spektrum eines zeitkontinuierlichen Rechtecks, die si-Funktion, durch unendlich viele Images bei ganzzahligen Vielfachen der Abtastfrequenz erweitert). _Das_ ist das korrekte Spektrum, mit Nulldurchgängen an Vielfachen von f_Abtast/(Länge Rechteck in Samples). Doch wie kommt man jetzt zu dieser schönen DFT mit der einzelnen Linie im ersten Beispiel? Ist eigentlich ganz einfach: Unser (abgetastetes) Rechtecksignal wird nach 128 Samples abgeschnitten und wiederholt. Das müssen nicht unbedingt die 128-Einsersamples sein, aber vorerst gehen wir mal davon aus. Wir stellen uns die Frage: Was passiert mit dem (zeitkontinuierlichen) Spektrum bei dieser Operation? Abschneiden nach N_DFT=128 Samples und periodische Fortsetzung entspricht einer Abtastung des Spektrums in einem Raster von f_Abtast/N_DFT. Ok, tasten wir also unser Spektrum ab. Wir sagten oben ja, das Spektrum hat Nulldurchgänge im Abstand f_Abtast/(Länge Rechteck in Samples). Hmm, wenn N_DFT=(Länge Rechteck in Samples), dann könnte es ja passieren, daß wir genau in den Nulldurchgängen abtasten... Und genau das passiert, wenn wir in unserem Fenster exakt die 128 Einsen erwischen. Erwischen wir sie nicht ganz, liegen wir mit der Abtastung des Spektrums ein klein wenig daben und stellen eine vollkommen andere DFT fest. Setzen wir N_DFT=i*(Länge Rechteck in Samples), machen also Zeropadding, dann liegt nur jeder i-te Abtastwert in den Nulldurchgängen, und unser (diskretes) Spektrum zeigt deutliche Symptome des Leckeffektes... Lassen wir i gegen unendlich gehen, gelangen wir (wie von Martin erwähnt) zur Fouriertransformation des zeitdiskreten Signals.

Digitale Signalverarbeitung ist soetwas schönes... Leider wissen das nur die wenigsten meiner Studenten zu schätzen. :-)

Gruß Henning

henning paul home: http://home.arcor.de/henning.paul PM: henningpaul@gmx.de , ICQ: 111044613

Hallo Roland,

Roland Damm schrieb:

hier steckt IMHO ein Fehler, wenn Du keine Fensterfunktion benutzt über den _ursprünglichen_ Zeitbereich, so bekommst Du den Leakage-Effekt, auch bei DC. Außerdem mußt Du DC immer gesondert behandeln, der Wert muß _immer_ nachträglich korrigiert werden.

Du füllst also nur den Teil mit 0 auf, der sowieso weggefenstert wird, damit hast Du eine Interpolation im Frequenzbereich. Ob dadurch das Quantisierungsrauschen ansteigt, bin ich jetzt nicht sicher, das könnte sich mit der höheren Auflösung auch wieder aufheben. Bei FFT ohne Fensterung zu arbeiten ist sowieso nicht sinnvoll, ich habe gerne das Kaiser-Bessel-Fenster genommen, das läßt sich anpassen an den jeweiligen Bedarf, ist nur etwas aufwendig zu berechnen, könnte man sich aber auch als Tabelle abspeichern. So habe ich das schon gemacht und keine Probleme gesehen.

Du kannst zwar auch zum Interpolieren 0en zwischen die Samples einfügen, aber das ist nicht dasselbe und Du bekommst die Grenze zum nächsten 2**n nicht sauber aufgefüllt. So wäre ich jetzt eher bei einem Interpolationsfilter beim Erhöhen der Abtastrate vorgegangen.

mfg. Winfried

[...]

Was mir noch zum Topic eingefallen ist, die Datei würde ich nach der Methode erstmal durch eine FFT jagen und nachsehen, wie das Spektrum an der interessanten Stelle überhaupt aussieht, das sollte ja kein Problem sein. Als Fensterfunktion würde ich der Einfachheit halber und bei der hohen Auflösung Hanning vorschlagen, das müßte reichen.

Wenn die Funktion frequenzmoduliert ist, so wird sich keine eindeutige Linie ausmachen lassen, sondern eher ein rauschartiges Gemisch (Besselspektrum), das würde ich einfach mal nachsehen. Dazu würde mir einfallen, die Peaks um diesen Bereich herum abzutasten (wieder mit Hysterese) und mit Curvefitting eine Ausgleichskurve durchzuziehen. Ob das besser ist als der Vorschlag mit der Nulldurchgangsmessung, kann ich nicht sagen, einfach mal ausprobieren.

mfg. Winfried

Michael Eggert :

Gauss? (Meinst du die Gaussche Glockenkurve? Das ist doch eigentlich Statistik...)

M.

Moin!

Ja.

Vor allem ist es die Eigenfunktion der Fouriertransformation, das heißt ihre Form bleibt in der FT erhalten. FT( Gauss mit Breite W_T ) = Gauss mit Breite W_f mit W_f = 2 / (pi * W_T)

Das prädestiniert sie für solche Spielchen.

Theoretisch funktioniert natürlich auch jede andere Fensterfunktion, deren FT stetig ist und möglichst nur ein (lokales) Maximum besitzt.

Lässt man die Fensterfunktion weg, also Fenster = Rechteck, so führt dieser Rechteck in der FT zu einem Lattenzaun mit Peak-Abstand

1/Messdauer, aber da das gleichzeitig die Auflösung der FFT ist, sieht man keinen Lattenzaun, sondern nur Ausläufer am Fuße des Maximums. Ein Fit dürfte da schwerfallen...

Gruß, Michael.

Moin,

Henning Paul schrub:

Wenn du denen das genauso erklärst wie hier, dann kann ich sie (die meisten) verstehen:-).

Also was muss man nun tun, wenn man nur 100 Samples hat und damit eine FFT machen will, die jedoch 128 Samples braucht?

CU Rollo

Nun, an einer Uni wird eben mehr Wert auf die Vermittlung von "Warum funktioniert das hier eigentlich?" als auf "In der Praxis macht man das so und gut ist." gelegt.

Fenstern (Hamming, Blackman o.ä.) und padden. Damit tauscht man den si gegen etwas ein, was an den Rändern gutmütiger ist, soll heißen, die "falschen" Spektrallinien z.B. bei der Transformation eines reinen Gleichsignals sind deutlich kleiner. Such mal nach "Leck-Effekt" oder engl. "leakage".

Gruß Henning

Besten Dank für alle Tipps. Hab da nun ziemlich viel auszuprobieren. :-)

Matthias

Henning Paul schrieb:

Ein Trick ist ja, den linearen Trend zu subtrahieren; also eine Gerade vom ersten zum letzten Punkt abziehen.

mfg Rolf Bombach

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required