Vous êtes sur la page 1sur 91

Filtrage numrique

Rfrences: Netzwerktheorie II (G. S. Moschytz)


Digitale Signalverarbeitung (D. Von Grnigen)
Traitement numrique du signal (G. Blanchet)

1 Glossaire

e(t) Signal de l'chantillonnage idal


x(t) Signal analogique d'entre
y(t) Signal analogique de sortie
k(t) Rponse impulsionnelle d'un systme linaire analogique idal
k'(t) k'(t)=Tek(t)
xe(t) Signal x(t) chantillonn
ye(t) Signal y(t) chantillonn
ke'(t) Signal idal k'(t) chantillonn
kef'(t) Signal idal k'(t) chantillonn et fentr
kefd'(t) Signal idal k'(t) chantillonn, fentr et dcal
w(t) Fentre
x(nTe) Signal l'entre d'un systme linaire discret
y(nTe) Signal la sortie d'un systme linaire discret
h(nTe) Rponse impulsionnelle d'un systme linaire discret (filtre numrique)
hc(nTe) Rponse impulsionnelle calibre
X(f) Transforme de Fourier de x(t) (signal d'entre)
Y(f) Transforme de Fourier de y(t) (signal de sortie)
K(f) Fonction de transfert d'un systme linaire analogique idal (TF de k(t))
Ke'(f) Transforme de Fourier de ke'(t)
Kef'(f) Transforme de Fourier de kef'(t)
Kefd'(f) Transforme de Fourier de kefd'(t)
Xe(f) Transforme de Fourier de xe(t)
Ye(f) Transforme de Fourier de ye(t)
W(f) Transforme de Fourier de w(t)
H(f) Fonction de transfert gnrale
X(z) Transforme en Z de x(nTe)
Y(z) Transforme en Z de y(nTe)
K'(z) Transforme en Z de k'(nTe)
B Bande passante de x(t)X(f)
Bf Bande passante du filtre idal k(t)K(f)
Te Priode d'chantillonnage (Te = 1/fe)
fe Frquence d'chantillonnage (fe = 1/Te >2B)
Tf Dure de la fentre d'chantillonnage
N Ordre de H(z)
f0 Frquence de rfrence pour un filtre analogique
fa Frquence du modle analogique
Ba Bande passante du modle analogique
NbTaps Nombre total de coefficients du filtre FIR.
N Ordre d'un filtre, Nombre de points FFT
m, n, k, p Indices de sommation, appartiennent 9.

Denis Prtre, dernire rvision : 23/09/2004 1


Filtrage numrique

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.

On trouve essentiellement deux grandes familles de filtres numriques :


Filtres FIR Finite Impulse Response. Ces filtres non rcursifs n'ont pas de contre-raction.
Avantages - Toujours stables.
- Phase linaire si symtrie des coefficients pas de distorsion
de phase.
- Possibilit de raliser toutes sortes de filtres 'bouriffants' en
dessinant simplement des gabarits de rponse en amplitude
|K(f)| et en calculant la transforme de Fourier inverse k(t).
Inconvnients - Beaucoup de calculs par rapport un IIR quivalent au niveau
des performances.
- Le retard du filtre (de groupe ou de phase) peut tre important
si le nombre de 'taps' est lev.

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.

Domaine temporel Domaine frquentiel

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

t -fe -fe/2 fe/2 fe f

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

t -fe -fe/2 fe/2 fe f

Figure 1

HE-Arc, Ingnierie 3
Filtrage numrique

La Figure 1 est compose de trois parties :


1) Le signal x(t) est le signal filtrer. Le filtre k(t)K(f) est ici un passe-bas idal de gain
unitaire (G=1) et de bande passante Bf. On dfinit le trs important signal suivant :
k ' ( t ) = Te k ( t ) (2)
Te tant la priode d'chantillonnage.
2) Les signaux x(t) et k'(t) sont chantillonns. On obtient xe(t) et ke'(t), dont les
transformes de Fourier sont les suivantes :

X e (f ) = f e X(f k f )
k =
e


(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).

3.1 Filtres FIR et transforme en Z


Sans nous soucier de la causalit des signaux (x(t) et k(t) ne sont pas causaux sur la Figure 1),
on dfinit :
x ( n Te )

Z
X ( z)
y( n Te )

Z
Y(z) (6)
k ' ( n Te )

Z
K ' ( z)
Dans Z, la relation (5) devient :
Y(z) = X(z) K ' (z) (7)
Et dans le domaine temporel :
y(n Te ) = x (n Te ) * k ' (n Te ) (8)
ou encore, et en 'oubliant' la priode Te dans les arguments :

y( n ) = x (k ) k ' (n k ) =
k =
x (n k ) k ' (k )
k =
(9)

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.

3.3 Influence du fentrage


Pour illustrer notre propos, nous allons imaginer le filtre passe-bas idal suivant :
K(f+fe) K(f) K(ffe)
1

f -fe -fe/2 -Bf Bf fe/2 fe f

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)

Comme fe = 4Bf, on a donc TeBf = , et en dfinitive :



1 n
k e ' (t ) = 2 sin c 2 (t n T )
n =
e avec < t < (12)

HE-Arc, Ingnierie 5
Filtrage numrique

La transforme de Fourier Ke'(f) est donc la suivante :



K e ' (f ) = K (f k f )
k =
e (13)

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

Dans le domaine frquentiel, cela correspond au produit de convolution suivant :


K ef ' (f ) = K e ' (f ) * W (f ) (16)

HE-Arc, Ingnierie 6
Filtrage numrique

Ce produit de convolution est illustr par la Figure 4 pour l'intervalle fe f fe.


Convol. avec fentre rectang. (f en kHz)
1.1

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.

3.3.1 Compromis sur la dure de fentrage


La priode d'chantillonnage tant connue, on ne parle pas de la dure de la fentre, mais du
nombre de 'taps' du filtre. Plus un filtre comporte de 'taps', plus sa fentre est grande et plus le
filtre se rapproche du filtre idal.
A l'inverse, plus le nombre de taps est grand, plus le produit de convolution numrique est
long effectuer.

3.4 Influence du dcalage


Maintenant que le signal a t fentr (voir la Figure 3), il s'agit de le rendre causal. Il suffit
pour cela de 'dcaler' le signal kf'(t) d'une dure Tf/2 vers la droite (voir Figure 5).
kef'(t)

Te

t
kefd'(t)

Te

t
Tf

Figure 5

HE-Arc, Ingnierie 7
Filtrage numrique

Dans le domaine frquentiel, cela correspond un retard :


T
k efd ' ( t ) = k ef ' t f (17)
2
Si on considre que Tf = (NbTaps1)Te, on trouve encore :
( NbTaps 1) Te
k efd ' ( t ) = k ef ' t (18)
2
Par rapport notre exemple, et en simplifiant :
n NbTaps 1
NbTaps
1
k efd ' ( t ) =
n =0 2
sin c
2 4
( t n Te )

(19)

Dans le domaine frquentiel, cela correspond un dphasage :


Tf
j 2 t
K efd ' (f ) = K ef ' (f ) e 2
= K ef ' (f ) e j Tf t (20)
Note importante Le filtre dcrit par kefd'(t)Kefd'(f) est un filtre numrique causal, stable,
avec une rponse impulsionnelle limite dans le temps NbTaps
chantillons. Ce filtre est donc tout simplement ralisable!
Par souci de simplicit, on pose partir de maintenant h(n)=kefd'(nTe).
1 n NbTaps 1
h (n ) = k efd ' (n Te ) = sin c (21)
2 2 4
La Figure 6 montre les coefficients de 0 NbTaps1 :
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 20
0 n NbTaps 1

Figure 6

La transforme H(z) de h(n) est la suivante :


NbTaps 1
H(z) = h (n ) z
n =0
n
(22)

H(z) = h 0 + h1 z 1 + h 2 z 2 + ... + h NbTaps 1 z ( NbTaps 1) (23)

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

L'ordre de H(z) est le suivant :


N = NbTaps 1 (24)

3.5 Dtermination des coefficients avec Matlab


On trouve facilement les 'taps' de notre filtre passe-bas avec Matlab. Tout d'abord, il faut
prciser que Matlab calibre l'intervalle 0..fe de 0 2. Comme nous avons fe=4B, on fixe la
bande de coupure B=fe/4=2/4=0.5.
Allons-y :
N = 20 %Ordre du filtre
NbTaps = N+1 %Nombre de coefficients
h_rect = FIR1(N,0.5,'low',boxcar(NbTaps),'noscale') %Dtermination des 'taps' (fentre rectangulaire)
h_ham = FIR1(N,0.5,'low',hamming(NbTaps),'noscale') %Dtermination des 'taps' (fentre de Hamming)
h_han = FIR1(N,0.5,'low',hanning(NbTaps),'noscale') %Dtermination des 'taps' (fentre de Hanning)
A = [1] %Pas de contre-raction
impz(h_rect, A) %Graphe de la rponse impulsionnelle
freqz(h_rect, A) %Affiche H(f) pour 0 f fe
x=ones(NbTaps*2,1) %x=saut unit
y=filter(h_rect, A, x) %y=rponse indicielle
plot(y, 'bo') %graphe de la rponse indicielle

3.6 Calibration des coefficients


Notre filtre passe-bas n'a pas forcment un gain de un pour le DC (f=0) ! On vrifie :
f =0 z = e j 2 T0 0 = 1
NbTaps 1 (25)
H(z = 1) = h (n ) = 1.0315 = 0.27 dB
n =0

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

Avec Matlab, c'est toujours aussi simple :


h_rect = FIR1(N,0.5,'low',boxcar(NbTaps),'scale') %Dtermination des 'taps' (fentre rectangulaire)

3.7 Types de filtres


Notre exemple illustre le cas o le nombre de 'taps' est impair. La rponse impulsionnelle
montre une symtrie axiale par rapport au coefficient du milieu (voir Figure 6). Lorsqu'un
filtre FIR runit ces deux conditions (nombre de coefficients impair et symtrie axiale), on dit
qu'il est de type 1.

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.

3.8 Proprits de la rponse de phase


Imaginons un filtre FIR de type 2 avec 6 'taps'. La longueur de la fentre est donc 5Te. La
fonction de transfert H(z) est, compte tenu de la symtrie axiale des coefficients, la suivante :
H(z) = h 0 + h1 z 1 + h 2 z 2 + h 2 z 3 + h1 z 4 + h 0 z 5
(27)
H(z) = h 0 (1 + z 5 ) + h1 (z 1 + z 4 ) + h 2 (z 2 + z 3 )

La fonction de transfert H(f) pour fe < f < fe devient :


H(z = e j 2 f Te ) = h 0 (1 + e j10 f Te ) + h1 (e j2 f Te + e j8 f Te ) + h 2 (e j4 f Te + e j6 f Te )

On peut mettre le facteur e-j5fTe en vidence :


[
H(f ) = e j5 f Te h 0 (e j5 f Te + e j5 f Te ) + h1 (e j3f Te + e j3f Te ) + h 2 (e jf Te + e jf Te ) ]
En appliquant les formules d'Euler :
H(f ) = e j5f Te [h 0 2 cos(5f Te ) + h1 2 cos(3f Te ) + h 2 2 cos(f Te )] (28)
On dduit de (28) :
H(f ) = 2 [h 0 cos(5f Te ) + h1 cos(3f Te ) + h 2 cos(f Te )]
(29)
(f ) = arg( H(f )) = 5f Te
La rponse de phase est totalement linaire ! IL N'Y A PAS DE DISTORSION DE PHASE.
Les retards de phase et de groupe sont tous deux gaux Tf/2 :
1 (f ) 5 T
phase = = Te = f
2 f 2 2
(30)
1 d 5 T
groupe = (f ) = Te = f
2 df 2 2

HE-Arc, Ingnierie 10
Filtrage numrique

On dmontre la mme proprit :


avec un nombre quelconque de 'taps'.
pour les filtres FIR de type 1.
Cette proprit est tout fait remarquable. A noter que la condition indispensable pour la
linarit de la phase est la symtrie axiale.
Dans la thorie des filtres analogiques, on approche cette proprit avec les filtres de Bessel
(ou Thomson), mais la rponse en amplitude de ces filtres est en contrepartie assez mauvaise.
Avec les filtres FIR, on a la fois un excellent comportement en amplitude et en phase.

3.9 Filtre FIR passe-bas


On n'a vu jusqu'ici qu'un exemple bien prcis. Soit le passe-bas gnral dfini par la Figure 8.
H(f)
1

-fe -fe/2 -Bf Bf fe/2 fe f

Figure 8

La rponse impulsionnelle (non calibre !) donne les 'taps' du filtre :


2 Bf 2 Bf NbTaps 1
h (n ) = sin c n (31)
fe 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

3.9.1 Exemple avec Matlab


Imaginons le filtre passe-bas (calibr) suivant :
Bf = 1 kHz
fe = 4Bf
NbTaps = 21
On veut limiter l'ondulation dans la bande passante. Pour cela, on choisit d'utiliser une fentre
de Hamming.
Taper :
Bf = 1000 %Bande passante
fe=4*Bf %Frquence d'chantillonnage
Wn= 2*B/fe %Etalonnage de la bande passante par rapport fe/2
NbTaps=21 %Nombre de taps (FIR de type I)
N=NbTaps1 %Ordre du filtre
h_hamm = FIR1(N,Wn,'low',hamming(NbTaps),'scale') %Dtermination des 'taps' (fentre de Hamming)
impz(h_hamm) %Rponse impulsionnelle
freqz(h_hamm) %Spectres d'amplitude et de phase

HE-Arc, Ingnierie 11
Filtrage numrique

3.10 Filtre FIR passe-haut


Attention Contrairement au passe-bas, le passe-haut n'est ralisable qu'avec un nombre
impair de 'taps', c'est--dire avec des filtres FIR de type I tel que celui de la
Figure 6 page 8.
Soit le passe-haut gnral dfini par la Figure 8.
H(f)

-fe -fe/2 -Bf Bf fe/2 fe f

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

La rponse impulsionnelle est illustre par la Figure 10.


Passe-haut - rponse impulsionnelle
0.75

0.5

hn

0.5
0.5
0 2 4 6 8 10 12 14 16 18 20
0 n NbTaps 1

Figure 10

La rponse en amplitude est illustre par la Figure 11.


Passe-haut de -fe/2 fe/2 (f en kHz)
1.2

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

3.10.2 Exemple avec Matlab


On rsout le mme exemple avec Matlab, mais en utilisant une fentre de Hamming. On
prend des paramtres calibrs pour que le gain dans la bande passante soit de 1 pour f=fe/2.
Taper :
Bf = 1000 %Bande passante
fe=4*Bf %Frquence d'chantillonnage
Wn= 2*B/fe %Etalonnage de la bande passante par rapport fe/2
NbTaps=21 %Nombre de taps (FIR de type I)
N=NbTaps1 %Ordre du filtre
h_hamm = FIR1(N,Wn,'high',hamming(NbTaps),'scale') %Dtermination des 'taps' (fentre de Hamming)
impz(h_hamm) %Rponse impulsionnelle
freqz(h_hamm) %Spectres d'amplitude et de phase

HE-Arc, Ingnierie 13
Filtrage numrique

3.11 Filtre FIR passe-bande


Attention Les filtres FIR passe-bande peuvent tre de type I ou II.
Soit le passe-bande gnral dfini par la Figure 12.
H(f)

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

La rponse en amplitude est illustre par la Figure 14.


Passe-bande de -fe/2 fe/2 (f en kHz)
1.2

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

3.11.2 Exemple avec Matlab


On rsout le mme exemple avec Matlab, mais en utilisant une fentre de Hamming. On
prend des paramtres calibrs pour que le gain soit de 1 au milieu de la bande passante.
Taper :
B1 = 500 %Dbut de la bande passante
B2 = 1000 %Fin de la bande passante
fe=4000 %Frquence d'chantillonnage
W1= 2*B1/fe %Etalonnage de B1 par rapport fe/2
W2= 2*B2/fe %Etalonnage de B2 par rapport fe/2
NbTaps=51 %Nombre de taps (FIR de type I)
N=NbTaps1 %Ordre du filtre
h_hamm = FIR1(N,[W1 W2],'band',hamming(NbTaps),'scale') %Dtermination des 'taps'
impz(h_hamm) %Rponse impulsionnelle
freqz(h_hamm) %Spectres d'amplitude et de phase

3.12 Filtre FIR coupe-bande


Attention Comme auparavant pour le passe-haut, le coupe-bande n'est ralisable qu'avec
un nombre impair de 'taps', c'est--dire avec des filtres FIR de type I tel que celui
de la Figure 6 page 8.
Soit le coupe-bande gnral dfini par la Figure 15.
H(f)

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

La rponse en amplitude est illustre par la Figure 17.


Coupe-bande de -fe/2 fe/2 (f en kHz)
1.2

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

3.12.2 Exemple avec Matlab


On rsout le mme exemple avec Matlab, mais en utilisant une fentre de Hamming. On
prend des paramtres calibrs pour que le gain soit de 1au milieu de la bande passante.
Taper :
B1 = 500 %Dbut de la bande de rjection
B2 = 1000 %Fin de la bande de rjection
fe=4000 %Frquence d'chantillonnage
W1= 2*B1/fe %Etalonnage de B1 par rapport fe/2
W2= 2*B2/fe %Etalonnage de B2 par rapport fe/2
NbTaps=51 %Nombre de taps (FIR de type I)
N=NbTaps1 %Ordre du filtre
h_hamm = FIR1(N,[W1 W2],'stop',hamming(NbTaps),'scale') %Dtermination des 'taps'
impz(h_hamm) %Rponse impulsionnelle
freqz(h_hamm) %Spectres d'amplitude et de phase

3.13 Filtre 'equi-ripple'


Les filtres vus auparavant (passe-bas, passe-haut, etc.) donnent une excellente ide de la
philosophie des filtres FIR. Cela dit, vous ne les utiliserez jamais. C'est sans doute assez
frustrant d'en arriver cette conclusion aprs tous ces chapitres, mais c'est ainsi: les filtres
FIR drivs d'une fonction de transfert h(t) ne sont pas assez efficaces.
La mthode optimale de dtermination des 'taps' est l'algorithme Parks-McClellan, qui lui-
mme fait appel l'algorithme de Remez. Cette mthode est base sur :
1) une distribution uniforme de l'ondulation sur l'ensemble de la bande passante
2) une distribution uniforme de l'affaiblissement sur l'ensemble de la bande de rjection
Les filtres FIR rsultants sont de type I ou II, donc leur rponse en phase est linaire. Ils sont
nettement plus performants que les filtres FIR fentrs. On les appelle aussi filtres minimax.

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.

3.13.1 Exemple avec Matlab


On veut un filtre passe-bas avec :
- Ondulation totale dans la bande passante : 0.5 dB (donc 0.25 dB)
- Affaiblissement dans la bande de rjection : 80 dB
- fe = 4 kHz
- fpass = 500 Hz
- fstop = 1000 Hz
On utilise l'outil 'fdatool'. On voit que pour une fentre de Kaiser, il faudrait N=41, alors
qu'avec le filtre equi-ripple, on a N=23. On peut exporter les 'taps' ( noter qu'ils ne sont pas
calibrs !).
On peut aussi taper :
B1 = 500 %Fin de la bande passante
B2 = 1000 %Dbut de la bande de rjection
fe=4000 %Frquence d'chantillonnage
Amax_dB=0.25 %Demi-ondulation max dans la bande passante (en dB)
Amin_dB=80 %Ondulation min dans la bande de rjection (en dB)
Amax=110^(Amax_dB/20) %Demi-ondulation max dans la bande passante
Amin=10^(Amin_dB/20) %Ondulation min dans la bande de rjection
[N,F,A,W]=REMEZORD([B1 B2], [1 0], [Amax Amin], fe) %Recherche les conditions idales
N=N+2 %Correction de l'inexactitude de Matlab
h_remez=REMEZ(N,F,A,W) %Calcul des 'taps' du filtre equi-ripple
impz(h_remez) %Rponse impulsionnelle
freqz(h_ remez) %Spectres d'amplitude et de phase

Matlab est malheureusement impcis quant la spcification de l'ordre N. Il faut presque


toujours ajouter 1 ou 2 pour remplir les spcifications.
Pour tre exhaustif, il faut encore citer l'outil 'sptool'.

HE-Arc, Ingnierie 18
Filtrage numrique

3.14 Filtre 'least-square'


Cette mthode, base sur un algorithme des moindres carrs, est galement trs efficace. Par
rapport l'algorithme Parks-McClellan, elle prsente les particularits suivantes :
L'ondulation dans la bande passante est moindre, et l'affaiblissement minimal dans la
bande de rjection est plus accentu. On a donc ici un meilleur comportement pour la
mthode des moindres carrs.
La transition bande passante/bande de rjection est bien moins rapide. On a donc ici
un moins bon comportement pour la mthode des moindres carrs.

3.14.1 Exemple avec Matlab


On prend le mme exemple que prcdemment.
N=23 %Ordre du filtre
B1 = 500 %Fin de la bande passante
B2 = 1000 %Dbut de la bande de rjection
f6dB=700 %Etalonnage d'une frquence pour H= 6dB (gain=1/2)
fe=4000 %Frquence d'chantillonnage
W= 2*f6dB/fe %Normalisation de f6dB
Amax_dB=0.25; %Demi-ondulation max dans la bande passante (en dB)
Amin_dB=80; %Ondulation min dans la bande de rjection (en dB)
Amax=110^(Amax_dB/20); %Demi-ondulation max dans la bande passante
Amin=10^(Amin_dB/20); %Ondulation min dans la bande de rjection
h_ls=fircls1(N,W,Amax,Amin,'plot') %Calcule et montre le rsultat
figure;
freqz(h_ls)

3.15 Ralisation pratique du filtrage FIR


Dans Z, on a donc :
Y ( z ) = H ( z) X ( z) (33)
Dans le domaine temporel, on a un produit de convolution (on laisse tomber le facteur Te) :
y( n ) = h ( n ) * x ( n ) (34)
Comme h(n) a un nombre limit d'chantillons, on peut crire :
n
y(n ) = x (k ) h (n k )
k = n ( NbTaps 1)
(35)

ou encore :
NbTaps 1
y( n ) = x (n k ) h (k )
k =0
(36)

L'annexe 2 illustre le principe du produit de convolution. On imagine que les coefficients du


filtre restent stable, alors que les signaux d'entre et de sortie se dcalent au fur et mesure
sur la gauche. Le prsent est fixe; l'avenir est sa droite. Le pass I indique les chantillons de
x(k) qui ont (encore) une influence sur l'chantillon de sortie y(n), et le pass II indique les
chantillons de x(k) qui n'ont plus aucune une influence sur l'chantillon de sortie y(n).

HE-Arc, Ingnierie 19
Filtrage numrique

On voit que pour chaque chantillon de sortie, on a NbTaps multiplications et NbTaps


additions. Le nombre d'oprations est donc considrable. Imaginons un signal stro de
20 kHz chantillonn 44.1 kHz. Pour un filtre FIR de 50 taps, il faut raliser 100 oprations
entre deux chantillons, ce qui signifie une opration toutes les 226 ns.
Avant l'arrive sur le march des DSP, les filtres FIR taient quasiment inutiliss, la puissance
de calcul exige tant trop importante. Aujourd'hui, ils sont toujours plus utiliss.
A noter encore l'instruction MAC (multiply and accumulate), prsente dans quasiment tous
les DSP. Elle multiplie et additionne en une seule opration. Ainsi, pour un filtre de 50 'taps',
on a seulement 50 oprations effectuer entre deux chantillons.
Aujourd'hui, on voit apparatre du filtrage FIR par FPGA; de cette manire, les N oprations
de multiplication/addition se droulent simultanment !
La forme directe (autre dnomination: forme transversale) d'un filtre FIR est dcrite par la
Figure 19 (note: N=NbTaps1). On peut utiliser ce schma dans un DSP ou dans une FPGA.
z1 z1 z1
x(n)
h0 h1 h2 hN1 hN
y(n)
Figure 19

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

La structure de la Figure 20 est intressante pour des systmes numriques o l'opration de


multiplication requiert plus temps de calcul que l'opration d'addition.

4 Dcimation par filtre FIR


La dcimation, encore appele sous-chantillonnage, est essentielle en traitement du signal.
Imaginons le problme suivant. On veut effectuer une FFT de 512 chantillons pour une
bande passante de B=1 kHz. Le convertisseur A/D est un sigma-delta audio standard, lequel
fournit des chantillons une frquence fA/D=44.1 kHz et une bande passante BA/D=20 kHz.
Si on ne fait rien au niveau de la frquence d'chantillonnage (fe=fA/D), on remplit le buffer de
512 chantillons dans un temps trs court Tf = 11.6 ms, ce qui implique une rsolution
spectrale assez grande f=86 Hz. Cela signifie que pour la bande passante choisie (B=1 kHz),
on n'a que 11 raies spectrales. C'est peu, si on songe que la limite thorique (lorsque fe=2B)
d'une FFT 512 chantillons est de 256 raies dans la bande passante...

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).

4.1 L'intrt du filtre FIR


Dans l'exemple prcdent, on un filtre assez consquent avec 389 'taps'. Cela dit, les valeurs
la sortie du dcimateur sortent une frquence de fe=2.76 kHz, ce qui est assez lent. La Figure
24 illustre la situation.

x(n) Dcimateur y(n)


16:1

fA/D = 44.1 kHz fe = 2.76 kHz


Figure 24

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

Ce mode de fonctionnement est illustr par la Figure 25.


16 chantillons
x(k)

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.

4.2 Dcimation en cascade


Lorsque le facteur de dcimation est important, le sous-chantillonnage est souvent effectu
en cascade. L'exemple prcdent, excut en deux cascades, est illustr par la Figure 26.

x(n) Dcimateur xi(n) Dcimateur y(n)


4:1 4:1
fA/D = 44.1 kHz fei = 11.03 kHz fe = 2.76 kHz

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.

5 Interpolation par filtre FIR


L'interpolation, encore appele sur-chantillonnage, est galement essentielle en traitement du
signal. Imaginons le problme suivant. On a un signal audio avec une frquence fs=44.1 kHz
et une bande passante B=20 kHz. Si on restitue le signal tel quel (par maintien, par exemple),
le filtre passe-bas anti-repliement devrait tre monstrueux (25me ordre).
Si au contraire on arrive sortir un signal chantillonn fe=4fs=176.4 kHz, alors le filtre
passe-bas anti-repliement devient nettement plus ralisable (4me ordre).

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

-4fs -3fs -2fs -fs -B B fs 2fs 3fs 4fs


Figure 28

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

Le signal x2(t) est reprsent par la Figure 29.


x2(n.Te)

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

5.1 L'intrt du filtre FIR


Le filtre dcrit prcdemment comprend 286 'taps'. Cependant, seulement le quart des 'taps'
est utilis, soit 71 ou 72.
La Figure 31 illustre ce principe pour un signal filtr y(n)=x(n)*h(n), et ceci pour les valeurs
successives n0 et n0+1. Les 'taps' dessins en gras ne sont pas multiplis par zro.
Convolution pour n = n0
x(k.Te)

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

5.2 Exemple pratique : les filtres de mise en forme


Les mises en forme de signaux de type 'raised cosine', 'root square raised cosine', etc., sont
effectues par des filtres polyphases. Prenons un exemple. Soit le signal suivant :
NRZ mis en forme avec une impulsion 'raised cosine' et roll-off =0.
On pose R=1000 symboles/s et donc B=R(1+)/2 = 500 Hz.
On pose fe = 8B = 4 kHz. On prend un facteur 8B pour le surchantillonnage, car
ainsi la restitution par maintien crera peu de distorsion d'amplitude.
On choisit un filtre FIR de 33 taps (retard : 16 taps)
Comme on a fe/R = 4, cela signifie que trois chantillons sur 4 sont nuls. On a un premier
passage o 9 coefficients sont pris en compte, puis 3 passages o 8 coefficients sont pris en
compte et ainsi de suite.
Cette situation est illustre par le tableau suivant.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 13 15 16 17 18 19 20 21 22 23 23 25 26 27 28 29 30 31 32
a 0 0 0 b 0 0 0 c 0 0 0 d 0 0 0 e 0 0 0 f 0 0 0 g 0 0 0 h 0 0 0 i
0 0 0 b 0 0 0 c 0 0 0 d 0 0 0 e 0 0 0 f 0 0 0 g 0 0 0 h 0 0 0 i 0
0 0 b 0 0 0 c 0 0 0 d 0 0 0 e 0 0 0 f 0 0 0 g 0 0 0 h 0 0 0 i 0 0
0 b 0 0 0 c 0 0 0 d 0 0 0 e 0 0 0 f 0 0 0 g 0 0 0 h 0 0 0 i 0 0 0

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

On imagine aisment la difficult d'une telle transformation pour un simple filtre RC :


1 1
H(s) =
Z
H(z) = (39)
1+ s 1
1 + ln(z)
Te
La fonction H(z) dcrite par (39) ne dcrit pas un systme linaire discret, puisque H(z) n'est
pas une fraction rationnelle. H(z) n'est donc pas numriquement ralisable.
Le passage du domaine de la transforme Laplace dans le domaine de la transforme en Z doit
donc se faire non pas idalement (quation (39)), mais au moyen d'une approximation. Le
6.1 dcrit une approximation possible mais peu employe, et le 6.2 prsentera la trs
connue et trs employe transformation bi-linaire.

6.1 Remplacement de la diffrentielle par la diffrence


Dans le domaine de Laplace, driver signifie 'multiplier par s'. On a :
d
x ( t ) Laplace
s X(s) (40)
dt
On pourrait imaginer la drive ainsi dans le domaine numrique :
d x (n Te ) x ((n 1) Te ) 1
x (n Te ) =

Z
(1 z 1 ) X(z) (41)
dt Te Te
On en conclut la transformation suivante :
1
s= (1 z 1 ) (42)
Te
z = (1 s Te )
1
(43)
Si on observe la transformation (43) pour le demi-plan gauche de Laplace, on a la
transformation illustre par la Figure 32.
Im(z)
j = Im(s)
z = 1/(1s.Te)

= Re(s) Re(z)

Plan de s axe frquentiel Plan de z


Figure 32
Comme le demi-plan gauche de Laplace se transforme en un cercle inclus dans le cercle unit
du plan de Z, un filtre stable dans Laplace reste stable dans 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.

6.2 Transformation bi-linaire


La transformation bi-linaire s'inspire de la mthode d'intgration des trapzes. Dans le
domaine de Laplace, intgrer signifie diviser par s'. On a, en ngligeant les conditions
initiales :
1
y( t ) = x ( t ) dt Laplace
Y(s) = X(s) (44)
s
Si on intgre numriquement par la mthode des trapzes, on a entre deux chantillons un
accroissement S illustr par la Figure 33.
x(n)

x(n1) S=Te.(1/2).(x(n)+x(n1))
x(n2)

(n2).Te (n1).Te n.Te t


Te
Figure 33

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

Si on observe la transformation (48) pour le demi-plan gauche de Laplace, on a la


transformation illustre par la Figure 34.
Im(z)
j = Im(s)
z = (2+s.Te)/(2s.Te)

= Re(s) Re(z)

Plan de s axe frquentiel Plan de z


Figure 34
Comme le demi-plan gauche de Laplace se transforme dans le cercle unit du plan de Z, un
filtre stable dans Laplace reste stable dans Z.
Attention cependant aux conclusions htives que la Figure 34 pourrait suggrer ! L'axe
frquentiel recouvre bien le cercle unit, mais pas comme le fait la transformation idale (38).
Examinons donc cette transformation de l'axe frquentiel, en remplaant dans (48) la variable
s par j2fa, la variable fa signifiant frquence analogique.
2 + j 2f a Te
z= (49)
2 j 2f a Te
Si on met z = fct(fa) sous sa forme trigonomtrique :
4 + (2f a Te )
2
z= =1
4 + (2f a Te )
2
(50)
arg( z) = arctg(f a Te ) (arctg(f a Te )) = 2 arctg(f a Te )
La frquence fa correspond la frquence du modle analogique. Dans le monde numrique,
cependant, z continue d'obir la loi suivante, par rapport la frquence 'relle' f :
z = e j 2 f Te (51)
Si on met z = fct(f) sous sa forme trigonomtrique :
z =1
(52)
arg( z) = 2f Te
En comparant les quations (50) et (52), on conclut les importantes relations suivantes :
1
f= arctg( Te f a ) (53)
Te
1
fa = tg ( Te f ) (54)
Te

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.1 Procdure suivre pour la ralisation d'un filtre IIR


Pour raliser un filtre numrique IIR bas sur un filtre analogique, on procde comme suit :
1. On tablit le gabarit du filtre rel.
2. On transforme les frquences caractristiques (Bande passante, bande de rjection,
etc.) pour tenir compte des effets de compression ultrieurs selon la formule :
1
fa = tg ( Te f )
Te
3. On tablit le gabarit du filtre analogique correspondant.
4. On trouve le fonction H(s) du filtre dcrit par le gabarit.
5. On trouve H(z) en employant la transformation :
2 z 1
s= (55)
Te z + 1
6. C'est fini
Souvent, en filtrage analogique, on emploie la variable de Laplace normalise S dfinie ainsi
par rapport une frquence de rfrence f0 :
s
S= (56)
2f 0
Dans ce cas, le point 5 se r-crit ainsi :
5. On trouve H(z) en employant la transformation :
1 z 1
S= (57)
f 0 Te z + 1

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

Le gabarit du filtre analogique est dcrit par la Figure 36.


A(a)

Amin

Amax

1 4.24 a

Ba = 1034 Hz fra = 4381 Hz fa

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

A prsent on remplace la variable normalise S de (60) de la manire suivante :


1 z 1 z 1
S= = 3.078 (61)
f 0 Te z + 1 z +1
En dveloppant un peu, on trouve la fonction de transfert dans Z :
1 2 3 4 5
0.000292 + 0.00146 z + 0.00292 z + 0.00292 z + 0.00146 z + 0.000292 z
H(z) = (62)
1 2 3 4 5
1 3.9634 z + 6.699 z 5.9815 z + 2.8111 z 0.5558 z

HE-Arc, Ingnierie 33
Filtrage numrique

La rponse en amplitude de ce filtre numrique est illustre par la Figure 38.


Filtre numrique pour 0 < f < fe, ampl.
3
0

Hdb( f )

Amin 50

100
100
1 .10
4
0 1000 2000 3000 4000 5000 6000 7000 8000 9000
fmin f fmax

Figure 38

Un zoom sur la bande passante est donn par la Figure 39.


Filtre numrique pour 0 < f < B, ampl.
0 0

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

Les retards de phase et de groupe sont illustrs par la Figure 41.


Retards de groupe et de phase
1 ms 0.001

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.

6.2.2.1 Mme exemple avec Matlab


Avec Matlab, les choses sont toujours simples
N=5 %Ordre du filtre
B=1000; fe=10000; %Bande passante et frquence d'chantillonnage
Amax = 1; %Ondulation max en dB
format long %On veut plus de prcision d'affichage
[num, den]=cheby1(N, Amax, 2*B/fe) %Numrateur et dnominateur
impz(num, den) %Graphe de la rponse impulsionnelle
freqz(num, den) %Affiche H(f) pour 0 f fe
x=ones(100,1); %x=saut unit
y=filter(num, den, x); %y=rponse indicielle
plot(y, 'bo') %graphe de la rponse indicielle
zplane(num, den) %Graphe des ples et des zros
P=roots(den) %Calcule les ples
Z=roots(num) %Calcule les zros
[Z, P, K]=tf2zp(num, den) %Autre manire d'obtenir les ples, les zros et le facteur k

Plus simple encore, l'outil fdatool !

6.3 Ralisation du filtrage IIR


Un filtre IIR comprend une contre-raction (on dit aussi que le filtre est rcursif). La fonction
de transfert H(z) d'un filtre IIR est donc de la forme suivante :
M

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

En ralit, la plupart du temps, on a le mme ordre au numrateur et au dnominateur, c'est


dire M=P=N. Si cela n'est pas le cas, on peut quand mme admettre cette galit, en
introduisant des zros dans les coefficients bi ou ai. On rcrit donc :
b 0 + b1 z 1 + b 2 z 2 + ... + b N z N
H(z) = (64)
1 + a1 z 1 + a 2 z 2 + ... + a N z N

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.

6.3.1 Forme directe I


La structure de forme directe I est illustre par la Figure 42.
w(n)
x(n) y(n)
b0
z1 z1
b1 a1
1
z z1
b2 a2

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

6.3.2 Forme directe II


La structure de forme directe II est illustre par la Figure 43.
w(n)
x(n) y(n)
b0
z1
a1 b1
1
z
a2 b2

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

6.3.3 Forme directe II transpose


La structure de forme directe II transpose est une variante de la forme directe II. Elle est
illustre par la Figure 44.
w0(n)
x(n) y(n)
b0 z 1

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'.

6.3.4 Structure en cascade


Les structures directes sont totalement inadaptes lorsque l'unit de calcul a une prcision
faible (par exemple un DSP de type 'fixed point'). De fait, le bruit de calcul est trs important
dans ce type de structure, et ce particulirement si plusieurs ples sont proches l'un de l'autre.
Une structure nettement plus adapte est la structure en cascade illustre par la Figure 45.

y0(n) y1(n) y2(n) yN/21(n) yN/2(n)


x(n) H1(z) H2(z) HN/2(z) y(n)

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)

b01 b02 b03


z1 z1 z1 z1

b11 a11 b12 a12 b13 a13


z1 z1 z1 z1
b21 a21 b22 a22 b23 a23

H1(z) H2(z) H3(z)


Figure 46

HE-Arc, Ingnierie 38
Filtrage numrique

L'algorithme de calcul est le suivant :


y 0 (n ) = x (n )
w1 (n ) = b 01 y 0 (n ) + b11 y 0 (n 1) + b 21 y 0 (n 2)
y1 (n ) = w1 (n ) a11 y1 (n 1) a 21 y1 (n 2)
w 2 (n ) = b 02 y1 (n ) + b12 y1 (n 1) + b 22 y1 (n 2)
y 2 (n ) = w 2 (n ) a12 y 2 (n 1) a 22 y 2 (n 2) (71)
...
w L (n ) = b 0 L y L 1 (n ) + b1L y L 1 (n 1) + b 2 L y L 1 (n 2)
y L (n ) = w L (n ) a1L y L (n 1) a 2 L y L (n 2)
y(n ) = y L ( n ) avec L = N / 2

6.3.4.1 Ralisation avec Matlab


Matlab propose les outils tf2zp et zp2sos pour dterminer les cellules de deuxime ordre. On
reprend l'exemple du filtre de Tchebycheff mentionn plus haut.
N=5 %Ordre du filtre
B=1000; fe=10000; %Bande passante et frquence d'chantillonnage
Amax = 1; %Ondulation max en dB
format long %On veut plus de prcision d'affichage
[num, den]=cheby1(N, Amax, 2*B/fe) %Numrateur et dnominateur
[Z, P, K]=tf2zp(num, den) %Dtermine les ples, zros et le facteur multiplicatif K
[SOS,G]=zp2sos(Z,P,K) %Donne la matrice SOS et le gain

La matrice SOS est donne sous la forme :


b 01 b11 b 21 1 a11 a 21

b b12 b 22 1 a12 a 22 N
SOS = 02 avec L = (72)
... ... ... ... ... ... 2

b
1L b1L b 2 L 1 a1L a 2L

On a donc, en tenant compte du gain :


N/2
b 0i + b1i z 1 + b 2i z 2
H(z) = G (73)
i =1 1 + a1i z 1 + a 2i z 2
Pour reprendre notre exemple de filtre Tchebycheff, on obtient :
1 1 2 1 2
4 1 + 0.9988 z 1 + 2.002 z + 1.002 z 1 + 1.9992 z + 0.9992 z
H ( z ) = 2.92 10
1 1 2 1 2
1 0.828 z 1 1.5944 z + 0.7458 z 1 1.541 z + 0.9 z

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).

7.1 Mthode "overlap-save" pour filtres FIR


La mthode overlap-save est la plus intuitive. Prenons l'exemple suivant :
Nombre d'chantillons par segment : Nx=1000
Nombre de taps du filtre FIR : Nh=100
Pour les Nh premires valeurs y(0)..y(99) de chaque segment, on a un problme. Quelles
valeurs de x doit-on prendre pour le produit de convolution ? Il faut ncessairement avoir
conserv les Nh1=99 dernires valeurs de x du bloc prcdent 1 !
La Figure 47 illustre le problme pour y(0). La portion en gras des valeurs de x appartient au
segment prcdent.
Nh = 100 taps
Nh1 = 99 valeurs de x
conserves du bloc prcdent
x(n)
x(0)
y(n)
y(0) y(999)

bloc prcdent Nx = 1000 ch. bloc suivant

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)

bloc prcdent Nx = 1000 ch. bloc suivant

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 !

7.1.1 Mthode "overlap-save" pour filtres IIR


La mthode "overlap-save" s'applique sans autres pour les filtres de type IIR. Pour un filtre
IIR tel que dcrit par l'quation (64) page 36, il faut conserver d'un segment l'autre les N
dernires valeurs de x(n), de w(n) et de y(n) du segment prcdent.
Par exemple, pour un biquad d'ordre 2 (voir (70) page 38), il faudra conserver les deux
dernires valeurs de x(n), de y(n) et de w(n) du segment prcdent, soit 6 valeurs par biquad.
Si on a une structure en cascade de N biquads, il faudra conserver 6N valeurs d'un segment
l'autre.

7.2 Mthode "overlap-add" pour filtres FIR


Nous choisirons ici exactement la mme configuration qu'au chapitre prcdent, savoir des
segments de Nx=1000 chantillons avec un filtre FIR de Nh=100 taps.
La mthode "overlap-add" considre chaque segment de x(n) sans tenir compte du segment
prcdent. Hors du segment considr, les valeurs de x(n) sont considres comme nulles.
Pour chaque segment de Nx valeurs de x(n), on effectue le produit de convolution avec les Nh
coefficients du filtre h(n). Le rsultat y(n) a la longueur suivante :
N y = Nx + Nh 1 (74)

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

8 Filtrage par FFT


Le filtrage par FFT est employ pour raliser des filtres de type FIR pour un signal d'entre
segment. Contrairement ce qu'on pourrait imaginer au dpart, le filtrage par FFT n'est donc
pas un filtrage parfait, mais un filtrage de type FIR segment selon les deux alternatives
connues : les mthodes "overlap-add" et "overlap-save".
Le filtrage par FFT est trop peu utilis par les ingnieurs, soit par ignorance, soit par crainte
de devoir implmenter l'algorithme FFT alors que l'algorithme FIR est si simple... C'est
dommage, car le filtrage par FFT est une technique extrmement performante.
Par rapport au filtrage FIR classique, cette mthode comporte les avantages et inconvnients
suivants :
A partir de 100 'taps', le filtrage par FFT est nettement plus performant que le filtrage
FIR classique.
Moins de calculs implique galement un bruit de calcul moindre. Ceci est important si
on a un processeur de type 'fixed point'.
C'est une technique de filtrage par segments. Donc, par rapport un filtrage FIR
classique, le filtrage par FFT a un retard encore plus prononc 2 ! Ceci peut tre un
inconvnient majeur.
L'ide est la suivante : connaissant H(f), la FFT de h(n), on peut calculer X(f), la FFT de x(n),
multiplier les deux FFT terme terme, et restituer la FFT inverse y(n).
On aurait la situation suivante :
y(n Te ) = IFFT(H (k f ) X (k f ) ) (75)

H (k f ) = FFT(h (n ) )
avec
X (k f ) = FFT(x (n ) )

8.1 Convolution circulaire


Malheureusement, les choses ne sont pas aussi simples qu'on pourrait le penser au premier
abord. Le principal problme est que, pour le cas discret, la multiplication dans le domaine
frquentiel entrane un produit de convolution circulaire !

2
On a le retard naturel du filtre plus au moins un segment de retard !

HE-Arc, Ingnierie 43
Filtrage numrique

Le tableau suivant illustre la diffrence entre le produit de convolution linaire et le produit de


convolution circulaire avec deux signaux x(n)=[1, 2, 3] et h(n)= [3, 4, 5]
Convolution linaire Convolution circulaire
[1 2 3] [1 2 3]
y ( 0) = 1 3 = 3 y(0) = 1 3 + 2 5 + 3 4 = 25
[5 4 3] [3 5 4]
[1 2 3] [1 2 3]
y(1) = 1 4 + 2 3 = 10 y(1) = 1 4 + 2 3 + 3 5 = 25
[5 4 3] [4 3 5]
[1 2 3] [1 2 3]
y(2) = 1 5 + 2 4 + 3 3 = 22 y(2) = 1 5 + 2 4 + 3 3 = 22
[5 4 3] [5 4 3]
[1 2 3] [1 2 3]
y(3) = 2 5 + 3 4 = 22 y(3) = y(0)
[5 4 3] [3 5 4]
[1 2 3] [1 2 3]
y(4) = 3 5 = 15 y(4) = y(1)
[5 4 3] [4 3 5]

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

Avec la mthode overlap-add, on a trois valeurs au dpart de x(n) et on se retrouve avec


cinq valeurs y(n). On a un dbordement de deux valeurs y(n) sur le segment suivant, qu'il
faut conserver.

HE-Arc, Ingnierie 44
Filtrage numrique

Avec la mthode overlap-save, on a trois valeurs au dpart de x(n) et on se retrouve avec


trois valeurs y(n). Pour cela, on a d garder les deux derniers chantillons x(n) du
segment prcdent et on a rejet les deux premires valeurs de y(n).

8.2 Filtrage par FFT : mthode 'overlap-add'


Le nombre Ny doit tre absolument une puissance de deux. Le cas le plus efficace est le cas
limite suivant :
Nombre d'chantillons par segment l'entre : Nx = 2n
Nombre de taps : Nh = Nx +1
Longueur du segment de sortie : Ny = Nx + Nh 1 = 2Nx
Longueur du dbordement sur le segment y(n) suivant : Nss = Ny Nx = Nx
Par exemple, pour n=7, on aurait : Nx = 128, Nh = 129, Ny = 256 et Nss=128. Nous garderons
cet exemple par la suite.
Pour viter la convolution circulaire :
On ajoute Ny Nh = 127 zros au filtre droite des valeurs h(n) originales.
Pour chaque segment de Nx=128 chantillons, on ajoute Nx zros droite des valeurs
x(n) originales.
La Figure 51 illustre les transformations h'(n) et x'(n) partir de h(n) et x(n).
h'(n)

Nh=129 valeurs originales NyNh=127 zros


Nh/ = 256 taps
x'(n)

Nx=128 valeurs originales Nx = 128 zros


Nx/ = 256 chantillons

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

8.2.1 Nombre de taps quelconque, cas gnral


L'ide de poser un nombre de taps comme dans l'exemple prcdent : Nh = Nx +1 est bonne,
mais on peut aussi raliser de l'overlap-add avec un nombre de taps quelconque. La seule
condition est que Ny doit tre une puissance de deux.
Cas gnral :
Nombre de taps : Nh
Nombre de valeurs y(n) par segment de sortie : Ny = 2n avec Ny 2(Nh 1)
Nombre d'chantillons x(n) par segment l'entre : Nx = 1 + Ny Nh
Longueur du dbordement sur le segment de sortie suivant : Nss = Ny Nx
Par exemple, si on veut raliser un filtre FIR de Nh=400 taps, on choisira Ny=1024 et Nx=625
chantillons. Le dbordement vaudra Nss=399 valeurs de y(n).

8.2.2 Recette de cuisine


Voici les oprations effectuer pour effectuer du filtrage par FFT par la mthode overlap-add.
1) On fixe le nombre de coefficients du rsultat Ny, qui doit tre une puissance de 2. Par
exemple, Ny = 1024.
2) On fixe le nombre de coefficients du filtre Nh 1+Ny/2. Dans le cas choisi par rapport
au point prcdent, le cas le plus intressant est le cas limite Nhlim = 513. Pour
l'exemple, nous choisirons Nh = 400 taps.
3) On cre h'(n) de longueur Nh'=Ny=1024 en ajoutant Ny Nh = 624 zros la suite de
h(n). Plus formellement, on a :
Pour 0 n Nh1, h'(n) = h(n)
Pour Nh n Ny1, h'(n) = 0
On a donc h'(n) = {h(0), h(1), h(2), , h(399), 0, 0, ,0)

HE-Arc, Ingnierie 46
Filtrage numrique

4) On calcule la FFT H'(k)=FFT(h'(n)). On a Ny/2=512 raies spectrales significatives


Les oprations 1) 4) sont effectues une seule fois l'avance et non pas pour chaque
segment !
5) Les segments du signal chantillonn comprennent Nx = 1 + Ny Nh = 625
chantillons. Pour chaque segment x(n), on cre un segment x'(n) de longueur
Nx'=Ny=1024 en ajoutant Ny Nx = 399 zros la suite de x(n). Plus formellement,
on a :
Pour 0 n Nx1=624, x'(n) = x(n)
Pour Nx n Ny1, x'(n) = 0
On a donc x'(n) = {x(0), x(1), x(2), , x(624), 0, 0, ,0)
6) On calcule la FFT X'(k)=FFT(x'(n)). On a Ny/2=512 raies spectrales significatives.
7) On trouve Y(k)=H(k)X(k) (512 raies significatives, donc 512 multipl. complexes)

8) On retrouve y(n)=IFFT(Y(k)) (1024 valeurs, donc un dbordement de 399 valeurs)

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.

8.3 Filtrage par FFT : mthode 'overlap-save'


Le nombre d'chantillons du segment d'entre Nx doit tre absolument une puissance de deux.
Le cas le plus efficace est le cas limite suivant :
Nombre d'chantillons x(n) par segment l'entre : Nx = 2(n+1)
o Nombre d'chantillons x(n) conservs du segment prcdent : Nsp = Nh1 = Nx/2
o Nombre de nouveaux chantillons x(n) : Nxnew = Nx Nsp = Nx/2
Nombre de taps : Nh = Nx/2+1
Nombre de valeurs y(n) conserver par segment de sortie : Ny = Nx/2
Nombre de valeurs y(n) rejeter par segment de sortie : Nrej = Nx Ny = Nx/2
Par exemple, pour n=7, on aurait : Nx = 256, Nsp = 128, Nh = 129, Ny = 128 et Nrej=128. Nous
garderons cet exemple par la suite.
Pour viter la convolution circulaire :
On ajoute Ny Nh = 127 zros au filtre droite des valeurs h(n) originales.
Chaque segment x(n) de Nx=256 chantillons est compos des Nsp=128 valeurs du
segment prcdent et de Nxnew = Nx Nsp = 128 nouvelles valeurs.
Aprs traitement, les Nrej=128 premires valeurs de y(n) sont rejeter et les Ny = 128
dernires valeurs de y(n) sont les bonnes.
La Figure 53 illustre la transformations h'(n) partir de h(n) et x(n).
h'(n)

Nh=129 valeurs originales NyNh=127 zros


Nh/ = 256 taps

HE-Arc, Ingnierie 47
Filtrage numrique

x(n)

128 derniers ch. 128 nouveaux ch.


Nx = 256 chantillons

Figure 53

A prsent, on peut s'amuser avec la FFT.

(
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

8.3.1 Nombre de taps quelconque, cas gnral


L'ide de poser un nombre de taps comme dans l'exemple prcdent : Nh = Nx +1 est bonne,
mais on peut aussi raliser de l'overlap-save avec un nombre de taps quelconque. La seule
condition est que Nx doit tre une puissance de deux.
Cas gnral :
Nombre de taps : Nh
Nombre d'chantillons x(n) par segment l'entre : Nx = 2(n+1) avec Nx 2(Nh 1)
o Nombre d'chantillons de Nx repris du segment prcdent : Nsp = Nh 1
o Nombre de nouveaux chantillons : Nxnew = Nx Nsp
Nombre de valeurs y(n) conserver par segment de sortie : Ny = 1 + Nx Nh
Nombre de valeurs y(n) rejeter par segment de sortie : Nrej = Nx Ny = Nh 1

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.

8.3.2 Recette de cuisine


Voici les oprations effectuer pour effectuer du filtrage par FFT par la mthode overlap-add.
1) On fixe le nombre de coefficients d'entre Nx, qui doit tre une puissance de 2. Par
exemple, Nx = 1024.
2) On fixe le nombre de coefficients du filtre Nh 1+Nx/2. Dans le cas choisi par rapport
au point prcdent, le cas le plus intressant est le cas limite Nhlim = 513. Pour
l'exemple, nous choisirons Nh = 400 taps.
3) On cre h'(n) de longueur Nh'=Nx=1024 en ajoutant Nx Nh = 624 zros la suite de
h(n). Plus formellement, on a :
Pour 0 n Nh1, h'(n) = h(n)
Pour Nh n Ny1, h'(n) = 0
On a donc h'(n) = {h(0), h(1), h(2), , h(399), 0, 0, ,0)
4) On calcule la FFT H'(k)=FFT(h'(n)). On a Ny/2=512 raies spectrales significatives
Les oprations 1) 4) sont effectues une seule fois l'avance et non pas pour chaque
segment !
5) Les segments du signal chantillonn comprennent Nx = 1024 chantillons, avec la
composition suivante :
o Nombre d'chantillons de Nx repris du segment prcdent : Nsp = Nh 1 = 399
o Nombre de nouveaux chantillons : Nxnew = Nx Nsp = 625
6) On calcule la FFT X'(k)=FFT(x'(n)). On a Ny/2=512 raies spectrales significatives.
7) On trouve Y(k)=H(k)X(k) (512 raies significatives, donc 512 multipl. complexes)

8) On retrouve y(n)=IFFT(Y(k)) (1024 valeurs, donc 399 valeurs en trop)


9) Il reste supprimer les Nrej=399 premires valeurs de y et de conserver les Ny=625
dernires valeurs.
Ensuite, on reprend au point 5) pour le segment suivant.

8.4 Exemple d'application


L'annexe 7 fournit un exemple de filtrage par FFT selon la mthode "overlap-save". On a
admis les caractristiques suivantes :
Bf = 1 kHz (bande passante)
fstop = 1200 Hz (bande de rjection)
fe = 4Bf = 4 kHz (frq. d'chantillonnage)
Nx= 512, Ny=128, Nh=257
filtre FIR de type 'least square'.

HE-Arc, Ingnierie 49
Filtrage numrique

8.5 Calcul de performance


On a donc, pour dterminer N valeurs de y(n) :
une FFT de x(n) X(k)
une multiplication frquentielle terme terme Y(k)=H(k)X(k)
< une FFT inverse de Y(k) y(n)
Pour N chantillons de sortie, on a donc :
2 N log 2 (2 N ) + 2 N oprations (81)
Par chantillon de sortie, on a donc :
2 log 2 (2 N ) + 2 oprations (82)
On en conclut que par rapport un filtre FIR ncessitant N oprations, on a dj un rapport
favorable pour le filtrage FFT partir de N=10.
En ralit, les oprations lies la FFT sont des oprations avec des nombres complexes ! On
peut donc multiplier le nombre d'oprations par ~5. De plus, la FFT ncessite beaucoup de
place mmoire, une gestion complique de pointeurs qui cote aussi du temps. Si on ajoute le
retard important des chantillons de sortie (plus d'un bloc N de retard), la difficult de
recevoir et de renvoyer les chantillons aux temps nTe tout en calculant des FFT au milieu
(chantillonnage et restitution forcment par interruption, la boucle principale du programme
grant le calcul des FFT), on comprend que les choses ne sont pas aussi simples3.
A mon avis, le filtrage par FFT devient intressant ds qu'un filtre FIR dpasse 128 'taps'.

9 Filtres moyenne glissante


Un filtre fentre glissante est un filtre FIR de N coefficients qui a la fonction de transfert
suivante :

H(z) =
1
N
(
1 + z 1 + z 2 + ... + z N 1 ) (83)

Voici un exemple pour N=4 :

H(z) =
1
4
(
1 + z 1 + z 2 + z 3 ) (84)

Les coefficients du FIR valent tous ! Un schma possible serait le suivant :


x(n) z-1 z-1 z-1


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

Il y a plus simple encore. Reprenons (83) et multiplions-le de manire intelligente par un :


1 z 1
1
(
H(z) = 1 + z 1 + z 2 + ... + z N 1 )
1
(85)
N 1 z
1 1 z 1 + z 1 z 2 + z 2 ... z N 1 + z N 1 z N
H(z) =
N 1 z 1
1 1 z N
On conclut : H(z) = (86)
N 1 z 1
On a transform le filtre FIR en un filtre rcursif IIR ! De plus, ce filtre a l'air priori instable,
car il a un ple en z=1, exactement sur le cercle unit ! Cependant, comme il y a galement un
zro en z=1 (c'est vident en observant (85)), l'analyse de la stabilit est un peu plus
complique (voir 9.1).
On comprend mieux le passage la mthode IIR avec un exemple. Choisissons N=8 et
rflchissons aux valeurs n=10 et n=11.
x (10) + x (9) + x (8) + x (7) + x (6) + x (5) + x (4) + x (3)
On a : y(10) = (87)
8
x (11) + x (10) + x (9) + x (8) + x (7) + x (6) + x (5) + x (4)
y(11) =
8
Entre y(10) et y(11), il ne s'est pas pass grand chose : x(11) est entr dans l'quation et x(3)
en est sorti. On a pour n=11 :
x (11) x (3)
y(11) = y(10) + (88)
8
On gnralise avec n et N :
x (n ) x ( n N )
y(n ) = y(n 1) + (89)
N
On passe la transforme en Z :
X ( z ) z N X( z )
Y(z) = z 1 Y(z) + (90)
N
On retrouve (86) :
Y( z ) 1 1 z N
H(z) = = (91)
X(z) N 1 z 1
Selon cette structure IIR, on ralise l'quivalent de la Figure 55 au moyen de la Figure 56.
x(n) z-1 z-1 z-1 z-1

+

+
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 !

9.1 Structure IIR : stable ou instable ?


La structure IIR est plus performante que la structure FIR, mais il faut quand mme faire
attention ! Le ple situ sur le cercle unit peut quand mme gnrer des instabilits !
Imaginons, titre d'exemple, qu'un mtorologue veuille donner une moyenne
d'ensoleillement horaire en donnant des valeurs chaque minute, et ceci sur une anne
complte. Pour faire cela, il effectue chaque minute :
Retrait de la minute 60. Il reste les minutes 1..59 (59 minutes au total).
Ajout de la minute coule. Il reste les minutes 0..59 (60 minutes au total)
Il calcule la moyenne de l'ensoleillement sur les 60 minutes
Au bout de une anne, les petites erreurs accumules risquent d'avoir fait passablement
driver son modle La structure IIR est donc employer avec beaucoup de prudence. Avec
une structure FIR, on n'a pas ce problme !

9.2 Avantages/inconvnients du filtre moyenne glissante


Les deux structures (FIR et IIR) du filtre moyenne glissante sont simples raliser. Si on
choisit N=2n avec n entier, la division numrique par N est toute simple (dcalage). Ceci est
particulirement intressant, par exemple pour une FPGA ou un dsp de type 'fixed point'.
Malheureusement, ces passe-bas ne sont pas des foudres de guerre pour leur rponse en
amplitude !
On a pour N pair :

(cos( Te f ) + cos(3 Te f ) + ... + cos(( N 1) Te f )) e j( N 1) Te f


2
H (f ) =
N
On a pour N impair :

(1 + 2 cos(2 Te f ) + cos(4 Te f ) + ... + cos(( N 1) Te f )) e j( N 1)Te f


1
H (f ) =
N
Par exemple, pour N=4, on a :

(cos( Te f ) + cos(3 Te f )) e j3Te f


1
H (f ) = (92)
2

HE-Arc, Ingnierie 52
Filtrage numrique

Le rsultat est illustr par la Figure 57.


Rponse en amplitude (fe = 1 Hz)
1.1
1

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

Rp. amp. dB avec 1 , 2 et 3 cascades


10 10
0
HdB1 ( f)
10
HdB2 ( f) 20

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

Le tableau suivant illustre la situation (rappel : n=0).

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

Signal filtr avec filtre mdian (N=3)


2 2

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.

10.1 Dformation des signaux par le filtre mdian


Note Dans ce chapitre-ci, nous ne considrerons que les filtres mdians dont les taps sont
tous identiques (gaux un). Lorsque la pondration est diffrencie, les conclusions
de ce chapitre restent en gros valables (avec quelques nuances).
Le filtre mdian dforme les signaux (mme non bruits), en particulier lorsque la pente du
signal change l'intrieur de la fentre. Prenons par exemple la suite x(n) suivante, filtre
avec un FIR mdian de trois taps gaux : h(n) = {1; 1; 1}. Le rsultat du filtrage est y(n).
x (n ) = {...; 1; 2; 3; 4; 5; 4; 3; 2; 1; ...}
y(n ) = {...; ...;...; 2; 3; 4; 4; 4; 3; 2; ...}
La valeur 5 a t 'rabote' lorsque la fentre des chantillons valait {4; 5; 4} (changement de
pente). Lorsque la pente ne varie pas dans la fentre, le signal reste inchang avec un retard de
(N1)/2 = 1 valeur.

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 !

11 Intgrateur et drivateur numriques


La transformation bi-linaire est favorable lorsqu'il s'agit de niveaux, mais elle ne l'est pas en
ce qui concerne les pentes. Sa compression en tg(x) distord les pentes assez fortement (voir
l'annexe 8). Pour les drivateur et intgrateur numriques, on prfre en principe la
transformation par la diffrence du 6.1 page 28.

11.1 Drivateur numrique


On a donc pour le drivateur :
1
H d (s) = s

Z
H d (z) = (1 z 1 ) (94)
Te
Cette transformation correspond un drivateur seulement lorsque f << fe (voir l'annexe 8 et
la Figure 32 page 28).
La Figure 61 illustre la diffrence entre ce drivateur et un drivateur idal (la valeur f=1
correspond fe/2).
Diffrence - drivateur - amplitude
10 10

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

11.1.1 Ralisation pratique


Le drivateur dcrit par (94) est ralis l'aide d'une seule cellule de retard, comme l'illustre
la Figure 63. A noter que le drivateur est un filtre FIR deux coefficients.
z1
x(n)
1/Te 1/Te
y(n)
Figure 63

11.2 Intgrateur numrique


Un intgrateur numrique est dfini de la manire suivante :

x(n-2)
x(n-1) Surface = y(n)
x(n)
x(n-3)

n-3 n-2 n-1 n


Figure 64

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

11.2.1 Ralisation pratique


L'intgrateur dcrit par (97) est ralis l'aide d'une seule cellule de retard, comme l'illustre la
Figure 67.
Te
x(n) y(n)
z1

1
Figure 67

HE-Arc, Ingnierie 59
Annexe 1: comparaison de filtres FIR avec diffrentes fentres
Dfinitions gnrales :

sin( x) PhaseCorr( x) := cor 0


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 dsir :
Bf := 1 kHz
1
fe := 4 Bf Te :=
fe
fe fe fmax fmin
fmin := fmax := NbPts := 1024 f :=
2 2 NbPts

k := 0 .. NbPts 1

f := fmin + k f
k

H := si f
k ( k
Bf , 1 , 0 )
Filtre idal

Hk
0.5

2000 1500 1000 500 0 500 1000 1500 2000


fk

On a comme rponse h(t) :


h ( t) := 2 Bf sinc( 2 Bf t) Rponse impulsionnelle du filtre idal

On multiplie par Te et on obtient h'(t) :

hp( t) := 2 Bf Te sinc( 2 Bf t) avec : 2 Bf Te = 0.5

1
Annexe 1

On va prendre diffrents types de fentre.

Fentre 1 : NbTaps := 9

t := n
NbTaps 1
n := 0 .. NbTaps 1 Te Tf := NbTaps Te
n
2

Fentre rectangulaire : wr := 1
n

Fentre de Hamming : wh := 0.54 0.46 cos


2
n
n
NbTaps 1

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

8 .10 6 .10 4 .10 2 .10 2 .10 4 .10 6 .10 8 .10


4 4 4 4 4 4 4 4
0.001 0 0.001
tn
Transforme en Z des deux filtres :

Fentre rectangulaire : Fentre de Hamming :


NbTaps 1
n NbTaps1
Hrz( z) :=
h z
n Hhz( z) :=
hh z
n
n
n =0
n =0

Hrf := Hrz e
k
( j2Tef )
k
Hhf := Hhz e ( j2Tef ) k
k

Comparaison Rectangulaire-Hamming

1
Hrfk

Hhf k

Hk 0.5

2000 1500 1000 500 0 500 1000 1500 2000


fk

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

Fentre de Hamming : wh := 0.54 0.46 cos


2
n
n
NbTaps 1

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

0.003 0.002 0.001 0 0.001 0.002 0.003


tn
Transforme en Z des deux filtres :

Fentre rectangulaire : Fentre de Hamming :


NbTaps 1
n NbTaps1
Hrz( z) :=
h z
n Hhz( z) :=
hh z
n
n
n =0
n =0

Hrf := Hrz e
k
( j2Tef )
k
Hhf := Hhz e ( j2Tef ) k
k

Comparaison Rectangulaire-Hamming

1
Hrfk

Hhf k

Hk 0.5

2000 1500 1000 500 0 500 1000 1500 2000


fk

3
Annexe 1
k

Fentre 3 : NbTaps := 101

t := n
NbTaps 1
n := 0 .. NbTaps 1 Te Tf := NbTaps Te
n
2

Fentre rectangulaire : wr := 1
n

Fentre de Hamming : wh := 0.54 0.46 cos


2
n
n
NbTaps 1
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

0.01 0.005 0 0.005 0.01


tn
Transforme en Z des deux filtres :
Fentre rectangulaire : Fentre de Hamming :
NbTaps 1
n NbTaps1
Hrz( z) :=
h z
n Hhz( z) :=
hh z
n
n
n =0
n =0

Hrf := Hrz e
k
( )
j2Tefk
Hhf := Hhz e
k
( j2Tefk
)
Comparaison Rectangulaire-Hamming

1
Hrfk

Hhf k

Hk 0.5

2000 1500 1000 500 0 500 1000 1500 2000


fk

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

Si on veut apprcier tout cela en dB :

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 !

Avec un zoom sur la bande passante...

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

Les signaux au dpart


x(n)

n=0 n

n=0 n

Convolution pour n=0


x(k)

k=0
k

h(0k)

k=0
k

y(n)
y(0)

n=0 n

Convolution pour n=5

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 prend un signal de bande passante B=20 kHz.


V
A := 1
s
Bs := 20 kHz

x( t) := sit 0 , sin( 2 Bs t) ( 1 cos( 2 Bs t) ) , 2 A Bs


3 A A

2 t 2 2
2 Bs t

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

Signal chantillonn (domaine temporel) : x := x t


n ( n)
Signal chantillonn x(n*Te)

xn

3 .10 2 .10 1 .10 1 .10 2 .10 3 .10


4 4 4 4 4 4
0
tn

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

Rponse en amplitude |X(f)| unilat.

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

A prsent on filtre avec un filtre FIR export de Matlab :

h := LIREPRN( "sous-echantillonnage.prn" )
NbTaps := dernier( h ) + 1 NbTaps = 389

m := 0 .. NbTaps 1

A prsent on filtre (passe-bas, B=1 kHz).


n
xf :=
n (
si m 0 , x h
m n m
,0 ) XF := FFT( xf ) Tf
m = nNbTaps+ 1

Rponse en amplitude aprs filtrage

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

A prsent on va effectuer l'opration qui consiste prendre un chantillon sur 16 !!!


NbPts
NbPts2 := NbPts2 = 512 On n'a donc plus que 512 points.
16
NbPts fs
m := 0 .. NbPts2 1 k := 0 .. 1 f := k f fe :=
2 k 16
xfs := xf
m m16

XFS := FFT( xfs) Tf

Voici donc le signal de 0 fe/2. Le signal est propre de 0 1 kHz.

Rponse en amplitude du signal dcim

0.6

XFSk 0.4

0.2

0 200 400 600 800 1000 1200


fk

3
Annexe 4 - Essai de sur-chantillonnage
Dfinitions gnrales :

sin( x)
sinc( x) := si x 0 , , 1
x

On prend un signal de bande passante carre avec B=20*kHz.


V
A := 1 B := 20 kHz x( t) := 2 B A sinc( 2 B t) X( f) := si( f < B , A , 0 A)
Hz

Voici donc le signal x(t)<-->X(f) d'origine :

Signal x(t) Signal X(f)


1

x( t) X ( f)
0.5

2 .10 1 .10 1 .10 2 .10


4 4 4 4
0
1 .10 5 .10 5 .10 1 .10
5 4 4 5
0
t f

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

Signal chantillonn : Signal x(t) non chantillonn (signal original)


t := tmin + n Ts k := 0 .. Nb_Ts 8
n
( k)
Ts
t1 := tmin + k xid := x t1
x1 := x t
n ( n) k 8 k

1
Annexe 4

Voici donc le signal chantillonn x1(t) :

Signal chantillonn x1(t)

4 .10
4

x1n
2 .10
4

xidk

1 .10 5 .10 5 .10 1 .10


4 5 5 4
0
tn , t1k

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

Rp. en ampl. |X1(f)| pour -fs < f <fs

4 .10
4

X1m

2 .10
4

4 .10 3 .10 2 .10 1 .10 1 .10 2 .10 3 .10 4 .10


4 4 4 4 4 4 4 4
0
fm

2
Annexe 4

On sur-chantillonne d'un facteur 4. Tout d'abord on rajoute des zros entre chaque chantillon.

fct := 4 Nb_Te := fct Nb_Ts Nb_Te = 4096


1 6
fe := fct fs fe = 176.4 kHz Te := Te = 5.669 10 s
fe
n := 0 .. Nb_Te 1 m := 0 .. Nb_Ts 1
t := tmin + n Te
n
x2 := 0 x1 x2 := x1
n 0 4m m

Signal x2(t)

4 .10
4

x2n
2 .10
4

xidk

1 .10 5 .10 5 .10 1 .10


4 5 5 4
0
tn , t1k

On pratique une analyse frquentielle du signal avant le filtrage pour -fe < f < fe:

X2_tmp := FFT( x2) Nb_Te m := 0 .. 2 Nb_Te


f := ( m Nb_Te) f
m

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

|X2(f)| pour -fe < f < fe avant filtrage

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

A prsent on filtre avec un filtre FIR export de Matlab :

h := LIREPRN( "sur-echantillonnage.prn" )
NbTaps := dernier( h ) + 1 NbTaps = 287
m := 0 .. NbTaps 1

Attention : le gain du filtre doit tre 4 ! On multiplie donc les coefficients...


h := h fct
m m

A prsent on filtre...
n
x3_tmp :=
n (
si m 0 , x2 h
m n m
,0 )
m = n NbTaps+1

On peut prsent apprcier le rsultat.

Attention : pour pouvoir comparer, il faut enlever le retard li au filtre FIR...

x3 := si n < dernier( x3_tmp)


NbTaps 1
, x3_tmp , 0 x3_tmp
n 2 NbTaps 1 0
n+
2
Rsultat final dans le domaine temporel

4 .10
4

x3n
2 .10
4

xidk

1 .10 5 .10 5 .10 1 .10


4 5 5 4
0
tn , t1k

4
Annexe 4

On pratique une analyse frquentielle du signal filtr pour -fe < f < fe:

X3_tmp := FFT( x3) Nb_Te m := 0 .. 2 Nb_Te

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

|X3(f)| de -fe fe aprs filtrage

1.5 .10
5

X3m
1 .10
5

5 .10
4

1.5 .10 1 .10 5 .10 5 .10 1 .10 1.5 .10


5 5 4 4 5 5
0
fm

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.

|X3(f)| normalise de -fe fe

X3m Te
0.5

1.5 .10 1 .10 5 .10 5 .10 1 .10 1.5 .10


5 5 4 4 5 5
0
fm

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

fe := 30 B On prend une marge confortable pour respecter Shannon...


1 6
Te := Te = 33.333 10 s
fe

La longueur du filtre FIR est la suivante :


Tmin := 0 sec
1
Tmax := ( NbTaps 1 ) Te Tf := Tmax Tmin f := Tf B = 34.1 Nombre de priodes sinc
Tf
Le retard du filtre est le suivant :
Tf
:= = 17.05 ms
2

Filtre en temps
ht( t) := 2 B sinc( 2 B t) Rponse impulsionnelle du filtre idal non fentr (de fait: fentre rectangulaire)

Calcul des paramtres (taps) :


n := 0 .. NbTaps 1 t := Tmin + n Te
n

La courbe du filtre peut enfin tre calcule (non calibre !) :

( ( n ))
h1 := Te ht t
n

Calibration DC : on veut un gain de 1 pour le DC


NbTaps 1
Somme_h1 :=
h1
n
Somme_h1 = 0.995 Il faut diviser tous les coefficients g1n par Somme_gv1
pour obtenir un gain de 1 en DC.
n =0
h1
n
h := hvmax := max( h ) hvmax = 0.067
n Somme_h1

1
Annexe 5

Rp. impuls. du filtre h(n*Te)


0.074

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

Transforme en Z : Transforme de Fourier

( j 2Te f )
NbTaps 1
n

w
Hz( z) := h z H := Hz e
n w
n =0

Phs_tmp := PhaseCorr( arg( H) ) Phs := Phs_tmp Phs_tmp


w w mid

Rponse en amplitude du filtre |H(f)|


1

Hw
0.5

2000 1500 1000 500 0 500 1000 1500 2000


fw

Rponse en phase du filtre arg(H(f))

Phsw
2000 1500 1000 500 0 500 1000 1500 2000

fw

2
Annexe 5

Signal transform en temps


U0 := 1 V
La longueur du signal est dtermine par le nombre de points

Nb_sig := 2 NbTaps

k := 0 .. Nb_sig 1 tmin := 0 Te tmax := Nb_sig Te


t := k Te
k
Signal d'entre proprement dit...
Ue := U0 cos0.7 ( 2 B) t + cos1.2 ( 2 B) t
k k
k

Voyons prsent la convolution...
k
Us :=
k (
si m 0 , Ue h
m k m
, 0 V )
m = k NbTaps+ 1

Signal d'entre...

Signal avant filtrage


2

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

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 impulsionnelle

0.05
Usk

0 0.0085 0.0171 0.0256 0.0341 0.0427 0.0512 0.0597 0.0683

tk

On compare avec le retard : = 17.05 ms

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

0 0.0085 0.0171 0.0256 0.0341 0.0427 0.0512 0.0597 0.0683

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

Filtre dans Fourier :

Hf ( fa) := Hs( j 2 fa)

fmin := 4 Ba fmax := 4 Ba Nb_f := 1024 fa := fmin , fmin + fmax fmin .. fmax


Nb_f

Filtre RC analogique - Rp. en ampl.

Hf( fa)

lim3dB
0.5

4000 3000 2000 1000 0 1000 2000 3000 4000


fa

Hf ( Ba) = 0.707 On a bien 3 dB d'affaiblissement la frquence fa=Ba.

On passe la transformation bi-linaire :


1
Hz( z) :=
2 z1
1+
Te z+1

Si on apprcie le rsultat de Hz(z) dans Fourier :

f := fmin , fmin + fmax fmin .. fmax


Nb_f

H( f) := Hz e ( j2fTe)
arctan( Te Ba)
1
B := B = 847.689 Hz
Te

1
Annexe 6

La dernire quation signifie que la bande passante du filtre original a t comprime.


Voici donc le rsultat numrique :
Rp. en ampl |H(f)| aprs transformation

H ( f)

lim3dB
0.5

4000 3000 2000 1000 0 1000 2000 3000 4000


f

H( B) = 0.707 On a bien 3 dB d'affaiblissement la frquence f=B.

Procdure suivre pour un filtre numrique


tan( Te B )
1
On pose : B := 1 kHz Ba := Ba = 1273.24 Hz
Te

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

Si on apprcie le rsultat de Hz(z) dans Fourier : H( f) := Hz e ( j2fTe)


Rp. en ampl. |H(f)| aprs correction

H ( f)

lim3dB
0.5

4000 3000 2000 1000 0 1000 2000 3000 4000


f

Hf ( 1 kHz) = 0.707 Cette fois-ci, c'est gagn...

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

Nombre d'chantillons x(n) par segment Nx := 2 N Nx = 512


Nombre de valeurs y(n) par segment Ny := N Ny = 256
Nombre de coefficients du filtre FIR NbTaps = 257

Nombre de FFT : Nb_FFT := 6

Nombre de points au total : NbPts := N Nb_FFT NbPts = 1536

On choisit volontairement un cas assez dfavorable :

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

0 0.064 0.13 0.19 0.26 0.32 0.38


tn

1
Annexe 7

On cherche h(n) avec les termes h(n<N)=0


h := h1 h := 0
k k k+ N

l := 0 .. 2 N 1

Rponse impulsionnelle h'(n)

0.5

hl

0 50 100 150 200 250 300 350 400 450 500

A prsent on calcule la FFT :


1
Tf := 2 N Te f := f := k f
Tf k

H := FFT( h) 2 N

FFT de h(n) - Filtre FIR

Hk

0.5

0 200 400 600 800 1000 1200 1400 1600 1800 2000
fk

A prsent on applique l'algorithme magique :


y := for L 0 .. Nb_FFT 1
Ltmp N L
for k 0 .. ( 2 N 1 )
ktmp Ltmp + k

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

On apprcie le signal filtr...


Signal filtr
1

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

Bilinaire - drivat. - ampl. 0<f<fe/2


10

D ( f)

Dideal( f) 5

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9


f

A partir de 40% de fe/2, on a une divergence importante.

Au niveau de la phase il n'y a pas de problme :


Bilinaire - drivat. - phase 0<f<fe/2
3

arg( D( f) ) 2

arg( Dideal( f) )

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9


f
Les courbes de phase sont confondues.

1
Annexe 8

Te z+1
Intgrateur : Iz( z) :=
2 z1

On a : I( f) := Iz e( j2Tef) Iideal( f) :=
1
j 2 f

Bilinaire - intgrat. - ampl. 0<f<fe/2

I( f)

Iideal( f)
2

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9


f

Au niveau de la phase il n'y a pas de problme :


Bilinaire - intgrat. - phase 0<f<fe/2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

1
arg( I( f) )

arg( Iideal( f) )

Les courbes de phase sont confondues.

2
Annexe 8

Transformation par la diffrence

Drivateur : Dz( z) :=
1
Te
(
1z
1
)

On a : D( f) := Dz e( j2Tef) Dideal( f) := j 2 f

Diffrence - drivat. - ampl. 0<f<fe/2


10

D ( f)

Dideal( f) 5

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9


f

On diverge un peu moins qu'avec la bi-linaire, mais on diverge quand mme.

Au niveau de la phase il y a un retard. Par contre, il n'y a pas de distorsion.


Diffrence - drivat. - phase 0<f<fe/2
3

arg( D( f) ) 2

arg( Dideal( f) )

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9


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

Diffrence - intgrat. - ampl. 0<f<fe/2

I( f)

Iideal( f)
2

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9


f

On peut dire que jusqu' 30% de fe/2, donc 15% de fe, on a une intgration correcte.

Au niveau de la phase il y a une 'avance'. Par contre, il n'y a pas de distorsion.


Diffrence - intgrat. - phase 0<f<fe/2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

1
arg( I( f) )

arg( Iideal( f) )

Te
Cette 'avance' est gal a : :=
2

A noter que l'intgrateur est un SLD instable, comme d'ailleurs en analogique...

4
Annexe 8

Exemple d'application

NbPts := 1024 n := 0 .. NbPts 1 t := n Te tmin := 0 Te tmax := ( NbPts 1 ) Te


n

On intgre un cosinus dont la frquence est le 50me de la demi-frquence d'chantillonnage.


Ensuite on comparera avec le signal idal (on profite pour corriger le dcalage de Te/2).

( )
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

Intgrations pour fcos=fe/100

yn

yidealn
0 50 100 150 200 250 300 350 400 450 500

tn

Il y a un lger problme d'offset DC, que l'on peut supprimer.


NbPts 1


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

Intgrations pour fcos=fe/100

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

Intgrations pour fcos=fe/4

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

Intgrations pour fcos=fe/4

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