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
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.
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...
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.
Einfach hier mit mal probieren: PolynomMaker - Funktion für nichtlineare Bauelemente finden Beitrag "PolynomMaker - Funktion für nichtlineare Bauelemente finden"
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.
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!
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.
Marie L. schrieb: > Ich habe einen Sensor mit einer sehr schlechten Kennlinie. Sollte man daran nicht etwas verändern? Gruss Klaus.
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?
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.
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.
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?
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".
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.
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.
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
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.
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.
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
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.