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