Ich versuche mithilfe des Beschleunigungsmessers des iPhone festzustellen, ob ein Auto beschleunigt oder gebremst hat.
In der folgenden Abbildung habe ich die gesammelten Daten aufgezeichnet. (Um die Daten zu sammeln, lag das Telefon flach im Auto und zeigte auf die Oberseite des Telefons nach vorne).
Das Problem, das ich jetzt habe, ist, dass ich visuell deutlich sehen kann, wo das Auto beschleunigt und wo es gebremst hat (siehe unten). Aber ich kann nicht herausfinden, wie man das programmatisch macht.
Grundsätzlich möchte ich wissen, wie oft ein Auto in einem bestimmten Zeitfenster gebremst oder beschleunigt hat. (Fenstergröße ca. 10-30 Sekunden).
Jede Hilfe wäre sehr dankbar.
Danke im Voraus!
Antworten:
Sie sollten eine STFT für das Beschleunigungsmessersignal in Betracht ziehen. Auf diese Weise können Sie die Frequenz des Signals visualisieren. Wenn Sie die Frequenz der Bremsen bestimmen können, sollten Sie in der Lage sein, einen Schwellenwert für diese bestimmte Bremsfrequenz festzulegen und bei jeder Überschreitung zu zählen. Sie können auch messen, wie lange das Bremsen dauert.
Wie verarbeiten Sie Ihr Signal? Matlab und Python verfügen über die Specgram-Funktion, mit der Sie die tatsächliche Frequenzbremsung anzeigen können. Von dort aus können Sie die Bremsfrequenz sowie einen Schwellenwert bestimmen.
quelle
Wenn die Bremsen betätigt werden, kehrt die Beschleunigung entlang der Bewegungsrichtung das Vorzeichen um. Wenn Sie Ihr Telefon beispielsweise so positionieren, dass die z-Achse des Beschleunigers in Richtung der Schwerkraftachse (dh zur Erde gerichtet) liegt, beträgt die Beschleunigung entlang der z-Achse -g. Wenn andererseits die negative z-Achse mit g ausgerichtet ist, misst die z-Achse des Beschleunigungsmessers + g. Dies ist analog zu dem Szenario, in dem ein Auto beschleunigt und bremst, obwohl die Größe der Verzögerung etwas geringer ist als die Beschleunigung. Sie können beginnen, indem Sie die Referenzachse als g-Achse definieren und die anderen 2 Achsen basierend auf der Richtung der geringsten und maximalen Beschleunigung mithilfe einer Rotationsmatrix definieren. Grundsätzlich ändern Sie die Referenzachse von den x-, y- und z-Koordinaten, die auf der Ausrichtung des Telefons basieren, zu einem stationären g, a, s-Referenzsystem (wobei g die Schwerkraftachse ist, a ist die Richtung der maximalen Beschleunigung und s die stationäre Achse). Sie können auch ein Gyroskop verwenden, um diese Achsendrehung zu erreichen, wie in beschriebendiese Seite. Wenn Sie den Beschleunigungsmesser Daya in den transformierten Achsen anzeigen können, können Sie Beschleunigungs- und Verzögerungsbereiche basierend auf dem Signal von nur einer Achse einfach klassifizieren, unabhängig von der Ausrichtung des Telefons, indem Sie nach Nulldurchgängen suchen.
quelle
Sie sollten die Ausrichtung des Telefons kennen, da das Achsensignum mit der Fahrzeugbewegung übereinstimmen muss. Unter der Annahme, dass das Achsensignal korrekt ist, können Siea (tich) < 0 oder eine Beschleunigung a (tich) > 0 .
filter
das Beschleunigungsmessersignal eingebenlowpass
, um die Hochfrequenz zu reinigen,noise
und dann das Signalsignal anzeigen, um festzustellen, ob es sich um eine Unterbrechung handeltSie sollten beispielsweise versuchen, mit einem10 H.z oder auch weniger, sollten Sie einige Schnittfrequenzen ausprobieren, die in der Grafik angezeigt werden.
butterworth
Tiefpass zweiter oder dritter Ordnung mit einer niedrigen Frequenz zu filternquelle