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

MATLAB Discussion :

détection de pic


Sujet :

MATLAB

  1. #1
    Membre régulier Avatar de miss_angel
    Inscrit en
    Février 2008
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 210
    Points : 111
    Points
    111
    Par défaut détection de pic
    salut
    je cherche à détecter le pic d'une courbe.
    en fait j'ai pensé à détecter tous les pics de la courbe par une fonction Extrema, ensuite trier le vecteur de sortie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [xmax,ymax]=extrema(f); % f est la courbe
    X=sort(xmax,'descend');
    X1=X(1);
    Y=f(X1);
    figure;plot(f);hold on; plot(X1,Y);
    mais voyant ici le pic n'est pas bien détecté.(voir figure jointe)
    Merci pour un coup de main
    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 304
    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 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Pourquoi ne pas simplement utiliser la fonction MAX ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    x = rand(1,100);
    y = 1:numel(x);
     
    [xmax,idx] = max(x);
     
    figure
    plot(x,y,'b-',xmax,y(idx),'r*')

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Dut Voir le message
    Pourquoi ne pas simplement utiliser la fonction MAX ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    x = rand(1,100);
    y = 1:numel(x);
     
    [xmax,idx] = max(x);
     
    figure
    plot(x,y,'b-',xmax,y(idx),'r*')
    Non, la fonction max (toute seule) n'est pas du tout appropriée dans le cas où le signal est très bruité. Tout simplement parceque le max de signal n'est pas forcément le centre du pic dans ce cas...
    J'avais trouvé le code suivant sur internet qui marchait pas trop mal (même très bien) pour mon application ... on peut régler la tolérance au cas ou le code "saute" des positions.

    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
    function pk = lclmax(x,p2)
    %LCLMAX                            [ A.K.Booer  3-Dec-1992 ]
    %
    %  pk = lclmax(x,p)   1-D peak search down columns
    %                     using peak half window width of p.
    %
    % Returns PK, a BOOLEAN matrix showing local maxima positions.
    %
    p = 2*p2 + 1;          % full window width
    [n,m] = size(x);       % useful dimensions
    z = zeros(p2,m);       % pre-allocate result
    i = toeplitz(p:-1:1,p:n);    % shift operator
    %
    y = zeros(p,(n-p+1)*m);      % temporary matrix
    y(:) = x(i,:);         % index into original data matrix
    ma = max(y);                 % find maximum in window
    %
    pk = [z ; reshape(ma,n-p+1,m) ; z]; % add missing edge elements
    pk = pk == x;                 % find matching elements
    %%
    pour ce qui est de l'utilisation, la fonction lclmax renvoie je crois un vecteur de la taille de ton vecteur de données experimentales rempli de 1 et de 0 lorsqu'il y a un 1 c'est que tu as un pic tu n'as donc plus qu'a faire une recherche de 1 pour avoir l'indice.
    x= tes données
    p2 = paramètre de tolérance à tester

    Voilà en espérant que ça puisse t'aider... je suis pas très précis mais ça fait longtemps que je n'ai pas utilisé cette fonction et je ne me rappel plus de tout ... à toi de te replonger dedans

  4. #4
    Membre régulier Avatar de miss_angel
    Inscrit en
    Février 2008
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 210
    Points : 111
    Points
    111
    Par défaut
    merci cher Dut pour le bon placement aussi pour ton bout de code c'est simple et ça fonctionne
    un merci aussi à azabdur , je vais me "replonger" dans ta proposition
    Merci

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

Discussions similaires

  1. Détection de pics
    Par fatenov dans le forum Signal
    Réponses: 17
    Dernier message: 15/05/2013, 20h16
  2. Détection de pics
    Par miss_angel dans le forum Signal
    Réponses: 2
    Dernier message: 23/03/2010, 10h54
  3. Détection de pics
    Par cedric06000 dans le forum Scilab
    Réponses: 20
    Dernier message: 03/08/2009, 18h41
  4. Réponses: 14
    Dernier message: 23/01/2009, 17h07
  5. [LabView 8.2] Détection de pic
    Par tacoumi dans le forum LabVIEW
    Réponses: 5
    Dernier message: 06/06/2008, 09h20

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