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 :

signaux de type boolean. Signaux discontinus


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut signaux de type boolean. Signaux discontinus
    Bonjour,

    Est ce que c'est possible de définir des signaux discontinus sous matlab (e.g. des signaux qui représentent de sauts de valeurs, comme les booleans ou les entiers).
    Je m'exprime, j'ai un signal qui prends des valeurs entières. à un instant donné, ce signal doit passer de la valeur 2 à 3 (saut de valeurs -->signal discontinu). Le problème c'est que la courbe du signal donnée par matlabe montre qu'il ne change pas de valeur de manière "brusque", mais plutot de manière graduelle (présence d'une légère pente). Ce qui veut dire qu'à des instants très petits, ce signal peut prendre des valeurs non entières...

    Savez vous comment remédier à ce problème?

    merci à tous

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Une solution possible:
    Bonne journée,
    Duf

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par bakaratoun Voir le message
    Le problème c'est que la courbe du signal donnée par matlabe montre qu'il ne change pas de valeur de manière "brusque", mais plutot de manière graduelle (présence d'une légère pente).
    De quelle courbe parles-tu ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    je pense que j'étais un peu imprécis dans ma question. .

    supposons qu'on définit le signal suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vect=[0 0;1 0;1 2;3 2];
    c'est un signal qui change brusquement de valeur à l'instant 1.

    on peut, sans problème dessiner le graphe de ce signal. (on voit bien le step à l'instant 1). Mais le problème qui se pose, c'est quand on veut interpoler ce signal à l'instant 2.5 par exemple.
    C'est impossible, car le vecteur temps doit contenir des valeurs distinct (ce qui n'est pas le cas de mon signal).

    L'idée est donc d'éliminer cette valeur redondante. par exemple en faisant comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vect=[0 0;1-3*eps 0;1 2;3 2];
    avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> eps
     
    ans =
     
      2.2204e-016
     
    >>
    ce faisant, l'interpolation marche sans souci, mais le graphe ne représente plus d'angle droit. .

    comment contourner autrement ce problème d'interpolation ?

    merci

  5. #5
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Natura non facit saltus.
    Gottfried Wilhelm Leibniz (1646-1716)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    ouais, mais là on est dans Matlab.

  7. #7
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Pourrais-tu nous dire précisément ce que tu as en entrée et ce que tu veux obtenir en sortie (avec les traitements à faire au milieu)?

    Pourquoi définir 2 valeurs pour un même point? Est-ce l'utilisateur qui défini les points ou sont-ils issus d'une mesure?

    Quel est l'objectif? Tracé les données?

  8. #8
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    supposons qu'on définit le signal suivant:
    Il est très regrettable de constater que beaucoup de gens prétendent faire du traitement de signal sans savoir ce qu'est un signal. Alors, je répète la définition officielle telle qu'on la trouve dans le Vocabulaire Electrotechnique International:
    VEI 702-04-01
    signal
    phénomène physique dont une ou plusieurs caractéristiques sont susceptibles de varier en représentant des informations

    NOTE – Le phénomène physique peut être par exemple une onde électromagnétique ou une onde acoustique, et la caractéristique peut être un champ électrique, une tension électrique ou une pression acoustique.
    Alors, deux remarques s'imposent:
    1. Du fait de la présence inévitable d'effets parasites (capacités, inductances parasites ou autres), la grandeur qui caractérise le signal ne peut en aucun cas présenter des discontinuités. En d'autre mots, une grandeur ne peut pas avoir deux valeurs distinctes au même instant.
    2. Dans Matlab, vect n'est pas un signal mais un tableau contenant les valeurs successives d'un signal échantillonné, mais qui ne peut pas exister.

    En conséquence, je ne peux que te conseiller de bien réfléchir à ce que tu veux faire pour reformuler ton problème d'une manière cohérente.
    Jean-Marc Blanc

  9. #9
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    vect n'est pas un signal mais un tableau contenant les valeurs successives d'un signal échantillonné, mais qui ne peut pas exister.
    Je corrige :
    1. vect n'est pas un tableau, mais un nom de variable représentant (ou qui symbolise) un tableau à plusieurs valeurs ...

    2. Réellement, on ne peut pas échantillonner un signal, on prend les valeurs du signal à des points distant ...

    3. une valeur n'est pas une vraie valeur, mais ...


    Je dis, qu'il ne faut pas faire trop attention aux abus de langage

  10. #10
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Je dis, qu'il ne faut pas faire trop attention aux abus de langage
    A condition qu'ils ne risquent pas d'induire en erreur.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    bonjour à tous,

    voilà concrètement ce que je cherche à faire. En effet, vect est un signal "mathématique" et non pas physique. (donc le problème de bruit ou de turbulence ne se pose pas .)
    Vect ne prend que des valeurs entière.
    Comment définiriez vous son équation, si on veut qu'il prenne la valeur 1 jusqu'à l'instant 5 ensuite, passe à la valeur 2? (autrement dit, je veux définit des fonctions en escalier).

    Vous allez me dire d'utiliser la fonction stairs. Je suis d'accord, mais le problème c'est que cette fonction duplique les instants où le signal change brusquement de valeur. .

    Dans un premier temps, J'ai défini ma fonction comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    time=[0 5 5 10];
    valeur=[0 0 1 1];
    quand on fait,
    on voit que matlab arrive à interpréter la courbe discontinue.

    mais quand on veut interpoler la courbe à l'instant 6, par exemple avec la fonction interp1, j'obtiens une erreur, comme quoi le vecteur temps doit avoir des élements deux à duex distincts.

    ma question est donc, comment faire pour définir une courbe qui représente une discontinuité, qu'on peut à la fois, afficher (avec plot) et interpoler (avec interp1) ?

    sinon, est ce que c'est possible de définir une fonction "continue par morceau"? c'est à dire, définir une fonction sur des intervalles séparés.

    merci

  12. #12
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Perso, je ferais comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    % Definition des donnees d'entree
    time = [0 5 10];
    valeur = [0 1 1];
     
    % Calcul des donnees pour le trace ("conversion")
    [x_plot,y_plot] = stairs(time,valeur);
     
    % Trace des donnees
    figure;plot(x_plot,y_plot);
     
    % Extraction d'une valeur interpolee
    yy = interp1(time,valeur,6,'nearest');

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    merci.

    Mais le problème avec l'option 'nearest' c'est que ca ne marche pas:

    en effet, si on veut la valeur au point 4.9 par exemple, le résultat ést 1, alors que c'est censé etre 0. .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    yy = interp1(time,valeur,4.9,'nearest')
     
    yy =
     
         1

  14. #14
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    C'est pas faux

    Dans ce cas ca marche peut-être mieux sans interpolation:

  15. #15
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317

  16. #16
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    j'aurais proposé une solution assez bête et rejoignant un des précédents messages de baraktoun : échantilloner super finement puisque qu'on est en numérique et que l'on parle de signal à un instant t le signal vaudra 0 et t+T où T période 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fs=100000;
    t=[0:1/fs:2];
    s=zeros(length(t),1);
    s(fs+1:end)=ones(length(s)-fs,1);
    à toi de trouver le bon échantillonage temporel qui minimise suffisemment ton erreur sans 'increase' le temps de manière démesurée.
    il me semble que c'est la base du calcul numérique (discret par définition) ?

    edit: oops, après avoir vu l'autre discussion je crois avoir mal compris...

    edit2 : je vais encore être totalement à côté de la plaque mais tu dois aussi pouvoir définir ton signal avec des fonctions de heaviside
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h(x)*h(1-x)+3*h(x-1)*h(2-x)
    seulement Matlab n'est pas le logiciel le plus adapté pour ceci.
    j'ai vu qu'il existait un fonction heaviside dans la Symbolic Math Toolbox mais je ne sais même pas si elle serait appropriée.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    d'accord, merci à tous pour ces réponses.

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

Discussions similaires

  1. Type boolean et Auto Incrémente
    Par mouloudéen dans le forum SQL
    Réponses: 2
    Dernier message: 03/04/2007, 21h42
  2. Réponses: 1
    Dernier message: 16/03/2007, 11h46
  3. [oracle 8i] type boolean
    Par yasinfo dans le forum Oracle
    Réponses: 6
    Dernier message: 18/06/2006, 16h48
  4. Type boolean MIN_VALUE || MAX_VALUE
    Par bxflash dans le forum Langage
    Réponses: 5
    Dernier message: 23/08/2005, 13h52
  5. [débutant] type boolean!!!
    Par just1980 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/08/2005, 10h47

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