Hallo ich habe Datenblöcke zu 1024 Messwerten aus einer Beschleunigungsmessung. Jetzt brauche dazu die Auslenkung, also den Weg. Das kann man durch zweimaliges integrieren der Messwerte erhalten. Aber ich hab keinen Plan wie so ein Programm in C aussieht. Grundsätzlich müsste das doch in Richtung Tiefpass gehen ode liege ich da falsch ? Gerhard
Die Integration geht bei diskreten Werten in eine Summation über. Schau dir dazu einmal die Trapezformel an. http://de.wikipedia.org/wiki/Trapezregel http://www.iaf.hs-karlsruhe.de/ice/ice/nestler/fileadmin/files/ModSim/Notes/mod-sim-5.pdf http://www.thp.uni-duisburg.de/uebungen/theo-1/ws04/Beispiel-Trapezformel.html http://www.tm-mathe.de/Themen/html/numintdoppel.html
Könnte das nicht so gehen (Pseudocode): define DeltaT Zeitwert // Konstante: Zeit zwischen zwei Messwerten var Beschleunigung, Geschwindigkeit, Weg; Weg = 0; Iteriere über alle Messwerte der Beschleunigung Lese aktuelle Beschleunigung; Geschwindigkeit = Betrag von(Beschleunigung * DeltaT); Weg = Weg + Geschwindigkeit * DeltaT; Iteration Ende (Wenn man jetzt z.B. von einem Auto ausgeht, das sowohl bei positiver als auch bei negativer Beschleunigung einen Vorwärtsgang eingelegt hat)
Hallo danke erst mal für die Posts. Zur Präzisierung: Ich brauche nicht die Fläche unter der Kurve und auch nicht den gesamten Weg. Das Signal ist sinus-ähnlich, aber nicht wirklich periodisch. Wenn man das 1* integriert, muss wieder eine Kurve herauskommen, ebenso beim 2. integrieren. Gerhard
Dann vielleicht so? Iteriere über alle Messwerte der Beschleunigung Lese aktuelle Beschleunigung; Geschwindigkeit = Beschleunigung * DeltaT; Auslenkung = Auslenkung + Geschwindigkeit * DeltaT; Iteration Ende Wenn die Beschleunigung positiv wie negativ sein kann, und hiernach auch die Geschwindigkeit, so kann auch die Auslenkung zu- wie abnehmen.
"Numerical integration in C" ist das Stichwort für eine Suche im Internet. Mark Brandis schrieb: > Geschwindigkeit = Betrag von(Beschleunigung * DeltaT); müsste das nicht eher Geschwindigkeit = Geschwindigkeit + (Beschleunigung * deltaT); sein?
manoh schrieb: > müsste das nicht eher > > Geschwindigkeit = Geschwindigkeit + (Beschleunigung * deltaT); > > sein? Öhm ja, kann sein :)
Hallo Mark stimmt eigentlich. Hab mal wieder zu kompliziert gedacht. Müsste eigentlich so funktionieren. Und ich krieg für jeden Term wieder einen Punkt meiner Geschwindigkeitskurve bzw Wegkurve. Danke! Gruß Gerhard
Gerhard G. schrieb: > Hallo Mark > > stimmt eigentlich. Hab mal wieder zu kompliziert gedacht. Müsste > eigentlich so funktionieren. Und ich krieg für jeden Term wieder einen > Punkt meiner Geschwindigkeitskurve bzw Wegkurve. Bedenke aber auch, das das Ergebnis nicht wirklich berauschend sein wird. Es ist ein Trugschluss zu denken, dass eine Wegmessung ganz leicht realisierbar ist nach dem Muster man nehme einen Beschleunigungssensor und integriere 2-mal In der Praxis funktioniert das nur sehr schlecht. Die Ergebnisse sind, gelinde gesagt, mies bis unbrauchbar. Grund: du integrierst auch das unvermeindliche Rauschen mit auf. Und durch das 2-malige Integrieren verstärkst du das Rauschen extrem, bis es dir die Ergebnisse unbrauchbar macht. In der Theorie: Super Ansatz In der Praxis: wenn du keine Präzissionsinstrumente hast - unbrauchbar
Hallo Karl heinz Buchegger was wäre eine Alternative ? Wie machen "Profi-Programme" so etwas ? Beim Differenzieren fallen Konstante raus, solche, falls vorhanden können also beim Integrieren auch nicht restauriert werden. Gegen das Rauschen könnte man ja filtern (Mittelwert über 3 Werte oä) oder was gibts sonst noch ? Ich brauche nicht die Gesamtheit des Wegs. Die Beschleunigungswerte erwarte ich irgendwo konstant, dazu will ich die Auslenkung haben, die müsste also auch irgendwo konstant sein - als Maximal-Wert. Gerhard
Gerhard G. schrieb: > Hallo Karl heinz Buchegger > > was wäre eine Alternative ? Wie machen "Profi-Programme" so etwas ? Die benutzen zuallererst einmal eine Inertialplatform, auf der die Bewegungssensoren installiert sind. Bzw. eine Kombination aus Gyros und Beschleunigungssensoren um sich rechnerisch eine Inertialplatform zu schaffen, die als Referenzsystem absolut stabil im Raum steht. Aber ich will dich nicht aufhalten. Probiers aus. Für kurzzeitige Messungen mags trotzdem immer noch gehen. Du sollst nur im Hinterkopf halten, dass du in der Kette Eingabe - Verarbeitung - Ausgabe den Fehler nicht notwendigerweise im Schritt Verabreitung zu suchen hast, wenn hinten nichts Vernünftiges rauskommt.
Kalman Filter macht was du brauchst. http://www.cs.unc.edu/~welch/kalman/ - irgendwo gibt's genau dein Problem im Beispielcode, musst ein bischen suchen.
Gerhard G. schrieb: > Wie machen "Profi-Programme" so etwas ? Zu aller erst muss man möglichst genau messen bzw. genau genug und richtig. Ein Profi-Programm macht das genauso gut/schlecht wie ein Nicht-Profi-Programm (was auch immer Profi-Programme sind...). Ein Ansatz ist sicher zuerst einen gleitenden Mittelwert bilden und dann zu Integrieren. Jedenfalls kenne ich es so von Erschütterungsmessungen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.