2016-02-16 2 views
1

нужен свет здесь. У меня есть float [], и между поплавками внутри этого массива есть некоторые значения, которые внезапно имеют флуктуации, как в первой части изображения ниже. enter image description hereКак стереть тонкие прыжки в форме волны?

Я хочу, чтобы какая-то функция превратила эту первую часть во что-то похожее на вторую часть. Кроме того, я пробовал производный метод, и он работает почти отлично, проблема в том, что иногда, как в синусоидальной волне, это просто не дает мне правильного результата. Мне не нужно кодировать, просто нужно нажать. Заранее спасибо.

+1

Вы ищете _signal smoothing_. – cubrr

+0

Кроме того, [здесь есть ответ] (http://math.stackexchange.com/a/248860/272607) из Math SE, который, я думаю, даст вам некоторые идеи. – cubrr

+2

Вы можете исправить именно этот случай с некоторой наивной логикой. Внезапное изменение значения происходит на '9' единиц. Вы можете начать мониторинг для таких изменений (например, если новое значение отличается от старого на '> 5') с какого-то момента и когда это произойдет - смещение дополнительных точек до тех пор, пока такое же большое изменение не произойдет в другом направлении. Как своего рода постобработка. – Sinatr

ответ

2
  1. Тренировка среднее значение по сравнению с предыдущими X узлов.
  2. Решите, каков ваш максимальный процент снижения/увеличения флуктуации.
  3. Если узел превышает этот порог, замените его на среднее значение, включая значение флуктуации.

eg. Возьмите нижеследующую последовательность.

40,39,41,42,42,43,44,43,42,43,44,45,46,45,44,46,47, 33,32,33,34, 44,45,46,47

Позволяет сказать, что 33,32,33,34 все превышают наш порог, и мы усреднением 10 предыдущих записей.

Заменить все значения, превышающие пороговое значение, значением этого расчета, где Y - значение, превышающее пороговое значение.

(Previous Average + Y)/X + 1 

В нашем примере 33 будет заменен (445 + 33)/11 = 43.45 и т.д.

+0

Привет, trat будет работать очень хорошо, но это приносит еще одну проблему. Например, если у меня есть синусоидальная форма волны, и у нее нет никаких «прыжков», ваша идея исправит всю форму волны и сделает ее понятной, и то же самое произойдет с другими волновыми формами, которые не имеют прыжка, или я неправильно? –

+0

@ MarceloViníciusdePaula Вы только исправили бы значение, если оно превышает ваш определенный порог. Если у вас нет каких-либо переходов, он будет использовать исходное значение. – CathalMF

+0

Спасибо, вы дали мне идею, я сделал некоторые изменения на нем, и теперь он работает, мне просто нужно работать над этим пороговым фактором, чтобы он менялся в соответствии с массивом данных, который я получаю. И снова, спасибо большое. –

3

Я предлагаю вам использовать фильтр нижних частот или фильтр Калмана.

+1

Я лично использовал Kalman для снятия шума и неровностей с акселерометра. – Emil

Смежные вопросы