www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Umrechnung Zahlenformat G1,15 nach dezimal

Autor: Jürgen J. (kroenung)
Datum: 20.11.2008 20:46

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
Autor: DK (Gast)
Datum: 20.11.2008 20:55

Hi,

schau nach fractional arithmetic Q1.15

deine Zahl  * 2^-15 in float ausdrücken

DK
Autor: Jürgen J. (kroenung)
Datum: 20.11.2008 21:11

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
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite
Datum: 20.11.2008 21:38

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.
Autor: DK (Gast)
Datum: 20.11.2008 21:49

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
Autor: hans (Gast)
Datum: 20.11.2008 22:26

Hier ist das Format und sein Einsatz auch erklärt:

http://centerk.net/dspblog/2007/09/17/about-fixed-...
Autor: Jürgen J. (kroenung)
Datum: 20.11.2008 22:35

Ich werde morgen mal nachrechnen, ob 0b0011101001101000 (0x3a68) wieder
0.4563 dezimal ergibt. Gute Nacht!
Autor: Jürgen J. (kroenung)
Datum: 21.11.2008 07:36

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

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Mit dem Abschicken erkennst du die Nutzungsbedingungen an.
- Amazon.de Anzeige -
amazon.de

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net