Filtres numériques

publicité
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
Téléchargement