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 :

Calcul taux d'erreur binaire en fonction du SNR


Sujet :

Signal

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 27
    Points
    27
    Par défaut Calcul taux d'erreur binaire en fonction du SNR
    Bonjour,
    Je dois coder en MATLAB le taux d'erreur binaire en fonction du rapport signal à bruit lorsque j'envoie un texte via un canal additif Gaussien et blanc, je ne suis cependant pas sûr de l'algorithme à mettre en place, la modulation est à deux états (MDP2 c'est à dire qu'il y aura les valeurs -1 et 1 dans le signal modulé).

    De plus, lorsque j'affiche le TEB en fonction de SNR, la courbe devrait décroître puis croître.

    Je ne suis pas sûr non plus que ceci effectue correctement le seuillage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fluxdemod=fluxdemod(1:1:length (fluxdemod))>0.5
    Voici mon programme, je vous remercie d'avance pour votre aide!!
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    clear all;
    close all;
    clc;
     
    %%%%%%%%%%initialisation de la phrase%%%%%%%%%%%%%%
    phr='Je dois réussir!!';
     
    %%%%%%%%%%Transformation de la phrase entiers%%%%%%%
    phr=double(phr);
     
    %%%%%%%%%%Puis en binaire%%%%%%%%%%%%%%%%%%%%%%%%%%%
    phr=dec2bin(phr);
     
    %%%%%%%%%%Mise de la matrice phr en une matrice 1D%%
    phr=reshape(phr, [],1);
     
    %%%%%%%%%%Transformation de signal en nombre%%%%%%
    phr=str2num(phr);
     
    %%%%%%%%%Modulation du flux binaire%%%%%%
    fluxmod=(2*phr-1)
     
    %%%%%Puissance du signal modulé%%%%%%%
    S=1;
     
    TEB=[];
    erreur=0;
    nbre_real=0;
     
    for SNR=0:1:10
    if erreur<100
       %%%initialisation de l'écart-type du bruit%%%%%%%
       sigma=sqrt(S/(10.^(SNR/10)));   
     
       %%ajout du bruit au signal bruit modulé%%%%%%%%
       fluxmod=fluxmod+sigma.*randn(length(phr), 1)
     
       %%%%démodulation%%%%%
       fluxdemod=(fluxmod+1)/2
     
    %%%%%%%%seuillage pour reconstruire le message binaire%%%%
    fluxdemod=fluxdemod(1:1:length(fluxdemod))>0.5
    [erreur1]=biterr(phr, fluxdemod);
    erreur=erreur+erreur1;
    nbre_real=nbre_real+1;
    TEB_NEW=erreur/nbre_real/length(phr);
    TEB=[TEB, TEB_NEW];
    end
    end
    SNR=1:1:length(TEB)
    semilogy(SNR, TEB)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Merci de penser aux balises [code] ainsi qu'à l'indentation correcte de ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fluxdemod=fluxdemod(1:1:length (fluxdemod))>0.5
    est correct, mais il y a plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fluxdemod=fluxdemod(1:end)>0.5
    Voire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fluxdemod = fluxdemod > 0.5
    En ce qui concerne phr=reshape(phr, [],1);, j'aurais plus vu phr=reshape(phr.', [],1); afin d'avoir les 8 bits d'une lettre à la suite.

    Pour ce qui est du calcul du TEB, je mettrais plutôt une boucle while à la place du if.
    Dernière modification par Invité ; 27/02/2012 à 20h15.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Merci pour la réponse!
    Désolé pour l'indentation, cétait mon premier message^^

    Voici le code modifié bien indenté:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    clear all;
    close all;
    clc;
     
    %%%%%%%%%%initialisation de la phrase%%%%%%%%%%%%%%
    phr='Je dois réussir!!';
     
    %%%%%%%%%%Transformation de la phrase entiers%%%%%%%
    phr=double(phr);
     
    %%%%%%%%%%Puis en binaire%%%%%%%%%%%%%%%%%%%%%%%%%%%
    phr=dec2bin(phr);
     
    %%%%%%%%%%Mise de la matrice phr en une matrice 1D%%
    phr=reshape(phr.', [],1);
     
    %%%%%%%%%%Transformation de signal en nombre%%%%%%
    phr=str2num(phr);
     
    %%%%%%%%%Modulation du flux binaire%%%%%%
    fluxmod=(2*phr-1)
     
    %%%%%Puissance du signal modulé%%%%%%%
    S=1;
     
    TEB=[];
    erreur=0;
    nbre_real=0;
     
    while erreur<100
        for SNR=1:1:10
            %%%initialisation de l'écart-type du bruit%%%%%%%
            sigma=sqrt(S/(10.^(SNR/10)));
     
     
            %%ajout du bruit au signal bruit modulé%%%%%%%%
            fluxmod=fluxmod+sigma.*randn(length(phr), 1)
     
            %%%%démodulation%%%%%
            fluxdemod=(fluxmod+1)/2
     
            %%%%%%%%seuillage pour reconstruire le message binaire%%%%
            fluxdemod=fluxdemod>0.5
            [erreur1]=biterr(phr, fluxdemod);
            erreur=erreur+erreur1;
            nbre_real=nbre_real+1;
            TEB_NEW=erreur/nbre_real/length(phr);
            TEB=[TEB, TEB_NEW];
        end
    end
    SNR=1:length(TEB)
    semilogy(SNR, TEB)
    Il y a cependant toujours un problème, voici joint la courbe du TEB en fonction du SNR, elle est croissante....

    J'ai aussi changé l'ordre du if (devenu while) ce qui me paraît mieux algorithmiquement
    Images attachées Images attachées  

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cybermembre Voir le message
    J'ai aussi changé l'ordre du if (devenu while) ce qui me paraît mieux algorithmiquement
    Ouais bof, je ne sais pas si je préférais le précédent...

    Petit rappel: tu calcules ton TEB pour chaque valeur du SNR.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    La formule du TEB que j'utilise est-elle bonne?

    Vu que le TEB est calculé pour chaque valeur du SNR, il vaut en effet mieux de mettre le while après le for

    Voici sinon ce que je pense :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    clear all;
    close all;
    clc;
     
    %%%%%%%%%%initialisation de la phrase%%%%%%%%%%%%%%
    phr='Je dois réussir!!';
     
    %%%%%%%%%%Transformation de la phrase entiers%%%%%%%
    phr=double(phr);
     
    %%%%%%%%%%Puis en binaire%%%%%%%%%%%%%%%%%%%%%%%%%%%
    phr=dec2bin(phr);
     
    %%%%%%%%%%Mise de la matrice phr en une matrice 1D%%
    phr=reshape(phr.', [],1);
     
    %%%%%%%%%%Transformation de signal en nombre%%%%%%
    phr=str2num(phr);
     
    %%%%%%%%%Modulation du flux binaire%%%%%%
    fluxmod=(2*phr-1)
     
    %%%%%Puissance du signal modulé%%%%%%%
    S=1;
     
    TEB=[];
    erreur=0;
    nbre_real=0;
     
     
    for SNR=1:1:10
        %%%initialisation de l'écart-type du bruit%%%%%%%
        sigma=sqrt(S/(10.^(SNR/10)));
        while erreur<100
     
     
            %%ajout du bruit au signal bruit modulé%%%%%%%%
            fluxmod=fluxmod+sigma.*randn(length(phr), 1)
     
            %%%%démodulation%%%%%
            fluxdemod=(fluxmod+1)/2
     
            %%%%%%%%seuillage pour reconstruire le message binaire%%%%
            fluxdemod=fluxdemod>0.5
            [erreur1]=biterr(phr, fluxdemod);
            erreur=erreur+erreur1;
            nbre_real=nbre_real+1;
        end
        TEB_NEW=erreur/nbre_real/length(phr);
        TEB=[TEB, TEB_NEW];
    end
    SNR=1:length(TEB)
    semilogy(SNR, TEB)
    La courbe est cette fois-ci plate...
    Images attachées Images attachées  

  6. #6
    Invité
    Invité(e)
    Par défaut
    Il y a du mieux
    Reste à réinitialiser certaines variables pour chaque valeur du SNR.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Les variables erreur et nbre_réal doivent être réinitialisées pour chaque valeur du SNR :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    clear all;
    close all;
    clc;
     
    %%%%%%%%%%initialisation de la phrase%%%%%%%%%%%%%%
    phr='Je dois réussir!!';
     
    %%%%%%%%%%Transformation de la phrase entiers%%%%%%%
    phr=double(phr);
     
    %%%%%%%%%%Puis en binaire%%%%%%%%%%%%%%%%%%%%%%%%%%%
    phr=dec2bin(phr);
     
    %%%%%%%%%%Mise de la matrice phr en une matrice 1D%%
    phr=reshape(phr.', [],1);
     
    %%%%%%%%%%Transformation de signal en nombre%%%%%%
    phr=str2num(phr);
     
    %%%%%%%%%Modulation du flux binaire%%%%%%
    fluxmod=(2*phr-1)
     
    %%%%%Puissance du signal modulé%%%%%%%
    S=1;
     
    TEB=[];
    erreur=0;
    nbre_real=0;
     
    for SNR=1:1:100
        %%%initialisation de l'écart-type du bruit%%%%%%%
        sigma=sqrt(S/(10.^(SNR/10)));
        while erreur<100
     
     
            %%ajout du bruit au signal bruit modulé%%%%%%%%
            fluxmod=fluxmod+sigma.*randn(length(phr), 1)
     
            %%%%démodulation%%%%%
            fluxdemod=(fluxmod+1)/2
     
            %%%%%%%%seuillage pour reconstruire le message binaire%%%%
            fluxdemod=fluxdemod>0.5
            [erreur1]=biterr(phr, fluxdemod);
            erreur=erreur+erreur1;
            nbre_real=nbre_real+1;
        end
        TEB_NEW=erreur/nbre_real/length(phr);
        TEB=[TEB, TEB_NEW];
        erreur=0;
        nbre_real=0;
    end
    SNR=1:length(TEB)
    La courbe est ci_joint, il y a toujours un problème...
    Images attachées Images attachées  

  8. #8
    Invité
    Invité(e)
    Par défaut
    Une autre variable à réinitialiser: fluxdemod. Car ici tu accumules l'ajout du bruit au fur et à mesure.
    Dernière modification par Invité ; 23/05/2012 à 16h57.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup pour l'aide, la figure est convenable (décroissante), bonne journée!!!

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    où on doit mettre l'initialisation de fluxdemod svp ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Bonjour nechalox,
    D'après mes souenirs, la ligne
    fluxmod=(2*phr-1)
    devrait être ajoutée juste avant le while

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

Discussions similaires

  1. calcul du taux d'erreur binaire (BER)
    Par maylouch dans le forum Simulink
    Réponses: 1
    Dernier message: 12/12/2011, 10h36
  2. Taux d'erreur Binaire
    Par mansan dans le forum Signal
    Réponses: 4
    Dernier message: 22/06/2010, 09h09
  3. Réponses: 2
    Dernier message: 03/04/2010, 19h08
  4. Réponses: 2
    Dernier message: 11/08/2004, 15h01
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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