Forum: Mikrocontroller und Digitale Elektronik Berechnung einer Funktion oder Approximation?


von Kay H. (kayh)


Lesenswert?

Eine weitere Frage an die Experten:
Atmega16, Capturefunktion des Timer1:
Um eine Geschwindigkeit aus der Periodenlänge zweier Impulse (Wegstrecke 
zwischen den Impulsen ist konstant) wäre es notwendig, eine Funktion aus 
KonstanteA/(KonstanteB*t) zu berechnen. Da diese Funktion ja eine 
Hyperbel ist:
Sollte man die Geschwindigkeit tatsächlich durch den Controller 
berechnen lassen, oder sollte ich approximieren? Entweder mehrere 
lineare Funktionen in entsprechenden Intervallen? Oder über 
Taylor-Polynom? Oder über eine Tabelle? Wobei ich mich bei der letzten 
Variante sträube - zu viele Werte...
Wie löst man solch ein Problem elegant?

Vielen Dank schon mal,
Kay

von Karl H. (kbuchegg)


Lesenswert?

Kay H. schrieb:

> Sollte man die Geschwindigkeit tatsächlich durch den Controller
> berechnen lassen,

eine Multiplikation und eine Division?

> oder sollte ich approximieren?

Und du denkst das geht schneller als eine Mutliplikation und eine 
Divisoin?


> Entweder mehrere
> lineare Funktionen in entsprechenden Intervallen? Oder über
> Taylor-Polynom? Oder über eine Tabelle? Wobei ich mich bei der letzten
> Variante sträube - zu viele Werte...
> Wie löst man solch ein Problem elegant?

Man implementiert erst mal die naheliegenste Version. Und die ist: wenn 
eine Multiplikation und eine Division gefordert sind, dann macht man 
auch genau das.

Dann denkt man mal ganz kurz darüber nach, wieviel Zeit man eigentlich 
zwischen 2 Capture Intervallen hat (hängt von der Geschwindigkeit und 
der Wegstrecke ab), setzt das in Relation zu dem Zeoitverbrauch einer 
Multiplikation und einer Division und lächelt vor sich hin, weil man 
davor Angst hatte.

Hinweis: den Löwenanteil deines Zeoitverbauchs wird die Anzeige 
verbraten. Dagegen ist die Berechnung sozusagen Peanuts.

von Kay H. (kayh)


Lesenswert?

OK, danke. Ich muss zugeben- ich weiß es nicht. Ich hatte nur die 
Vermutung, dass eine Division für den Atmega schwieriger, d.h. 
zeitaufwändiger, sei, als eine Multiplikation (bei Taylor z.B.)

von Purzel H. (hacky)


Lesenswert?

Ein Taylor braucht ausschlieslich multiplikationen und Additionen. Das 
geheimniss dabei ist mit Festkomma zu arbeiten.

von Kay H. (kayh)


Lesenswert?

... und genau das war meine Überlegung. Die Frage wäre für diesen Fall, 
wie weit man das treiben müsste (Wievielte Ordnung des Polynoms), um 
vernünftige Ergebnisse zu erhalten, also mit geringer Abweichung zu 
rechnen.
Ich hatte es mal von Hand bis zur zweiten Ordnung durchgespielt. Aber 
dafür müsste ich auch mehrere Intervalle mit mehreren Gleichungen 
definieren.
Ich muss es mal ausprobieren, wenn ich wieder mal Zeit habe.

von Hott (Gast)


Lesenswert?

Mach doch mal eine Simulation... Ich probier das jeweils durch, wieviele 
Stellen habe ich, wieviele Stellen will ich, wieviele Rechenleistung hab 
ich dafuer. vielleicht kann man's auch mit einer Tabelle machen, und 
dann dazwischen linear Interpolieren.

von Kay H. (kayh)


Lesenswert?

Keine Ahnung mit der Simulation. Womit machst du das?
 Mit Tabellen wollte ich eigentlich nicht arbeiten. Zum einen stehe ich 
auf dem Schlauch, wie ich die handle, zum zweiten wollte ich eigentlich 
nur einfach einen Parameter ändern müssen, um z.B. die Impulszahl meines 
Gebers anpassen zu können.

von Hott (Gast)


Lesenswert?

Eben ich mache eine Approximation im Intervall. Fuer ein Polynom mit 
1.,2.,3.,4.ten Ordnung. Eine least Square Mehode gewichtet den ganzen 
Bereich gleich. Vieleicht ist das auch nicht so wichtig. Vielleicht 
muesste man Zentrum mehr Genauigkeit haben.

Das rechnet man erst mal als Float, dann rechnet man nochmals mit 
Ganzzahl, und schaut ob das immer noch gut ist. Fuer einen NTC Sensor, 
der hat eine Exponential funktion, habe ich mal bis zur 6.Ordnung 
durchgespielt um dann schweren Herzens doch die Exponential funktion mit 
float zu rechnen.

Ich mach's jeweils interaktiv mit Delphi, um das zu Visualisieren. Es 
geht aber auch irgend einer anderen Umgebung. Die Koeffizienten auf 
Schiebereglern, die Fehlerkurve und das Integral drueber.

von Ralph (Gast)


Lesenswert?

Kay H. schrieb:
> eine Funktion aus
> KonstanteA/(KonstanteB*t) zu berechnen. Da diese Funktion ja eine
> Hyperbel ist:

Was ist an der Funktion denn eine Hyperbel ?

Das ist nichts anderes als eine Multiplikation mit einer Konstanten.
Absolut Linear .


Setze die Klammern mal anders und du wirst sehen was ich meine.

von Kay H. (kayh)


Lesenswert?

t ist die Unbekannte. Mal dir mal die Funktion 1/x auf und du wirst 
sehen, dass sie alles andere als linear ist.

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.