Hallo, ich möchte für eine FFT-Realisierung auf einem FPGA mit Festkommazahlen im Zahlenbereich -1<= x <= 1 multiplizieren. Leider ist mir nicht klar wie es möglich ist z.B. -0,25 darzustellen. 0,25 wäre ja z.B. mit 4,4 bit : 0000 0100 Aber wie komme ich jetzt das negative Vorzeichen hin? Grüße und Danke Patrick
Hi Soweit ich mich erinnere muss man einfach invertieren und 1LSB dazu addieren: 0000 0100 1111 1011 1111 1100 gruß
Hi, das habe ich auch so gemacht. Möchte ich mir jetzt die Vorkammastelle anzeigen lassen, komme ich auf 1111 = (-1) oder? Bzw. heißt das, dass ich mir die Vorkommastelle gar nicht einzeln anschauen kann, sondern erst die ganze Festkommazahl zurückwandeln muss? Gruß Patrick
Das hängt von deiner Definition für "Vorkommastelle" ab. Die hinteren vier Bit abzuschneiden bedeutet eben Abrunden auf die nächstkleinere ganze Zahl. Wenn da 1 herauskommt, heißt das, der genaue Wert lag zwischen 1 und 2. Kommt 0 heraus, lag der genaue Wert zwischen 0 und 1. Und für Werte zwischen -1 und 0 kommt eben -1 heraus. Ist ja auch logisch, die 0 hätte ja sonst einen doppelt so großen Einzugsbereich wie alle anderen Ergebnisse. Lösung: -1 als -0 ausgeben, -2 als -1 usw... das entspricht wohl eher der menschlichen Gewohnheit.
Alex J. schrieb: > Hi > > Soweit ich mich erinnere muss man einfach invertieren und 1LSB dazu > addieren: > 0000 0100 > 1111 1011 > 1111 1100 Das ist nur eine Möglichkeit. Allerdings eine, die aus praktischen Gründen sehr weit verbreitet ist. Auch bekannt als Zweierkomplement. Oft gibt es spezialisierte Befehle, die es ersparen, zuerst das Einerkomplement zu bilden und dann eins zu addieren, um das Zweierkomplement zu bilden, sondern die Sache statt dessen in einer einzigen Operation erledigen.
Patrick schrieb: > Möchte ich mir jetzt die Vorkammastelle anzeigen lassen, komme ich auf > > 1111 = (-1) > > oder? > > Bzw. heißt das, dass ich mir die Vorkommastelle gar nicht einzeln > anschauen kann, sondern erst die ganze Festkommazahl zurückwandeln muss? Nein, daß heißt nur, das du ein anderes Rundungsverfahren für die Abbildung als Ganzzahl wählen mußt. Das von dir verwendete wird üblicherweise als "floor" bezeichnet, also abrunden auf die nächstkleinere ganze Zahl. Runde einfach anders, sinnvoll wäre vielleicht z.B. 0.5 zum Wert zu addieren, bevor man sich die Ganzzahl anschaut. Dann kriegst du folgendes raus: Intervall gerundeter Wert ... -1.5 <= n < -0.5 -1 -0.5 <= n < 0.5 0 0.5 <= n < 1.5 1 ... Beispiele: -0.25: 1111 1100 ;-0.25 +0000 1000 ;+0.5 ----------------- 0000 0100 ;+0.25 ================= 0000 ;round:0 -0.75: 1111 0100 ;-0.75 +0000 1000 ;+0.5 ----------------- 1111 1100 ;-0.25 ================= 1111 ;round:-1
Andere Betrachtungsweise. Statt -1,00 ... 1,00 denkst du in -100% ... 100%. Dem 2er-Komplement ist vollkommen egal, wie du es betrachtest. Es kommen die selben Bits bei heraus.
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.