Как отфильтровать данные акселерометра от шума - PullRequest
2 голосов
/ 26 сентября 2010

alt text

Прилагается график данных акселерометра с 3 осями. Внезапные неровности сюжета - это шум. Я хотел бы избавиться от них. Так какой фильтр следует использовать в этом случае? Если возможно, укажите псевдокод и объяснение.

Ответы [ 6 ]

2 голосов
/ 26 сентября 2010

Для данных измерений, где вы можете сделать приблизительную модель того, что происходит физически, или что физически вероятно, я бы предложил фильтр Калмана .Это несколько сложнее, чем другие методы, но потенциально дает более чистый результат и / или лучшую отзывчивость.

2 голосов
/ 26 сентября 2010

Похоже, вы просто хотите фильтр нижних частот.

1 голос
/ 02 октября 2010
1 голос
/ 26 сентября 2010

Глядя на данные, вы не хотите, чтобы какие-либо подсмотры изменяли значение на определенную величину (около 200, давайте назовем это max_y_delta) в определенное время (возможно, 5-15 max_x_delta). 1003 *

Так как я не уверен, какую структуру имеют ваши данные, я просто предположу, что это 3 массива data_array значений с плавающей запятой, которые имеют точку данных в каждой целой позиции. Представленное мной решение должно быть максимально простым, и вы должны попробовать разные значения max_x/y_delta, чтобы получить хорошие результаты. Я уверен, что даже с правильными значениями есть гораздо лучшие решения, но, возможно, это достаточно для начала.

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

Обратите внимание, что у этого кода есть два недостатка:

  • Обнаружение очень простое, есть также некоторые взгляды в ваших данных, которые предназначены, чтобы быть там, так что вы могли бы потерять некоторые из них.
  • После обнаружения пика каждому значению в области max_x_delta вокруг пика присваивается среднее значение в этой области, что дает вам прямую линию.
0 голосов
/ 26 декабря 2011

Медианные фильтры используются для удаления соли и перца в двумерных данных.В этих одномерных данных, у которых есть пики, которые вы хотите удалить, это точки высокой интенсивности, аналогичные соли и перцу в 2D.Я бы также порекомендовал медианный фильтр, он поможет избавиться от этих пиков и мало что изменит.Единственным недостатком является то, что это нелинейный фильтр.Это должно быть эффективно, если вы тщательно обновляете свои районы.

0 голосов
/ 26 сентября 2010

Попробуйте медианный фильтр: http://en.wikipedia.org/wiki/Median_filter, он может удалять пики, но не края

...