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
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
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
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.
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
Eine Division kann man als repetitive Subtraktion machen, das ist auch bei 32 bit noch schnell. Ich wuerd's mal mit dem Simulator anschauen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.