2015-04-15 1 views
0

Je travaille sur un projet dans lequel une tige est fixée à une extrémité à un arbre tournant. Ainsi, comme l'arbre tourne de 0 à ~ 100 degrés d'avant en arrière (dans le plan xy), il en va de même de la tige. Je monté un accéléromètre à trois axes à l'extrémité de la tige mobile, et I mesuré la distance de l'accéléromètre du centre de rotation (à savoir, la longueur de la tige) d'environ 38 cm. J'ai recueilli beaucoup de données, mais j'ai besoin d'aide pour trouver la meilleure méthode pour le filtrer. Tout d'abord, voici un complot des données brutes:accélération de rotation de filtrage (utilisation appropriée pour filtre de Kalman?)

Raw data

Je pense que les données est logique: si elle est montée en puissance, alors je pense à ce moment-là l'accélération doit être de plus en plus de façon linéaire, et puis quand il est montée en puissance vers le bas, il devrait diminuer linéairement. Si elle se déplace constamment, l'accélération sera ~ zéro. Gardez à l'esprit cependant que parfois la vitesse change (est plus élevée) d'un "procès" à l'autre. Dans ce cas, il y avait ~ 120 "essais" ou mouvements/balayages, données échantillonnées à 148 Hz.

Pour le filtrage, j'ai essayé un filtre passe-bas et une diminution exponentielle moyenne mobile, et les deux parcelles étaient pas trop chaud. Et bien que je ne suis pas bon à interpréter ces: voici ce que je suis quand le codage d'un tracé de fréquence de puissance:

spectral density

Ce que j'espérais obtenir de l'aide est ici, obtenir une méthode vraiment bon qui Je peux filtrer ces données. La seule chose qui revient encore et encore (surtout sur ce site) est le filtre de Kalman. Bien qu'il y ait beaucoup de code en ligne qui aide à les mettre en œuvre dans MATLAB, je n'ai pas été en mesure de le comprendre vraiment, et donc de négliger d'y inclure mon travail ici. Donc, est-ce qu'un filtre de kalman est approprié ici, pour l'accélération de rotation? Si oui, quelqu'un peut-il m'aider à en implémenter un dans matlab et l'interpréter? Y a-t-il quelque chose que je ne vois pas qui soit aussi bon/meilleur qui soit relativement simple?

est ici les données dont je parle. En regardant de plus près/zoom donne une meilleure appréciation de ce qui se passe dans le mouvement, je pense:

http://cl.ly/433B1h3m1L0t?_ga=1.81885205.2093327149.1426657579

Edit: OK, voici l'intrigue des deux dimensions relavent recueillies à partir de l'accéléromètre. Je néglige d'inclure la dimension haut et bas car l'accéléromètre montre une constante proche de ~ 1 G, donc je pense qu'il est prudent de dire qu'il ne capture pas beaucoup de mouvement de rotation. Le rouge est ce que je crois être la composante centripète, et le bleu est tangentiel. Je n'ai aucune idée de la façon de les combiner, c'est pourquoi j'ai (peut-être injustement?) Ignoré dans mon message.

two dimensions

Et voici les données de l'autre dimension:

http://cl.ly/1u133033182V?_ga=1.74069905.2093327149.1426657579

+0

Les données fournies mentionnent l'axe «y» de l'accéléromètre triaxial. Comment était cet axe par rapport à la rotation. Est-ce que 'y' montre l'accélération centripète (orientée radialement), ou l'accélération tangentielle (orientée tangentiellement)? – Hoki

+0

Merci d'avoir demandé à Hoki. C'est quelque chose avec lequel je me bats depuis un moment maintenant. Je pense qu'il montre l'accélération tangentielle, cependant, la dimension supposée donner l'accélération centripète est curieuse. L'accéléromètre est bien monté, mais pas parfaitement. Donc, je pense que je perds des informations de la "dimension y" dans la dimension "z", que je pensais être le centripète. –

+0

En outre, l'autre dimension lit généralement ~ 1 G (9,8 m/sec^2) constamment, donc je choisis d'ignorer cela. Puisque l'accéléromètre tourne avec la tige, et ne bouge pas de haut en bas, je pense que je peux l'ignorer en toute sécurité. En lisant en ligne, je suis supposé faire un certain type de transformations vectorielles ou utiliser des matrices de rotation, mais je n'ai aucune idée de la façon de le faire, alors je le laisse seul pour l'instant. Je mettrai à jour mon article avec le composant centripète et les tracerai ensemble pour te montrer ceci. –

Répondre

1

Oubliez le filtre de Kalman, voir la note à la fin de la réponse pour la raison.

l'aide d'un simple filtre moyenne mobile (comme je vous ai montré sur une réponse plus tôt si je me souviens) qui est essentiellement un filtre passe-bas:

n = 30 ; %// length of the filter 
kernel = ones(1,n)./n ; 
ysm = filter(kernel , 1 , flipud(filter(kernel , 1 , flipud(y)))) ; 
%// assuming your data "y" are in COLUMN (otherwise change 'flipud' to 'fliplr') 

Note: si vous avez accès à la boîte à outils curvefit, vous pouvez simplement utiliser: ys = smooth(y,30) ; pour obtenir presque le même résultat.

je reçois: accelfull qui, une fois zoomé ressembler à: accelfull

Vous pouvez jouer avec le paramètre n pour augmenter ou diminuer le lissage.

Le signal gris est votre signal d'origine. Je soupçonne fortement que les pointes de bruit que vous obtenez sont dues aux vibrations de votre tige. (en fonction du rapport longueur/section de votre tige, vous pouvez obtenir des vibrations importantes à la fin de votre tige de 38 cm.) Ces vibrations prendront la forme d'oscillations autour du signal de la porteuse principale, ce qui ressemble vraiment à ce que je vois votre signal).


Note: Le filtre de Kalman est bien surpuissant pour faire simple filtrage des données bruitées. Le filtre de Kalman est utilisé lorsque vous voulez calculer une valeur (une position si je suis votre exemple) basé sur une mesure bruyante, mais pour affiner les calculs, le filtre de Kalman utilisera également une prédiction de la position basée sur l'état précédent (position) et les données inertielles (à quelle vitesse vous tourniez par exemple). Pour cette prédiction, vous avez besoin d'un «modèle» du comportement de votre système, ce que vous ne semblez pas avoir. Dans votre cas, vous devez calculer l'accélération vue par l'accéléromètre en fonction de la vitesse de rotation (connue ou théorique) de l'arbre à tout moment, de la distance de l'accélérateur par rapport au centre de rotation, et probablement pour le rendre plus précis, un modèle dynamique des principaux modes de vibration de votre tige. Ensuite, pour chaque étape, comparez cela à la mesure réelle ... semble un peu lourd pour votre cas.

Regardez la figure rapide expliquant le processus de filtrage de Kalman dans cette entrée wikipedia: Kalman filter, et continuez à lire si vous voulez mieux comprendre.

+0

Merci pour la réponse très élaborée Hoki. Une question complémentaire est la suivante: pensez-vous que l'atténuation de cette méthode est acceptable? C'est probablement le cas, mais je voulais juste entendre votre opinion. Merci aussi pour l'explication sur le filtre kalman. Je ne pense pas que je l'ai mentionné dans mon post original mais je suis en train de collecter des données de position et de temps, donc le calcul de la vitesse n'est pas difficile pour moi. Peut-être que je peux enquêter sur le filtre de Kalman (et voir pourquoi il est si populaire) à l'avenir comme un exercice. –

+0

Oh encore une question. Je suis un peu inquiet de l'offset (à partir de zéro) vu dans les données. Théoriquement, cela devrait être zéro non? Après avoir parlé avec certaines personnes, cela peut avoir à voir avec l'orientation de mon accéléromètre (ce n'est pas parfait). Apparemment, je devrais utiliser des matrices de rotation pour transformer les mesures en un système de coordonnées différent - un où un axe ressent une accélération de g et la rotation de la tige influence un autre axe seulement, mais je ne sais pas comment faire. Pensez-vous que vous pouvez aider ici, ou cela justifie-t-il une question différente? –

+0

@JohnAlberto. C'est définitivement une autre question, et ce serait probablement mieux sur un autre site SO plus lié au traitement du signal. En ce qui concerne l'atténuation, cela dépend de ce qui vous intéresse. Si vous voulez surveiller le mouvement de l'arbre (basse fréquence) et ignorer les vibrations de la tige, alors c'est correct. Si vous voulez étudier les vibrations de la tige, vous devez garder les hautes fréquences. Quant au biais (décalage du zéro), un désalignement de ~ 3degrees de votre accélération vous donnerait le décalage de 0.05G dans vos données ... tout à fait possible. – Hoki

1

Je proposerai pour vous filtre passe-bas, mais le modèle d'inertie de premier ordre ordinaire au lieu de Kalman. J'ai conçu un filtre avec bande passante jusqu'à 10 Hz (~~ 0,1 de votre fréquence d'échantillonnage). modèle discret a l'équation suivante:

y[k] = 0.9418*y[k-1] + 0.05824*u[k-1] 

où u est le vecteur de mesure, et y est le vecteur après filtrage. Cette équation commence au numéro de l'échantillon 1, de sorte que vous pouvez simplement attribuer 0 au nombre d'échantillons 0.

+0

Existe-t-il une méthode/fonction facile à implémenter dans matlab? Sinon, je peux probablement simplement parcourir les données et implémenter votre modèle en tant que fonction, n'est-ce pas? –

+0

oui, c'est simple - vous avez déjà votre vecteur (u données), alors vous faites la boucle 'pour i = 2: longueur (u) y (i) = 0,9418 * y (i-1) + 0,05824 * u (i-1); end' bien sûr, avant la boucle, vous devez initialiser le premier échantillon: 'y (1) = 0;' –

+0

Merci Rafal. Je pense que c'est vraiment intéressant de voir à quel point votre réponse est similaire à celle de Hoki, mais je pense que je vais aller avec le sien. C'est très très léger, mais les pics après avoir utilisé la méthode de Hoki s'alignent juste un peu mieux que le tien (c'est juste un minuscule offset). L'ampleur est très similaire ou à peu près la même chose. En outre, je peux me voir utiliser votre méthode dans beaucoup d'autres applications, alors j'apprécie vraiment votre réponse. Serait +1 si je le pouvais. –