Forum: Digitale Signalverarbeitung / DSP / Machine Learning Glättung/Interpolation ungleich verteiter Messwerte


von Kai G. (runtimeterror)


Lesenswert?

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.

von Jonas K. (jonas_k)


Lesenswert?

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

von Kai G. (runtimeterror)


Lesenswert?

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!

von Jonas K. (jonas_k)


Lesenswert?

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

von Detlef A (Gast)


Lesenswert?

>>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

von Kai G. (runtimeterror)


Lesenswert?

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 ...

von Fritz (Gast)


Lesenswert?

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".

von Kai G. (runtimeterror)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.