Hi, ich versuche mich gerade an einem Signalprozessor und möchte ein Filter berechnen. Der DSP verarbeitet vorzeichenbehaftete Zahlen im Format G1,15. Damit ich kontrollieren kann, ob alles richtig gerechnet wird, suche ich eine einfache Möglichkeit, eine solche Zahl auf dem PC in einen Dezimalwert umzurechnen und umgekehrt. Im großen Internet bin ich leider nicht fündig geworden. Kennt vielleicht jemand ein solches Programm oder Internetformular? Jürgen
Hi, schau nach fractional arithmetic Q1.15 deine Zahl * 2^-15 in float ausdrücken DK
Vielen Dank für die Antwort. Leider trifft sie noch nicht den Kern, weil ich wahrscheinlich zu wenig geschrieben habe. Ein Beispiel. Wenn ich im Debugger eine Filterformel ablaufen lasse und mir am Ende das Ergebnis ansehe, bekomme ich einen binären Wert angezeigt. Es ist ein Festkommaformat G1,15. Nun möchte ich als Mensch gern wissen, wie die Zahl im Dezimalsystem aussieht. Vielleicht möchte ich gern eine andere Zahl drüberschreiben. Dann benötige ich eine Konvertierung dieser Zahl in das Festkommaformat des Prozessors. Eigentlich wollte ich den Prozessor programmieren möchte und nicht Konvertierungsprogramme. Wurde so was nicht schon lange erfunden? Jürgen
Ein Rechenprogramm das zwischen binaer und dezimal unrechnen kann sollte eigentlich zur Standardausruestung eines Entwicklers gehoeren. Zur Not tut's dafuer sogar der Windows-Taschenrechner.
Jürgen, das was du meinst IST das fractional format. Bsp: 0.4563 in Q1.15 ausgedückt. Dazu wird die Zahl mit 2^15 multipliziert und nur die Ganzzahl verwendet. 0.4563 * 2^15 = 14952.0384 --> Verwende nur 14952 zum Rechnen im uC, der Datentyp ist dann INT (16 BIT) um diese Q1.15 Zahl wieder in eine vom Menschen lesbare Zahl um zu wandeln, muss diese durch 2^15 geteilt werden. Das Ergebnis muss aber in float dargestellt werden. also: 14952 / 2^15 = 0.456298.... Durch die Quantisierung bekommt man einen kleinen Fehler.. DK
Hier ist das Format und sein Einsatz auch erklärt: http://centerk.net/dspblog/2007/09/17/about-fixed-point-arithmetic/
Ich werde morgen mal nachrechnen, ob 0b0011101001101000 (0x3a68) wieder 0.4563 dezimal ergibt. Gute Nacht!
Heute habe ich nachgerechnet. Das Ergebnis beträgt tatsächlich 0.456298828125. Tolle Sache. Bei negativen gebrochenen Zahlen habe ich die Regel aus dem Hinweis von hans angewandt und das negative Ergebnis der Multiplikation mit 2^15 von 65536 abgezogen. Diese Zahl lässt sich dann wieder in eine Binärzahl umwandeln und in den Prozessor schieben. Wahrscheinlich werde ich mir ein kleines Programm schreiben, dass diese Schritte für mich übernimmt. Vielen Dank für die helfenden Hinweise! Jürgen
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.