Vous êtes sur la page 1sur 40

MIC7340

Chapitre 12
Filtres
Quatres types fondamentaux
Passe-bas Passe-haut
Idéal
Réalisable

fc fc
Passe-bande Coupe-bande

fc1 fc2 fc1 fc2


• Peuvent être réalisés par des moyens analogiques ou numériques
• L’analyse de la réponse en fréquence se fait généralement avec la
transformée de Fourier, la synthèse part de la transformée de
Laplace
Série de Fourier
• Permet de représenter tout
signal périodique par une
combinaison de signaux
sinusoïdaux :


s( t )  a0   ak cos( k0t )
k 1

   bk sin( k0t )
k 1
où 2
0 
T
Série et transformée de Fourier
• L’égalité sin() + j cos()=e j permet aussi d’écrire :
 T

c e jk0 t 1
s( t )  k ck   s( t )e  jk0t dt
k   où T 0
– Chaque terme se distingue par une amplitude ck et un angle de phase k=k0t
• Lorsque s(t) n’est pas périodique ou T est infini, on utilise la transformée
de Fourier :
 

 F  e
1
s( t )  jt
d F     s( t )e  jt
dt
2 
où 

– s(t) comprend un nombre infini de composant et F() est une fonction continue
• La transformée de Fourier est aussi applicable aux fonctions de durée
finie ou périodiques; F() est alors discontinu
• Dans tous les cas, les paires (ck,k) ou F() décrivent le spectre de
fréquences de s(t)
Transformée de Laplace
• Définie par:
  j T

s( t ) 
1
 F s  e st
ds où F s    s( t )e  st
dt et s    j
2 j   j 0

• Peut être vue comme une extension de la transformée de


Fourier où j est remplacé par s= + j
• L’usage de s au lieu de j permet de rendre compte aussi du
comportement transitoire d’un circuit
•  permet d’étudier la réponse transitoire et j la réponse permanente
• Utile pour déterminer la stabilité d’un circuit pour différente
conditions d’opération
• On passe souvent de la transformée de Fourier à la transformée
de Laplace en remp;açant j par s dans l’une ou l’autre
• En pratique, la transformée de Fourier est plus facile d’usage
Propriété fondamentale
• Les relations
s(t) F()
s(t)F(s)
sont bi-univoques
• Pour chaque s(t), le F() ou F(s) correspondant est unique
s’il existe, et vice-versa
• Par conséquent l’impact d’un circuit sur un signal s(t) peut
se faire de manière équivalente en faisant une analyse
dans le temps ou dans l’un des espaces j ou s,
dépendant de qui est le plus avantageux
Fonction de transfert
• Définie par H(s)=Y(s)/X(s) ou Y(s) et X(s) sont la
sortie et l’entrée du circuit étudié
• Joue un rôle similaire à celui la fonction de réponse
en fréquence, mais dans le domaine de Laplace
• Dans tous les cas :

Y j   X j H j 
Ys  XsHs 
• En pratique, on retrouve aussi souvent l’une que
l’autre formulation
Moyens de mise en oeuvre des filtres

• Filtres numériques : implémentés par microprocesseur,


microcontrôleurs, FPGA ou autre moyen numérique
• Le filtre calcule directement la fonction de réponse en fréquence en matériel
ou logiciel

• Filtres analogiques : la mise en œuvre est basée sur des


composants analogiques qui réalisent la fonction de réponse en
fréquence
• Les filtres passifs utilisent uniquement R, L et C et ont un gain inférieurs à 1.
• Les filtre analogiques actifs ajoutent des composants actifs (habituellement
des amplificateurs operations) pour un gain arbitraire
Filtre analogiques passifs

+ 0 dB
+ R
-3 dB . Diagramme de
VI C VO Bode
_
_
1/RC 
Filtre passe-bas de permier ordre

1
1 x
Diagramme linéaire
0.707
VO ( jw) jwC 1
 
Vi ( jw) R 1 1  jwRC
jwC 1/RC 
0

Réponse en amplitude
Filtre analogiques passifs
0 dB
+ Bode
. -3 dB
C
+
Vi R
_ VO 1/RC
_
1/RC 

Filtre passe-haut de premier ordre 1


0.707 x.
Linéaire
VO ( jw) R jwRC
 
Vi ( jw) R 1 1  jwRC
jwC
0 1/RC 
Filtre analogiques passifs

C L +
+ 0 dB
Vi R VO
-3 dB
. . Bode
_
_

lo hi

Filtre passe-bande du second-ordre 1 . .
0.707 Linéaire
R
VO ( s) s
 L
Vi ( s) s 2  R s  1 lo hi
0 
L LC
Filtre analogiques passifs
Example

R + s 2  300000
+ L
VO s 2  3100s  300000
Vi
_ Gv (s) 
C
_
Matlab:
Filtre coupe-bande de second-ordre :
num = [1 0 300000];
1 den = [1 3100 300000];
2
s  w = 1 : 5 : 10000;
Gv ( s )  LC Bode(num,den,w)
R 1
s2  s  Bode
L LC Matlab
Filtre analogiques actifs
C C1
Rfb
R1
Rfb R1
C Rin
Rfb
+
+ Rin + Vin +
Vin R2 Ri
_ VO _ VO
_ + C2 +
_
Vin VO
_
_

Filtre passe-bas du 1er ordre Filtre passe-haut du 1er ordre

Filtre coupe-bande du 2nd ordre

Rappel : R1 C2

C1 R2 Rfb
Pour un ampli-op inverseur : G=-Zf/Zi R1 R2
Ri
+
Vin
_ +
VO
_

Filtre passe-bande du 2nd ordre


Filtres numériques
• Deux types fondamentaux
– À réponse impulsionnelle de durée finie (RIF)
– À réponse impulsionnelle de durée infinie (RII)
• Analysés et conçus à l’aide de la transformée z
– Adaptation de la transformée de Laplace aux systèmes à temps
échantillonnés avec le changement de variable z = eTs
– Permet donc de :
• Déterminer la réponse d’un filtre numérique à un signal d’entrée
• Étudier sa réponse en fréquence
• Étudier sa stabilité
Transformée Z
• La transformée z d’un signal à temps échantillonné
quelconque x[n] est définie par
X ( z )  k k x[k ]z  k

où z = esTe, s étant la variable de Laplace et Te la période


d’échantillonnage ; pour un signal causal k0=0.
• Il existe une relation biunivoque entre le signal et sa
transformée z :
xn 

Z
Xz
Fonctions de transfert numériques

• Si x[n] est l’excitation, h[n] la fonction de réponse du filtre


á une impulsion et y [n] sa sortie, alors

Yz  XzHz 
et H( ) est la fonction de transfert du système.
• Résultat similaire à ceux trouvés pour les transformée de
Fourier et Laplace :
Y j   X j H j 
Ys  XsHs 
Diagrammes de placement des pôles-zéros
et réponse en fréquence
Ex. : H ( z )  3 z donne pôle
Im
1
z cercle unité
3 j
zéro
e
H ( e j )  3
j 1
e 
3
-1/3 1 Re
• L’effet du numérateur et du
dénominateur peut être représenté
par des vecteurs qui partent de pôles
ou zéros et se rejoignent en un point e j
commun sur le cercle unité. H ( e j )  3
1
e j 
• Les rapports d’amplitudes et les 3
 1
angles des vecteurs définissent la H ( e j )  3  e j   e j  
réponse en fréquence.  3
Comparaison entre RII et RIF
RIF RII
N 1

N 1 b z k
k

H z    h [ n ] z n H z   k 0
M 1
n 0 1   ak z  k
k 1
 Stable par défaut  La stabilité dépend de la position des
 Demande n>> 1 pour une bonne pôles de H(z)
performance  Peut donner une performance adéquate
 Peut demander un temps de calcul pour n=1 ou 2
escessif  La gamme dynamique se calcule
 La gamme dynamique se calcule difficilement
facilement  Peut nuire à la performance
 Réponse en phase linéaire si filtre  Réponse en phase non linéaire en
causal général
 Ne possède pas d’équivalent  Effets de quantification et d’arrondi
analogique stable plus prononcés que pour RIF.
 Possède un équivalent analogique
Propriétés d’un filtre RIF
• Équation d’e/s :
N 1
yn   bk  xn  k 
k 0

x[n] représente les valeurs successives du signal


d’entrée,
bk représente les coefficients de la fonction de
transfert du filtres,
y[n] représente les valeurs successives du signal
de sortie,
N est le nombre de coefficients du filtre
(l’ordre).
Réponse en fréquence d’un filtre FIR
• La transformée z de
N 1
hn   h[ k ]   n  k 
k 0
est: N 1
H z    hk  z k
k 0

 La fonction de réponse en fréquence du filtre est


obtenue en remplaçant z by ejTe :
N 1
H z  z e jTe    
 H   h n e  jkT
e

k 0
 La similarité de H() avec une série de Fourier suggère
une méthode pour trouver h[n] !
Propriétés d’un filtre RII
• Équation d’e/s :
N 1 M 1
y n    bk xn  k    ak yn  k 
k 0 k 1

x[n] représente les valeurs successives du signal d’entrée,


ak, bk représentent les coefficients de la fonction de transfert du
filtres,
y[n] représente les valeurs successives du signal de sortie,
N, M représentent les ordres du numérateur et du dénominateur
de H(Z) (M est souvent appelé l’ordre du filtre).
Réponse en fréquence d’un filtre RII
 La transformée z de
N 1 M 1
y n    bk xn  k    a yn  k 
k
k 0 k 1

N 1
est :
b z k
k

H z   k 0
M 1
1   ak z  k
k 1

 La fonction de réponse en fréquence du filtre est


obtenue en remplaçant z by ejTe :
N 1

b e k
 jkTe

H (  )  H z  z e jTe  k 0
M 1
1   ak e  jkTe
k 1
Propriétes de la réponse en fréquence
numérique
 Puisque e-j2k = 1, on a :
 2k 
H      H  
 Te 

 La réponse en fréquence est périodique avec période


2/Te dans le cercle de rayon unité. Si on normalise Te à
1, on a

H   2k   H  
Conception d’un filtre numérique

 Cinq étapes requises :


1. Spécification du filtre
2. Calcul des coefficients.
3. Choix d’une architecture de mise en oeuvre.
4. Simulation (option).
5. Implémentation.
 Dans la suite, on discute les filtres RII
Étape 1 : spécification du filtre
|H(f)| pass-band stop-band

fc : cut-off frequency fs/2 f(norm)


(a)

|H(f)| pass-band transition band stop-band |H(f)|


(dB) (linear)
p 1   p

0 1
1   p

pass-band
-3
ripple

stop-band
ripple
s  s

fs/2 f(norm)
fsb : stop-band frequency
fc : cut-off frequency
fpb : pass-band frequency
(b)
Étape 2 : calcul des coefficients
• Il existe deux approches :
– Placement direct des pôles et zeros dans la plan z
– Conversion d’un filtre analogique :
• Par transformation bilinéaire
• En utilisant le principe de l’invariance de la réponse
impulsionnelle
• Dans le cas de la transformation d’un filtre analogique,
on part souvent de l’équation d’un filtre passe bas
normalisé que l’on adapte au type désiré (passe haut,
passe bande, etc.) avant la conversion.
Méthode du placement des pôles et zéros
• Basée sur le principe que, dans le plan z :
– Le placement d’un zéros ~ |z|=1 minimise la fonction de
réponse en fréquence du filtre à cet endroit.
– Le placement d’un pôle ~ |z|=1 maximise la fonction de
réponse en fréquence du filtre à cet endroit.
– Pour obtenir un filtre avec des coefficients réels (donc
réalisable), il faut que les pôles et zéros soient à valeurs
réelles ou qu’ils apparaissent pas paires conjuguées.
• Méthode intuitive mais qui demande un réglage fin
Méthode du placement des pôles et zéros
• Exemple :
Méthode du placement des pôles et zéros
% Conception et simulation d’un filtre par placement de pôles et zéros
pole1 = 0.5+0.5i; % création de deux paires de pôles conjugués
pole2 = 0.8 +0.25i;
pole3 = conj(pole1); pole4 = conj(pole2);
poles = [pole1 pole2 pole3 pole4];
zero1 = -0.5 + 0.8i; % création de deux paires de zéros conjugués
zero2 = -0.2 + 0.9i;
zero3 = conj(zero1); zero4 = conj(zero2);
zeros = [zero1 zero2 zero3 zero4];
denz=poly(poles); % conversion des pôles en dénominateur de H(z)
numz=poly(zeros); % numérateur de H(z) = 1
zplane(numz, denz); % affichage des pôles et zéros
figure(2); freqz(numz,denz,256); % affichage de la réponse en fréquence
t=[0:1:127]; % test avec 128 valeurs d’un sinus corrompu
x=sin(2*pi*t/24);
x=x+rand(1,128)-0.5;
y=filter(numz,denz,x);
figure(3); plot(t,500*x,'b',t,y,'k');axis([0 128 -1000 1000]);axis('normal');
Méthode du placement des pôles et zéros
60
1
40

Magnitude (dB)
0.8

0.6 20
0.4
0
Imaginary Part

0.2

0 -20
-0.2
-40
-0.4 0 0.2 0.4 0.6 0.8 1
-0.6 Normalized Frequency ( rad/sample)
-0.8 100
-1

Phase (degrees)
-1 -0.5 0 0.5 1 0
Real Part

-100

1000 -200

800 -300
0 0.2 0.4 0.6 0.8 1
600 Normalized Frequency ( rad/sample)
400

200

-200

-400

-600

-800

-1000
0 20 40 60 80 100 120
Méthode du placement des pôles et zéros
% Autre exemple en utilisant des coordonnées polaires

angl=[0.2: 0.1: 0.5]*pi/2; % création de 4 paires conjuguées de pôles


poles=0.85*exp(j*angl);
poles=[poles 0.85*exp(-j*angl)];

denz=poly(poles) % conversion des pôles en dénominateur de H(z)


numz=[1]; % numérateur de H(z) = 1
zplane(numz, denz); % affichage des pôles et zéros
figure(2); freqz(numz,denz,256); % affichage de la réponse en fréquence

t=[0:1:127]; % test avec 128 valeurs d’un sinus bruité


x=sin(2*pi*t/24);
x=x+rand(1,128)-0.5;
y=filter(numz,denz,x);
figure(3); plot(t,500*x,'b',t,y,'k');axis([0 128 -1000 1000]);axis('normal');
Méthode du placement des pôles et zéros
1
60

40

Magnitude (dB)
0.8

0.6 20

0.4 0
Imaginary Part

0.2 -20
8
0 -40
0 0.2 0.4 0.6 0.8 1
-0.2
Normalized Frequency ( rad/sample)
-0.4
0
-0.6

Phase (degrees)
-100
-0.8

-1 -200
-1 -0.5 0 0.5 1
Real Part -300

-400
1000 0 0.2 0.4 0.6 0.8 1
Normalized Frequency ( rad/sample)
800

600

400

200

-200

-400

-600

-800

-1000
0 20 40 60 80 100 120
Conversion d’un filtre analogique
• Méthode la plus « simple »
• Exploite le fait qu’il existe des méthodes établies de
conception de filtres analogiques.
• Consiste à concevoir un filtre analogique et à le convertir
en filtre numérique.
• Les deux méthodes les plus utilisés sont :
– L’invariance de la réponse impulsionnelle :
h [ n ]  h t  t nTe
– La transformation bilinéaire :
H ( z )  H ( s ) s...
Méthode de l’invariance de la réponse impulsionnelle
h [ n ]  h t  t nT e

% Conception d’un filtre par la méthode de l’invariance de la réponse impulsionnelle

ai
[num,den]=butter(15,2*pi,'s'); % Filtre Passe Bas de Butterworth dans le domaine s avec N=15, fc=1 Hz H ( s )  K 
i s  pi
[a,p,K] = residue(num,den); % Décomposition en fractions élémentaires par la méthode des résidus :
figure(1); plot(p,'xk'); % digramme des pôles maqués par des x noirs
figure(2); freqs(num,den); % réponse en fréquence analogique
A B
% 
s  p1 s  p2
dans s donne Ae p1t  Be p2t dans t, ce qui donne dans z :
%
 Ae p1Te  Be p2Te
 A B 
z z
% A B 
z e p1Te z e p2Te z e p1Te z e p2Te
Te=0.05; % fe=20Hz (=> fc normalisé = 1Hz/(fe/2) =0.1)
pz=exp(p*Te); % conversion des pôles dans s en des pôles dans z
az=-a.*pz; % détermination des coefficients des fractions élémentaires correspondantes
K=K*sum(a); % Terme continu
[numz,denz] = residue(az,pz,K); % détermination de H(z) à partir des fractions élementaires dans z

figure(3); zplane(numz, denz); % digramme des pôles et zéros dans le plan z


figure(4); freqz(numz,denz); % réponse en fréquence numérique
Méthode de l’invariance de la réponse impulsionnelle
10
0 fc= c/2=1 Hz
8

Magnitude
6 -10
10
4

2 -20
10
-1 0 1 2
10 10 10 10
0
Frequency (rad/s)
200
-2

Phase (degrees)
100
-4
0
-6
-100
-8
-7 -6 -5 -4 -3 -2 -1 0 -200
-1 0 1 2
10 10 10 10
Frequency (rad/s)
fc= (c/2)fe=1 Hz
50

Magnitude (dB)
1.5
-50
1 -100

-150
0.5
Imaginary Part

-200
-2 -1 0
10 10 10
0
Normalized Frequency ( rad/sample)
0
-0.5
Phase (degrees)

-500
-1
-1000
-1.5
-1 -0.5 0 0.5 1 1.5 2 2.5 3 -1500
Real Part -2 -1 0
10 10 10
Normalized Frequency ( rad/sample)
Méthode de la transformation bilinéaire

 Normalement
1
ze sTe
 s  ln( z )
Te
 On peut donc dériver H(z) de H(s) par la transformation

H( z )  H( s ) 1
s ln( z )
Te

 Cette transformation donne des équations compliquées


 La transformation bilinéaire utilise l’approximation d’une
surface continue par un ensemble de surfaces
trapézoïdales.
Méthode de la transformation bilinéaire
t
1
y((k-1)Te )
A( t )  y(  )d   A ( s ) 
s
Y( s )
y(t)
y(kTe )
A( kTe )  A(( k  1 )Te ) 
 y( kTe )  y(( k  1 )Te )Te
2
A((k-1)Te )  A( z )  z 1 A( z ) 
 
1
1  z Te
Y( z )
2
 A( z )  e

T 1 z 1


2 1  z 1  Y( z )
k-1 k t=kTe
A( t )  A( kTe ), alors 1
Te 1  z 1
 Si et jouent le même rôle
s 2 1  z 1
dans les domaines s et z
 On peut donc dériver H(z) de H(s) par la transformation

H( z )  H( s ) 2 1 z 1
s
Te 1 z 1
Étape 5 : mise en oeuvre
/*IIR.c IIR filter using cascaded Direct Form II. y(n)=S ax(n-k)-by(n-j)*/

Void IIR_Isr(void) {
short a1 = 0x0; // coefficients du filtre
short a2 = 0x15f6;
short b0 = 0x257d;
short b1 = 0x4afd;
short b2 = 0x257d;

static short p1=0, p2=0; // variables persistentes


short xn, p0, y0; // variables d’e/s
int prod1, prod2, prod3, prod4, prod5; // termes intermédiaires

xn = input_sample();
pn=xn-((b0*p1)>>15)-((b1*p2)>>15);
yn=((a0*pn)>>15) + ((a1*p1)>>15) + ((a2*p2)>>15);
p2 = p1;
p1 = p0;

output_sample(y0); // Envoyer le signal au port de sortie sériel


}

 >>15 non requis si calculs fait en virgule flottante


 Noter l’absence de boucles for.
Étape 5 : mise en oeuvre
void IIR_Isr (void)
{
Code c plus rapide
short a1 = 0x0; // coefficients du filtre
short a2 = 0x15f6;
short b0 = 0x257d;
short b1 = 0x4afd;
short b2 = 0x257d;

static short p1=0, p2=0; // variables persistentes


short xn, p0, y0; // variables d’e/s
int prod1, prod2, prod3, prod4, prod5; // termes intermédiaires

xn = input_sample();
prod1 = _mpy(p2,a2);
prod2 = _mpy(p1,a1);
p0 = xn + (short)((prod1 + prod2)>>15);
prod3 = _mpy(p1,b1);
prod4 = _mpy(p2,b2);
prod5 = _mpy(p0,b0);
y0 = (short)((prod3+prod4+prod5)>>15);
p2 = p1;
p1 = p0;

output_sample(y0); // Envoyer le signal au port de sortie sériel


}

>>15 non requis si calculs fait en virgule flottante