# Spline berechnen



## neibeck (23 April 2007)

Hallo!

Folgendes Problem: Auf einer Maschine speichern wir kontinuierlich Positionsmesswerte(x und y). Diese werden in einem Datenbaustein gespeichert.
Jedoch haben wir Schwankungen in den Messwerten und somit ergibt sich gesamt keine saubere Strecke.
Nun möchte ich einen Spline berechnen lassen, eine Art Interpolation oder so ähnlich sodass sich eine schöne runde Strecke ergibt mit keinen Ecken und Kanten und dann die einzelnen neu errechneten Positionswerte wieder in einen Datenbaustein speichern.
Hat jemand eine Idee wie ich dies realisieren könnte?

mit freundlichen Grüßen

neibeck


----------



## Zottel (23 April 2007)

neibeck schrieb:


> Hallo!
> Nun möchte ich einen Spline berechnen lassen, eine Art Interpolation oder so ähnlich sodass sich eine schöne runde Strecke ergibt mit keinen Ecken und Kanten und dann die einzelnen neu errechneten Positionswerte wieder in einen Datenbaustein speichern.
> Hat jemand eine Idee wie ich dies realisieren könnte?


Wo ist das Problem? Die Mathematik oder die Umstzung in ein SPS-Programm?


----------



## neibeck (23 April 2007)

naja... vorerst mal die mathematik...

hab gerade mal gegoogelt, blicke aber hier nicht so richtig durch...

welche berechnung soll ich nehmen.. da gibt es b-splines, bezier, usw...

Ich hätt mir b-spline und bezier mal genauer angeschaut, das ganze scheint mir aber doch recht kompliziert zu sein...

mfg


----------



## trinitaucher (23 April 2007)

neibeck schrieb:


> Jedoch haben wir Schwankungen in den Messwerten und somit ergibt sich gesamt keine saubere Strecke.


Du solltest erstmal abklären, ob dir ne Spline-Interpolation überhaupt was bringt. Wenn die Abweichungen tatsächliche Messfehler, bzw. Ungenauigkeiten sind, verfälschen die das Endergebnis und somit hättest du eine nicht der Realität entsprechende Kurve brechnet. Deswegen dies erstmal verbessern.
Wenn die "Fehler" durch die Abtastfrequenz bedingt sind, dann nimm dir ne Mathematik-Formelsammlung zur Hand und hack die Spline-Interpolation in die Steuerung


----------



## neibeck (23 April 2007)

tja, die messfehler kriegen wir leider nicht mehr besser hin...

eine interpolation verfälscht die Messung zwar ein wenig, es ist aber für unsere anwendung immerhin noch besser als die Sprünge...

tja das mit der Spline-Interpolation durchblick ich nicht so ganz...
Ich werde morgn mal meinen Mathematik-Lehrer fragen, vl kann der mir besser weiterhelfen... falls noch weitere Fragen auftauchen melde ich mich wieder...

Ich hatte nur gehofft dass vl hier schon mal jemand sowas gemacht hat und mir vl mit einer Art Vorlage weiterhelfen könnte..


----------



## argv_user (23 April 2007)

*Interpolation hier ungeeignet.*

Zur Berechnung der Spline-Funktion dienen die vorhandenen
Wertepaare. Also zb. (Zeitstempel, Messwert).

Dabei liegen diese "Stützstellen" immer auf
dem Spline. D.h. sind zb (x0,y0), (x1,y1), (x2,y2) die Stützstellen,
so liefert der Algorithmus für x0 den Wert y0 usw.

Du wirst also viel rechen, hast aber, wenn dich nur die Werte zu 
den vorhandenen Zeitpunkten interessieren, am Ende lediglich 
eine Zuweisung, eventuell mit zusätzlichen Rundungsfehlern.

Interessant sind Interpolationen (wie der Name schon sagt), wenn
Zwischenwerte vorhergesagt werden sollen.


----------



## Zottel (23 April 2007)

neibeck schrieb:


> tja das mit der Spline-Interpolation durchblick ich nicht so ganz...


Gesucht: Ein Stück Kurve zwischen zwei Punkten (x1,y1) und (x2,y2). Die Kurve soll durch ein Polynom beschreibbar sein, also z.B. ein Polynom 3.Ordnung:
y=a3*x³+ a2*x²+a1*x+a0. Da sind jetzt 4 Unbekannte drin, nämlich a0 bis a3. 
Wir wissen:
y1=a3*x1³+ a2*x1²+a1*x1+a0.
y2=a3*x2³+ a2*x2²+a1*x2+a0.

Zwischen den benachbarten Punkten (x0,y0) und (x1,y1) soll genau so ein Kurvenstück liegen.
y=b3*x³+ b2*x1²+b1*x1+b0.
 Beide Kurvenabschnitte treffen in (x1,y1) aufeinander. Der Verlauf soll "glatt" sein, d.h. die Steigung soll dieselbe sein:
y'=3*b3*x1²+ 2*b2*x1+b1=3*a3*x11³+ a2*2*x1
Das liefert weitere Gleichungen für das Gleichungssystem. Man fordert, daß auch soviele höhere Ableitungen gleich sind, daß es genügend Gleichungen sind. Dann kann man rechnen...
Für die Rechnung findet man sicher ein C-Programm im Internet.


----------



## kiestumpe (23 April 2007)

neibeck schrieb:


> Hallo!
> 
> Nun möchte ich einen Spline berechnen lassen, eine Art Interpolation oder so ähnlich sodass sich eine schöne runde Strecke ergibt mit keinen Ecken und Kanten und dann die einzelnen neu errechneten Positionswerte wieder in einen Datenbaustein speichern.
> Hat jemand eine Idee wie ich dies realisieren könnte?
> ...


 
Das mit dem Spline ist ja schön und gut, du musst es nur evt. ins 2 oder 3-dimensionale Übertragen.
http://de.wikipedia.org/wiki/Spline
Aber ich frage mich, ob es wirklich das ist was du willst?
Wenn die gleiche Strecke mehrmals abgefahren wird, wirst du eine Kurvenschar erhalten.
Ich würde an deiner Stelle den Messwert der Position filtern, evt auch beides.
hth


----------



## Maxl (25 April 2007)

Also ich hab vor einigen Jahren mal ein C-Programm zur Berechnung eines Kubischen Spline (C-Spline) in AWL umgesetzt. Der Baustein benötigt vorher eine komplette Stützpunkttabelle und spuckt Ausgabewerte in einem definierbaren Intervall aus.
Die Berechnung erfolgt azyklisch und braucht je nach CPU und Anzahl Splinepunkt schon mal einige Sekunden. (40 Stützpunkte, 2000 Ausgabepunkt, CPU315-2DP (2AF03) --> 15-20 sek)

mfg
Maxl


----------

