Wie "smooth" Daten und berechnen Linie Verlauf?
Bin ich beim Lesen von Daten von einem Gerät, das misst den Abstand. Meine sample rate ist hoch, so dass ich Messen kann große änderungen in der Entfernung (d.h. Geschwindigkeit), aber dies bedeutet, dass, wenn die Geschwindigkeit niedrig ist, ist das Gerät liefert eine Reihe von Messungen, die identisch sind (aufgrund der Granularität des Geräts). Dies führt zu einer 'trat' Kurve.
Was ich tun müssen, ist, um die Kurve zu glätten, um die Berechnung der Geschwindigkeit. Folgende, die ich dann berechnen die Beschleunigung.
Wie am besten angehen?
(Sample-rate-bis zu 1000Hz, Berechnung rate von 10 Hz wäre ok. Mit C# in VS2005)
InformationsquelleAutor paul | 2008-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den wikipedia-Eintrag von moogs ist ein guter Ausgangspunkt für die Glättung der Daten. Aber es tut Ihnen nicht helfen, eine Entscheidung zu treffen.
Es hängt alles von Ihren Daten, und die erforderlichen Verarbeitungsgeschwindigkeit.
Gleitenden Durchschnitt
Wird glätten Sie die top-Werte. Wenn Sie sich für die minimum-und maximum-Wert, verwenden Sie nicht dieses. Auch ich denke, dass mit dem gleitenden Durchschnitt wird Einfluss auf die Messung der Beschleunigung, da wird es reduzieren Sie Ihre Daten (ein bit), wodurch die Beschleunigung wird kleiner erscheint. Es kommt auf die benötigte Genauigkeit.
Savitzky–Golay
Schneller Algorithmus. So schnell wie der gleitende Durchschnitt. Beibehalten werden die Höhen der peaks. Etwas schwieriger zu implementieren. Und Sie müssen die richtigen Koeffizienten. Ich würde diesen pick.
Kalman-Filter
Wenn Sie wissen, die Verteilung, dieser kann Ihnen gute Ergebnisse (es wird im GPS-Navigations-Systeme). Vielleicht etwas schwieriger zu implementieren. Ich erwähne dies, weil ich verwendet haben Sie in der Vergangenheit. Aber Sie sind wahrscheinlich nicht eine gute Wahl für einen starter in dieser Art von Sachen.
Den oben Reduzierung von Lärm auf das signal.
Nächsten Sie tun müssen, ist, erkennen die start-und end-Punkt der "Beschleunigung". Man könnte dies durch die Schaffung einer Derivative von dem ursprünglichen signal. Der Punkt(en), wo die Ableitung kreuzt die Y-Achse (null) sind wohl die Spitzen in Ihr signal und kennzeichnet möglicherweise den Beginn und das Ende der Beschleunigung.
Können Sie dann erstellen Sie eine zweite-Grad-Derivat zu erhalten, das minium und maximum der Beschleunigung selbst.
ein gutes code-Beispiel für Savitzky-Golay finden Sie auf procoders.net/?p=11
SG ist trivial zu implementieren, wenn Sie die Koeffizienten. Verwenden Sie einfach R sgolay, Sie zu finden.
Unter diesem Link finden Sie ein JavaApplet, um tatsächlich zu sehen, wie das Bewegen, Savitzky-Golay und Ensemble-Durchschnitt Arbeiten chem.uoa.gr/applets/appletsmooth/appl_smooth2.html
#Wouter Link veraltet
InformationsquelleAutor GvS
Benötigen Sie ein glättungsfilter, das einfachste wäre ein "gleitender Durchschnitt": berechnen Sie den Durchschnitt der letzten n Punkte.
Die Frage hier ist, wie um n zu bestimmen, können Sie uns sagen, mehr über Ihre Anwendung?
(Es gibt auch andere, kompliziertere Filter. Sie variieren, wie Sie erhalten die input-Daten. Eine gute Liste ist in Wikipedia)
Bearbeiten!: Für 10Hz, Durchschnitt der letzten 100 Werte.
aus meiner interpretation von dem, was er sagte, er hat 1000values pro Sekunde, aber wirklich nur braucht, um die Daten 10 mal in der Sekunde. So, ein einfacher Weg ist, um nur behandeln zu 100 Werten als eine (Durchschnittliche).
Ich denke, die Formulierung verbessert werden könnte hier... aus Ihrem letzten Kommentar denke ich, dass die Idee, die Sie sind, ist, dass Sie bekommen 100 Werte, Durchschnitt, erhalten Sie weitere 100 Werte, deren Mittelwert berechnet werden soll, wird ad infinitum zu bekommen 10 Hz gemittelte Proben von 1000hz Eingang.
InformationsquelleAutor moogs
Gleitende Durchschnitte sind in der Regel schrecklich, aber gut für weißes Rauschen. Beide gleitenden Durchschnitte & Savitzky-Golay beide laufen auf eine Korrelations - und sind daher sehr schnell und konnte umgesetzt werden, in Echtzeit. Wenn Sie brauchen mehr, um Informationen wie die ersten und zweiten Ableitungen - SG ist eine gute richtige Wahl. Die Magie der SG liegt in der Konstanten Korrelationskoeffizienten benötigt für die filter - sobald Sie sich entschieden haben, die Länge und der Grad des Polynom-fit lokal, die Koeffizienten müssen nur einmal. Sie können berechnen Sie mit Hilfe von R (sgolay) oder Matlab.
Können Sie auch abschätzen, dass ein verrauschtes signal der ersten Ableitung über der Savitzky-Golay best-fit-Polynome - diese werden manchmal auch als Savitzky-Golay-Derivate - und in der Regel eine gute Schätzung der ersten Ableitung.
Kalman-Filterung kann sehr effektiv sein, aber es ist schwerer berechenbar - es ist schwer zu schlagen ein kurzes " convolution for speed!
Paul
CenterSpace Software
InformationsquelleAutor Paul
Zusätzlich zu den oben genannten Artikeln haben Sie einen Blick auf Catmull-Rom-Splines.
InformationsquelleAutor James Fassett
Könnte man eine gleitender Durchschnitt zu glätten die Daten.
InformationsquelleAutor Lee
Neben GvSs ausgezeichnete Antwort oben könnte man auch überlegen, Glättung /Reduzierung der stepping-Effekt, gemittelt Ergebnisse mit einigen Allgemeinen curve-fitting wie kubische oder quadratische splines.
InformationsquelleAutor SmacL