Ein einfaches, einpoliges, flaches, rekursives IIR-Filter ist schnell und einfach zu implementieren, z. B. Wobei x, y die rohen (ungefilterten) X / Y-Beschleunigungsmessersignale sind, xf, yf die gefilterten Ausgangssignale sind und k die Zeitkonstante der Filter bestimmt (typischerweise ein Wert zwischen 0,9 und 0,9999, wobei ein größeres k ein längeres bedeutet Zeitkonstante). Sie können k empirisch bestimmen, oder wenn Sie Ihre gewünschte Grenzfrequenz Fc kennen. Dann können Sie die Formel verwenden: wobei Fs die Abtastrate ist. Man beachte, daß xf, yf die vorherigen Werte des Ausgangssignals auf der RHS und die neuen Ausgangswerte auf der LHS des obigen Ausdrucks sind. Beachten Sie auch, dass wir hier davon ausgehen, dass Sie die Beschleunigungsmessersignale in regelmäßigen Zeitabständen abtasten, z. B. Alle 10 ms. Die Zeitkonstante ist eine Funktion sowohl von k als auch von diesem Samplingintervall. Ich habe eine einfache Aktivität geschrieben, die ein SensorEventListener für Sensor. TYPEACCELEROMETER ist. In meinem onSensorChanged (SensorEvent-Ereignis) wähle ich einfach die Werte im X, Y, Z-Format und schreibe sie in eine Datei. Zu diesem X hinzugefügt, ist Y, Z ein Label, das Label ist spezifisch für die Aktivität, die ich durchführe. So seine X, Y, Z, label So erhalten Sie mein Aktivitätsprofil. Möchte Vorschläge haben, welche Operationen nach der Datenerfassung durchgeführt werden sollen, um Rauschen zu entfernen und die besten Daten für eine Aktivität zu erhalten. Der Hauptzweck dieser Datenerhebung ist es, eine Benutzeraktivitäts - Erkennungsanwendung unter Verwendung der neuronalen Netzwerkbibliothek (NeuroPh for Android) zu erstellen. Mai 6 13 at 4:49 Just for fun Ich schrieb einen Schrittzähler vor ein paar Wochen, und es wäre in der Lage gewesen, die drei Aktivitäten, die Sie erwähnt haben, zu erkennen. Id die folgenden Bemerkungen: Zusätzlich zum Sensor. TYPEACCELEROMETER. Android hat auch Sensor. TYPEGRAVITY und Sensor. TYPELINEARACCELERATION. Wenn Sie die Werte aller drei protokollieren, stellen Sie fest, dass die Werte von TYPEACCELEROMETER immer gleich der Summe der Werte von TYPEGRAVITY und TYPELINEARACCELERATION sind. Die Methode onSensorChanged () gibt Ihnen zuerst den TYPEACCELEROMETER, gefolgt von TYPEGRAVITY und TYPELINEARACCELERATION, die das Ergebnis der internen Methodik der Aufteilung der Beschleunigungsmesswerte in die Schwerkraft und der Beschleunigung ist, die nicht auf die Schwerkraft zurückzuführen ist. Da Sie interessiert sind für die Beschleunigung aufgrund von Aktivitäten, anstatt die Beschleunigung durch die Schwerkraft, finden Sie TYPELINEARACCELERATION ist besser für das, was Sie brauchen. Welche Sensoren Sie verwenden, die X, Y, Z, die Sie messen, hängt von der Ausrichtung des Geräts ab. Jedoch zum Erfassen der von Ihnen erwähnten Tätigkeiten hängt das Ergebnis von z. B. Ob der Benutzer die Vorrichtung in einer Hoch - oder Querposition hält oder ob die Vorrichtung flach oder vertikal ist, so daß die individuellen Werte von X, Y und Z keine Verwendung finden. Stattdessen müssen Sie die Länge des Vektors, d. H. Sqrt (X XY YZ Z) betrachten, die unabhängig von der Geräteorientierung ist. Sie müssen nur die Daten zu glätten, wenn youre Fütterung es in etwas, das lärmempfindlich ist. Stattdessen sagen Id, dass die Daten die Daten sind, und youll erhalten die besten Ergebnisse, wenn Sie Mechanismen verwenden, die arent empfindlich auf Rauschen und daher brauchen nicht die Daten geglättet werden. Definitionsgemäß werden bei der Glättung Daten verworfen. Sie wollen einen Algorithmus, der verrauschte Daten an einem Ende und gibt die aktuelle Aktivität am anderen Ende, so dont vorwegnehmen, ob seine notwendig, um Glättung als Teil dieses Algorithmus enthalten Hier ist ein Diagramm von sqrt (X XY YZ Z) Von Sensor. TYPE ACCELEROMETER, die ich aufnahm, als ich meinen Pedometer baute. Die Graphen zeigen die gemessenen Werte, wenn ich für 100 Schritte ging. Die grüne Linie ist sqrt (X XY YZZ), die blaue Linie ist ein exponentiell gewichteter gleitender Durchschnitt der grünen Linie, der mir den mittleren Pegel der grünen Linie gibt, und die rote Linie zeigt meine Algorithmus-Zählschritte. Ich konnte die Schritte nur auf der Suche nach dem Maximum und Minimum zählen und wenn die grüne Linie kreuzt die blaue Linie. Ich habe keine Glättung oder Fast Fourier Transforms. Nach meiner Erfahrung, für diese Art der Sache die einfachsten Algorithmen oft am besten, denn obwohl komplexe in einigen Situationen funktionieren könnte, ist es schwieriger zu prognostizieren, wie sie sich in allen Situationen verhalten. Und Robustheit ist ein wesentliches Merkmal jedes Algorithmus :-). Beantwortet Mai 14 13 at 9:32 Das Gehen ist die regelmäßige oben / unten mit Gipfeln und Mulden wie gezeigt. Stationär ist, wenn es keine Bewegung überhaupt weg vom Durchschnitt gibt, und Hand gehalten wird, wenn es unregelmäßige Bewegungen gibt, die nicht dem laufenden Muster folgen. In jedem Fall, wenn Sie nur einen Sensor messen, und Sie don39t wollen, dass Ihre Ergebnisse empfindlich auf, wie das Gerät gehalten wird, ist sqrt (X2Y2Z2) der einzige Eingang, mit dem Sie arbeiten können. Um weitere Informationen zu erhalten, benötigen Sie andere Sensoren. Ndash Stochastisch Das klingt wie ein interessantes Problem Haben Sie Ihre Daten gegen die Zeit gezeichnet, um ein Gefühl dafür zu bekommen, um zu sehen, welche Art von Lärm Sie zu tun haben, und zu entscheiden, wie Sie vor-Prozess Ihre Daten für die Eingabe in den Detektor Id beginnen mit Linien für jede Aktivität: Ax Ay Az Vx Vy Vz (approximiert durch Berechnung der Fläche der Trapeze, die durch Ihre Datenpunkte gebildet werden). Etc. Vielleicht können Sie erarbeiten die Ausrichtung des Telefons durch den Versuch, die Schwerkraft zu erkennen, dann drehen Sie Ihre Vektoren auf eine Standard-Orientierung (z. B. positive Z-Achse nach oben). Wenn Sie das tun können, dann können die verschiedenen Achsen sinnvoller werden. Beispielsweise würde das Gehen (in der Tasche) dazu tendieren, eine Geschwindigkeit auf der horizontalen Ebene zu haben, die sich von der Bewegung (in der Hand) durch Bewegung in der vertikalen Ebene unterscheiden könnte. Wie für Filter, wenn die Daten erscheint laut, ein einfacher Ausgangspunkt ist es, einen gleitenden Durchschnitt anwenden, um es zu glätten. Dies ist eine allgemeine Technik für Sensordaten im Allgemeinen: Auch dieser Beitrag scheint für Ihre Frage relevant: Dinge, die von mir identifiziert werden: Die Daten müssen vorverarbeitet werden, wie und wie Sie es brauchen, In meinem Fall möchte ich nur 3 Eingänge und Ein Ausgang Die Daten müssen der Glättung (Fünfpunkt-Glättung oder jede andere Technik, die Ihnen am besten entspricht) unterzogen werden. Damit Rauschen gefiltert wird (nicht ganz). Moving Average ist eine der Techniken Linearisierte Daten wäre gut, weil Sie keine Ahnung haben, wie die Daten abgetastet wurden, verwenden Sie Interpolation, um Ihnen helfen, die Linearisierung der Daten Finally verwenden FFT (Fast Fourier Transform), um das Rezept aus der Schüssel zu extrahieren , Das heißt, Features aus Ihrem Datensatz zu extrahieren beantwortet Mai 14 13 at 6:42 Ihre Antwort 2016 Stack Exchange, Inc
Comments
Post a Comment