[pb Matlab] filtres numeriques

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.

24 réponses

Résumé de la discussion

Un débutant en MATLAB cherche à concevoir un filtre FIR passe-bas et à afficher la réponse en fréquence via FFT, tout en apprenant les bases du filtrage numérique. Le fil réunit des échanges sur la génération d'un signal bruité, l'usage de fft pour afficher la réponse en fréquence et la recherche d'exemples MATLAB (M-files) et d'astuces. Plusieurs interventions proposent des méthodes simples, notamment l'utilisation de FFT et d'un masque de filtre, la définition d'une coupure en fréquence et l'ajustement des abscisses pour visualiser correctement le spectre. D'autres interventions évoquent des confusions entre filtres linéaires et non linéaires, et recommandent de démarrer par des explications sur les bases de la FFT et des filtres temporels avant d'aborder les fenêtres.

Bobot (l’IA à votre service)
  1. Contributeur
    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
    1. Contributeur
      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
      1. 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
    2. 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
      1. 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
        1. Contributeur
          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
          1. 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
            1. Contributeur
              comme j'ai dit.
              tu copie dans freq_filtrer les fréquances que tu veux garder.
              0
              1. 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
                1. Contributeur
                  dsl, je ne connait pas les fonctions que tu utilises.
                  ma méthode fait ça pas à pas
                  0
                  1. 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
                2. Contributeur
                  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
                  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
                  2. Contributeur
                    @elajnon, jamais, désolé.
                    0
                  3. @elajbonjour,
                    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
                3. Contributeur
                  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
                  1. 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
                    1. Contributeur
                      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
                      1. 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
                        1. 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
                          1. Contributeur
                            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
                            1. 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
                              1. 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
                                1. Salut à tous;

                                  J'ai aussi rencontré un problème au niveau programmation d'un filtre passe bande. Mon problème est consacré dans le faite que j'ai programmé le filtre sur un fichier editor (.m); mais je veux utiliser ce programme avec simulink; autrment dit je veux utiliser un bloc matlab simulink dont l'entrée de ce bloc sera être traiter avec le fichier.m puis il me fait retourner la sortie désirée pour que je la reboucle dans mon système. comment je doix faire?

                                  merci, en espérant que vous aillez compris mon problème
                                  0
                                  1. salut Char snipeur
                                    j'ai un projet avec matlab sachant que je sais pas grandes choses sur matlab je connais un petit peu le C et je veux programmer la fonction de réccurence suivante : y(n)=1.55193 y(n-1) - 0.89181 y(n-2) + 0.084971 [x(n) + 2*x(n-1) +x(n-2)] je veux simuler la réponse sous matlab d'afficher le diagramme de bode ainsi que la réponse indicielle
                                    merci
                                    0
                                    • 1
                                    • 2