IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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éterminer l'enveloppe d'une courbe


Sujet :

Traitement du signal

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Déterminer l'enveloppe d'une courbe
    Bonjour à tous,

    Voila j'ai la courbe ci-jointe, je cherche à trouver un algorithme sous matlab qui va me permettre de déterminer une autre courbe qui passe par tous les points maximum de cette courbe.

    Donc je cherche à déterminer une enveloppe qui passe par les maximums locaux de ma courbe initiale.
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Après l'utilisation de votre méthode voila la courbe obtenue

    Comme tu constate, c'est vrai que ça donne l'enveloppe de ma courbe initiale mais c'est pas du tout clair, les deux courbes sont confondues.

    Mais moi je dois avoir une courbe bien lisse pour que à la fin, l'utiliser comme une fonction de pondération pour une integrale.

    PS : je ne peux ni augmenter ni diminuer le nombre de points (échantillons) càd la fréquence d'échantionnage est imposée.

    que dois-je faire svp ?
    Images attachées Images attachées  

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    je cherche à trouver un algorithme sous matlab
    Par définition, l'algorithme est indépendant du langage. Alors, oublions momentanément MatLab et concentrons-nous sur l'algorithme. Voici ce que je te suggère: Tu commence par localiser séparément les maxima et les minima. Ensuite tu fais passer une courbe par les points de chacune de ces deux courbes; je te recommande le spline cubique.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse, c'est justement ce que je cherche à faire c'est de faire passer une courbe par les maximums locaux de la courbe originale en utilisant un spline.

    voila j'ai commencé par élliminer la partie négative car je vois que j'ai pas vraiment besoin de cette partie. (1ère figure)

    sur la deuxième figure on voit bien si on fait un zoom sur le voisinage d'un maximum local, que la courbe présente plusieurs pics. Donc je me demande comment faire ou bien qu'elle est la méthode à utiliée pour rejeter ces pics et ne garder que le ce maximum local ?
    Images attachées Images attachées   

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Les pics à conserver semblent périodiques, non ?

    Calcule la période en prenant les trois premiers pics et conserve uniquement les pics qui correspondant.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Oui sur la figure précédente, il semble que c'est périodique, mais en fait, plus on s'approche de la fréquence de coupure plus l'espace entre les ensembles de pics diminue et même le nombre de pics d'un ensemble augmente.

    voila la figure d'un zoom un peu plus large.

    Donc travailler sur la période n'est pas possible et du coup je pense que la question reste toujours posée, comme avoir le maximum de chaque ensemble de pics ?
    Images attachées Images attachées  

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Comme l'a suggéré Jean-Marc , je déplace (provisoirement peut être) cette discussion dans le forum Algorithmes
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Dut Voir le message
    Les pics à conserver semblent périodiques, non ?

    Calcule la période en prenant les trois premiers pics et conserve uniquement les pics qui correspondant.
    En fait au début j'ai pas compris ce que tu voulais dire par : "Les pics à conserver semblent périodiques, non ?" à la fin c'est vrai les pics à conservés sont périodiques, donc c'est vrai qu'on peut trouver la période et du coup détecter les pics, mais le problème qui se pose c'est que je chreche un algorithme qui puisse faire ça automatiquement, càd qui s'adapte à toutes les courbes que je lui donne en entrée.

    PS : Après plusieurs experiences j'ai pu tirer la conclusion que les pics de toutes les courbes (aux quelles je cherche à déteminer l'enveloppes qui passe par ces pics) sont périodiques. donc le problème revients à déterminer cette période automatiquement pour chaque courbe

    voila un exemple d'une autre courbe. apès un zoom biensûr

    cordialement
    Images attachées Images attachées  

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par glorious_rk Voir le message
    Donc travailler sur la période n'est pas possible et du coup je pense que la question reste toujours posée, comme avoir le maximum de chaque ensemble de pics ?
    Algo Rolling-ball, ou sinon recherche de maxima sur une fenetre mobile (de taille à définir).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ou un simple algo (je l'avais indiqué à.. je sais plus qui pour des sous-séries l'été dernier (à chercher sur le forum avec mot-clé "sous-séries")):

    Vsiblement la courbe monte (et ça m'étonnerait pas que ce soit une exponentielle, l'enveloppe)

    Un algo simple pour isoler les sommets :

    Code : 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
     
    vallast = -1
    imax = -1
     
    pour i = 0 a i < N
       si val(i) > vallast
           si  imax >= 0  /* on a déjà un pic */ 
               si imax >= i-2  /* on reset le point précédent si dans le même ensemble */
                   val(imax) = 0
               fin si
           fin si
           vallast = val(i)  /* on met la nouvelle valeur */
           imax = i
       sinon
           val(i) = 0
       fin si
    fin pour
    là tu ne devrais plus avoir que les maximas locaux de chaque ensemble
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!

    La résolution de ton problème comporte deux étapes:
    1. Localiser les maxima sur un signal échantillonné.
    2. Interpoler entre les points trouvés.


    Pour la première étape, il est essentiel de définir exactement ce que tu appelles un maximum.
    Exemple 1: (27, 53, 27) Tu peux raisonnablement considérer que 53 est un maximum.
    Exemple 2: (27, 53, 49) Penses-tu que le maximum est en 53 ou plutôt un peu plus à droite, parce que 49>>27 ?
    Exemple 3: (27, 53, 53, 27) Est-ce que le maximum est sur le premier 53, sur le second ou entre les deux; dans ce dernier cas, est-ce que la valeur au milieu vaut aussi 53 ou est-ce qu'elle est plus grande.
    Exemple 4: (27, 53, 52, 53, 27) Est-ce qu'il y a vraiment deux maxima ou n'est-ce qu'un artefact ?

    En fait, on se heurte au vice fondamental inhérent au traitement de signal; dans l'immense majorité des cas, les grandeurs physiques sont des fonctions continues du temps.
    Natura non facit saltus (Leibniz)
    Malheureusement, les instruments de mesure dont nous disposons ne nous donnent que des valeurs discrètes, c'est-à-dire un signal échantillonné. Nous perdons ainsi une part significative de l'information et il nous incombe de la restaurer le moins mal possible, ce qui n'est pas toujours simple. Cette restauration fait appel à notre connaissance de la physique, à notre intuition, à notre bon-sens.

    Une fois les maxima trouvés, la seconde étape est très simple: il te suffira de faire un spline cubique.

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  13. #13
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Pour trouver les points à garder, on peut trier les points [Xi,Yi] par ordre d'abcsisses décroissantes et éliminer tous les points situés dans une surface située en dessous de ce point et itérer sur les points non éliminés.

    La surface pourra être paramétrée pour avoir des formes et largeurs diverses comme dans l'image ci-dessous (ma préférence étant pour la parabole).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  14. #14
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    merci tous pour vos réponses.

    Voila j'ai fini par trouver une solution bcp plus simple, en passant ma courbe dans un filtre passe-bas, si on regarde bien la courbe on constate que c'est une sorte d'un signal basse fréquence modulé par un autre haute fréquence.

    donc si on élimine les hautes frequences on se retrouve avec une courbe qui passe au milieu de notre courbe originale (une sorte moyenne). donc on ajoutant un offset pour la courbe obtenue on se retrouve exactement sur l'enveloppe.

    voilà le tout petit programme qui fais ça avec un filtre de type butterworth

    [B,A] = butter(10,6000/22050);
    X2filt = filter(B,A,X);

    reste juste à choisir une bonne fréquence de coupure et un orde pour notre filtre pour avoir une coupure la plus raide possible

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enveloppe des maxima d'une courbe.
    Par j.balestie dans le forum Excel
    Réponses: 26
    Dernier message: 20/03/2024, 16h00
  2. Enveloppe d'une courbe
    Par Taupinette37 dans le forum MATLAB
    Réponses: 6
    Dernier message: 15/06/2015, 16h57
  3. Réponses: 1
    Dernier message: 21/10/2013, 05h15
  4. Déterminer le maximum d'une courbe
    Par espoir1976 dans le forum Simulink
    Réponses: 1
    Dernier message: 22/04/2010, 08h47
  5. Réponses: 2
    Dernier message: 27/03/2007, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo