Mit Hilfe von Matlab zu integrieren Beschleunigungsmesser-Daten in Geschwindigkeit und position
Habe ich test accelerometer-Daten und müssen mit Hilfe von Matlab zu finden, Geschwindigkeit und position. Ich brauche die tatsächlichen Datenpunkte für beide Geschwindigkeit und position, obwohl, nicht nur die kumulative Fläche unter der Kurve. Ich habe die Beispieldaten, die ich benutze und in der Lage gewesen, dies zu erreichen durch umfangreiche und spezifische Vektorisierung Codierung, aber ich brauche zu finden, eine Allgemeine Methode. Ich kann nicht einfach eine Kurve passen und dann schätzen die Gegend, weil ich habe diskrete Daten und kann sich nicht leisten, irgendwelche Fehler. Diese Methode, die im wesentlichen der Berechnung der Fläche eines jeden Rechtecks ist die Genaueste Art und Weise. Ich habe meine versuche so weit unten:
%Variables
clear
DeltaTime=0.2; %10 Hz sampling rate
Acceleration=[0, 1, 2, 4, 3, 1, 2]; %Sample random data set
TTime=(0.2:DeltaTime:1.4);
VelocityL=zeros(size(Acceleration));
VelocityLL=zeros(size(Acceleration));
%Velocity
DeltaVelocityVect=Acceleration*DeltaTime;
VelocityV=[sum(DeltaVelocityVect(1)),sum(DeltaVelocityVect(1:2)),...
sum(DeltaVelocityVect(1:3)), sum(DeltaVelocityVect(1:4)), sum(DeltaVelocityVect(1:5))...
sum(DeltaVelocityVect(1:6)), sum(DeltaVelocityVect(1:7))];
%Position
DeltaPositionVect=VelocityV*DeltaTime;
PositionV=[sum(DeltaPositionVect(1)),sum(DeltaPositionVect(1:2)),...
sum(DeltaPositionVect(1:3)), sum(DeltaPositionVect(1:4)), sum(DeltaPositionVect(1:5))...
sum(DeltaPositionVect(1:6)), sum(DeltaPositionVect(1:7))];
Ich habe das Problem gelöst, alle von hand und grafisch dargestellt wird es sowohl auf Papier als auch auf Matlab und die oben genannten arbeiten. Die Länge der Datensätze ist variabel, obwohl, so wird es nicht funktionieren, langfristig. Ich habe versucht die Schleife um dieses problem zu lösen, da der index kann einfach verändert werden und passt sich so jeder Länge des Vektors unter Beibehaltung der Abtastrate, aber ich habe nicht in der Lage, um es an die Ausgabe der eigentlichen Daten-Punkte. Ich brauche eine Allgemeine form der oben genannten.
for index=1:length(Acceleration);
DeltaVelocityLoop(index)= DeltaTime*Acceleration(index);
end
for index2=1:7
VelocityL(index2)= sum(DeltaVelocityLoop(index2));
VelocityLL=VelocityLL+DeltaVelocityLoop(index2);
end
Dies ist mein 10 Versuch so enthält es die Wiederholung. VelocityL gibt die genau die gleiche Vektor wie DeltaVelocityLoop (ohne die vorherigen Bereiche zusammengefasst, die das Ziel). VelocityLL einfach gibt die gesamte Fläche unter der Kurve geschrieben, die Länge von Vektor Beschleunigung. Bitte lassen Sie mich wissen, wenn Sie irgendwelche Ideen, wie ich bekommen kann, um dieses Hindernis.
- Wenn Sie die tatsächlichen Datenpunkte, die Beschleunigung allein ist nicht genug, müssen Sie 2 Konstanten der integration, beispielsweise die Anfangsposition und Anfangsgeschwindigkeit. Außerdem, Bedenken Sie, dass bei diesem System haben Sie ein kumulierter Fehler, also, wenn Sie die Integration über eine lange Zeit, erhalten Sie möglicherweise unzuverlässige Ergebnisse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin ein bisschen verwirrt, was Sie meinen, wenn Sie sagen, dass können Sie nicht einfach die kumulative Fläche unter der Kurve. Dass ist das integral, also, wenn Sie integrieren möchten, die Beschleunigung der Daten zu bekommen, Geschwindigkeit und position, ist es genau das, was Sie brauchen. Wenn Sie die Genauigkeit ist schlecht, dann müssen Sie vielleicht eine höhere Qualität accelerometer-Daten, aber das kann nicht geholfen werden im post-processing.
Ich würde dir einfach empfehlen mit cumsum() oder cumtrapz (), um die Integration Ihrer Daten.
Können Sie verwenden, verwenden Sie eine spline genau darstellen, Ihre diskretisiert Beschleunigung Daten, dann die Integration der Fläche unter, dass, um die Geschwindigkeit, und dann wieder position.
Müssen Sie bestimmen, welche Methode Sie verwenden, um zu extrapolieren Beschleunigungswerte zwischen sample-Punkte. Im Allgemeinen wird ein kubischer spline hat einen sehr guten job darstellt "realen Welt" Beschleunigungen, während die lineare splines sind, die einfachste, mit zu arbeiten und es immer noch ziemlich gute Ergebnisse.
Beachten Sie, dass Ihre Ergebnisse variieren können, wie gut Ihre ursprünglichen Werte wurden, und wie Häufig werden Sie abgetastet. Wenn Sie möchten, eine exakte momentangeschwindigkeit/position mit hoher Präzision, werden Sie wahrscheinlich wollen, verwenden Sie einen sensor, der die Maßnahmen, die direkt.
Wenn Sie etwas brauchen schnell und vektorisiert, verwenden
cumtrapz
. Unter der Annahme, dass der Vektort
enthält die Messung mal, dass der Vektoracc
enthält die Beschleunigung der Messungen und die Ausgangslage istpos0
während die Anfangsgeschwindigkeitvel0
, würde ich schreiben:ich Sie nur einige Messpunkte cumtrapz ist vielleicht die beste Lösung in Bezug auf Genauigkeit und Einfachheit.
Hoffe, das hilft.
A.