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 :

transformer une variable local en global d'une fonction [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 12
    Points
    12
    Par défaut transformer une variable local en global d'une fonction
    Bonjour,

    on m'a passé une fonction qui me trace la densité spectrale de puissance d'un signal.

    J'aimerai avoir accès au valeur de la courbe, mais c'est impossible. Comment modifier ma fonction pour avoir accès au cordonnée des point de la courbes svp.

    Merci
    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
    function plotfft(y,fs,plotstring,plotneg,n,zdb,dr)
     
    global f;
    if size(y,1) > 1
        y = y';
    end
     
    N = length(y); % N is the number of points of y, whereas n is the number of points of the FFT
    if nargin < 2
        fs = 1;
    end
    if nargin < 3
        plotstring = 'b';
    end
    if nargin < 4
        plotneg=0;
    end
    if nargin < 5 || isempty(n)
        n = N;
    end
    if nargin < 6
        zdb = false;
    end
    if nargin < 7
        dr = [];
    end
    % n = floor(n/2)*2+1; % we want n odd to have F(0);
     
    y = y' .* hann(N);
    Y = fftshift(fft(y,n));
    Y = 2/N*Y;
    f = fs * (-0.5+1/n/2:1/n:0.5-1/n/2);
     
    if zdb
        Y = Y./max(abs(Y))./sqrt(2)*0.999;
    end
    if plotneg
        plot(f,20*log10(abs(Y)),plotstring);
    else
        plot(f(round(end/2+0.5:end)),20*log10(sqrt(2)*abs(Y(round(end/2+0.5:end)))),plotstring);    
    end
    if not(isempty(dr))
        a = axis;
        axis([a(1:2),a(4)-dr,a(4)]);
    end
    grid on;
    xlabel('Frequency (Hz)');
    ylabel('|S^2(f)| (dBW)');
    A=f(round(end/2+0.5:end))

  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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonsoir,

    Une méthode "brutale":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    line_hdl = findobj('Type','line');
    x = get(line_hdl,'XData');
    y = get(line_hdl,'YData');
    Bonne soirée,
    Duf

    P.S. Au passage, c'est pas bien d'utiliser des variables globales
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    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,

    pourquoi ne pas les mettre en sortie de ta fonction?
    Par exemple si tu veux récupérer f et Y :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [f,Y] = plotfft(y,fs,plotstring,plotneg,n,zdb,dr)
    et quand tu l'appelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [monf,monY] = plotfft(y,fs,plotstring,plotneg,n,zdb,dr)
    C'est à adapter à ce que tu souhaites sortir de la fonction.

    Je ne vois pas bien l'intérêt de mettre f en variable global alors qu'il est initialisé dans ta fonction...
    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.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup pour votre aide. Mon problème est résolu grâce à vous

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

Discussions similaires

  1. Mettre une variable dans l'appel d'une variable de session
    Par PrinceMaster77 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2011, 10h12
  2. Réponses: 9
    Dernier message: 05/11/2008, 09h37
  3. Réponses: 5
    Dernier message: 23/09/2008, 13h29
  4. Réponses: 1
    Dernier message: 17/01/2007, 21h52
  5. Réponses: 7
    Dernier message: 13/03/2006, 15h39

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