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

Méthodes exploratoires Discussion :

Moyenne des pentes par classes


Sujet :

Méthodes exploratoires

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Moyenne des pentes par classes
    Bonjour,

    Dans le cadre de mes études, je dois programmer une fonction qui permet de calculer la moyenne des pentes d'un enregistrement temporel en fonction d'un classement donné.

    Je m'explique :

    En entrée, on a un enregistrement temporel avec en ordonnée l'amplitude du signal et en abscisse le temps. Sous maltab, on peut créer un histogramme de l'enregistrement en le découpant par classe. Mais j'aimerais maintenant pouvoir découper mon signal en classes (par exemple 63) et ensuite calculer la pente de la courbe pour chaque changement de pente dans une classe et ensuite faire la moyenne des pentes pour chaque classe.
    L'objectif est d’obtenir un graphique représentant la moyenne des pentes en fonction des classes. A terme, le but est d’afficher sur ce graphique la moyenne des pentes, l'écart-type de cette moyenne, la moyenne des courbures et l'écart-type de cette deuxième moyenne.

    Mon problème : je suis novice en programmation ainsi que dans l'utilisation de Matlab

    Je remercie par avance la moindre aide !
    Cordialement

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je me permet de répondre et de relancer le post.

    J'ai réalisé le script suivant qui me permet de découper le signal en classe et de calculer la dérivée pour chaque classe afin d'obtenir la moyenne des pentes par classe.

    Seulement voilà, mon script renvoie toujours des moyennes de pentes égales pour chaque classe. Ce qui ne devrait pas être le cas normalement et je ne vois pas où est l'erreur

    Voici le code du script :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    t=1:30;
    x=sin(t);
     
    Lx = max(x) - min(x); %amplitude du signal
    Lt=length(t); %temps total
    Nc=10; %nombre de classe
    Lc=Lx/Nc; %hauteur d'une classe
     
    %figure
    j=0;
    for  k=(-Lx/2):Lc:(Lx/2)
     
    j=j+1; %numéro de la classe  
        plot([0 Lt], [k k]); %on trace les droites représentant les classes
     
    h=0;
    i=0;
     for temps=0:Lt   
     
      g=0; %on met à zero le caclul de la dérivé
      i=i+1;
     
        s=sign(diff([+inf x +inf])); %recherche les extremas
        idx=(s(2:end).*s(1:end-1))==-1;
     
        if temps == 0
            g=0;
        elseif temps == Lt
            g=0;
        else
            g=(x(temps+1)-x(temps))/0.1; %calcul de la dérivée
        end
     
        h(i)=g; %on stock le calcul de la dérivée dans le vecteur h
     
        plot(t,x,find(idx),x(idx),'ro') %on trace le signal d'entrée et on marque les extremas
           hold on 
           %disp(g);
     
     end
     
     moy_pente(j)=mean(h); %calcul de la moyenne des pentes pour la classe j
     
    end
     
    disp(moy_pente);
    ecart_type=std(moy_pente);
    disp(ecart_type);
    Je remercie par avance la moindre aide

  3. #3
    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 : 53 166
    Points
    53 166
    Par défaut
    Comme l'indice k n'intervient pas à l'intérieur de la boucle externe, la boucle interne ne fait que faire "k" fois les mêmes opérations sur les même variables.

    Au passage les conditions suivantes sont inutiles puisque la variable g est mise à 0 juste avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if temps == 0
                g=0;
            elseif temps == Lt
                g=0;
    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)

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ah oui en effet, merci !

    Toutefois je n'arrive pas à trouver la solution à mon problème. J'aimerais découper mon signal d'entrée en fonction de l'amplitude ( ce que j'ai essayé de faire avec la boucle externe) et réaliser la boucle interne pour chaque découpe du signal. Mais la boucle interne agit sur tout le signal

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je recherche toujours à découper mon signal en tranche selon l'amplitude afin de calculer les dérivées dans chaque tranche du signal. Je n'ai toujours pas trouvé la solution, malgré mes recherches sur internet.

    J'ai par exemple essayé avec une boucle permettant de découper des matrices :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    t=1:30;
    x=sin(t);
     
    Lx = max(x) - min(x); %amplitude du signal
    Lt=length(t); %temps total
    Nc=10; %nombre de classe
    Lc=Lx/Nc; %hauteur d'une classe
     
    for i=1:Lx/Nc
     
        x_new(i)=x((i*Nc)-Nc+1:i*Nc); %découpager de x en plusieurs vecteurs
     
    end

    Quelqu'un aurait-il une idée pour m'éclairer ?

Discussions similaires

  1. [XL-2010] Moyenne des ventes par département
    Par djtheclem83 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/04/2013, 23h49
  2. Réponses: 2
    Dernier message: 20/02/2009, 09h40
  3. Réponses: 1
    Dernier message: 15/02/2007, 18h22
  4. Tri par la moyenne des valeurs de champs ?
    Par rozwel dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/01/2005, 18h35
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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