Filtre iir: fonctionnement
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Filtre iir: fonctionnement



  1. #1
    bibaou

    Filtre iir: fonctionnement


    ------

    Bonjour,
    Tout d'abord, je travaille sur scilab 5.5.0
    j'ai utilisé un filtre qui me permet de limiter le bruit de mon signal. J'ai utilisé le code suivant '(où pouet sont mes données de base et Y2rev mon signal lissé). Il fonctionne relativement bien mais j'ai cependant deux problèmes:
    1/ Au début et à la fin de mon signal, la courbe lissée part de zéro (voir screenshot). je voulais savoir comment empecher cela.
    2/Il s'agit d'un code que j'ai trouvé sur un forum mais je ne comprends pas tout à fait le rôle de chaque ligne. Pouvez-vous m'aider à déchiffrer?
    (Bien sur j'ai déjà éplucher l'aide scilab mais j'ai vraiment des difficultés)
    Merci beaucoup =)

    Code:
    M0=read('pouet.txt',-1,2)
    
    M0=M0';
    t = M0(1,:);
    
    signoise = M0(2,:);
    
    [hz]=iir(2,'lp','butt', 0.009, [0 0]);  définition du filtre
    y1=rtitr(hz(2),hz(3),signoise);      application du filtre aux données????
    y2for=rtitr(hz(2),hz(3),y1);          ???     
    
    for j=1:N0, 
        y1rev(1,j)=y1(N0+1-j);           ..??
    end ;
    
    
    y20rev=rtitr(hz(2),hz(3),y1rev);      ???
    
    
    for j=1:N0,
         y2rev(1,j)=y20rev(N0+1-j);       ???
    end ;

    -----
    Images attachées Images attachées  

  2. #2
    untruc

    Re : filtre iir: fonctionnement

    l'effet de bord est normal, et attendu.
    Je ne sais pas pourquoi tu calcules y2for en filtrant à nouveau y1.
    trace y1 pour voir.
    Si y1 est comme y2for, peut etre qu'il y a des sous options dans la fonction "rtitr" qui résout le problème. A défaut tu peux prolonger le signal aux 2 extrémités un petit peu en des paliers, en le laissant continu, et filtrer ce signal. Dans ce cas le signal filtré aura ces memes problemes de bord, mais dans une partie que tu ignoreras.

    Sinon, tu peux regarder le signal y2rev. comme tu vois:
    y1= signal filtré
    y1rev = retournement en temps de y1
    y20rev= signal filtré de y1rev
    y2rev= retournement en temps de y20rev
    ceci est l'equivalent de la commande "filtfilt" sous matlab, correspond à filtre sans phase. Il n'est pas causal comme filtre, mais parmi ses propriétés il minimise les sauts aux bords.

  3. #3
    bibaou

    Re : Filtre iir: fonctionnement

    Ok merci beaucoup pour les détails =) =)
    Voilà j'ai en effet utilisé la méthode en utilisant les points un peu plus loin pour que la plage qui m'interesse ne soit pas faussé par les effets de bord mais pour la première partie de la courbe je ne sais pas comment faire pou ''rajouter'' des points puisque ma courbe commence à t= 0.
    aurais tu une idée? un autre filtre?

    Sinon, merci pour le détails des lignes ca m'a aidé! par contre pourquoi appliquer deux fois le filtre?
    y1=rtitr(hz(2),hz(3),signoise) ; puis y20rev=rtitr(hz(2),hz(3),y1rev );
    et comment sont choisis le hz(2) et hz(3) (et leur role)?

    Merci encore et désolé si mes questions sont stupides je commence tout juste à utiliser scilab et j'avoue que des fois je n'y comprends pas grand chose=)

  4. #4
    untruc

    Re : Filtre iir: fonctionnement

    Citation Envoyé par bibaou Voir le message
    Ok merci beaucoup pour les détails =) =)
    Voilà j'ai en effet utilisé la méthode en utilisant les points un peu plus loin pour que la plage qui m'interesse ne soit pas faussé par les effets de bord mais pour la première partie de la courbe je ne sais pas comment faire pou ''rajouter'' des points puisque ma courbe commence à t= 0.
    aurais tu une idée? un autre filtre?
    tu as un vecteur des temps, et un vecteur des valeurs. Tu les ralonges de 5% de part et d'autre en creant de nouveaux vecteurs, qui commence à des valeurs négatives. Je ne sais pas s'il y a des toutes faites, mais tu peux affecter en une simple boucle

    Citation Envoyé par bibaou Voir le message
    Sinon, merci pour le détails des lignes ca m'a aidé! par contre pourquoi appliquer deux fois le filtre?
    y1=rtitr(hz(2),hz(3),signoise) ; puis y20rev=rtitr(hz(2),hz(3),y1rev );
    le y2for, est en appliquant 2 fois le filtre. Je ne sais pas si un truc de scilab.
    pour y20rev, on applique 2 fois le filtre en faisant des inversions en temps. C'est un style de filtrage, qui a ses propriétés. A toi de le dessiner, et de voir si physiquement il correspond à ce que tu veux.

    Citation Envoyé par bibaou Voir le message
    et comment sont choisis le hz(2) et hz(3) (et leur role)?
    la fonction rtitr fait appel au filtre definit par iir. Il semble que iir retourne des vecteurs hz(2) et hz(3).
    La vrai question est comment choisir les paramètres dans la commande "iir".
    A priori, le premier entier est l'ordre du filtre, on ne monte pas plus de 10 en général.
    le 'lp' signifie filtre "lowpass", passe bas.
    le 'butt' pour un filtre de type "butterworth"
    faut lire le maniel pour savoir ce qu'es [0 0], mais a priori comme les 4 autres tu peux les laisser tel quels.

    enfin le 0.009, doit représenter la fréquence de coupure. celle ou tu veux éliminer les composantes fréquentielles au dela de cette fréquence.
    Elle n'est pas exprimée en herz. Sous matlab, elle est exprimée en f_c/f_s, ou f_s est frequence échantillonnage de ton signal.
    Sous scilab je crois que c'est la moitié, genre f_c/2f_s. Il faut lire la description de la commande.

    à la question "comment trouver f_c", bein, ca c'est a toi de le trouver, ca dépend de ton signal.
    C'est toujours la meme procédure, et il serai préférable de savoir verifier tout ces calculs en apprenant comment representer le contenu fréquentiel d'un signal.
    J'avais déjà parlé de cette procédure ici dans ce forum

  5. A voir en vidéo sur Futura
  6. #5
    bibaou

    Re : Filtre iir: fonctionnement

    merci beaucoup pour tes réponses.

    j'ai bien compris comment trouver la frequence de coupure. par contre je n'ai toujours pas trouver deux choses:
    1 qu'est ce que renvoi cette ligne et qu'est ce que hz(2) et hz(3)
    Code:
    y20rev=rtitr(hz(2),hz(3),y1rev);
    et les propriétés de
     Cliquez pour afficher


    Est ce que quelqu'un peut m'expliquer le principe du "retournement..." merci beaucoup j'en ai vraiment besoin!

Discussions similaires

  1. conseil choix filtre et roue a filtre
    Par invite47c25a3f dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 10
    Dernier message: 04/09/2018, 16h03
  2. MATLAB: Filtre passe-haut (actif) pour compenser filtre passe-bas (passif)
    Par fiatlux dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 15/11/2013, 19h15
  3. Réponses: 1
    Dernier message: 20/02/2011, 15h38
  4. Principe de fonctionnement d'un filtre ??
    Par invite659c5516 dans le forum Électronique
    Réponses: 2
    Dernier message: 29/04/2010, 18h15
  5. Réponses: 0
    Dernier message: 31/07/2009, 14h49