Ich möchte den Algorithmus in C implementieren. Danke.

Hintergrund: Meine Anwendung empfängt (X, Y, Z) Beschleunigungsmesserdaten in Echtzeit (Abtastrate 6,75 Hz). Der Sensor bewegt sich in einer periodischen Bewegung, aber die Bewegung muss nicht nur entlang einer Achse erfolgen. Die 3 Signale x (t), y (t) und z (t) sind daher leicht korreliert und ich würde gerne wissen, ob ich eine Rotationsmatrix (in Echtzeit) finden kann, die zum Drehen der gemessenen (x,) verwendet werden kann. y, z) in einen neuen Vektor (x *, y *, z *), so dass die gesamte Bewegung entlang der z-Achse verläuft?

Ich möchte den Algorithmus in C implementieren. Danke.

1
user1884325 3 Jän. 2016 im 07:21

2 Antworten

Beste Antwort

Was Sie versuchen, wird allgemein als "Hauptkomponentenanalyse" bezeichnet. Der Wikipedia-Artikel ist ziemlich gut:

https://en.wikipedia.org/wiki/Principal_component_analysis

Für statische Daten verwenden Sie im Allgemeinen die Eigenvektoren der Kovarianzmatrix als neue Koordinatenbasis.

PCA in Echtzeit ist machbar, aber nicht super einfach. Siehe zum Beispiel: http: //www.bio- konferenzen.org/articles/bioconf/pdf/2011/01/bioconf_skills_00055.pdf

3
Matt Timmermans 3 Jän. 2016 im 15:54

Zunächst möchte ich betonen, dass die Antwort von Matt Timmermans genau das getan hat, was die Leute tatsächlich tun, wenn sie Beschleunigungsmesserdaten klassifizieren aus klinischen Studien (ein Projekt, an dem ich gearbeitet habe).

Dann: Sie beobachten ein abgetastetes Signal. Wenn Sie einen Sensor haben, der Ihnen Samples mit einer Rate von 6,75 Hz liefert, beträgt die höchste Frequenz eines Signals, die Sie erkennen können, im Allgemeinen 6,75 Hz / 2 = 3,375 Hz. Alles, was eine höhere Frequenz als diese hat, wird von Natur aus zurückgesetzt und sieht aus, als wäre es etwas mit einer Frequenz f mit 0 & lt; = f & lt; 3,375 Hz. Wenn Sie dies nicht berücksichtigt haben, lesen Sie bitte die Nyquist-Shannon-Abtasttheorem. Insbesondere: Schirmen Sie Ihre Sensoren (wie auch immer Sie dies tun, z. B. durch Verwendung von Dämpfern) vor allen Eingaben ab, die über dieser Grenze liegen. Andernfalls sind Ihre Messungen möglicherweise nur sehr wenig oder gar nichts wert. Wenn Ihr Sensor dies intern tut (das ist absolut möglich, es gibt genügend Beschleunigungsmesser mit analogen Tiefpassfiltern), wurde dies behoben. Dokumentieren Sie jedoch die Eigenschaften Ihres Sensors.

Jetzt ist Ihr Fall ein bisschen einfacher, weil Sie ziemlich genau wissen, dass Ihre gesamte Beobachtung periodisch sein wird und entlang drei orthogonalen Achsen gemessen wird.

Eine andere, elegantere (lesen Sie: Sie benötigen weniger Stichproben, um dies zu berechnen) Verwendung eines parametrischen Schätzers. In Ihrem Fall würde ein Ankunftsrichtungssensor aus der Welt der HF-Technologie mit mehreren Antennen, soweit ich denken kann, direkt auf die Erkennung der Rotationsachse abgebildet. Die klassischen Algorithmen hier sind MUSIK und ESPRIT, und für Ihren Fall (begrenzte, bekannte Anzahl oszillierender Teile) ist ESPRIT möglicherweise die bessere Wahl.

Diskrete Cosinustransformationen können heutzutage mit erstaunlicher Geschwindigkeit durchgeführt werden. Mit 6,75 Hz wird kein PC auf dieser Welt jemals in Schwierigkeiten geraten, wenn Sie dies versuchen, während Sie weitere Samples erhalten. Es ist eine unglaublich niedrige Abtastrate.

Ist es möglich, Beschleunigungsmesserdaten in Echtzeit zu dekorrelieren? Wenn ja, wie wird es gemacht?

1
Community 23 Mai 2017 im 12:04