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.