Werte per quadratscher Gleichung berechnen ?

OP #2423739
Lesenswert?

(Betr.: C auf ATMEGA 328)

Hallo,
eine Sensor-Kennlinie lautet wie folgt:

a=17,1218388508 (offset)
b=0,1455858690 (Factor)
c=0,0000885752 (quadratic)

pulsetime = a + b*Temp + c*Temp² (quadratische Funktion)
Wertebereich für Temp = 40..170°C
Das Ergebnis (pulsetime) muss eigentlich nur in 0,05 Schritten genau 
sein..


Ich würde gerne Float-Berechnungen umgehen (wg. Geschwindigkeit),
daher die Frage,
kann man das ganze (quadratisch) irgendwie mit Festkomma rechnen ?
(Festkommaarithmetik)
oder ist es schneller*, einfach eine Wertetabelle anzulegen 
(lookuptable) *bzgl. Ausführungsgeschwindigkeit) ?

Der Vorteil, wenn ich es als quadratischen Formel implementieren würde, 
wäre, dass man zur Kalibration einfach die drei Faktoren a,b,c 
einstellbar macht.
(System muss regelmäßig wiederkehrend kalibriert werden, Sensoren werden 
nach einiger Zeit ausgetauscht, da verschlissen)
Moderator (Firma: Titel) Persönliche Seite #2423761
Lesenswert?

Friedo B. schrieb:
> C auf ATMEGA 328

Friedo B. schrieb:
> Das Ergebnis (pulsetime) muss eigentlich nur in 0,05 Schritten genau
> sein..
Wie meinen? Eine Ganzzahl auf 0.05 genau?

Friedo B. schrieb:
> oder ist es schneller*, einfach eine Wertetabelle anzulegen
> (lookuptable) *bzgl. Ausführungsgeschwindigkeit) ?
Ja.

> Der Vorteil, wenn ich es als quadratischen Formel implementieren würde,
> wäre, dass man zur Kalibration einfach die drei Faktoren a,b,c
> einstellbar macht.
3 Ecken zum Abgleich. Das nenne ich nicht "einfach"... :-o

BTW:
> a=17,1218388508 (offset)
> b=0,1455858690 (Factor)
> c=0,0000885752 (quadratic)
float kennt nur 6 signifikante Stellen. Das ist dir klar?
Du hast also reell nur
> a=17,1218 (offset)
> b=0,145585 (Factor)
> c=0,0000885752 (quadratic)
Gast #2423762
Lesenswert?

ob nun Wertetabelle oder Festkomma schneller ist, ist abhängig davon 
wieviele Werte du in der Tabelle hättest.

Festkomma ist natürlich überhaupt nur sinnvoll wenn du mit ganzzahlen 
einen vertretbaren Wertebereich erstellen kannst.

z.B.:

wir machen deine 3 floats zu 3 int32 indem wir einfach alle 3 zahlen mit 
z.B.
1000000 mutliplizieren, dann hast du

a=17121838
b=145585
c=88

musst halt schauen das du eine möglichst hohen Faktor nimmst, aber nich 
so hoch das eine Zahl 2^31 (2147483648) übersteigen kann, bzw. 2^32 wenn 
du kein vorzeichen brauchst.
OP #2423787
Lesenswert?

Danke schon mal !

Wertebereich "Temp" = 40 ... 170 (steht ja oben schon)
Wertebereich Ergebnis = ca. 23 ... 44 (kann man ja ausrechnen ;-)

habe jetzt noch das hier gefunden:
--> http://www.mikrocontroller.net/articles/Festkommaarithmetik
das fand ich interessant -> ich denke, so könnte ich das hinbekommen.

Es geht ja neben Addition nur um Multiplikation (siehe Formel)

also wenn ich Euch richtig verstanden habe:

Berechnung in Float: "langsam"
Berechnung in Festkommaarithmetik: "schneller"
Lookup-Table: "am schnellsten" (auch mit 100-200 Wertepaaren ?)

(?)




B.T.W. haben die ARM Cortex M0 / M3 eigentlich FPU's ?
#2423790
Lesenswert?

Friedo B. schrieb:
> (auch mit 100-200 Wertepaaren ?)

Egal wieviele Wertepaare. Solang dir der Speicher nicht ausgeht, ist die 
Lookup-Tabelle immer am schnellsten.

Und wenn du dir durch eine Tabelle die komplette Float-Bibliothek 
einsparen kannst, darf die schon recht groß werden um auf denselben 
Flash-Bedarf zu kommen.

Als Mittelweg kannst du dir auch nur eine Tabelle mit Stützpunkten 
anlegen, und dazwischen linear interpolieren.
OP #2423799
Lesenswert?

"irgendwer" schrieb:
> ob nun Wertetabelle oder Festkomma schneller ist, ist abhängig davon
> wieviele Werte du in der Tabelle hättest.

OK.

Εrnst B✶ schrieb:
> Egal wieviele Wertepaare. Solang dir der Speicher nicht ausgeht, ist die
> Lookup-Tabelle immer am schnellsten.

OK, alles klar...

> Als Mittelweg kannst du dir auch nur eine Tabelle mit Stützpunkten
> anlegen, und dazwischen linear interpolieren.
ich denke darauf wird's hinauslaufen...

Danke noch mal.
#2423812
Lesenswert?

Friedo B. schrieb:

>> Als Mittelweg kannst du dir auch nur eine Tabelle mit Stützpunkten
>> anlegen, und dazwischen linear interpolieren.
> ich denke darauf wird's hinauslaufen...

Hat dann wiederrum den Vorteil, dass du praktisch jede beliebige 
Kurvenform hinkriegst. Hat allerdings den Nachteil, dass du bei 
Kalibrieren mehr Aufwand treiben musst.

> Der Vorteil, wenn ich es als quadratischen Formel implementieren
> würde, wäre, dass man zur Kalibration einfach die drei Faktoren
> a,b,c einstellbar macht.

Und die 3 Faktoren kriegt derjenige, der die Kalbrierung machen muss, wo 
her?

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