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

Signal Discussion :

Second Ordre Matlab


Sujet :

Signal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Second Ordre Matlab
    Bonjour,

    Je souhaiterais simuler sous matlab un second ordre avec en entrée un signal de type échelon décalé mais ma connaissance de matlab étant reinstreinte je me retrouve bloqué.

    Voici mon code:
    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
     
    K=380;                                                     %Gain statique
    Tp=30;                                                     %Temps de réponse
    w0= (2*pi)/Tp ;                                           %Pulsation propre
    D=10;                                                     %Dépassement
    z=(-log(D/K))/(sqrt(pi^2+log(D/K)^2));                    %Amortissement
    t=0:0.1:140;                                             %Base de temps
     
    num=[K*w0^2];
    den=[1 (2*z*w0) (w0^2)];
     
    v=(length(t)+1)/2                              
    x=(length(t))/2
    input=[zeros(1,x) ones(1,v)];                          %Génération de mon signal échelon
     
    sys = tf(num,den,);
    Mais voila je ne sais pas comment solicité mon système par rapport à mon entrée.

    Merci de me venir en aide

    Nicolas

  2. #2
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse, j'ai résolu mon problème.

    Maintenant j'aimerais pouvoir concaténer deux fonctions , je m'explique:

    Par exemple de 0 a t=33s la fonction prend une valeur continue et ensuite de t=33 s à la fin il prenne mon second ordre?

    Aurait tu une solution ?

    Nicolas

  4. #4
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    De rien

    Hmm, ton explication manque de précision et de clarté : il est donc difficile de te comprendre.

    Essaye de donner plus de détail en expliquant simplement mais rigoureusement stp. Là, selon ce que tu souhaites réellement faire et de ce que tu sais/ne sais pas potentiellement faire, je vois une dizaine de solutions, et je n'ai pas trop envie de toutes les exposer...

    Au pire, si tu as déjà un bout de code, donne-le : des fois, ça peut aider à comprendre rapidement.
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'ai besoin de modéliser un fonction particulière.

    Je vais de la décrire, y=0 de t [0,25]
    y=250 de t [25 40]
    de t [40 a la fin] la courbe prend la forme de mon second ordre défini précédemment

    de long discours ne vale pas une image




    J'espere que cela est plus clair pour toi.

    En concernant le code je ne sais pas trop par ou partir j'ai échelonné mon temps t=0:0.1:140
    et creer un échelon pour la fonction du second ordre

  6. #6
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    y=0 de t [0,25]
    y=250 de t [25.1 40]
    de t [40.1 a la fin] la courbe prend la forme de mon second ordre défini précédemment
    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
    Z = step(sys);
     
    dt = 0.1;
     
    t1 = [0:dt:25];
    indice_t1 = [1:size(t1)];
    y(indice_t1) = 0;
     
    t2 = [25+dt:dt:40];
    indice_t2 = [indice_t1(end)+1:indice_t1(end)+size(t2)];
    y(indice_t2) = 250;
     
    t_fin = 100;
    t3 = [40+dt:dt:140];
    indice_t3 = [indice_t2(end)+1:indice_t2(end)+size(t3)];
    y(indice_t3) = Z;
     
    t = [t1 t2 t3];
    Concaténation
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'obtiens une erreur


    In an assignment A(I) = B, the number of elements in B and I must be the same.

    Error in Modele_Moteur (line 91)
    y(indice_t3) = Z;

  8. #8
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Si tu as généré Z avec un step, il faut que la "longueur" de sa base temporelle soit la même que celle de t3.

    Ici, la longueur de la base temporelle t3 s'obtient en tapant :

    ou encore :

    Ici, l'erreur te dit justement que la longueur de la base temporelle n'est pas la même... En gros, tu essayes de faire rentrer une centaine de fraises dans un bac ne pouvant en contenir qu'une dizaine, et le jardinier t'insulte à cause de ça (ici c'est matlab qui t'insulte)

    ps1: et si tu essayes de faire rentrer une dizaine de fraises dans un bac pouvant en contenir une centaine, bah au départ, ce sera l'écologiste qui te tapera sur les doigts (bon là, ça reste matlab qui t'insulte avec la même erreur)... mais il reste possible de le faire, à condition de le faire avec tact (et ça reste vrai sous matlab) !

    ps2: si tu as un signal SIG ayant une base temporelle TEMP, alors leurs tailles sont identiques

    ps3: il y avait un champ de fraises en face de chez moi quand j'étais petit
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Je te remercie,

    J'ai un peu remanier ton code à ma facon

    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
     
    t=0:0.1:140;  
     
    output_f=lsim(num_f,den_f,input_f,t);
     
     
     
    dt = 0.1;
     
    t1 = [0:dt:25];
    indice_t1 = [1:size(t1)];
    y1=zeros(1,length(t1))
     
    t2 = [25+dt:dt:40];
    y2=250*ones(1,length(t2));
     
    t3 = [40+dt:dt:140];
    y3 = output_f(length(t1)+length(t2)+1:end)
     
    y=[y1 y2 y3]
    J'aimerais savoir comment modifier ma formule du second ordre pour qu'elle prenne en valeur initiale 250 au lieu de démarrer de zéro.

    Ps: Avec les fraises c'est de suite plus simple :p

  10. #10
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Les fonctions de transfert sont (malheureusement) écrites d'une manière abusive (pour ne pas dire erronées) - et ce - partout dans le monde, et systématiquement en plus, et depuis toujours. Ceci conduit à des erreurs d'interprétation chez tout le monde, et tu n'échappes bien sûr pas à la règle (et moi non plus d'ailleurs, je n'y ai pas échappé ).

    Quand on écrit une fonction de transfert, une hypothèse FONDAMENTALE de son obtention est d'avoir des conditions initiales nulles. Un peu de lecture à ce propos.

    Cependant, dans la vie de tous les jours, les conditions initiales ne sont jamais nulles. En effet, on a toujours y(0) = ctte. Dans ce cas, pour pouvoir écrire ta fonction de transfert Y/U, tu as d'abord supposé (sans t'en rendre compte) que tu as fait un changement de variable : Y = y - y(0). Ceci te permets donc d'écrire ta fonction de transfert convenablement. Si tu souhaites ré-obtenir y, il te suffit d'utiliser la même équation dans l'autre sens : y = Y + y(0) !

    En clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    y3 = output_f(length(t1)+length(t2)+1:end) + 250
    ps: un jardinier te dirait que toutes ses fraises sont identiques quand tu les achètes initialement... à une constante près néanmoins : leur taille initiale
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup de ces explications claires et précises.

    Dommage qu'il n'y ai pas une histoire de fraise la dedans

  12. #12
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Petit détail supplémentaire : ce que j'ai dit est présupposé vrai dans matlab, même si l'aide ne le précise pas du tout... En effet, il est impossible de spécifier les conditions initiales dans "step" ou "lsim" : elles sont tout bonnement supposées comme "évidentes". C'est à dire égales à zéro. C'est pour ça que tu es obligé de procéder comme je t'ai indiqué.
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    En créant une fonction du premier ordre

    Matlab me retourne cette erreur:

    Error using DynamicSystem/lsim (line 85)
    When simulating the response to a specific input signal, the input data U
    must be a matrix with as many rows as samples in the time vector T, and
    as many columns as input channels.

    Error in lsim (line 115)
    [yout,t1,x] = lsim(sys,u,t,x0);

    Alors que lorsque je fais mes calculs en dehors de ma fonction celle ci fonctionne, je t'avouerais ne pas trop comprendre:

    voila ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function [output] = premier_ordre (K, Tau,t,t_off,t_on)
     
    num=[K];
    den=[Tau 1];
     
    x=(length(t)+1)*t_off;
    z=(length(t)+1)*t_on;
     
    input=[zeros(1,x) ones(1,z)];
     
    output=lsim(num,den,input,t)
     
     
    end
    Voila comment je l'appele:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [N3]=premier_ordre(30,9,t,0.5,0.95)

  14. #14
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Vérifies que la dimension de la base temporelle et que le nombre de lignes de la commande que tu envoies à LSIM soient identiques, puis que le nombre d'entrées de ton système corresponde bien au nombre de colonnes de la commande que tu envoies à LSIM (je t'ai juste traduit le message d'erreur).
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Je viens de m'appercevoir de mon erreur j'ai oublier un 0 apres la virgule .....

    My bad

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Je reviens à la charge avec une nouvelle courbe à modéliser:

    Nom : 101391.png
Affichages : 3144
Taille : 47,4 Ko

    Je pensais la modéliser par un premier ordre mais encore mes lacunes en math me font défauts.

    Si vous pouviez m'aider.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/05/2009, 19h46
  2. [ode45] Résoudre une équation seconde ordre
    Par nidjzaf dans le forum MATLAB
    Réponses: 7
    Dernier message: 05/04/2009, 20h34
  3. Equation intégrale de Fredholm du second ordre
    Par greghor dans le forum MATLAB
    Réponses: 12
    Dernier message: 07/03/2009, 17h22
  4. Réponses: 2
    Dernier message: 22/11/2007, 14h58
  5. Equation différentielle du second ordre
    Par moustiqu3 dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/05/2007, 09h38

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