[pb Matlab] filtres numeriques

tommstein Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
 foufou -
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention  
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
elaj
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > elaj
 
non, jamais, désolé.
0
foufou > elaj
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
lala
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
dada
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
comme j'ai dit.
tu copie dans freq_filtrer les fréquances que tu veux garder.
0
dada
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
dsl, je ne connait pas les fonctions que tu utilises.
ma méthode fait ça pas à pas
0
guillaume
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
guillaume
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
mazen67
 
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
iulia
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
buzy
 
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
franckao
 
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