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 :

donnees caracteristiques d'un pic de diffraction


Sujet :

MATLAB

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut donnees caracteristiques d'un pic de diffraction
    Bonjour,
    Je travaille sur des pics de diffraction, je prend leur FFT...ce qui me donne des pics egalement.
    Maintenant j'aimerais ecrire un script pour mesurer la valeur maximale de ma FFT et sa position en abscisse, la largeur a mi-hauteur, la largeur au dixieme de la hauteur et peu etre d'autre largeur et donnees caracteristiques...
    Je vois pas trop comment mis prendre:

    deja pour determiner le maximum, je dois peu etre pouvoir utiliser la fonction max?
    Apres pour retourner la valeur de l'abscisse corresponde, j'arrive pas vraiment a trouver une maniere simple et rapide.

    Par contre pour determiner les largeur, je n'est pas encore trouve si il existe des fonction predefinit dans matlab.


    ps: comment fait on pour augmenter la largeur des traits de mes plots de facon general sur toutes mes figures?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Citation Envoyé par dani_dan Voir le message
    Bonjour,
    Je travaille sur des pics de diffraction, je prend leur FFT...ce qui me donne des pics egalement.
    Maintenant j'aimerais ecrire un script pour mesurer la valeur maximale de ma FFT et sa position en abscisse, la largeur a mi-hauteur, la largeur au dixieme de la hauteur et peu etre d'autre largeur et donnees caracteristiques...
    Je vois pas trop comment mis prendre:

    deja pour determiner le maximum, je dois peu etre pouvoir utiliser la fonction max?
    Oui bien sur !

    Citation Envoyé par dani_dan Voir le message
    Apres pour retourner la valeur de l'abscisse corresponde, j'arrive pas vraiment a trouver une maniere simple et rapide.
    Normalement lors de ton plot, tes deux matrices sont de même taille. Donc trouve l'indice du max avec FIND :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    indice_max = find(FFT==max(FFT))
    et ensuite récupère l'abscisse avec cet indice

    Citation Envoyé par dani_dan Voir le message
    ps: comment fait on pour augmenter la largeur des traits de mes plots de facon general sur toutes mes figures?
    Utilises LineWidth (voir >>doc plot pour plus d'infos)

  3. #3
    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
    Citation Envoyé par dani_dan Voir le message
    deja pour determiner le maximum, je dois peu etre pouvoir utiliser la fonction max?
    Ça parait pas mal
    Et si tu regardes l'aide tu verras que tu peux avoir l'indice en 2ème argument, ça peut servir.

    Après il y a peut-être des choses plus adaptées, voir ce sujet : Détection de pics

    [EDIT]@Newenda : non même pas besoin de FIND ici c'est ce que je dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [dummy,indice_max]=max(FFT)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Citation Envoyé par Caro-Line Voir le message

    [EDIT]@Newenda : non même pas besoin de FIND ici c'est ce que je dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [dummy,indice_max]=max(FFT)
    Ha oui tient, pratique.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Super, merci pour votre aide, j'obtiens ce qu'il me faut pour le max et en abscisse.
    Par ailleurs je suis alle voir le topic que tu m'as mis en lien Caro-line. C'est pas vraiment ce que je souhaite obtenir (si j'ai bien compris).
    Maintenant ce qu'il me faudrait c'est calculer les largeurs a mis hauteur de mes FFT(puis d'autres largeur comme 1/10, 1/30 ...).

    Voir ce que j'obtiens typiquement sur l'image attachée

    J'ai bien une idee mais c'est un peu brutal et pas assez precis!
    Travailler sur les indices de mes vecteurs et soustraire leur valeurs en abscisse(les FFT de mes pics sont symetriques par rapport au max)..
    L'ideal serait de prendre les largeur a mis hauteur et non pas en raisonnant sur les indices de mes vecteurs car sinon je n'est pas de point de comparaison entre mes differentes series, car pour chaque series les 2 prochains points en dessous de mon max peuvent representer la 1/2 hauteur comme la 1/(2+0.1)....
    Images attachées Images attachées  

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Peu etre une autre idee, j'ai cas approcher ma courbe(FFT) avec un polynome, apres je prend dummy/2 et je resoud en trouvant les 2 abscisse correspondant.
    Si vous avez une meilleure idee, je suis preneur

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Du coup je fais une interpolation par un polynome d'ordre n.
    j'ai donc y= a0 +a1*x^1+....+an*x^n.
    quand j'ai une valeur y (typiquement y=dummy/2) fixe et que je cherche les solutions en x, apriori faut que je me serve de solve.
    Pblm: j'ai pas la Symbolic Math Toolbox
    Comment puis je faire?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    j'avais dis cela auparavant:
    J'ai bien une idee mais c'est un peu brutal et pas assez precis!
    Travailler sur les indices de mes vecteurs et soustraire leur valeurs en abscisse(les FFT de mes pics sont symetriques par rapport au max)..
    L'ideal serait de prendre les largeur a mis hauteur et non pas en raisonnant sur les indices de mes vecteurs car sinon je n'est pas de point de comparaison entre mes differentes series, car pour chaque series les 2 prochains points en dessous de mon max peuvent representer la 1/2 hauteur comme la 1/(2+0.1)....
    Cela n'a vraiment pas d'interet car le pas est constant, donc j'obtiens toujours les memes valeurs pour les memes indices de points symetriques de mes differentes datas. Avec le recul, biensur!

    L'interpolation par un polynome reste la seule solution a mes yeux (en prenant plus de points dans ma FFT que sur le graphe ci dessus, car sinon ;les resultats sont biaises pour l'interpolation), mais reste le probleme de resoudre l'equation precedente sans solve...

  9. #9
    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
    Citation Envoyé par dani_dan Voir le message
    L'interpolation par un polynome reste la seule solution a mes yeux
    Je vois mal comment un polynôme pourrait interpoler tes valeurs de façon robuste... si ce n'est en montant l'ordre du polynôme... ce qui entrainera inévitablement d'autres problèmes...

    Je pense plutôt que tu devrais utiliser une fonction polynomiale par morceau (genre spline, pchip)

    As-tu essayé avec l'outil Basic Fitting (Menu Tools > Basic Fitting de la Figure courante) ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Bien c'est justement le probleme que j'ai la robustesse de l'interpolation, je pense pouvoir l'ameliorer si je passe de 512 pts a 512*2^n pour ma FFT, pour l'instant n=3 me semble pas mal.
    Mais j'ai pas tenter l'interpolation dessus.
    Pour l'instant le serveur ou je bosse est en maintenance (), donc je verrai donc cela demain, merci des tuyaux
    bonne soiree a tous

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    J'arrive a une bonne interpolation avec spline de mes fft.
    Par contre, cette interpolation me permet elle de determiner la largeur a mis hauteur de ma fft?

    exemple
    y=ordonnee de ma fft (abs(fft)) (tout est shift pour les fft)
    x= abscisse fft
    ymax= maximum de ma fft

    je cherche les 2 valeurs de x pour laquelle y=ymax/2;
    Ce qui revient a resoudre ymax/2= interpolation(abs(fft))

    je comprend pas trop comment fonctionne spline (d'apres ce que j'ai compris, interpolation par morceau par des polynome, donc je n'ai pas de polynome uniquement sur mon domaine totale mais j'en ai autant que j'ai de morceau et ils sont relatifs respectivement a leur portion).
    A partir de la je vois pas trop comment je pourrais recuperer les valeurs de x qui m'interessent?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    En fait j'ai trouve pas mal de reponses a mes questions.
    Par contre j'aimerais savoir comment je peux recuperer les coefficeints polynomials calculer par la fonction spline.
    Mettons que j'ai N morceaux, donc sa fait N polynomes de degres 3 respectifs a chaque morceau. ce que j'aimerais c'est recuperer les valeurs des coefficients polynomiale du morceau k (k appartenant a N).
    J'avoue que je seche un peu

    ps: si vous voulez des precisions dite le moi, peu etre que j'explique pas tres bien la ou je butte

  13. #13
    Membre chevronné
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Par défaut
    Je ne suis pas du tout expert en diffraction, mais quand tu parles de pics en physique, très très très souvent, les pics sont soit des gaussiennes soit des lorentziennes. Donc en gros, si j'étais toi, je regarderais quelle type de courbe tu t'attends à avoir et ensuite, je ferais un fit avec l'une ou l'autre de ces fonctions, qui, au passage, donne directement accès au grandeur que tu veux calculer. En regardant ton image, il y a l'air de ne pas avoir un seul pic, mais plutôt deux (enfin ça dépend quels pics tu regardes^^). Mais le principe pour fitter reste le même.

    ++

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Le deuxieme pic c'est du signal de fond(background du a un materiau tjrs present lors de laquisition).
    C'est effectivement un bonne idee les Gaussiennes et LOrentziennes, mais c'est le cas theroriques et pour mes datas c'est pas possible de tenter un fit car sa en est trop eloignee.
    De plus si je m'interesse au largeur de mes tf et en prenant plus de pts pour mes fft, j'obtiens vraiment pas un style gaussien, ni lorentzien, encore que gaussien fonctionnerai pour ma partie haute de mes tff mais je compte prendre les demi largeur, et 1/10....

    La fonction spline est impeccable pour l'interpolation, apres ce que je fais c'est que je reduis le domaine de facon symetrique par rapport a mon pics, du coup sa me fait moi de morceau.

    L'idee que j'ai eu c'est savoir dans quels morceau je me situe quand je prend le max/2, si je sais le morceau, je dois pouvoir extraire les coeff du polynome d'ordre 3 correspondant. (c'est cela que je veux extraire)
    Apres je me suis taper le cacul a la main et pour des raisons de symetries de mon pic je peux trouver la valeur en abcisse correspondant au max/2 en resolvant une equation de degres 2 (discriminant, donc sa ne posera pas de pblm)

    Ce que je tente de faire et ce qui me bloque c'est ma meconnaissance de la fonction spline. Mais si vous voulez je peux vous mettre mon bout de code et ce que j'obtiens avec spline(x,y), je peux mettre une ou deux courbes explicatives et de meilleurs qualite que ce que j'ai poste. Oui je ferais sa demain.

  15. #15
    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
    La fonction SPLINE te retourne les valeurs discrètes de la courbe.

    Tu peux déterminer "l'intersection" entre cette courbe et la droite y = fftmax/2 en supposant la variation linéaire entre deux points de la spline

    Il y a plusieurs discussions à propos de ces intersections sur le forum.

    Cette méthode reste empirique mais devrait permettre d'obtenir des résultats rapidement

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Bonjour,
    je suis desole mais j'ai du mal a trouver les sujets concernant les intersections

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Voici mes TF de quelque echantillons:


    Typiquement l'echantillon 13 c'est du 100% tumeur, le 16 quasi 100% du tissue adipeux (sain). On voit donc que tenter une approche avec gaussienne ou lorentzienne c'est surement compris.

    Du coup dut, ce n'est pas possible de recuperer les coefficients polynomiaux d'un morceau? Car quand je fais spline(x,y) normalement sa me les calculs? N'est ce pas?

    Typiquement pour mes 19 echantillons, Y correspond a l'ensemble de mes spline(x,y).
    Voila ce que sa me retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Y = 
     
    1x19 struct array with fields:
        form
        breaks
        coefs
        pieces
        order
        dim
    Images attachées Images attachées  

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    yy(m-1)=spline(p,abs(fftshift(u)))
    sa me retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    yy = 
     
          form: 'pp'
        breaks: [1x4096 double]
         coefs: [4095x4 double]
        pieces: 4095
         order: 4
           dim: 1
    Donc j'ai bien mes coefs, je vois pas comment les recuperer pour un certain morceau (piece).
    Pour recuperer les coefs du morceau k je fais:
    ?

    Ps: je vois pas ce que c'est breaks?

  19. #19
    Membre chevronné
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Par défaut
    Bon, pour trouver l'intersection, il y a moyen de ruser. Parce que je pense que tu te compliques énormément la vie en voulant récupérer les coefficients. En gros, ce que tu fais, c'est que tu détermines la valeur à mi-hauteur avec max. Ensuite, il suffit de soustraire à tous tes points de la courbe cette valeur puis de prendre la valeur absolue de cette soustraction. Enfin, il te suffit de prendre trier tes valeurs (sort) de manière ascendante ('ascend'). Les abscisses des deux premières valeurs 'devraient' correspondre aux deux valeurs que tu cherches. Bon maintenant, ce n'est pas sûr et certain. Donc tu peux très bien faire un test en disant : si la largeur est inférieur à x, alors prendre le troisième point (parce qu'il se peut que les deux premiers points se suivent en fait). Voilà, je ne sais pas si je suis très clair, mais ça devrait marcher comme ça (ou en utilisant une méthode similaire...)

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Bonjour,
    je suis pas sur de te suivre; ton idee si je l'ai comprise est de soustraire les valeurs ymax/2 a tous mes points adjacents au pic et de recuperer la valeur x quand |delta(y)| proche de 0, en gros je peux faire une boucle for puis while. Ce dont je suis sur c'est que ma mis hauteur sur le dernier graph que j'ai poste ne correspond pas au points immediat suivant, car j'ai augmente le nombre de points dans ma FFT.
    Merci pour l'idee, je vais essayer cela.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 18h39
  2. [VB6] [Datareport] Caracteristiques et utilisation
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 17/05/2003, 17h52
  3. [VBA-E] [Excel] Filtrer le donnees d'une sheet
    Par donia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/09/2002, 11h55
  4. [VB6] [Access] Compacter une base de donnée
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/09/2002, 12h33
  5. [VB6] [ODBC] Référencer une base de données avec vb
    Par af.balog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2002, 10h51

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