Salut tous ,
je voudrais enfin comprendre comment on filtre une certaine bande de fréquence d'un signal, disons par exemple aux alentours de 50Hz. J'ai regardé pas mal de discussions récentes et voici ce que j'ai identifié comme méthode :
1°) faire une "fft" et afficher le spectre. Supprimer les fréquences qui ne nous intéressent pas en mettant à 0 les coeff correspondant à ces fréquences.et faire une "ifft"
2°) la deuxième chose que j'ai identifié c'est un filtre coupe bande.
Pour faire ceci il semble y avoir deux solutions "filter" et "fir1"
3°) la troisième solution qui semble être possible est la fonction "butter"
Maintenant identifier les méthodes c'est bien mais mettre en place est une autre Voici ce que je fais :
1°) pour la fft j'ai un peu de mal à comprendre comment faire, voici ce que j'ai fais :
le soucis est que jusqu'à présent je n'ai toujours pas compris comment déduire le vecteur de fréquences pour tracer mon spectre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 x=data(:,1); y=data(:,2); yFFT=fft(y,length(x));
=> je me dis que la fréquence fondamentale est x(end)-x(1) ? mais comment déduire les autres fréquences ? (surtout que ça devrait plutôt être une données de sortie de fft non ?)
Ensuite, si je suppose que j'ai fais mon spectre. Je mets manuellement les coefficients de la variable yFFT qui ne m'interesse pas à 0 et je fais :
et ça devrait fonctionner non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 yTemporel=ifft(yFFT); plot(x,yTemporel)
2°) Pour le filtre coupe bande j'ai une première méthode qui consiste à faire :
ceci ça devrait être pas mal, non ? mais par contre je n'ai pas compris à quoi ça sert d'avoir un filtre d'ordre supérieur à 1 ??? j'aurais tendance à dire que ça filtre de plus en plus si on augmente l'ordre car les pentes dans le diagramme de bode seront plus pentues ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 x=data(:,1); y=data(:,2); frequenceBasse=40; frequenceHaute=60; ordreFiltre=1; yFiltre = fir1(1,[2*pi*frequenceBasse 2*pi*frequenceHaute],'stop');
la deuxieme méthode consiste à utiliser directement "filter"
où "a" et "b" sont les coeff de la fonction de transfert. Dans l'idée ça me va mais je ne comprends pas quoi mettre pour a et b car sur matlab la fonction de transfert est avec des z^-1 alors que dans tous les cours que j'ai trouvé sur le net les filtres coupes bandes sont exprimé dans le domaine de Laplace ou Fourier... De plus, je ne vois pas comment choisir a et b afin que je coupe entre 40 et 60Hz
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 x=data(:,1); y=data(:,2); a=[];b=[] yFiltre = filter(b,a,y);
3°) Pour le filtre de "butter" (que je n'ai pas vraiment compris dans le principe) la mise en place sous matlab semble comme "fir1" :
le soucis est que je ne sais pas trop quoi faire à la fin de [z,p,k] il s'agit de poles et de gain mais comment reconstruire mon signal à partir de ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 x=data(:,1); y=data(:,2); frequenceBasse=40; frequenceHaute=60; ordreFiltre=1; [z,p,k] = butter(1,[2*pi*frequenceBasse 2*pi*frequenceHaute],'stop');
=> dans l'aide je ne comprends pas qu'es ce qu'ils font... ça me semble super compliqué par rapport aux autres filtre il y a un truc que je n'ai pas dû saisir
Pourriez vous, s'il vous plait, m'expliquer les points que je n'ai pas saisi pour ces filtres ?
merci beaucoup
Partager