Eine Wertemenge auf eine andere abbilden

OP #6955479
Lesenswert?

Ich suche für eine messtechnische Kalibrationsaufgabe eine allgemeine, 
einfache programmtechnische Lösung, die Menge von (Mess)Werten A auf 
eine andere Menge zutreffender (Ergebnis)Werte B abzubilden:

Gegeben sei beispielsweise A mit der Folge von 0DB8H bis 0900H und 
zugehörig B von 100 bis 1500 (mA). Zu beachten hierbei: Die eine Abfolge 
fällt, die andere steigt dabei. Man könnte sowas natürlich aufwendig in 
einer großen Tabelle lösen. Gesucht wäre nun eine deutlich 
platzsparendere Lösung!
Gast #6955494
Lesenswert?

> Ich suche für eine messtechnische Kalibrationsaufgabe eine allgemeine,
> einfache programmtechnische Lösung, die Menge von (Mess)Werten A auf
> eine andere Menge zutreffender (Ergebnis)Werte B abzubilden:

Das klingt nach einer schnöden Relation (oder im Spezialfall einer 
Funktion).

> Gesucht wäre nun eine deutlich platzsparendere Lösung!

Wenn linear reicht dann schafft das ein Einzeiler (zumindest in den 
üblichen Programmiersprachen). Wenns lesbar sein darf dann auch auf zwei 
oder drei Zeilen verteilt.
#6955532
Lesenswert?

Urs H. schrieb:
> Welches Problem dieser Einzeiler löst weiß ich nicht. Dieses hier ist es
> jedenfalls nicht.

war ja  auch für eine positive Steigung ohne Offset!

Geradengleichung war schon immer

m=dx/dy
b=Offset

y = m * x + b

ohne Offset
y = m * x

y und x steigend m = positiv
ist einer nun fallend also m negativ muss dy oder dx umgedreht werden
ist nirgends ein Offset entfällt b

kann locker per Hand auf Karopapier oder als Tabelle in Exel überprüft 
werden.
#6955545
Lesenswert?

Urs H. schrieb:
> df2ds schrieb:
>> Hier ist der Einzeiler:
>> y = y_min +(y_max-y_min)/(x_max-x_min)*(x-x_min)
>
> Welches Problem dieser Einzeiler löst weiß ich nicht. Dieses hier ist es
> jedenfalls nicht.

Ich hätte deine Problembeschreibung jetzt so verstanden, dass du einen 
Raw-AD-Wert auf den echten Messwert skalieren möchtest.

Also 1823 bis 245 Digits ergeben am Ende 100 bis 1500mA oder whatever.
Oder 4 bis 20mA sollen auf 0...100% umgerechnet werden.

Und genau das tut die Funktion, die df2ds angegeben hat.

https://www.arduino.cc/reference/de/language/functions/math/map/
Gast #6955567
Lesenswert?

Joachim B. schrieb:
> war ja  auch für eine positive Steigung ohne Offset!

Der Einzeiler von df2ds funktioniert für alle Geraden. Also unabhängig 
vom Vorzeichen der Steigung und unabhängig vom Offset.

Urs H. schrieb:
> Welches Problem dieser Einzeiler löst weiß ich nicht. Dieses hier ist es
> jedenfalls nicht.

Dann solltest du deine Problembeschreibung nochmal konkretisieren. Denn 
wenn dir eine lineare Abbildung der beiden Wertebereiche ausreicht (wie 
du eigentlich geschrieben hast), dann gibt dir der Einzeler die 
Rechenanleitung für diese lineare Gleichung.
OP #6955581
Lesenswert?

Sebastian R. schrieb:

> Ich hätte deine Problembeschreibung jetzt so verstanden, dass du einen
> Raw-AD-Wert auf den echten Messwert skalieren möchtest.

Genau.

Achim S. schrieb:
> Der Einzeiler von df2ds funktioniert für alle Geraden.

Ja, ich muss mich korrigieren, hatte das wegen der fehlenden Klammern 
hinten falsch berechnet. Die Formel passt ansonsten, danke für die 
Hilfe.
Gast #6955582
Lesenswert?

Hinreichend allgemeine und häufig genommene Ansätze: Lookup tables, 
Neuronale Netze (ja, auch die sind heutzutage einfach aufm µC zu 
nutzen), ggf. (nicht mehr allzu allgemein) polynomiale Regression (wovon 
die oben gezeigte Lineare Regression ein Spezialfall ist).

Gibt natürlich noch deutlich mehr.
Gast #6955613
Lesenswert?

Urs H. schrieb:
> Urs H. schrieb:
>
>> der fehlenden Klammern hinten
>
> um den mittleren Quotienten herum meinte ich

Wo meinst Du fehlt da eine Klammer?

Man nutzt i.d.r ja auch nicht die Formel, sonder berechnet daraus m und 
b.

Und eigentlich auch nicht aus den Grenzwerten, sondern aus typischen 
aber weit auseinander liegenden werten oder per linearer Regression.

Am Ende gibt es ein m und ein b.

Je nach Auflösung kann man zwischen 2 Versionen wählen, die ein 
unterschiedliches b ergeben:

y=mx+b oder y=m(x+b)
OP #6955630
Lesenswert?

Urs H. schrieb:
> Die Formel passt ansonsten

Ich hatte nur ein richtiges Zufalls-Ergebnis!
Also nochmal:

Y=mA  X=Wert
100  3522  (Ymin/Xmax)
200  3435
300  3348
400  3261
500  3174
600  3087
700  3000
800  2913
900  2826
1000  2739
1100  2652
1200  2565
1300  2478
1400  2391
1500  2304  (Ymax/Xmin)

Die Formel so ich sie hoffentlich richtig verstehe:
y = y_min + ((y_max-y_min)/(x_max-x_min))  *(x-x_min)

Ymin = 100
Ymax-Ymin = 1500-100 = 1400
Xmax-Xmin = 3522-2304 = 1218

Beispiel:
Ich möchte für den Messwert X=3000 das zugehörige Y= 700 ausrechnen.

Also:
Y = 100 + (1400/1218) * 3000-2304
Y=  100 + 1,1494*696
Y=  100+800 = 900!

Also Unsinn. Oder was habe ich hier falsch gemacht?

A. S. schrieb:
> Man nutzt i.d.r ja auch nicht die Formel

Ich brauche nur die richtige Formel.
Und bitte unzureichende mathematische Kenntnisse zu entschuldigen.
Gast #6955641
Lesenswert?

Urs H. schrieb:
> Ich brauche nur die richtige Formel.

Die Formel ist richtig, falsch ist die Interpretation, wofür ymin und 
ymax bzw. xmin und xmax stehen.

min bedeutet hier nicht den minimalen Absolutwert. Sondern es steht 
jeweils für den Wert am Anfang deines Bereichs.

max bedeutet hier nicht den größten Absolutwert. Sondern den Wert am 
Ende deines Bereichs.

Wenn du also mit ymin=100mA und xmin=3522 rechnest, geht es auf. Du 
darfst auch den Bereich umdrehen und ymin=1500mA und xmin=2304 rechnen. 
Du darfst die min-max-Zuordnung nur nicht bei x und y "mischen".
OP #6956969
Lesenswert?

W.S. schrieb:
> Dann schau in dein Mathe-Schulbuch.

Schau Du in den Thread, der Fall ist längst gelöst. Schneller als 
gedacht!

W.S. schrieb:
> Mich erstaunt es immer wieder, wie sehr gar vielen Leuten hier die
> Grundlagenkenntnisse fehlen.

Mich erstaunt immer wieder, wie manche in solchen Foren statt schneller 
Hilfsangebote nur Plattformen zur eigenen Selbstdarstellung sehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren