Mischung von 64-Bit-Integer mit 32-Bit-Float-Operationen

Gast #5219174
Guten Abend,

ich habe gerade einen Knobelaufgabe, bei der ich gerade nicht weiter 
weiss. Ich habe zwei Variablen a und b (beide 64 Bit signed Integer), 
deren Differenz jederzeit klein genug ist, daß sie problemlos in eine 
16-Bit-Integer-Variable passt, also auch problemlos in eine 32 Bit 
float-Variable. Sie wird auch als float weiterverarbeitet.

Allerdings will ich vor der Differenzbildung den Zweig a mit einem IIR 
1. Ordnung leicht filtern. Das Filter ist als float implementiert. Zweig 
b darf keinesfalls gefiltert werden. Durch die Filterung wird die 
Differenz der beiden Variablen tendenziell eher kleiner - zur 
Mantissengröße im 32-Bit-float habe ich weiterhin mehr als genügend 
Sicherheitsabstand.

Das Ganze will ich möglichst effizient für einem ARM Cortex M4 
implementieren. Die Variablen a und b passen zwar jeweils in die 
52-Bit-Mantisse einer double-Variable, aber das wäre sozusagen die 
letzte Lösung. Mein Gefühl sagt mir, daß es eine relativ einfache 
Möglichkeit geben muss, den gefilterten und den ungefilterten Zweig in 
einen großen Integer- und einen kleinen Float-Teil aufzuspalten.

Wer hilf mir, den gordischen Knoten zu zerschlagen?

Viele Grüße
W.T.
Angehängte Dateien:
Gast
Was hindert Dich, die (Ziel-) Formeln hinzuschreiben? Mit Grenzen 
etwaiger Parameter und Eingangswerte. So rate ich rum, was ein Faktor k 
zwischen 0 und 1 wohl bedeuten mag, für Auslösung und Genauigkeit...
Das Blockdiagramm ausgeschrieben sieht so aus:
mit
Da K und omega float-Variablen sind, sind also fast alle Terme gemischte 
Multiplikationen aus 64-Bit-Integer und 32-Bit-Float.
Es ist aber schon klar, dass float in diesem Kontext nichts bringt... 
bleib bei 64 bit integern und mach allenfalls fixedpoint, dh manuell das 
komma festhalten.
Eine Signalverarbeitungsaufgabe ? Welcher Sensor, welches Stellglied 
bringt mehr als zB 24 bit ?
Gast
Walter Tarpan schrieb:
> Das Ganze will ich möglichst effizient für einem ARM Cortex M4
> implementieren. Die Variablen a und b passen zwar jeweils in die
> 52-Bit-Mantisse einer double-Variable, aber das wäre sozusagen die
> letzte Lösung.

Effizient bezüglich des Platzes oder der Rechenzeit?
Irgendwo gibt es hier Ausführungszeiten für double Grundrechenarten, die 
auf einem STM32F4.. mit 168 MHz jeweils um 1 µs (div) oder deutlich 
darunter liegen (add, sub, mul). Deine 'letzte Lösung' könnte vielleicht 
völlig ausreichen. Der Vorteil ist, im Gegensatz zu einem 
Skalierungsmonster die Formel direkt und nachvollziehbar formulieren zu 
können.
Probiere es einfach aus!
m.n. schrieb:
> Deine 'letzte Lösung' könnte vielleicht
> völlig ausreichen. Der Vorteil ist, im Gegensatz zu einem
> Skalierungsmonster die Formel direkt und nachvollziehbar formulieren zu
> können.
> Probiere es einfach aus!

Mein Vorbehalt gegen die double-Implementierung (die ich 
selbstverständlich schon gemacht habe - schließlich ist sie der 
einfachste Weg, jede andere Lösung testen zu können) liegen an einer 
ganz anderen Stelle:

Ich handele mir damit eine neue Limitierung der Zähler ein. An allen 
anderen Stellen arbeite ich nur mit Differenzen. Momentan laufe ich 
damit noch in keine Probleme. Das kann sich aber mit der nächsten 
Änderung der Anforderungen schnell ändern.
Beitrag #5219850 wurde von einem Moderator gelöscht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.