Professional Documents
Culture Documents
1 Glossaire
2 Introduction
Les filtres numriques prsentent par rapport aux filtres analogiques les avantages-
inconvnients suivants :
Avantages - Les filtres numriques sont insensibles aux conditions extrieures (chaleur,
humidit, etc.)
- Certains filtres numriques sont impossibles raliser de manire
analogique (exemple: les filtres FIR).
- Les filtres numriques ne sont pas sensibles aux non-idalits d'un
amplificateur oprationnel. Ainsi, un filtre IIR du 10me ordre est tout fait
envisageable (attention quand mme au bruit de calcul !).
- La problmatique du bruit change d'aspect: dans le filtrage numrique on
parle de 'bruit de quantification' et de 'bruit de calcul'. Le premier est li au
nombre de bits employs pour la quantification (8 bits, 16 bits, etc.). Le
second est ngligeable si l'unit de calcul est de type 'floating point'. De
toute manire, le bruit numrique est localis: on sait d'o il vient et il reste
stable.
Inconvnients - Les filtres numriques ncessitent un filtrage analogique anti-repliement
l'chantillonnage et la restitution.
- Les performances d'un filtre sont directement proportionnelles la
puissance de l'unit de calcul (processeur ou DSP).
- Beaucoup de problmes peuvent apparatre si l'unit de calcul est de type
'fixed point'. Les paramtres d'un filtre ncessitent parfois une double
prcision pour tre oprationnels, ce qui ralentit les performances.
Filtres IIR Infinite Impulse Response. Ces filtres rcursifs ont une contre-raction.
Avantages - Beaucoup moins de calculs par rapport un FIR quivalent au
niveau des performances.
Inconvnients - Il faut vrifier la stabilit.
- Phase non linaire distorsion de phase
HE-Arc, Ingnierie 2
Filtrage numrique
3 Filtres FIR
Prliminaire La thorie des filtres FIR s'appuie au dpart sur un modle de filtre idal. La
perfection n'tant pas de ce monde, on arrive au bout du compte un filtre
rel, plus ou moins proche du modle idal. Pour viter toute confusion, le
filtre idal sera par la suite caractris par la lettre k (k(t), K(f), etc.), alors
que le filtre rel sera caractris par la lettre h (h(t), H(f), etc.).
Rappel La fonction 'sinus cardinal' sinc(x) est dfinie de la manire suivante :
sin( x )
si x 0
sin c( x ) = x (1)
1 si x = 0
Les filtres FIR (Finite Impulse Response) n'ont qu'un dfaut: ils demandent une grosse
capacit de calcul. Avec les performances toujours plus importantes des units de calcul
(DSP, ou mme FPGA !), ils sont de plus en plus utiliss.
Pour illustrer l'ide sous-jacente, imaginons un signal d'entre x(t)X(f) de bande passante
B. Nous aimerions filtrer ce signal avec le filtre passe-bas idal k(t)K(f). La Figure 1
explique les tapes du filtrage.
1 k'(t)=Te.k(t) Te.K(f)
Te
x(t)
X(f) Ax
t -B -Bf Bf B f
Ke'(f), Xe(f)
K(f+fe) K(f) K(ffe)
ke'(t)=Te.ke(t)
2 fe.X(f) 1
xe(t) fe.X(f+fe) fe.X(ffe)
Ax.fe
Te
Ye(f)=Ke'(f).Xe(f)
3
ye(t)=ke'(t)*xe(t) fe.Y(f+fe) fe.Y(f) fe.Y(ffe)
y(t) Ax.fe
Figure 1
HE-Arc, Ingnierie 3
Filtrage numrique
(3)
K e ' (f ) = K (f k f )
k =
e
A noter que le facteur multiplicatif fe disparat pour Ke'(f), du fait qu'on avait
pralablement multipli k(t) par Te.
3) Le signal de sortie ye(t)Ye (f) est le suivant :
Y e (f ) = X e (f ) K e ' (f )
(4)
Y e (f ) = f e X(f k f ) K(f k f )
k =
e e
Si on reste dans l'intervalle frquentiel fe < f < fe, on trouve tout simplement :
Y e (f ) = f e X (f ) K (f ) pour fe < f < fe (5)
Le facteur fe de (5) est normal. Il est le 'signe distinctif' de l'chantillonnage idal. Si on
restitue le signal analogique (par exemple par maintien), ce facteur fe disparat et on
retrouve y(t).
HE-Arc, Ingnierie 4
Filtrage numrique
3.2 Principes
L'ide du filtre FIR est de raliser le filtrage numriquement au moyen du produit de
convolution dfini par (9).
Avantage - Cette manire de procder permet de raliser n'importe quel filtre ! Il suffit
par exemple d'imaginer un filtre K(f) dans le domaine frquentiel, de chercher
sa rponse impulsionnelle k(t) et le tour est jou. Par simple convolution, on
arrive filtrer numriquement n'importe quel signal x(nTe).
Problmes - La rponse impulsionnelle k(t) est dfinie pour < t <+. On ne peut pas
raliser numriquement un produit de convolution avec un tel signal, puisque
dans ce cas on aurait un nombre infini de paramtres k'(nTe). Pour remdier
cela, on va effectuer un fentrage, ce qui aura bien entendu des incidences
sur le rsultat.
- Mme fentre, la rponse impulsionnelle n'est pas causale ! Pour la rendre
causale, il faut la 'dplacer' vers la gauche, ce qui entrane :
- un dphasage dans le domaine frquentiel
- un retard dans le domaine temporel
On montrera plus tard que sous certaines conditions, ce retard est constant.
Dans ce cas, on n'a pas de distorsion de phase.
Figure 2
avec : Bf = 1 kHz
fe = 4Bf = 4 kHz
K(f)=1 lorsque Bf f Bf
La rponse impulsionnelle k(t) correspondante K(f) est la suivante :
k ( t ) = 2 Bf sin c(2 Bf t ) avec < t < (10)
On multiplie k(t) par Te et on chantillonne :
k e ' ( t ) = Te k(n T ) ( t n T )
n =
e e avec < t < (11)
HE-Arc, Ingnierie 5
Filtrage numrique
Le rsultat est illustr par la Figure 2. Le filtre initial se rpte avec une priode fe.
Comme ke'(t) a une dure infinie, on va le fentrer. Dans notre exemple, on va prendre une
fentre rectangulaire de dure Tf = (NbTaps1)Te. Le nombre de 'taps' dtermine la dure de
la fentre, laquelle est choisie pour tre un multiple de Te (on soustrait 1 parce que les bornes
de la fentre sont comprises).
Dans notre exemple, on choisit NbTaps=21, donc Tf = 5 ms.
On a donc :
Tf T
k ef ' ( t ) = h e ' ( t ) w ( t ) avec t f (14)
2 2
10
1 n
k ef ' ( t ) =
n = 10 2
sin c ( t n Te )
2
(15)
Le rsultat dans le domaine temporel est illustr par la Figure 3. On vrifie qu'il y a bien 21
'taps' dans la fentre (les limites de la fentre sont comprises !).
signal kef'(t) et fentre (t en ms)
1.1
1
wn
kefn 0.5
0
0.2
8 6 4 2 0 2 4 6 8
tamin tn tamax
Figure 3
HE-Arc, Ingnierie 6
Filtrage numrique
Ki
Kfi
Xefi 0.5
0
0
2 1.5 1 0.5 0 0.5 1 1.5 2
fe fi fe
2 2
Figure 4
Bien entendu, on peut utiliser des fentres diffrentes. La fentre rectangulaire n'est ici pas
idale. Par dfaut, Matlab propose la fentre de Hamming. L'annexe 1 tablit une
comparaison entre la fentre rectangulaire et celle de Hamming. En filtrage numrique, on
voit aussi beaucoup la fentre de Kaiser.
Te
t
kefd'(t)
Te
t
Tf
Figure 5
HE-Arc, Ingnierie 7
Filtrage numrique
0.5
hn
0.2
0 2 4 6 8 10 12 14 16 18 20
0 n NbTaps 1
Figure 6
L'quation (23) est une fonction de transfert sans contre-raction. Ce filtre est toujours
stable; une impulsion de Kronecker-delta a une influence de dure limite, savoir Tf. C'est la
raison pour laquelle on appelle ces filtres 'Finite Impulse Response'.
HE-Arc, Ingnierie 8
Filtrage numrique
C'est assez gnant. Si on applique comme fonction d'entre le saut unit, la sortie va se
stabiliser une valeur 1.03. Pour viter cet effet, il suffit de calibrer les 'taps'. Les valeurs
hc(nTe) calibres sont les suivantes :
1
h c (n Te ) = NbTaps 1
h (n ) 0 n (NbTaps1) (26)
h (n )
n =0
HE-Arc, Ingnierie 9
Filtrage numrique
Lorsqu'on choisit un nombre pair de 'taps', la symtrie est quelque peu diffrente. La Figure 7
illustre un exemple avec NbTaps=20.
h(n) - coefficients du filtre (t en ms)
0.6
0.5
hn
0.2
0 2 4 6 8 10 12 14 16 18
0 n NbTaps 1
Figure 7
Il n'y a plus de coefficient 'au milieu', mais la symtrie axiale reste. Lorsqu'un filtre FIR runit
ces deux conditions (nombre de coefficients pair et symtrie axiale), on dit qu'il est de type 2.
HE-Arc, Ingnierie 10
Filtrage numrique
Figure 8
HE-Arc, Ingnierie 11
Filtrage numrique
Figure 9
La rponse impulsionnelle (non calibre et pour une fentre rectangulaire !) donne les 'taps' du
filtre :
2 Bf 2 Bf NbTaps 1 NbTaps 1
sin c n pour n
fe fe 2 2
h (n ) = (32)
1 2 Bf pour n = NbTaps 1
fe 2
Valeurs de n : 0 n (NbTaps1)
Dure de la fentre : Tf = (NbTaps1)Te
Ordre du filtre : N = NbTaps1
Retard du filtre : = Tf/2 N = (NbTaps1)/2 impulsions
Particularit : Type 1 uniquement (NbTaps impair)
Calibrer les 'taps' d'un filtre passe-haut est un peu plus dlicat que pour le passe-bas (voir 3.6
page 9). Nous n'entrerons pas dans le dtail ici.
3.10.1 Exemple
On choisit :
Bf = 1 kHz
fe = 4Bf
NbTaps = 21
HE-Arc, Ingnierie 12
Filtrage numrique
0.5
hn
0.5
0.5
0 2 4 6 8 10 12 14 16 18 20
0 n NbTaps 1
Figure 10
1
H( f )
Hid( f )
0.5
0
0
2 1.5 1 0.5 0 0.5 1 1.5 2
fmin f fmax
Figure 11
HE-Arc, Ingnierie 13
Filtrage numrique
fe fe/2 B2 B1 B1 B2 fe/2 fe f
Figure 12
La rponse impulsionnelle (non calibre et pour une fentre rectangulaire !) donne les 'taps' du
filtre :
2 B2 2 B2 NbTaps 1 2 B1 2 B1 NbTaps 1
h (n ) = sin c n
sin c
f n
fe fe 2 fe e 2
Valeurs de n : 0 n (NbTaps1)
Dure de la fentre : Tf = (NbTaps1)Te
Ordre du filtre : N = NbTaps1
Retard du filtre : = Tf/2 N = (NbTaps1)/2 impulsions
Calibrer les 'taps' d'un filtre passe-bande est un peu plus dlicat que pour le passe-bas (voir
3.6 page 9). Nous n'entrerons pas dans le dtail ici. Un passe-bande est une conjugaison d'un
passe-bas et d'un passe-haut. C'est pourquoi il faut doubler le nombre de 'taps' pour obtenir les
mmes caractristiques qu'un passe-bas (voir exemple).
3.11.1 Exemple
On choisit :
B1 = 500 Hz
B2 = 1 kHz
fe = 4 kHz
NbTaps = 51
La rponse impulsionnelle est illustre par la Figure 13.
Passe-bande - rponse impulsionnelle
0.75
0.5
hn
0.5
0.5
0 5 10 15 20 25 30 35 40 45 50
0 n NbTaps 1
Figure 13
HE-Arc, Ingnierie 14
Filtrage numrique
1
H( f )
Hid( f )
0.5
0
0
2 1.5 1 0.5 0 0.5 1 1.5 2
fmin f fmax
Figure 14
fe fe/2 B2 B1 B1 B2 fe/2 fe f
Figure 15
HE-Arc, Ingnierie 15
Filtrage numrique
La rponse impulsionnelle (non calibre et pour une fentre rectangulaire !) donne les 'taps' du
filtre :
2 B1 2 B1 NbTaps 1 2 B2 2 B2 NbTaps 1 NbTaps 1
sin c
fe
f n f sin c
f n n
h (n) =
e 2 e e 2 2
1 2 ( B2 B1 ) n = NbTaps 1
fe 2
Valeurs de n : 0 n (NbTaps1)
Dure de la fentre : Tf = (NbTaps1)Te
Ordre du filtre : N = NbTaps1
Retard du filtre : = Tf/2 N = (NbTaps1)/2 impulsions
Particularit : Type 1 uniquement (NbTaps impair)
Calibrer les 'taps' d'un filtre coupe-bande est un peu plus dlicat que pour le passe-bas (voir
3.6 page 9). Nous n'entrerons pas dans le dtail ici. Un passe-bande est une conjugaison d'un
passe-bas et d'un passe-haut. C'est pourquoi il faut doubler le nombre de 'taps' pour obtenir les
mmes caractristiques qu'un passe-bas (voir exemple).
3.12.1 Exemple
On choisit :
B1 = 500 Hz
B2 = 1 kHz
fe = 4 kHz
NbTaps = 51
La rponse impulsionnelle est illustre par la Figure 16.
Coupe-bande - rponse impulsionnelle
1 1
0.5
hn
0.5
0.5
0 5 10 15 20 25 30 35 40 45 50
0 n NbTaps 1
Figure 16
HE-Arc, Ingnierie 16
Filtrage numrique
1
H( f )
Hid( f )
0.5
0
0
2 1.5 1 0.5 0 0.5 1 1.5 2
fmin f fmax
Figure 17
HE-Arc, Ingnierie 17
Filtrage numrique
La mthode de recherche numrique des coefficients est assez complique et sort du cadre de
ce cours. Un logiciel de traitement du signal comme Matlab la fournit bien videmment. Pour
un filtre passe-bas, elle se base sur le gabarit suivant :
1+1
11
2
fpass fstop fe/2
wpass wstop 1
Figure 18
La mthode recherche itrativement les 'taps' afin qu'avec un ordre minimal, le gabarit soit
respect au mieux. Par rapport un filtre FIR fentr, on a les avantages suivants :
Pour un gabarit identique, l'ordre d'un filtre FIR equi-ripple est nettement infrieur.
L'ondulation dans la bande passante et l'affaiblissement minimal dans la bande de
rjection (coefficients 1 et 2) sont configurables sparment.
HE-Arc, Ingnierie 18
Filtrage numrique
ou encore :
NbTaps 1
y( n ) = x (n k ) h (k )
k =0
(36)
HE-Arc, Ingnierie 19
Filtrage numrique
Si le filtre est de type I ou II, on peut mettre profit la symtrie axiale des 'taps'. Le nombre
total de multiplications est diminu d'un facteur 2, mais le nombre total d'additions est, lui,
multipli par 2. La Figure 20 illustre cette nouvelle structure pour un filtre FIR de type I.
z1 z1 z1 z1
x(n)
z1 z1 z1 z1
h0 h1 h2 hN/2-1 hN/2
y(n)
Figure 20
HE-Arc, Ingnierie 20
Filtrage numrique
Pour garder une rsolution spectrale intressante (et aussi pour augmenter la longueur de la
fentre d'chantillonnage Tf ), il faudrait rduire la frquence d'chantillonnage fe une valeur
aussi faible que possible. Grosso-modo, on aimerait :
2.5 B f e 3.5 B (37)
On choisit de diviser fA/D par 16, ce qui nous donne fe=2.76 kHz. Cela implique une fentre
d'chantillonnage Tf = 186 ms et une rsolution spectrale f = 5.4 Hz. Dans ce cas-ci, on a
185 raies spectrales dans la bande passante 0..1 kHz.
Tout cela est bien joli, mais comment chantillonner fe=2.76 kHz un signal qui a une bande
passante BA/D=20 kHz ? La Figure 21 illustre ce problme (note: spectre unilatral).
X(f)
B fe BA/D fA/D f
Figure 21
Si on se contente de prendre un chantillon tous les 16, on obtient bien entendu un effet de
recouvrement monstrueux !
Si on veut sous-chantillonner, il faut d'abord filtrer pour rduire la bande passante du signal
B. Pour cela, on utilise un filtre numrique FIR cadenc fA/D. Le rsultat aprs filtrage est
illustr par la Figure 22.
Xf(f)
B fe fA/D f
Figure 22
On choisit un filtre qui a 0.1 dB d'ondulation dans la bande passante (donc le rapport entre le
plus grand gain et le plus petit est gal 1.012) et 80 dB d'affaiblissement partir de fe/2. En
utilisant fdatool de Matlab, on se rend compte que le filtre en question comprend 389 'taps'.
HE-Arc, Ingnierie 21
Filtrage numrique
Lorsqu'on a un signal tel que celui de la Figure 22, on peut se demander si on ne pourrait pas
cette fois-ci prendre un chantillon sur 16. La rponse est OUI. Cette opration peut se
comprendre ainsi : imaginons un mme signal x(t), chantillonn par deux convertisseurs: le
premier chantillonne une frquence fe1 et le second une frquence fe2=fe1/16. Toutes les
priodes T=16Te1, les deux convertisseurs vont chantillonner exactement la mme
valeur (voir la Figure 23).
xfs(t)
Figure 23
L'annexe 3 illustre cet exemple numriquement l'aide de Mathcad et Matlab (pour le calcul
des coefficients du filtre).
Le filtre FIR, du fait qu'il n'a pas de contre-raction (filtre non rcursif), peut se permettre de
raliser les calculs des valeurs de sortie la frquence fe=2.76 kHz. Simplement, chaque
priode Te, 16 nouveaux chantillons sont entrs dans la fentre de convolution.
HE-Arc, Ingnierie 22
Filtrage numrique
h(n-k)
NbTaps
y(n)
y(n0) y(n0+16)
n
Te
Figure 25
Un filtre rcursif IIR ncessiterait un calcul chaque chantillon de x(k) ! Le filtre FIR,
beaucoup plus gourmand au niveau de la puissance de calcul, est activ beaucoup plus
rarement. En gros, un dcimateur FIR fournit un gros travail, mais rarement.
Figure 26
Cette approche permet d'obtenir des filtres FIR plus lgers et, souvent, on obtient un rapport
'filtrage/nombre d'oprations de calcul' plus avantageux qu'avec un seul filtre de dcimation.
HE-Arc, Ingnierie 23
Filtrage numrique
Pour bien comprendre l'ide du sur-chantillonnage, considrons un signal d'origine x(t) dont
le spectre a une bande passante B=20 kHz et une rponse en amplitude de maximum
max(|X(f)|)=A. Ce signal est illustr par la Figure 27.
x(t)
t
X(f)
A
B B f
Figure 27
Ce signal est chantillonn une frquence fs=44.1 kHz, et le rsultat x1(nTe)X1(f) est
illustr par la Figure 28. Nous sommes donc ici dans la configuration du signal audio dcrit
plus haut.
x1(n.Te)
Ts = 22.7 s t
X1(f)
fs.A
A prsent, on ajoute trois zros entre chaque chantillon. Le signal rsultant x2(nTe) a une
frquence d'chantillonnage quatre fois plus leve que le signal d'origine, mais
fondamentalement les deux signaux x1 et x2 restent identiques !
HE-Arc, Ingnierie 24
Filtrage numrique
Te = 5.7 s t
X2(f)
fs.A
-fe -B B fe
Figure 29
Il ne reste plus qu' filtrer numriquement selon les lignes traitilles de la Figure 29.
Attention, cependant, filtrer ne suffit pas! Si on se contente de filtrer, on aura un signal qui
sera bien chantillonn une frquence fe, mais dont la rponse en amplitude ne sera pas
adapte la nouvelle frquence d'chantillonnage fe (max(|H2(f)|)=fsA). Pour obtenir quelque
chose de cohrent par rapport fe, il faut multiplier le signal par fe/fs=4. Pour raliser cela, on
donnera simplement au filtre un gain de quatre.
On peut comprendre cette perte de gain de la manire suivante: en rajoutant des zros entre
les chantillons, on ne change pas le signal du point de vue de la frquence d'chantillonnage
fs. Par contre, du point de vue de la frquence d'chantillonnage fe=4fs, on se retrouve avec
trois chantillons sur quatre qui sont nuls. Cela reprsente un affaiblissement du signal qu'il
faut compenser par un facteur 4.
On choisit un filtre qui a 0.1 dB d'ondulation de 0 20 kHz et 80 dB d'affaiblissement partir
de 22.05 kHz. En utilisant fdatool de Matlab, on se rend compte que le filtre en question
comprend 286 'taps'. Pour les raisons voques plus haut, on multiplie tous ces coefficients
par 4.
Aprs filtrage, on obtient le signal x3(t), illustr par la Figure 30.
x3(t)
t
X3(f)
fe.A
-fe B B fe f
Figure 30
HE-Arc, Ingnierie 25
Filtrage numrique
k.Te
h((n0k).Te)
(n0k).Te
y(n0.Te)
n.Te
Convolution pour n = n0+1
x(k.Te)
k.Te
h((n0+1k).Te)
(n0+1k).Te
y((n0+1).Te)
n.Te
Figure 31
Ainsi donc, chaque coup d'horloge on n'utilise que 71 (ou 72) coefficients, mais ces
coefficients changent chaque nouvelle valeur y(n). On parle de filtre polyphase.
En conclusion, on peut schmatiser grossirement ainsi les filtres FIR pour le dcimateur et
l'interpolateur (frquences fe1 et fe2 avec fe1=nfe2)
Le dcimateur fonctionne la frquence de sortie fe2 (fe2=fe1/n), mais il a besoin de
tous les 'taps' pour calculer chaque chantillon de sortie.
L'interpolateur fonctionne la frquence de sortie fe1 (fe1=nfe2), mais il n'a besoin que
d'une partie de ses 'taps' (NbTaps2=NbTaps1/n) pour calculer chaque chantillon de
sortie.
HE-Arc, Ingnierie 26
Filtrage numrique
Si le signal mis en forme est un signal 2B1Q, par exemple, les valeurs a, b, c, ..., h, i
appartiennent l'ensemble {3; 1; 1; 3}.
Dans cet exemple, le nombre de taps pose (volontairement) problme, puisque 33 n'est pas un
multiple de 4. Cela signifie que, parfois, il y a 9 multiplications/additions par chantillon de
sortie et parfois 8. Ceci est en fait le seul problme. Concernant le pointeur des taps, s'il
s'incrmente de 4 modulo 33, il est toujours juste. Par exemple, pour le passage de la premire
la seconde ligne, on a (32+4) mod 33 = 3. Les dsp proposent en principe ce type
d'incrmentation par modulo, ce qui fait que le programmeur ne s'inquite pas des transitions
entre chaque chantillon de sortie.
Dans la pratique, on choisira plutt 32 taps, de telle sorte que le nombre de
multiplications/additions soit toujours 8 par chantillon de sortie !
A noter encore que des programmes comme Matlab proposent des filtres de mise en forme
par approximation IIR !
6 Filtres IIR
Les filtres IIR (Infinite Impulse Response) sont inspirs des techniques de filtrage
analogiques. Ainsi, on a des filtres IIR de Butterworth, Tchebychev, etc. L'ide est ici de
profiter dans le monde numrique de tout le savoir-faire acquis dans le monde analogique.
La grande difficult est de passer du domaine de la transformation de Laplace dans celui de la
transforme en Z. Idalement, il suffit d'effectuer la transformation suivante dans les
quations de Laplace :
1
s= ln(z) (38)
Te
HE-Arc, Ingnierie 27
Filtrage numrique
= Re(s) Re(z)
HE-Arc, Ingnierie 28
Filtrage numrique
Les deux cercles ont pour unique intersection le point z=1 (f=0, situation DC). Pour les
frquences f << fe, ces deux cercles sont encore quasi-confondus. Par contre, lorsque f devient
plus grand, on a une divergence non-ngligeable. On peut bien se douter que le comportement
numrique n'a alors plus grand chose voir avec le comportement analogique.
Ce procd est donc valable uniquement pour les frquences f << fe.
x(n1) S=Te.(1/2).(x(n)+x(n1))
x(n2)
On a, si y(t)=?x(t)dt :
S = y(n ) y(n 1) = Te
(x (n ) + x (n 1)) (45)
2
Dans Z, on trouve :
(
Y(z) 1 z 1 = ) Te
2
(
X(z) 1 + z 1 )
(46)
T z +1
Y(z) = e X (z )
2 z 1
On en conclut :
2 z 1
s= (47)
Te z + 1
2 + s Te
z= (48)
2 s Te
HE-Arc, Ingnierie 29
Filtrage numrique
= Re(s) Re(z)
HE-Arc, Ingnierie 30
Filtrage numrique
La relation entre un filtre analogique, dcrit par sa frquence fa, et sa correspondance dans Z
est illustre par la Figure 35.
fa fa
fra
Ba
fe/2 f
B fr fe/2 fe f
Figure 35
Le filtre analogique subit une compression telle que le filtre analogique entier 0 fa < se
retrouve comprim dans le filtre 'rel' 0 f < fe/2. A noter qu'il n'y a pas d'effet de repliement
(angl: aliasing), ce qui est tout fait remarquable !
L'annexe 6 illustre les consquences de la transformation bi-linaire pour un modle de filtre
analogique simple du premier ordre.
HE-Arc, Ingnierie 31
Filtrage numrique
6.2.2 Exemple
On veut raliser le filtre passe-bas de type Tchebycheff suivant :
Bande passante B = 1 kHz
Frquence d'chantillonnage fe = 10 kHz
Ondulation maximale dans la bande passante Amax = 1 dB
Bande de rjection fr = 3 kHz
Affaiblissement minimal dans la bande de rjection Amin = 80 dB
Tout d'abord on transforme les frquences caractristiques :
1
Ba = tg ( Te B) = 1034 Hz
Te
(58)
1
fra = tg ( Te fr ) = 4381 Hz
Te
Avant d'tablir le gabarit du filtre analogique, il faut normaliser les frquences :
f
a = a
Ba
(59)
fr
ra = a = 4.24
Ba
HE-Arc, Ingnierie 32
Filtrage numrique
Amin
Amax
1 4.24 a
Figure 36
Sans dmonstration, on trouve un filtre du 5me ordre, donn ainsi avec la variable de Laplace
normalise S = s/2B (dans le cas d'un passe-bas, on pose f0=B) :
0.289 0.988 0.429
H(S) = 2 2 (60)
S + 0.289 S + 0.179 S + 0.988 S + 0.468 S + 0.429
La rponse en amplitude de ce filtre analogique est donne par la Figure 37.
Filtre analogique
3
0
Hdb( fa)
50
Amin
100
120
1 .10
4
0 1000 2000 3000 4000 5000 6000 7000 8000 9000
fmin fa fmax
Figure 37
HE-Arc, Ingnierie 33
Filtrage numrique
Hdb( f )
Amin 50
100
100
1 .10
4
0 1000 2000 3000 4000 5000 6000 7000 8000 9000
fmin f fmax
Figure 38
Hdb( f )
0.5
1
1
0 100 200 300 400 500 600 700 800 900 1000
fmin f B
Figure 39
La phase dans la bande passante est illustre par la Figure 40.
Filtre numrique pour 0 < f < B, phase
0 0
2
Ph k
5.5
0 100 200 300 400 500 600 700 800 900 1000
fmin fk B
Figure 40
C'est la rponse de phase classique d'un filtre de Tchebycheff. On remarque qu'il y a
passablement de distorsion de phase en fin de bande passante.
HE-Arc, Ingnierie 34
Filtrage numrique
9 .10
4
phk
8 .10
4
grk
7 .10
4
6 .10
4
0.5 ms
5 .10
4
0 100 200 300 400 500 600 700 800 900 1000
0Hz fk B
Figure 41
Le retard de groupe varie de 0.6 ms 2.5 ms dans la bande passante. Le retard de phase est
quant lui un peu plus stable.
b m zm
b 0 + b1 z 1 + b 2 z 2 + ... + b M z M
H(z) = m =0
= (63)
P
1 + a1 z 1 + a 2 z 2 + ... + a P z P
1+ ap z p
p =1
HE-Arc, Ingnierie 35
Filtrage numrique
Dans Z toujours, la relation entre un signal d'entre X(z) et le signal de sortie correspondant
Y(z) est la suivante :
Y(z) = H(z) X(z) (65)
Dans le domaine temporel, on a pour chaque valeur de n :
y(n ) = b 0 x (n ) + b1 x (n 1) + b 2 x (n 2) + ... + b N x (n N )
(66)
a1 y(n 1) a 2 y(n 2) ... a N y(n N )
Beaucoup de structures sont possibles pour raliser un filtre de type IIR. On retiendra les
structures canoniques, qui ont la particularit de ncessiter le minimum de cellules de
retard z-1.
bN-1 aN-1
z1 z1
bN aN
Figure 42
On a :
N
w ( n ) = bi x (n i)
i =0
N
(67)
y ( n ) = w ( n ) a i y ( n i)
i =1
HE-Arc, Ingnierie 36
Filtrage numrique
aN-1 bN-1
z1
aN w(n-N) bN
Figure 43
La forme directe II est appele canonique, puisque elle requiert un minimum de cellules de
retard z-1. On a :
N
w (n ) = x (n ) a i w (n i)
i =1
N
(68)
y(n ) = bi w (n i)
i=0
w1(n)
b1 a1
z1
w2(n)
b2 a2
wN-1(n)
bN-1 aN-1
z1
wN(n)
bN aN
Figure 44
HE-Arc, Ingnierie 37
Filtrage numrique
Pour faciliter les calculs, on va stocker des valeurs intermdiaires wi(n). L'algorithme de
calcul est le suivant :
w 0 (n ) = b 0 x (n ) + w 1 (n 1)
w1 (n ) = b1 x (n ) + w 2 (n 1) a1 w 0 (n )
w 2 (n ) = b 2 x (n ) + w 3 (n 1) a 2 w 0 (n )
... (69)
w N 1 (n ) = b N 1 x (n ) + w N (n 1) a N 1 w 0 (n )
w N (n ) = b N x (n ) a N w 0 (n )
y(n ) = w 0 (n )
La forme directe transpose II est galement canonique; c'est la mthode utilise par Matlab
pour sa commande 'filter'.
Figure 45
Les cellules sont appeles 'biquads'. Elles sont d'ordre 1 ou 2. On a :
N/2 N/2
b 0i + b1i z 1 + b 2i z 2
H ( z ) = H i ( z ) = (70)
i =1 i =1 1 + a1i z 1 + a 2i z 2
Dans la Figure 45 et l'quation (70), nous sommes partis du principe que l'ordre N de H(z)
tait pair. Si N est impair, une cellule aura des coefficients b1 et a1 nuls.
Une structure bien adapte pour des units de calcul de type 'fixed point' est illustre par la
Figure 46 (cascade de trois biquads d'ordre 2).
x(n) y0(n) w1(n) y1(n) w2(n) y2(n) w1(n) y3(n) y(n)
HE-Arc, Ingnierie 38
Filtrage numrique
Si on a un DSP de type 'fixed point', il n'est pas possible de travailler avec des coefficients
plus grands que 1. De plus, il faut garantir qu'aucune valeur intermdiaire ne va saturer ! Un
grand soin doit donc tre apport l'implmentation. A noter encore que le gain total peut tre
distribu sur les trois cascades.
HE-Arc, Ingnierie 39
Filtrage numrique
7 Segmentation du signal
Souvent, une boucle de traitement numrique comporte plusieurs tapes : dcimation, filtrage,
traitement numrique divers, interpolation, puis retour la case dpart. L'ingnieur
inexpriment a tendance effectuer cette boucle chantillon par chantillon, ce qui
reprsente une perte de performance norme. Il est souvent bien plus efficace de traiter des
segments de Nx chantillons d'un seul coup dans la boucle ('sample based' versus 'frame
based' dans Matlab). Le traitement par segments demande par contre plus de mmoire et le
retard de traitement peut tre relativement lev.
Deux mthodes de segmentation sont bien connues, savoir les mthodes "overlap-save" et
"overlap-add". En principe, ces mthodes s'appliquent pour des filtres de type FIR. Elles sont
particulirement prises pour le filtrage par FFT (voir 8 page 43). Cependant, la mthode
"overlap-save" peut tre applique sans problme des IIR (voir 7.1.1).
Figure 47
Par consquent, pour chaque bloc de Nx=1000 chantillons, il faut avoir conserv les
Nh1=99 valeurs du segment prcdent (portion en gras des valeurs de x).
1
Comme x(0) est comprise dans la convolution, il faut conserver les Nh1 valeurs de x(n) passes pour avoir Nh
chantillons de x(n) dans le produit de convolution.
HE-Arc, Ingnierie 40
Filtrage numrique
Pour les valeurs y(100)..y(999), il n'y a plus de problme : la fentre de convolution est
entirement comprise dans le segment. La Figure 48 montre le cas du calcul de la dernire
valeur y(999) du segment.
Nh = 100 taps
x(n)
x(900) x(999)
y(n)
y(999)
Figure 48
Lorsque la dernire valeur y(999) a t calcule, les chantillons x(n 900) peuvent tre
effacs. Par contre, les valeurs x(901)x(999) doivent tre conserves pour le calcul du bloc
suivant.
En principe, on pose Nx Nh1. De cette manire, on ne conserve pas plus d'un segment en
mmoire !
Dans notre exemple, on aura donc Ny = 1000 + 100 1 = 1099 valeurs de y(n).
La Figure 49 illustre trois cas de figure :
le cas extrmes y(0) : seul un coefficient du filtre est pris en compte
le cas intermdiaire y(k) avec 99 k 999 : tous les coefficients du filtre sont pris en
compte.
le cas extrmes y(1098) : seul un coefficient du filtre est pris en compte.
HE-Arc, Ingnierie 41
Filtrage numrique
Nh = 100 taps
x(n)
y(n)
y(0) y(k) avec y(1098)
98<k<1000
Nx = 1000 ch. bloc suivant
Ny = 1099 ch.
Figure 49
Les valeurs impliques dans les diffrents produits de convolution sont indiques en gras. Les
coefficients du filtre qui multiplient zro pour y(0) et y(1098) sont indiqus en pointill.
On constate que Nh 1 = 99 valeurs de y(n) ont "dbord" sur le prochain segment de y(n).
Selon le principe de linarit, on peut additionner tous les rsultats particuliers des diffrents
produits de convolution.
La Figure 50 illustre le principe.
bloc x(1) bloc x(2) bloc x(3)
x(n)
bloc y(1)
y1(n)
bloc y(2)
y2(n)
bloc y(3)
y3(n)
y(n) = y1(n)+y2(n)+...
Figure 50
D'un segment l'autre, il faut conserver les Nh1 dernires valeurs de y(n) du segment
prcdent. Par rapport la mthode "overlap-save", on conserve Nh1 valeurs de y(n) au lieu
de conserver Nh1 valeurs de x(n).
Comme pour la mthode "overlap-save", on pose Nx Nh1. De cette manire, on ne
conserve pas plus d'un segment en mmoire !
HE-Arc, Ingnierie 42
Filtrage numrique
H (k f ) = FFT(h (n ) )
avec
X (k f ) = FFT(x (n ) )
2
On a le retard naturel du filtre plus au moins un segment de retard !
HE-Arc, Ingnierie 43
Filtrage numrique
La convolution circulaire est un effet non dsir. Les deux mthodes de filtrage par FFT
proposes par la suite vont trouver des astuces pour la contourner et forcer une convolution
linaire telle que souhaite
Avec la mthode 'overlap-add' (voir 8.2), on doit dborder de deux chantillons sur le
segment y suivant. Pour viter la convolution circulaire, on ajoute deux zros droite de
x(n) qui devient x'(n)=[1, 2, 3, 0, 0] et encore deux zros droite de h(n) qui devient
h'(n)=[3, 4, 5, 0, 0].
Avec la mthode 'overlap-save' (voir 8.3), on doit prendre en compte deux chantillons
du pass (x x dans l'exemple, que nous admettrons zro). Le signal x(n) devient
x'(n)=[x, x, 1, 2, 3]. On ajoute encore deux zros droite de h(n) qui devient h'(n)=[3,
4, 5, 0, 0].
Overlap-add Overlap-save
1 2 3 0 0 x x 1 2 3
y(0) = 3 y( 0 ) = 22 jeter
3 0 0 5 4 3 0 0 5 4
1 2 3 0 0 x x 1 2 3
y(1) = 10 y( 1 ) = 15 jeter
4 3 0 0 5 4 3 0 0 5
1 2 3 0 0 x x 1 2 3
y(2) = 22 y(2) = 3
5 4 3 0 0 5 4 3 0 0
1 2 3 0 0 x x 1 2 3
y( 3 ) = 22 dbordement y(2) = 10
0 5 4 3 0 0 5 4 3 0
1 2 3 0 0 x x 1 2 3
y( 4 ) = 15 dbordement y(2) = 22
0 0 5 4 3 0 0 5 4 3
HE-Arc, Ingnierie 44
Filtrage numrique
Figure 51
Nh = Nx = 2 Nx
/ /
On a : (76)
A prsent, on peut s'amuser avec la FFT.
(
H / (k ) = FFT h / (n ) )
Paramtres de dpart : / (77)
(
X (k ) = FFT x / (n ) )
HE-Arc, Ingnierie 45
Filtrage numrique
L'indice n varie de 0 255 (Nx'=256 chantillons) et l'indice k varie de 0 127 (128 raies
spectrales).
Y (k f ) = H (k f ) X (k f )
Rsultat : (78)
y(n Te ) = IFFT(Y (k f ) )
Le rsultat y(n) comprend 2Nx=256 valeurs de y(n), alors qu'on tait parti de Nx=128 valeurs
de x. Ceci est caractristique de l'overlap-add.
La Figure 52 illustre le principe.
Filtrage par FFT : overlap-add
Nx=128 Nx Nx Nx
x(n)
y1
y2
y3
y4
y(n)
y1 y1+y2 y2 +y3 y3+y4
Figure 52
HE-Arc, Ingnierie 46
Filtrage numrique
9) Par rapport aux 625 chantillons du segment de dpart, il faut faire "dborder" Ny Nx
= 399 valeurs sur le segment suivant (voir Figure 50 page 42).
Ensuite, on reprend au point 5) pour le segment suivant.
HE-Arc, Ingnierie 47
Filtrage numrique
x(n)
Figure 53
(
H / (k ) = FFT h / (n ) )
Paramtres de dpart : (79)
X (k ) = FFT(x (n ) )
L'indice n varie de 0 255 (Nx=256 chantillons) et l'indice k varie de 0 127 (128 raies
spectrales).
Y (k f ) = H (k f ) X (k f )
Rsultat : (80)
y(n Te ) = IFFT(Y (k f ) )
Le rsultat y(n) comprend 2Nx=256 valeurs de y(n), alors qu'on tait parti de Nx=128 valeurs
de x. Il faut rejeter les Nrej=128 premires valeurs de y(n) et conserver les Ny=128 valeurs
restantes. Ceci est caractristique de l'overlap-save.
La Figure 54 illustre le principe.
Filtrage par FFT : overlap-save
Nx = 256
x(n)
y3
y(n)
y1 y2 y4
Figure 54
HE-Arc, Ingnierie 48
Filtrage numrique
Par exemple, si on veut raliser un filtre FIR de Nh=400 taps, on choisira Nx=1024
chantillons, dont Nsp=399 chantillons seront repris du segment prcdent et Nxnew=625
chantillons seront nouveaux. Le nombre de valeurs y(n) rejeter pour chaque bloc y sera
Nrej=399 et le nombre de valeurs conserver sera Ny=625.
HE-Arc, Ingnierie 49
Filtrage numrique
H(z) =
1
N
(
1 + z 1 + z 2 + ... + z N 1 ) (83)
H(z) =
1
4
(
1 + z 1 + z 2 + z 3 ) (84)
1/4 y(n)
Figure 55
3
Il existe cependant des algorithmes de filtrage par FFT en temps rel, que je ne connais pas.
HE-Arc, Ingnierie 50
Filtrage numrique
+
+
1/4 1/4
z-1
y(n)
Figure 56
HE-Arc, Ingnierie 51
Filtrage numrique
La formule (89) (respectivement (86)) associe la structure IIR de la Figure 56 est plus
performante que la structure FIR vue auparavant car, mme pour N trs grand, on boucle un
cycle de filtrage en trois multiplications/additions !
HE-Arc, Ingnierie 52
Filtrage numrique
Hf ( f)
0.5
0
0.4 0.2 0 0.2 0.4
fe f fe
2 2
Figure 57
Que N soit pair ou impair, le premier lobe de H(f) a le premier zro en fe/N. Pour N=4, on a
donc le premier zro fe/4, comme on peut lobserver avec la Figure 57.
Si on choisit N trs grand, on a un premier lobe trs troit, ce qui peut tre gnant. Dans la
pratique, on prfre cascader plusieurs filtres moyenne glissante si on veut une meilleure
slectivit de la rponse en amplitude. Par exemple, un filtre constitu de trois cascades avec
N=4 pour chaque cascade aura la fonction de transfert suivante :
3
1 1 z 4
H(z) =
1
(93)
4 1 z
La Figure 58 illustre la rponse en amplitude (linaire et en dB) de trois filtres constitus de
respectivement une, deux et trois cascades identiques (N=4 pour chaque cascade).
Rp. amp. lin. avec 1 , 2 et 3 cascades
1.1
1
Hf1 ( f)
Hf2 ( f)
Hf3 ( f) 0.5
0
0
0.4 0.2 0 0.2 0.4
fe f fe
2 2
HE-Arc, Ingnierie 53
Filtrage numrique
HdB3 ( f) 30
40
60 50
60
0.4 0.2 0 0.2 0.4
fe f fe
2 2
Figure 58
On emploie souvent les filtres moyenne glissante comme dcimateurs (voir 4 page 20).
Ensuite, la frquence la plus basse, on implmente un filtre passe-bas de reconstruction pour
corriger leur mauvaise rponse en amplitude !
La Figure 59 illustre le principe avec deux dcimateurs/moyenneurs en srie (N=8 chacun)
avec dcimation intermdiaire.
x(n), fe Moyenneur - x/(n), fe/8 Moyenneur - x//(n), fe/64 Passe-bas x(n), fe/64
dcimateur dcimateur reconstruction
N=8 N=8
Figure 59
Attention Dans cet exemple, cause de la dcimation intermdiaire, la formule (93) ne peut
plus tre employe telle quelle !
9.3 Utilisation
Les convertisseurs A/D de type sigma-delta utilisent les filtres moyenne glissante. Au
dpart, x(n) est cod sur un bit une frquence dchantillonnage trs leve. On dcime en
plusieurs tapes successives en augmentant la rsolution. Tout la fin, on reconstruit x(n) sur
16 bits avec un passe-bas qui corrige la mauvaise rponse en amplitude des dcimateurs.
Il ne faut pas mpriser les filtres moyenne glissante : ils sont trs simples raliser et,
parfois, ils se comportent aussi bien que des filtres plus sophistiqus ! Lorsque l'on doit
concevoir un filtre numrique de type passe-bas ou passe-haut (voir la ralisation dans les
exercices), c'est la toute premire solution envisager.
10 Filtres mdians
Les filtres mdians sont non linaires, c'est dire que le principe de superposition ne
fonctionne plus ! Inutile donc de chercher les caractriser avec une transforme en Z ou un
spectre d'amplitude ! De plus, les signaux (mme non bruits !) sont lgrement dforms
aprs filtrage.
HE-Arc, Ingnierie 54
Filtrage numrique
Comme les filtres FIR, les filtres mdians conservent en mmoire une fentre de N
chantillons du pass. Comme les filtres FIR, ils pondrent ces chantillons avec N
coefficients (taps). Simplement, au lieu de prendre comme rsultat la somme pondre
(correspondant grosso modo une moyenne arithmtique), ils prennent la valeur mdiane de
x, c'est dire celle qui se trouve au milieu de la liste aprs pondration et classement.
Un exemple sera plus parlant. Imaginons la situation suivante :
n = 0 n =1 n = 2
un filtre FIR avec les coefficients suivants : h (n ) = 1 ; 2 ; 1 }
n = 2 n = 1 n = 0
un signal d'entre avec les valeurs suivantes : x (n ) = ...; 0.5 ; 0.25; 1 ; ...}
On considre le cas n=0 pour le FIR classique.
0
On a en sortie : y(0) = x ( k ) h (0 k ) = 1
k = 2
k 2 1 0
x(k) 0.5 0.25 1
h(0k) 0 1 2 1 0
x ( k ) h (0 k ) 0 0.5 0.5 1 0
0
y ( 0) = x ( k ) h (0 k )
k = 2
1
Le filtre mdian classe les valeurs pondres x (k ) h (0 k ) par ordre croissant (ou
dcroissant), puis choisit comme valeur de sortie la valeur de x(k) dont le produit
x (k ) h (0 k ) est au milieu de la liste (mdiane).
k 1 2 0
x(k) 0.25 0.5 1
h(0k) 0 2 1 1 0
x(k)h(0k) ordonns 0 0.5 0.5 1 0
y(0) = mdiane 0.5
Le filtre mdian est souvent utilis pour filtrer le bruit impulsionnel. Imaginons que x(n) ait
t perturb par un glitch important. On aurait par exemple :
n = 2 n = 1 n = 0
x ' (n ) = ...; 0.5 ; 0.25; 10 ; ...} .
Le filtre FIR classique donne alors y'(0) = 10 (au lieu de 1 !), alors que le filtre mdian ne
varie pas : y'(0) = y(0) = 0.5.
Au lieu d'tre pondres et ajoutes au rsultat (principe du filtre FIR), les valeurs extrmes
de x(n) sont tout simplement limines !
HE-Arc, Ingnierie 55
Filtrage numrique
La Figure 60 montre un exemple de sinus perturb par du bruit impulsionnel, ainsi que le
mme sinus filtr avec un filtre mdian de trois taps (coefficients h(n) = {1; 1; 1}).
Signal bruit avec bruit impulsionnel
2 2
xn
0 0.5 1 1.5 2
2
2
0 tn Tf
yn
0 0.5 1 1.5 2
2
2
0 tn Tf
Figure 60
Avec le filtre mdian, "a passe ou a casse" ! En tudiant le signal filtr y(nTe), on constate
que beaucoup d'impulsions ont compltement disparu, alors que d'autres sont restes telles
quelles (dans cet exemple-ci, elles auraient toutes disparu si on avait pos N=5).
Avec un filtre linaire classique, on aurait eu un rsultat trs chahut, car toutes ces
impulsions ont forcment des composantes frquentielles importantes dans la bande passante
du filtre. En outre, on aurait N >> 3.
HE-Arc, Ingnierie 56
Filtrage numrique
A l'extrme, le filtre mdian modifie totalement le signal si la pente varie sans arrt
l'intrieur de la fentre ! Prenons le mme filtre avec le signal x(n) priodique suivant :
x (n ) = {...; 0; 1; 2; 1; 0; 1; 2; 1; 0; ...}
y(n ) = {...; ...;...; 1; 1; 1; 1; 1; 1; 1; ...}
Ce phnomne de distorsion du signal est d'autant plus important que le nombre de taps N est
grand.
10.2 Utilisation
Le filtre mdian est trs utilis lorsque l'on a affaire du bruit impulsionnel. Il a pour lui sa
simplicit (souvent moins de 10 taps) et son efficacit. Il a contre lui le fait qu'il n'est pas
linaire et qu'il dforme les signaux !
D( f )
Dideal( f ) 5
0
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
0Hz f fe
2
Figure 61
HE-Arc, Ingnierie 57
Filtrage numrique
A noter que Matlab propose un "passe-bas drivateur" de type FIR (voir l'outil 'fdatool'). La
Figure 62 illustre ce principe intressant si on doit la fois filtrer et driver.
Hd(f)
j.2f
-B B f
Figure 62
x(n-2)
x(n-1) Surface = y(n)
x(n)
x(n-3)
On voit que y(n) a un peu d'avance sur x(n); nous verrons la consquence de cela plus tard.
D'aprs la Figure 64, on dduit :
y(n ) y(n 1) = Te x (n ) (95)
1
Y(z) z Y(z) = Te Y(z) (96)
On conclut :
1 1
H i (s) =
Z
H i (z) = Te (97)
s (1 z 1 )
Comme il a dj t dit plus haut pour le drivateur, il faut veiller ce que la frquence
d'chantillonnage soit grande par rapport aux frquences intgres.
HE-Arc, Ingnierie 58
Filtrage numrique
La Figure 65 illustre la diffrence entre cet intgrateur et un intgrateur idal (la valeur f=1
correspond fe/2).
Diffrence - intgrateur - amplitude
5
I( f )
Iideal( f )
0
0
0 0.2 0.4 0.6 0.8 1
0Hz f fe
2
Figure 65
Au niveau de la phase, l'avance vue auparavant se caractrise par une phase linaire pente
positive. Cette phase est illustre par la Figure 66.
Diffrence - intgrateur - phase
0 0
1
arg( I( f ) )
arg( Iideal( f ) )
3
0 0.2 0.4 0.6 0.8 1
0Hz f fe
2
Figure 66
1
Figure 67
HE-Arc, Ingnierie 59
Annexe 1: comparaison de filtres FIR avec diffrentes fentres
Dfinitions gnrales :
k := 0 .. NbPts 1
f := fmin + k f
k
H := si f
k ( k
Bf , 1 , 0 )
Filtre idal
Hk
0.5
1
Annexe 1
Fentre 1 : NbTaps := 9
t := n
NbTaps 1
n := 0 .. NbTaps 1 Te Tf := NbTaps Te
n
2
Fentre rectangulaire : wr := 1
n
On a donc :
(
h := 2 Bf Te sinc 2 Bf t
n ) wrn n
hh := 2 Bf Te sinc( 2 Bf t ) wh
n n n
Signaux h'(t)
0.5
hn
hhn
Hrf := Hrz e
k
( j2Tef )
k
Hhf := Hhz e ( j2Tef ) k
k
Comparaison Rectangulaire-Hamming
1
Hrfk
Hhf k
Hk 0.5
2
Annexe 1
Fentre 2 : NbTaps := 29
t := n
NbTaps 1
n := 0 .. NbTaps 1 Te Tf := NbTaps Te
n
2
Fentre rectangulaire : wr := 1
n
On a donc :
(
h := 2 Bf Te sinc 2 Bf t
n ) wrnn
hh := 2 Bf Te sinc( 2 Bf t ) wh
n n n
Sigaux h'(t)
0.5
hn
hhn
Hrf := Hrz e
k
( j2Tef )
k
Hhf := Hhz e ( j2Tef ) k
k
Comparaison Rectangulaire-Hamming
1
Hrfk
Hhf k
Hk 0.5
3
Annexe 1
k
t := n
NbTaps 1
n := 0 .. NbTaps 1 Te Tf := NbTaps Te
n
2
Fentre rectangulaire : wr := 1
n
hh := 2 Bf Te sinc( 2 Bf t ) wh
n n n
Signaux h'(t)
0.5
hn
hhn
Hrf := Hrz e
k
( )
j2Tefk
Hhf := Hhz e
k
( j2Tefk
)
Comparaison Rectangulaire-Hamming
1
Hrfk
Hhf k
Hk 0.5
On constate que la fentre rectangulaire implique une ondulation importante en bout de bande
passante. On appelle cela l'effet de Gibbs. Si on augmente le nombre de taps, l'amplitude de
cette ondulation ne change pas, mais sa localisation est 'repousse' en bout de bande
passante.
Avec une fentre de Hamming, l'effet de Gibbs disparat quasiment, mais la pente de la
transition bande passante/bande de rjection est un peu plus faible.
4
Annexe 1
Comparaison Rectangulaire-Hamming en dB
0
20log( Hrf k )
20log( Hhf k ) 50
100
2000 1500 1000 500 0 500 1000 1500 2000
fk
On voit que si la transition bande passante/bande de rjection est plus lente avec la fentre de
Hamming, l'affaiblissement en bande de rjection est bien meilleur !
Comparaison Rectangulaire-Hamming en dB
1
0.5
20log( Hrf k )
20log( Hhf k ) 0
0.5
1
2000 1500 1000 500 0 500 1000 1500 2000
fk
L'effet de Gibbs n'a pas disparu avec le fentrage de Hamming. Il a t considrablement rduit.
5
Annexe 1
6
Annexe 2: exemple de produit de convolution
n=0 n
n=0 n
k=0
k
h(0k)
k=0
k
y(n)
y(0)
n=0 n
k=5
k=0 k
k=0 k
y(5)
n=0 n=5 n
Pass II
Prsent
Pass I
Avenir
Annexe 3 - Essai de sous-chantillonnage
Dfinitions gnrales :
sin( x)
sinc( x) := si x 0 , , 1
x
On l'chantillonne :
1
fs := 44.1 kHz Ts :=
fs
Dimension de la fentre :
NbPts := 512 16 NbPts = 8192 Tf := NbPts Ts Tf = 0.186 s
n := 0 .. NbPts 1
NbPts
tmin := Ts tmax := tmin + ( NbPts 1 ) Ts tamin := 15 Ts tamax := tamin
2
t := tmin + n Ts
n
xn
1
Annexe 3
Domaine frquentiel :
1
X := FFT( x) Tf f := f = 5.383 Hz
Tf
NbPts fs
k := 0 .. f := k f fmin := 0 Hz fmax :=
2 k 2
Xk 1
1 .10 1.2 .10 1.4 .10 1.6 .10 1.8 .10 2 .10 2.2 .10
4 4 4 4 4 4 4
0 2000 4000 6000 8000
fk
h := LIREPRN( "sous-echantillonnage.prn" )
NbTaps := dernier( h ) + 1 NbTaps = 389
m := 0 .. NbTaps 1
0.5
XF k
1 .10 1.2 .10 1.4 .10 1.6 .10 1.8 .10 2 .10 2.2 .10
4 4 4 4 4 4 4
0 2000 4000 6000 8000
fk
2
Annexe 3
0.6
XFSk 0.4
0.2
3
Annexe 4 - Essai de sur-chantillonnage
Dfinitions gnrales :
sin( x)
sinc( x) := si x 0 , , 1
x
x( t) X ( f)
0.5
On l'chantillonne :
1
fs := 44.1 kHz Ts :=
fs
Dimension de la fentre :
1
Nb_Ts := 1024 Tf := Nb_Ts Ts Tf = 0.023 s f := f = 43.066 Hz
Tf
n := 0 .. Nb_Ts 1
Nb_Ts
tmin := Ts tmax := tmin + ( Nb_Ts 1 ) Ts tamin := 5.5 Ts tamax := tamin
2
1
Annexe 4
4 .10
4
x1n
2 .10
4
xidk
On effectue une analyse fquentielle de -fs fs du signal chantillonn (FFT non normalise) :
X1_tmp := FFT( x1) Nb_Ts m := 0 .. 2 Nb_Ts
f := ( m Nb_Ts ) f
m
Nb_Ts
m := 0 .. X1 := X1_tmp X1 := X1_tmp
2 m m Nb_Ts Nb_Ts
+m m
2 2
X1 := X1_tmp X1 := X1_tmp
Nb_Ts + m m Nb_Ts3 Nb_Ts
+m m
m := 0 .. 2 Nb_Ts 2 2
4 .10
4
X1m
2 .10
4
2
Annexe 4
On sur-chantillonne d'un facteur 4. Tout d'abord on rajoute des zros entre chaque chantillon.
Signal x2(t)
4 .10
4
x2n
2 .10
4
xidk
On pratique une analyse frquentielle du signal avant le filtrage pour -fe < f < fe:
Nb_Te
m := 0 .. X2 := X2_tmp X2 := X2_tmp
2 m m Nb_Te Nb_Te
+m m
2 2
X2 := X2_tmp X2 := X2_tmp
Nb_Te+ m m Nb_Te3 Nb_Te
+m m
m := 0 .. 2 Nb_Te 2 2
4 .10
4
X2m
2 .10
4
1.76 .10 1.32 .10 8.82 .10 4.41 .10 4.41 .10 8.82 .10 1.32 .10 1.76 .10
5 5 4 4 4 4 5 5
0
fm
3
Annexe 4
h := LIREPRN( "sur-echantillonnage.prn" )
NbTaps := dernier( h ) + 1 NbTaps = 287
m := 0 .. NbTaps 1
A prsent on filtre...
n
x3_tmp :=
n (
si m 0 , x2 h
m n m
,0 )
m = n NbTaps+1
4 .10
4
x3n
2 .10
4
xidk
4
Annexe 4
On pratique une analyse frquentielle du signal filtr pour -fe < f < fe:
Nb_Te
m := 0 .. X3 := X3_tmp X3 := X3_tmp
2 m m Nb_Te Nb_Te
+m m
2 2
X3 := X3_tmp X3 := X3_tmp
Nb_Te+ m m Nb_Te3 Nb_Te
+m m
m := 0 .. 2 Nb_Te 2 2
1.5 .10
5
X3m
1 .10
5
5 .10
4
Bien entendu, cette FFT n'est pas normalise: on garde un facteur fe par rapport au signal qui
sera restitu. Si on supprime ce facteur fe, on retrouve le signal initial, priodique de priode fe.
X3m Te
0.5
5
Annexe 4
6
Annexe 5: Filtre FIR - caractristiques gnrales par un exemple
3
sin( x) PhaseCorr( x) := cor 0 ms 10 s
sinc( x) := si x 0 , , 1
x N dernier( x)
out x
0 0
for n 1 .. N
out x 2 cor
n n
if out > out
n n 1
cor cor + 1
out x 2 cor
n n
out
Filtre en frquence
mid := partentire
1 10 NbTaps
B := 1 kHz T0 := NbTaps := 2
B 2
NbTaps = 1024
Filtre en temps
ht( t) := 2 B sinc( 2 B t) Rponse impulsionnelle du filtre idal non fentr (de fait: fentre rectangulaire)
( ( n ))
h1 := Te ht t
n
1
Annexe 5
hn
0 0.027
0 0.0034 0.0068 0.0102 0.0136 0.017 0.0205 0.0239 0.0273 0.0307 0.0341
0.02
tn
NbTaps 1
Indications : Somme_h_abs :=
h
n
Somme_h_abs = 2.619
n =0
Re-calculons le signal en frquence...
fmax := 2 B fmin := fmax
w := 0 .. NbTaps 1 f := mid f + w f
w
( j 2Te f )
NbTaps 1
n
w
Hz( z) := h z H := Hz e
n w
n =0
Hw
0.5
Phsw
2000 1500 1000 500 0 500 1000 1500 2000
fw
2
Annexe 5
Nb_sig := 2 NbTaps
Signal d'entre...
Uek
0 0.0085 0.0171 0.0256 0.0341 0.0427 0.0512 0.0597 0.0683
tk
... et de sortie...
Signal filtr
2
Usk
0 0.0085 0.0171 0.0256 0.0341 0.0427 0.0512 0.0597 0.0683
tk
NbTaps 1
On compare avec le retard : := Te = 17.05 ms
2
3
Annexe 5
Rponse impulsionnelle
Signal d'entre proprement dit...
Ue := U0 ( k = 0 )
k
k
Us :=
k (
si m 0 , Ue h
m k m )
, 0 V
m = k NbTaps+ 1
Signal de sortie...
Rponse impulsionnelle
0.05
Usk
tk
Rponse indicielle
Signal d'entre proprement dit...
Ue := U0
k
Voyons prsent la convolution :
k
Us :=
k (
si m 0 , Ue h
m k m )
, 0 V
m = k NbTaps+ 1
Signal de sortie...
Rponse indicielle
Usk
0 0.5
tk
On compare avec le retard : = 17.05 ms
4
Annexe 6 - Transformation bilinaire, exemple d'un filtre RC
Le filtre raliser est un filtre RC simple avec une bande passante Ba=1 kHz.
Dans un premier temps, on ne prend aucune mesure de correction. Le filtre numrique aura donc
une compression de la bande passante. On choisit fe= 4 kHz.
1 1
Ba := 1 kHz fe := 4 kHz Te := lim3dB :=
fe 2
1
:=
2 Ba
1
On a pour Hs(s) : Hs( s) :=
1 + s
Hf( fa)
lim3dB
0.5
H( f) := Hz e ( j2fTe)
arctan( Te Ba)
1
B := B = 847.689 Hz
Te
1
Annexe 6
H ( f)
lim3dB
0.5
On conoit donc un filtre numrique bas sur Ba=1273 Hz, et non pas Ba=1 kHz !
On reprend la mme trame qu'auparavant :
1
:=
2 Ba
1
On a pour Hs(s) : Hs( s) :=
1 + s
1
On passe la transformation bi-linaire : Hz( z) :=
2 z1
1+
Te z+1
H ( f)
lim3dB
0.5
2
Annexe 7 - Exemple de filtrage par FFT (overlap-save)
1
B := 1 kHz fe := 4 B Te := fe fe = 4 kHz
h1 := LIREPRN( "FFT.prn" )
NbTaps := dernier( h1) + 1 NbTaps = 257
N := NbTaps 1 N = 256 k := 0 .. N 1 m := 0 .. 2N 1
n := 0 .. NbPts 1 t := n Te
n
1.5
A1 := 1 fcos1 := fcos1 = 23.438 Hz
N Te
1
A2 := 4 10 fcos2 := 1431 Hz
n (
x := A1 cos 2fcos1 t
n ) + A2 cos(2fcos2 tn) xmax := max( x)
Signal d'origine
xn
0
1
Annexe 7
l := 0 .. 2 N 1
0.5
hl
H := FFT( h) 2 N
Hk
0.5
0 200 400 600 800 1000 1200 1400 1600 1800 2000
fk
k (
t si ktmp N , x
ktmpN
,0 )
T FFT( t)
for k 0 .. N
Tf T H
k k k
tf IFFT ( Tf )
Ltmp N L
for k 0 .. ( N 1)
ys tf
Ltmp+ k k+ N
ys
2
Annexe 7
0.5
yn
0
0.5
1
0 0.064 0.13 0.19 0.26 0.32 0.38
tn
:= NbTaps Te
Retard : 2 = 0.032 s
Dphasage : := 2 fcos1 = 271.055 deg
3
Annexe 8 - Intgrateur et drivateur numriques
1
fe := 2 Te := Te = 0.5
fe
Transformation bi-linaire
2 z1
Drivateur : Dz( z) :=
Te z+1
On a : D( f) := Dz e ( j2Tef) Dideal( f) := j 2 f
D ( f)
Dideal( f) 5
arg( D( f) ) 2
arg( Dideal( f) )
1
Annexe 8
Te z+1
Intgrateur : Iz( z) :=
2 z1
On a : I( f) := Iz e( j2Tef) Iideal( f) :=
1
j 2 f
I( f)
Iideal( f)
2
1
arg( I( f) )
arg( Iideal( f) )
2
Annexe 8
Drivateur : Dz( z) :=
1
Te
(
1z
1
)
On a : D( f) := Dz e( j2Tef) Dideal( f) := j 2 f
D ( f)
Dideal( f) 5
arg( D( f) ) 2
arg( Dideal( f) )
Te
Ce retard est gal a : :=
2
3
Annexe 8
1
Intgrateur : Iz( z) := Te
1
1z
On a : ( j2Tef)
I( f) := Iz e Iideal( f) :=
1
j 2 f
I( f)
Iideal( f)
2
On peut dire que jusqu' 30% de fe/2, donc 15% de fe, on a une intgration correcte.
1
arg( I( f) )
arg( Iideal( f) )
Te
Cette 'avance' est gal a : :=
2
4
Annexe 8
Exemple d'application
( )
fe 1
fcos := x := cos 2 fcos t
2 50 n n
A la sortie de l'intgrateur :
m := 1 .. NbPts 1 y := 0
0
(n )
1
y := y + Te x yideal := sin2 fcos t + 0.5 Te
m m 1 m n 2fcos
yn
yidealn
0 50 100 150 200 250 300 350 400 450 500
tn
1
DCy := y DCy = 0.134 y := y DCy
NbPts n n n
n =0
NbPts 1
1
DCyid := yideal DCyid = 0.116 yideal := yideal DCyid
NbPts n n n
n =0
yn
yidealn
0 50 100 150 200 250 300 350 400 450 500
tn
A prsent les courbes sont confondues.
5
Annexe 8
A prsent on procde de la mme manire avec un cosinus dont la frquence est peu prs la
moiti de la demi-frquence d'chantillonnage.
( )
fe 1
fcos := x := cos 2 fcos t
2 2.1 n n
A la sortie de l'intgrateur :
m := 1 .. NbPts 1 y := 0
0
(n )
1
y := y + Te x yideal := sin2 fcos t + 0.5 Te
m m 1 m n 2fcos
0.5
yn
yidealn
0 5 10 15 20 25
0.5
tn
On supprime l'offset DC :
NbPts 1
1
DCy := y DCy = 0.25 y := y DCy
NbPts n n n
n =0
NbPts 1
4
1
DCyid := yideal DCyid = 1.523 10 yideal := yideal DCyid
NbPts n n n
n =0
0.5
yn
yidealn
0 5 10 15 20 25
0.5
tn
Il y a ici pas mal de distorsion entre le cas idal et le cas rel.
6
Annexe 8