Filter zum Glätten von Daten - Kritik erwünscht

Code-Stücke können hier veröffentlicht werden.
Antworten
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

habe gerade dieses Snippet online gestellt. Es handelt sich um einen Savitzky Golay-Filter.
Konstruktive Kritik (z.B. Welche Info fehlt? Fehler im Code? Code irgendwo zu umständlich?) wäre schön.

Gruß,
Christian
lunar

CM hat geschrieben:Hoi,

habe gerade dieses Snippet online gestellt. Es handelt sich um einen Savitzky Golay-Filter.
Kritik nicht ... Aber eine schwerwiegende Frage ;) : Was ist ein Savitzky Golay-Filter?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Na ja, eigentlich steht alles in "Numerical Recipies" (Link ist auf der Cookbook-Seite angegeben). Im Grunde genommen handelt es sich um eine Methode, die an die der "kleinsten Fehlerquadrate" anlehnt: Allerdings versucht man keine "Funktion" zurückzugeben, die eine solche Bedingung erfüllt, sondern es wird eine "einfachere", numerische Lösung angestrebt (Näheres siehe Link). Der Witz dabei ist, daß man einen Low-pass-Filter anlegt ohne in den Fourierraum zu wechseln.
Vorteil der Methode: Sehr flexibeler Filter, im Prinzip verlustfrei einzusetzen.
Nachteil: Ein "Blindflug", d. h. filtern mit einem Standardkernel für alle möglichen Datensätze, ist nicht zu empfehlen. Man muß schon jeweils etwas Hirnschmalz reinstecken und sich überlegen, was physikalisch sinnvoll ist.
Außerdem unterliegt dieser Filter zwar nicht dem sampling-Problem wie ein Fourier-Filter, aber andererseits sind zu wenige Datenpunkte genauso problematisch. (Mein Beispiel schließt wie bei simplen Fourier-Filter auch ein sog. "Zero-Padding" mit ein :oops: .)
Sinn und Zweck: (am Besten mal das Beispiel aus den Recipies anschauen) In der Regel geht es darum verlustfrei Kurven vom Rauschen zu befreien.

Also, ich habe mal versucht das in eigenen Worten einfach zusammenzufassen ohne den Text aus den Recipies zu wiederholen. Das Schöne an den Recipies ist sicher aber auch die mathematische Einführung in die jeweiligen Themen. Dennoch hoffe ich, daß meine Worte die Frage klären konnten?

Gruß,
Christian
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Christian!

Nur eine kleine Frage... Was kann man mit dem "Savitzky Golay-Filter" denn so filtern? Audio, Video oder doch etwas anderes?

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

Ok, ok, habe verstanden: Es muß doch noch mehr Info auf die Cookbook-Seite ;-). Vielleicht finde ich heute Mittag Zeit ein Beispielbild hochzuladen.

Also: Filtern kann man im Wesentlichen 1D-Datensätze (Amplitude vs. Zeit oder so) und so ist auch das Beispiel ausgelegt. Prinzipiell könnte man auch 2D- oder 3D- oder xD-Datensätze derart filtern (=glätten), aber wer sich das antun zu programmieren, muß schon einen guten Grund haben - mir fällt keine Applikation dafür ein. Für den 1D-Filter schon: Alleine das eine oder andere verrauschte Spektrum im Studium, wird dem einen oder anderen hier im Forum sicher schon untergekommen sein ...

Dieses PDF (auch schon auf der Cookbook-Seite verlinkt) enthält ebenfalls ein Beispiel.

Gruß,
Christian
lunar

CM hat geschrieben:Na ja, eigentlich steht alles in "Numerical Recipies" (Link ist auf der Cookbook-Seite angegeben). Im Grunde genommen handelt es sich um eine Methode, die an die der "kleinsten Fehlerquadrate" anlehnt: Allerdings versucht man keine "Funktion" zurückzugeben, die eine solche Bedingung erfüllt, sondern es wird eine "einfachere", numerische Lösung angestrebt (Näheres siehe Link). Der Witz dabei ist, daß man einen Low-pass-Filter anlegt ohne in den Fourierraum zu wechseln.
Vorteil der Methode: Sehr flexibeler Filter, im Prinzip verlustfrei einzusetzen.
Nachteil: Ein "Blindflug", d. h. filtern mit einem Standardkernel für alle möglichen Datensätze, ist nicht zu empfehlen. Man muß schon jeweils etwas Hirnschmalz reinstecken und sich überlegen, was physikalisch sinnvoll ist.
Außerdem unterliegt dieser Filter zwar nicht dem sampling-Problem wie ein Fourier-Filter, aber andererseits sind zu wenige Datenpunkte genauso problematisch. (Mein Beispiel schließt wie bei simplen Fourier-Filter auch ein sog. "Zero-Padding" mit ein :oops: .)
Sinn und Zweck: (am Besten mal das Beispiel aus den Recipies anschauen) In der Regel geht es darum verlustfrei Kurven vom Rauschen zu befreien.

Also, ich habe mal versucht das in eigenen Worten einfach zusammenzufassen ohne den Text aus den Recipies zu wiederholen. Das Schöne an den Recipies ist sicher aber auch die mathematische Einführung in die jeweiligen Themen. Dennoch hoffe ich, daß meine Worte die Frage klären konnten?
Tja, ich gestehe, ich habe nix verstanden *schäm* Meine mathematischen Kenntnisse beschränken sich auf Obverstufe Gymnasium (und sind auch da sehr unvollständig ;) ). Für mich könnte ein Fourier-Filter oder ein "Fehlerquadrat" auch ein Autoersatzteil sein ^^.
Ich ziehe mich deswegen mangels wissenschaftlicher Vorbildung aus diesem Thema zurück...

Viel Spaß noch...
lunar
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

so, habe mal ein - einfaches - Beispiel hochgeladen und die Seite etwas hübscher formatiert. Allerdings habe ich noch keine Zeit für weitere Erläuterungen auf der Seite gehabt.

Nochmals meine Bitte: Ist der Code "clean"? (Das kann man sicher auch beurteilen, wenn man die Mathematik dahinter nicht versteht (was sooo schwer gar nicht ist). Ich hätte das Alles auch kürzer (=kryptischer) schreiben können, aber ich wollte es übersichtlich haben und weiß nicht, ob ich trotz allem noch ein oder zwei Klöpse drin habe. Im Allgemeinen kommen dann Wochen später dumme Bemerkungen ...

@lunar:
lunar hat geschrieben: Tja, ich gestehe, ich habe nix verstanden *schäm*
Ist ja nicht schlimm, wenn Du da nicht tiefer einsteigen willst, aber zum "Schämen" gibt es auch keinen Grund: 1. Bin ich in Mathe selber kein Überflieger und 2. ist das für mich auch nur ein Werkzeug, daß ich nutzen muß. Die höheren Weihen der "reinen" Mathematik sind mir auf ewig verschlossen: Na und? (denke ich mir ;-))

Gruß,
Christian
lost_mind
User
Beiträge: 82
Registriert: Dienstag 13. Februar 2007, 11:55

@CM ich habe nicht das wissen aber möchte mich darin trotzdem vertiefen/weiterbilden hast du vieleicht ein paar links dafür *lieb schau* :?:
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Also, es gibt zwar das PDF der Originalpublikation mit Beispiel in Fortran, aber ansonsten finde ich den Link auf Numerical Recipies ausschlaggebend (s.o.). Das wär's. Hinzu kommen noch 1001 Dokument, das sich durch "Googlen" finden ließe, alle mit irgendwelchen Lücken oder ähnlichem Inhalt.

Aber laßt mal gut sein, ...

Gruß,
Christian
Antworten