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 :

Couper un nombre codé sur un octet en groupes de bits significatifs


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 59
    Points
    59
    Par défaut Couper un nombre codé sur un octet en groupes de bits significatifs
    Bonjour,

    J'ai un réel à codé sur 8 bits, par exemple 210 en binaire est = 11010010. Comment faire pour récupérer le bit 1 et 2 seuls, 3 et 4 seuls 5 à 8 seuls ?
    Cet octet est trois données différentes !
    En gros je dois avoir :

    Mon_octet = concatenation de data1(bits 1 et 2) data2(bit 3 et 4) data3 (bit5 à 8)

    Merci pour l'aide

    En attendant je continue de ...

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Je ne suis pas sûre de voir où tu veux en venir.
    En Matlab comment est représentée ta donnée ?
    Si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nbBinaire=11010010;
    %ou nbBinaire='11010010';
    %alors
    octet1=nbBinaire(1:2);
    octet2=nbBinaire(3:4);
    octet3=nbBinaire(5:8);
    %et dans l'autre sens :
    mon_octet=[octet1,octet2,octet3]
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 59
    Points
    59
    Par défaut
    Merci pour ta réponse, je pense que je ne me suis pas bien expliqué
    j'ai une donnée que j'appellerai DATA qui est codée sur 1 octet ( 8 bits). DATA est composée de:
    - data1 codée sur 2 bits ( bit 1 et 2)
    - data2 codée sur 2 bits (bits 3 et 4)
    - data3 codée sur 4 bits (bits 5 à 8).

    DATA en binaire vaut :
    bit1 bit2 bit3 bit4 bit5 bit6 bit7 bit8
    <------><------><-------------->
    data1-----data2 -----data3

    J'ai essayé de faire comme suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     data1=bin2dec(DATA)(1:2)
    data2=bin2dec(DATA)(3:4)
    data3=bin2dec(DATA)(5:8)
    Mais ça n'a pas marché !!

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Ce serait peut-être plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    data1=bin2dec(DATA(1:2))
    data2=bin2dec(DATA(3:4))
    data3=bin2dec(DATA(5:8))
    Et d'autre part, pour que je te comprenne il faut que tu me parles en Matlab...
    Dans les types de données Matlab tu as du double, du char, mais pas de l'octet.
    C'est pour ça que j'essaye de savoir si ta donnée est représentée sur forme de double ou de char.
    Vu que tu utilises bin2dec, a priori ce serait plutôt de type char.

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> >> DATA=dec2bin(210)
     
    DATA =
     
    11010010
     
    >> class(DATA)
     
    ans =
     
    char
    et donc le code au-dessus donne :
    >> data1
    data1 = 3

    >> data2
    data2 = 1

    >> data3
    data3 = 2
    Je ne sais absolument pas si c'est le résultat que tu attendais...
    Si ce n'est pas ça peux-tu me montrer comment tu définis ta variable DATA sous Matlab ?

    PS : quand on dit "ça ne marche pas" c'est bien de dire quel est le problème => message d'erreur de MTB, résultat incohérent...
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DATA=uint8(210)
     
    b=dec2bin(DATA)
     
    bit12=b(7:8)
    bit34=b(5:6)
    bit58=b(1:4)
     
    bin2dec(bit12)
    bin2dec(bit34)
    bin2dec(bit58)
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DATA=uint8(210)
     
    bit12=bitget(DATA,1:2)
    bit34=bitget(DATA,3:4)
    bit58=bitget(DATA,5:8)
     
    bit12(1)+2*bit12(2)
    bit34(1)+2*bit34(2)
    bit58(1)+2*bit58(2)+4*bit58(3)+8*bit58(4)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 59
    Points
    59
    Par défaut
    Je reformule autrement;
    data est un double;

    J'ai data1 = 3 --> 11 (en binaire sur 2 bits)
    J'ai data2 = 1 --> 01 (en binaire sur 2 bits)
    J'ai data3 = 2 --> 0010 (en binaire sur 4 bits)

    Je voudrais concaténer ces data1 data2 data3 pour avoir DATA = 210 (ou en binaire 11010010
    pour le message d'erreur :

    %% Si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> dec2bin(210)(1:2)
    ??? Error: ()-indexing must appear last in an index expression.
    %% D mais si je sauvegarde le résultat dans D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >> D=dec2bin(210)
    11010010
    >> data1=D(1:2)
    data1 =11

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par berberat Voir le message
    Je reformule autrement;
    data est un double;

    J'ai data1 = 3 --> 11 (en binaire sur 2 bits)
    J'ai data2 = 1 --> 01 (en binaire sur 2 bits)
    J'ai data3 = 2 --> 0010 (en binaire sur 4 bits)

    Je voudrais concaténer ces data1 data2 data3 pour avoir DATA = 210 (ou en binaire 11010010
    C'est quoi data1, data2, data3 ?
    Tu n'est pas clair dans tes explications Un coup tu parts de 210, le coup d'après de son équivalent binaire...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Dut Voir le message
    C'est quoi data1, data2, data3 ?
    Des doubles, ils composent l'octet DATA:

    DATA est un octet de données que je récupére sur la liaison série. il est composé de data1, data2 et data3, respectivement bits 1 et 2, bits 3 et 4 et Bits 5 à 8

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Donc la solution avec BITGET fonctionne bien (à l'ordre de lecture des bits près)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 59
    Points
    59
    Par défaut
    merci pour votre aide

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

Discussions similaires

  1. [WD16] Index fichier de type libellé (codé sur 4 octet)
    Par GCASPIC10 dans le forum WinDev
    Réponses: 11
    Dernier message: 25/02/2015, 11h33
  2. Mettre un nombre en hexa sur 4 octets.
    Par floflo87 dans le forum C
    Réponses: 2
    Dernier message: 21/10/2013, 09h30
  3. Additionner des chiffres codés sur 5 octets
    Par Menontona dans le forum C
    Réponses: 22
    Dernier message: 15/09/2010, 10h36
  4. Réponses: 1
    Dernier message: 02/04/2010, 15h14
  5. Réels codés sur 4 octets
    Par plxpy dans le forum Général Python
    Réponses: 4
    Dernier message: 07/05/2009, 15h30

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