Hallo Ich habe eine Anfänger-Frage: Ich habe ein Algorithmus in C geschrieben, und möchte es auf Basis von Festpunkt-Arithmetik umwandeln. Was brauche ich dafür und was muss ich tun?. Gibt es bereits für C Bibliotheken dafür? und falls ja wo finde ich diese? Danke
Ich nehme an du willst das auf ein FPGA umsetzen (ansonsten bist du hier im falschen Forum...). Mit C hast du dort erstmal schlechte Karten. Es gibt zwar Tools, aber die sind teuer. Zur einfachen Umsetzung sollte dein Algorithmus möglichst ohne komplizierte Funktionen auskommen (keine Division/Wurzelziehen/Sinus usw.). Als nächstes musst du noch die Anzahl der benötigten Stellen ermitteln (Vor- und Nachkomma). Dazu kannst du dir den Fehler ausrechnen oder den Algorithmus einfach mal mit verschiedenen Einstellungen auf deinem Rechner simulieren. Dazu einen der Int-Datentypen von C verwenden. Aber ein paar genauere Angaben wären schon gut.
Mike wrote: > Ich nehme an du willst das auf ein FPGA umsetzen (ansonsten bist du hier > im falschen Forum...). Mit C hast du dort erstmal schlechte Karten. Es > gibt zwar Tools, aber die sind teuer. > > Zur einfachen Umsetzung sollte dein Algorithmus möglichst ohne > komplizierte Funktionen auskommen (keine Division/Wurzelziehen/Sinus > usw.). Als nächstes musst du noch die Anzahl der benötigten Stellen > ermitteln (Vor- und Nachkomma). Dazu kannst du dir den Fehler ausrechnen > oder den Algorithmus einfach mal mit verschiedenen Einstellungen auf > deinem Rechner simulieren. Dazu einen der Int-Datentypen von C > verwenden. Aber ein paar genauere Angaben wären schon gut. Das Algorithmus kodiert ppm-Bilder (der inhalt besteht nur aus Zahlen zwischen 0 und 255) in Jpeg-LS (bzw in Lossless Jpeg) und dekodiert sie zurück. Es handelt sich nur um einfache mathematische Funktionen (addition, subtraktion, es gibt keinen <math.h>) und ich würde mit höchstens 2 Nachkommastellen auskommen. Was meinst du mit "Int-Datentypen von C verwenden" ?
Stelle Deinen Algo erstmal auf INT um und teste, ob du überall korrekt rundest und hochaufgelöst rechnest. Dann Ablauf von Rechenstrukturen trennen. Wenn du wirklich so wenige math benötigst ist, es sicher einfach, zumal eine Division im FPGA auch ein klacks ist. Wurzel etwas weniger und sin reicht meist über Tablle, wenn man ordentlich interpolieren kann.
> Was meinst du mit "Int-Datentypen von C verwenden" ? Ich würde vor der Umsetzung in einem FPGA den Algorithmus erstmal in C auf Festkommaarithmetik umstellen. Damit kannst du recht einfach ausprobieren unter welchen Bedingungen er noch funktioniert. In C wäre das die Datentypen short int, int oder long (mit oder ohne Vorzeichen). Das weisst du als C-Programmierer aber sicherlich selber ;). Um möglichst einfach von C auf das FPGA zu kommen könntest du dir mal SystemC anschauen. Wikipedia liefert da ein paar Links. Ansonsten wirst du dich wohl mit VHDL auseinander setzen müssen. Für ein erstes Projekt ist das aber ziemlich heftig.
@Besserwisser Das Division nicht weiter schwierig ist stimmt schon. Problem ist nur das sie vergleichsweise lange dauert und einiges an Platz wegnimmt. Wenn man eine Division vermeiden kann, dann sollte man das tun (z.B. in Multiplikation umwandeln).
Mike wrote: > Ich würde vor der Umsetzung in einem FPGA den Algorithmus erstmal in C > auf Festkommaarithmetik umstellen. Damit kannst du recht einfach > ausprobieren unter welchen Bedingungen er noch funktioniert. In C wäre > das die Datentypen short int, int oder long (mit oder ohne Vorzeichen). > Das weisst du als C-Programmierer aber sicherlich selber ;). d.h. wenn das Programm nur int-Datentypen ein- und ausgibt (ist auch der Fall) wäre es bereits auf Festkommaarithmetik umgestellt? Es geht mir zuerst darum diese Umstellung durchzuziehen.
@Sami Fanna >d.h. wenn das Programm nur int-Datentypen ein- und ausgibt (ist auch der >Fall) wäre es bereits auf Festkommaarithmetik umgestellt? Es geht mir Ja. Aber auch die interne Verarbeitung muss rein auf INT Typen basieren. MfG Falk
Ich weiß ja nicht wo das Problem ist. Da er Zahlen zwischen 0 und 255 benutzt sind keine Fließkommazahlen vorhanden. Du einfache Additionen und Subtraktionen ändert sich dieser Zustand auch nicht ,es sei denn Du mittelst über mehere Werte.
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.