|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||
|
Membre chevronné
![]() Inscription : février 2010 Messages : 1 814 ![]() |
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 1°) pour la fft j'ai un peu de mal à comprendre comment faire, voici ce que j'ai fais : Code :
=> 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 : Code :
2°) Pour le filtre coupe bande j'ai une première méthode qui consiste à faire : Code :
la deuxieme méthode consiste à utiliser directement "filter" Code :
![]() 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" : Code :
il s'agit de poles et de gain mais comment reconstruire mon signal à partir de ceci=> dans l'aide je ne comprends pas qu'es ce qu'ils font... ça me semble super compliqué par rapport aux autres filtre Pourriez vous, s'il vous plait, m'expliquer les points que je n'ai pas saisi pour ces filtres ? merci beaucoup
|
||||||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mai 2008 Messages : 1 021 ![]() |
Bonjour,
Il y a une quatrième solution qui est le REJECTEUR. En fait c'est un coupe bande très sélectif. |
|
|
00
|
|
|
#3 | |
![]() ![]() Jérôme Inscription : septembre 2009 Messages : 5 327 ![]() |
Bonjour,
__________________
Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum Une erreur ? C'est par ici : Messages d'erreur et avertissements "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs, résultats non attendus...). Citation:
|
|
|
|
10
|
|
|
#4 | |||||
|
Membre chevronné
![]() Inscription : février 2010 Messages : 1 814 ![]() |
merci beaucoup d'avoir pris le temps de répondre !!!
Citation:
Citation:
http://www.developpez.net/forums/d12...ur-frequences/ Citation:
et ensuite il me suffit de les utiliser dans filter ? ![]() => par contre dans "fir1" il y a un seul argument de sortie et dans "filter" il y a deux argument de sortie... du coup ça veut dire que les coefficient "a" de filter doivent tous être égaux à 1 pour ce type de filtre ? (je n'ai jamais eu de cours sur le filtrage) Pour Butter j'ai compris du coup, merci. je fais : Code :
![]() ps: une dernière question : plus un filtre à un ordre élevé plus il filtre precisement une gamme de frequence ? |
|||||
|
|
10
|
|
|
#5 | ||||
|
Membre chevronné
![]() Inscription : février 2010 Messages : 1 814 ![]() |
en fait il ne me reste qu'un petit soucis (car si j'ai bien compris a=1 pour FIR1)
=> comment définir le vecteur de fréquence X pour la fft ? => je sais qu'il y a un lien avec la fréquence d'echantillonage mais je ne vois pas trop lequel... la frequence d'echantillonage va me donner une frequence discrete qui est le minimum que je peux avoir dans mon signal discret. Ensuite, pour tout les autres points se seront des multiples de cet fréquence ? et au final lorsque j'aurais fait "Fe*nbPoint" j'aurais le fondamental de mon signal ? => par contre, pourquoi dans l'exemple de matlab il y a une sorte de normalisation dans l'utilisation de la FFT ? (une division par L) bref, pourriez vous m'éclaircir ce probleme d'echantillonage / frequence ? merci d'avance En fait mon gros probleme ce trouve dans ces lignes sur l'exemple de l'aide de matlab : Code :
Code :
=> en fait dans les 4premieres lignes voici ce que l'on fait : 1°) définition frequence echantillonage 2°) definition periode echantillonage 3°) nombre de points que l'on veut 4°) on fait le vecteur temps qui correspond au nb de point à cette frequence 5°) ici "Fs*t(1:50)" je ne comprends pas ce que l'on fait...? si on aurait voulu tracer y=f(t) on aurait dû faire : tout simplement ... ? pourquoi prendre que les 50premieres valeurs ? et pourquoi multiplier par la frequence Fs ??? |
||||
|
|
10
|
|
|
#6 |
|
Membre du Club
![]() Inscription : septembre 2012 Messages : 75 ![]() |
ce genre de problème correspond exactement à ce que je ne comprends pas moi aussi.
En tout cas j'ai pu grâce à votre discussion sur ces différentes fonctions résoudre mon problème de filtrage. Merci et bon courage pour la fft que je n'ai pas comprise moi aussi |
|
|
00
|
|
|
#7 | |
![]() ![]() Jérôme Inscription : septembre 2009 Messages : 5 327 ![]() |
Un lien qui sera plus parlant que quelques mots...
Les cours sur le traitement du signal (et de ressources sur la FFT) sont plus que nombreux sur la toile, Google saura te conseiller
__________________
Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum Une erreur ? C'est par ici : Messages d'erreur et avertissements "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs, résultats non attendus...). Citation:
|
|
|
|
10
|
|
|
#8 | ||
|
Membre chevronné
![]() Inscription : février 2010 Messages : 1 814 ![]() |
merci beaucoup Jerôme
![]() Concernant Butter : j'ai bien saisi à présent, voici le type de code que j'utilise : Code :
autrement dit, si je veux filtrer un signal entre 200 et 300 Hz que doit je rentrer à la place de mon 0.7 et 0.9 ? (je normalise par rapport à quoi ?) j'ai cru comprendre qu'il faillait faire un truc dans ce genre : Code :
[b,a]=butter(5,[fbas/fEchan/2 fhaut/fEchan/2],'stop'); fbas : frequence basse de ma bande de coupure fhaut : frequence haute de ma bande de coupure fEchan : frequence d'echantillonage => par contre juste pour vérif : la frequence d'echantillonage et la fréquence d'espacement entre mes points du vecteur initial ? donc ça doit etre ? => où la fréquence d'echantillonage n'est pas quelque chose donnée par notre signal mais quelque chose que l'on impose ? (mais à ce moment là comment la fonction reconnait que c'est l'echantillonage qui à changé et non les fréquences que je souhaite couper ?) j'ai regardé dans la FAQ mais j'ai l'impression qu'un truc m'echappe... Concernant la FFT : cette ligne etait vraiment bloquante pour moi mais en lisant le lien que tu m'as envoyé j'ai cru comprendre que c'était une façon de faire qui permet d'optimiser les temps de calcul ? je peux faire comme ceci à la place pour definir mon vecteur frequences ? et la normalisation c'est quoi son intérêt ? => on peut bien remplacer : par : et par je ne vois pas pourquoi ça ne marcherai pas... |
||
|
|
00
|
|
|
#9 | ||
|
Membre chevronné
![]() Inscription : février 2010 Messages : 1 814 ![]() |
je viens de faire un bout de code qui est la somme de deux sinus de fréquence différente.
ensuite, j'essai de filtrer un des deux sinus mais je n'y arrive pas : Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com