Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

MATLAB-pb d'initialisation de boucle



  1. #1
    hameer

    MATLAB-pb d'initialisation de boucle


    ------

    salut à tous,

    je suis sous matlab 6.5, je voudrais savoir comment on peut générer une matrice dont la taille va varier au cours de l'execution d'une boucle, explication:

    je dispose d'un vecteur X représentant un signal, je veux faire une moyenne synchrone (sorte de filtre) pour récupérer les périodes stationnaires qui sont incluses dans X.
    je lui demande donc de vérifier pour un f0 donné (par ex: f0=40HZ), si mon signal résultant n'est pas nul alors je peux dire que f0 existe bien dans X.

    mon problème :
    1/je veux faire varier f0 de 40Hz à 500Hz par pas de 0.01Hz.
    2/je veux k'il me sélectionne trois vecteurs H,I et J qui seront les 3 fréquences les plus significatives dans mon signal.
    3/le critère de sélection est le max de H,I, et J.

    Comme vous pouvez le voir, H, I et J ont une taille qui va varier en fonction de la période Tb.

    je cherche surtout à savoir comment pouvoir générer une matrice dont la taille va varier

    Voici le script que j'ai ecrit:

    %*********************initiali sation************************ ******
    H=zeros(1,2500);%j'ai mis 2500 par défaut mais ça ne marche pas
    I=zeros(1,2500);
    J=zeros(1,2500);
    a=max(abs(H));
    b=max(abs(I));
    c=max(abs(J));
    v=[a b c];
    V=sort(v); %mise en ordre croissant de v
    MAX=max(v);
    MIN=min(v);
    %***************************dé but boucle***********************
    for f0=40:10:500
    Tb=round(fe/f0);
    %début de la moyenne synchrone
    for k=1:1:Tb
    for i=0:1N-Tb)/(Tb)
    Z(i+1)=X(k+i*Tb);
    B(k)=mean(Z);
    end
    end
    %fin de la moyenne synchrone
    %***************************dé but des critères de comparaison******
    if MAX==a & MIN==c
    if max(abs(B))>MAX
    H=[];
    H=B;
    elseif V(2)<max(abs(B))<MAX
    I=[];
    I=B;
    elseif MIN<max(abs(B))<V(2)
    J=[];
    J=B;
    end
    elseif MAX==b & MIN==c
    if max(abs(B))>MAX
    I=[];
    I=B;
    elseif V(2)<max(abs(B))<MAX
    H=[];
    H=B;
    elseif MIN<max(abs(B))<V(2)
    J=[];
    J=B;
    end
    elseif MAX==a & MIN==b
    if max(abs(B))>MAX
    H=[];
    H=B;
    elseif V(2)<max(abs(B))<MAX
    J=[];
    J=B;
    elseif MIN<max(abs(B))<V(2)
    I=[];
    I=B;
    end
    elseif MAX==c & MIN==b
    if max(abs(B))>MAX
    J=[];
    J=B;
    elseif V(2)<max(abs(B))<MAX
    H=[];
    H=B;
    elseif MIN<max(abs(B))<V(2)
    I=[];
    I=B;
    end
    elseif MAX==c & MIN==a
    if max(abs(B))>MAX
    J=[];
    J=B;
    elseif V(2)<max(abs(B))<MAX
    I=[];
    I=B;
    elseif MIN<max(abs(B))<V(2)
    H=[];
    H=B;
    end
    elseif MAX==b & MIN==a
    if max(abs(B))>MAX
    I=[];
    I=B;
    elseif V(2)<max(abs(B))<MAX
    J=[];
    J=B;
    elseif MIN<max(abs(B))<V(2)
    H=[];
    H=B;
    end
    end
    end
    %*************************grap hiques********************

    axe_tH = (1:length(H))/fe;
    axe_tI = (1:length(I))/fe;
    axe_tJ = (1:length(J))/fe;

    figure(1)
    plot(axe_tH,H);
    figure(2)
    plot(axe_tI,I);
    figure(3)
    plot(axe_tJ,J);


    merci beaucoup pour une quelconque aide!!

    -----

  2. Publicité
  3. #2
    glattering

    Re : MATLAB-pb d'initialisation de boucle

    Je ne vois pas très bien ce que sont H I et J...
    Bon ce que je vais écrire ne sera peut être pas très utile mais on sait jamais...

    D'une manière générale, tu peux déclarer une matrice vide
    A=[];
    et lorsque tu parcours toutes tes fréquences f0, on peut imaginer un truc du style:
    for f0=40:0.01:200
    % si f0 présent dans x alors tu fais:
    A= [A f0];
    end %fin de la boucle sur f0

    à la fin tu te retrouves avec une matrice A de la forme:
    [40 100 120] qui contient les fréquences f0 présentes dans x.


    en espérant que ça puisse aider....

    /glattering

  4. #3
    hameer

    Re : MATLAB-pb d'initialisation de boucle

    salut glattering,

    merci pour ton message.
    H, I et J sont les signaux temporels stationnaires inclus dans X et qui sont les 3 meilleures fréquences.
    j'ai essayé d'initialiser les matrices vides, le problème c'est qu'il ne les remplit pas ensuite!
    par ailleurs je ne cherche pas simplement à avoir les meilleures fréquences (une simple transformée de fourier me donnerait cela), je cherche à avoir les signaux temporels.

  5. #4
    glattering

    Re : MATLAB-pb d'initialisation de boucle

    Citation Envoyé par hameer
    j'ai essayé d'initialiser les matrices vides, le problème c'est qu'il ne les remplit pas ensuite!
    Ben oui c'est à toi de les remplir au fur et à mesure.
    A=[A 1] concanete A et 1, donc si au départ A=[], après cette ligne A=1;
    puis si tu fais encore A=[A 9]
    après A= [1 9]
    je n'ai pas trop bien compris où est ton pb.... dsl si je dis des évidences alors....

  6. A voir en vidéo sur Futura
  7. #5
    glattering

    Re : MATLAB-pb d'initialisation de boucle

    H I J ce sont des sinusoides pures alors?
    Si tu veux les signaux en partant de la FFT, c'est simple non?

  8. #6
    hameer

    Re : MATLAB-pb d'initialisation de boucle

    resalut glattering,

    en réalité X est un signal sinusoïdal mais très bruité car issu de mesures expérimentales, le truc c que ce signal a non seulemtent du bruit (assez facile à filtrer) mais aussi des fréquences fondamentales qui sont au moins de 2, donc représentatifs du phénomène.

    la moyenne synchrone est un outil qui me permet de les trouver.

    je te remercie pour l'idée de concaténation, je vais essayer de voir.

  9. Publicité
  10. #7
    glattering

    Re : MATLAB-pb d'initialisation de boucle

    Ok ça y est je vois ce que t'entends par moyenne synchrone.

    Bonne chance.

Discussions similaires

  1. probleme d'indexage de boucle for avec matlab
    Par RBM dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 23/10/2007, 02h32
  2. fonction avec boucle for matlab
    Par bichou9 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 03/07/2007, 16h21
  3. Optimisation boucle Matlab.
    Par blanka808 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 13/04/2007, 11h50
  4. [MatLab] Sb2Sl => Matlab classique = pb intégration.
    Par Zangdar dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 03/08/2005, 21h02
  5. sortir d'une boucle en matlab
    Par veligère dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 06/10/2004, 14h04
Découvrez nos comparatifs produits sur l'informatique et les technologies.