Wenn Sie etwas Anspruchsvolleres wollen, das die Daten glättet, sollten Sie sich mit einem digitalen Filteralgorithmus befassen. Er ist nicht schwer zu implementieren, wenn man den technischen Fachjargon durchschaut. Die klassische Methode ist Savitzky-Golay
Wenn Sie die letzte n
in einem Array gespeicherte Proben y
und jede Abtastung in gleichem zeitlichen Abstand erfolgt, können Sie die Ableitung etwa wie folgt berechnen:
deriv = 0
coefficient = (1,-8,0,8,-1)
N = 5 # points
h = 1 # second
for i range(0,N):
deriv += y[i] * coefficient[i]
deriv /= (12 * h)
Bei diesem Beispiel handelt es sich um einen N=5-Filter des Typs "3/4 (kubisch/quartisch)". Der größere N
Je mehr Punkte gemittelt werden, desto glatter wird das Ergebnis, aber desto höher ist auch die Latenz. Sie müssen N/2 Punkte warten, um die Ableitung zum Zeitpunkt "jetzt" zu erhalten.
Weitere Koeffizienten finden Sie hier im Anhang
https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter
0 Stimmen
Das klingt nicht nach Programmierung. Es handelt sich auf jeden Fall nicht um ein gut spezifiziertes Problem.
0 Stimmen
Seine Programmierung im Zusammenhang (wie tun ich X in C#), aber die Frage wäre besser, wenn es viel mehr Informationen, wie "Ich habe diese X-Werte, oder dieses Array von Floats und ...".
0 Stimmen
Mehr Hintergrundinformationen zu diesem Problem finden Sie hier: Ideen für die Analyse von echtzeitnahen Daten über bestimmte Intervalle mit Speicher- und CPU-Effizienz gesucht