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 :

Modulateur/ Démodulateur BPSK


Sujet :

Signal

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut Modulateur/ Démodulateur BPSK
    Bonjour,
    Je souhaite réaliser la modulation/démodulation d'un signal en BPSK.
    J'en suis à la modulation pour le moment, et j'ai écrit :
    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
    clear all;
    close all;
     
    %Data brutes UL
    X = floor((rand(1,1000)+0.5));  
     
    %Codage & Modulation BPSK
    alpha = zeros(1,length(X));  
    for k=1:length(X)
        if X(k) == 0
            alpha(k) = 1;
        elseif  X(k) == 1
            alpha(k) = -1;
        end
    end
    phi = (pi/2).*alpha;
    %Signal temporel modulé
    fe=125*10^6;
    t = linspace(0,12,length(phi));
     
    s = exp(i.*(2*pi*fe.*t + phi));
    Mais quand je plotte s, le résultat n'est pas fou... Est-ce que vous voyez ce qui pourrait ne pas aller ?
    Merci

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

    Ton problème vient de la génération de ton signal à moduler, et plus particulièrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t = linspace(0,12,length(phi));
    Je présume que fe est ta fréquence d'échantillonnage, donc fait plutôt comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t = linspace(0,12,length(phi))/fe;

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Merci !
    Le résultat obtenu n'est-il pas étrange ? La théorie prévoyait des sinusoides qui changeaient de signe pour un valeur de bit différente..

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

    La théorie prévoyait des sinusoides qui changeaient de signe pour un valeur de bit différente
    Oui c'est le cas, mais tu as peut-être du mal à le voir car ton signal modulateur change practiquement chaque valeur.
    Mais par exemple tu peux parfaitement le visualiser en fixant alpha comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alpha = [ones(1,floor(length(X)/2)) -ones(1,ceil(length(X)/2))];

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Merci beaucoup

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Re moi,Je n'arrive pas à comprendre pourquoi le code suivant me retourne comme résultat Y2= (0 0 0 0 ... 0) au lieu de ce que je souhaite, à savoir les coordonnées de Y répétées chacune un certain nombre de fois :

    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
     
    fe=125*10^6;    
    fi=70*10^6;
    br=10*10^6;   
     t_simu = 1*10^-3;
     
    X = floor((rand(1,100)+0.5));
    Y = pskmod(X,2);
     
     
    phase = zeros(1,t_simu*fe);
     
     
    increment = floor((2^48)*br/fe+0.5);
     
     
     
    Y2 = zeros(1,t_simu*fe);
    k=1;
    i=1;
     
     
    while k<=length(Y)
        for j=1:length(phase)-1
            phase(j+1)=mod(phase(j)+increment,2^48);
     
            if phase(j+1)<=phase(j)
                if k<=length(Y)
                    enable=1;
                    Y2(i)=Y(k);
                    k=k+1;
                end
            else
                if k<=length(Y)
                    enable=0;
                    Y2(i)=Y(k);
                end
            end
            if i<length(Y2)
                i=i+1;
            end
        end
    end
    Y2
    Je vous remercie, une fois encore

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Le pire étant que dans mon Workspace, les indices i,j et k ont bien les valeurs finales attendues, ce qui veut dire que Matlab parcourt bien les boucles..

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    reBonjour à tous,
    Je souhaite tracer la transformée de Fourier d'un signal, et j'obtiens un résultat perturbant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sf = fft(S(1,:));
    f=linspace(1,250000,length(Sf));
    plot(f,abs(Sf));
    affiche un spectre centrée autour de 125000, alors que si j'entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sf = fft(S(1,:));
    f=linspace(1,200000,length(Sf));
    plot(f,abs(Sf));
    j'obtiendrai le même spectre, mais centré en 100000.
    Etrange non ?

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut
    Normal plutôt. Tu traces un plot de type plot(x,y), donc chaque point y(i) sera placé à l'abscisse x(i). Du coup si tu changes ton vecteur d'abscisse mais pas l'ordonnée, il est normal que l'allure de ta courbe soit la même, mais qu'elle soit décalée.

    Réfléchis bien à ce que tu veux afficher, on peut afficher tout et n'importe quoi avec Matlab quand on ne sait pas exactement ce qu'on cherche, et il est très facile de se fourvoyer complètement.

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Exact, je vois très bien de quoi tu parles, je te remercie de ton aide. J'ai un peu de mal à prendre du recul sur ce que je fais en ce moment, et c'est dur de décrypter chaque bug de ma part En l'occurence, pour le moment je ne comprends pas pourquoi la fft que j'obtiens n'a rien à voir (mais alors rien) avec ce que je suis censé obtenir..
    Je cherche, je cherche..

  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Bonjour,
    Est-il possible que la fonction fft de matlab introduise du bruit (ou n'ait pas une résolution suffisante) sur les signaux que j'obtiens ? Le spectre que j'obtiens est le bon, mais bien trop bruité.. Pourtant le code que j'ai entré est correct, et ne peut introduire du bruit à aucune étape..
    Merci !

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut
    Peut-être qu'un peu de zero-padding aiderait à avoir un résultat plus propre ?

  13. #13
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    C'est ce que j'ai essayé, sans grande amélioration.. Je me suis aperçu qu'en modifiant une donnée, le résultat peut s'améliorer un peu. Je réfléchis sur le pourquoi du comment..
    Sinon, connaitrais-tu un endroit où me procurer de la doc sympa (voir des codes matlab !) concernant la partie démodulation ? Je vais me lancer dans la programmation de la PLL.. Pour le filtrage passe bande en numérique, on m'a parlé de décimateur. J'avoue que j'ai du mal à trouver de la documentation sur Internet, auriez-vous des détails ?
    En tout cas merci d'avoir pris le temps de me répondre

  14. #14
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut
    Mes cours de traitement du signal remontent à loiiiin et j'y étais pas très assidu, donc je vais avoir du mal à t'aider, et je ne sais pas non plus où trouver de la doc à ce sujet. Désolé et bon courage =)

  15. #15
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Je te remercie quand même pour toute ton aide !
    Peut être quelqu'un d'autre saura-t-il m'aider sur ce coup

  16. #16
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Je m'oriente vers un CIC d'ordre 2 avec facteur de décimation de 512, car ce genre de filtre a l'air peu coûteux niveau implémentation.. Ca devient chaud j'ai l'impression Si quelqu'un a plus d'infos, parce que là..

    Edit : Matlab semble posséder une fonction mfilt.cicdecim, sauf que quand je lance le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Hm = mfilt.cicdecim(8,1,4);
    hfvt = fvtool(Hm);
    hfvt.showreference = 'off';
    legend(hfvt, 'CIC Decimator: R=8, M=1, N=4');
    set(hfvt,'Color','white');
    Il m'affiche un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ?? Error using ==> mfilt.cicdecim.cicdecim
    The Fixed-Point Toolbox must be available to construct an MFILT.CICDECIM filter.
     
    Error in ==> test at 1
    Hm = mfilt.cicdecim(8,1,4);

  17. #17
    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
    Quel message d'erreur ?

    La toolbox en question s'appelle Filter Design Toolbox.

    Pour connaitre les toolboxes installées sur ton MATLAB il suffit de taper :
    Règles du Forum

    Adepte de la maïeutique

  18. #18
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    J'ai édité le précédent post pour l'erreur qui apparaît
    De plus, la commande ne m'affiche pas de message de type "not found", c'est bon signe non ? Je ne comprends pas si je possède la Toolbox ou non de fait.

  19. #19
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    affiche quelque chose?

    Citation Envoyé par d0n32
    Je ne comprends pas si je possède la Toolbox ou non de fait.
    Caro-Line a répondu à cette question. tape :
    cela te renverra la liste des toolbox installées.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  20. #20
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Pardon, c'est qui me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files\MATLAB\R2006a\toolbox\filterdesign\filterdesign\@mfilt\mfilt.m  % mfilt constructor
    Par contre, quand je tape , j'ai juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> version
     
    ans =
     
    7.2.0.232 (R2006a)

Discussions similaires

  1. [Débutant] Modulation BPSK
    Par Lord Bouillon dans le forum Octave
    Réponses: 0
    Dernier message: 08/05/2015, 19h35
  2. la modulation-demodlation bpsk , traitement de signal
    Par soufianesoufiane dans le forum Simulink
    Réponses: 0
    Dernier message: 05/03/2015, 03h32
  3. [Débutant] gain de codage modulation BPSK
    Par hamzawhy dans le forum Signal
    Réponses: 0
    Dernier message: 01/01/2015, 06h50
  4. code matlab pour la démodulation BPSK
    Par imen59 dans le forum Signal
    Réponses: 2
    Dernier message: 08/10/2010, 18h53
  5. Réponses: 3
    Dernier message: 25/03/2008, 19h42

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