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 :

Utilisation de la fonction unwrap


Sujet :

MATLAB

  1. #1
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut Utilisation de la fonction unwrap
    Bonjour à tous,

    C'est mon premier message, donc excusez le placement de celui-ci, s'il est incorrect, ou la forme...

    Voila, j'ai un soucis avec la fonction unwrap.

    Si j'ai bien compris, elle me sert, dans le cas où il y ai un "saut" dans la série de valeur, à créer un offset permettant de créer une fonction continue.

    Valeurs :
    Columns 1541 through 1544

    -1.2303 -1.2923 -1.3543 -1.4163

    Columns 1545 through 1548

    -1.4783 -1.5403 1.5393 1.4773

    Columns 1549 through 1552

    1.4153 1.3533 1.2912 1.2292
    Comme vous pouvez le voir, j'ai un saut dans la série de valeurs. En effet, j'utilise une fonction "atan"... bornée, évidemment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:length(H)
        phi(i) = atan( imag(H(i)) / real(H(i)) );
    end
    H étant un vecteur de 2000 valeurs, j'ai donc un nombre de "saut" très important. Lorsque je "plot", mon signal est en "dents de scie" au lieu d'avoir une belle ligne droite.

    J'ai donc tenté d'implémenter le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:length(H)
        phi(i) = unwrap( atan( imag(H(i)) / real(H(i)) ) );
    end
    Mais ma série de valeurs reste identique...

    J'ai "bidouillé" le "TOL" de la fonction unwrap avec différentes valeurs... sans grands espoirs ni succès...

    Merci infiniment de vos réponses !


    Kimy from Ireland.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    dans la doc de unwrap :
    Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of +/-2pi when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of pi radians.
    Or ton saut est plus petit que pi.

    Sinon pour le calcul, utilise plutôt atan2 qui renvoie une valeur entre -pi et pi.

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    PARFAIT !!!

    Ca fonctionne à merveille ! Merci pour le coup de main !

    J'ai dû enlever ma boucle "for" pour atan2, en plus.

    Cependant, une question subsite :
    Pourquoi, lorsque je mettais un TOL = pi/2 dans ma fonction unwrap de mon premier programme, le compilateur ne créait pas mon fonction continue ?

    Bref, merci infiniment ! =)


    Kimy from Ireland.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Tu aurais pu enlever la boucle déjà avec atan en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    phi = atan( imag(H) / real(H) );
    et unwrap n'a de sens que pour une série de valeurs, pas pour une valeur unique.

    Pour ta dernière question, encore une fois il faut lire la doc :
    Note A jump tolerance less than π has the same effect as a tolerance of π. For a tolerance less than π, if a jump is greater than the tolerance but less than π, adding ±2π would result in a jump larger than the existing one, so unwrap chooses the current point. If you want to eliminate jumps that are less than π, try using a finer grid in the domain.

  5. #5
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Ok. J'ai pourant lu, mais pas au bons endroits !

    Je te remercie beaucoup pour tes réponses, elles m'ont été très utiles et j'ai pu terminer mon fitre de Vuvuzela ! =D


    Kimy from Ireland.

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

Discussions similaires

  1. [LG]Utilisation de la fonction time
    Par kmitz dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2005, 13h05
  2. Utilisation de la fonction de déploiement
    Par mchicoix dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/03/2005, 14h35
  3. [LG]Utilisation de la fonction Random
    Par chloe95 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2005, 14h20
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

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