Forum: Offtopic Linearisierung Sensordaten


von Michael F. (michael_f268)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin gerade am verweifeln, beim Versuch Sensordaten zu nullieren.
Bei einem Abstandssensor muss ich, unabhängig vom Abstand in der x-Achse 
(norm: x=31000) in y immer den selben Wert angezeigt bekommen.
In der Zeichnung anbei habe ich das skizziert, d.h. in der oberesten 
Kurve soll unabhängig von x immer der Wert von y=31000 ausgegeben 
werden,also ca.0,9.
Ich würde gerne über die Steigung den y-Wert einfach ausgleichen durch 
einfache lineare Addition, aber ich bekomme es nicht raus, wie man die 
Steigung in jeden Punkt aus den Daten auslesen kann und mathematisch 
beschreibt. Steh da leider gerade leider auf dem Schlauch.
Es muss doch so funktionieren, weil ich es per Hand auch in etwa 
einzeichnen könnte ;-)

Vielleicht habt ihr ja einen Tipp?

Vielen Dank schon mal,
Michael

von Joe F. (easylife)


Lesenswert?

Sollte es sich um Geraden handeln, die sich alle in einem gemeinsamen 
Ursprungspunkt treffen, musst du zunächst diesen Ursprungspunkt x0|y0 
ermitteln.
Von diesem Punkt ausgehend kannst du dann zu jedem x|y Paar auf den 
y-Wert zu x=31000 schließen
y = y0 + (31000 - x0) * ((y-y0)/(x-x0))

: Bearbeitet durch User
von Vorn N. (eprofi)


Lesenswert?

Sehr unklare Aufgabenstellung bzw. -Formulierung.
Bitte beim nächsten Mal mehr Mühe geben.

Ich habe es so verstanden: du suchst die Gleichung der Korrekturgeraden, 
die man zur Originalgeraden addieren muss, um auf eine konstante 
Funktion y=0,9 bzw. y=f(31000) zu kommen.
Die Korrekturfunktion yk=ak+bk*x hat die negative Steigung der 
Originalgeraden. Und der Offset ak muss so gewählt werden, dass der 
Schnittpunkt bei x=31000 / y=0,9 liegt.

von Vorn N. (eprofi)


Lesenswert?

Die Koeffizienten der Trendlinienformel werden bei Excel mit den 
Standardeinstellungen nur auf 5 Stellen (z.B. 7e-06) ausgegeben und ist 
deswegen ungenau. Rechtsklick auf die Formel | Trendlinie formatieren 
und dann entweder:
"Zahl" auswählen mit höherer Stellenzahl   oder
"Text", dann wird die Stellenzahl automatisch angepasst.

von Michael F. (michael_f268)


Lesenswert?

Vorn N. schrieb:
> Sehr unklare Aufgabenstellung bzw. -Formulierung.
> Bitte beim nächsten Mal mehr Mühe geben.
>
> Ich habe es so verstanden: du suchst die Gleichung der Korrekturgeraden,
> die man zur Originalgeraden addieren muss, um auf eine konstante
> Funktion y=0,9 bzw. y=f(31000) zu kommen.
> Die Korrekturfunktion yk=ak+bk*x hat die negative Steigung der
> Originalgeraden. Und der Offset ak muss so gewählt werden, dass der
> Schnittpunkt bei x=31000 / y=0,9 liegt.

Ja genau, das ist mein Ansinnen. Danke für die klarere Formulierung.

von Michael F. (michael_f268)


Lesenswert?

Joe F. schrieb:
> Sollte es sich um Geraden handeln, die sich alle in einem gemeinsamen
> Ursprungspunkt treffen, musst du zunächst diesen Ursprungspunkt x0|y0
> ermitteln.
> Von diesem Punkt ausgehend kannst du dann zu jedem x|y Paar auf den
> y-Wert zu x=31000 schließen
> y = y0 + (31000 - x0) * ((y-y0)/(x-x0))

Die geraden haben leider keinen gemeinsamen Ursprung.

von Vorn N. (eprofi)


Lesenswert?

Korrektur:
Und der Offset ak muss so gewählt werden, dass der Schnittpunkt bei 
x=31000 / y=0,9 liegt.
Und der Offset ak muss so gewählt werden, dass der Schnittpunkt mit der 
x-Achse bei x=31000 / y=0,0 liegt.

Es geht tatsächlich so, wie Joe es beschrieb:
Für die blaue Linie lautet die Korrekturgleichung
1
y = (0,382262-0,258359)/(31000-13100)*31000 - (0,382262-0,258359)/(31000-13100)*x
2
y = (0,382262-0,258359)/(31000-13100)*(31000-x) (vgl. Joe)
3
y = 0,214581 - 6,92196e-6*x
Ein kleines Problem ist allerdings, dass die Steigung im ersten 
Abschnitt nicht genau gleich der Steigung im zweiten Abschnitt ist.
Ich habe die mittlere Steigung der gesamten Geraden verwendet.

Ggf. Fallunterscheidung, ob 1. oder 2. Abschnitt.

: Bearbeitet durch User
von Michael F. (michael_f268)


Lesenswert?

Vorn N. schrieb:

> Es geht tatsächlich so, wie Joe es beschrieb:
> Für die blaue Linie lautet die Korrekturgleichung
>
1
> y = (0,382262-0,258359)/(31000-13100)*31000 - 
2
> (0,382262-0,258359)/(31000-13100)*x
3
> y = (0,382262-0,258359)/(31000-13100)*(31000-x) (vgl. Joe)
4
> y = 0,214581 - 6,92196e-6*x
5
>
> Ein kleines Problem ist allerdings, dass die Steigung im ersten
> Abschnitt nicht genau gleich der Steigung im zweiten Abschnitt ist.
> Ich habe die mittlere Steigung der gesamten Geraden verwendet.
>
> Ggf. Fallunterscheidung, ob 1. oder 2. Abschnitt.

Danke für deine Antwort. Es geht schon so, wie du es dargestellt hast, 
nur leider habe ich die Sensordaten nicht so wie hier geplottet, sondern 
ich habe habe einen Sensorwert als Punkt, der irgendwo im Diagramm 
verortet ist. An dem Ort bräuchte ich dann die Steigung der 
Ausgleichsgeraden. Delta x habe ich ja durch 31000-x, nur das Delta y 
habe ich nicht, da den y-Wert bei 31000 für die Kurve  nicht habe.

von Joe F. (easylife)


Lesenswert?

Michael F. schrieb:
> Die geraden haben leider keinen gemeinsamen Ursprung.

Auch nicht mit etwas "Spielraum" (sieht graphisch so aus)?
Falls nicht hast du ein Problem, denn du kannst eine einzelne x|y 
Koordinate nur dann einer der Geraden zuordnen, wenn ein 2. Punkt auf 
der  selben Geraden bekannt ist.

: Bearbeitet durch User
von Michael F. (michael_f268)


Lesenswert?

Joe F. schrieb:
> Michael F. schrieb:
>> Die geraden haben leider keinen gemeinsamen Ursprung.
>
> Auch nicht mit etwas "Spielraum" (sieht graphisch so aus)?
> Falls nicht hast du ein Problem, denn du kannst eine einzelne x|y
> Koordinate nur einer der Geraden zuordnen, wenn ein 2. Punkt auf der
> selben Geraden bekannt ist.

Ja, das fürchte ich auch, dass die Gesetzte der Mathematik mir da einen 
Strich durch die Rechnung machen.

von Joe F. (easylife)


Lesenswert?

Michael F. schrieb:
> dass die Gesetzte der Mathematik mir da einen
> Strich durch die Rechnung machen

nennt sich "Gleichung mit zu vielen Unbekannten".
Aber wie gesagt, eigentlich sieht es schon so aus, als ob sich die 
Geraden irgendwo weit links aussen treffen...
Wo kommen die Daten denn her (Anwendungsfall)?

: Bearbeitet durch User
von Vorn N. (eprofi)


Lesenswert?

Dann musst du dir einen kleinen Memory (Array) anlegen, in dem Du ein 
paar Werte (Stützstellen) speicherst  und daraus die Steigungen 
errechnest, ggf. mit Interpolation und Fallunterscheidung.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Wenn du mit einem Fehler von max. 0,32% für das Ergebnis leben kannst 
ist folgende Funktion für deine drei Beispielgeraden passend:

y_31000 = 0,329084662 + (31000 + 71880) * (y - 0,329084662) / (x + 
71880)

Der zur Hilfe genommene (gemittelte) Schnittpunkt der 3 Geraden liegt 
dabei bei (-71880,0 | -0,329084662)

: Bearbeitet durch User
von Michael F. (michael_f268)


Lesenswert?

Joe F. schrieb:
> Wenn du mit einem Fehler von max. 0,32% für das Ergebnis leben
> kannst
> ist folgende Funktion für deine drei Beispielgeraden passend:
>
> y_31000 = 0,329084662 + (31000 + 71880) * (y - 0,329084662) / (x +
> 71880)
>
> Der zur Hilfe genommene (gemittelte) Schnittpunkt der 3 Geraden liegt
> dabei bei (-71880,0 | -0,329084662)


Vielen dank für deine Berechnung. Mit welchem Programm hast du diesen 
Schnittpunkt errechnet? Ich habe leider nur Excel zur Verfügung und 
müsste bei neuen Daten das ja selbst errechnen...

von Joe F. (easylife)


Lesenswert?

Michael F. schrieb:
> Mit welchem Programm hast du diesen
> Schnittpunkt errechnet?

Mit einer Tabellenkalkulation.
Du musst halt über 2 (möglichst weit auseinanderliegenden Punkten) die 
Steigung (a) und den y-Wert bei x=0 (y0) ermitteln, um die 
Geradengleichung aufzustellen

y = y0 + a * x

Dann nimmst du jeweils 2 Gleichungen und setzt sie gleich, um den 
Schnittpunkt zu ermitteln

y0_a + a_a * x = y0_b + a_b * x

Aufgelöst nach x ergibt das die x-Koordinate des Schnittpunktes

x = (y0_b - y0_a) / (a_a - a_b)

x des Schnittpunktes setzt du dann in eine der Geradengleichungen ein 
und erhältst y des Schnittpunktes.

Das machst du für mehrere Kombinationen von Geraden und mittelst dann 
die Koordinaten des Schnittpunktes.

Michael F. schrieb:
> und
> müsste bei neuen Daten das ja selbst errechnen...

Solange die neuen Daten zu den 3 Beispiel-Geraden passen (ähnlicher 
Schnittpunkt) musst du an der Formel eigentlich nichts ändern.

: Bearbeitet durch User
von Michael F. (michael_f268)


Lesenswert?

Wow, vielen Dank für deine Hilfe. Ich muss mir das nochmal durch den 
Kopf gehen lassen, aber ich denke, dass ist die Lösung.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Ich habe dir hier mal beispielshalber eine 4. Gerade dazu fantasiert.

Messwert wäre bei x=20000 y=0,6
Über die Funktion
y_31000 = 0,329084662 + (31000 + 71880) * (y - 0,329084662) / (x +
71880)

erhältst du auf dieser Geraden dann für x=31000 den y-Wert 0,711 
(schwarze Linie)

: Bearbeitet durch User
von Michael F. (michael_f268)


Lesenswert?

Joe F. schrieb:
> Ich habe dir hier mal beispielshalber eine 4. Gerade dazu fantasiert.
>
> Messwert wäre bei x=20000 y=0,6
> Über die Funktion
> y_31000 = 0,329084662 + (31000 + 71880) * (y - 0,329084662) / (x +
> 71880)
>
> erhältst du auf dieser Geraden dann für x=31000 den y-Wert 0,711
> (schwarze Linie)

Die von dir errechneten Werte bzgl. Koordinatennullpunkt haben einen 
fast perfekten Ausgleich der Sensordaten übergeben, viele Dank nochmal.

Nun habe ich nochmal veränderte Sensordaten und wollte in Excel den 
Schnittpunkt selbst errechen, habe aber erstmal die gleichen Zahleninput 
verwendet.
Leider komme ich auf einen anderen Schnittpunkt, nämlich 70980 (x) und 
1,2096 (y). Welches Tabellenkalkulation hast denn du dafür verwendet? 
Ist finde das sehr eigenartig, bei dem lineraren Gleichugnssystem sollte 
es doch eingentlich keine so großen Unterschiede geben, oder?

von Michael F. (michael_f268)


Lesenswert?

Joe F. schrieb:
> x des Schnittpunktes setzt du dann in eine der Geradengleichungen ein
> und erhältst y des Schnittpunktes.

Hier kommen, je nachdem in welcher der beiden Gleichungen den 
Schnittpunkt eingebe, verschiedene Werte raus. Wie kann das denn sein?

von Joe F. (easylife)


Lesenswert?

Michael F. schrieb:
> Wie kann das denn sein?

Dann ist dir beim Gleichsetzen und Auflösen der Geradengleichungen nach 
x ein Fehler passiert.
Zeige mal den Rechenweg.

: Bearbeitet durch User
von Michael F. (michael_f268)


Angehängte Dateien:

Lesenswert?

Joe F. schrieb:
> Michael F. schrieb:
>> Wie kann das denn sein?
>
> Dann ist dir beim Gleichsetzen und Auflösen der Geradengleichungen nach
> x ein Fehler passiert.
> Zeige mal den Rechenweg.

Ich habs genau so gemacht, wie du oben beschrieben. Im Bild die 
einzelnen Steigungen und Achsenabschnitte meiner 3 Kurven (1,2,4.

von Joe F. (easylife)


Lesenswert?

Ich kann das so nicht nachvollziehen, aber es muss ein Fehler in deiner 
Berechnung sein.
Der Schnittpunkt muss sowohl vom x als auch vom y Wert her negativ sein, 
zumindest, wenn es sich um deine ursprünglich genannten Daten handelt.
1
               x1            y1      x2            y2      Steigung   y0 (bei x=0)
2
Gerade G1   13100   0,258358955   31000   0,382262452   0,000006922    0,167680977
3
Gerade G2   13100   0,402419441   31000   0,556392110   0,000008602    0,289735532
4
Gerade G3   13100   0,679917928   31000   0,892776455   0,000011892    0,524138783
5
      
6
      
7
                              x        y    
8
Schnittpunkt G1/G2   -72658,354   -0,335    
9
Schnittpunkt G1/G3   -71728,318   -0,329    
10
Schnittpunkt G2/G3   -71253,410   -0,326    
11
      
12
Mittelwert           -71880,027   -0,330

Der Schnittpunkt S einer Gerade A und B errechnet sich so:

x_S = (y0_A - y0_B) / (s_B - s_A)

y0_A und y0_B sind deine "Achsenabschnitte" (Schnittpunkt der Gerade mit 
y-Achse), s_A und s_B sind die Steigungen der Geraden A und B.
Wenn du dann x_S in eine der beiden Geradegleichungen

y_A = y0_A + s_A * x_S
oder
y_B = y0_B + s_B * x_S

einsetzt, muss das gleiche für y_A und y_B herauskommen (= y_S)

: Bearbeitet durch User
von Michael F. (michael_f268)


Lesenswert?

Hallo, sorry, ja war natürlich mein Fehler. Habe bei der Errechnung des 
x-Werts des Schnittpunkts im Nenner das falsche von einander 
subtrahiert, entschuldige bitte.

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.