Bonjour à tous!
Dans le cadre d'un projet informatique à l'école, je travaille sur un algorithme de détection de montée.
J'ai un profil altimétrique que voici (courbe noire):
On peut y remarquer globalement 4 montées. Mon objectif est de détecter ces montées, et de renvoyer des listes [(x1,y1), (x2,y2)] avec x1 l'abscisse du début de la montée, y1 son ordonnée, et x2 l'abscisse de la fin de la montée, et y2 son ordonnée.
Pour cela, j'ai décidé de procéder par étapes:
- Trouver un algorithme qui détecte les extremums de la fonction (que j'appellerai (max1, max2,...maxn).
- Considérer des segments entre deux extremums successifs: entre chaque extremum, il y a forcément un moment où la courbe décroît, atteint un minimum, puis remonte jusqu'à l'extremum suivant. Entre max1 et max2, il existe nécessairement un min1.
- Je trouve ce minimum en question. Ainsi, entre un minimum et l'extremum suivant, il s'agit forcément d'une pente ascendante. Donc on détecte une montée entre min1 et max2.
Donc, je suis censée trouver les montées grâce à cet algo assez simple. Cependant, mon algorithme de détection d'extremum est très peu robuste: je parcours la liste des ordonnées, et considère qu'il y a un extremum si l'ordonnée d'un point est supérieure à la précédente et à la suivante; ie si f(x2)>f(x1) et f(x2)>f(x3).
Le soucis, c'est que mon signal originel est très bruité, ce qui fausse énormément la détection de pics.
J'ai donc pensé à le filtrer. l'algorithme marche beaucoup mieux et détecte bien quatre pics. Le filtre crée cependant un déphasage que je suis incapable de quantifier (courbe rouge). De plus, on m'a conseillé de ne pas filtrer car cela engendrerait une perte de précision et l'objectif de l'exercice est justement celui-ci.
Auriez-vous des pistes pour régler le problème svp ? J'espère avoir été suffisamment claire.
Partager