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

  1. #1
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    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 : 33
    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
    Points : 2 385
    Points
    2 385
    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
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    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 : 33
    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
    Points : 2 385
    Points
    2 385
    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?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  5. #5
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    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 : 33
    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
    Points : 2 385
    Points
    2 385
    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.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  7. #7
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    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

  8. #8
    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 : 33
    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
    Points : 2 385
    Points
    2 385
    Par défaut
    Je ne comprends toujours pas bien ce que tu veux faire


    D'après ton premier post:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mod_H12=abs(H12); % dimension 79380x18
    donc que penses tu faire en effectuant modH12(i)=mod_H12(f+1,i) ?

    Pour avoir le module de ton signal à, par exemple, 150Hz, il faut que tu t’intéresses au module du signal mod_H12(:,1).

    Avec ta boucle sur f, tu parcours actuellement les 1000 premier point par pas de 50 de ton signal à X Hz (dépendant du i).
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  9. #9
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Je suis mauvais c'est tout, je ne sais pas expliquer

    Je vais essayer de re-clarifier les choses,

    J'ai un vecteur f_sec de dimensions 1x79380 ;
    j'ai ensuite un signal composé de 18 sinus de fréquences allant de 150 : 50 :1000,
    les réponses à ces sinus me donnent deux matrice V1 et V2 complexe de dimensions 79380x18.
    pour chacun de ces sinus je veux trouver le module et la phase du rapport H12=V2./V1 ?

    j'ai voulu faire une double boucle for pour calculer et stocker en chaque itération les valeurs des modules et arguments respectifs, mais j'ai n'importe quoi comme résultat

    donc que penses tu faire en effectuant modH12(i)=mod_H12(f+1,i) ?
    Je pensais récupérer mes 18 valeurs de modules.

    peut être qu'il faudrait refaire le programme pour qu'il aille tout d' abord me chercher dans le vecteur f_sec le numéro de case correspondant à la valeur f et qu'à partir de ce numéro de case, le programme aille piocher dans mod_H12(numéro de case, i) puis me stocker la valeur dans le vecteur correspondant : par exemple pour 150 Hz et 200 Hz


    f_sec(271)=150 (271 est le numero de case dans le workspace me donnant la valeur 150 Hz, sauf que je ne suis pas censé savoir que c'est la valeur 271 qui est attribué à la valeur 150),
    ensuite modH12(1)=mod_H12(271,1) --> Stocké dans la matrice

    f_sec(271)=150 (271 est le numero de case dans le workspace me donnant la valeur 150 Hz, sauf que je ne suis pas censé savoir que c'est la valeur 271 qui est attribué à la valeur 150),
    ensuite modH12(1)=mod_H12(271,1) --> Stocké dans la matrice

    f_sec(361)=200
    ensuite modH12(2)=mod_H12(361,2) --> Stocké dans la matrice

    f_sec(451)=300
    ensuite modH12(3)=mod_H12(451,2) --> Stocké dans la matrice

    ainsi de suite sans que ces valeurs soient écrasés.
    idem pour l'argument.

    Est ce que j'ai bien expliqué cette fois ?

  10. #10
    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 : 33
    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
    Points : 2 385
    Points
    2 385
    Par défaut
    Je dois dire que je suis vraiment paumé pour le coup. J'ai beau lire et relire et re re relire tes posts, je n'arrive toujours pas à comprendre.

    Première question: qu'est-ce que Fs, Td, et surtout f_sec? à quoi cela correspond il ?

    Si j'ai bien compris tu as un système. Tu envoies 18 signaux sinusoïdaux à des fréquences différentes comprises entre 150 et 1000 Hz. Tu récupères deux signaux en sortie V1 et V2. Mes connaissances en traitement du signal s'arrêtent principalement à des notions, je ne vais donc pas remettre en cause le fait que tu cherches le module d'un signal de sortie sur un autre même si là, tu m'as déjà perdu

    Donc ne sachant toujours pas ce qu'est f_sec (d'après ce que je comprends, ne sachant pas pour autant pourquoi, c'est une échelle de fréquence?) tu cherches les indices de fréquences spécifiques sur ton vecteur f_sec. donc je suppose que ce qui répondrait à ton problème s'apparenterait à ce morceau de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for i = 1:18
        c=1;
        for f = 150:50:1000
            idx_temp = find(f_sec == f);
            modH12(c,i) = mod_H12(idx_temp,i);
            c=c+1;
        end
    end
    Je pense que cela répond à tes attentes, même si encore une fois j'ai dû mal à en être sûr au vue de ma faible compréhension.

    Je suis mauvais c'est tout, je ne sais pas expliquer
    Je ne suis peut être juste pas compétent pour répondre à tes interrogations; mes compétences en traitement du signal et en programmation Matlab ne sont clairement pas d'un niveau exceptionnel mais j'essaie de faire au mieux pour t'aider!
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  11. #11
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Bonjour Gooby, je tiens tout d'abord à te remercier pour ton aide et ta patience , je vais essayer de reformuler le contexte de mon travail

    Première question: qu'est-ce que Fs, Td, et surtout f_sec? à quoi cela correspond il
    Fs est la fréquence d'échantillonnage de mon signal
    Td est la durée de chacun de mes sinus
    f_sec est le vecteur fréquence ou je regarde la transformée de fourrier de chacun de mes 18 signaux

    Donc ne sachant toujours pas ce qu'est f_sec (d'après ce que je comprends, ne sachant pas pour autant pourquoi, c'est une échelle de fréquence?)
    Parce qu'il s'agit de la réponse en fréquence de ma fonction de transfert :
    j'ai 2 signaux sinusoïdaux temporels v1(t) et v2(t) qui sont tous deux des matrices car il s'agit des réponses à 18 sinus. Chacun de ces sinus contiennent 79380 échantillons. J'effectue la transformée de fourrier de ces deux signaux et ça me donne V1(f) et V2(f), je cherche à évaluer le module et la phase de la fonction de transfert :
    mon vecteur temps comprends 79380 échantillons à la fréquence d'échantillonnage Fs=44100
    Si je veux observer la transformée de fourrier de mes signaux, il faut que je définisse un vecteur fréquence f_sec de la même taille que mon vecteur temporel
    H12(f)=V2(f)/V1(f)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mod_H12=abs(H12)
    arg_H12=angle(H12)
    le problème c'est que je veux déterminer les valeurs des modules et phase pour chacune de mes 18 FFT (disons la ou la densité d'énergie est maximale)
    Ainsi par exemple pour 600 Hz lorsque je trace le module de la FFT qui va aller de 0 Hz jusqu'à 44100 Hz l'amplitude sera maximale à 600 Hz pour mon signal V1(f) et V2(f), je veux récuperer ces deux valeurs et ceci pour mes 18 fréquences, ainsi que les angles associés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i = 1:18
        c=1;
        for f = 150:50:1000
            idx_temp = find(f_sec == f);
            modH12(c,i) = mod_H12(idx_temp,i);
            c=c+1;
        end
    end
    Je viens de tester ce programme, ça m'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ??? Subscripted assignement dimension mismatch
    Error in ==> Lecture-signaux_1_essai at 125
    modH12(c,i) = mod_H12(idx_temp,i);

  12. #12
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Bonjour.

    Je ne comprends pas ce qu'il y a dans v1 et v2. Vous parlez de « 18 signaux » mais ça ne fait jamais qu'une matrice de 18 colonnes. Pas deux.

    Par ailleurs, si vous voulez une fonction de transfert il faut exciter le système avec un signal large bande (bruit, dirac, ...) plutôt qu'avec des fréquences discrètes qui ne vont vous en donner qu'un échantillonnage. Vos 18 résultats ne seront valides chacun qu'à une fréquence et dans ce cas, vous n'avez pas besoin de la fft.

  13. #13
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    v1 et v2 sont les réponses microphonique en 2 emplacements différents lorsqu'on excite un sinus pas a pas contenant 18 fréquences. La durée d'un sinus est de 2 secondes avant de passer au suivant et chaque micro me mesure l'ensemble de mes sinus (durée totale d'acquisition 36 secondes échantillonné à 44100 Hz)
    au départ v1 et v2 étaient tous deux des vecteurs 1587600x1 que j'ai transformé en matrices de dimensions 79380x18 avec la commande , ainsi j'ai pu séparer le signal 1, le signal 2 jusqu'au 18 ème signal. En gros 79380 sont le nombre de points nécessaire pour la réponse à un de mes 18 sinus.
    A partir de la, j'ai fait la FFT de v1 et v2 j'ai alors V1 et V2 complexe qui sont tous deux des matrices de 79380x18.
    La fonction de transfert H12 entre mes deux micros est le rapport de V2/V1 (qui me donne également une matrice 79380x18)
    je peux calculer le module et l'argument de mes 79380 échantillons de la fonction de transfert en faisant modH12=abs(H12) et argH12=angle(H12); men modH12 et argH12 sont également de dimension 79380x18 .
    Sauf que les modules et arguments qui m’intéressent et que je veux stocker sont ceux correspondant aux réponses à mon sinus pas à pas.
    En gros mon problème est de fabriquer un vecteur 18x1 valeurs de mes modules mod_H12 à 150Hz, 200 Hz, 250 Hz jusqu'à 1000Hz, à partir de la matrice modH12. idem avec les arguments : arg_H12 à 150Hz, 200 Hz, 250 Hz jusqu'à 1000Hz à partir de la matrice argH12.

  14. #14
    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 : 33
    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
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Citation Envoyé par titi_du_34 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i = 1:18
        c=1;
        for f = 150:50:1000
            idx_temp = find(f_sec == f);
            modH12(c,i) = mod_H12(idx_temp,i);
            c=c+1;
        end
    end
    Je viens de tester ce programme, ça m'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ??? Subscripted assignement dimension mismatch
    Error in ==> Lecture-signaux_1_essai at 125
    modH12(c,i) = mod_H12(idx_temp,i);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i = 1:18
        c=1;
        for f = 150:50:1000
            idx_temp = find(f_sec == f);
            modH12(c,i) = mod_H12(idx_temp(1),i);
            c=c+1;
        end
    end
    Et comme ça?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  15. #15
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par titi_du_34 Voir le message
    modH12 et argH12 sont également de dimension 79380x18
    La fonction de transfert mesurée avec un sinus à 150Hz, par exemple, se résume en un point (complexe bien entendu) à 150Hz. En plotant une fft, vous obtiendrez très probablement un seul pic. Prenez ce point et éliminez les autres. [Je suppose qu'on a affaire à un système linéaire invariant]. Je peine à comprendre pourquoi vous ne calculez pas directement le gain/déphasage de chaque paire de sinus, qui vous donnerait directement 18 points.

    Je peux avoir mal compris un truc.

  16. #16
    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 : 33
    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
    Points : 2 385
    Points
    2 385
    Par défaut
    Je me fais exactement la même réflexion que Jyber depuis le début, mais n'étant pas un as du traitement de signaux, je me suis dit que quelque chose devait m'échapper.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  17. #17
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Je viens de trouver la manip du titi_du_34 qui est exposée ici:
    traitement d'une réponse à un sinus glissant
    Le lien entre les deux fils m'avait échappé.

    Je vois donc un haut-parleur, qui diffuse 9 tons successifs, et 2 micros qui les captent. Je me demande d'emblée ce qu'il cherche à mesurer. Certes, on peut en faire abstraction pour nous concentrer sur le code. Mais il est toujours difficile - pour moi en tous cas - de piocher un code sans savoir quel problème il résoud. La compréhension de l'expérience peut aider puissamment à remettre sur les rails une manip qui n'aboutit pas.

    Admettons donc qu'on calcule une fonction de transfert, qui sera sans doute celle du milieu entre les deux microphones.

    La deuxième question est : pourquoi 9 fréquences (passées depuis à 18)? Ca ne peut donner que 18 points de cette fameuse fonction de transfert, alors qu'une f.t. est une fonction continue (échantillonnée dans le cas numérique). Je sais bien qu'on est dans un forum MATLAB et qu'on devrait se concentrer sur le code, mais les interrogations à ce stade sont trop nombreuses pour laisser les idées claires. Il va falloir parler théorie, au risque d'être h.s.

    Si on veut la réponse du système à 18 fréquences, il suffit d'isoler les 18 segments de signal, en prenant soin d'éliminer les transitions, et de calculer le gain et le déphasage de chaque paire. La mesure du déphasage a été discutée ici : Calcul du déphasage entre deux signaux sinusoidaux. Au passage, il n'y a pas besoin de filtrage puisque nous sommes en sinus purs. Si on veut la « fonctions de transfert », alors il faut probablement réviser les bases de la manip.

    Je ne sais pas quel degré de h.s. est toléré.

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