Trouver le Max d'une courbe : fonction max() ne marche pas??
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Trouver le Max d'une courbe : fonction max() ne marche pas??



  1. #1
    Krafter

    Trouver le Max d'une courbe : fonction max() ne marche pas??


    ------

    Bonjour,


    Je voudrais trouver la valeur maximale d'un .fig. Plus précisément il s'agit d'une FFT, j'ai besoin de connaître la position de l'harmonique principale (la plus haute, je crois qu'elle s'appelle comme ça dans mon cas ^^").

    J'ai donc utiliser : [C, I] = max(maFFT);

    Espérant ainsi stocker les coordonnées du point le plus haut dans C et I. Pour la plupart de mes courbes cela marche nickel, même si mes valeur de I sont toujours un peu grandes (si mon point en haut de mon harmonique principale à comme coordonnées x=13 et y=17 par exemple, je me retrouve avec C=17 et I = 15. Bon je ne sais pas pourquoi c'est le C qui prend la "hauteur" du point mais bon, ça peut être 3,192 j'aurai un C à 3,192 donc impec'.
    Par contre le I est toujours un peu plus élevé? J'ai fais avec dans un premier temps. Sauf que là j'ai la FFT suivante (j'ai placer les coordonnées manuellement donc de façon peu précise, en haut de l'harmonique la plus haute) :

    forum.jpg

    et quand je fais [C, I] = max(maFFT); (qui marche à peu près pour tous mes autres essais!) j'obtiens :

    C = 3,1921
    I = 892

    Donc voilà comment est-ce possible je n'ai même plus de données en 892..... Incompréhension totale de ma part.

    J'espère que je me suis bien expliquer, si quelqu'un peut me sauver svp
    Merci!

    -----
    Images attachées Images attachées  

  2. #2
    Antoane
    Responsable technique

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Bonjour,

    I ne représente pas la valeur de x pour laquelle y est maximum, mais l'indice du vecteur y pour lequel y est maximum.
    Autrement dit :

    % tu as fais :
    plot(x,y)

    [C, I]=max(y)
    % ceci signifie que le maximum du vecteur y vaut C et que y(I) == C et que
    % ce maximum est atteint en x0 = x(I).
    % Tu peux d'ailleurs ajouter un point au plot au niveau du max :
    plot(x(I), C, 'rx')
    legend('data', 'max')
    Dernière modification par Antoane ; 02/03/2017 à 15h19.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  3. #3
    Krafter

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Bonjour, merci de ta réponse rapide.

    Je n'ai pas compris ton dernier point, quand j'essaye d'ajouter cela rien ne se passe.


    Du coup ok le reste je comprends. Donc moi j'ai mon vecteur y dont le max est C.
    Je peux stocker ce max C.

    Maintenant je voudrais savoir : quelle est l'abscisse du vecteur y quand il passe par C.
    C'est donc l'info que je cherche si je comprends bien. Comment puis-je l'obtenir svp?
    Je débute sur MatLab ^^"

  4. #4
    Antoane
    Responsable technique

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Le maximum est atteint en x(I).
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  5. A voir en vidéo sur Futura
  6. #5
    Krafter

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Mais comment puis-je atteindre cette valeur? ^^"
    Désolé si mes questions sont très naïves (et encore merci de répondre si vite).

    x(I) juste comme ça, ça n'est rien pour mon programme. Je lance mon programme, ensuite dans la "Command Window" je peux entrer C ou I j'ai leurs valeurs, mais x(I) MatLab ne le comprend pas.
    Il me dit :

    >> x(I)
    ??? Index exceeds matrix dimensions.


    J'ai essayer quelques trucs mais je dois m'y prendre comme un pied, pas moyen de récupérer cette fichue valeur :/

  7. #6
    Antoane
    Responsable technique

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Peux-tu nous fournir tout ton code ?

    En particulier les lignes utilisées pour gérer l4affichage de la figure.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  8. #7
    Krafter

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Tout mon code ça me parait compliquer il est énorme (enfin je trouve ^^"). Voilà un bout que je me suis fais pour des tests, qui me permet de faire la FFT d'une de mes courbes et qui lui applique un filtre passe-bas.
    Ce que je veux faire c'est automatiser le choix de la fréquence de coupure pour mon filtre.

    CODE :
    N4 = length(ix4h); % Nombre de points
    NFFT = 2^nextpow2(N4); % Next power of 2 from length of y
    Y = fft(ix4h,NFFT)/N4;
    f = fe/2*linspace(0,1,NFFT/2+1);
    a1 = figure;
    plot(f,2*abs(Y(1:NFFT/2+1)));
    title('fft y')
    [C, I] = max(2*abs(Y(1:NFFT/2+1)));
    fc = 2*I;



    [b, a] = butter(1, 1/(2*fc), 'low');
    P_FILTREE= filter(b, a, ix4h);
    a2 = figure;
    plot(axe_temps, P_FILTREE, axe_temps, ix4h);
    title('filtrer');
    ---------------------------------------------------------

    En fait je crois que j'ai compris. Ici ma FFT à pour abscisse "f" et pour ordonnée "2*abs(Y(1:NFFT/2+1))".
    Quand je tape f dans la console j'ai une matrice <1x8193double>. C'est sa 892ème valeur à lui qu'il me faut non?
    Est-ce bien ça? Si oui comment j'extraie une valeur voulue d'une matrice? ^^"

  9. #8
    Antoane
    Responsable technique

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    plot(f,2*abs(Y(1:NFFT/2+1)));
    title('fft y')
    [C, I] = max(2*abs(Y(1:NFFT/2+1)));
    Tu aurais pu créer un vecteur :
    chien = 2*abs(Y(1:NFFT/2+1)) ;


    plot(f,chien);
    [C, I] = max(chien);
    Le maximum est atteint en f(I) et il vaut C
    Dernière modification par Antoane ; 02/03/2017 à 16h06.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  10. #9
    Krafter

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Purée YES c'est ça merci mille fois c'est pour une présentation demain je m'ararchais les cheveux, plus qu'à rusher maintenant!

    Effectivement f(I) = 88 et quelques pile ce que je veux! OUF! Purée merci ^^


    J'aurai pu créer un vecteur chien à la place de [C I]? Moi je trouve ça sympa et en hommage à ton aide je veux bien, mais après j'ai plus mon C et mon I?
    Comment je ferai pour avoir mon I de chien? ^^

    (après le plot et le title je les avais rajouté à l'arrache pour vérifier durant mes tests, ils vont pas rester )

  11. #10
    Antoane
    Responsable technique

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    J'ai probablement modifié mon message pendant que tu répondais, il doit être plus clair à présent.
    J'aurai pu créer un vecteur chien à la place de [C I]? Moi je trouve ça sympa et en hommage à ton aide je veux bien, mais après j'ai plus mon C et mon I?
    Comment je ferai pour avoir mon I de chien? ^^
    Le but est de clarifier et simplifier ton code (avec un nom de variable intelligemment choisi). Trouver la même expression à deux lignes d'écart, c'est généralement pas bon signe pour la propreté de ton code. Sans compter que cela limite les risques d'erreur (tu modifies seulement une ligne et pas l'aurte et ne comprend plus pourquoi l'affichage ne correspond pas aux résultats calculés, etc).
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  12. #11
    Krafter

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Ok! Et dis moi tu saurais comment chopper la 2ème plus haute valeur de ma courbe avec le même principe? Avoir la position de la 2ème harmonique mais je connais que la commande max() donc j'y arrive pas

  13. #12
    Krafter

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Parce que évidemment l'essai suivant j'ai un pic en zéro et donc je peux pas avoir fc = 0.......
    Du coup j'me dis je vais prendre le pic suivant j'imagine? J'y connais rien en filtres....

  14. #13
    Antoane
    Responsable technique

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Bonjour,

    Ya diverses façons de faire, tant d'un point de vue algorythmique de programmation.
    Tu peux par exemple ne pas chercher le maximum dans tout le vecteur chien et remplacer certaines valeurs (les valeurs autour de zéro et autour du fondamental, par exemple) par -∞.

    Il est simple de filtrer dans le domaine fréquenciel puisqu'il suffit de mettre les élément du vecteur contenant la FFT à zéro.

    Exemple :
    dans la première section, on cherche le fondamental -- comme précédemment.
    dans la seconde section, on retire de la zone de recherche les données situées dans une bande de fréquence de largeur 2*df autour de f0 (filtre passe-bande)
    dans la troisième section, on retire de la zone de recherche les données situées entre les fréquences fm et fM (filtre passe-bande)
    Code:
    %% recherche du fondamental :
    [C, I] = max(chien); 
    
    f0=f(I) ; % fréquence  du fondamental
    
    %% Recherche du maximum suivant 
    df = 10 ; % bande de fréquence de chaque côté d'un pic où on ne cherche pas de nouveau pic 
    
    
    indexDesFreqAutourDeF0 = (f > (f0-df)) & (f < (f0+df)) ;
    chien2 = chien ; % init
    chien2(jx) = -inf ; % mettre 'chien2(jx) = 0;' revient au même
    
    figure, 
    plot(f, chien2) 
    titre('là où on cherche le 2e pic')
    
    [C2, I2] = max(chien2) ;
    
    f2 = f(I2) ; % fréquence du 2e pic
    plot(f2, C2, 'xr') % montre le 2e pic. 
    
    %% Supression des données entre les fréquences fm et fM
    fm = 0; 
    fM = 50 ;
    
    indexDesFreqAutourQuOnVeutPas = (f > fm) & (f < fM) ;
    chien3 = chien ; % init
    chien3(jx) = -inf ; 
    
    figure, 
    plot(f, chien3) 
    titre('là où on cherche le prochain pic')
    
    [C3, I3] = max(chien3) ;
    
    f3 = f(I3) ; % fréquence du 2e pic
    plot(f3, C3, 'xr') % montre le 2e pic.
    Dernière modification par Antoane ; 02/03/2017 à 17h48.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  15. #14
    Krafter

    Re : Trouver le Max d'une courbe : fonction max() ne marche pas??

    Me re-voilà,

    Impeccable un gros merci pour toutes ces réponses! (j'étais un peu en panique pour la dernière question ^^)
    Merci!

Discussions similaires

  1. trouver la fonction d'une courbe grace a son graphe
    Par oumnion dans le forum Mathématiques du collège et du lycée
    Réponses: 8
    Dernier message: 21/06/2016, 10h05
  2. Défi trouver le nom d'une courbe
    Par wishman dans le forum Mathématiques du supérieur
    Réponses: 10
    Dernier message: 21/05/2015, 21h43
  3. Détermination d'une fonction exponentielle décroissante en fonction de sa courbe
    Par Julio15 dans le forum Mathématiques du collège et du lycée
    Réponses: 15
    Dernier message: 24/05/2012, 21h59
  4. Trouver l'équation d'une courbe en fonction d'un tableau de valeur
    Par invite9ded9890 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 07/09/2010, 21h19
  5. trouver la fonction d'une courbe a partir d'un graphique
    Par hterrolle dans le forum Mathématiques du collège et du lycée
    Réponses: 11
    Dernier message: 10/05/2007, 19h50
Découvrez nos comparatifs produits sur l'informatique et les technologies.