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 :

module et phase d'une fonction de transfert


Sujet :

Signal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    docteur
    Inscrit en
    Mai 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : docteur

    Informations forums :
    Inscription : Mai 2013
    Messages : 45
    Par défaut module et phase d'une fonction de transfert
    Bonjour à tous,

    je cherche à stocker 18 phases et 18 modules assocés à 18 signaux de fréquence différentes.
    En gros j'ai V1 et V2 qui sont deux matrices complexe de dimensions 79380*18, f qui est un vecteur représentant mes 18 fréquences en question.

    Mon programme est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Fs=44100; M=79380; Td=1.8;
    f=150:50:1000; % 18 valeurs valeurs de fréquences
    f_sec=0:(Fs-Td+1)/(M-Td):Fs;
    Ensuite je récupère mes signaux complexes V1 et V2 qui sont des matrices de dimension 79380x18
    lorsque je fais le rapport
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    H12=V2./V1; % dimension 79380x18
    mod_H12=abs(H12); % dimension 79380x18
    arg_H12=angle(H12) % dimension 79380x18
    Le problème c'est que je ne vois pas comment récupérer seulement mes 18 phases et modules (sous forme vectorielle) correspondant aux fréquences
    f=[150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950 1000]

    (plutot que d'avoir plein de courbes qui se supperposent les unes aux autres lorsque je trace cette matrice en fonction de mon vecteur f_sec)
    j'ai essayé de faire une boucle for, mais ça ne me donne pas le bon résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i=1:18
    for f=150:50:1000
    modH12(i)=mod_H12(j+1,i)
    argH12(i)=arg_H12(j+1,i)
    end
    end
    en gros sur mon vecteur f_sec, il faudrait que j'identifie les numéros de point correspondant à f=150; f=200; f=250 .... f=1000
    soit les point 271--> 150; 361-->200; 451-->250; --> 541-->300 , puis ensuite dans la première colonne du module/ phase aller chercher la valeur correspondant au point 271 pour avoir les modules/phases à 150 Hz; deuxième colonne aller chercher la valeur correspondant au point 361 pour avoir les modules/phases à 200 Hz, ainsi de suite jusqu'à la 18 ème colonne (à ce rythme là on n'a pas fini)

    Je me demande si on peut aussi utiliser la fonction find ?

    Merci encore pour votre aide, car la j'en ai vraiment besoin

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour

    Il y a quelque chose qui me semble bizarre ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i=1:18
    for f=150:50:1000
    modH12(i)=mod_H12(j+1,i)
    argH12(i)=arg_H12(j+1,i)
    end
    end

  3. #3
    Membre averti
    Homme Profil pro
    docteur
    Inscrit en
    Mai 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : docteur

    Informations forums :
    Inscription : Mai 2013
    Messages : 45
    Par défaut
    Bonjour,

    Effectivement j'ai fait une erreur de frappe : sur mon code matlab, c'est bien



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    modH12=[];
    argH12=[];
     
    for i=1:18
    for f=150:50:1000
    modH12(i)=mod_H12(f+1,i)
    argH12(i)=arg_H12(f+1,i)
    end
    end
    mais ça ne résout pas mon problème, les valeurs de mod_H12 à aller prendre sont:

    pour f=150 Hz il faudrait mod_H12(271,1); f=200 Hz il faudrait mod_H12(361,2)
    f=300 Hz il faudrait mod_H12(451,3)

    je constate que d'une fréquence à une autre il y'a une raison de +90 au niveau de la case à aller chercher (je ne comprends pas pourquoi 90) ?

    tel que mon programme est écrit je pense que ce sont les valeur mod_H12(151,1) ; mod_H12(201,2) qui ne correspondent pas aux bons modules.
    Je me demande s'il y'a pas un truc à tester entre f et f_sec=0 : ( Fs-Td+1)/(M-Td):Fs ?

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Pour être honnête je n'ai pas bien compris la logique de tes boucles.

    Ici à chaque itération, sur la fréquence, ton modH12 sera écrasé. C'est à dire que tu auras par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    f=150;
    modH12(1) = mod_H12(151,1);
     
    %puis écrasement de la variable modH12 
    f=200;
    modH12(1) = mod_H12(201,1);
    Que cherches tu à obtenir dans ton vecteur modH12 en fin de compte?

  5. #5
    Membre averti
    Homme Profil pro
    docteur
    Inscrit en
    Mai 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : docteur

    Informations forums :
    Inscription : Mai 2013
    Messages : 45
    Par défaut
    J'ai crée un vecteur vide avant la boucle dans le but de stocker chacune de mes valeurs à chaque iteration.
    Dans mon programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    modH12=[];
    argH12=[];
     
    for i=1:18
    for f=150:50:1000
    modH12(i)=mod_H12(f+1,i)
    argH12(i)=arg_H12(f+1,i)
    end
    end
    je récupère bien 18 valeur stockées dans modH12 et argH12, mais elles ne correspondent pas aux valeurs que je recherche:

    par exemple pour 150 Hz, lorsque je regarde le workspace et que je prends le vecteur f_sec dont la valeur minimale est 0 et la valeur max est 44100, si je recherche la position à laquelle se trouve 150 Hz dans le vecteur f_sec, il s'agit de la 271 ème position f_sec(271)=150Hz.
    Logiquement pour trouver la valeur du module associé à 150 Hz; il faut que je regarde modH12(271,1)=0.9873.
    dans mon cas pour 150 Hz , avec le programme tapé ci dessus j'ai 0.9610 au lieu de 0.9873.
    Ainsi de suite pour les autres fréquences

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    J'ai bien compris qu'il y avait une erreur sur le résultat que tu attendais, mais pour l'instant moi je m'intéresse surtout à la structure de ton code qui m'a l'air mal pensé.

    En effet, tu effectues une boucle sur f, mais comme je l'ai expliqué dans mon post précédent tu écrases ta variable à chaque itération de f. Je ne sais pas ce que tu désires avoir en fin de compte mais dans tout les cas quelques choses ne va pas ici.

    Actuellement dans ton vecteur modH12(i) , et cela pour tout 1<i<18, tu n'auras en fin de compte que mod_H12(1000,i). Est-ce vraiment ce que tu désires? Si tel est le cas alors la boucle sur f ne sert à rien.

  7. #7
    Membre averti
    Homme Profil pro
    docteur
    Inscrit en
    Mai 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : docteur

    Informations forums :
    Inscription : Mai 2013
    Messages : 45
    Par défaut
    J'aimerai comprendre comment je dois faire pour stocker dans deux vecteurs mes modules et phase :

    [modH12(150) modH12(200) modH12(250) modH12(300) modH12(350) modH12(650) ..............modH12(1000)]
    [argH12(150) argH12(200) argH12(250) argH12(300) argH12(350) argH12(650) ..............argH12(1000)]

    sans écraser les valeurs antérieures bien entendu

Discussions similaires

  1. Réponses: 28
    Dernier message: 02/09/2008, 13h54
  2. [Débutant] Calcul d'une fonction de transfert
    Par demeter dans le forum Simulink
    Réponses: 1
    Dernier message: 24/04/2008, 15h13
  3. Tracer une fonction de transfert
    Par kh_mou dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/02/2008, 21h04
  4. Déterminaton d'une fonction de transfert
    Par tarzan_tlse dans le forum Signal
    Réponses: 5
    Dernier message: 05/07/2007, 09h39
  5. Optimisation de paramètres d'une fonction de transfert
    Par miloutcheque dans le forum Signal
    Réponses: 1
    Dernier message: 29/06/2007, 12h36

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