[pb Matlab] filtres numeriques

Fermé
tommstein Messages postés 6 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 31 mai 2005 - 25 mai 2005 à 14:54
 foufou - 13 juin 2009 à 15:32
Bonjour,

Je fais un projet sur le filtrage numerique sous matlab. Pour l'instant je cherche a designer un filtre FIR passe-bas. Malheureusement je suis vraiment un debutant sur ce logiciel...Si quelqu'un pouvait me donner quelques tuyaux ou des m-files ce serait sympa

J'ai deja fait la partie generation d'un signal bruite mais comment faire une fft pour afficher la reponse en frequence?
(desole pour les accents mais je suis en UK et pas d'accents sur les claviers!!!)

merci de votre aide.
A voir également:

24 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
27 mai 2005 à 12:37
A=signal_bruite();
freq=fft(A);
freq_filtrer=zeros(sizeof(freq),1);
m=int(sizeof(freq)/2);
freq_filtrer (m-freq_de_coupure:freq_de_coupure)=
freq(m-freq_de_coupure:freq_de_coupure);
sig_filter=fft(freq_filtrer,-1); %# ou ifft je ne sait plus
tu as ainsi ton signal filtrer par un filtre passe bas allant jusqu'à freq_de_coupure
c'est l'algorithme de base, il te reste ensuite à bien définir les abscisses.
en esperant avoir bien repondu
7
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
25 mai 2005 à 15:40
Salut !
MATLAB, il n'y a rien de plus simple.
tu veux savoir comment fonctionne la fonction fct
tu tape help fct.
donc, tu as ton signal bruité stocker dans le vecteur A
tu fait
frequence=fft(A);
je ne suis plus sur du fft(A) il faut peu être faire fft(A,1) pour la fft direct.
tout est dans help fft
sinon, pour l'abscisse c'est plus chiant. si je me rapel bien, ta fréquence maximal c'est la moitié de la résolution. si ta grandeur d'évolution du signal est 't' la fréquane maximale mesurable est 1/(2×t)
Voila
1
tommstein Messages postés 6 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 31 mai 2005
25 mai 2005 à 16:53
merci Char Sniper,

L'help j'avais trouve mais mon pb etait surtout de faie un programme qui definisse la nature du signal d'entree et puisse le filtrer selon la methode des fenetres puis restituer un signal affichable en sortie.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
27 nov. 2006 à 17:47
Salut.
Ce que tu veux faire, ce nome filtre médian il me semble.
C'est un filtre non linéaire, il parcour ta matrice (x,y z ça se met sous forme de matrice, c plus simple ) et compare chaque valeur à ses voisines, et il prend la valeur la plus proche de la moyenne.
sinon, tu peux parcourir ta matrice avec une condition de modification.
C'est quoi tes valeurs abérante? Le premier travail, c'est déjà de définir ce qu'est une valeur incohérente en terme mathématique, ensuite je pourrai t'aider plus précisément.
1
Bonjour,
Je voudrai savoir si tu as dèja travaillé avec le filtre de kalman comme estimateur d'état. J'effectue un stage sur la commande machine synchrone sans capteur de position et je dois utiliser le filtre de kalman pour estimer la position du rotor.

Merci
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297 > elaj
27 avril 2009 à 08:07
non, jamais, désolé.
0
foufou > elaj
13 juin 2009 à 15:32
bonjour,
mois aussi j'ai un probleme avec l'estimation de vitesse de rotation du machine asynchrone!
tous que je trouve en discret mais mon modèle est continu.........
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 juin 2008 à 08:39
pour définir une fonction fct en Matlab, il faut créer un fichier fct.m et écrire dedans :
function y=fct(param)
%% coprs de la fonction
end;

une fonction récurente, il faut un critère d'arret, donc le corps de la fonction doit ressembler à ça :
if (n==2)
y=0:
else
y=1.55193 fct(n-1) - 0.89181 ...
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 juin 2008 à 16:52
dsl, bode et reponse indicielle, je connais pas. Bode à la rigueur me dit quelque chose, mais je confond peut être avec Bose (pour dire)
1
bonjour,

j'ai besoin d 'un peu d'aide au sujet de matlab. Voilà, je voudrais traiter un ensemble de points expérimentaux (700 environ, abscisse X, ordonnée Y ) sous matlab pour enlever le bruit dû à ma mesure. J'ai déjà essayé de lisser mes données expérimentales avec la fonction polyfit mais le résultat n'est pas génial car je n'ai utilisé qu'un polynôme de degré 10( au delà de ce degré il parait que c est un peu ingérable pour matlab). En gros pour avoir un ordre d idée sur les données que j ai , l'ensemble de mes points correspond à une superposition de gaussiennes avec des hauteurs et des écart types différents et certains points sortent un peu de la tendance générale de ma courbe. et vu qu'ensuite j'essaie de déterminer des points d'inflexion, mon bruit perturbe beaucoup cette détermination. Est ce que quelqu un connaît une méthode ou fonction de matlab qui pourrait me permettre de supprimer le bruit ?
0
tommstein Messages postés 6 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 31 mai 2005
31 mai 2005 à 12:06
merci encor char snipeur. mais je ne comprend pas pourquoi il faut une integration pour avoir m. j'ai cherche la fonction sizeof() ds l'aide, pas de reponse??
0
tommstein Messages postés 6 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 31 mai 2005
31 mai 2005 à 12:28
la fonction size() semble remplacer la fonction sizeof() mais il ne veut pas de mon integration, matlab me dit : ??? Function 'int' is not defined for values of class 'double'. J'ai un warning pour freq_filtrer=zeros(sizeof(freq),1); : Warning: Input arguments must be scalar.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
31 mai 2005 à 13:05
ok, en effet, c'est size() et pas sizeof() partout ( un peu de mal à passez du C à matlab)
à la place de int, utilise floor (même pb qu'au dessus) le but est d'avoir un entier.
en fait, fait plutot freq_filtrer=0*freq; c'est plus simple est ça donne le même résultat.
0
salut!

Bon je vs ecrit car je suis un peu ds la m^me galere!
Moi j'ai un signal que je souhaite filtrer.J'ai tracer son spectre mais comment éliminer les harmoniques afin de construire un nouveau signal propre??

Merci d'avance!!
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 juin 2005 à 12:33
comme j'ai dit.
tu copie dans freq_filtrer les fréquances que tu veux garder.
0
Heu désolé mais je débute sur Matlab...
Voici le code que j'ai tapé pr obtenir mon spectre :
NFFT=2^(nextpow2(length(V))-1);
[Pxx,f]=psd(V,NFFT,50,'mean');

v étant mon vecteur à analyser...

Merci
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 juin 2005 à 14:12
dsl, je ne connait pas les fonctions que tu utilises.
ma méthode fait ça pas à pas
0
bonjour à toi char Snipeur,
Je me permet de te contacter car j'ai un petit problème avec ce bon vieux matlab:
je dispose de donnée pointuelles en z y et z (en réalité des latitude et longitude et altitude associées) sur cette trame j'observe plusieurs point insolés ou regroupé totalmeent incohérent en z...
et pour le moment je me trouve comme un con à les supprimer via un éditeur de texte et cela manuellement, autrement dis je me m'en sort pas...
Comment puis-je faire pour appliquer un filtre afin de pouvoir supprimer mes données éronées....sachant que je suis débutant en matlab...

Un très très grand merci d'avance!!! si jamais tu peux me répondre dans la semaine le plus tôt possible ça serait génial!!

très bonne journée!
guillaume.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
27 nov. 2006 à 21:39
En fait, le filtre médian en 2D voi par exemple 21 23 52, il garde 23.
son principal effet est d'écrèter toute courbe.
En 3D je ne sais pas comment le faire fonctionner. Je prendrait la valeur à évaluer et les deux voisin suuivant x et suivant y.
par exemple ta valuer : 250, et les voisine 23, 21 suivant x et 52 256 suivant y. Ta valeur n'est pas abérante, donc tu la conserv par contre, tu aurai eu 52 et 53 selon y, il faut que tu la change. Et c'est là que je ne sai pas quelle valeur lui affecter...
0
et bien en fait je pense que ça n'est pas la peinne de prendre en considération les x et y, vue que les valeurs abérentes sont en z (altitude).quand tu parles de filtres 3D, peut ont encader le point à supprimer par 4 valeur (sommes dans une matirce) et lui dire que si la moyenne des différence dépace une certaine valeur donnée, il doit supprimer la valeur...crois tu que ça soit quelque chose de joueable?

un grand merci d'avance!
guillaume
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
28 nov. 2006 à 14:46
Salut.
J'ai pas tout compris.
Comment sont foutu tes données? je ne comprend pas.
Mais quand tu a une altitude, tu peux ecrire z=f(x,y) en gral
donc définir des valeur selon x et y...
0
bonjour

j'ai un fichier .mat et je je dois utiliser comme un bloc sous simulink qu est ce que je dois faire

merci d avance
0
Dans le cadre d'un projet, je dois désaisonnaliser des données. En fait j'ai fait la fft mais je ne sais pas comment obtenir le spectre car en utilisant la fonction plot, un nuage de points apparait.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 févr. 2008 à 14:06
la fft est complexe, donc, pour obtenir le spectre, il faut réer l'axe des abscisse d'après l'échantionage de tes donnée, et utilisé la partie réèlle ou le module du résultat de la fft.
Par exemple, si tu as un échantillonage de 1 seconde et milles points.
La fréquence maximale que tu pourra avoir est autour de 1 Hz (je crois que c'est 0,5 Hz car il te faut au moins 2 points pour déterminer une fréquence; à vérifier) Et la fréquence minimale sera de 10^-3 Hz, ou 5.10^-2Hz.
0
bonjour!
je traite des données d'un courantomètre. j'ai besoin de supprimer les vitesses dont l'intensité de l'écho (autre matrice de taille égale) est inférieure à une certaine valeur. les valeurs NaN de la matrice intensité écho doivent être dans les mêmes cases que celle de la matrice vitesse
pour donner un autre exemple, je dois éliminer les vitesses qui sont au dessus de la courbe de marée, par contre le nombre de ligne est identique mais il n'y a qu'une colonne...

merci, en espérant que vous aillez compris mon problème
0
bonjour je dois faire une reconnaissance vocale sur matlab donc pr sa g enregistrer ma voix a l'aide d'un microphone mais je narrive pas a ecrire l equat(ion d'un filtyre me permettant de couper le continu ..
0