Hallo Klebwax,
Zitat Zitat von Klebwax Beitrag anzeigen
n zusammen mit der Abtastrate gibt die Grenzfrequenz des Tiefpasses an. Man muß bei der Integerrechnung nur darauf achten, daß beim Teilen nicht unten zuviele Bits verloren gehen. Man sollte also die Messwerte vorher nach oben im Bereich des Integers verschieben. Diese einfache Rechnung kann man leicht z.B. in der Auslesefunktion des ADC unterbringen.
Ich habe oft einige Zeit aufgewendet um FP-Operationen aus meinen Projekten zu eliminieren.
Spart einiges an Speicher (weil die FP-Bibliothek nicht eingebunden werden muss) und viel Rechenzeit.

Da hatten sich einige Kunden gewundert, weil alle anderen Entwickler meinten, dies wäre nur mit neuer Hardware zu machen.

Zum Skalieren/Abgleichen von analogen Eingängen habe ich meistens mit Brüchen gearbeitet, also
(x * k1) / k2;
Aufpassen muss nur, dass man bei der Multiplikation mit k1 keinen Überlauf bekommt, aber mit den richtigen Werten für k1 und k2 bekommt man die krümmsten Faktoren hin. Intern habe ich dann z.B. mit 1/100 Grad gerechnet, dann braucht man auch keine Komma-Zahlen. Das Komma gabs dann nur bei der Ausgabe und da ist es nur Zeichenmanipulation.

Wie schon gesagt wurde, muss man etwas mit den Wertbereichen aufpassen, damit man auf keinen Fall Under-/Overflows erzeugt. Aber auch FP hat da ihre Tücken!

Da hatten ja auch die Amis mit ihren Patriot-Raketen Probleme.
Da wurde die Zeit als FP mit einfacher Genauigkeit verarbeitet, das sind um die 7 Stellen. Gibt man die Zeit in Sekunden an, geht das so 115 Tage gut, dann hat die Zeit keine Auflösung von 1 Sekunde mehr.
Code:
float zeit = 0.0;

while (-1) zeit = zeit + 1.0;
Hier erreicht zeit einen endlichen Wert und verändert sich dann nicht mehr. Die Laufzeitbibliothek erzeugt hier dann aber auch keinen Fehler-Trap

Weitere Probleme ergeben sich bei der Konvertierung, endliche Dezimalbrüche ergeben teilweise unendliche FP-Werte, werden also zwangsweise gerundet.

Rundungsfehler können bei Buchhaltungsprogrammen Probleme verursachen, die Bilanz geht dann nicht wirklich auf.
Unter CP/M gab es den CBASIC-Compiler, dieser hat intern mit 14-Digits BCD gerechnet. War etwas langsamer als andere BASIC, auch weil es P-Code erzeugt hat. Aber bis 999'999'999'999.99 (999 Mrd.) rechnet dies also noch auf den Cent genau. Damit kann dann auch Billy sein Vermögen auf den Cent genau verwalten

Bis Anfang der 80er Jahre habe ich alle technischen Berechnungen mit CBASIC gemacht.


Und wie du schon geschrieben hast, zusammen mit Abtastraten, ergeben sich dann die lustigsten Frequenzgänge!

Wenn man ein 50Hz-Signal alle 20ms abtastet, erhält man eine konstante Spannung, welche proportional zur Phasenverschiebung der beiden Frequenzen ist. Nicht unbedingt das was man wollte

Wenn man nicht genau aufpasst, kann es mit dem gleitenden Mittelwert sogar schlechter werden.
Bei deinem Diagramm liegt der -6dB-Punkt (analoger Tiefpass) bei etwa 2.25kHz. Der gleitende Mittelwert unterdrückt diese Frequenz aber fast gänzlich.

MfG Peter(TOO)