Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Vorüberlegungen für eine LUT


von sergej (Gast)


Lesenswert?

Hallo,
ich habe folgendes problem:
Ich möchte ich LUT machen und die soll möglichst klein sein.
Mein Inhalt sind Festkommazahlen von 0-90. ich möchte eine Genauigkeit 
von 0,1 erreichen.

jetzt weiss ich, dass ich für die mantisse 7 bit brauche. Aber wie lege 
ich jetzt die bit für die nachkommastellen fest?

ich könnte jetzt sagen mit 0.000111 bekomme ich 0,109375 hin, mit 6 bit 
sieht das schon ok aus. Aber ist das auch die beste Lösung? das muss ja 
irgendwie mathematisch zu errechnen sein

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

sergej schrieb:
> Aber wie lege ich jetzt die bit für die nachkommastellen fest?
Naja ganz einfach:
Mit 1 Bit kannst du 1/2 (=0,5) darstellen. Mit 2 Bit kannst du 1/4 
darstellen, also 0,25. Mit 3 Bit kannst du 1/8 darstellen. Du willst 
aber mindestens 1/10. Also brauchst du 4 Bit. Damit kannst du bis auf 
1/16, also 0,0625 auflösen.  Mit weniger Bits geht es nicht. Und auf 
der anderen Seite kommst du auch mit vielen Bits niemals(!) ganz genau 
auf 0,1 oder 0,2. Das wird in den allermeisten Fällen immer ein 
0,20004021 (oder so ähnlich) sein...

Dann müsstest du das Ergebnis in 1/10 Einheiten in einen Integer 
abspeichern. Also z.B. statt 123,4 Metern einfach mit 1234 Dezimetern 
rechnen. So würde ich das machen. Denn damit bin ich immer auf den 
Zehntel Meter genau und verschenke nicht einige Bits...

Und was ist jetzt de Unterschied zwischen "deiner" und "meiner" 
Darstellungsweise? Ich habe mein Zahlensystem auf Dezimeter ausgelegt 
und habe so im Kopf eine "Kommaverschiebung" gemacht. Mein Komma ist im 
Kopf fest um den Faktor 10 verschoben.
Und du musst deine Meter mit Binärzahlen irgendwie Dezimal teilen...

: Bearbeitet durch Moderator
von Sergej (Gast)


Lesenswert?

Ah na klar, hab gestern vor lauter Bäumen den Wald nicht mehr gesehen, 
ist ja völlig klar :-D

Bezüglich der kommaverschiebung hast du natürlich recht, die gibt es bei 
mir auch nur im Kopf und ohne irgendwelche divisionen^^. Ich musste aber 
die Länge für mein Datenwort festlegen und da war ich mir recht unsicher

von Wolfgang A. (Gast)


Lesenswert?

sergej schrieb:
> Mein Inhalt sind Festkommazahlen von 0-90. ich möchte eine Genauigkeit
> von 0,1 erreichen.

D.h. du möchtest den Zahlenbereich von 0/10 bis 900/10 in deine Tabelle 
packen. Mit 10bit hättest du den Bereich 0..1024 zur Verfügung. Wenn das 
Arbeiten mit der Tabelle fix gehen soll, tust du also gut daran, zwei 
Byte pro Eintrag vorzusehen, wenn Speicherplatz absolut knapp ist, 
kannst du natürlich auch anfangen die jeweils 10Bit kompakter abzulegen.

Stellt sich natürlich die Frage, warum du mit Festkommazahlen arbeiten 
möchtest und nicht einfach deinen Bereich geeignet umnormierst.

von foo (Gast)


Lesenswert?

sergej schrieb:
> Mein Inhalt sind Festkommazahlen von 0-90. ich möchte eine Genauigkeit
> von 0,1 erreichen.

Das sind gut 900 verschiedene Werte und dafür braucht man 10 Bit.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Die Frage kann man mit den gegebenen Informationen nicht beantworten:

Es ist eine Funktion f(x) zu approximieren, wozu Stützstellen f_i (in 
einer Nachguck-Tabelle abgelegt) verwendet werden sollen.  Werden die 
f_i mit N Bits Nachkommastellen dargestellt, dann lässt sich der dadurch 
entstehende Fehler Δf nach oben abschätzen durch
unter der Annahme, dass die Werte f_i an den Stellen x_i mit einer 
hinreichend großen Genauigkeit vorberechnet wurden und zur nächsten 
darstellbaren Festkommazahl gerundet sind.

Zur Berechnung von f(x) wird das nächste x_i aufgesucht und das 
zugehörige f_i statt f(x) verwendet.  Bei äquidistanten Stützstellen 
kann man immer erreichen, dass |x - x_i| <= Δx/2 ist wenn Δx der Abstand 
der Stützstellen ist.  Damit ergibt sich als Abschätzung für den Fehler

Die erste Abschätzung folgt aus der Dreiecksungleichung; die zweite wenn 
man f um x_i in eine Taylorreihe entwickelt und die Entwicklung nach dem 
0. Glied abbricht und eine Restgliedabschätzung nach Schlömlich vornimmt 
(unter der Annahme, dass f differenzierbar ist).  Die dritte Abschätzung 
schätzt den Betrag der Ableitung gegen das Supremum der Ableitung im 
tabellierten Intervall ab.

In den Fehler geht also nicht nur die Darstellung der Festkommazahlen 
ein, sondern — oh Wunder — auch der Abstand der Stützstellen und 
Eigenschaften der zu tabellierenden Funktion.

In deinem Falle willst du erreichen, dass
Falls die so erhaltenen fehlerbehafteten Werte in Rechnungen eingehen, 
dann ist natürlich noch deren Konditionierung zu berücksichtigen und der 
o.g. Fehler so zu gestalten, dass nach der Berechnung der Fehler 
kleiner als 0.1 ist.

Ein sinnvolles Layout einer Nachguck-Tabelle ist so beschaffen, dass
Wenn Δf winzig klein gemacht wird durch sehr viele Nachkommastellen, 
aber zu wenig Stützstellen vorhanden sind, ist das offenbar 
Verschwendung.  Ditto wenn die Stützstellen sehr dicht sind und dadurch 
immer ein Haufen aufeinander folgende Tabelleneinträge den selben Wert 
haben weil mit zu geriner Genauigkeit gespeichert.

Am einfachsten ist natürlich wenn f eine konstante Funktion ist: dann 
ist sup|f'| = 0.  Ebenfalls einfach sind Sinus, Cosinus und 
Arcus(co)tangens wegen sup|sin'| = 1.

Wenn du also z.B. sin in [0,pi/2] (d.h. 0° bis 90°) tabellieren willst, 
sollten die Stützstellen nicht weiter als 0.1 (bzw. ca 5.7°) voneinander 
entfernt sein und die Tabelleneinträge mindestens 4 Nachkommastellen 
haben.  Für die Tabelle genügen 17 Einträge; jeweils in Abständen von 
pi/32 bzw. 90°/16.

Dabei bin ich davon ausgegangen, dass eine 2-er Potenz für die 
Einteilung einfacher ist als z.B. eine Einteilung in 12 Intervalle, die 
bei 4 Bits ebenfalls ausreichend ist.  Das hat aber nur rechentechnische 
Gründe beim Auffinden des Stützpunktes, evtl. sind auch 12 Stützstellen 
günstiger da 90°/12 = 7.5° ein halbwegs runder Wert ist.

Zu beachten ist, dass die obige Abschätzung i.d.R nicht scharf ist, d.h. 
auch mit weniger Bits bzw. größeren Abständen bleibt man u.U. unter dem 
gewünschten Fehler.

von Wolfgang A. (Gast)


Lesenswert?

Statt hier in die Tiefen einer exakten mathematischen Beschreibung 
abzutauchen, ohne über die nötigen Informationen zu verfügen, wäre 
vielleicht erstmal eine etwas genauere Beschreibung des Problems und 
Hintergrundinformation dazu hilfreich.

von Possetitjel (Gast)


Lesenswert?

Johann L. schrieb:

> Ein sinnvolles Layout einer Nachguck-Tabelle ist so
> beschaffen, [...]

Sehr hübsch!

Und jetzt alles nochmal für die Hermite-Interpolation :)

SCNR

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.