Forum: Digitale Signalverarbeitung / DSP / Machine Learning Zahlenformate


von dspler (Gast)


Lesenswert?

Hallo,

irgendwie stehe ich gerade voll auf dem Schlauch :(
Für die Uni sollen wir mit Hilfe eines Simulators [für den 2101]
verschiedene Dinge lösen/ausprobieren.
So sollen wir für den Zahlenbereich -1 bis 1 mit einer
Schrittweite von 0.1 die vom Simulator verwendeten
nächstgelegenen Fractional-Zahlen (Fixed) sowie ihre
Interpretation als vorzeicenbehaftete ganze Zahlen (Integer)
und als Hexadezimalzahlen angeben.

Habe ich das so richtig verstanden, dass beispielsweise
Dezimal 000001 (also 1) als Fractional-Zahl 0.000031 und
Hex $0001 ist? Und z.B. 0.9 als Fractional 0.000275 ist?

Danke für Hilfe!

von Mark B. (markbrandis)


Lesenswert?

Wenn ich das noch richtig im Kopf hab:
usw.

Dementsprechend 0.11 = 0,5+0,25 = 0,75 etc.

von dspler (Gast)


Lesenswert?

DANKE!

von Unit* (Gast)


Lesenswert?

Die Frage ist welches Zahlenformat der Simulator verwendet. Meistens ist 
das das Q1.15-Format (Q steht für die Fixkomma-Darstellung, Eins für den 
ganzen Teil, 15 für den Bruchteil der dargestellten Zahl), das 
folgendermaßen definiert ist:

x: x0 x1 x2 x3 ... x15 (BIN)

x = x0 * -2^0 + x1 * 2^-1 + x2 * 2^-2 + ... + x15 * 2^-15 (DEZ)

Z.B.:

1-2^-15 (DEZ) = 1111.1111.1111.1111 (BIN) = FFFF (HEX)
2^-15 (DEZ) = 1000.0000.0000.0001 (BIN) = 8001 (HEX)
-1 (DEZ) = 1000.0000.0000.0000 (BIN) = 8000 (HEX)
0 (DEZ) = 0000.0000.0000.0000 (BIN) = 0000 (HEX)

Diese Darstellung hat den Vorteil, dass das Ergebnis einer 
Multiplikation immer kleiner gleich +/- Eins ist, aber mit der Addition 
muss man höllisch aufpassen:

-1 + 2^-15 (DEZ) = 0x8000 + 0x0001 = 0x8001 = 2^-15 (DEZ)

von dspler (Gast)


Lesenswert?

Hallo,

DANKE auch für Deine Antwort.
Ich habe noch eine Frage, hänge die einfach mal hier an weil es 
thematisch dazu passt. Da der Assembler keine Festkommazahlen umwandeln 
kann sollen wir die 1.15-Werte von Hand in das hexadezimale Format 
umsetzen.
"Berechnen Sie die hexadezimalen 24-bit-Werte"

h0 = 0,048401;
h1 = -0,135834;

Hm, wieso 24-bit-Werte? Ich dachte 16? Zumindest habe ich per Hand
h0 = 0x0640
h1 = 0xEE80
raus. Ist das also falsch?

Danke!!

von Mark B. (markbrandis)


Lesenswert?

Rechne es halt rückwärts: Die Hex-Zahlen in Binärzahlen umwandeln. Da wo 
Einsen stehen wird mit der Wertigkeit des entsprechenden Bits 
multipliziert und aufaddiert.
Das mit den 24 Bit versteh ich auch nicht, wenn von 1.15 Zahlen die Rede 
ist.

von Unit* (Gast)


Lesenswert?

Hm. Ich kenne leider deinen Simulator nicht. Kann es nicht sein, dass 
die Aufgaben zum Verständnis da sind, und mit dem Simulator nicht 
unbedingt zu tun haben?
Oder es kann noch sein, das es um den Akku geht, der in der Regel immer 
genauer ist, als der Rest des Prozessors (siehe Guard-bits).
Was deine Berechnung betrifft: wenn es sich um 24 Bits handelt, musst Du 
auch 24 Bits benutzen, will heißen: zwei Hexa-Stellen fehlen noch.

von Unit* (Gast)


Lesenswert?

Update: leider ist mein Beispiel vom 06.07.2009 fehlerhaft. Das Beispiel 
nochmal richtig:

1111.1111.1111.1111 (BIN) = FFFF (HEX) = -2^-15  (DEZ)
1000.0000.0000.0000 (BIN) = 8001 (HEX) = -1      (DEZ)
0111.1111.1111.1111 (BIN) = 8000 (HEX) = 1-2^-15 (DEZ)
0000.0000.0000.0000 (BIN) = 0000 (HEX) = 0       (DEZ)

von Unit* (Gast)


Lesenswert?

Sorry, es war immer noch nicht richtig, aber so müsste es korrekt sein:

1111.1111.1111.1111 (BIN) = FFFF (HEX) = -2^-15  (DEZ)
1000.0000.0000.0000 (BIN) = 8000 (HEX) = -1      (DEZ)
0111.1111.1111.1111 (BIN) = 7FFF (HEX) = 1-2^-15 (DEZ)
0000.0000.0000.0000 (BIN) = 0000 (HEX) = 0       (DEZ)

von Mark B. (markbrandis)


Lesenswert?

Unit* schrieb:
> Update: leider ist mein Beispiel vom 06.07.2009 fehlerhaft. Das Beispiel
> nochmal richtig:
>
> 1111.1111.1111.1111 (BIN) = FFFF (HEX) = -2^-15  (DEZ)
> 1000.0000.0000.0000 (BIN) = 8001 (HEX) = -1      (DEZ)

Bei mir ist 1000 0000 0000 0000 = 0x8000

> 0111.1111.1111.1111 (BIN) = 8000 (HEX) = 1-2^-15 (DEZ)

Und 0111 1111 1111 1111 ergibt bei mir 0x7FFF.

Ah, jetzt, ja :-)

von Unit* (Gast)


Lesenswert?

.048401 (DEZ) = 063201 (HEX)
-.135834 (DEZ) = EE9CFD (HEX)

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.