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

Simulink Discussion :

Comment construire un diagramme de Bode avec une fonction de transfert


Sujet :

Simulink

  1. #1
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut Comment construire un diagramme de Bode avec une fonction de transfert
    Bonjour,

    J'ai un petit problème de compréhension sur le diagramme de Bode (enfin c'est pas Bode mon souci)

    Voilà, imaginons que dans simulink, j'ai une fonction de transfert toute simple (un premier ordre) h(p) = K / (1+p/omega0).

    Mais voilà on va supposer que je ne sais pas que vaut K et omega_0. Comment puis-je retrouver ces coefficients. EN faisant un diagramme de Bode.

    Oui mais voilà : là je suis complètement pommé, noyé, à l'ouest, .....

    J'ai mon bloque de fonction de transfert et je ne sais pas du tout comment faire une analyse fréquentielle. J'arrive avec une analyse temporelle, mais bon la méthode fréquentielle est plus robuste et je souhaiterai l'utiliser.

    Comprenez bien que mon soucis est de comprendre comment construire soit même un diagramme de Bode et pas d'appeler une fonction qui me tracera ce dernier

    Le diagramme de Bode se décompose en deux subplot, le premier trace |H(j omega))| en fonction d'omega. Le second trace arg(j omega) en fonction d'omega.

    Je suis coincé ici, je met quoi à l'entrée de ma fonction de transfert pour pouvoir faire mon diagramme de Bode et ses plots ?
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Salut.

    Le bloc Transfert Tcn sert au temporel.
    Pour le fréquentiel je ne vois rien d'autre que prendre une Fcn (f(u)) pour le gain et une pour la phase.
    Gain Fcn :20*log(K/sqrt(1+(u(1)/omega_o)^2))
    Phase :-180*atan(u(1))/pi
    et tu attaques deux XYGraph en abscisse avec Math Function (e^u) en choisissant log10. Il faut bien sûr définir K et omega_o.
    Il y a peut-être mieux !

  3. #3
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut


    Je croyais qu'on se servait du diagramme de Bode pour retrouver K et oméga ???

    De plus Bode trace :
    $ |H(j omega)|
    $ arg(H(j omega))

    Mon soucis c'est que je ne sait pas ce que représente H(j omega) : c'est la sortie de ma fonction de transfert attaqué par une entrée spécifique ? Mais dans ces cas là, laquelle (d'entrée : un sinus, un cosinus, une tangente hyperbolique, les chaussettes rouges et jaunes à petit poids ... )
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    je ne sait pas ce que représente H(j omega)
    H(j*omega) ou H(p) représente une fonction de transfert en p (p=j*omega). On l'appelle FT en boucle ouverte (BO).
    Son module : |H(j omega)| est la racine carrée de la somme des carrés des parties réelles et imaginaires.
    Sa phase : arg(H(j omega)) est l'arctg de la partie imaginaire sur la partie réelle.
    H(p) est donc une fonction fréquentielle qui représente une fonction de transfert : S/E= F(p). Si l'on veut une réponse temporelle (sinus, rampe, échelon...) il faut faire la transformée de Laplace inverse (pour p) F(p)= somme (f(t)*exp(-pt)*dt) ou la transformation en z (pour le discret).
    Si tu ne connais pas F(p) mais si tu connais le diagramme de bode, tu peux savoir les valeurs de K et de omega_0, l'ordre de la fonction de transfert...

  5. #5
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    DOnc, il n'y a pas moyen d'obtenir le diagramme de Bode à partir des entrées / sortie de ma fonction de transfert ???

    Imaginons que j'ai une boite noire
    Je dois pouvoir "plotter" son diagramme de Bode non ???
    Faut que j'existe ma boite noire par quelque chose ?
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    il n'y a pas moyen d'obtenir le diagramme de Bode à partir des entrées / sortie de ma fonction de transfert
    Si tu ne connais que E et S (temporel), on peut faire une identification de la fonction de transfert puis tracer Bode.

  7. #7
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    En faite j'ai la boite noir, donc je peux mettre n'importe quelle entrée E et récupéré la sortie S
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    il n'y a pas moyen d'obtenir le diagramme de Bode à partir des entrées / sortie de ma fonction de transfert
    Si tu peux choisir le signal d'entré, tu as plusieurs solutions :
    - Analyse impulsionnelle : tu envois une impulsion et la fonction de transfert est égale à la transformée de Laplace du signal de sortie.
    - Analyse harmonique (AH analogique et AHE numérique) : tu excites la boîte noire par une sinusoïde (en faisant varier la fréquence à chaque mesure) et tu calcules les gains et phases des signaux de sorties.
    - Analyse indicielle : on excite par un échelon et on identifie la fonction de transfert.

  9. #9
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par phryte Voir le message
    Si tu peux choisir le signal d'entré, tu as plusieurs solutions :
    - Analyse impulsionnelle : tu envois une impulsion et la fonction de transfert est égale à la transformée de Laplace du signal de sortie.
    - Analyse harmonique (AH analogique et AHE numérique) : tu excites la boîte noire par une sinusoïde (en faisant varier la fréquence à chaque mesure) et tu calcules les gains et phases des signaux de sorties.
    - Analyse indicielle : on excite par un échelon et on identifie la fonction de transfert.
    Je connais pour la réponse à l'échelon (sur un système d'ordre 1).

    Par contre, une impulsion c'est un dirac ?

    Et sinon pour la réponse harmonique (d'après ce que j'ai lu c'est la méthode la plus stable ) j'ai un ptit souci de compréhension du comment faire la chose :o ... Ha quoique tu veux dire que je balaye une gamme de fréquence çà me donne un gain et un déphasage ... ces gains vont etre le premier graphe du diagramme de Bode et le déphasage le second ???
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  10. #10
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    OK donc j'ai fait mon diagramme de Bode via :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    %% script de test harmonique
    clc;
    % clear all;
     
    F=reshape(repmat(cumprod([1e-2 repmat(10,1,5)]),9,1),1,9*6) .* repmat(1:9,1,6) ;
    % F contient les fréquence 1e-2 2e-2 .. 1e-1 2e-1 .... 9e3
    AllTest=cell(length(F),1) ;
     
    simopt_begin = simget('test_ordre1');
    open_system('test_ordre1');
    set_param('test_ordre1/SinusInput','Frequency','frequency');
    set_param('test_ordre1/SinusInput','Amplitude','1');
    set_param('test_ordre1/SinusInput','Bias','0');
    set_param('test_ordre1/SinusInput','Phase','0');
    set_param('test_ordre1/SinusInput','Offset','0');
    set_param('test_ordre1/SinusInput','SampleTime','0');
    set_param('test_ordre1/SinusInput','SineType','Time based');
    set_param('test_ordre1/SinusInput','TimeSource','Use simulation time');
     
    disp('TEST HARMONIQUE D''IDENTIFICATION DE FONCTION DE TRANSFERT (SIMULATION)');
    for ind_freq = 1:length(F)
        OneTest.freq = F(ind_freq) ;
        frequency = F(ind_freq) ;
        simopt=simset(simget('test_ordre1'),'MaxStep',pi/(250*frequency));
        sim('test_ordre1',[0 4*pi/frequency],simopt);
        OneTest.Scope = ScopeDataFrequentielle ;
        AllTest{ind_freq} = OneTest ;
        disp(sprintf('Test frequence %4.4f Hz OK',frequency));
    end;
     
    sim('test_ordre1',[0 0],simopt_begin);
     
    disp('TEST HARMONIQUE D''IDENTIFICATION DE FONCTION DE TRANSFERT (ANALYSE)');
    Gain      = zeros(1,length(AllTest)) ;
    Dephase   = zeros(1,length(AllTest)) ;
    Frequence = F ;
     
    for ind_freq = 1:length(AllTest)
        frequency = AllTest{ind_freq}.freq ;
        t         = AllTest{ind_freq}.Scope.time ;
        y_in      = AllTest{ind_freq}.Scope.signals.values(:,1) ;
        y_out     = AllTest{ind_freq}.Scope.signals.values(:,2) ;
     
        [ymin_in,indmin_in]   = min(y_in) ;
        [ymax_in,indmax_in]   = max(y_in(1:indmin_in)) ;
        [ymax2_in,indmax2_in] = max(y_in(indmin_in:end)) ;
        indmax2_in = indmax2_in+indmin_in-1;
     
        [ymin_out,indmin_out]   = min(y_out(indmin_in:end)) ;
        indmin_out = indmin_out + indmin_in - 1;
        [ymax_out,indmax_out]   = max(y_out(indmax_in:indmax2_in)) ;
        indmax_out = indmax_out + indmax_in - 1 ;
     
        Gain(ind_freq) = 0.5*(ymax_out-ymin_out)/(ymax_in-ymin_in);
        Dephase(ind_freq) = (t(indmax_out)-t(indmax_in))*frequency ;
    end;
     
    figure;
    subplot(2,1,1)
    semilogx(Frequence,20*log10(abs(Gain/2)));
    title(['Amplitude H(jw)']);
    ylabel('Amplitude [dB]');
    xlabel('W [rad/s]');
    grid on;
     
    subplot(2,1,2);
    semilogx(Frequence,Dephase*180/pi);
    title('Phase H(jw)');
    ylabel('Angle [deg.]');
    xlabel('W [rad /s]');
    grid on;
    En sachant que 'test_ordre1' est le modèle suivant :



    Et que mon scope sauvegarde les datas via la variable ScopeDataFrequentielle.

    J'obtiens alors le tant espéré diagramme de bode :


    Bon déjà je suis content le graphe des gain décroit de 20 dB par octave donc je retrouve bien le fait que ce soit un premier ordre

    Mais après pour obtenir la fréquence de coupure et le gain je ne sais pas comment faire
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  11. #11
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Salut.
    Bravo pourt le travail.
    la fréquence de coupure et le gain
    Tu les trouves lorsque le gain est à - 3dB (10*log(2))

  12. #12
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par phryte Voir le message
    Salut.
    Bravo pourt le travail.

    Tu les trouves lorsque le gain est à - 3dB (10*log(2))
    Et là, c'est le drame :

    car le gain pour la fréquence de 0.01 Hz est déjà de -3.015 et c'est la partie plate de ma courbe.
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  13. #13
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Salut.
    Ta phase est bizarre s'il s'agit d'un passe-bas d'ordre un (elle varie de 0° à -90° et la coupure est à -45°)

  14. #14
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par phryte Voir le message
    Salut.
    Ta phase est bizarre s'il s'agit d'un passe-bas d'ordre un (elle varie de 0° à -90° et la coupure est à -45°)
    J'ai pas trop de notion en traitement du signal. Je vois les fonctions de transfert plus du coté automaticien

    En faite la fonction de transfert est la suivante : K/(1+tau*s) ou K/(1+tau*p) comme tu veux :p avec K=sqrt(2) et tau = pi :o
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  15. #15
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    K/(1+tau*s)
    Tu dois avoir 20*log(K) en gain aux basses fréquences et la phase doit varier de zéro à - 90° avec la coupure à -90° à 1/tau.

  16. #16
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    C'est bon pour le gain j'obtiens une bonne approximation (1.4149 pour une valeur de 1.4142 donc en dessous de 1% d'erreur), par contre pour la pulsation 1/pi = 0.3183 j'obtiens une très mauvaise approximation (0.3317 soit un peu plus de 4% d'erreur).

    Peu être que ma méthode pour déterminer la fréquence de coupure n'est pas bonne : je prend la courbe du haut du diagramme de Bode et je cherche quand est ce que j'ai une perdre de 3dB par rapport à l'amplitude initiale.

    Il y a une autre façon de faire : tracer sur ce même graphe la droite y=-20*log10(Gain_initial) de tracer également la droite y=a*log10(frequence)+b avec en déterminant a et b grâce à la partie oblique de la courbe d'amplitude. Et là j'obtiens un résultat "encore plus faux" : avec un erreur plus grande
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  17. #17
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Salut.
    pour la pulsation 1/pi = 0.3183 j'obtiens une très mauvaise approximation
    C'est 1/tau !
    Si tu traces : y=-20*log10(Gain_initial)-3 la coupure avec la courbe doit tomber sur -90° de phase.

  18. #18
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par phryte Voir le message
    Salut.

    C'est 1/tau !
    Si tu traces : y=-20*log10(Gain_initial)-3 la coupure avec la courbe doit tomber sur -90° de phase.
    ??? comment çà doit tomber avec une phase de -90° !??! j'ai que des phase positive et la phase tend vers 90 sans l'atteindre :o
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  19. #19
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Pardon : à -45° !
    La précision est meilleure si on prend un pas logarithmique.

  20. #20
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    J'ai fait plusieurs essais, ma fonction de transfert est toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                   K
    H(s) =  ______________
               1 + tau * s

    * Pour K = 1 et tau = 1/3 :
    - Le graphe de gain me donne (gain initial + gain de -3dB) :
    $ K_graph = 1.0004 (au lieu de 1 : c'est bon)
    $ 1/tau_graph = 3.239 (au lieu de 3 : c'est pas du tout bon)
    - Le graphe de phase me donne (pour un déphasage de 45°) :
    $ 1/tau_graph = 3.530 (au lieu de 3 : c'est pas du tout bon)

    Pour retrouver 1/tau_graph = 3 il faut que j'applique un gain de -2.72 dB ou un déphasage de 41.03°

    * Pour K = sqrt(2) et tau = pi (1/pi = 0.3183):
    - Le graphe de gain me donne (gain initial + gain de -3dB) :
    $ K_graph = 1.4146 (au lieu de 1.4142 : c'est bon)
    $ 1/tau_graph = 0.3432 (au lieu de 0.3183 : c'est pas du tout bon)
    - Le graphe de phase me donne (pour un déphasage de 45°) :
    $ 1/tau_graph = 0.3824 (au lieu de 0.3183 : c'est pas du tout bon)

    Pour retrouver 1/tau_graph = 0.3183 il faut que j'applique un gain de -2.71 dB ou un déphasage de 40.77°

    * Pour K = 12 et tau = 1/20 :
    - Le graphe de gain me donne (gain initial + gain de -3dB) :
    $ K_graph = 12.0055 (au lieu de 12 : c'est bon)
    $ 1/tau_graph = 21.98 (au lieu de 20 : c'est pas du tout bon)
    - Le graphe de phase me donne (pour un déphasage de 45°) :
    $ 1/tau_graph = 23.65 (au lieu de 20 : c'est pas du tout bon)

    Pour retrouver 1/tau_graph = 20 il faut que j'applique un gain de -2.72 dB ou un déphasage de 41.04°


    Voilà, je comprends pas pourquoi je n'arrive pas à retrouver mes petits (surtout pour tau).

    Par contre chose curieuse le gain que je dois appliqué pour retrouver mon tau est de -2.72 pour les 3 expériences ci-dessus. Or, exp(1) = 2.7183, est-ce un coïncidence ???
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/12/2007, 18h49
  2. Réponses: 3
    Dernier message: 03/02/2007, 00h12
  3. Comment ne pas saturer l'ordi avec une boucle ?
    Par jenez dans le forum Windows
    Réponses: 5
    Dernier message: 30/09/2006, 23h01
  4. Réponses: 9
    Dernier message: 30/09/2006, 00h20
  5. Comment créer un site immobilier dynamique avec une base de données ?
    Par Alain troverti dans le forum Général Conception Web
    Réponses: 14
    Dernier message: 07/07/2006, 21h57

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