Forum: Mikrocontroller und Digitale Elektronik Bessere Linarisierung gesucht


von Marie L. (lendl)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich lese einen Strömungssensor aus und bin auf der Suche nach einer 
einfachen Art diesen zu linearisieren.

Momentan nehme ich Stützstellen auf und interpoliere linear zwischen 
diesen Stützstellen. An sich ist das schon in Ordnung, aber gerade im 
ersten drittel der Messkurve liegen die zwischenwerte schon ordentlich 
daneben.

Gibt es eine einfache Art die Zwischenwerte besser zu linearisieren?

Ich habe schon einiges gelesen wie Spline, Lineare Regression und 
Polynome, aber ich habe gar nichts verstanden.
Um ehrlich zu sein, ich habe ja gerade so die lineare Interpolisation 
verstanden, obwohl ich sie selbst einsetze.

Hier mal die Formel die ich bisher einsetze:

Ergeb =((good(x + 1) - Good(x)) /(bad(x + 1) - Bad(x))) * E +(good(x) 
-(bad(x) *((good(x + 1) - Good(x)) /(bad(x + 1) - Bad(x)))))

Wobei x die Variable für die For-Next schleife ist und E der nicht 
linearisierte Messwert. Good(x) ist der Referenzwert an der Stützstelle 
x und bad(x) ist der Wert des Prüflings an diesem Punkt.

Vielleicht kann mir ja jemand helfen und erklären wie ich meine Formel 
umbauen muss, oder mir eine einfache Quelle oder ein einfaches Beispiel 
nennen. Wäre super!

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

Marie L. schrieb:
> Excel.png

Damit kann man nicht so richtig viel anfangen, wenn man keine Lust hat, 
die ganze Tabelle abzutippen. Häng doch mal die Daten als CSV-Datei an.

von Marie L. (lendl)


Lesenswert?

Habe die Messwerte angehängt

von c-hater (Gast)


Lesenswert?

Marie L. schrieb:

> Momentan nehme ich Stützstellen auf und interpoliere linear zwischen
> diesen Stützstellen. An sich ist das schon in Ordnung

Nein, ist es ganz offensichtlich nicht. Entweder haut da Teufel Zufall 
erheblich mit rein oder das Meßprinzip ist bei der Auswertung nicht 
hinreichend bedacht worden, was letztlich aber beides auf dasselbe 
hinausläuft.

Als allererste Maßnahme solltest du die Tabelle ein zweites Mal 
aufnehmen.
Entweder schon die wird völlig anders aussehen als die gepostete oder 
spätestens eine auf gleich Art aufgenommene Tabelle, bloß mit anderen 
Stützstellen wird ein Ergebnis liefern, welches erheblich im Widerspruch 
zu der ersten steht.

Je nachdem, was von diesen beiden Sachen zutreffend ist, kann man auf 
eine der beiden am Anfang geäußerten Vermutungen als faktische Ursache 
schließen. Ich würde mal auf Fall 2 tippen, also: Meßprinzip nicht 
hinreichend berücksichtigt. Dafür würde nämlich auch sprechen, daß es 
sich die Sache an einem Ende der Skala wesentlich stärker auswirkt als 
am anderen.

Tja und der einzig korrekte Schluß wäre dann: deine "Linearisierung" 
kannst knicken, die fügt nur Rauschen zum Signal hinzu, mehr nicht. 
Dummerweise wäre das aber im Fall des reinen Zufalls ganz genauso...

von Possetitjel (Gast)


Lesenswert?

Marie L. schrieb:

> An sich ist das schon in Ordnung, aber gerade im ersten
> drittel der Messkurve liegen die zwischenwerte schon
> ordentlich daneben.

Nur scheinbar.

Du beziehst den (relativen) Messfehler nämlich offensichtlich
auf den Messwert selbst. Das ist zwar naheliegend, führt aber
immer dazu, dass kleine Messwerte einen höheren relativen
Fehler zeigen, obwohl weder der Sensor noch die Linearisierung
dort (abolut betrachtet) schlechter sind.

Aus der Luft gegriffenes Beispiel:
Der Sensor liegt beim Maximalwert von 200 Einheiten 0.5 Einheiten
daneben. Der relative Fehler beträgt 0.25%. Derselbe Sensor liege
bei einem Messwert von 10 Einheiten 0.1 Einheit daneben: Relativer
Fehler 1% !! Obwohl der kleinere Wert wesentlich besser stimmt,
ist der relative Fehler größer!

Extremfall: Der Sensor hat einen Offset von 0.01 Einheit. Am
Nullpunkt kommt rechnerisch trotzdem ein unendlich großer
Fehler heraus --> sinnlose Aussage.

Mögliche Abhilfen:
1) Absoluten Fehler betrachten.
2) Relativen Fehler nicht auf den Messwert, sondern auf
   den Messbereichsendwert beziehen.

> Gibt es eine einfache Art die Zwischenwerte besser zu
> linearisieren?

1) Stützstellen dichter setzen. Halbierter Abstand sollte mehr
   als eine Halbierung des Fehlers bringen.
2) Kalibrierpunkte nicht auf, sondern neben die Sollkurve
   setzen, so dass der Fehler beide Vorzeichen annimmt.

Achtung: Woher stammen die Kalibrierpunkte? Fehlerquellen
beachten!
Drift beachten!

> Ich habe schon einiges gelesen wie Spline,

Kann man machen; ist aber viel Rechnerei.

> Lineare Regression

Hmmm. Passt höchstens indirekt auf Deinen Fall.

> und Polynome,

Abschnittsweise mit Polynomen interpolieren ist verwandt zu
den Splines. Machbar, aber viel Rechnerei.

> aber ich habe gar nichts verstanden. Um ehrlich zu sein,
> ich habe ja gerade so die lineare Interpolisation
> verstanden, obwohl ich sie selbst einsetze.

Bleibe erstmal bei der linearen Interpolation. Das kann recht
gut werden, wenn man es richtig macht. Es ist nur wichtig, dass
Du auch die Fehlerquellen im Umfeld betrachtest und Dich nicht
nur auf die Mathematik versteifst. Formeln sind geduldig; man
kann viel Quatsch rechnen, wenn man die richtige Formel falsch
anwendet.

von Tüftler (Gast)


Lesenswert?

Einfach hier mit mal probieren:

PolynomMaker - Funktion für nichtlineare Bauelemente finden

Beitrag "PolynomMaker - Funktion für nichtlineare Bauelemente finden"

von HildeK (Gast)


Lesenswert?

Marie L. schrieb:
> Vielleicht kann mir ja jemand helfen und erklären wie ich meine Formel
> umbauen muss, oder mir eine einfache Quelle oder ein einfaches Beispiel
> nennen. Wäre super!

Mir ist nicht ganz klar, was du mit den Daten letztendlich machen 
willst.

Wenn du, wie in dem *.csv, diese erfasst und dann offline auswerten 
kannst, dann ist Excel doch kein schlechtes Tool dazu.

Schau mal da: http://www.mathe-praxis.de/1_1/1_1.html

Einfach die (x,y)-Werte in einem Diagramm darstellen und dann der Kurve 
eine Trendlinie hinzufügen (RMB auf die Datenlinie und Befehl 
"Trendlinie hinzufügen"). Die Trendlinie kannst du formatieren und da 
gibt es auch einen Möglichkeit, die Geradengleichung mit ins Diagramm zu 
schreiben.
Für deine beiden Datenreihen Good und Bad gibt es dann folgenden 
Gleichungen (Achtung, ich habe die Nr. statt bei '3' bei '1' begonnen):
Good: y = 10,013x + 0,468
Bad:  y = 10,012x + 0,7725
Ja, leichte Unterschiede, aber dass ist eben den Messfehlern bei der 
Aufnahme geschuldet. Mit deutlich mehr Messpunkten würden die beiden 
Geraden noch ähnlicher werden - in der Diagrammdarstellung sind sie kaum 
eine Strichbreite auseinander.

Hier ist mit EXCEL eine lineare Regression durchgeführt worden. Mehr zu 
den Theorien und der Mathematik der linearen Regression findest du mit 
deiner bevorzugten Suchmaschine oder in Wikipedia.

von Marie L. (lendl)


Angehängte Dateien:

Lesenswert?

Vielen vielen Dank für Eure Antworten!

Hier nochmal die Erklärung was ich genau machen möchte:

Ich habe einen Sensor mit einer sehr schlechten Kennlinie.
Ich werte diesen Sensor (über einen AD-Wandler) mit einem Microprozessor 
aus.
Ich habe ein genaues Referenz-Gerät mit dem ich die "Good"-Werte 
aufnehme.
Mit Hilfe mehrerer "Good"-Werte und des Prozessors möchte ich nun aus 
einem Sensor, der eine Genauigkeit von z.B. 3% vom Messwert hat, ein 
Gerät machen das dann aber 1% Genauigkeit hat.

@ c-hater
ich habe schon sehr viele solcher Werte aufgenommen, bislang kommen da 
aber immer die gleichen Ergebnisse raus.
Ich bin mir nicht sicher was ich Deiner meinung nach falsch mache?
Die Formel die ich angegeben habe scheint mir schon zu stimmen, ich habe 
Anfangs einige dieser Werte händisch nachgerechnet.
Vielleicht kannst Du mir nochmal erklären wo mein Fehler liegt

@ Possetitjel
das war eine super Idee!!!!
Ich habe mit einer Routine die Stützstellen alle um 0,5% nach unten 
verschoben, dann sieht die Sache schon viel besser aus (siehe 
Screenshot).
Ich muss wohl am Anfang noch ein oder 2 Stützstellen mehr setzten, dann 
wird es bestimmt noch besser.
Danke!

@ Tüftler
Das ist ein tolles Programm, hab es mir mal angesehen.
Ich bin mir aber nicht sicher ob ich es mathematisch dann auch umsetzen 
kann. Da brauche ich viel Zeit, dann versuche ich es mal

@ HildeK
Danke für den Link! Wie ich schon Tüftler geschrieben habe, ich weiss 
nicht ob meine Mathematik da ausreicht.
Sicher wäre es toll mit weniger Stützstellen und mehr Mathe zum Ziel zu 
kommen. Mal schauen ob ich es mal schaffe....

Euch allen nochmal vielen Dank für Eure Unterstützung!

von Tüftler (Gast)


Lesenswert?

Marie L. schrieb:
> @ Tüftler
> Das ist ein tolles Programm, hab es mir mal angesehen.
> Ich bin mir aber nicht sicher ob ich es mathematisch dann auch umsetzen
> kann. Da brauche ich viel Zeit, dann versuche ich es mal

Beitrag "PolynomMaker - Funktion für nichtlineare Bauelemente finden"

Was soll denn daran schwierig sein?
Die unter Result ausgegebenen Werte für die Parameter k0, k1 usw. setzt 
Du in die darüber angegebene Formel ein. X ist dann dabei jeweils der 
Messwert und Y das linearisierte Ergebnis. Das kann doch heutzutage 
jeder Hauptschüler in 2 Minuten. Die Formel verwendet Du einfach im 
Programm des Mikrocontrollers. Einfacher geht es nun wirklich nicht.

von Klaus R. (klara)


Lesenswert?

Marie L. schrieb:
> Ich habe einen Sensor mit einer sehr schlechten Kennlinie.

Sollte man daran nicht etwas verändern?
Gruss Klaus.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Marie L. schrieb:
> Mit Hilfe mehrerer "Good"-Werte und des Prozessors möchte ich nun aus
> einem Sensor, der eine Genauigkeit von z.B. 3% vom Messwert hat, ein
> Gerät machen das dann aber 1% Genauigkeit hat.

Und das nimmst du dann, machst das ganze nochmal, und..... schwups! hast 
du ein gerät mit 0.33% genauigkeit. Und nochmal... schwups! 0.1%. 
schwups.. 0.03% schwups... 0.01%

Merkst du was?

von Mike (Gast)


Lesenswert?

Marie L. schrieb:
> Mit Hilfe mehrerer "Good"-Werte und des Prozessors möchte ich nun aus
> einem Sensor, der eine Genauigkeit von z.B. 3% vom Messwert hat, ein
> Gerät machen das dann aber 1% Genauigkeit hat.

Um dem "Bad"-Sensor durch Kalibrierung bessere Werte entlocken zu 
können, musst du sicher sein, dass er überhaupt kalibrierfähig ist, also 
z.B. die Kennlinie stabil ist (Schwankung Temperatur, 
Versorgungsspannung, ...) und die Abweichungen der Messwerte nicht durch 
statistische Schwankungen (Rauschen) verursacht werden. Wenn diese 
Bedinungen nicht erfüllt sind, bekommst du jedes Mal eine andere 
Umrechnungsfunktion.

Deine Daten sehen mindestens nach Fehlern durch Rauschen aus.

von HildeK (Gast)


Angehängte Dateien:

Lesenswert?

Marie L. schrieb:
> ich weiss nicht ob meine Mathematik da ausreicht.

Naja, so schlimm ist es auch nicht. In 
http://de.wikipedia.org/wiki/Lineare_Regression im Abschnitt "Beispiel 
in Kurzdarstellung" ist das doch ganz durchschaubar angegeben.
- man nehme einen Satz Messwerte xi und yi auf
- man bestimme die Mittelwerte der xi und yi, ergibt x_quer und y_quer
- man bestimme die Differenzen xi-x_quer und yi-y_quer
- man multipliziere die Differenzen xi-x_quer und yi-y_quer und summiere
- man teile durch die Summe der Quadrate der Differenzen xi-x_quer
Dann hast du (Nomenklatur Wikipedia) die Werte für a und b.
Gut, mit dem µC ist das nicht so ganz ressourcensparend umsetzbar.

HildeK schrieb:
> Für deine beiden Datenreihen Good und Bad gibt es dann folgenden
> Gleichungen (Achtung, ich habe die Nr. statt bei '3' bei '1' begonnen):
> Good: y = 10,013x + 0,468
> Bad:  y = 10,012x + 0,7725

Ich hatte ja die Regressionsgeraden für beide berechnet und angegeben. 
Und Possetitjel hat eine Verschiebung der einen Reihe ausgemacht. 
Ähnliches zeigen auch die beiden Gleichungen: der Unterschied ist 
0,7725-0,468 ≈ 0,3. Die Steigung ist ja bis auf 10^-4 gleich.
Nach diesem Vergleich müsste es eigentlich reichen, die 'Bad'-Werte um 
0,3 zu verringern und dein Fehler müsste deutlich kleiner werden.
Wenn alles Sensoren sich nur um den Offset verscheiben (Versuchsreihe 
machen?), dann könnte es reichen, nur den Mittelwert der Differenzen der 
y_good- und y_bad-Werte zu bestimmen und für den 'bad'-Sensor diese dann 
zu korrigieren. Das geht aber nur, wenn sichergestellt ist, dass die 
Steigungen, wie in deinem Beispiel, fast identisch sind.

von Marie L. (lendl)


Angehängte Dateien:

Lesenswert?

So, ich habe mich mal an dem PolynomMaker versucht, erfolglos.

Ich habe zum Testen einfach mal beliebige Werte eingegeben und habe 
versucht einen y-Wert zu einem x-Wert zu berechnen.
Ich bin entweder zu doof oder ich habe etwas grunsätzliches nicht 
verstanden.

Hier mal mein Ergebnis:

Die eingegebenen Werte als Polymon 2. Ordnung und der Versuch den y-Wert 
für x = 1,5 zu berechnen (als Ergebnis hätte ich ca. 4 erwartet)

0,246 + 4,150 + 0,46125

Und als Polynom 3. Ordnung:

0,02 + 5,0805 + 0,9495 + 0,06075


Habe ich etwas falsch gemacht, bzw. falsch verstanden?

von Mike (Gast)


Lesenswert?

Marie L. schrieb:
> Habe ich etwas falsch gemacht, bzw. falsch verstanden?

Mit einem Polynom zweiter Ordnung kannst du deinen Verlauf nicht 
beschreiben. Erhöhe mal vorsichtig die Ordnung. Bei zu hoher Ordnung 
fängt der Polynomfit zwischen den Stützstellen an zu "spinnen".

von Possetitjel (Gast)


Lesenswert?

Marie L. schrieb:

> So, ich habe mich mal an dem PolynomMaker versucht,
> erfolglos.

Das wundert mich nicht.

Polynome sind für viele praktisch auftretenden Fälle schlecht
bis gar nicht geeignet. Das hat rein mathematische Gründe.
Mike hat das - völlig zutreffend - schon angedeutet.

> Habe ich etwas falsch gemacht, bzw. falsch verstanden?

Du nicht direkt, nein. Du bist nur "Tüftler" mit seiner
unqualifizierten Bemerkung auf den Leim gegangen. "Tüftler",
dieser Depp, kennt den Unterschied zwischen Interpolation
und Approximation nicht. Das ist ja aber nicht Deine Schuld.

von Tüftler (Gast)


Lesenswert?

Possetitjel schrieb:
> Du nicht direkt, nein. Du bist nur "Tüftler" mit seiner
> unqualifizierten Bemerkung auf den Leim gegangen. "Tüftler",
> dieser Depp, kennt den Unterschied zwischen Interpolation
> und Approximation nicht. Das ist ja aber nicht Deine Schuld.

Der Depp bist Du, da Du anscheinend nicht die Intelligenz besitzt hier 
sachlich zu diskutieren.

@ Marie L.
Das bei Deinen Werte-Eingaben Murks rauskommt ist nicht verwunderlich. 
Schau Dir mal genau an, was Du da eingeben hast. Solche 
Werte-Stützstellen werden von realen bauelementen niemals erzeugt. 
Versuche mal gemessene Werte einzugeben. Dann wirst Du sehen, dass Du 
ein vernünftiges und verwertbares Ergebnis bekommst.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Marie L. schrieb:
> Die eingegebenen Werte als Polymon 2. Ordnung und der Versuch den y-Wert
> für x = 1,5 zu berechnen (als Ergebnis hätte ich ca. 4 erwartet)
>
> 0,246 + 4,150 + 0,46125

Achtung: k2 ist negativ! (-0.205)
wenn du dann richtig einsetzt, kommt erwartungsgemäß 3.94 raus

von Possetitjel (Gast)


Lesenswert?

Tüftler schrieb:

> Das bei Deinen Werte-Eingaben Murks rauskommt ist nicht
> verwunderlich.

Doch, es ist schon etwas verwunderlich, dass der schlaue
PolynomMaker keinen der vorgegebenen Punkte exakt trifft,
wogegen man dies mit einem Polygonzug aus fünf Geraden-
abschnitten ganz leicht erreichen könnte.

> Schau Dir mal genau an, was Du da eingeben hast. Solche
> Werte-Stützstellen werden von realen bauelementen niemals
> erzeugt.

Eine Glaskugel als Messgerät entspricht nicht mehr dem Stand
der Technik.

> Versuche mal gemessene Werte einzugeben. Dann wirst Du
> sehen, dass Du ein vernünftiges und verwertbares Ergebnis
> bekommst.

Das ist Wahrsagerei - es kann eintreten oder auch nicht.

Der PolynomMaker nimmt offensichtlich eine Näherung im
quadratischen Mittel vor; der Ausdruck "Regression" deutet
auch darauf hin. Approximation im quadratischen Mittel ist
unter zwei Bedingungen das richtige Werkzeug:
1) Man kennt den Typ der Funktion bereits (z.B. aus
   physikalischen Überlegungen) und muss nur noch ihre genaue
   Lage im Diagramm bestimmen und
2) die Daten sind stark überbestimmt, d.h. man hat sehr viele
   Messpunkte, die vorwiegend statistische Fehler aufweisen
   ("Rauschen").

Maries Fall ist offensichtlich anders gelagert: Sie hat relativ
wenige Stützstellen, die von der Linearisierungsfunktion exakt
getroffen werden sollen. Die Daten sind nicht überbestimmt,
rechnerisch sollen systematische Fehler korrigiert werden und
keine zufälligen.
Das übliche Vorgehen ist hier die bereichsweise Interpolation,
also Polygonzüge oder Splines.

von Ernst O. (ernstj)


Lesenswert?

Ich habe die ganze Zeit das Gefühl, hier wird der Gaul vom Schwanz 
aufgezäumt. Sprich: über das Messverfahren wurde noch nichts gesagt.

Wie funktioniert der Ströumgssensor? Was für eine Messgrösse hast du? 
Ist es eine Spannung, ein Widerstand, ein Strom, eine Frequenz... und 
welche Absolutwerte misst du? Mit solchem Wissen könnte man sich 
Gedanken über eine Linearisierung auf hardwareseite machen, so wie man 
das z.B. bei NTC Fühlern machen kann.

Hast du eine Wertetabelle deiner Stützstellen, in der deine Messgrössen 
und die zugehörigen Strömungswerte zusammengestellt sind? Diese Tabelle 
brauchst du, wenn du linearisieren willst.

Und sei vorsichtig mit Polynomen, das können gemeine Biester sein.

von Udo S. (urschmitt)


Lesenswert?

Das Messgerät hat 3% Fehler vom Endwert.
Jetzt wird ein Fehler über ein (hoffentlich genaues) Referenzgerät 
aufgenommen und damit soll dann wohl eine Korrekturkurve ermittelt 
werden, die dazu benutzt werden soll, den (zukünfig) gemessenen Wert zu 
korrigieren  (Kalibirerung).

1. Es ist nicht bekannt ob der Fehler des ungenaueren Messgeräts über 
mehrere Messungen konstant ist/bleibt
2. Schon die gemessenen Werte zeigen ziemlich deutlich darauf hin, daß 
der Fehler eher statistisch und nicht systematisch ist.
3. Es wird versucht einen Fehler relativ vom Messwert zu errechnen. Das 
ist unsinnig weil der Fehler bei den allermeisten Geräten immer vom 
gewählten Vollausschlag abhängt.

Das Vorhaben ist also ziemlich unsinnig und die Frage ob Polynomen hier 
zur Linearisierung geeignet sind ziemlich akademisch, praktisch aber 
nicht relevant weil das Ziel so damit gewiss nicht erreicht werden kann.

: Bearbeitet durch User
von Huang H. (abcdefg)


Lesenswert?


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.