Page Personnelle de Vincent Kerhoas
Vincent Kerhoas
Professeur Agrégé
Page Personnelle de Vincent Kerhoas

Filtre FIR ( Finite Impulse Response )

Back                  << Index >>

Commençons par un exemple :

Le programme suivant permet de réaliser un filtre passe bas dont la fréquence de coupure est 2000Hz :

Il s’agit d’une opération de multiplication-accumulation ( somme discrète de produits entre coefficients et échantillons ).
Cela correspond à une convolution numérique.

La fréquence d’échantillonage est Fe=8kHz.
L’opération de filtrage est donc à considérer entre 0 et Fe/2 ( Fréquence de Shannon ) Il faut effectuer 21 calculs, l’ordre du filtre est N = 21

La caractéristique fréquentielle idéale du filtre serait donc :

Néanmoins la caractéristique fréquentielle réelle de ce filtre est :

Lien Equation de Récurrence / Transformée de Fourier

Tous les Te, un échantillon d’entrée x est prélevé, et l’opération suivante est effectuée :

\( y(n)= \sum_{k=0}^{N-1} h_k.x(n-k) \)

autrement dit, à l’instant n, nous calculons l’échantillon de sortie y à partir des N échantillons d’entrée précédents et des coefficients du filtre h

Considérons le cas N=4 :

\( y(n)= h_0.x(n)+h_1.x(n-1)+h_2.x(n-2)+h_3.x(n-3) \)

Passons de cette équation de récurrence à la transformée en z :

\( Y(z)= h_0.X(z)+h_1.z^{-1}.X(z)+h_2.z^{-2}.X(z)+h_3.z^{-3}.X(z) \)

\( Y(z)= \left( h_0+h_1.z^{-1}+h_2.z^{-2}+h_3.z^{-3} \right ).X(z) \)

\( Y(z)=H(z).X(z) \)

avec y(n) de la forme : \( y(n)= \sum_{k=0}^{N-1} h_k.x(n-k) \)

et \( H(z)= \sum_{k=0}^{N-1} h(k).z^{-k} \)

Rappelons la définition de la transformée en z : \( z= e^{sT_e} \)

s’agissant d’un filtre, nous nous intéressons au comportement de H en fonction de la fréquence.
Nous nous trouvons donc dans le cas particulier où \( s=j\omega \)
\( z= e^{j\omega.T_e} \)

Ainsi, la Transformée de Fourier Discrète ( TFD ) de H est :

\( H(f) = \sum_{k=0}^{N-1} h(k).e^{-j2\pi f k T_e } \)


Revenons au cas idéal, pour lequel le nombre d’échantillons serait infini :

\( H_{ideal}(f) = \sum_{k=-\infty}^{+\infty} h(k).e^{-j2\pi f k T_e } \)

Soit la fréquence normalisée \( f_n = \frac{f}{F_e} \)

\( H_{ideal}(f_n) = \sum_{k=-\infty}^{+\infty} h(k).e^{-j2\pi f_n k} \)

Calcul de la Transformée de Fourier Discrète Inverse :

\( h_{ideal}(k) = \int_{-1}^{+1} H_{ideal}(f_n) e^{j2\pi f_n k }df_n \)

Considérons le filtre passe bas ideal :

La réponse impulsionnelle est donc

\( h_{ideal}(k) = \int_{-fc_n}^{+fc_n} 1. e^{j2\pi k f_n} df_n \)

\( h_{ideal}(k) = 2.\frac{F_c}{F_e} \frac{sin(2\pi k \frac{F_c}{F_e})}{2\pi k \frac{F_c}{F_e}} = 2.\frac{F_c}{F_e} sinc(2\pi k \frac{F_c}{F_e}) \)

Réalisation du Filtre

Problème : cela correspond à une séquence infinie ( donc impossible à réaliser avec une boucle de calculs) .
Il faut donc tronquer n pour avoir une réponse finie ( on ne peut pas réaliser une multiplication-accumulation d’une infinité d’échantillons à chaque période ) .

Pour réaliser le filtre, nous allons multiplier \( h_{ideal}(n) \) par une fenêtre rectangle.
Cela aura bien sûr comme effet de dégrader l’effet du filtrage, mais c’est une condition nécéssaire pour le réaliser.

En effet La Transformée de fourier d’un produit de signaux temporels correspond à la convolution des tranformées de fourier de chacun des signaux.

\( h(n)=h_{ideal}(n).rect(n) \)

avec :

Ex pour N=4:

\( h(n)=h_d(0).1 + h_d(1).1 + h_d(2).1 + h_d(3).1 + h_d(4).0 + h_d(5).0 + … \)

ATTENTION : il s’agit bien ici d’une multiplication en temporel

Ainsi, dans le cas où N=21, nous retenons 21 coefficients de \( h_{ideal}(n) = 2.\frac{F_c}{F_e} sinc(2\pi n \frac{F_c}{F_e}) \)

Notons qu’en numérique la notion de causalité est relative, étant donné que l’on traite “N échantillons précédents mémorisés”

Influence de l’ordre du filtre

Bien évidemment, en augmentant l’ordre du filtre, les caractéristiques sont meilleures ( pente plus prononcée notamment ).
Attention toutefois, il faut pouvoir réaliser le calcul entre 2 acquisitions d’un échantillon d’entrée.

Influence du type de fenêtre

L’utilisation d’une fenêtre rectangulaire induit le phénomène de gibbs en fréquentiel, ce qui altère la caractéristique.

Il existe d’autres fenêtres pour des caractèristiques meilleures.

fir_windows.py

Considérons un filtre FIR Passe Bas d’ ordre 128, de fréquence de coupure fc=5000Hz, à une fréquence d’ échantillonnage fs=44100Hz.

fir.py

REMARQUE : Le Filtre FIR a une Phase Linéaire, ainsi le filtre fir ne provoque pas de distorsion de phase.


Back                  << Index >>