Hi zusammen, ich hoffe meine Frage passt in dieses Forum: Wie kann ich einen Tiefpassfilter für ungleich verteilte Messwerte realisieren? Wenn ich äquidistante Messwerte habe kann ich das einfach z.B. mit einem Gausschen Weichzeichner, mit einem gleitenden Mittel oder mit einem von vielen anderen Standardverfahren erledigen. Wenn die Werte ungleich verteilt sind funktioniert das aber nicht mehr so einfach und ich wollte wissen, ob es auch da eine Art Standardverfahren gibt. Als Beispiel: Man nimmt folgende äquidistante Wertereihe: 1, 2, 3, 4, 5, 6, 7, 8, 9, ... Fast jeder Weichzeichnungsfilter würde diese Reihe auf sich selbst abbilden. Folgende ungleich verteilte Messreihe: 1, 2, 3, _, _, _, 7, _, _, _, 11, _, _, _, 15, ... würde den dichter besetzten Stellen (1, 2, 3) mehr Gewicht verleihen als den dünner besetzten. Dennoch stellt diese Messreihe weiterhin einen linearen Anstieg dar und lässt in meinen Augen keine andere Interpretation zu. (Alles selbstverständlich unter der Annahme, dass die Abtastfrequenz deutlich höher ist als die zugrundeliegende Information). Wie kann man einen Weichzeichner/Tiefpass implementieren, der beispielsweise diese Messreihe korrekt auf sich selbst abbildet (und indirekt damit auch die Lücken füllen kann)? Ich vermute, dass ich die Werte anhand ihrer Dichte gewichten muss - so habe ich es testweise implementiert und recht vielversprechende Ergebnisse bekommen. Aber ich würde es gerne nochmal mit etwas weniger Bauchgefühl implementieren. Ich hoffe, die Infos reichen, sonst bessere ich gerne nach. Danke und Gruß, Kai ps: in meinem konkreten Fall handelt es sich bei den Messwerten um Bewegungsvektoren, die an zufälligen Position eines zweidimensionalen Feldes erfasst wurden.
Willst du das genze denn in Echtzeit oder im Nachhinein realisieren? Falls im Nachhinein, würde ich ein Polynom fitten (kleinste Quadrate) dafür gibt es auch FIR-Filter, wie es da mit ungleichen Abtastabständen ausschaut, weiß ich allerdings nicht
Es gibt keine Echtzeitanforderung; das passiert alles im Nachhinein. Das Polynom-Fitting hatte ich mal versucht (mittels simulierter Abkühlung), bin aber seinerzeit auf keinen grünen Zweig gekommen (die Werte waren sehr verrauscht). Ich denke, ich versuche das nochmal damit. Wie sähe denn ein zweitgradiger Polynom korrekterweise in 2D aus?
1 | f(x, y) = a*x² + b*xy + c*y² + d*x + e*y + f |
oder eher
1 | f(x, y) = a*x² + c*y² + d*x + e*y + f |
Vielleicht hatte ich das seinerzeit falsch. Ich hatte die erste Variante im Einsatz - allerdings viertgradig mit 16 Koeffizienten. Wie man ungleiche Abstände mit FIR-Filtern in Einklang bringt habe ich noch nicht rausgefunden :/ Danke soweit!
Kai Giebeler schrieb: > Wie sähe denn ein zweitgradiger Polynom korrekterweise in 2D aus? > f(x, y) = a*x² + b*xy + c*y² + d*x + e*y + f eher so, mit Mischtermen... FIR-Filter könnte ich mir vorstellen, indem man jeden neuen Wert gewichtet nach der Zeit, bis er gekommen ist (also adaptiver filter). im Bsp also Kai Giebeler schrieb: > Folgende ungleich verteilte Messreihe: > 1, 2, 3, _, _, _, 7, _, _, _, 11, _, _, _, 15, ... 1,2,3 mit mal 1, 7*4, 11*4, 15*4 oder so ähnlich
>>Wie man ungleiche Abstände mit FIR-Filtern in Einklang bringt habe ich noch nicht rausgefunden :/ Das ist nen weites Feld, da gibts noch viel zu entdecken. http://en.wikipedia.org/wiki/Nonuniform_sampling Cheers Detlef
Oh super, danke! Über diesen Artikel bin ich bislang nicht gestolpert - da sind ja auch diverse Beispiele bei. Ich schau mal, ob sich davon was mit meinen Vorkenntnissen vereinbaren lässt :) Bei den Polynomen war übrigens die erste Fassung korrekt. Die 1D-Variante habe ich jetzt auch auf beliebigen Grad verallgemeinert bekommen. Für die 2D-Version muss ich noch was recherchieren und schrauben. Zur Not wieder eine Näherung ...
Kai Giebeler schrieb: > Folgende ungleich verteilte Messreihe: > 1, 2, 3, _, _, _, 7, _, _, _, 11, _, _, _, 15, ... Wenn deine , in äquidistanten Abständen sind, könntest du auch probieren, die _ mit 0 zu ersetzen und einen steilen FIR-Tiefpassfilter verwenden. Das macht man so ähnlich bei Interpolationsfiltern. Siehe auch Stichwort "Samplerate Conversion".
Die Abstände der Einzeleinträge sind leider nicht gleich - das ging aus meinem Beispiel nicht hervor. Aber vielleicht kann man das Originalproblem rastern und dann das von dir beschriebene Verfahren anwenden. Das könnte für eine gute Näherung reichen. Edit: Kurz drüber nachgedacht: Das Verfahren aus der Samplerate-Conversion funktioniert auch nur solange die Dichte konstant ist.
Wenn die Abtastrate klein genug ist, kann man das System einfach überabstasten und die Zeitpunkte mit der Abtastrate sampeln, die Werte auffüllen und mittels eines Hogenauerfilters (oder einem vereinfachten Abklatsch desselben) filtern und dezimieren. Man benötigt dann ein upsample- und eine downsample-Komponente. Als Verbesserung kann man die gesampelten Werte ebenfalls diskret interpolieren. Im allgemeinen Fall benötigt man eine Interpolation über eine genügend grosse Zahl von Messwerten mit einem Filtern, das die Oberwellen im Signal in Form einer Bandbegrenzung berücksichtigt und dann jeweils für den Bereich zwischen 2 Punkten gilt und entsprechend aktualisiert wird. Wenn man die so bestimmten Partialgleichungen mit den Zeitpunkten, für die sie gilt, in eine andere domain übergibt, funktioniert das dann auch über Taktdomaingrenzen hinweg. Eine andere Methode mehr für Software: Wenn sich die Werte sehr langsam ändern, kann man mit Geradenschnittpunkten arbeiten, um Zwischenwerte zu generieren, was sich dann rekursiv formulieren lässt, um weitere Punkte zu detaillieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.