2010-09-26 4 views
2

alt textComment filtrer les données de l'accéléromètre du bruit

Ci-joint une parcelle de données de l'accéléromètre à 3 axes. Les bosses soudaines dans l'intrigue sont le bruit. Je voudrais me débarrasser d'eux. Alors, quel filtre devrait être utilisé dans ce cas? Si c'est possible, fournissez un pseudo-code et une explication.

Répondre

1

En regardant les données, vous ne voulez pas de pics qui changent la valeur d'un certain montant (environ 200, appelons cela max_y_delta) dans un certain laps de temps (5-15 peut-être, max_x_delta).

Donc, comme je ne suis pas sûr de la structure de vos données, je suppose que c'est 3 tableaux data_array de valeurs à virgule flottante qui ont un point de données à chaque position entière. La solution que je présente est censée être aussi simple que possible et vous devriez essayer différentes valeurs de max_x/y_delta pour obtenir de bons résultats. Même avec les bonnes valeurs, je suis sûr qu'il existe de bien meilleures solutions, mais peut-être celle-ci est-elle assez bonne pour vous.

max_x_delta = 10 
max_y_delta = 200 
for each of the 3 arrays 
    for x = -1000...1000 
    points_above_delta = 0 
    average_value = 0 
    for deltax = -max_x_delta/2...max_x_delta/2 
     average_value += data_array[deltax] 
     if abs(data_array[deltax] - data_array[x]) > max_y_delta 
     points_above_delta++ 
     endif 
    end for deltax 
    average_value = average_value/max_x_delta 
    if points_above_delta > max_x_delta/4 
     for deltax = -max_x_delta/2...max_x_delta/2 
     data_array[deltax] = average_value 
     end for deltax 
    end if 
    end for x 

Notez que ce code a deux inconvénients que vous ne voulez pas le:

  • La détection est très simple, il ya aussi quelques coups d'oeil dans vos données sont censés être là, de sorte que vous pourrait perdre .
  • Après la détection d'un pic, chaque valeur dans la région max_x_delta autour du pic est définie sur la valeur moyenne dans cette région qui vous donnera une ligne droite.
2

Il vous ressemble voulez juste un filtre passe-bas.

2

Pour les données de mesure où vous pouvez faire un modèle approximatif de ce qui se passe physiquement, ou ce qui est physiquement probable, je suggère un Kalman filter. C'est un peu plus complexe que les autres méthodes, mais donne potentiellement une sortie plus propre et/ou une meilleure réactivité.

0

filtres médians sont utilisés pour éliminer le bruit de sel et le poivre en deux dimensions données. Dans cette donnée unidimensionnelle que vous avez les pics que vous souhaitez supprimer sont des points de haute intensité analogues à sel et poivre en 2D. Je recommanderais aussi un filtre médian, cela aidera à se débarrasser de ces pointes et à changer très peu d'autres choses. Le seul inconvénient est que c'est un filtre non linéaire. Il devrait être efficace de mettre en œuvre aussi longtemps que vous mettez à jour soigneusement vos quartiers.

Questions connexes