91
Denis Prêtre, dernière révision : 23/09/2004 1 Filtrage numérique Références: Netzwerktheorie II (G. S. Moschytz) Digitale Signalverarbeitung (D. Von Grünigen) Traitement numérique du signal (G. Blanchet) 1 Glossaire e(t) x(t) y(t) k(t) k'(t) x e (t) y e (t) k e '(t) k ef '(t) k efd '(t) w(t) x(n T e ) y(n T e ) h(n T e ) h c (n T e ) Signal de l'échantillonnage idéal Signal analogique d'entrée Signal analogique de sortie Réponse impulsionnelle d'un système linéaire analogique idéal k'(t)=T e k(t) Signal x(t) échantillonné Signal y(t) échantillonné Signal idéal k'(t) échantillonné Signal idéal k'(t) échantillonné et fenêtré Signal idéal k'(t) échantillonné, fenêtré et décalé Fenêtre Signal à l'entrée d'un système linéaire discret Signal à la sortie d'un système linéaire discret Réponse impulsionnelle d'un système linéaire discret (filtre numérique) Réponse impulsionnelle calibrée X (f) Y (f) K (f) K e ' (f) K ef ' (f) K efd ' (f) X e (f) Y e (f) W (f) H (f) Transformée de Fourier de x(t) (signal d'entrée) Transformée de Fourier de y(t) (signal de sortie) Fonction de transfert d'un système linéaire analogique idéal (TF de k(t)) Transformée de Fourier de k e '(t) Transformée de Fourier de k ef '(t) Transformée de Fourier de k efd '(t) Transformée de Fourier de x e (t) Transformée de Fourier de y e (t) Transformée de Fourier de w(t) Fonction de transfert générale X(z) Y(z) K'(z) Transformée en Z de x(n T e ) Transformée en Z de y(n T e ) Transformée en Z de k'(n T e ) B B f T e f e T f N f 0 f a B a NbTaps N m, n, k, p Bande passante de x(t)X (f) Bande passante du filtre idéal k(t)K (f) Période d'échantillonnage (T e = 1/f e ) Fréquence d'échantillonnage (f e = 1/T e >2B) Durée de la fenêtre d'échantillonnage Ordre de H(z) Fréquence de référence pour un filtre analogique Fréquence du modèle analogique Bande passante du modèle analogique Nombre total de coefficients du filtre FIR. Ordre d'un filtre, Nombre de points FFT Indices de sommation, appartiennent à 9.

Filtrage numérique - robertponge · Filtrage numérique HE-Arc, Ingénierie 3 3 Filtres FIR Préliminaire La théorie des filtres FIR s'appuie au départ sur un modèle de filtre

  • Upload
    vandung

  • View
    222

  • Download
    0

Embed Size (px)

Citation preview

Denis Prêtre, dernière révision : 23/09/2004 1

Filtrage numérique

Références: Netzwerktheorie II (G. S. Moschytz) Digitale Signalverarbeitung (D. Von Grünigen) Traitement numérique du signal (G. Blanchet)

1 Glossaire e(t) x(t) y(t) k(t) k'(t) xe(t) ye(t) ke'(t) kef'(t) kefd'(t) w(t) x(n⋅Te) y(n⋅Te) h(n⋅Te) hc(n⋅Te)

Signal de l'échantillonnage idéal Signal analogique d'entrée Signal analogique de sortie Réponse impulsionnelle d'un système linéaire analogique idéal k'(t)=Te⋅k(t) Signal x(t) échantillonné Signal y(t) échantillonné Signal idéal k'(t) échantillonné Signal idéal k'(t) échantillonné et fenêtré Signal idéal k'(t) échantillonné, fenêtré et décalé Fenêtre Signal à l'entrée d'un système linéaire discret Signal à la sortie d'un système linéaire discret Réponse impulsionnelle d'un système linéaire discret (filtre numérique) Réponse impulsionnelle calibrée

X(f) Y(f) K(f) Ke'(f) Kef'(f) Kefd'(f) Xe(f) Ye(f) W(f) H(f)

Transformée de Fourier de x(t) (signal d'entrée) Transformée de Fourier de y(t) (signal de sortie) Fonction de transfert d'un système linéaire analogique idéal (TF de k(t)) Transformée de Fourier de ke'(t) Transformée de Fourier de kef'(t) Transformée de Fourier de kefd'(t) Transformée de Fourier de xe(t) Transformée de Fourier de ye(t) Transformée de Fourier de w(t) Fonction de transfert générale

X(z) Y(z) K'(z)

Transformée en Z de x(n⋅Te) Transformée en Z de y(n⋅Te) Transformée en Z de k'(n⋅Te)

B Bf Te fe Tf N f0 fa Ba NbTaps N m, n, k, p

Bande passante de x(t)↔X(f) Bande passante du filtre idéal k(t)↔K(f) Période d'échantillonnage (Te = 1/fe) Fréquence d'échantillonnage (fe = 1/Te >2B) Durée de la fenêtre d'échantillonnage Ordre de H(z) Fréquence de référence pour un filtre analogique Fréquence du modèle analogique Bande passante du modèle analogique Nombre total de coefficients du filtre FIR. Ordre d'un filtre, Nombre de points FFT Indices de sommation, appartiennent à 9.

Filtrage numérique

HE-Arc, Ingénierie 2

2 Introduction

Les filtres numériques présentent par rapport aux filtres analogiques les avantages- inconvénients suivants :

Avantages - Les filtres numériques sont insensibles aux conditions extérieures (chaleur, humidité, etc.)

- Certains filtres numériques sont impossibles à réaliser de manière analogique (exemple: les filtres FIR).

- Les filtres numériques ne sont pas sensibles aux non-idéalités d'un amplificateur opérationnel. Ainsi, un filtre IIR du 10ème ordre est tout à fait envisageable (attention quand même au bruit de calcul !).

- La problématique du bruit change d'aspect: dans le filtrage numérique on parle de 'bruit de quantification' et de 'bruit de calcul'. Le premier est lié au nombre de bits employés pour la quantification (8 bits, 16 bits, etc.). Le second est négligeable si l'unité de calcul est de type 'floating point'. De toute manière, le bruit numérique est localisé: on sait d'où il vient et il reste stable.

Inconvénients - Les filtres numériques nécessitent 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 problèmes peuvent apparaître si l'unité de calcul est de type 'fixed point'. Les paramètres d'un filtre nécessitent parfois une double précision pour être opérationnels, ce qui ralentit les performances.

On trouve essentiellement deux grandes familles de filtres numériques :

Filtres FIR Finite Impulse Response. Ces filtres non récursifs n'ont pas de contre-réaction.

Avantages - Toujours stables. - Phase linéaire si symétrie des coefficients → pas de distorsion

de phase. - Possibilité de réaliser toutes sortes de filtres 'ébouriffants' en

dessinant simplement des gabarits de réponse en amplitude |K(f)| et en calculant la transformée de Fourier inverse k(t).

Inconvénients - 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 récursifs ont une contre-réaction.

Avantages - Beaucoup moins de calculs par rapport à un FIR équivalent au niveau des performances.

Inconvénients - Il faut vérifier la stabilité. - Phase non linéaire → distorsion de phase

Filtrage numérique

HE-Arc, Ingénierie 3

3 Filtres FIR

Préliminaire La théorie des filtres FIR s'appuie au départ sur un modèle de filtre idéal. La perfection n'étant pas de ce monde, on arrive au bout du compte à un filtre réel, plus ou moins proche du modèle idéal. Pour éviter toute confusion, le filtre idéal sera par la suite caractérisé par la lettre k (k(t), K(f), etc.), alors que le filtre réel sera caractérisé par la lettre h (h(t), H(f), etc.).

Rappel La fonction 'sinus cardinal' sinc(x) est définie de la manière suivante :

=

≠⋅π

⋅π=

0xsi1

0xsix

)xsin()x(csin (1)

Les filtres FIR (Finite Impulse Response) n'ont qu'un défaut: ils demandent une grosse capacité de calcul. Avec les performances toujours plus importantes des unités de calcul (DSP, ou même FPGA !), ils sont de plus en plus utilisés. Pour illustrer l'idée sous-jacente, imaginons un signal d'entrée x(t)↔X(f) de bande passante B. Nous aimerions filtrer ce signal avec le filtre passe-bas idéal k(t)↔K(f). La Figure 1 explique les étapes du filtrage.

t

x(t)

t

xe(t)

f

X(f)

B-B

f

fe.X(f)

fe-fe

Domaine temporel Domaine fréquentiel

Ax

Ax.fe

-fe/2 fe/2

k'(t)=Te.k(t) Te

.K(f) Te

1ke'(t)=Te

.ke(t)

Te

t f

Ye(f)=Ke'(f).Xe(f)

fe-fe

Ax.fe

-fe/2 fe/2

ye(t)=ke'(t)*xe(t)y(t)

1

2

3

K(f) K(f−fe)K(f+fe)

fe.X(f+fe) fe

.X(f−fe)

fe.Y(f) fe

.Y(f−fe)fe.Y(f+fe)

-Bf Bf

Ke'(f), Xe(f)

Figure 1

Filtrage numérique

HE-Arc, Ingénierie 4

La Figure 1 est composée de trois parties :

1) Le signal x(t) est le signal à filtrer. Le filtre k(t)↔K(f) est ici un passe-bas idéal de gain unitaire (G=1) et de bande passante Bf. On définit le très important signal suivant :

)t(kT)t('k e ⋅= (2)

Te étant la période d'échantillonnage. 2) Les signaux x(t) et k'(t) sont échantillonnés. On obtient xe(t) et ke'(t), dont les

transformées de Fourier sont les suivantes :

∑∞

−∞=

−∞=

⋅−=

⋅−⋅=

kee

keee

)fkf(K)f('K

)fkf(Xf)f(X (3)

A noter que le facteur multiplicatif fe disparaît pour Ke'(f), du fait qu'on avait préalablement multiplié k(t) par Te.

3) Le signal de sortie ye(t)↔Ye (f) est le suivant :

)fkf(K)fkf(Xf)f(Y

)f('K)f(X)f(Y

ek

eee

eee

⋅−⋅⋅−⋅=

⋅=

∑∞

−∞=

(4)

Si on reste dans l'intervalle fréquentiel –½fe < f < ½fe, on trouve tout simplement :

)f(K)f(Xf)f(Y ee ⋅⋅= pour –½fe < f < ½fe (5)

Le facteur fe de (5) est normal. Il est le 'signe distinctif' de l'échantillonnage idéal. Si on restitue le signal analogique (par exemple par maintien), ce facteur fe disparaît et on retrouve y(t).

3.1 Filtres FIR et transformée en Z

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

)z('K)Tn('k

)z(Y)Tn(y

)z(X)Tn(x

Ze

Ze

Ze

→⋅

→⋅

→⋅

(6)

Dans Z, la relation (5) devient :

)z('K)z(X)z(Y ⋅= (7) Et dans le domaine temporel :

( ) ( ) ( )eee Tn'k*TnxTny ⋅⋅=⋅ (8)

ou encore, et en 'oubliant' la période Te dans les arguments :

∑∑∞

−∞=

−∞=

⋅−=−⋅=kk

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

Filtrage numérique

HE-Arc, Ingénierie 5

3.2 Principes

L'idée du filtre FIR est de réaliser le filtrage numériquement au moyen du produit de convolution défini par (9).

Avantage - Cette manière de procéder permet de réaliser n'importe quel filtre ! Il suffit par exemple d'imaginer un filtre K(f) dans le domaine fréquentiel, de chercher sa réponse impulsionnelle k(t) et le tour est joué. Par simple convolution, on arrive à filtrer numériquement n'importe quel signal x(n⋅Te).

Problèmes - La réponse impulsionnelle k(t) est définie pour −∞ < t <+∞. On ne peut pas réaliser numériquement un produit de convolution avec un tel signal, puisque dans ce cas on aurait un nombre infini de paramètres k'(n⋅Te). Pour remédier à cela, on va effectuer un fenêtrage, ce qui aura bien entendu des incidences sur le résultat.

- Même fenêtrée, la réponse impulsionnelle n'est pas causale ! Pour la rendre causale, il faut la 'déplacer' vers la gauche, ce qui entraîne :

- un déphasage dans le domaine fréquentiel - 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 fenêtrage

Pour illustrer notre propos, nous allons imaginer le filtre passe-bas idéal suivant :

f ffe-fe -fe/2 fe/2

1

K(f) K(f−fe)K(f+fe)

-Bf Bf Figure 2

avec : Bf = 1 kHz fe = 4⋅Bf = 4 kHz K(f)=1 lorsque −Bf ≤ f ≤ Bf La réponse impulsionnelle k(t) correspondante à K(f) est la suivante :

( )tB2csinB2)t(k ff ⋅⋅⋅⋅= avec −∞ < t <∞ (10) On multiplie k(t) par Te et on échantillonne :

∑∞

−∞=

⋅−δ⋅⋅⋅=n

eeee )Tnt()Tn(kT)t('k avec −∞ < t <∞ (11) Comme fe = 4⋅Bf, on a donc Te⋅Bf = ¼, et en définitive :

∑∞

−∞=

⋅−δ⋅

⋅=

nee )Tnt(

2n

csin21

)t('k avec −∞ < t <∞ (12)

Filtrage numérique

HE-Arc, Ingénierie 6

La transformée de Fourier Ke'(f) est donc la suivante :

∑∞

−∞=

⋅−=k

ee )fkf(K)f('K (13)

Le résultat est illustré par la Figure 2. Le filtre initial se répète avec une période fe. Comme ke'(t) a une durée infinie, on va le fenêtrer. Dans notre exemple, on va prendre une fenêtre rectangulaire de durée Tf = (NbTaps−1)⋅Te. Le nombre de 'taps' détermine la durée de la fenêtre, laquelle est choisie pour être un multiple de Te (on soustrait 1 parce que les bornes de la fenêtre sont comprises).

Dans notre exemple, on choisit NbTaps=21, donc Tf = 5 ms. On a donc :

)t(w)t('h)t('k eef ⋅= avec2T

t2T ff ≤≤− (14)

∑−=

⋅−δ⋅

⋅=

10

10neef )Tnt(

2n

csin21

)t('k (15) Le résultat dans le domaine temporel est illustré par la Figure 3. On vérifie qu'il y a bien 21 'taps' dans la fenêtre (les limites de la fenêtre sont comprises !).

8 6 4 2 0 2 4 6 8

0

0.5

1

signal kef'(t) et fenêtre (t en ms)1.1

0.2−

wn

kefn

tamaxtamin tn Figure 3

Dans le domaine fréquentiel, cela correspond au produit de convolution suivant :

)f(W*)f('K)f('K eef = (16)

Filtrage numérique

HE-Arc, Ingénierie 7

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

2 1.5 1 0.5 0 0.5 1 1.5 20

0.5

1

Convol. avec fenêtre rectang. (f en kHz)1.1

0

Ki

Kfi

Xefi

fe2

fe−2

f i

Figure 4

Bien entendu, on peut utiliser des fenêtres différentes. La fenêtre rectangulaire n'est ici pas idéale. Par défaut, Matlab propose la fenêtre de Hamming. L'annexe 1 établit une comparaison entre la fenêtre rectangulaire et celle de Hamming. En filtrage numérique, on voit aussi beaucoup la fenêtre de Kaiser.

3.3.1 Compromis sur la durée de fenêtrage

La période d'échantillonnage étant connue, on ne parle pas de la durée de la fenêtre, mais du nombre de 'taps' du filtre. Plus un filtre comporte de 'taps', plus sa fenêtre est grande et plus le filtre se rapproche du filtre idéal.

A l'inverse, plus le nombre de taps est grand, plus le produit de convolution numérique est long à effectuer.

3.4 Influence du décalage

Maintenant que le signal a été fenêtré (voir la Figure 3), il s'agit de le rendre causal. Il suffit pour cela de 'décaler' le signal kf'(t) d'une durée Tf/2 vers la droite (voir Figure 5).

t

kef'(t)

Te

t

kefd'(t)

Te

Tf Figure 5

Filtrage numérique

HE-Arc, Ingénierie 8

Dans le domaine fréquentiel, cela correspond à un retard :

−=

2T

t'k)t('k fefefd (17)

Si on considère que Tf = (NbTaps−1)⋅Te, on trouve encore :

⋅−

−=2

T)1NbTaps(t'k)t('k e

efefd (18) Par rapport à notre exemple, et en simplifiant :

∑=

⋅−δ⋅

−⋅=NbTaps

0neefd )Tnt(

41NbTaps

2n

csin21

)t('k (19) Dans le domaine fréquentiel, cela correspond à un déphasage :

tTjef

t2

T2j

efefdf

f

e)f('Ke)f('K)f('K ⋅⋅π⋅−⋅π⋅−⋅=⋅= (20)

Note importante Le filtre décrit par kefd'(t)↔Kefd'(f) est un filtre numérique causal, stable, avec une réponse impulsionnelle limitée dans le temps à NbTaps échantillons. Ce filtre est donc tout simplement… réalisable!

Par souci de simplicité, on pose à partir de maintenant h(n)=kefd'(n⋅Te).

−⋅=⋅=4

1NbTaps2n

csin21

)Tn('k)n(h eefd (21) La Figure 6 montre les coefficients de 0 à NbTaps−1 :

0 2 4 6 8 10 12 14 16 18 20

0

0.5

h(n) - coefficients du filtre (t en ms)0.6

0.2−

hn

NbTaps 1−0 n Figure 6

La transformée H(z) de h(n) est la suivante :

∑−

=

−⋅=1NbTaps

0n

nz)n(h)z(H (22)

)1NbTaps(1NbTaps

22

110 zh...zhzhh)z(H −−

−−− ⋅++⋅+⋅+= (23)

L'équation (23) est une fonction de transfert sans contre-réaction. Ce filtre est toujours stable; une impulsion de Kronecker-delta a une influence de durée limitée, à savoir Tf. C'est la raison pour laquelle on appelle ces filtres 'Finite Impulse Response'.

Filtrage numérique

HE-Arc, Ingénierie 9

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

N = NbTaps −1 (24)

3.5 Détermination des coefficients avec Matlab

On trouve facilement les 'taps' de notre filtre passe-bas avec Matlab. Tout d'abord, il faut préciser que Matlab calibre l'intervalle 0..fe de 0 à 2. Comme nous avons fe=4⋅B, 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') %Détermination des 'taps' (fenêtre rectangulaire) h_ham = FIR1(N,0.5,'low',hamming(NbTaps),'noscale') %Détermination des 'taps' (fenêtre de Hamming) h_han = FIR1(N,0.5,'low',hanning(NbTaps),'noscale') %Détermination des 'taps' (fenêtre de Hanning) A = [1] %Pas de contre-réaction impz(h_rect, A) %Graphe de la réponse 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=réponse indicielle plot(y, 'bo') %graphe de la réponse indicielle

3.6 Calibration des coefficients

Notre filtre passe-bas n'a pas forcément un gain de un pour le DC (f=0) ! On vérifie :

dB27.00315.1)n(h)1z(H

1ez0f1NbTaps

0n

0T2j 0

====

==→=

∑−

=

⋅π⋅

(25)

C'est assez gênant. Si on applique comme fonction d'entrée 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(n⋅Te) calibrées sont les suivantes :

)n(h)n(h

1)Tn(h 1NbTaps

0n

ec ⋅=⋅

∑−

=

0 ≤ n ≤ (NbTaps−1) (26)

Avec Matlab, c'est toujours aussi simple :

h_rect = FIR1(N,0.5,'low',boxcar(NbTaps),'scale') %Détermination des 'taps' (fenêtre rectangulaire)

3.7 Types de filtres

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

Filtrage numérique

HE-Arc, Ingénierie 10

Lorsqu'on choisit un nombre pair de 'taps', la symétrie est quelque peu différente. La Figure 7 illustre un exemple avec NbTaps=20.

0 2 4 6 8 10 12 14 16 18

0

0.5

h(n) - coefficients du filtre (t en ms)0.6

0.2−

hn

NbTaps 1−0 n Figure 7

Il n'y a plus de coefficient 'au milieu', mais la symétrie axiale reste. Lorsqu'un filtre FIR réunit ces deux conditions (nombre de coefficients pair et symétrie axiale), on dit qu'il est de type 2.

3.8 Propriétés de la réponse de phase

Imaginons un filtre FIR de type 2 avec 6 'taps'. La longueur de la fenêtre est donc 5⋅Te. La fonction de transfert H(z) est, compte tenu de la symétrie axiale des coefficients, la suivante :

)zz(h)zz(h)z1(h)z(H

zhzhzhzhzhh)z(H32

241

15

0

50

41

32

22

110

−−−−−

−−−−−

+⋅++⋅++⋅=

⋅+⋅+⋅+⋅+⋅+= (27)

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

)ee(h)ee(h)e1(h)ez(H eeeeee Tf6jTf4j2

Tf8jTf2j1

Tf10j0

Tf2j ⋅π⋅−⋅π⋅−⋅π⋅−⋅π⋅−⋅π⋅−⋅π⋅ +⋅++⋅++⋅== On peut mettre le facteur e-j⋅5πf⋅Te en évidence :

[ ])ee(h)ee(h)ee(he)f(H eeeeeee TfjTfj2

Tf3jTf3j1

Tf5jTf5j0

Tf5j ⋅π⋅−⋅π⋅⋅π⋅−⋅π⋅⋅π⋅−⋅π⋅⋅π⋅− +⋅++⋅++⋅⋅= En appliquant les formules d'Euler :

[ ])Tfcos(2h)Tf3cos(2h)Tf5cos(2he)f(H e2e1e0Tf5j e ⋅π⋅⋅+⋅π⋅⋅+⋅π⋅⋅⋅= ⋅π⋅− (28)

On déduit de (28) :

[ ]e

e2e1e0

Tf5))f(Harg()f(

)Tfcos(h)Tf3cos(h)Tf5cos(h2)f(H

⋅π−==ϕ

⋅π⋅+⋅π⋅+⋅π⋅⋅= (29)

La réponse de phase est totalement linéaire ! IL N'Y A PAS DE DISTORSION DE PHASE. Les retards de phase et de groupe sont tous deux égaux à Tf/2 :

2T

T25

)f(dfd

21

2T

T25

f)f(

21

fegroupe

fephase

=⋅=ϕ⋅π

−=τ

=⋅=ϕ

⋅π

−=τ (30)

Filtrage numérique

HE-Arc, Ingénierie 11

On démontre la même propriété : • avec un nombre quelconque de 'taps'. • pour les filtres FIR de type 1.

Cette propriété est tout à fait remarquable. A noter que la condition indispensable pour la linéarité de la phase est la symétrie axiale. Dans la théorie des filtres analogiques, on approche cette propriété avec les filtres de Bessel (ou Thomson), mais la réponse 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 précis. Soit le passe-bas général défini par la Figure 8.

ffe-fe -fe/2 fe/2

1

H(f)

-Bf Bf Figure 8

La réponse impulsionnelle (non calibrée !) donne les 'taps' du filtre :

−⋅⋅

⋅⋅

=2

1NbTapsn

fB2

csinfB2

)n(he

f

e

f (31)

Valeurs de n : 0 ≤ n ≤ (NbTaps−1) Durée de la fenêtre : Tf = (NbTaps−1)⋅Te Ordre du filtre : N = NbTaps−1 Retard du filtre : τ = Tf/2 ⇒ Nτ = (NbTaps−1)/2 impulsions

3.9.1 Exemple avec Matlab

Imaginons le filtre passe-bas (calibré) suivant : Bf = 1 kHz fe = 4⋅Bf NbTaps = 21

On veut limiter l'ondulation dans la bande passante. Pour cela, on choisit d'utiliser une fenêtre de Hamming. Taper :

Bf = 1000 %Bande passante fe=4*Bf %Fréquence 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=NbTaps−1 %Ordre du filtre h_hamm = FIR1(N,Wn,'low',hamming(NbTaps),'scale') %Détermination des 'taps' (fenêtre de Hamming) impz(h_hamm) %Réponse impulsionnelle freqz(h_hamm) %Spectres d'amplitude et de phase

Filtrage numérique

HE-Arc, Ingénierie 12

3.10 Filtre FIR passe-haut

Attention Contrairement au passe-bas, le passe-haut n'est réalisable 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 général défini par la Figure 8.

ffe-fe -fe/2 fe/2

1

H(f)

-Bf Bf Figure 9

La réponse impulsionnelle (non calibrée et pour une fenêtre rectangulaire !) donne les 'taps' du filtre :

−=

⋅−

−≠

−⋅⋅

⋅⋅

−=

21NbTaps

npourfB2

1

21NbTaps

npour2

1NbTapsn

fB2

csinfB2

)n(h

e

f

e

f

e

f

(32)

Valeurs de n : 0 ≤ n ≤ (NbTaps−1) Durée de la fenêtre : Tf = (NbTaps−1)⋅Te Ordre du filtre : N = NbTaps−1 Retard du filtre : τ = Tf/2 ⇒ Nτ = (NbTaps−1)/2 impulsions Particularité : Type 1 uniquement (NbTaps impair)

Calibrer les 'taps' d'un filtre passe-haut est un peu plus délicat que pour le passe-bas (voir §3.6 page 9). Nous n'entrerons pas dans le détail ici.

3.10.1 Exemple

On choisit : Bf = 1 kHz fe = 4⋅Bf NbTaps = 21

Filtrage numérique

HE-Arc, Ingénierie 13

La réponse impulsionnelle est illustrée par la Figure 10.

0 2 4 6 8 10 12 14 16 18 200.5

0

0.5

Passe-haut - réponse impulsionnelle0.75

0.5−

hn

NbTaps 1−0 n Figure 10

La réponse en amplitude est illustrée par la Figure 11.

2 1.5 1 0.5 0 0.5 1 1.5 20

0.5

1

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

0

H f( )

Hid f( )

fmaxfmin f Figure 11

3.10.2 Exemple avec Matlab

On résout le même exemple avec Matlab, mais en utilisant une fenêtre de Hamming. On prend des paramètres calibrés pour que le gain dans la bande passante soit de 1 pour f=fe/2.

Taper : Bf = 1000 %Bande passante fe=4*Bf %Fréquence 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=NbTaps−1 %Ordre du filtre h_hamm = FIR1(N,Wn,'high',hamming(NbTaps),'scale') %Détermination des 'taps' (fenêtre de Hamming) impz(h_hamm) %Réponse impulsionnelle freqz(h_hamm) %Spectres d'amplitude et de phase

Filtrage numérique

HE-Arc, Ingénierie 14

3.11 Filtre FIR passe-bande

Attention Les filtres FIR passe-bande peuvent être de type I ou II.

Soit le passe-bande général défini par la Figure 12.

ffefe/2

1

H(f)

B1 B2−fe −fe/2 −B1−B2 Figure 12

La réponse impulsionnelle (non calibrée et pour une fenêtre rectangulaire !) donne les 'taps' du filtre :

−⋅⋅

⋅⋅

−⋅⋅

⋅⋅

=2

1NbTapsn

fB2

csinfB2

21NbTaps

nfB2

csinfB2

)n(he

1

e

1

e

2

e

2 Valeurs de n : 0 ≤ n ≤ (NbTaps−1) Durée de la fenêtre : Tf = (NbTaps−1)⋅Te Ordre du filtre : N = NbTaps−1 Retard du filtre : τ = Tf/2 ⇒ Nτ = (NbTaps−1)/2 impulsions Calibrer les 'taps' d'un filtre passe-bande est un peu plus délicat que pour le passe-bas (voir §3.6 page 9). Nous n'entrerons pas dans le détail 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 mêmes caractéristiques qu'un passe-bas (voir exemple).

3.11.1 Exemple

On choisit : B1 = 500 Hz B2 = 1 kHz fe = 4 kHz NbTaps = 51

La réponse impulsionnelle est illustrée par la Figure 13.

0 5 10 15 20 25 30 35 40 45 500.5

0

0.5

Passe-bande - réponse impulsionnelle0.75

0.5−

hn

NbTaps 1−0 n Figure 13

Filtrage numérique

HE-Arc, Ingénierie 15

La réponse en amplitude est illustrée par la Figure 14.

2 1.5 1 0.5 0 0.5 1 1.5 20

0.5

1

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

0

H f( )

Hid f( )

fmaxfmin f Figure 14

3.11.2 Exemple avec Matlab

On résout le même exemple avec Matlab, mais en utilisant une fenêtre de Hamming. On prend des paramètres calibrés pour que le gain soit de 1 au milieu de la bande passante.

Taper : B1 = 500 %Début de la bande passante B2 = 1000 %Fin de la bande passante fe=4000 %Fréquence 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=NbTaps−1 %Ordre du filtre h_hamm = FIR1(N,[W1 W2],'band',hamming(NbTaps),'scale') %Détermination des 'taps' impz(h_hamm) %Réponse 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 réalisable 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 général défini par la Figure 15.

ffefe/2

1

H(f)

B1 B2−fe −fe/2 −B1−B2 Figure 15

Filtrage numérique

HE-Arc, Ingénierie 16

La réponse impulsionnelle (non calibrée et pour une fenêtre rectangulaire !) donne les 'taps' du filtre :

−=∀

−⋅−

−≠∀

−−⋅

⋅⋅

⋅−

−−⋅

⋅⋅

=

2

1NbTapsn

ef

)1B2B(21

2

1NbTapsn

2

1NbTapsn

ef2B2

csinef

2B2

2

1NbTapsn

ef1B2

csinef

1B2

)n(h

Valeurs de n : 0 ≤ n ≤ (NbTaps−1) Durée de la fenêtre : Tf = (NbTaps−1)⋅Te Ordre du filtre : N = NbTaps−1 Retard du filtre : τ = Tf/2 ⇒ Nτ = (NbTaps−1)/2 impulsions Particularité : Type 1 uniquement (NbTaps impair)

Calibrer les 'taps' d'un filtre coupe-bande est un peu plus délicat que pour le passe-bas (voir §3.6 page 9). Nous n'entrerons pas dans le détail 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 mêmes caractéristiques qu'un passe-bas (voir exemple).

3.12.1 Exemple

On choisit : B1 = 500 Hz B2 = 1 kHz fe = 4 kHz NbTaps = 51

La réponse impulsionnelle est illustrée par la Figure 16.

0 5 10 15 20 25 30 35 40 45 500.5

0

0.5

1Coupe-bande - réponse impulsionnelle

1

0.5−

hn

NbTaps 1−0 n Figure 16

Filtrage numérique

HE-Arc, Ingénierie 17

La réponse en amplitude est illustrée par la Figure 17.

2 1.5 1 0.5 0 0.5 1 1.5 20

0.5

1

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

0

H f( )

Hid f( )

fmaxfmin f Figure 17

3.12.2 Exemple avec Matlab

On résout le même exemple avec Matlab, mais en utilisant une fenêtre de Hamming. On prend des paramètres calibrés pour que le gain soit de 1au milieu de la bande passante.

Taper : B1 = 500 %Début de la bande de réjection B2 = 1000 %Fin de la bande de réjection fe=4000 %Fréquence 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=NbTaps−1 %Ordre du filtre h_hamm = FIR1(N,[W1 W2],'stop',hamming(NbTaps),'scale') %Détermination des 'taps' impz(h_hamm) %Réponse 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 idée de la philosophie des filtres FIR. Cela dit, vous ne les utiliserez… jamais. C'est sans doute assez frustrant d'en arriver à cette conclusion après tous ces chapitres, mais c'est ainsi: les filtres FIR dérivés d'une fonction de transfert h(t) ne sont pas assez efficaces. La méthode optimale de détermination des 'taps' est l'algorithme Parks-McClellan, qui lui-même fait appel à l'algorithme de Remez. Cette méthode est basée 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 réjection

Les filtres FIR résultants sont de type I ou II, donc leur réponse en phase est linéaire. Ils sont nettement plus performants que les filtres FIR fenêtrés. On les appelle aussi filtres minimax.

Filtrage numérique

HE-Arc, Ingénierie 18

La méthode de recherche numérique des coefficients est assez compliquée 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

1−δ1

δ2fpass fstop fe/2

wpass wstop 1 Figure 18

La méthode recherche itérativement les 'taps' afin qu'avec un ordre minimal, le gabarit soit respecté au mieux. Par rapport à un filtre FIR fenêtré, on a les avantages suivants :

• Pour un gabarit identique, l'ordre d'un filtre FIR equi-ripple est nettement inférieur. • L'ondulation dans la bande passante et l'affaiblissement minimal dans la bande de

réjection (coefficients δ1 et δ2) sont configurables séparément.

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 réjection : 80 dB - fe = 4 kHz - fpass = 500 Hz - fstop = 1000 Hz

On utilise l'outil 'fdatool'. On voit que pour une fenêtre 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 calibrés !). On peut aussi taper :

B1 = 500 %Fin de la bande passante B2 = 1000 %Début de la bande de réjection fe=4000 %Fréquence d'échantillonnage Amax_dB=0.25 %Demi-ondulation max dans la bande passante (en dB) Amin_dB=80 %Ondulation min dans la bande de réjection (en dB) Amax=1−10^(−Amax_dB/20) %Demi-ondulation max dans la bande passante Amin=10^(−Amin_dB/20) %Ondulation min dans la bande de réjection [N,F,A,W]=REMEZORD([B1 B2], [1 0], [Amax Amin], fe) %Recherche les conditions idéales 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) %Réponse impulsionnelle freqz(h_ remez) %Spectres d'amplitude et de phase

Matlab est malheureusement impécis quant à la spécification de l'ordre N. Il faut presque toujours ajouter 1 ou 2 pour remplir les spécifications.

Pour être exhaustif, il faut encore citer l'outil 'sptool'.

Filtrage numérique

HE-Arc, Ingénierie 19

3.14 Filtre 'least-square'

Cette méthode, basée sur un algorithme des moindres carrés, est également très efficace. Par rapport à l'algorithme Parks-McClellan, elle présente les particularités suivantes :

• L'ondulation dans la bande passante est moindre, et l'affaiblissement minimal dans la bande de réjection est plus accentué. On a donc ici un meilleur comportement pour la méthode des moindres carrés.

• La transition bande passante/bande de réjection est bien moins rapide. On a donc ici un moins bon comportement pour la méthode des moindres carrés.

3.14.1 Exemple avec Matlab

On prend le même exemple que précédemment.

N=23 %Ordre du filtre B1 = 500 %Fin de la bande passante B2 = 1000 %Début de la bande de réjection f6dB=700 %Etalonnage d'une fréquence pour H= –6dB (gain=1/2) fe=4000 %Fréquence 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 réjection (en dB) Amax=1−10^(−Amax_dB/20); %Demi-ondulation max dans la bande passante Amin=10^(−Amin_dB/20); %Ondulation min dans la bande de réjection h_ls=fircls1(N,W,Amax,Amin,'plot') %Calcule et montre le résultat figure; freqz(h_ls)

3.15 Réalisation pratique du filtrage FIR

Dans Z, on a donc :

)z(X)z(H)z(Y ⋅= (33)

Dans le domaine temporel, on a un produit de convolution (on laisse tomber le facteur Te) :

)n(x*)n(h)n(y = (34) Comme h(n) a un nombre limité d'échantillons, on peut écrire :

∑−−=

−⋅=n

)1NbTaps(nk

)kn(h)k(x)n(y (35) ou encore :

∑−

=

⋅−=1NbTaps

0k

)k(h)kn(x)n(y (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'entrée et de sortie se décalent au fur et à mesure sur la gauche. Le présent 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).

Filtrage numérique

HE-Arc, Ingénierie 20

On voit que pour chaque échantillon de sortie, on a NbTaps multiplications et NbTaps additions. Le nombre d'opérations est donc considérable. Imaginons un signal stéréo de 20 kHz échantillonné à 44.1 kHz. Pour un filtre FIR de 50 taps, il faut réaliser 100 opérations entre deux échantillons, ce qui signifie une opération toutes les 226 ns. Avant l'arrivée sur le marché des DSP, les filtres FIR étaient quasiment inutilisés, la puissance de calcul exigée étant trop importante. Aujourd'hui, ils sont toujours plus utilisés. A noter encore l'instruction MAC (multiply and accumulate), présente dans quasiment tous les DSP. Elle multiplie et additionne en une seule opération. Ainsi, pour un filtre de 50 'taps', on a seulement 50 opérations à effectuer entre deux échantillons. Aujourd'hui, on voit apparaître du filtrage FIR par FPGA; de cette manière, les N opérations de multiplication/addition se déroulent simultanément ! La forme directe (autre dénomination: forme transversale) d'un filtre FIR est décrite par la Figure 19 (note: N=NbTaps−1). On peut utiliser ce schéma dans un DSP ou dans une FPGA.

x(n)z−1 z−1 z−1

h0 h1 h2 hN−1 hN

y(n) Figure 19

Si le filtre est de type I ou II, on peut mettre à profit la symétrie 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.

x(n)z−1 z−1 z−1

h0 h1 h2 hN/2-1y(n)

z−1

hN/2

z−1 z−1 z−1 z−1

Figure 20

La structure de la Figure 20 est intéressante pour des systèmes numériques où l'opération de multiplication requiert plus temps de calcul que l'opération d'addition.

4 Décimation par filtre FIR

La décimation, encore appelée sous-échantillonnage, est essentielle en traitement du signal. Imaginons le problème 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 fréquence fA/D=44.1 kHz et une bande passante BA/D=20 kHz. Si on ne fait rien au niveau de la fréquence d'échantillonnage (fe=fA/D), on remplit le buffer de 512 échantillons dans un temps très court Tf = 11.6 ms, ce qui implique une résolution 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 théorique (lorsque fe=2⋅B) d'une FFT à 512 échantillons est de 256 raies dans la bande passante...

Filtrage numérique

HE-Arc, Ingénierie 21

Pour garder une résolution spectrale intéressante (et aussi pour augmenter la longueur de la fenêtre d'échantillonnage Tf ), il faudrait réduire la fréquence d'échantillonnage fe à une valeur aussi faible que possible. Grosso-modo, on aimerait :

B5.3fB5.2 e ⋅≤≤⋅ (37) On choisit de diviser fA/D par 16, ce qui nous donne fe=2.76 kHz. Cela implique une fenêtre d'échantillonnage Tf = 186 ms et une résolution 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 problème (note: spectre unilatéral).

B fe BA/D fA/D f

X(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 réduire la bande passante du signal à B. Pour cela, on utilise un filtre numérique FIR cadencé à fA/D. Le résultat après filtrage est illustré par la Figure 22.

B fe fA/D f

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

Filtrage numérique

HE-Arc, Ingénierie 22

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 réponse est OUI. Cette opération peut se comprendre ainsi : imaginons un même signal x(t), échantillonné par deux convertisseurs: le premier échantillonne à une fréquence fe1 et le second à une fréquence fe2=fe1/16. Toutes les périodes T=16⋅Te1, les deux convertisseurs vont échantillonner exactement la même valeur (voir la Figure 23).

t

xfs(t)

Figure 23

L'annexe 3 illustre cet exemple numériquement à l'aide de Mathcad et Matlab (pour le calcul des coefficients du filtre).

4.1 L'intérêt du filtre FIR

Dans l'exemple précédent, on un filtre assez conséquent avec 389 'taps'. Cela dit, les valeurs à la sortie du décimateur sortent à une fréquence de fe=2.76 kHz, ce qui est assez lent. La Figure 24 illustre la situation.

x(n)

fA/D = 44.1 kHz

y(n)

fe = 2.76 kHz

Décimateur

16:1

Figure 24

Le filtre FIR, du fait qu'il n'a pas de contre-réaction (filtre non récursif), peut se permettre de réaliser les calculs des valeurs de sortie à la fréquence fe=2.76 kHz. Simplement, à chaque période Te, 16 nouveaux échantillons sont entrés dans la fenêtre de convolution.

Filtrage numérique

HE-Arc, Ingénierie 23

Ce mode de fonctionnement est illustré par la Figure 25.

k

k

n

y(n0)

NbTaps

y(n0+16)

16 échantillonsx(k)

h(n-k)

y(n)

Te Figure 25

Un filtre récursif IIR nécessiterait 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 décimateur FIR fournit un gros travail, mais rarement.

4.2 Décimation en cascade

Lorsque le facteur de décimation est important, le sous-échantillonnage est souvent effectué en cascade. L'exemple précédent, exécuté en deux cascades, est illustré par la Figure 26.

x(n)

fA/D = 44.1 kHz

y(n)

fe = 2.76 kHz

Décimateur

4:1

xi(n)

fei = 11.03 kHz

Décimateur

4:1

Figure 26 Cette approche permet d'obtenir des filtres FIR plus légers et, souvent, on obtient un rapport 'filtrage/nombre d'opérations de calcul' plus avantageux qu'avec un seul filtre de décimation.

5 Interpolation par filtre FIR

L'interpolation, encore appelée sur-échantillonnage, est également essentielle en traitement du signal. Imaginons le problème suivant. On a un signal audio avec une fréquence 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 (25ème ordre). Si au contraire on arrive à sortir un signal échantillonné à fe=4⋅fs=176.4 kHz, alors le filtre passe-bas anti-repliement devient nettement plus réalisable (4ème ordre).

Filtrage numérique

HE-Arc, Ingénierie 24

Pour bien comprendre l'idée du sur-échantillonnage, considérons un signal d'origine x(t) dont le spectre a une bande passante B=20 kHz et une réponse en amplitude de maximum max(|X(f)|)=A. Ce signal est illustré par la Figure 27.

A

x(t)

X(f)

t

fB−B Figure 27

Ce signal est échantillonné à une fréquence fs=44.1 kHz, et le résultat x1(n⋅Te)↔X1(f) est illustré par la Figure 28. Nous sommes donc ici dans la configuration du signal audio décrit plus haut.

x1(n.Te)

tTs = 22.7 µs

X1(f)

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

fs.A

Figure 28

A présent, on ajoute trois zéros entre chaque échantillon. Le signal résultant x2(n⋅Te) a une fréquence d'échantillonnage quatre fois plus élevée que le signal d'origine, mais fondamentalement les deux signaux x1 et x2 restent identiques !

Filtrage numérique

HE-Arc, Ingénierie 25

Le signal x2(t) est représenté par la Figure 29.

x2(n.Te)

tTe = 5.7 µs

X2(f)

B fe-fe -B

fs.A

Figure 29

Il ne reste plus qu'à filtrer numériquement selon les lignes traitillées 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 fréquence fe, mais dont la réponse en amplitude ne sera pas adaptée à la nouvelle fréquence d'échantillonnage fe (max(|H2(f)|)=fs⋅A). Pour obtenir quelque chose de cohérent par rapport à fe, il faut multiplier le signal par fe/fs=4. Pour réaliser cela, on donnera simplement au filtre un gain de quatre. On peut comprendre cette perte de gain de la manière suivante: en rajoutant des zéros entre les échantillons, on ne change pas le signal du point de vue de la fréquence d'échantillonnage fs. Par contre, du point de vue de la fréquence d'échantillonnage fe=4⋅fs, on se retrouve avec trois échantillons sur quatre qui sont nuls. Cela représente 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 évoquées plus haut, on multiplie tous ces coefficients par 4. Après filtrage, on obtient le signal x3(t), illustré par la Figure 30.

fe.A

x3(t)

X3(f)

t

fB−B fe-fe

Figure 30

Filtrage numérique

HE-Arc, Ingénierie 26

5.1 L'intérêt du filtre FIR

Le filtre décrit précédemment 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' dessinés en gras ne sont pas multipliés par zéro.

y(n0.Te)

x(k.Te)

h((n0−k).Te)

Convolution pour n = n0

k.Te

(n0−k).Te

n.Te

y((n0+1).Te)

x(k.Te)

h((n0+1−k).Te)

Convolution pour n = n0+1

k.Te

(n0+1−k).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 schématiser grossièrement ainsi les filtres FIR pour le décimateur et l'interpolateur (fréquences fe1 et fe2 avec fe1=n⋅fe2)

• Le décimateur fonctionne à la fréquence de sortie fe2 (fe2=fe1/n), mais il a besoin de tous les 'taps' pour calculer chaque échantillon de sortie.

• L'interpolateur fonctionne à la fréquence de sortie fe1 (fe1=n⋅fe2), mais il n'a besoin que d'une partie de ses 'taps' (NbTaps2=NbTaps1/n) pour calculer chaque échantillon de sortie.

Filtrage numérique

HE-Arc, Ingénierie 27

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 effectuées 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 = 8⋅B = 4 kHz. On prend un facteur 8⋅B pour le suréchantillonnage, car

ainsi la restitution par maintien créera 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 illustrée 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) problème, 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 problème. Concernant le pointeur des taps, s'il s'incrémente de 4 modulo 33, il est toujours juste. Par exemple, pour le passage de la première à la seconde ligne, on a (32+4) mod 33 = 3. Les dsp proposent en principe ce type d'incrémentation par modulo, ce qui fait que le programmeur ne s'inquiète pas des transitions entre chaque échantillon de sortie. Dans la pratique, on choisira plutôt 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 inspirés des techniques de filtrage analogiques. Ainsi, on a des filtres IIR de Butterworth, Tchebychev, etc. L'idée est ici de profiter dans le monde numérique 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 transformée en Z. Idéalement, il suffit d'effectuer la transformation suivante dans les équations de Laplace :

)zln(T1

se

⋅= (38)

Filtrage numérique

HE-Arc, Ingénierie 28

On imagine aisément la difficulté d'une telle transformation pour un simple filtre RC :

τ⋅⋅+=→

τ⋅+=

)zln(T1

1

1)z(H

s11

)s(H

e

Z (39)

La fonction H(z) décrite par (39) ne décrit pas un système linéaire discret, puisque H(z) n'est pas une fraction rationnelle. H(z) n'est donc pas numériquement réalisable. Le passage du domaine de la transformée Laplace dans le domaine de la transformée en Z doit donc se faire non pas idéalement (équation (39)), mais au moyen d'une approximation. Le §6.1 décrit une approximation possible mais peu employée, et le §6.2 présentera la très connue et très employée transformation bi-linéaire.

6.1 Remplacement de la différentielle par la différence

Dans le domaine de Laplace, dériver signifie 'multiplier par s'. On a :

)s(Xs)t(xdtd Laplace ⋅ → (40)

On pourrait imaginer la dérivée ainsi dans le domaine numérique :

( ) ( )( ))z(X)z1(

T1

TeT1nxTnx

)Tn(xdtd 1

e

Zeee ⋅−⋅→

⋅−−⋅=⋅ − (41)

On en conclut la transformation suivante :

)z1(T1

s 1

e

−−⋅= (42)

( ) 1eTs1z −⋅−= (43)

Si on observe la transformation (43) pour le demi-plan gauche de Laplace, on a la transformation illustrée par la Figure 32.

Plan de s

σ = Re(s)

jω = Im(s)

Re(z)

Im(z)

z = 1/(1−s.Te)

axe fréquentiel 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.

Filtrage numérique

HE-Arc, Ingénierie 29

Les deux cercles ont pour unique intersection le point z=1 (f=0, situation DC). Pour les fréquences f << fe, ces deux cercles sont encore quasi-confondus. Par contre, lorsque f devient plus grand, on a une divergence non-négligeable. On peut bien se douter que le comportement numérique n'a alors plus grand chose à voir avec le comportement analogique. Ce procédé est donc valable uniquement pour les fréquences f << fe.

6.2 Transformation bi-linéaire

La transformation bi-linéaire s'inspire de la méthode d'intégration des trapèzes. Dans le domaine de Laplace, intégrer signifie diviser par s'. On a, en négligeant les conditions initiales :

)s(Xs1

)s(Ydt)t(x)t(y Laplace ⋅= →⋅= ∫ (44) Si on intègre numériquement par la méthode des trapèzes, on a entre deux échantillons un accroissement ∆S illustré par la Figure 33.

x(n−2)x(n−1)

x(n)

(n−2).Te (n−1).Te n.Te

∆S=Te.(1/2).(x(n)+x(n−1))

t

Te Figure 33

On a, si y(t)=?x(t)⋅dt :

( )2

)1n(x)n(xT)1n(y)n(yS e

−+⋅=−−=∆ (45)

Dans Z, on trouve :

( ) ( )

)z(X1z1z

2T

)z(Y

z1)z(X2T

z1)z(Y

e

1e1

⋅−+

⋅=

+⋅⋅=−⋅ −−

(46)

On en conclut :

1z1z

T2

se +

−⋅= (47)

e

e

Ts2Ts2

z⋅−⋅+

= (48)

Filtrage numérique

HE-Arc, Ingénierie 30

Si on observe la transformation (48) pour le demi-plan gauche de Laplace, on a la transformation illustrée par la Figure 34.

Plan de s

σ = Re(s)

jω = Im(s)

Re(z)

Im(z)

z = (2+s.Te)/(2−s.Te)

axe fréquentiel 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 hâtives que la Figure 34 pourrait suggérer ! L'axe fréquentiel recouvre bien le cercle unité, mais pas comme le fait la transformation idéale (38). Examinons donc cette transformation de l'axe fréquentiel, en remplaçant dans (48) la variable s par j⋅2πfa, la variable fa signifiant fréquence analogique.

ea

ea

Tf2j2Tf2j2

z⋅π⋅−⋅π⋅+

= (49) Si on met z = fct(fa) sous sa forme trigonométrique :

( )( )

)Tf(arctg2))Tf(arctg()Tf(arctg)zarg(

1Tf24Tf24

z

eaeaea

2ea

2ea

⋅π⋅=⋅π−⋅π=

=⋅π+⋅π+

= (50)

La fréquence fa correspond à la fréquence du modèle analogique. Dans le monde numérique, cependant, z continue d'obéir à la loi suivante, par rapport à la fréquence 'réelle' f :

eTf2jez ⋅⋅π⋅= (51) Si on met z = fct(f) sous sa forme trigonométrique :

eTf2)zarg(

1z

⋅π=

= (52)

En comparant les équations (50) et (52), on conclut les importantes relations suivantes :

)fT(arctgT

1f ae

e

⋅⋅π⋅⋅π

= (53)

)fT(tgT

1f e

ea ⋅⋅π⋅

⋅π= (54)

Filtrage numérique

HE-Arc, Ingénierie 31

La relation entre un filtre analogique, décrit par sa fréquence fa, et sa correspondance dans Z est illustrée par la Figure 35.

ffe/2

fe/2 fef

fafa

Ba

fra

B fr Figure 35

Le filtre analogique subit une compression telle que le filtre analogique entier 0 ≤ fa < ∞ se retrouve comprimé dans le filtre 'réel' 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 conséquences de la transformation bi-linéaire pour un modèle de filtre analogique simple du premier ordre.

Filtrage numérique

HE-Arc, Ingénierie 32

6.2.1 Procédure à suivre pour la réalisation d'un filtre IIR

Pour réaliser un filtre numérique IIR basé sur un filtre analogique, on procède comme suit :

1. On établit le gabarit du filtre réel. 2. On transforme les fréquences caractéristiques (Bande passante, bande de réjection,

etc.) pour tenir compte des effets de compression ultérieurs selon la formule :

)fT(tgT

1f e

ea ⋅⋅π⋅

⋅π=

3. On établit le gabarit du filtre analogique correspondant. 4. On trouve le fonction H(s) du filtre décrit par le gabarit. 5. On trouve H(z) en employant la transformation :

1z1z

T2

se +

−⋅= (55)

6. C'est fini… Souvent, en filtrage analogique, on emploie la variable de Laplace normalisée S définie ainsi par rapport à une fréquence de référence f0 :

0f2s

= (56) Dans ce cas, le point 5 se ré-écrit ainsi :

5. On trouve H(z) en employant la transformation :

1z1z

Tf1

Se0 +

−⋅

⋅⋅π= (57)

6.2.2 Exemple

On veut réaliser le filtre passe-bas de type Tchebycheff suivant :

Bande passante B = 1 kHz Fréquence d'échantillonnage fe = 10 kHz Ondulation maximale dans la bande passante Amax = 1 dB Bande de réjection fr = 3 kHz Affaiblissement minimal dans la bande de réjection Amin = 80 dB

Tout d'abord on transforme les fréquences caractéristiques :

Hz4381)frT(tgT

1fr

Hz1034)BT(tgT

1B

ee

a

ee

a

=⋅⋅π⋅⋅π

=

=⋅⋅π⋅⋅π

=

(58)

Avant d'établir le gabarit du filtre analogique, il faut normaliser les fréquences :

24.4Bfr

r

Bf

a

aa

a

aa

==Ω

(59)

Filtrage numérique

HE-Arc, Ingénierie 33

Le gabarit du filtre analogique est décrit par la Figure 36.

1

Ba = 1034 Hz

Amax

Amin

4.24

fra = 4381 Hz

Ωa

fa

A(Ωa)

Figure 36

Sans démonstration, on trouve un filtre du 5ème ordre, donné ainsi avec la variable de Laplace normalisée S = s/2⋅π⋅B (dans le cas d'un passe-bas, on pose f0=B) :

429.0S468.0S429.0

988.0S179.0S988.0

289.0S289.0

)S(H 22 +⋅+⋅

+⋅+⋅

+= (60)

La réponse en amplitude de ce filtre analogique est donnée par la Figure 37.

0 1000 2000 3000 4000 5000 6000 7000 8000 9000 1 .104

100

50

0Filtre analogique

3

120−

Hdb fa( )

Amin−

fmaxfmin fa Figure 37

A présent on remplace la variable normalisée S de (60) de la manière suivante :

1z1z

078.31z1z

Tf1

Se0 +

−⋅=

+−

⋅⋅⋅π

= (61) En développant un peu, on trouve la fonction de transfert dans Z :

5z5558.04z8111.23z9815.52z699.61z9634.31

5z000292.04z00146.03z00292.02z00292.01z00146.0000292.0)z(H −⋅−−⋅+−⋅−−⋅+−⋅−

−⋅+−⋅+−⋅+−⋅+−⋅+= (62)

Filtrage numérique

HE-Arc, Ingénierie 34

La réponse en amplitude de ce filtre numérique est illustrée par la Figure 38.

0 1000 2000 3000 4000 5000 6000 7000 8000 9000 1 .104100

50

0

Filtre numérique pour 0 < f < fe, ampl.3

100−

Hdb f( )

Amin−

fmaxfmin f Figure 38

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

0 100 200 300 400 500 600 700 800 900 10001

0.5

0Filtre numérique pour 0 < f < B, ampl.

0

1−

Hdb f( )

Bfmin f Figure 39

La phase dans la bande passante est illustrée par la Figure 40.

0 100 200 300 400 500 600 700 800 900 1000

4

2

0Filtre numérique pour 0 < f < B, phase

0

5.5−

Phk

Bfmin fk Figure 40

C'est la réponse de phase classique d'un filtre de Tchebycheff. On remarque qu'il y a passablement de distorsion de phase en fin de bande passante.

Filtrage numérique

HE-Arc, Ingénierie 35

Les retards de phase et de groupe sont illustrés par la Figure 41.

0 100 200 300 400 500 600 700 800 900 10005 .10 4

6 .10 4

7 .10 4

8 .104

9 .10 4

0.001Retards de groupe et de phase

1 ms⋅

0.5 ms⋅

τphk

τgrk

B0 Hz⋅ fk 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 Même exemple avec Matlab

Avec Matlab, les choses sont toujours simples… N = 5 %Ordre du filtre B=1000; fe=10000; %Bande passante et fréquence d'échantillonnage Amax = 1; %Ondulation max en dB format long %On veut plus de précision d'affichage [num, den]=cheby1(N, Amax, 2*B/fe) %Numérateur et dénominateur impz(num, den) %Graphe de la réponse impulsionnelle freqz(num, den) %Affiche H(f) pour 0 ≤ f ≤ ½fe x=ones(100,1); %x=saut unité y=filter(num, den, x); %y=réponse indicielle plot(y, 'bo') %graphe de la réponse indicielle zplane(num, den) %Graphe des pôles et des zéros P=roots(den) %Calcule les pôles Z=roots(num) %Calcule les zéros [Z, P, K]=tf2zp(num, den) %Autre manière d'obtenir les pôles, les zéros et le facteur k

Plus simple encore, l'outil fdatool !

6.3 Réalisation du filtrage IIR

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

PP

22

11

MM

22

110

P

1p

pp

M

0m

mm

za...zaza1zb...zbzbb

za1

zb)z(H −−−

−−−

=

=

⋅++⋅+⋅+⋅++⋅+⋅+

=⋅+

⋅=

∑ (63)

Filtrage numérique

HE-Arc, Ingénierie 36

En réalité, la plupart du temps, on a le même ordre au numérateur et au dénominateur, c'est à dire M=P=N. Si cela n'est pas le cas, on peut quand même admettre cette égalité, en introduisant des zéros dans les coefficients bi ou ai. On réécrit donc :

NN

22

11

NN

22

110

za...zaza1zb...zbzbb

)z(H −−−

−−−

⋅++⋅+⋅+⋅++⋅+⋅+

= (64) Dans Z toujours, la relation entre un signal d'entrée X(z) et le signal de sortie correspondant Y(z) est la suivante :

)z(X)z(H)z(Y ⋅= (65) Dans le domaine temporel, on a pour chaque valeur de n :

)Nn(ya...)2n(ya)1n(ya

)Nn(xb...)2n(xb)1n(xb)n(xb)n(y

N21

N210

−⋅−−−⋅−−⋅−−⋅++−⋅+−⋅+⋅=

(66) Beaucoup de structures sont possibles pour réaliser un filtre de type IIR. On retiendra les structures canoniques, qui ont la particularité de nécessiter le minimum de cellules de retard z-1.

6.3.1 Forme directe I

La structure de forme directe I est illustrée par la Figure 42.

x(n)

z−1

b1

z−1

bN-1

bN

b2

w(n)

z−1

−a1

−aN-1z−1

−aN

−a2

z−1

z−1

y(n)b0

Figure 42

On a :

=

=

−⋅−=

−⋅=

N

1ii

N

0ii

)in(ya)n(w)n(y

)in(xb)n(w (67)

Filtrage numérique

HE-Arc, Ingénierie 37

6.3.2 Forme directe II

La structure de forme directe II est illustrée par la Figure 43.

x(n)

z−1b0

−a1 b1

z−1

−aN-1 bN-1

z−1

−aN bN

−a2 b2

y(n)w(n)

w(n-N) Figure 43

La forme directe II est appelée canonique, puisque elle requiert un minimum de cellules de retard z-1. On a :

=

=

−⋅=

−⋅−=

N

0ii

N

1ii

)in(wb)n(y

)in(wa)n(x)n(w (68)

6.3.3 Forme directe II transposée

La structure de forme directe II transposée est une variante de la forme directe II. Elle est illustrée par la Figure 44.

x(n)z−1b0

−a1b1 z−1

−aN-1bN-1 z−1

−aNbN

−a2b2

y(n)w0(n)

w1(n)

w2(n)

wN(n)

wN-1(n)

Figure 44

Filtrage numérique

HE-Arc, Ingénierie 38

Pour faciliter les calculs, on va stocker des valeurs intermédiaires wi(n). L'algorithme de calcul est le suivant :

)n(w)n(y)n(wa)n(xb)n(w

)n(wa)1n(w)n(xb)n(w...

)n(wa)1n(w)n(xb)n(w

)n(wa)1n(w)n(xb)n(w)1n(w)n(xb)n(w

0

0NNN

01NN1N1N

02322

01211

100

=⋅−⋅=

⋅−−+⋅=

⋅−−+⋅=⋅−−+⋅=

−+⋅=

−−−

(69)

La forme directe transposée II est également canonique; c'est la méthode utilisée par Matlab pour sa commande 'filter'.

6.3.4 Structure en cascade

Les structures directes sont totalement inadaptées lorsque l'unité de calcul a une précision faible (par exemple un DSP de type 'fixed point'). De fait, le bruit de calcul est très important dans ce type de structure, et ce particulièrement si plusieurs pôles sont proches l'un de l'autre. Une structure nettement plus adaptée est la structure en cascade illustrée par la Figure 45.

H1(z)y0(n) H2(z)y1(n) HN/2(z)y2(n) yN/2−1(n) yN/2(n)x(n) y(n)

Figure 45 Les cellules sont appelées 'biquads'. Elles sont d'ordre 1 ou 2. On a :

∏∏=

−−

−−

= ⋅+⋅+⋅+⋅+

==2/N

1i2

i21

i1

2i2

1i1i0

2/N

1ii zaza1

zbzbb)z(H)z(H (70)

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 adaptée pour des unités de calcul de type 'fixed point' est illustrée par la Figure 46 (cascade de trois biquads d'ordre 2). x(n)

z−1 b01

b11z−1

w1(n)

z−1

b12−a11z−1

w2(n)

z−1

z−1

w1(n)

b22−a21

b02

b13−a12

b23−a22

b03z−1

z−1−a13

−a23b21

y(n)

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

y0(n) y1(n) y2(n) y3(n)

Figure 46

Filtrage numérique

HE-Arc, Ingénierie 39

L'algorithme de calcul est le suivant :

2/NLavec)n(y)n(y)2n(ya)1n(ya)n(w)n(y

)2n(yb)1n(yb)n(yb)n(w...

)2n(ya)1n(ya)n(w)n(y)2n(yb)1n(yb)n(yb)n(w

)2n(ya)1n(ya)n(w)n(y)2n(yb)1n(yb)n(yb)n(w

)n(x)n(y

L

LL2LL1LL

1LL21LL11LL0L

22221222

1221121022

12111111

0210110011

0

==−⋅−−⋅−=

−⋅+−⋅+⋅=

−⋅−−⋅−=−⋅+−⋅+⋅=

−⋅−−⋅−=−⋅+−⋅+⋅=

=

−−−

(71)

6.3.4.1 Réalisation avec Matlab

Matlab propose les outils tf2zp et zp2sos pour déterminer les cellules de deuxième ordre. On reprend l'exemple du filtre de Tchebycheff mentionné plus haut.

N = 5 %Ordre du filtre B=1000; fe=10000; %Bande passante et fréquence d'échantillonnage Amax = 1; %Ondulation max en dB format long %On veut plus de précision d'affichage [num, den]=cheby1(N, Amax, 2*B/fe) %Numérateur et dénominateur [Z, P, K]=tf2zp(num, den) %Détermine les pôles, zéros et le facteur multiplicatif K [SOS,G]=zp2sos(Z,P,K) %Donne la matrice SOS et le gain

La matrice SOS est donnée sous la forme :

2N

Lavec

aa1bbb..................aa1bbbaa1bbb

SOS

L2L1L2L1L1

2212221202

2111211101

=

= (72)

On a donc, en tenant compte du gain :

∏=

−−

−−

⋅+⋅+⋅+⋅+

⋅=2/N

1i2

i21

i1

2i2

1i1i0

zaza1zbzbb

G)z(H (73) Pour reprendre notre exemple de filtre Tchebycheff, on obtient :

2z9.01z541.11

2z9992.01z9992.112z7458.01z5944.11

2z002.11z002.211z828.01

1z9988.0141092.2)z(H −⋅+−⋅−

−⋅+−⋅+⋅−⋅+−⋅−

−⋅+−⋅+⋅−⋅−

−⋅+⋅−⋅=

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 intermédiaire ne va saturer ! Un grand soin doit donc être apporté à l'implémentation. A noter encore que le gain total peut être distribué sur les trois cascades.

Filtrage numérique

HE-Arc, Ingénierie 40

7 Segmentation du signal

Souvent, une boucle de traitement numérique comporte plusieurs étapes : décimation, filtrage, traitement numérique divers, interpolation, puis retour à la case départ. L'ingénieur inexpérimenté a tendance à effectuer cette boucle échantillon par échantillon, ce qui représente 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 mémoire et le retard de traitement peut être relativement élevé. Deux méthodes de segmentation sont bien connues, à savoir les méthodes "overlap-save" et "overlap-add". En principe, ces méthodes s'appliquent pour des filtres de type FIR. Elles sont particulièrement prisées pour le filtrage par FFT (voir §8 page 43). Cependant, la méthode "overlap-save" peut être appliquée sans problème à des IIR (voir §7.1.1).

7.1 Méthode "overlap-save" pour filtres FIR

La méthode 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 premières valeurs y(0)..y(99) de chaque segment, on a un problème. Quelles valeurs de x doit-on prendre pour le produit de convolution ? Il faut nécessairement avoir conservé les Nh−1=99 dernières valeurs de x du bloc précédent 1 ! La Figure 47 illustre le problème pour y(0). La portion en gras des valeurs de x appartient au segment précédent.

Nx = 1000 éch. bloc suivant

y(0)

bloc précédent

Nh = 100 taps

Nh−1 = 99 valeurs de xconservées du bloc précédent

y(999)

x(n)

y(n)

x(0)

Figure 47

Par conséquent, pour chaque bloc de Nx=1000 échantillons, il faut avoir conservé les Nh−1=99 valeurs du segment précédent (portion en gras des valeurs de x).

1 Comme x(0) est comprise dans la convolution, il faut conserver les Nh−1 valeurs de x(n) passées pour avoir Nh échantillons de x(n) dans le produit de convolution.

Filtrage numérique

HE-Arc, Ingénierie 41

Pour les valeurs y(100)..y(999), il n'y a plus de problème : la fenêtre de convolution est entièrement comprise dans le segment. La Figure 48 montre le cas du calcul de la dernière valeur y(999) du segment.

Nx = 1000 éch. bloc suivant

y(999)

bloc précédent

Nh = 100 taps

x(n)

y(n)

x(999)x(900)

Figure 48

Lorsque la dernière valeur y(999) a été calculée, les échantillons x(n ≤ 900) peuvent être effacés. Par contre, les valeurs x(901)…x(999) doivent être conservées pour le calcul du bloc suivant. En principe, on pose Nx ≥ Nh−1. De cette manière, on ne conserve pas plus d'un segment en mémoire !

7.1.1 Méthode "overlap-save" pour filtres IIR

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

7.2 Méthode "overlap-add" pour filtres FIR

Nous choisirons ici exactement la même configuration qu'au chapitre précédent, à savoir des segments de Nx=1000 échantillons avec un filtre FIR de Nh=100 taps. La méthode "overlap-add" considère chaque segment de x(n) sans tenir compte du segment précédent. Hors du segment considéré, les valeurs de x(n) sont considérées 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 résultat y(n) a la longueur suivante :

1NNN hxy −+= (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 extrêmes y(0) : seul un coefficient du filtre est pris en compte • le cas intermédiaire y(k) avec 99 ≤ k ≤ 999 : tous les coefficients du filtre sont pris en

compte. • le cas extrêmes y(1098) : seul un coefficient du filtre est pris en compte.

Filtrage numérique

HE-Arc, Ingénierie 42

Nx = 1000 éch.

Nh = 100 taps

x(n)

y(n)y(0) y(k) avec

98<k<1000y(1098)

Ny = 1099 éch.

bloc suivant

Figure 49

Les valeurs impliquées dans les différents produits de convolution sont indiquées en gras. Les coefficients du filtre qui multiplient zéro pour y(0) et y(1098) sont indiqués en pointillé. On constate que Nh − 1 = 99 valeurs de y(n) ont "débordé" sur le prochain segment de y(n). Selon le principe de linéarité, on peut additionner tous les résultats particuliers des différents 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)

y3(n)

bloc y(3)

y(n) = y1(n)+y2(n)+...

Figure 50 D'un segment à l'autre, il faut conserver les Nh−1 dernières valeurs de y(n) du segment précédent. Par rapport à la méthode "overlap-save", on conserve Nh−1 valeurs de y(n) au lieu de conserver Nh−1 valeurs de x(n). Comme pour la méthode "overlap-save", on pose Nx ≥ Nh−1. De cette manière, on ne conserve pas plus d'un segment en mémoire !

Filtrage numérique

HE-Arc, Ingénierie 43

8 Filtrage par FFT

Le filtrage par FFT est employé pour réaliser des filtres de type FIR pour un signal d'entrée segmenté. Contrairement à ce qu'on pourrait imaginer au départ, le filtrage par FFT n'est donc pas un filtrage parfait, mais un filtrage de type FIR segmenté selon les deux alternatives connues : les méthodes "overlap-add" et "overlap-save". Le filtrage par FFT est trop peu utilisé par les ingénieurs, soit par ignorance, soit par crainte de devoir implémenter l'algorithme FFT alors que l'algorithme FIR est si simple... C'est dommage, car le filtrage par FFT est une technique extrêmement performante. Par rapport au filtrage FIR classique, cette méthode comporte les avantages et inconvénients 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 inconvénient majeur.

L'idée 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 :

( ))fk(X)fk(HIFFT)Tn(y e ∆⋅⋅∆⋅=⋅ (75)

avec ( )( )

=∆⋅=∆⋅

)n(xFFT)fk(X)n(hFFT)fk(H

8.1 Convolution circulaire

Malheureusement, les choses ne sont pas aussi simples qu'on pourrait le penser au premier abord. Le principal problème est que, pour le cas discret, la multiplication dans le domaine fréquentiel entraîne un produit de convolution circulaire !

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

Filtrage numérique

HE-Arc, Ingénierie 44

Le tableau suivant illustre la différence entre le produit de convolution linéaire et le produit de convolution circulaire avec deux signaux x(n)=[1, 2, 3] et h(n)= [3, 4, 5]

Convolution linéaire Convolution circulaire

331)0(y]345[

]321[=⋅=⇒

25435231)0(y]453[]321[

=⋅+⋅+⋅=⇒

103241)1(y]345[

]321[=⋅+⋅=⇒

25533241)1(y]534[]321[

=⋅+⋅+⋅=⇒

22334251)2(y]345[]321[

=⋅+⋅+⋅=⇒

22334251)2(y]345[]321[

=⋅+⋅+⋅=⇒

224352)3(y]345[

]321[=⋅+⋅=⇒

)0(y)3(y]453[]321[

=⇒

1553)4(y]345[

]321[=⋅=⇒

)1(y)4(y]534[]321[

=⇒

La convolution circulaire est un effet non désiré. Les deux méthodes de filtrage par FFT proposées par la suite vont trouver des astuces pour la contourner et forcer une convolution linéaire telle que souhaitée… • Avec la méthode 'overlap-add' (voir §8.2), on doit déborder de deux échantillons sur le

segment y suivant. Pour éviter la convolution circulaire, on ajoute deux zéros à droite de x(n) qui devient x'(n)=[1, 2, 3, 0, 0] et encore deux zéros à droite de h(n) qui devient h'(n)=[3, 4, 5, 0, 0].

• Avec la méthode 'overlap-save' (voir §8.3), on doit prendre en compte deux échantillons du passé (x x dans l'exemple, que nous admettrons à zéro). Le signal x(n) devient x'(n)=[x, x, 1, 2, 3]. On ajoute encore deux zéros à droite de h(n) qui devient h'(n)=[3, 4, 5, 0, 0].

Overlap-add Overlap-save

3)0(y4500300321

=⇒

22)0(y45003321xx

=⇒

⇒ à jeter

10)1(y5003400321

=⇒

15)1(y50034321xx

=⇒

⇒ à jeter

22)2(y0034500321

=⇒

3)2(y00345321xx

=⇒

22)3(y0345000321

=⇒

⇒ débordement 10)2(y03450321xx

=⇒

15)4(y3450000321

=⇒

⇒ débordement 22)2(y34500321xx

=⇒

• Avec la méthode overlap-add, on a trois valeurs au départ de x(n) et on se retrouve avec

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

Filtrage numérique

HE-Arc, Ingénierie 45

• Avec la méthode overlap-save, on a trois valeurs au départ 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 précédent et on a rejeté les deux premières valeurs de y(n).

8.2 Filtrage par FFT : méthode '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'entrée : Nx = 2n • Nombre de taps : Nh = Nx +1 • Longueur du segment de sortie : Ny = Nx + Nh −1 = 2⋅Nx • Longueur du débordement 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 zéros au filtre à droite des valeurs h(n) originales. • Pour chaque segment de Nx=128 échantillons, on ajoute Nx zéros à droite des valeurs

x(n) originales. La Figure 51 illustre les transformations h'(n) et x'(n) à partir de h(n) et x(n).

n

h'(n)

Nh=129 valeurs originales Ny−Nh=127 zéros

Nh/ = 256 taps

n

x'(n)

Nx=128 valeurs originales Nx = 128 zéros

Nx/ = 256 échantillons

Figure 51

On a : x/

x/

h N2NN ⋅== (76) A présent, on peut s'amuser avec la FFT.

Paramètres de départ : ( )( )

=

=

)n(xFFT)k(X

)n(hFFT)k(H//

//

(77)

Filtrage numérique

HE-Arc, Ingénierie 46

L'indice n varie de 0 à 255 (Nx'=256 échantillons) et l'indice k varie de 0 à 127 (128 raies spectrales).

Résultat : ( )

∆⋅=⋅∆⋅⋅∆⋅=∆⋅

)fk(YIFFT)Tn(y)fk(X)fk(H)fk(Y

e

(78) Le résultat y(n) comprend 2⋅Nx=256 valeurs de y(n), alors qu'on était parti de Nx=128 valeurs de x. Ceci est caractéristique de l'overlap-add. La Figure 52 illustre le principe.

Nx=128 Nxx(n)

y(n)

Nx Nx

Filtrage par FFT : overlap-add

y1y2

y3y4

y1 y1+y2 y2 +y3 y3+y4 Figure 52

8.2.1 Nombre de taps quelconque, cas général

L'idée de poser un nombre de taps comme dans l'exemple précédent : Nh = Nx +1 est bonne, mais on peut aussi réaliser de l'overlap-add avec un nombre de taps quelconque. La seule condition est que Ny doit être une puissance de deux. Cas général :

• 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'entrée : Nx = 1 + Ny − Nh • Longueur du débordement sur le segment de sortie suivant : Nss = Ny − Nx

Par exemple, si on veut réaliser un filtre FIR de Nh=400 taps, on choisira Ny=1024 et Nx=625 échantillons. Le débordement vaudra Nss=399 valeurs de y(n).

8.2.2 Recette de cuisine

Voici les opérations à effectuer pour effectuer du filtrage par FFT par la méthode overlap-add.

1) On fixe le nombre de coefficients du résultat 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 précédent, le cas le plus intéressant est le cas limite Nhlim = 513. Pour l'exemple, nous choisirons Nh = 400 taps.

3) On crée h'(n) de longueur Nh'=Ny=1024 en ajoutant Ny − Nh = 624 zéros à la suite de h(n). Plus formellement, on a :

Pour 0 ≤ n ≤ Nh−1, h'(n) = h(n) Pour Nh ≤ n ≤ Ny−1, h'(n) = 0 On a donc h'(n) = h(0), h(1), h(2), …, h(399), 0, 0, …,0)

Filtrage numérique

HE-Arc, Ingénierie 47

4) On calcule la FFT H'(k)=FFT(h'(n)). On a Ny/2=512 raies spectrales significatives Les opérations 1) à 4) sont effectuées 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 crée un segment x'(n) de longueur Nx'=Ny=1024 en ajoutant Ny − Nx = 399 zéros à la suite de x(n). Plus formellement, on a :

Pour 0 ≤ n ≤ Nx−1=624, x'(n) = x(n) Pour Nx ≤ n ≤ Ny−1, 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 débordement de 399 valeurs)

9) Par rapport aux 625 échantillons du segment de départ, il faut faire "déborder" 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 : méthode 'overlap-save'

Le nombre d'échantillons du segment d'entrée 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'entrée : Nx = 2(n+1) o Nombre d'échantillons x(n) conservés du segment précédent : Nsp = Nh−1 = 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 zéros au filtre à droite des valeurs h(n) originales. • Chaque segment x(n) de Nx=256 échantillons est composé des Nsp=128 valeurs du

segment précédent et de Nxnew = Nx − Nsp = 128 nouvelles valeurs. • Après traitement, les Nrej=128 premières valeurs de y(n) sont à rejeter et les Ny = 128

dernières valeurs de y(n) sont les bonnes. La Figure 53 illustre la transformations h'(n) à partir de h(n) et x(n).

n

h'(n)

Nh=129 valeurs originales Ny−Nh=127 zéros

Nh/ = 256 taps

Filtrage numérique

HE-Arc, Ingénierie 48

n

x(n)

128 derniers éch. 128 nouveaux éch.

Nx = 256 échantillons

Figure 53 A présent, on peut s'amuser avec la FFT.

Paramètres de départ : ( )

( )

==

)n(xFFT)k(X)n(hFFT)k(H //

(79) L'indice n varie de 0 à 255 (Nx=256 échantillons) et l'indice k varie de 0 à 127 (128 raies spectrales).

Résultat : ( )

∆⋅=⋅∆⋅⋅∆⋅=∆⋅

)fk(YIFFT)Tn(y)fk(X)fk(H)fk(Y

e

(80) Le résultat y(n) comprend 2⋅Nx=256 valeurs de y(n), alors qu'on était parti de Nx=128 valeurs de x. Il faut rejeter les Nrej=128 premières valeurs de y(n) et conserver les Ny=128 valeurs restantes. Ceci est caractéristique de l'overlap-save. La Figure 54 illustre le principe.

x(n)

y(n)

Filtrage par FFT : overlap-save

y1 y2 y3 y4

Nx = 256

Figure 54

8.3.1 Nombre de taps quelconque, cas général

L'idée de poser un nombre de taps comme dans l'exemple précédent : Nh = Nx +1 est bonne, mais on peut aussi réaliser de l'overlap-save avec un nombre de taps quelconque. La seule condition est que Nx doit être une puissance de deux. Cas général :

• Nombre de taps : Nh • Nombre d'échantillons x(n) par segment à l'entrée : Nx = 2(n+1) avec Nx ≥ 2⋅(Nh −1)

o Nombre d'échantillons de Nx repris du segment précédent : 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

Filtrage numérique

HE-Arc, Ingénierie 49

Par exemple, si on veut réaliser un filtre FIR de Nh=400 taps, on choisira Nx=1024 échantillons, dont Nsp=399 échantillons seront repris du segment précédent 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 opérations à effectuer pour effectuer du filtrage par FFT par la méthode overlap-add.

1) On fixe le nombre de coefficients d'entrée 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 précédent, le cas le plus intéressant est le cas limite Nhlim = 513. Pour l'exemple, nous choisirons Nh = 400 taps.

3) On crée h'(n) de longueur Nh'=Nx=1024 en ajoutant Nx − Nh = 624 zéros à la suite de h(n). Plus formellement, on a :

Pour 0 ≤ n ≤ Nh−1, h'(n) = h(n) Pour Nh ≤ n ≤ Ny−1, 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 opérations 1) à 4) sont effectuées 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 précédent : 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 premières valeurs de y et de conserver les Ny=625 dernières 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 méthode "overlap-save". On a admis les caractéristiques suivantes : Bf = 1 kHz (bande passante) fstop = 1200 Hz (bande de réjection) fe = 4⋅Bf = 4 kHz (fréq. d'échantillonnage) Nx= 512, Ny=128, Nh=257 filtre FIR de type 'least square'.

Filtrage numérique

HE-Arc, Ingénierie 50

8.5 Calcul de performance

On a donc, pour déterminer N valeurs de y(n) : • une FFT de x(n) → X(k) • une multiplication fréquentielle terme à terme Y(k)=H(k)⋅X(k) • une FFT inverse de Y(k) → y(n) <

Pour N échantillons de sortie, on a donc :

N2)N2(logN2 2 ⋅+⋅⋅⋅ opérations (81) Par échantillon de sortie, on a donc :

2)N2(log2 2 +⋅⋅ opérations (82) On en conclut que par rapport à un filtre FIR nécessitant N opérations, on a déjà un rapport favorable pour le filtrage FFT à partir de N=10. En réalité, les opérations liées à la FFT sont des opérations avec des nombres complexes ! On peut donc multiplier le nombre d'opérations par ~5. De plus, la FFT nécessite beaucoup de place mémoire, une gestion compliquée de pointeurs qui coûte 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 n⋅Te tout en calculant des FFT au milieu (échantillonnage et restitution forcément par interruption, la boucle principale du programme gérant le calcul des FFT), on comprend que les choses ne sont pas aussi simples3.

A mon avis, le filtrage par FFT devient intéressant dès qu'un filtre FIR dépasse 128 'taps'.

9 Filtres à moyenne glissante

Un filtre à fenêtre glissante est un filtre FIR de N coefficients qui a la fonction de transfert suivante :

( )1N21 z...zz1N1

)z(H −−−− ++++⋅= (83) Voici un exemple pour N=4 :

( )321 zzz141

)z(H −−− +++⋅= (84) Les coefficients du FIR valent tous ¼ ! Un schéma possible serait le suivant :

z-1 z-1 z-1

Σ1/4 y(n)

x(n)

Figure 55

3 Il existe cependant des algorithmes de filtrage par FFT en temps réel, que je ne connais pas.

Filtrage numérique

HE-Arc, Ingénierie 51

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

( )

−−

⋅++++⋅= −

−−−−−

1

11N21

z1z1

z...zz1N1

)z(H (85)

1

N1N1N2211

z1zzz...zzzz1

N1

)z(H−

−−−−−−−−−

−−+−−+−+−

⋅=

On conclut : 1

N

z1z1

N1

)z(H −

−−

⋅= (86) On a transformé le filtre FIR en un filtre récursif IIR ! De plus, ce filtre a l'air à priori instable, car il a un pôle en z=1, exactement sur le cercle unité ! Cependant, comme il y a également un zéro en z=1 (c'est évident en observant (85)), l'analyse de la stabilité est un peu plus compliquée (voir §9.1). On comprend mieux le passage à la méthode IIR avec un exemple. Choisissons N=8 et réfléchissons aux valeurs n=10 et n=11.

On a : 8

)3(x)4(x)5(x)6(x)7(x)8(x)9(x)10(x)10(y

+++++++= (87)

8

)4(x)5(x)6(x)7(x)8(x)9(x)10(x)11(x)11(y

+++++++=

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 :

8

)3(x)11(x)10(y)11(y

−+= (88)

On généralise avec n et N :

N

)Nn(x)n(x)1n(y)n(y

−−+−= (89)

On passe à la transformée en Z :

N

)z(Xz)z(X)z(Yz)z(Y

N1 ⋅−

+⋅=−

− (90) On retrouve (86) :

1

N

z1z1

N1

)z(X)z(Y

)z(H −

−−

⋅== (91) Selon cette structure IIR, on réalise l'équivalent de la Figure 55 au moyen de la Figure 56.

z-1 z-1 z-1

Σ1/4

y(n)

x(n) z-1

z-11/4

+ −+

Figure 56

Filtrage numérique

HE-Arc, Ingénierie 52

La formule (89) (respectivement (86)) associée à la structure IIR de la Figure 56 est plus performante que la structure FIR vue auparavant car, même pour N très 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 même faire attention ! Le pôle situé sur le cercle unité peut quand même générer des instabilités ! Imaginons, à titre d'exemple, qu'un météorologue veuille donner une moyenne d'ensoleillement horaire en donnant des valeurs chaque minute, et ceci sur une année complète. 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 écoulée. 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 année, les petites erreurs accumulées risquent d'avoir fait passablement dériver son modèle… La structure IIR est donc à employer avec beaucoup de prudence. Avec une structure FIR, on n'a pas ce problème !

9.2 Avantages/inconvénients du filtre à moyenne glissante

Les deux structures (FIR et IIR) du filtre à moyenne glissante sont simples à réaliser. Si on choisit N=2n avec n entier, la division numérique par N est toute simple (décalage). Ceci est particulièrement intéressant, 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 réponse en amplitude ! On a pour N pair :

( ) ( ) ( )( ) fT)1N(jeee

eefT)1N(cos...fT3cosfTcosN2

)f(H ⋅⋅π⋅−⋅−⋅⋅⋅π⋅−++⋅⋅π+⋅⋅π⋅= On a pour N impair :

( ) ( ) ( )( ) fT)1N(jeee

eefT)1N(cos...fT4cosfT2cos21N1

)f(H ⋅⋅π⋅−⋅−⋅⋅⋅π⋅−++⋅⋅π+⋅⋅π⋅+⋅= Par exemple, pour N=4, on a :

( ) ( )( ) fT3jee

eefT3cosfTcos21

)f(H ⋅⋅π⋅⋅−⋅⋅⋅π+⋅⋅π⋅= (92)

Filtrage numérique

HE-Arc, Ingénierie 53

Le résultat est illustré par la Figure 57.

0.4 0.2 0 0.2 0.4

0.5

1

Réponse en amplitude (fe = 1 Hz)1.1

0

Hf f( )

fe

2

fe

2−

f

Figure 57

Que N soit pair ou impair, le premier lobe de H(f) a le premier zéro en fe/N. Pour N=4, on a donc le premier zéro à fe/4, comme on peut l’observer avec la Figure 57. Si on choisit N très grand, on a un premier lobe très étroit, ce qui peut être gênant. Dans la pratique, on préfère cascader plusieurs filtres à moyenne glissante si on veut une meilleure sélectivité de la réponse en amplitude. Par exemple, un filtre constitué de trois cascades avec N=4 pour chaque cascade aura la fonction de transfert suivante :

3

1

4

z1z1

41

)z(H

−−

⋅= −

(93) La Figure 58 illustre la réponse en amplitude (linéaire et en dB) de trois filtres constitués de respectivement une, deux et trois cascades identiques (N=4 pour chaque cascade).

0.4 0.2 0 0.2 0.40

0.5

1

Rép. amp. lin. avec 1 , 2 et 3 cascades1.1

0

Hf1 f( )

Hf2 f( )

Hf3 f( )

fe

2

fe−

2

f

Filtrage numérique

HE-Arc, Ingénierie 54

0.4 0.2 0 0.2 0.460

50

40

30

20

10

0

10Rép. amp. dB avec 1 , 2 et 3 cascades

10

60−

HdB1 f( )

HdB2 f( )

HdB3 f( )

fe

2

fe−

2

f

Figure 58

On emploie souvent les filtres à moyenne glissante comme décimateurs (voir §4 page 20). Ensuite, à la fréquence la plus basse, on implémente un filtre passe-bas de reconstruction pour corriger leur mauvaise réponse en amplitude ! La Figure 59 illustre le principe avec deux décimateurs/moyenneurs en série (N=8 chacun) avec décimation intermédiaire.

x(n), fe

N=8

Moyenneur -décimateur

x/(n), fe/8

N=8

Moyenneur -décimateur

x//(n), fe/64 Passe-basreconstruction

x(n), fe/64

Figure 59

Attention Dans cet exemple, à cause de la décimation intermédiaire, la formule (93) ne peut

plus être employée telle quelle !

9.3 Utilisation

Les convertisseurs A/D de type sigma-delta utilisent les filtres à moyenne glissante. Au départ, x(n) est codé sur un bit à une fréquence d’échantillonnage très élevée. On décime en plusieurs étapes successives en augmentant la résolution. Tout à la fin, on reconstruit x(n) sur 16 bits avec un passe-bas qui corrige la mauvaise réponse en amplitude des décimateurs. Il ne faut pas mépriser les filtres à moyenne glissante : ils sont très simples à réaliser et, parfois, ils se comportent aussi bien que des filtres plus sophistiqués ! Lorsque l'on doit concevoir un filtre numérique de type passe-bas ou passe-haut (voir la réalisation dans les exercices), c'est la toute première solution à envisager.

10 Filtres médians

Les filtres médians sont non linéaires, c'est à dire que le principe de superposition ne fonctionne plus ! Inutile donc de chercher à les caractériser avec une transformée en Z ou un spectre d'amplitude ! De plus, les signaux (même non bruités !) sont légèrement déformés après filtrage.

Filtrage numérique

HE-Arc, Ingénierie 55

Comme les filtres FIR, les filtres médians conservent en mémoire une fenêtre de N échantillons du passé. Comme les filtres FIR, ils pondèrent ces échantillons avec N coefficients (taps). Simplement, au lieu de prendre comme résultat la somme pondérée (correspondant grosso modo à une moyenne arithmétique), ils prennent la valeur médiane de x, c'est à dire celle qui se trouve au milieu de la liste après pondération et classement. Un exemple sera plus parlant. Imaginons la situation suivante :

• un filtre FIR avec les coefficients suivants : =

===

1;2;1)n(h2n1n0n

• un signal d'entrée avec les valeurs suivantes : −=

=−=−=

...;1;25.0;5.0...;)n(x0n1n2n

On considère le cas n=0 pour le FIR classique.

On a en sortie : 1)k0(h)k(x)0(y0

2k

=−⋅= ∑−=

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

k … −2 −1 0 … x(k) … 0.5 −0.25 1 h(0−k) 0 1 2 1 0

)k0(h)k(x −⋅ 0 0.5 −0.5 1 0

∑−=

−⋅=0

2k

)k0(h)k(x)0(y … … … 1

Le filtre médian classe les valeurs pondérées )k0(h)k(x −⋅ par ordre croissant (ou décroissant), puis choisit comme valeur de sortie la valeur de x(k) dont le produit

)k0(h)k(x −⋅ est au milieu de la liste (médiane).

k … −1 −2 0 … x(k) … −0.25 0.5 1 h(0−k) 0 2 1 1 0 x(k)⋅h(0−k) ordonnés 0 −0.5 0.5 1 0 y(0) = médiane … … … 0.5

Le filtre médian est souvent utilisé pour filtrer le bruit impulsionnel. Imaginons que x(n) ait été perturbé par un glitch important. On aurait par exemple :

−=

=−=−=

...;10;25.0;5.0...;)n('x0n1n2n

. Le filtre FIR classique donne alors y'(0) = 10 (au lieu de 1 !), alors que le filtre médian ne varie pas : y'(0) = y(0) = 0.5. Au lieu d'être pondérées et ajoutées au résultat (principe du filtre FIR), les valeurs extrêmes de x(n) sont tout simplement éliminées !

Filtrage numérique

HE-Arc, Ingénierie 56

La Figure 60 montre un exemple de sinus perturbé par du bruit impulsionnel, ainsi que le même sinus filtré avec un filtre médian de trois taps (coefficients h(n) = 1; 1; 1).

0 0.5 1 1.5 2

2

2Signal bruité avec bruit impulsionnel

2

2−

xn

Tf0 t n

0 0.5 1 1.5 2

2

2Signal filtré avec filtre médian (N=3)

2

2−

y n

Tf0 t n Figure 60

Avec le filtre médian, "ça passe ou ça casse" ! En étudiant le signal filtré y(n⋅Te), on constate que beaucoup d'impulsions ont complètement disparu, alors que d'autres sont restées telles quelles (dans cet exemple-ci, elles auraient toutes disparu si on avait posé N=5). Avec un filtre linéaire classique, on aurait eu un résultat très chahuté, car toutes ces impulsions ont forcément des composantes fréquentielles importantes dans la bande passante du filtre. En outre, on aurait N >> 3.

10.1 Déformation des signaux par le filtre médian

Note Dans ce chapitre-ci, nous ne considérerons que les filtres médians dont les taps sont tous identiques (égaux à un). Lorsque la pondération est différenciée, les conclusions de ce chapitre restent en gros valables (avec quelques nuances).

Le filtre médian déforme les signaux (même non bruités), en particulier lorsque la pente du signal change à l'intérieur de la fenêtre. Prenons par exemple la suite x(n) suivante, filtrée avec un FIR médian de trois taps égaux : h(n) = 1; 1; 1. Le résultat du filtrage est y(n).

...;2;3;4;4;4;3;2...;...;...;)n(y

...;1;2;3;4;5;4;3;2;1...;)n(x==

La valeur 5 a été 'rabotée' lorsque la fenêtre des échantillons valait 4; 5; 4 (changement de pente). Lorsque la pente ne varie pas dans la fenêtre, le signal reste inchangé avec un retard de (N−1)/2 = 1 valeur.

Filtrage numérique

HE-Arc, Ingénierie 57

A l'extrême, le filtre médian modifie totalement le signal si la pente varie sans arrêt à l'intérieur de la fenêtre ! Prenons le même filtre avec le signal x(n) périodique suivant :

...;1;1;1;1;1;1;1...;...;...;)n(y

...;0;1;2;1;0;1;2;1;0...;)n(x==

Ce phénomène de distorsion du signal est d'autant plus important que le nombre de taps N est grand.

10.2 Utilisation

Le filtre médian est très 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 linéaire et qu'il déforme les signaux !

11 Intégrateur et dérivateur numériques

La transformation bi-linéaire 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 dérivateur et intégrateur numériques, on préfère en principe la transformation par la différence du §6.1 page 28.

11.1 Dérivateur numérique

On a donc pour le dérivateur :

)z1(T1

)z(Hs)s(H 1

ed

Zd

−−⋅=→= (94) Cette transformation correspond à un dérivateur seulement lorsque f << fe (voir l'annexe 8 et la Figure 32 page 28). La Figure 61 illustre la différence entre ce dérivateur et un dérivateur idéal (la valeur f=1 correspond à fe/2).

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.90

5

10Différence - dérivateur - amplitude

10

0

D f( )

Dideal f( )

fe2

0 Hz⋅ f

Figure 61

Filtrage numérique

HE-Arc, Ingénierie 58

A noter que Matlab propose un "passe-bas dérivateur" de type FIR (voir l'outil 'fdatool'). La Figure 62 illustre ce principe intéressant si on doit à la fois filtrer et dériver.

Hd(f)

fB-B

j.2πf

Figure 62

11.1.1 Réalisation pratique

Le dérivateur décrit par (94) est réalisé à l'aide d'une seule cellule de retard, comme l'illustre la Figure 63. A noter que le dérivateur est un filtre FIR à deux coefficients.

x(n)z−1

y(n)1/Te 1/Te

Figure 63

11.2 Intégrateur numérique

Un intégrateur numérique est défini de la manière suivante :

nn-1n-2n-3

x(n)x(n-1)x(n-2)

x(n-3)

Surface = y(n)

Figure 64

On voit que y(n) a un peu d'avance sur x(n); nous verrons la conséquence de cela plus tard. D'après la Figure 64, on déduit :

)n(xT)1n(y)n(y e ⋅=−− (95)

)z(YT)z(Yz)z(Y e1 ⋅=⋅− − (96)

On conclut :

)z1(1

T)z(Hs1

)s(H 1eiZ

i −−⋅=→= (97)

Comme il a déjà été dit plus haut pour le dérivateur, il faut veiller à ce que la fréquence d'échantillonnage soit grande par rapport aux fréquences intégrées.

Filtrage numérique

HE-Arc, Ingénierie 59

La Figure 65 illustre la différence entre cet intégrateur et un intégrateur idéal (la valeur f=1 correspond à fe/2).

0 0.2 0.4 0.6 0.8 10

2

4

Différence - intégrateur - amplitude5

0

I f( )

Iideal f( )

fe2

0 Hz⋅ f

Figure 65

Au niveau de la phase, l'avance vue auparavant se caractérise par une phase linéaire à pente positive. Cette phase est illustrée par la Figure 66.

0 0.2 0.4 0.6 0.8 1

3

2

1

0Différence - intégrateur - phase

0

π−

arg I f( )( )

arg Iideal f( )( )

fe2

0 Hz⋅ f

Figure 66

11.2.1 Réalisation pratique

L'intégrateur décrit par (97) est réalisé à l'aide d'une seule cellule de retard, comme l'illustre la Figure 67.

x(n)

z−1

y(n)Te

1 Figure 67

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

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

Réponse impulsionnelle du filtre idéalh t( ) 2 Bf⋅ sinc 2 Bf⋅ t⋅( )⋅:=

On a comme réponse h(t) :

2000 1500 1000 500 0 500 1000 1500 2000

0.5

1

Filtre idéal

Hk

fk

Hk si fk Bf≤ 1, 0,( ):=

fk fmin k ∆f⋅+:=

k 0 NbPts 1−..:=

∆ffmax fmin−

NbPts:=NbPts 1024:=fmax

fe

2:=fmin

fe−

2:=

Te1

fe:=fe 4 Bf⋅:=

Bf 1 kHz⋅:=

Filtre désiré :

sinc x( ) si x 0≠sin π x⋅( )

π x⋅, 1,

:=PhaseCorr x( ) cor 0←

N dernier x( )←

out0 x0←

outn xn 2 π⋅ cor⋅−←

cor cor 1+←

outn xn 2 π⋅ cor⋅−←

outn outn 1−>if

n 1 N..∈for

out

:=

Définitions générales :

Annexe 1: comparaison de filtres FIR avec différentes fenêtres

1

Annexe 1

2000 1500 1000 500 0 500 1000 1500 2000

0.5

1

Comparaison Rectangulaire-Hamming

Hrfk

Hhfk

Hk

fk

Hhf k Hhz ej 2⋅ πTefk⋅( ):=

Hrf k Hrz ej 2⋅ πTe fk⋅( ):=

Hhz z( )

0

NbTaps 1−

n

hhn zn−

⋅∑=

:=Hrz z( )

0

NbTaps 1−

n

hn zn−

⋅∑=

:=

Fenêtre de Hamming :Fenêtre rectangulaire :

Transformée en Z des deux filtres :

0.001 8 .10 4 6 .10 4 4 .10 4 2 .10 4 0 2 .10 4 4 .10 4 6 .10 4 8 .10 4 0.001

0

0.5

Signaux h'(t)

hn

hhn

tn

hhn 2 Bf⋅ Te⋅ sinc 2 Bf⋅ tn⋅( )⋅ whn⋅:=

hn 2 Bf⋅ Te⋅ sinc 2 Bf⋅ tn⋅( )⋅ wrn⋅:=

On a donc :

whn 0.54 0.46 cos2 π⋅

NbTaps 1−n⋅

⋅−:=Fenêtre de Hamming :

wrn 1:=Fenêtre rectangulaire :

Tf NbTaps Te⋅:=tn nNbTaps 1−

2−

Te⋅:=n 0 NbTaps 1−..:=

NbTaps 9:=Fenêtre 1 :

On va prendre différents types de fenêtre.

2

Annexe 1

2000 1500 1000 500 0 500 1000 1500 2000

0.5

1

Comparaison Rectangulaire-Hamming

Hrfk

Hhfk

Hk

fk

Hhf k Hhz ej 2⋅ πTefk⋅( ):=

Hrf k Hrz ej 2⋅ πTe fk⋅( ):=

Hhz z( )

0

NbTaps 1−

n

hhn zn−

⋅∑=

:=Hrz z( )

0

NbTaps 1−

n

hn zn−

⋅∑=

:=

Fenêtre de Hamming :Fenêtre rectangulaire :

Transformée en Z des deux filtres :

0.003 0.002 0.001 0 0.001 0.002 0.003

0

0.5

Sigaux h'(t)

hn

hhn

tn

hhn 2 Bf⋅ Te⋅ sinc 2 Bf⋅ tn⋅( )⋅ whn⋅:=

hn 2 Bf⋅ Te⋅ sinc 2 Bf⋅ tn⋅( )⋅ wrn⋅:=

On a donc :

whn 0.54 0.46 cos2 π⋅

NbTaps 1−n⋅

⋅−:=Fenêtre de Hamming :

wrn 1:=Fenêtre rectangulaire :

Tf NbTaps Te⋅:=tn nNbTaps 1−

2−

Te⋅:=n 0 NbTaps 1−..:=

NbTaps 29:=Fenêtre 2 :

3

Annexe 1

On constate que la fenêtre 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 'repoussée' en bout de bande passante. Avec une fenêtre de Hamming, l'effet de Gibbs disparaît quasiment, mais la pente de la transition bande passante/bande de réjection est un peu plus faible.

2000 1500 1000 500 0 500 1000 1500 2000

0.5

1

Comparaison Rectangulaire-Hamming

Hrfk

Hhfk

Hk

fk

Hhf k Hhz ej 2⋅ πTefk⋅( ):=Hrf k Hrz e

j 2⋅ πTe fk⋅( ):=

Hhz z( )

0

NbTaps 1−

n

hhn zn−

⋅∑=

:=Hrz z( )

0

NbTaps 1−

n

hn zn−

⋅∑=

:=

Fenêtre de Hamming :Fenêtre rectangulaire :Transformée en Z des deux filtres :

0.01 0.005 0 0.005 0.01

0

0.5

Signaux h'(t)

hn

hhn

tn

hhn 2 Bf⋅ Te⋅ sinc 2 Bf⋅ tn⋅( )⋅ whn⋅:=

hn 2 Bf⋅ Te⋅ sinc 2 Bf⋅ tn⋅( )⋅ wrn⋅:=

On a donc :

whn 0.54 0.46 cos2 π⋅

NbTaps 1−n⋅

⋅−:=Fenêtre de Hamming :

wrn 1:=Fenêtre rectangulaire :

Tf NbTaps Te⋅:=tn nNbTaps 1−

2−

Te⋅:=n 0 NbTaps 1−..:=

NbTaps 101:=Fenêtre 3 :

k

4

Annexe 1

Si on veut apprécier tout cela en dB :

2000 1500 1000 500 0 500 1000 1500 2000100

50

0

Comparaison Rectangulaire-Hamming en dB

20 log Hrfk( )⋅

20 log Hhfk( )⋅

fk

On voit que si la transition bande passante/bande de réjection est plus lente avec la fenêtre de Hamming, l'affaiblissement en bande de réjection est bien meilleur !

Avec un zoom sur la bande passante...

2000 1500 1000 500 0 500 1000 1500 20001

0.5

0

0.5

1Comparaison Rectangulaire-Hamming en dB

20 log Hrfk( )⋅

20 log Hhfk( )⋅

fk

L'effet de Gibbs n'a pas disparu avec le fenêtrage de Hamming. Il a été considérablement réduit.

5

Annexe 1

6

n

x(n)

n

Les signaux au départ

Convolution pour n=0

k

x(k)

k

n

y(n)

y(0)

h(0−k)

Convolution pour n=5

k

k

n

y(5)

k=0

n=0

k=0

n=0

n=0

k=5

n=5

k=0

n=0

Annexe 2: exemple de produit de convolution

Ave

nir

Pré

sent

Pas

sé I

Pas

sé I

I

k=0

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

0

Signal échantillonné x(n*Te)

xn

tn

Signal échantillonné (domaine temporel) : xn x tn( ):=

tn tmin n Ts⋅+:=

tamax tamin−:=tamin 15− Ts⋅:=tmax tmin NbPts 1−( ) Ts⋅+:=tminNbPts−

2Ts⋅:=

n 0 NbPts 1−..:=

Tf 0.186 s=Tf NbPts Ts⋅:=NbPts 8192=NbPts 512 16⋅:=

Dimension de la fenêtre :

Ts1

fs:=fs 44.1 kHz⋅:=

On l'échantillonne à :

x t( ) si t 0≠3

2

A

π t⋅⋅ sin 2 π⋅ Bs⋅ t⋅( )⋅

A

2 π2

⋅ Bs⋅ t2

1 cos 2 π⋅ Bs⋅ t⋅( )−( )⋅−, 2 A⋅ Bs⋅,

:=

Bs 20 kHz⋅:=

A 1V

s⋅:=

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

sinc x( ) si x 0≠sin π x⋅( )

π x⋅, 1,

:=

Définitions générales :

Annexe 3 - Essai de sous-échantillonnage

1

Annexe 3

0 2000 4000 6000 8000 1 .104 1.2 .104 1.4 .104 1.6 .104 1.8 .104 2 .104 2.2 .104

0.5

Réponse en amplitude après filtrage

XFk

fk

XF FFT xf( ) Tf⋅:=xf nn NbTaps− 1+

n

m

si m 0≥ xm hn m−⋅, 0,( )∑=

:=

A présent on filtre (passe-bas, B=1 kHz).

m 0 NbTaps 1−..:=

NbTaps 389=NbTaps dernier h( ) 1+:=

h LIREPRN "sous-echantillonnage.prn"( ):=

A présent on filtre avec un filtre FIR exporté de Matlab :

0 2000 4000 6000 8000 1 .104 1.2 .104 1.4 .104 1.6 .104 1.8 .104 2 .104 2.2 .104

1

Réponse en amplitude |X(f)| unilat.

Xk

fk

fmaxfs

2:=fmin 0 Hz⋅:=fk k ∆f⋅:=k 0

NbPts

2..:=

∆f 5.383 Hz=∆f1

Tf:=X FFT x( ) Tf⋅:=

Domaine fréquentiel :

2

Annexe 3

A présent on va effectuer l'opération qui consiste à prendre un échantillon sur 16 !!!

NbPts2NbPts

16:= NbPts2 512= On n'a donc plus que 512 points.

m 0 NbPts2 1−..:= k 0NbPts

21−..:= fk k ∆f⋅:= fe

fs

16:=

xfsm xf m 16⋅:=

XFS FFT xfs( ) Tf⋅:=

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

0 200 400 600 800 1000 1200

0.2

0.4

0.6

Réponse en amplitude du signal décimé

XFSk

fk

3

x1n x tn( ):=xidk x t1k( ):=t1k tmin k

Ts

8⋅+:=

k 0 Nb_Ts 8⋅..:=tn tmin n Ts⋅+:=

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

tamax tamin−:=tamin 5.5− Ts⋅:=tmax tmin Nb_Ts 1−( ) Ts⋅+:=tminNb_Ts−

2Ts⋅:=

n 0 Nb_Ts 1−..:=

∆f 43.066 Hz=∆f1

Tf:=Tf 0.023 s=

Annexe 4 - Essai de sur-échantillonnage

Définitions générales :

sinc x( ) si x 0≠sin π x⋅( )

π x⋅, 1,

:=

On prend un signal de bande passante carrée avec B=20*kHz.

A 1V

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

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

2 .10 4 1 .10 4 0 1 .10 4 2 .10 4

Signal x(t)

x t( )

t

1 .105 5 .104 0 5 .104 1 .105

0.5

1

Signal X(f)

X f( )

f

On l'échantillonne à :

fs 44.1 kHz⋅:= Ts1

fs:=

Dimension de la fenêtre :

Nb_Ts 1024:= Tf Nb_Ts Ts⋅:=

1

Annexe 4

Voici donc le signal échantillonné x1(t) :

1 .10 4 5 .10 5 0 5 .10 5 1 .10 4

0

2 .104

4 .104

Signal échantillonné x1(t)

x1n

xidk

tn t1k,

On effectue une analyse féquentielle de -fs à fs du signal échantillonné (FFT non normalisée) :

X1_tmp FFT x1( ) Nb_Ts⋅:= m 0 2 Nb_Ts⋅..:=

fm m Nb_Ts−( ) ∆f⋅:=

m 0Nb_Ts

2..:= X1m X1_tmpm:= X1 Nb_Ts

2m+

X1_tmp Nb_Ts

2m−

:=

X1Nb_Ts m+ X1_tmpm:= X1 Nb_Ts 3⋅

2m+

X1_tmp Nb_Ts

2m−

:=

m 0 2 Nb_Ts⋅..:=

4 .104 3 .104 2 .104 1 .104 0 1 .104 2 .104 3 .104 4 .104

2 .104

4 .104

Rép. en ampl. |X1(f)| pour -fs < f <fs

X1m

fm

2

Annexe 4

1.76 .105 1.32 .105 8.82 .104 4.41 .104 0 4.41 .104 8.82 .104 1.32 .105 1.76 .105

2 .104

4 .104

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

X2m

fm

m 0 2 Nb_Te⋅..:=

X2 Nb_Te 3⋅

2m+

X2_tmp Nb_Te

2m−

:=X2Nb_Te m+ X2_tmpm:=

X2 Nb_Te

2m+

X2_tmp Nb_Te

2m−

:=X2m X2_tmpm:=m 0Nb_Te

2..:=

fm m Nb_Te−( ) ∆f⋅:=

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

On pratique une analyse fréquentielle du signal avant le filtrage pour -fe < f < fe:

1 .10 4 5 .10 5 0 5 .10 5 1 .10 4

0

2 .104

4 .104

Signal x2(t)

x2n

xidk

tn t1k,

x24 m⋅ x1m:=x2n 0 x10⋅:=

tn tmin n Te⋅+:=

m 0 Nb_Ts 1−..:=n 0 Nb_Te 1−..:=

Te 5.669 106−

s⋅=Te1

fe:=fe 176.4 kHz=fe fct fs⋅:=

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

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

3

Annexe 4

A présent 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...

hm hm fct⋅:=

A présent on filtre...

x3_tmpnn NbTaps− 1+

n

m

si m 0≥ x2m hn m−⋅, 0,( )∑=

:=

On peut à présent apprécier le résultat.

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

x3n si n dernier x3_tmp( )NbTaps 1−

2−< x3_tmp

nNbTaps 1−

2+

, 0 x3_tmp0⋅,

:=

1 .10 4 5 .10 5 0 5 .10 5 1 .10 4

0

2 .104

4 .104

Résultat final dans le domaine temporel

x3n

xidk

tn t1k,

4

Annexe 4

On pratique une analyse fréquentielle du signal filtré pour -fe < f < fe:

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

m 0Nb_Te

2..:= X3m X3_tmpm:= X3 Nb_Te

2m+

X3_tmp Nb_Te

2m−

:=

X3Nb_Te m+ X3_tmpm:= X3 Nb_Te 3⋅

2m+

X3_tmp Nb_Te

2m−

:=

m 0 2 Nb_Te⋅..:=

1.5 .105 1 .105 5 .104 0 5 .104 1 .105 1.5 .105

5 .104

1 .105

1.5 .105

|X3(f)| de -fe à fe après filtrage

X3m

fm

Bien entendu, cette FFT n'est pas normalisée: on garde un facteur fe par rapport au signal qui sera restitué. Si on supprime ce facteur fe, on retrouve le signal initial, périodique de période fe.

1.5 .105 1 .105 5 .104 0 5 .104 1 .105 1.5 .105

0.5

1

|X3(f)| normalisée de -fe à fe

X3m Te⋅

fm

5

Annexe 4

6

Nombre de périodes sinc

Le retard du filtre est le suivant :

φTf

2:= φ 17.05ms=

Filtre en temps

ht t( ) 2 B⋅ sinc 2 B⋅ t⋅( )⋅:= Réponse impulsionnelle du filtre idéal non fenêtré (de fait: fenêtre rectangulaire)

Calcul des paramètres (taps) :

n 0 NbTaps 1−..:= tn Tmin n Te⋅+:=

La courbe du filtre peut enfin être calculée (non calibrée !) :

h1n Te ht tn φ−( )( )⋅:=

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

Somme_h1

0

NbTaps 1−

n

h1n∑=

:= Somme_h1 0.995= Il faut diviser tous les coefficients g1n par Somme_gv1 pour obtenir un gain de 1 en DC.

hn

h1n

Somme_h1:= hvmax max h( ):= hvmax 0.067=

Annexe 5: Filtre FIR - caractéristiques générales par un exemple

PhaseCorr x( ) cor 0←

N dernier x( )←

out0 x0←

outn xn 2 π⋅ cor⋅−←

cor cor 1+←

outn xn 2 π⋅ cor⋅−←

outn outn 1−>if

n 1 N..∈for

out

:= ms 103−

s⋅≡sinc x( ) si x 0≠

sin π x⋅( )π x⋅

, 1,

:=

Filtre en fréquence

B 1 kHz⋅:= T01

B:= NbTaps 2

10:= mid partentière

NbTaps

2

:=

NbTaps 1024=

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

Te1

fe:= Te 33.333 10

6−s⋅=

La longueur du filtre FIR est la suivante :Tmin 0 sec⋅:=Tmax NbTaps 1−( ) Te⋅:= Tf Tmax Tmin−:= ∆f

1

Tf:= Tf B⋅ 34.1=

1

Annexe 5

2000 1500 1000 500 0 500 1000 1500 2000

Réponse en phase du filtre arg(H(f))

Phsw

fw

2000 1500 1000 500 0 500 1000 1500 2000

0.5

1

Réponse en amplitude du filtre |H(f)|

Hw

fw

Phsw Phs_tmpw Phs_tmpmid−:=Phs_tmp PhaseCorr arg H( )( ):=

Hw Hz ej 2⋅ πTe fw⋅( ):=Hz z( )

0

NbTaps 1−

n

hn zn−

⋅∑=

:=

Transformée de FourierTransformée en Z :

fw mid− ∆f⋅ w ∆f⋅+:=w 0 NbTaps 1−..:=

fmin fmax−:=fmax 2 B⋅:=

Re-calculons le signal en fréquence...

Somme_h_abs 2.619=Somme_h_abs

0

NbTaps 1−

n

hn∑=

:=Indications :

0 0.0034 0.0068 0.0102 0.0136 0.017 0.0205 0.0239 0.0273 0.0307 0.0341

0.02

0.027

0.074Rép. impuls. du filtre h(n*Te)

hn

0

tn

2

Annexe 5

τ 17.05 ms=τNbTaps 1−

2Te⋅:=On compare avec le retard :

0 0.0085 0.0171 0.0256 0.0341 0.0427 0.0512 0.0597 0.0683

2

2Signal filtré

Usk

tk

... et de sortie...

0 0.0085 0.0171 0.0256 0.0341 0.0427 0.0512 0.0597 0.0683

2

2Signal avant filtrage

Uek

tk

Signal d'entrée...

Uskk NbTaps− 1+

k

m

si m 0≥ Uem hk m−⋅, 0 V⋅,( )∑=

:=

Voyons à présent la convolution...

Uek U0 cos 0.7 2 π⋅ B⋅( )⋅ tk⋅ cos 1.2 2 π⋅ B⋅( )⋅ tk⋅ + ⋅:=

Signal d'entrée proprement dit...

tk k Te⋅:=tmax Nb_sig Te⋅:=tmin 0 Te⋅:=k 0 Nb_sig 1−..:=

Nb_sig 2 NbTaps⋅:=

La longueur du signal est déterminée par le nombre de points

U0 1 V⋅:=

Signal transformé en temps

3

Annexe 5

τ 17.05 ms=On compare avec le retard :

0 0.0085 0.0171 0.0256 0.0341 0.0427 0.0512 0.0597 0.0683

0.5

1

Réponse indicielle

Usk

0

tk

Signal de sortie...

Uskk NbTaps− 1+

k

m

si m 0≥ Uem hk m−⋅, 0 V⋅,( )∑=

:=

Voyons à présent la convolution :

Uek U0:=

Signal d'entrée proprement dit...

Réponse indicielle

τ 17.05 ms=On compare avec le retard :

0 0.0085 0.0171 0.0256 0.0341 0.0427 0.0512 0.0597 0.0683

0.05

Réponse impulsionnelle

Usk

0

tk

Signal de sortie...

Uskk NbTaps− 1+

k

m

si m 0≥ Uem hk m−⋅, 0 V⋅,( )∑=

:=

Voyons à présent la convolution :

Uek U0 k 0=( )⋅:=

Signal d'entrée proprement dit...

Réponse impulsionnelle

4

B 847.689 Hz=B1

π Te⋅arctan π Te⋅ Ba⋅( )⋅:=

H f( ) Hz ej 2⋅ π f⋅ Te⋅( ):=

f fmin fminfmax fmin−

Nb_f

+, fmax..:=

Si on apprécie le résultat de Hz(z) dans Fourier :

Hz z( )1

12

Te

z 1−

z 1+⋅ τ⋅+

:=

On passe à la transformation bi-linéaire :

On a bien 3 dB d'affaiblissement à la fréquence fa=Ba.Hf Ba( ) 0.707=

4000 3000 2000 1000 0 1000 2000 3000 4000

0.5

1

Filtre RC analogique - Rép. en ampl.

Hf fa( )

lim3dB

fa

fa fmin fminfmax fmin−

Nb_f

+, fmax..:=Nb_f 1024:=fmax 4 Ba⋅:=fmin 4− Ba⋅:=

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

Filtre dans Fourier :

Hs s( )1

1 s τ⋅+:=On a pour Hs(s) :

τ1

2π Ba⋅:=

lim3dB1

2:=Te

1

fe:=fe 4 kHz⋅:=Ba 1 kHz⋅:=

Le filtre à réaliser 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 numérique aura donc une compression de la bande passante. On choisit fe= 4 kHz.

Annexe 6 - Transformation bilinéaire, exemple d'un filtre RC

1

Annexe 6

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

4000 3000 2000 1000 0 1000 2000 3000 4000

0.5

1

Rép. en ampl. |H(f)| après correction

H f( )

lim3dB

f

H f( ) Hz ej 2⋅ π f⋅ Te⋅( ):=Si on apprécie le résultat de Hz(z) dans Fourier :

Hz z( )1

12

Te

z 1−

z 1+⋅ τ⋅+

:=On passe à la transformation bi-linéaire :

Hs s( )1

1 s τ⋅+:=On a pour Hs(s) :

τ1

2π Ba⋅:=

On reprend la même trame qu'auparavant :On conçoit donc un filtre numérique basé sur Ba=1273 Hz, et non pas Ba=1 kHz !

Ba 1273.24 Hz=Ba1

π Te⋅tan π Te⋅ B⋅( )⋅:=B 1 kHz⋅:=On pose :

Procédure à suivre pour un filtre numérique

On a bien 3 dB d'affaiblissement à la fréquence f=B.H B( ) 0.707=

4000 3000 2000 1000 0 1000 2000 3000 4000

0.5

1

Rép. en ampl |H(f)| après transformation

H f( )

lim3dB

f

La dernière équation signifie que la bande passante du filtre original a été comprimée.Voici donc le résultat numérique :

2

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 défavorable :

n 0 NbPts 1−..:= tn n Te⋅:=

A1 1:= fcos11.5

N Te⋅:= fcos1 23.438 Hz=

A2 4 101−

⋅:= fcos2 1431 Hz⋅:=

xn A1 cos 2πfcos1 tn⋅( )⋅ A2 cos 2πfcos2 tn⋅( )⋅+:= xmax max x( ):=

0 0.064 0.13 0.19 0.26 0.32 0.38

1

0

1

Signal d'origine

xn

tn

Annexe 7 - Exemple de filtrage par FFT (overlap-save)B 1 kHz⋅:= fe 4 B⋅:= Te fe

1−:= 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

1

Annexe 7

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

hk h1k:= hk N+ 0:=

l 0 2 N⋅ 1−..:=

0 50 100 150 200 250 300 350 400 450 500

0.5

Réponse impulsionnelle h'(n)

hl

l

A présent on calcule la FFT :

Tf 2 N⋅ Te⋅:= ∆f1

Tf:= fk k ∆f⋅:=

H FFT h( ) 2⋅ N⋅:=

0 200 400 600 800 1000 1200 1400 1600 1800 2000

0.5

1

FFT de h(n) - Filtre FIR

Hk

fk

A présent on applique l'algorithme magique :

y

Ltmp N L⋅←

ktmp Ltmp k+←

tk si ktmp N≥ xktmp N−, 0,( )←

k 0 2 N⋅ 1−( )..∈for

T FFT t( )←

Tf k Tk Hk⋅←

k 0 N..∈for

tf IFFT Tf( )←

Ltmp N L⋅←

ysLtmp k+ tf k N+←

k 0 N 1−( )..∈for

L 0 Nb_FFT 1−..∈for

ys

:=

2

Annexe 7

On apprécie le signal filtré...

0 0.064 0.13 0.19 0.26 0.32 0.38

1

0.5

0

0.5

1

Signal filtré

yn

tn

Retard : τNbTaps

2

Te⋅:= τ 0.032 s=

Déphasage : γ 2π fcos1⋅ τ⋅:= γ 271.055 deg=

3

Annexe 8 - Intégrateur et dérivateur numériques

fe 2:= Te1

fe:= Te 0.5=

Transformation bi-linéaire

Dérivateur : Dz z( )2

Te

z 1−

z 1+⋅:=

On a : D f( ) Dz ej 2⋅ π Te⋅ f⋅( ):= Dideal f( ) j 2⋅ π f⋅:=

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

5

10Bilinéaire - dérivat. - ampl. 0<f<fe/2

D f( )

Dideal f( )

f

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

Au niveau de la phase il n'y a pas de problème :

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

1

2

3

Bilinéaire - dérivat. - phase 0<f<fe/2

arg D f( )( )

arg Dideal f( )( )

f

Les courbes de phase sont confondues.

1

Annexe 8

Intégrateur : Iz z( )Te

2

z 1+

z 1−⋅:=

On a : I f( ) Iz ej 2⋅ π Te⋅ f⋅( ):= Iideal f( )

1

j 2⋅ π f⋅:=

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

2

4

Bilinéaire - intégrat. - ampl. 0<f<fe/2

I f( )

Iideal f( )

f

Au niveau de la phase il n'y a pas de problème :

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

3

2

1

Bilinéaire - intégrat. - phase 0<f<fe/2

arg I f( )( )

arg Iideal f( )( )

f

Les courbes de phase sont confondues.

2

Annexe 8

Transformation par la différence

Dérivateur : Dz z( )1

Te1 z

1−−( )⋅:=

On a : D f( ) Dz ej 2⋅ π Te⋅ f⋅( ):= Dideal f( ) j 2⋅ π f⋅:=

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

5

10Différence - dérivat. - ampl. 0<f<fe/2

D f( )

Dideal f( )

f

On diverge un peu moins qu'avec la bi-linéaire, mais on diverge quand même.

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

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

1

2

3

Différence - dérivat. - phase 0<f<fe/2

arg D f( )( )

arg Dideal f( )( )

f

Ce retard est égal a : τTe

2:=

3

Annexe 8

Intégrateur : Iz z( ) Te1

1 z1−

−⋅:=

On a : I f( ) Iz ej 2⋅ π Te⋅ f⋅( ):= Iideal f( )

1

j 2⋅ π f⋅:=

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

2

4

Différence - intégrat. - ampl. 0<f<fe/2

I f( )

Iideal f( )

f

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

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

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

3

2

1

Différence - intégrat. - phase 0<f<fe/2

arg I f( )( )

arg Iideal f( )( )

f

Cette 'avance' est égal a : τTe

2:=

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

4

Annexe 8

A présent les courbes sont confondues.

0 50 100 150 200 250 300 350 400 450 500

5

5

Intégrations pour fcos=fe/100

yn

yidealn

tn

yidealn yidealn DCyid−:=DCyid 0.116=DCyid1

NbPts0

NbPts 1−

n

yidealn∑=

⋅:=

yn yn DCy−:=DCy 0.134−=DCy1

NbPts0

NbPts 1−

n

yn∑=

⋅:=

Il y a un léger problème d'offset DC, que l'on peut supprimer.

0 50 100 150 200 250 300 350 400 450 500

5

5

Intégrations pour fcos=fe/100

yn

yidealn

tn

yidealn1

2πfcossin 2 π⋅ fcos⋅ tn 0.5 Te⋅+( )⋅ ⋅:=ym ym 1− Te xm⋅+:=

y0 0:=m 1 NbPts 1−..:=

A la sortie de l'intégrateur :

xn cos 2 π⋅ fcos⋅ tn⋅( ):=fcosfe

2

1

50⋅:=

On intègre un cosinus dont la fréquence est le 50ème de la demi-fréquence d'échantillonnage. Ensuite on comparera avec le signal idéal (on profite pour corriger le décalage de Te/2).

tmax NbPts 1−( ) Te⋅:=tmin 0 Te⋅:=tn n Te⋅:=n 0 NbPts 1−..:=NbPts 1024:=

Exemple d'application

5

Annexe 8

Il y a ici pas mal de distorsion entre le cas idéal et le cas réel.

0 5 10 15 20 25

0.5

0.5

Intégrations pour fcos=fe/4

yn

yidealn

tn

yidealn yidealn DCyid−:=DCyid 1.523 104−

×=DCyid1

NbPts0

NbPts 1−

n

yidealn∑=

⋅:=

yn yn DCy−:=DCy 0.25−=DCy1

NbPts0

NbPts 1−

n

yn∑=

⋅:=

On supprime l'offset DC :

0 5 10 15 20 25

0.5

0.5

Intégrations pour fcos=fe/4

yn

yidealn

tn

yidealn1

2πfcossin 2 π⋅ fcos⋅ tn 0.5 Te⋅+( )⋅ ⋅:=ym ym 1− Te xm⋅+:=

y0 0:=m 1 NbPts 1−..:=

A la sortie de l'intégrateur :

xn cos 2 π⋅ fcos⋅ tn⋅( ):=fcosfe

2

1

2.1⋅:=

A présent on procède de la même manière avec un cosinus dont la fréquence est à peu près la moitié de la demi-fréquence d'échantillonnage.

6

Annexe 8

7