Forum: Mikrocontroller und Digitale Elektronik Aufsplittung einer Hyperbelfunktion in linearisierte Abschnitte - gute Idee?


von Marcel (Gast)


Lesenswert?

Moin zusammen,

ich stehe gerade vor einem Problem, hab eine Möglichkeit gefunden, und 
wollte mal hören was ihr davon haltet.

Ich messe die Zeit zwischen zwei Impulsen und ordne dieser Zeit einen 
Wert zu. Der Funktionsverlauf ist hierbei "unglücklicherweise" eine 
Hyperbel. Da ich dank vieler sonstigen Rechnungen nicht Unmengen an 
Rechenzeit zur Verfügung habe, ist es schlecht hier die Division 
einzuführen :(

Also hab ich mir folgendes überlegt:

Ich Teile die Funktion in Abschnitte, die ich dann linearisiere, somit 
umgehe ich zumindest die Division. Das bringt zwar einen 
Ungenauigkeitsaspekt mit sich, doch lässt sich dieser ja mit der 
Abschnittsanzahl regeln.

Nun zum Wertebereich: Der Wertebereich ist ziemlich groß, worauf ich auf 
uint32_t gehen muss.
Die Zeit-Achse reicht hierbei von "180ms" bis 1 800 000ms.
Die zugehörige y-Achse von 1 bis 10 000.

Was haltet ihr von der Idee? - Oder habt ihr vielleicht noch eine 
bessere?
PS: Mein µC ist der Atmega169P (32768Hz Taktung). AVR-GCC 
Programmierung.

Merci beaucoup
Marcel

von Nosnibor (Gast)


Lesenswert?

Ich fürchte, so viel schneller als eine Division ist der Tabellenzugriff 
und die anschließende Rechnerei auch nicht.
FPU-Hardware verwendet Näherungsverfahren, um die Division zu 
beschleunigen, aber die haben eben auch eine richtig schnelle 
Multiplikation zur Verfügung, was auf dem AVR für 32bit-Zahlen ja nicht 
mehr gilt. Siehe 
http://en.wikipedia.org/wiki/Division_(digital)#Fast_division_methods

von Jobst M. (jobstens-de)


Lesenswert?

Marcel schrieb:
> PS: Mein µC ist der Atmega169P (32768Hz Taktung). AVR-GCC
> Programmierung.

Controller schneller takten?
Controller, der (schnell) teilen kann?
In Assembler arbeiten?


Gruß

Jobst

von Klaus W. (mfgkw)


Lesenswert?

Ich finde die Idee mit der Tabelle plausibel.
Das habe ich vor Urzeiten auf einem Atari ST mal ähnlich
gemacht für sin und cos, da hat das richtig was gebracht.

von Jobst M. (jobstens-de)


Lesenswert?

Bei komplexen Funktionen wie Sinus, macht das ja auch Sinn.
Aber für 1/n eine Tabelle anzulegen, finde ich schon etwas übertrieben.
Das ist allerdings auch der Grund, warum ich immernoch gerne auf den 
guten, alten 51er zurückgreife - der kann teilen. ;-)


Gruß

Jobst

von Purzel H. (hacky)


Lesenswert?

Eine Division kann man als repetitive Subtraktion machen, das ist auch 
bei 32 bit noch schnell. Ich wuerd's mal mit dem Simulator anschauen.

von Grrrr (Gast)


Lesenswert?

Was ist das denn für eine Hyperbel?
Was für ein mathematischer Zusammenhang?

Ein einfaches Beispiel bei dem die Dauer zwischen zwei Impulsen im 
Zusammenhang mit einer gewissen Form von Hyperbel steht, ist der 
zwischen Frequenz und Periodendauer. In diesem Fall wäre es vielleicht 
auch möglichdie Messmethode so zu ändern, das man die Anzahl Impulse 
eines HW- oder SW-Generators (also eines Timerinterrupts) zwischen zwei 
Impulsen zählt. Dann braucht man keine Division mehr. Höchstens noch 
eine Multiplikation.

Liesse sich das in Deinem Fall vielleicht anwenden?

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.