filtrage numérique - robertponge · filtrage numérique he-arc, ingénierie 3 3 filtres fir...
TRANSCRIPT
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
Sπ
= (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
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
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