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 :

identification automatique de " l'alphabet et p" à partir d'une source pour le codage huffman


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut identification automatique de " l'alphabet et p" à partir d'une source pour le codage huffman
    Bonsoir, je dispose un vecteur 1D (ex:13371545155135706347) que je veux le coder par des codeurs entropies. J'ai réussi à le faire avec code RLE. En même temps, j'ai voulu faire une comparaison avec celui de huffman. J'ai trouvé ces deux lignes dans un exemple sur matlab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alphabet = {'0' '1' '2' '3' '4' '5' '6' '7'};
    p = [0.05 0.2 0 0.2 0.1 0.25 0.05 0.15];
    Ma question est comment à partir d'un vecteur X, je définis automatiquement les deux paramètres alphabet et p?

  2. #2
    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 : 53 165
    Points
    53 165
    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)

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bonsoir Dut, je vous remercie pour l'orientation. Si je comprend bien mon vecteur de départ qui est en fait la source, son alphabet est b :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v = [1 3 3 7 1 5 4 5 1 5 5 1 3 5 7 0 6 3 4 7]
    b = unique(v)
    ensuite le paramètre p n'est que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p= [n(:) / numel(v(:))]

  4. #4
    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 : 53 165
    Points
    53 165
    Par défaut
    Presque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    v = [1 3 3 7 1 5 4 5 1 5 5 1 3 5 7 0 6 3 4 7];
     
    alphabet = min(v):max(v)
    n = histc(v,alphabet);
    p = n / numel(v(:))
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    alphabet =
     
         0     1     2     3     4     5     6     7
     
     
    p =
     
        0.0500    0.2000         0    0.2000    0.1000    0.2500    0.0500    0.1500
    Cette méthode fonctionne aussi avec une chaine de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    v = '13371545155135706347';
     
    alphabet = min(v):max(v);
    n = histc(v,alphabet);
     
    alphabet = cellstr(char(alphabet(:))).'
    p = n / numel(v(:))
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    alphabet = 
     
        '0'    '1'    '2'    '3'    '4'    '5'    '6'    '7'
     
     
    p =
     
        0.0500    0.2000         0    0.2000    0.1000    0.2500    0.0500    0.1500
    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)

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Merci Dut! là c'est encore plus général! Thank you Dut

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    J'ai repris le mème principe avec un autre vecteur de test. Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    v = [1 3 3 7 1 5 -4 5 1.9 5 5 1.9 3 5 7 0.7 6 3 -4 0.7];
    alpha = unique(v);
    n = histc(v,alpha); 
    p = n / numel(v(:));
    dict = huffmandict(alpha,p);
    hcode = huffmanenco(v,dict);
    ce qui donne:
    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
    >> dict = huffmandict(b,p);
    >> dict
     
    dict = 
     
        [    -4]    [1x4 double]
        [0.7000]    [1x3 double]
        [     1]    [1x3 double]
        [1.9000]    [1x4 double]
        [     3]    [1x2 double]
        [     5]    [1x2 double]
        [     6]    [1x4 double]
        [     7]    [1x4 double]
     
    >> hcode = huffmanenco(v,dict); 
    >> hcode
     
    hcode =
     
      Columns 1 through 14
     
         1     1     0     1     0     1     0     0     0     0     0     1     1     0
     
      Columns 15 through 28
     
         0     1     0     0     1     0     0     1     0     0     0     1     0     1
     
      Columns 29 through 42
     
         0     1     0     0     0     1     1     0     0     1     0     0     0     0
     
      Columns 43 through 56
     
         1     1     1     0     0     1     1     1     0     0     0     1     0     1
     
      Columns 57 through 58
     
         1     1
    .
    Je veux savoir comment déduire le ratio de compression. A mon avis ça sera ratio=(1*20)/length(hcod)

Discussions similaires

  1. Identification automatique
    Par FabaCoeur dans le forum Langage
    Réponses: 1
    Dernier message: 31/12/2009, 15h45
  2. Réponses: 4
    Dernier message: 28/05/2008, 16h04
  3. Identification automatique de l'extension
    Par lohot dans le forum Delphi
    Réponses: 3
    Dernier message: 22/12/2006, 11h29
  4. Réponses: 3
    Dernier message: 11/08/2006, 15h22

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