Accueil > Electronique > FPGA > Filtre numérique du 1er ordre

En cours de rédaction

Filtre numérique du 1er ordre

samedi 19 juin 2010, par Steve

Introduction

La description qui suit permet de filtrer des échantillons en temps réel. Le filtre est implémenté sous sa forme dit directe.

La synthèse du filtre (transformée bilinéaire)

Commençons par un peu de théorie afin de transformer un filtre continu vers un filtre discret.

La forme générale du filtre dans le domaine de Laplace est :

 H(s) = \frac{a \cdot \omega_{0} + b \cdot s}{c \cdot \omega_{0} + d \cdot s}

En substituant s par \frac{2}{T_{e}} \cdot \frac{1-z^{-1}}{1+z^{-1}} dans H(s), on obtient :

 H(z) = {\frac{a \cdot \omega_{0} + b \cdot s}{c \cdot \omega_{0} + d \cdot s}}| s = \frac{2}{T_{e}} \cdot \frac{1-z^{-1}}{1+z^{-1}}

 H(z) = {\frac{a \cdot \omega_{0} + b \cdot \frac{2}{T_{e}} \cdot \frac{1-z^{-1}}{1+z^{-1}}}{c \cdot \omega_{0} + d \cdot \frac{2}{T_{e}} \cdot \frac{1-z^{-1}}{1+z^{-1}}}}

 H(z) = {\frac{a \cdot \omega_{0} \cdot (1+z^{-1}) + b \cdot \frac{2}{T_{e}} \cdot (1-z^{-1})}{c \cdot \omega_{0} \cdot (1+z^{-1}) + d \cdot \frac{2}{T_{e}} \cdot (1-z^{-1})}}

On obtient :

 H(z) = \frac{(a \cdot \omega_{0} + b \cdot \frac{2}{T_{e}}) + (a \cdot \omega_{0} - b \cdot \frac{2}{T_{e}})\cdot z^{-1}}
{(c \cdot \omega_{0} + d \cdot \frac{2}{T_{e}}) + (c \cdot \omega_{0} - d \cdot \frac{2}{T_{e}})\cdot z^{-1}}

Posons H(z) = \frac{S(z)}{E(z)} :

S(z) \cdot [(c \cdot \omega_{0} + d \cdot \frac{2}{T_{e}}) + (c \cdot \omega_{0} - d \cdot \frac{2}{T_{e}})\cdot z^{-1}] = E(z) \cdot [(a \cdot \omega_{0} + b \cdot \frac{2}{T_{e}}) + (a \cdot \omega_{0} - b \cdot \frac{2}{T_{e}})\cdot z^{-1}]

s[k] \cdot (c \cdot \omega_{0} + d \cdot \frac{2}{T_{e}}) + s[k-1] \cdot (c \cdot \omega_{0} - d \cdot \frac{2}{T_{e}}) = e[k] \cdot (a \cdot \omega_{0} + b \cdot \frac{2}{T_{e}}) + e[k-1] \cdot (a \cdot \omega_{0} - b \cdot \frac{2}{T_{e}})

On obtient l’équation aux différences :

s[k] = e[k] \cdot \frac{a \cdot \omega_{0} + b \cdot \frac{2}{T_{e}}}{c \cdot \omega_{0} + d \cdot \frac{2}{T_{e}}} + e[k-1] \cdot \frac{a \cdot \omega_{0} - b \cdot \frac{2}{T_{e}}}{c \cdot \omega_{0} + d \cdot \frac{2}{T_{e}}} - s[k-1] \cdot \frac{c \cdot \omega_{0} - d \cdot \frac{2}{T_{e}}}{c \cdot \omega_{0} + d \cdot \frac{2}{T_{e}}}

Et finalement, l’équation aux différences qui sera implémentée dans la description VHDL :

s[k] = \alpha \cdot e[k] + \beta \cdot e[k-1] - \gamma \cdot s[k-1]

La description

L’implémentation se base sur trois multiplieur série et un additionneur série.
La description se décompose en quatre parties :
- le multiplieur série,
- l’additionneur série,
- le registre à décalage de sortie et
- le séquenceur.

Le multiplieur série

Le multiplieur est sous une forme séquencée qui nécessite 37 coups d’horloge afin de produire le résultat. Le signal ’start’ démarre le processus de multiplication. Le bus ’selector’ provient d’un compteur (qui est mutualisé par plusieurs instances du multiplieur) et fournit un auxiliaire dans l’opération de multiplication. ’a’ et ’b’ sont respectivement le multiplicande et le multiplicateur. Le produit se présente sous la forme d’un flux série, idéal pour alimenter un additionneur série.

L’additionneur série

L’additionneur série présenté ici est basé sur un additionneur complet avec une rétroaction des retenues. Il additionne trois termes correspondant aux produits des multiplieurs décrits ci-dessus. La somme se présente sous un flux série.

Le registre à décalage de sortie

Le séquenceur du filtre

Le filtre

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message
  • Pour créer des paragraphes, laissez simplement des lignes vides.