www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik code in integer arithmetik übersetzen


Autor: Samuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
folgenden Codeteil soll ich in integer arithmetik übersetzen, da der 
Controller keine floating point unit besitzt, und somit nur über eine 
library float zahlen rechnen könnte, was zu einr zu langen rechenzeit 
führen würde. Was muss ich beim überetzen in integer arithetik beachten?

Gruß
Samuel


double xv0, xv1 = 0.0, uf, phi = 1.2566370614e+05;




"voltage"-controlled oscillator */
        phi += (uf *  2.2222222222e-05);  /* T */
        while (phi < -PI) phi += TWOPI;
        while (phi >= +PI) phi -= TWOPI;
        /* phase detector */
        double ud = in.im * cos(phi) - in.re * sin(phi);
        /* loop filter (hf gain = tau2/tau1) */
        xv0 = xv1;
        xv1 =  1.7944313386e+03 * ud;    /* (tau2/tau1) / G */
        uf += (xv1 -  9.8044334903e-01 * xv0);  /* C */
        return phi;

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest beachten, dass du mit normalen (32bit) Integern nie und 
nimmer auch nur annährend die Genauigkeit von Double erreichen wirst, 
zumindest nicht ohne ähnlich viel Speicher wie die Libs zu verbrauchen.

Nimmst du dann 64bit Ints hast du riesige und langsame modulo-, div und 
mul Operationen.

Probier doch erstmal float.

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nötige Genauigkeit kontrollieren und verringern.
Mit den vielen Nachkommastellen in den Konstanten sieht das schlecht 
aus.
In eine Festpunktzahl mit 32 Bit passen eben maximal knapp 9 Stellen.
Und du bist in den Konstanten von 2.22e-05 bis 1.25e+05 unterwegs, das 
sind schon ganz ohne weitere Berechnungen 10 Kommastellen.

Wenn die genauigkeit von 32 Bit ausreicht:
Sieh dir mal die Festpunktarithmetik von DSPs an, hier war der 
Wertebereich von -1..+1, und die Berechnungen sind recht einfach. Aber 
da musst du dein ganzes Modell etwas umskalieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail ü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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.