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

Signal Discussion :

Eliminer les "pics" parasites d'une courbe [Débutant]


Sujet :

Signal

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Par défaut Eliminer les "pics" parasites d'une courbe
    Bonjour a tous.
    Je me presente, je suis Julien et je fais en ce moment des etudes sur les turbines a gaz, et dans le cadre de cette etude, j'ai rencontre le probleme suivant:

    J'ai interpolle une serie de courbes mais je me retrouve avec des pics parasites qui m'embete pas mal.
    Je suis donc en possession d'une serie de points (pas de formule explicite)

    Etant donne que ma courbe est strictement decroissante (normalement), j'ai decide de creer un code qui me permet d'eliminer un terme d'un vecteur si celui ci est plus grand/petit que le precedent
    MAIS
    ce code ne marche pas, l'ordi rame et Matlab fini par planter (ca ressemble pas mal a une boucle while qui n'en fini pas).

    J'ai deux questions:
    Es ce que ma solution est la meilleure pour enlever ces pics?

    Qu'es ce qui ne va pas avec mon code?

    _________________________________________________________________
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    X_W=[15 12 11 12 11.5 10 9]
    Y_PIc=[1 2 3 2 2.9 4 8]
     
    l=length(X_W)
        e=2;
        compteurX=0;
        compteurY=0;
        while e<=l
     
            while X_W(e-1)<=X_W(e)
                X_W(e)=0;
                Y_PIC(e)=0;
                X_W=nonzeros(X_W);
                Y_PIc=nonzeros(Y_PIc);
                compteurX=compteurX+1;
            end
     
            while Y_PIc(e)>=Y_PIc(e-1)
                X_W(e)=0;
                Y_PIC(e)=0;
                X_W=nonzeros(X_W);
                Y_PIc=nonzeros(Y_PIc);
                compteurY=compteurY+1;
            end
            compteur=compteurX+compteurY;
            e=e+compteur+1;
        end
    ________________________________________________________________

    Je vous remercie par avance de votre aide

    bonne soiree

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Un conseil pour nous aider à t'aider : commente ton code.

    Peut-être même qu'ainsi tu arriveras à trouver ce qui cloche, puisque c'est un peu comme réécrire l'algorithme.

    As-tu essayé d'utiliser le debugguer de MATLAB : ça te permettrait de faire du pas à pas pour savoir quand ça coince (a priori à un moment compteur ne doit plus augmenter et reste inférieur à l) ?

    Conseil : ne pas utiliser l comme variable, ça ressemble trop à 1....

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour.
    je me retrouve avec des pics parasites
    Connais-tu la fréquence de ces parasites ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Pour ma part, j'aimerais bien que tu nous donnes un aperçu de ton signal réel...

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Par défaut
    Pour la frequence je n'en ai aucune idee.
    Pour que tout soit plus clair je vais vous expliquer un peut ce que je veux faire.
    J'ai plusieurs iso_contours a ma dispostion (cf fichier joint)
    Grace aux points de ces isocontours j'ai extrapole la surface (avec gridatta) , et maintenant j'essaye de tracer, grace au volume interpolle par gridatta, d'autres iso_contour.
    Je sais qu'il existe une fonction pour tracer ces iso_contour a partir de la surface mais ceux donnes par Matlab ne me conviennent pas (pics et problemes aux bornes)
    DONC
    J'ai extrait les coordonnees de ces isocourbes et j'essaie de les traiter, notamment en utilisant ce code pour enlever mes "pics".

    Je vous redonne le code (j'ai bosse un eu dessus, j'ai plus les problemes d'ordi qui plante, mais les pics sont toujours la)
    Cette fois ci j'ai rajoute quelques commentqires, j'espere que ca aidera a mieux comprendre

    ________________________________________________________________
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    long=length(Y_PIc)
         e=2;
         compteur=0;
         compteurX=0;
         compteurY=0;
         r=1;
     
      while r<long
     
            while X_W(e-1,1)<=X_W(e,1)  %comparaison d'un element avec le suivant pour y
              %Si les elements ne sont pas decroissant, je les enleve en
                %passant par nonzeros (a la fois dans x et y, pour ne pas me retrouver avec des abcisses sans ordonnees)
                X_W(e,1)=0;          
                Y_PIc(e,1)=0;
                X_W=nonzeros(X_W)
                Y_PIc=nonzeros(Y_PIc)
                compteurX=compteurX+1; 
            end
     
            while Y_PIc(e-1,1)>=Y_PIc(e,1) %comparaison d'un element avec le suivant pour x
                %Si les elements ne sont pas decroissant, je les enleve en
                %passant par nonzeros (a la fois dans x et y)
                X_W(e,1)=0;
                Y_PIc(e,1)=0;
                X_W=nonzeros(X_W)
                Y_PIc=nonzeros(Y_PIc)
                compteurY=compteurY+1;
            end
     
            %Le compteur me donne combien de composante j'ai enleve a mon
            %vecteur
            compteur=compteurX+compteurY;
            %Je passe a la composante suivante avec e
            e=e+1;
            %r represente le nombre de composante que jai deja traite
            r=r+1+compteur;
    ________________________________________________________________
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Hum... J'avoue ne rien y connaitre quant à la méthode, par contre pour le code, je peux apporter ma pierre.
    Le NONZEROS te sert à supprimer tes éléments, exact ?
    Dans ce cas il y a plus simple.

    D'autre part ce code va planter car si tu supprimes des éléments la taille de tes vecteurs risque de devenir plus petite que ton compteur e.

    Bref une proposition largement améliorable mais qui fonctionne sur ton exemple (si j'ai bien compris) :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    X_W=[15 12 11 12 11.5 10 9];%=>[15 12 11 10 9]
    Y_PIc=[1 2 3 2 2.9 4 8];%=>[1 2 3 4 8]
    long=length(Y_PIc);
    e=2;
     
    while e<=length(X_W)
     
        while e<=length(X_W) && X_W(e-1)<=X_W(e)  %comparaison d'un element avec le suivant pour y
            %Si les elements ne sont pas decroissant, je les enleve
            %(a la fois dans x et y, pour ne pas me retrouver avec des abcisses sans ordonnees)
            X_W(e)=[];%suppression de l'element
            Y_PIc(e)=[];
        end
     
        while e<=length(Y_PIc) && Y_PIc(e-1)>=Y_PIc(e) %comparaison d'un element avec le suivant pour x
            %Si les elements ne sont pas croissants, je les enleve (a la fois dans x et y)
            X_W(e)=[];%suppression de l'element
            Y_PIc(e)=[];
        end
     
        %Je passe a la composante suivante avec e
        e=e+1;
    end
    X_W
    Y_PIc

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Par défaut
    Super, c'est bon ca marche avec ton code.
    En fait j'utilisais la fonction nonzeros parce que j'ai pas pense a faire comme tu viens de me dire, et effectivement j'avais des problemes de dimensions de vecteur qui changeait pendant la boucle.
    Mais maintenant avec ta fonction, ca marche.
    Merci beaucoup
    Bonne journee a tous

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

Discussions similaires

  1. Eliminer les quotes d'une chaine
    Par pat100 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 11/12/2013, 18h20

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