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
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.B(q^-1)=b0+b1.q^-1+b2.q^-2 A(q^-1)=a0+a1.q^-1+a2.q^-2
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
Partager