IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Implémentation filtre ordre 2


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Implémentation filtre ordre 2
    Bonjour,
    J'ai besoin d'aide pour implémenter un filtre en C#. Pour poser l'environnement :
    Je fait une acquisition d'un signal bruité que je souhaite filtré en temps réel. Je suis pas à 200ms près mais il faut filtrer les échantillons dès qu'ils arrivent, car je fait d'autre opération sur le signal filtré ensuite.
    Sur matlab j'ai synthétisé mon filtre : B/A
    B(q^-1)=b0+b1.q^-1+b2.q^-2
    A(q^-1)=a0+a1.q^-1+a2.q^-2
    Je cherche donc à implémenter : y(t)=B(q^-1)/A(q^-1) *x(t) en C ou java, le langage n'est pas le problème, je le mettrais en C# au final.

    J'envisage deux solutions possibles :
    1- Mettre B/A sous la forme d'un filtre H(q^-1)=h0+h1.q^-1+h2.q^-2
    Car je sais que y(t)=H(q^-1).x(t)=h0.x(t)+h1.x(t-1)+h2.x(t-2)+...
    Ici c'est un problème de mathématique.

    2- Me donner une méthode d'implémentation directe d'une filtre passe bas d'ordre n de fréquence de coupure Fc.

    J'ai pris l'habitude d'écrire les filtres sous la forme de polynôme, avec q^-1 l'opérateur retard mais on aussi remplacer q^-1 par s (q^-2=s²) pour le mettre sous la forme de fonction de transfert.
    Par exemple sur MATLAB :

    Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [B,A]=butter(2,0.15,'low');
    y=filter(B,A,x);
    % Donne :
    B =
        0.0413    0.0825    0.0413
    A =
        1.0000   -1.3490    0.5140
    % Transfer function:
    0.04125 s^2 + 0.08251 s + 0.04125
    ---------------------------------
          s^2 - 1.349 s + 0.514

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    J'ai eu une illumination...
    En faite les coefficients h0, h1... sont donnés par la réponse impulsionnelle du filtre
    J'ai donc tracer la réponse de mon filtre et lu les coefficients avec MATLAB.
    Mon filtrage se code donc juste comme ça :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int k = nbCoeff; k < tailleBuff; k++) 
        for (i = 0; i < nbCoeff; i++)
            Yfiltre[k] = Yfiltre[k] + H[i] * BuffRssi[k - i];
    J'ai réussi à me dépanner mais ça fait vraiment bricolage...
    Si quelqu'un a une méthode pour implémenter directement un filtre avec une fonction de transfert comme ça :
    0.04125 s^2 + 0.08251 s + 0.04125
    ---------------------------------
    s^2 - 1.349 s + 0.514
    Je suis preneur.

  3. #3
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    http://fr.wikipedia.org/wiki/Algorit...Savitzky-Golay
    permet de faire des filtres sans facteur de retard. C'est en effet un polynome. Les coefficients sont précalculés, si bien qu'il revient en pratique à une multiplication matrice carrée x vecteur de données.
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2015, 17h48
  2. [Débutant] Implémentation filtre notch
    Par ayoub_m dans le forum Signal
    Réponses: 2
    Dernier message: 23/05/2012, 14h52
  3. [Signal] Implémentation filtres Passe-Bas en C
    Par Snark dans le forum Traitement du signal
    Réponses: 24
    Dernier message: 11/02/2009, 15h32
  4. [WHERE] Quelle est l'incidence de l'ordre des filtres ?
    Par MashiMaro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/12/2005, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo