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 :

Chargement de fichiers et filtre passe bande


Sujet :

Signal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Chargement de fichiers et filtre passe bande
    Bonjour,

    Voici mon programme :


    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
    clear all
    close all
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1998
    load('fichier1.txt')
    jour=fichier1(1:length(fichiers1),2);
    mois=fichier1(1:length(fichier1),3);
    annee=fichier1(1:length(fichier1),4);
    heure=fichier1(1:length(fichier1),5);
     
    conversion_mois % conversion du mois en seconde
    t=((jour-1)*24*3600+heure*3600+mois);
    y=fichier1(:,6);
     
    c=zeros(1:2*(length(y)),1);
     
    %Interpolation des données (pour pouvoir observer des fréquences allant jusque 1/10min sur le spectre)
    for i=1:length(y)
        c(2*(i-1)+1)=y(i);
    end
    for i=1:length(c)/2
        c(2*i)=(c(2*i-1)+c(2*i+1))/2;
    end
     
    %%FFT
    Y=fft((c));
    N=length(c);
    df=1/(max(t)-min(t));
    f=(0:1:N/2)*df;
    figure(1)
     
    hold on
     
    loglog(f(2:N/2+1),abs(Y(2:N/2+1)))
    a=f(2:N/2+1);
    b=abs(Y(2:N/2+1));
    title('S(f) - 1950')
    xlabel('f (Hz)')
    ylabel('S(f)')
    hold off
    D'une part j'aimerai savoir si vous connaissez une commande permettant de faire une boucle pour charger les noms de fichiers (car j'ai beaucoup de fichiers à charger et à manipuler et je veux éviter les copier-collers)
    D'autre part je veux filtrer mon signal avec un filtre passe bas pour n'observer le spectre que sur la bande de fréquence [1/5400 1/600].
    J'ai essayé d'utiliser filter, fir1 mais je n'ai pas réussi et ne suis pas sûr de m'y être bien pris. Ce serait sympa si vous pouviez m'aider.

    Merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par Caroline_1 Voir le message
    D'une part j'aimerai savoir si vous connaissez une commande permettant de faire une boucle pour charger les noms de fichiers (car j'ai beaucoup de fichiers à charger et à manipuler et je veux éviter les copier-collers)
    Voir la : Comment nommer une suite de fichiers : nom_1.ext, nom_2.ext... nom_N.ext ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    un filtre passe bas pour n'observer le spectre que sur la bande de fréquence [1/5400 1/600].
    Tu peux utiliser Butterworth.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [numz,denz]=butter(n,[f1,f2]/(fe/2))
    avec n l'ordre du filtre (multiple de 2)
    puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s=filter(numz,denz,signal)

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Tout d'abord merci. J'ai chargé mes fichiers comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for n=1:1000
    load(['fichier0' num2str(n) '.txt'])
    A=[str2mat(['fichier0',num2str(n)])]
    end
    Mais le problème que j'ai maintenant c'est que A est une chaîne de caractère à savoir 'fichier01' et pas la matrice associée au fichier01 comme je le voudrais. Savez-vous comment résoudre cela ?

    D'autre part j'ai utilisé le filtre suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fs=1/600;
    Wn=[1/5400 1/601]/fs;
    b=fir1(length(y)-1,Wn,'bandpass')
    et si je veux l'appliquer à mon signal défini par le vecteur y il suffit que je fasse y*1./b ? parce que je ne sais pas comment l'appliquer d'autant plus qu'avec cette solution il faut obligatoirement que l'ordre de mon filtre soit : length(y)-1.

    Merci beaucoup à vous et bonne soirée !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Désolé j'avais oublié ceci :

    la solution ne serait pas :
    ?
    Dans ce cas comment est-ce que je choisis l'ordre de mon filtre ?

    Encore bonne soirée !

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Il faut faire comme ceci dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for n=1:1000
       str = ['fichier0' num2str(n)];
       S = load([str '.txt']);
       A = S.(str)
    end
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    La ligne de code : A=S.(str); ne marche pas. On me retourne l'erreur suivante :

    Attempt to reference field of non-structure array

    Savez-vous ce qui ne va pas ?

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Quelle est ta version exacte de MATLAB ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    7.0.0.19920

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Oui bon OK c'est normal car le fichier est un fichier ASCII, donc S n'est pas une structure.

    Mais pourquoi souhaites-tu conserver le même nom que celui du fichier pour la variable ?
    Il n'y a généralement aucun intérêt à faire ceci
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je ne tiens pas particulièrement à utiliser le même nom que celui du fichier. Mais pour définir mes paramètres à partir du fichier fichier.txt par exemple je fais comme ceci :
    x=fichier(:,1)
    etc
    C'est pour ça que je voulais récupérer la matrice issu de mon fichier chargé avec une boucle.

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    OK, fait simplement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for n=1:1000
       fichier = load(['fichier0' num2str(n) '.txt'],'-ascii');
    end
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    nickel ça marche, merci !

Discussions similaires

  1. calcul du temps de réponse d'un filtre passe bande
    Par Asturias1 dans le forum Signal
    Réponses: 8
    Dernier message: 13/07/2009, 11h37
  2. Appliquer un filtre passe-bande à un son .wav
    Par jems87 dans le forum Signal
    Réponses: 6
    Dernier message: 23/12/2008, 19h49
  3. Filtre passe bande
    Par vanhelsing69 dans le forum Signal
    Réponses: 8
    Dernier message: 17/12/2008, 18h01
  4. Filtre passe bande
    Par zinzaf dans le forum LabVIEW
    Réponses: 2
    Dernier message: 15/06/2008, 09h55
  5. Filtre passe Bande
    Par Mau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/06/2002, 17h03

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