Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Signal en dents de scie sous matlab



  1. #1
    Tony78

    Signal en dents de scie sous matlab


    ------

    Salut à tous,
    Dans le cadre de mes études, je dois écrire un petit programme matlab me générant un signal en dents de scie.
    Je ne dois pas utiliser la fonction "sawtooth".

    Mon signal aura une amplitude A, un rapport cyclique teta et une période Tr.
    J'ai déjà écrit une fonction, mais elle ne fonctionne pas : Apparemment la condition est toujours fausse (j'ai un vecteur t allant de 0 à 20, de 1 en 1).

    Code:
    function out = dent_scie(A,t,teta,Tr)
        if (mod(t,teta)> teta) %Si t est après teta...
            out=0*(1-mod(t,Tr)/teta); %le signal est nul
    
        else %Sinon
            out = A*(1-mod(t,Tr)/teta);%Signal dent de scie
        end
    end
    Je ne suis pas vraiment familier avec matlab et je ne vois pas où si situe le problème...
    Pouvez-vous m'aider ?
    Merci,

    Tony

    -----

  2. Publicité
  3. #2
    b@z66

    Re : Signal en dents de scie sous matlab

    Tu as aussi la possibilité d'utiliser la fonction arctan(tan(t)) qui doit te dessiner une belle courbe en dents de scie.

    PS: Après c'est à toi de t'arranger pour ajuster la valeur moyenne, période, amplitude...

    PS2: Pour déboguer un programme le mieux c'est d'y insérer quelques lignes d'affichages de variables, cela permet de mieux suivre son exécution.
    La curiosité est un très beau défaut.

  4. #3
    b@z66

    Re : Signal en dents de scie sous matlab

    if (mod(t,Tr)> teta) %Si t est après teta...
    La curiosité est un très beau défaut.

  5. #4
    Tony78

    Re : Signal en dents de scie sous matlab

    Merci pour ta réponse.
    J'ai fait la modification que tu m'as conseillé, mais le programme ne fonctionne pas correctement. Le "teta" à la place du Tr ne convenait effectivement pas, mais cela ne résoud pas le problème.
    J'ai bien un signal en dents de scie, mais pas celui que je veux :
    Celui désiré ressemblerait à ça : |\__|\__|\__ ... (Entre 0 et A volts)
    Celui que j'ai est le suivant : |\|\|\|\|\|\ (De A, il descend à une valeur jusqu'à ce que mod(t,Tr) reparte à 0).

    Le problème vient de la condition : Apparemment, elle est toujours fausse...le programme va donc dans le bloc "else".

    J'appelle ma fonction avec la commande suivante :
    dent_scie(5,t,5,10);

    t a été généré avec une commande de la forme :
    t = 0:20;

    Je ne vois vraiment pas où pourrait se trouver l'erreur ...

  6. A voir en vidéo sur Futura
  7. #5
    b@z66

    Re : Signal en dents de scie sous matlab

    Suis mes conseils: mets des affichages de variables dans ton programme, vérifies que la longueur de tes vecteurs en entrée et sortie de ton programme sont identiques...Cela fait aussi quelques années que je n'ai pas fait de matlab mais je te conseillerai de vérifier que ta variable out est soit un vecteur en entier(toutes les variables ensemble), soit une variable faisant partie du vecteur. On dirait que tu as supposé la deuxième hypothèse...à toi de voir...

    que représente t dans ton programme? un vecteur ou une variable?
    Dernière modification par b@z66 ; 05/12/2007 à 14h56.
    La curiosité est un très beau défaut.

  8. #6
    Tony78

    Re : Signal en dents de scie sous matlab

    J'ai fait afficher 't' dans mon programme (disp (t)) au début du prog, ce qui a eu pour incidence d'afficher t à chaque fois que je lance le programme.
    t étant un vecteur de longueur n, la fonction calcule le résultat pour n instants, et la valeur de t est affichée n fois. J'ai pu m'appercevoir que t était modifié à chaque passage dans ma fonction "dent_scie".
    En sortie, j'ai un vecteur de longueur n.

    Tout colle à ce que je veux, sauf cette histoire de condition...

  9. Publicité
  10. #7
    Tony78

    Re : Signal en dents de scie sous matlab

    Je viens de faire un nouvel essai : J'affiche le résultat de la comparaison "mod(t,Tr)> teta". J'ai bien 0 quand la condition est fausse, et 1 lorsque c'est vrai, mais le bloc if ne réagit pas...

  11. #8
    b@z66

    Re : Signal en dents de scie sous matlab

    Citation Envoyé par Tony78 Voir le message
    J'ai fait afficher 't' dans mon programme (disp (t)) au début du prog, ce qui a eu pour incidence d'afficher t à chaque fois que je lance le programme.
    t étant un vecteur de longueur n, la fonction calcule le résultat pour n instants, et la valeur de t est affichée n fois. J'ai pu m'appercevoir que t était modifié à chaque passage dans ma fonction "dent_scie".
    En sortie, j'ai un vecteur de longueur n.

    Tout colle à ce que je veux, sauf cette histoire de condition...
    Ton programme est mal écrit puisqu'il suggère implicitement que t est une variable et non un vecteur. Ce qui se passe, c'est que lorsque tu calcules à chaque fois:

    out=0*(1-mod(t,Tr)/teta); %le signal est nul

    ou

    out = A*(1-mod(t,Tr)/teta);%Signal dent de scie

    Tu recalcules le vecteur out en entier et non pour des valeurs particulières lui appartenant.

    Il te faut indexer ces valeurs du genre t(1), t(2),...,t(size(t))
    out(1), out(2),...out(size(out)) et faire les calculs pour chaque index à l'aide d'une boucle for.
    La curiosité est un très beau défaut.

  12. #9
    Tony78

    Thumbs up Re : Signal en dents de scie sous matlab

    J'ai modifié le programme et utilisé les index : Résultat, c'est bon, ça marche
    Merci pour tes conseils !

    Au final, le code est devenu ça :
    Code:
    function signal = dent_scie(A,t,teta,Tr)
    for  (t_id = 1:length(t))
            if (mod(t(t_id),Tr)>= teta)
                signal(t_id)=0;
            else
                signal(t_id)=A*(1-mod(t(t_id),Tr)/teta);
            end
        end
    end
    J'ai joint une figure à ce post.
    Images attachées Images attachées  

Discussions similaires

  1. generateur dents de scie ou triangulaire a partir de +5V/100KHZ
    Par LAYE NDOYE dans le forum Électronique
    Réponses: 23
    Dernier message: 17/02/2014, 16h02
  2. [Matlab] Traitement Numérique Signal
    Par okagasama dans le forum Électronique
    Réponses: 2
    Dernier message: 12/02/2007, 01h29
  3. [PM31] dents de scie
    Par deep_turtle dans le forum Physique
    Réponses: 22
    Dernier message: 06/03/2006, 07h05
  4. generateur de signal en dents de scie
    Par Rima dans le forum Électronique
    Réponses: 7
    Dernier message: 24/05/2005, 13h54
  5. générateur de signal à dent de scie
    Par yous dans le forum Électronique
    Réponses: 2
    Dernier message: 20/11/2004, 22h38
Découvrez nos comparatifs produits sur l'informatique et les technologies.