Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement du signal Discussion :

Détection de paliers


Sujet :

Traitement du signal

  1. #1
    Membre du Club
    Détection de paliers
    Bonjour à tous,
    je cherche à effectuer une détection de paliers sur un signal bruité et ayant parfois des accidents.
    j'utilise une logique "terrain" pour détecter mes changements de paliers et créer une séparation.

    edit : suppression

    Pour faire cela, n'ayant aucune connaissance particulière en traitement de signal, je teste la valeur absolue du delta de (n - n+1) supérieure au bruit de mon signal pour supprimer les valeurs incohérentes, et ensuite une autre passe pour détecter le changement de palier. Mes changements de paliers c'est le remplacement d'une valeur par une valeur de détection qui ne doit pas apparaître dans le signal.



    Auriez vous des conseils, des avis, besoins de plus de précision ?

    Merci

  2. #2
    Modérateur

    Bonjour,
    En effet, le calcul d'une dérivée est une bonne manière de détecter des variations (montée, descente, palier).

    Pente = (Valeurn+1 - Valeurn) / (n+1 - n)
    Pente > 0 le signal augmente
    Pente = 0 le signal est sur un palier
    Pente < 0 le signal descend

    Le bruit ou les accidents devraient pouvoir être détectés au travers de la valeur de "Pente" en faisant un tri et en mettant à 0 les plus petites valeurs selon un seuil qu'il t'appartient de choisir. Il ne devrait rester que les grandes variations et un palier c'est ce qui se trouve entre 2 variations.

    Je vois que prend la valeur absolue de la pente, ça revient au même, si ce n'est que tu perds le sens de la variation (ça monte ou ça descend) mais cette information ne 't'intéresse peut être pas.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Membre du Club
    Bonjour,

    effectivement je n'utilise pas le sens de la variation, car la logique de mon signal est d'avoir des paliers montants et descendants avec une sollicitation plus ou moins symétrique. D'où ma vérif en valeur absolue. Ensuite cela alourdissait le traitement pour la détection des paliers en fonction du sens de la pente.

    Ayant un pas de mesure à la seconde le /(n+1 - n) n'est plus utile, mais effectivement c'est une dérivée, que je traite en delta. je l’applique une première fois pour supprimer mes valeurs fausses. Comme le pic du premier palier (100) qui est causé par le démarrage de la sollicitation. Ensuite je détecte et marque mes paliers pour le traitement ultérieur. Je ne sais pas si c'est approprié de mettre du code ici, mais voici celui que j'e tente d'affiner pour le traitement du signal.

    Code Python :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #Recuperation des valeurs pour detection separation des paliers avec
    paliers_mark = -0.03 #Valeur pour marquer la séparation des paliers
    def sep_values(sv):
        seuil = 0.021 #seuil de détection des changements de paliers
        sensibilite = 0.001 #seuil de nettoyage
        #valuesc = [0]*len(sv)
        nb_values = len(sv)
        values_sep = []#Donne brute avec identification des étages
        nb_remplacement = 1
        for i in range(nb_values-nb_remplacement):
            if abs(sv[i]-sv[i+1])>sensibilite:
                sv[i]=sv[i-nb_remplacement]
            else:
                sv[i]=sv[i]
        for i in range(nb_values-1):
            if  abs(sv[i]-sv[i+1])>seuil:
                values_sep.append(paliers_mark)
            else:
                values_sep.append(sv[i])
        return values_sep


    Le traitement et la détection est plus propre, , j'ai corrigé certaines erreurs depuis le premier post.

    Je suis quand même un peu gêné car je fais une espèce de moyenne mobile, un écrêtage du signal qui le dénature un peu. Comme dans un des traitements qui suivent je calcule un eecartype^^, il est un peu biaisé. Je vais tenter de regarder à l'augmenter un peu.

    Je ne sais pas si d'autre méthode ou algo existant pouvait avoir un intérêt pour ce traitement, s'il n'y a pas de méthode plus efficace je vais continuer sur cette base.

    Merci

  4. #4
    Modérateur

    Bonjour,
    Pour retirer le bruit / accidents / artefacts, je ne vois pas d'autres méthodes que le filtrage tel que tu le fais ici (une moyenne quelle qu'elle soit est un filtre pas bas). Ensuite l'application d'un filtre engendre nécessairement la perte d'information, ça dénaturera la signal forcément.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  5. #5
    Membre du Club
    Merci,
    je vais donc bosser sur le code et essayé de mieux gérer ma sensibilité avec quelques moyenne de delta de plusieurs signaux.

    Merci