Глядя на данные, вы не хотите, чтобы какие-либо подсмотры изменяли значение на определенную величину (около 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
вокруг пика присваивается среднее значение в этой области, что дает вам прямую линию.