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 :
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