ELE2700 — Analyse des signaux Notes de cours complémentaires Éléments de Conception de filtres numériques Christian Cardinal Mars 2007 1.1 Généralités Dans cette partie du cours nous ne considérons que des filtres linéaires et invariants dans le temps (LTI). De tels filtres sont caractérisés soit par leur réponse à l’impulsion, h(n), leur réponse en fréquence H(ejΩ ), leur transformée en z, H(z) ou encore par leurs équations aux différences. Deux classes de filtres numériques : 1. Filtre à réponse à l’impulsion finie (RIF, en anglais FIR, Finite Impulse Response) 2. Filtre à réponse à l’impulsion infinie (RII, en anglais IIR, Infinite Impulse Response) Dans les sections suivantes, ces deux classes de filtre sont étudiés. 1.2 Filtre à réponse à l’impulsion finie (RIF) Dans plusieurs applications pratiques tels que les télécommunications, la variation de la phase du signal engendrée par les opérations de filtrage est un paramètre important de conception. Contrairement au filtre de types RII, les filtres RIF sont généralement utilisés dans des applications où la phase doit varier linéairement en fonction de la fréquence. Exemple 1 : exemple d’une réponse à l’impulsion finie : h(n) = u(n) − u(n − N ) (1.1) La sortie d’un filtre LTI s’obtient par convolution du signal d’entrée x(n) et la réponse à l’impulsion h(n) du filtre : y(n) = x(n) ∗ h(n) = N −1 X x(k)h(n − k) (1.2) k=0 Cette dernière équation représente l’équation aux différences du filtre. La transformée en z de h(n) est : 1 H(z) = N −1 X (1.3) h(n)z −n n=0 Considérant l’exemple précédent, la transformée en z de h(n) = u(n) − u(n − N ) est : H(z) = N −1 X z −n = z 0 + z −1 + z −2 + ...z −(N −1) (1.4) n=0 Ceci nous permet d’écrire la transformée en z de la sortie du filtre y(n) : Y (z) = X(z)H(z) = X(z) + X(z)z −1 + X(z)z −2 + ... + X(z)z −(N −1) (1.5) La séquence y(n) obtenue à la sortie du filtre est la transformée z inverse de Y (z) : y(n) = x(n) + x(n − 1) + x(n − 2) + ... + x(n − (N − 1)) (1.6) La réalisation physique et matérielle des RIF utilise alors un ensemble de délais z −1 sans rétro-action de la sortie. Pour cette raison, la phase devient linéaire en fonction de la fréquence. Cette phase dépend du délai total engendré par la suite des délais z −1 . En effet, la transformée de Fourier de la séquence h(n) = u(n) − u(n − N ) est : H(ejΩ ) = H(z)|z=ejΩ = e−jΩ(N −1)/2 sin(ΩN/2) sin(Ω/2) On observe que la phase de H(ejΩ ) varie linéairement avec la fréquence numérique Ω : ∠H(ejΩ ) = −Ω(N − 1)/2. Une façon simple de déterminer les coefficients d’un filtre RIF, consiste à échantillonner la réponse à l’impulsion à temps continue désirée à une fréquence fs = 1/T pendant une durée finie. Cela revient donc à multiplier une réponse à l’impulsion (qui peut être infinie) h(n) avec une fenêtre w(n) de longueur finie : hw (n) = h(n)w(n) La séquence alors obtenue est finie et peut être réalisée par un ensemble de délais z −1 sans rétro-action de la sortie. Évidemment, une augmentation 2 de fs implique une augmentation du nombre de coefficients et donc une augmentation du nombre de délais nécessaire à la réalisation du filtre : cela revient alors à considerer une séquences de longueur N élevées. Cependant, il faut utiliser une fréquence suffisamment élevée afin d’obtenir la précision désirée. La fonction fenêtre, w(n) la plus simple à mettre en oeuvre est sans doute la fenêtre rectangulaire : w(n) = u(n) − u(n − N ). Cependant, ce type de fenêtre induit un effet indésirable connu sous le nom de «phénomène de Gibbs». En pratique, ce problème rend peu applicable ce type de fenêtre dans la conception de filtres RIF. Cependant, d’autres types de fenêtres procurent de meilleures performances : Bartlett, Hanning, Hamming et Blackman. Dans ce cours nous n’étudirons pas ces fenêtres dans les détails. Cependant, on peut facilement trouver leur fonction dans la litérature. D’autre part, le logiciel Matlab implémente l’ensemble des fonctions fenêtres. Exemple : Soit la réponse à l’impulsion d’un filtre à temps continue h(t) = e−t u(t). Échantillonnant cette réponse à l’impulsion avec une fréquence d’échantillonnage fs = 1000 Hz, on obtient une séquence h(n) = e−n/1000 u(n). Tronquant cette séquence à N = 1000, on obtient hw (n) = e−n/1000 [u(n) − u(n − 1000)]. On a donc filtre contient 1000 coefficients ai = e−i/1000 , i = 0, 1, 2, 3, ...999. La figure suivante montre la réalisation du filtre. 3 x(n) a0=1 z-1 a1=e -1/1000 z-1 a2=e -2/1000 z-1 z-1 z-1 -(N-2)/1000 -3/1000 a3=e ak=e -k/1000 aN-2=e z-1 -(N-1)/1000 aN-1=e S y(n) Fig. 1.1 – Réalisation d’un filtre RIF 1.3 Filtre à réponse à l’impulsion infinie (RII) La conception de filtres RIF conduit généralement à des réalisations matérielles dans lesquelles le délai produit par le filtrage est excessif. Dans les applications où des délais excessifs ne sont pas acceptables, les filtres numériques doivent être conçus de manière à ce que le délai engendré par le filtrage numérique soit le plus court possible. Les filtres RII permettent des réalisations matérielles introduisant des délais largement inférieurs à ceux introduits par les filtres RIF. Cependant, alors que pour les filtres RIF, la phase est linéaire, pour les filtres RII, la phase varie de façon non-linéaire avec la fréquence. L’exemple suivant montre une réponse à l’impulsion infinie. Exemple 2 : réponse à l’impulsion infinie : h(n) = an u(n) (1.7) Typiquement, la transformée en z de la réponse à l’impulsion d’un filtre RII s’écrit sous la forme d’une fonction rationnelle propre : 4 H(z) = N (z) D(z) (1.8) où deg(N (z)) < deg(D(z)). Par exemple, pour h(n) = an u(n), la transformée en z est : 1 (1.9) 1 − az −1 Rappelons qu’il est souvent utile d’obtenir l’équation aux différences d’un filtre afin de le réaliser. Ainsi, toujours avec l’exemple 2, on trouve la transformée en z de la sortie Y (z) : H(z) = Y (z) = X(z)H(z) = X(z) 1 1 − az −1 (1.10) ce qui nous permet d’écrire : Y (z)(1 − az −1 ) = X(z) (1.11) Y (z) = X(z) + Y (z)az −1 ) (1.12) de sorte que L’équation aux différences s’obtient en prenant la transformée inverse de Y (z) : y(n) = x(n) + ay(n − 1) (1.13) On voit bien apparaître la récursivité (ou la rétroaction) dans l’équation aux différences y(n). 1.4 Implémentation et graphe de fluence Éléments de base (ou primitives) : 1. Délai z −1 2. Multiplicateur par un facteur (coefficient) a 3. Sommateur 5 z-1 y(n)=x(n-1) x(n) Fig. 1.2 – délai x(n) a y(n)=ax(n) Fig. 1.3 – multiplicateur par un facteur a x(n)+y(n) x(n) y(n) Fig. 1.4 – sommateur 6 Exemple : H(z) = 1 + az −1 1 − bz −1 ⇒ Y (z)(1 − bz −1 ) = X(z)(1 + az −1 ) Y (z) = X(z) + aX(z)z −1 + bY (z)z −1 ⇒ y(n) = x(n) + ax(n − 1) + by(n − 1) Réalisation directe de l’équation aux différences y(n) x(n) y(n) z-1 z-1 a b Fig. 1.5 – réalisation directe (Type I) On peut aussi réduire la complexité de l’implémentation en réduisant le nombre de délais. On obtient alors une réalisation canonique du filtre (réalisation directe Type II). Dans notre exemple, on a : H(z) = où Y (z) W (z) = 1 + az −1 et Y (z) Y (z) W (z) = X(z) W (z) X(z) W (z) X(z) = 1 . 1−bz −1 Ainsi, on peut écrire : Y (z) = W (z)(1 + az −1 ) ⇒ y(n) = w(n) + aw(n − 1) W (z) = X(z) + bW (z)z −1 ⇒ w(n) = x(n) + bw(n − 1) 7 (1.14) (1.15) (1.16) (1.17) (1.18) Ce qui se réalise selon le graphe de fluence suivant : w(n) x(n) y(n) z-1 b a w(n-1) Fig. 1.6 – réalisation canonique (directe Type II) En général : PL −k Y (z) Y (z) W (z) k=0 ak z H(z) = = = P −k X(z) W (z) X(z) 1− N k=1 bkz X X Y (z) ak w(n − k) ak z −k ⇒ y(n) = = W (z) k=0 k=0 L L N X W (z) 1 bk w(n − k) ⇒ w(n) = x(n) + = P −k X(z) 1− N k=1 bkz k=1 Exemple : soit le filtre décrit par l’équation aux différences suivantes : y(n) = 0.4y(n − 1) + 0.3y(n − 2) + 3x(n) + 0.7x(n − 1) 1- Trouvez H(z) : Y (z) = 0.4Y (z)z −1 + 0.3Y (z)z −2 + 3X(z) + 0.7X(z)z −1 = (0.4z −1 + 0.3z −2 )Y (z) + (3 + 0.7z −1 )X(z) 8 (1.19) d’où : Y (z) − (0.4z −1 + 0.3z −2 )Y (z) = (3 + 0.7z −1 )X(z) et H(z) = Y (z) Y (z) W (z) (3 + 0.7z −1 ) = = X(z) W (z) X(z) 1 − (0.4z −1 + 0.3z −2 ) (1.20) 2- dessinez le graphe de fluence en utilisant un nombre minimale de délais : y(n) = 3w(n) + 0.7w(n − 1) et w(n) = x(n) + 0.4w(n − 1) + 0.3w(n − 2) w(n) x(n) 3 y(n) z-1 0.4 w(n-1) 0.7 z-1 0.3 w(n-2) Fig. 1.7 – réalisation canonique 1.5 Conception de filtres RII Une des techniques de conceptions le plus souvant utilisée consiste à effectuer une Transformation bilinéaire. La transformation bilinéaire est une transformation conforme qui transforme l’axe jω du plan s en un cercle unitaire dans le plan z. Ainsi, tous les points du demi plan gauche de s sont transformés en des points à l’intérieur du cercle unitaire ρ = 1, alors que les points du demi plan droit de s sont transformés en des points à l’extérieur du cercle unitaire du plan z. La transformation bilinaire se déduit à partir de la formule trapézoïdale d’intégration numérique. Elle s’écrit de la façon suivante : 9 s= 2 1 − z −1 T 1 + z −1 (1.21) Ainsi, connaissant la fonction de transfert d’un filtre à temps continue, H(s), la transformée en z de la réponse à l’impulsion, H(z) devient : H(z) = H(s)|s= 2 1−z−1 (1.22) T 1+z −1 Il y a donc un relation non-linéaire entre la fréquence numérique Ω = ωT et la fréquence analogique du filtre réalisé par la fonction H(s). Puisque z = ejΩ , en posant s = jθ où θ est la fréquence analogique réalisée par le filtre à temps continue, on obtient : jθ = 2 e−jΩ/2 (ejΩ/2 − e−jΩ/2 ) 2 1 − e−jΩ = T 1 + e−jΩ T e−jΩ/2 (ejΩ/2 + e−jΩ/2 ) (1.23) 2 tg(Ω/2) T (1.24) θ= La fréquence θ est dite "pré-déformée". Ainsi, à partir des spécifications de conception, le filtre analogique doit d’abord être conçu selon les fréquences pré-déformées. Cela nous conduit à une procédure de conception des filtres numériques utilisant une approche se basant sur la conception analogique des filtres. On suppose ici, que les méthodes de conceptions des filtres analogiques sont parfaitement connues. 1.6 Procédure de conception des filtres numériques RII 1. À partir des spécifications (fréquence et atténuations)=(ωi , Ai ), on calcule les fréquences numériques Ωi = ωi T , (la fréquence d’échantillonnage fs = 1/T ) 2. Pré-déformation de la fréquence : θi = T2 tg(Ω/2) 10 3. Conception du filtre prototype passe-bas normalisé en utilisant les fréquences et atténuations (θi , Ai ) ⇒ Hp−bas (s) 4. Dénormalisation du filtre et obtention du filtre prototype dénormalisé : Hp−bas (s) ⇒ Hp (s) 5. Transformation bilinéaire : H(z) = Hp (s)|s= 2 1−z−1 T 1+z −1 1.7 Réalisation avec Matlab Dans cette section, on présente quelques fonctions de base du logiciel matlab permettant de concevoir des filtres numériques. Notez que dans le logiciel matlab, la fonction help donne toutes les informations nécessaires sur une commande ou fonction matlab. Voici quatre fonctions de matlab pour la conception des filtres analogiques : BUTTER Conception des filtre analogiques et numériques de Butterworth : [B,A] = BUTTER(N,Wn) CHEBY1 Chebyshev Type I : [B,A] = CHEBY1(N,R,Wn) CHEBY2 Chebyshev Type II : [B,A] = CHEBY2(N,R,Wn) Transformation bilinéaire : [NUMd,DENd] = BILINEAR(NUM,DEN,Fs) Exemple : Concevoir un filtre numérique passe-bas de Butterworth ayant les spécifications suivantes : 1. Fréquence d’échantillonnage fs = 20KHz 2. Fréquence de coupure fc = 2000Hz 11 3. Atténuation d’au moins 10 dB à f ≥ 4000 Hz, δ2 = −10 dB à f ≥ 4000 Hz. Solution : 1. fréquences numériques Ωc = 2π × 2000/20000 = 0.2π Ωs = 2π × 4000/20000 = 0.4π 2. fréquences pré-déformées θc = tg(0.2π/2) = 0.325 θs = tg(0.4π/2) = 0.726 3. Normalisation ′ θc = 1, θs = 0.726/0.325 = 2.234 Ordre du filtre : n= log10 (1010/10 − 1) = 1.3669 =⇒ n = 2 2log10 (2.234) Avec la commande matlab "butter", on détermine la fonction H(s) : [b,a]=butter(2,0.325,’s’) b= 0 0 0.1056 a= 1.0000 0.4596 0.1056 [numd,dend]=bilinear(b,a,0.5) numd = 0.0675 0.1350 0.0675 dend = 1.0000 -1.1428 0.4127 12