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 :

Diagramme de phase et utilisation de la fonction unwrap


Sujet :

MATLAB

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 542
    Points : 187
    Points
    187
    Par défaut Diagramme de phase et utilisation de la fonction unwrap
    Bonjour,

    je suis en train de réaliser un diagramme de Bode (amplitude, phase) d'un système à 2ddls.
    Par contre, je n'obtiens pas exactement ce que je veux au niveau du diagramme de phase.
    Celle-ci reste compris entre 0 et pi. Or, j'aurais aimé que le tracé du diagramme de phase soit continu et ne reste seulement compris entre 0 et pi.
    Pour mieux expliciter mon souhait, je vous ai mis le tracé du diagramme de phase que j'ai obtenu avec maple.

    Voici ce que j'obtiens avec matlab :

    Nom : code matlab.GIF
Affichages : 731
Taille : 103,4 Ko

    Voici ce que j'obtiens avec maple :

    Nom : code maple.GIF
Affichages : 680
Taille : 23,4 Ko

    Apparamment, il y a une fonction unwrap qui devrait répondre à mon besoin. J'ai essayé mais celà ne semble pas me changer mon diagramme des phases.

    Voici mon code matlab :

    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
    49
    50
    51
    52
    53
    54
    55
    56
     
    %% Tracé de la FRF
     
    % Initialisation 
    clear all
    close all
    clc
     
    % Définition numérique des paramètres
    m=1; k=10^6; c=10;
     
    % mass matrix
    M = [m 0; 0 m] ;
     
    % damping matrix
    C = [2*c -c; -c c];
     
    % stiffness matrix
    K = [2*k -k; -k k];
     
    Df = 400/800;
    freq = [Df:Df:400];
     
    omega = freq*2*pi;
     
    for i = 1:length(omega)
        MDK = K+1i*omega(i)*C-omega(i)^2*M ;
        MDKi = inv(MDK) ;  
        H11(i) = MDKi(1,1);
        H21(i) = MDKi(1,1);
    end
     
    figure
    subplot(2,2,1)
    plot(freq,abs(H11))
    xlabel('Frequency [Hz]')
    ylabel('H_{11}')
    grid on
     
    subplot(2,2,2)
    plot(freq,abs(H21))
    xlabel('Frequency [Hz]')
    ylabel('H_{21}')
    grid on
     
    subplot(2,2,3)
    plot(freq,unwrap(angle(H11)))
    ylabel('Phase  [rad]')
    xlabel('Frequency  [Hz]')
    grid on
     
    subplot(2,2,4)
    plot(freq,unwrap(angle(H21)))
    ylabel('Phase  [rad]')
    xlabel('Frequency  [Hz]')
    grid on
    Je vous remercie d'avance pour votre aide.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Technicien optique intrumentale et optronique
    Inscrit en
    Avril 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien optique intrumentale et optronique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Bonjour.

    Je ne sais pas si c'est encore d'actualité, mais ...
    Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a matrix, unwrap operates columnwise. If P is a multidimensional array, unwrap operates on the first nonsingleton dimension.

    Q = unwrap(P,tol) uses a jump tolerance tol instead of the default value, π.

    Q = unwrap(P,[],dim) unwraps along dim using the default tolerance.

    Q = unwrap(P,tol,dim) uses a jump tolerance of tol.
    UNWRAP ne "déroulera" la fonction que lorsqu'elle connaitra des sauts 180° (ou 90°, ou pas réglable)... et non lorsque ta valeur dépassera ton pas

    Une des solution reviens à chercher tes valeurs qui dépassent, puis à leur appliquer un offset de +/-2*pi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    variable=fonction;
    variablefind=find(abs(variable)>pi);
    while abs(variable(variablefind))>pi
                  variable(variablefind)=variable(variablefind)-sign(variable(variablefind))*2*pi;
                  variablefind=find(abs(variable)>pi);
    end
    Edit :

    Tu peux le faire en indexation automatique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    variable=fonction;
    while abs(variable(abs(variable)>pi))>pi
             variable(abs(variable)>pi)=variable(abs(variable)>pi)-sign(variable(abs(variable)>pi));
    end

Discussions similaires

  1. Utilisation de la fonction unwrap
    Par Kimy_Ire dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/11/2011, 18h01
  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