Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Les Les fitresfitres àà rrééponseponse impulsionnelleimpulsionnelleinfinieinfinie en en durdurééee
(RII)(RII)
ObjectifsObjectifs de de ll’’apprentissageapprentissage
Introduction à la théorie des filtres RII :Propriétés.Calcul des coefficients.Architectures de mise en oeuvre
Mise en oeuvre en Matlab et C
IntroductionIntroductionLes filtres RIF sont caractérisés par une fonction de transfert exprimée par une fraction rationnelle en z-1 :
L’introduction de pôles dans l’expression de H(z) permet de réduire considérablement le nombre de coefficients du filtre par rapport à un filtre équivalentRIF.Propriétés :
Très efficaces en temps de calculRéponse en phase non lineaire en généralLeur stabilité doit être vérifiée lors de la conception
( )∑
∑−
=
−
−
=
−
+= 1M
1k
kk
1N
0k
kk
za1
zbzH
PropriPropriééttééss dd’’un un filtrefiltre RIIRII
ÉÉquationquation dd’’e/se/s ::
[ ] [ ] [ ] [ ] [ ]∑∑−
=
−
=
−+−=1M
1k
1N
0k
knykaknxkbny
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).
PropriPropriééttééss dd’’un un filtrefiltre RIIRII
H(z) peut être factorisé pour donner :
Où : z1, z2, …, zN sont the zéros,p1, p2, …, pN sont the pôles.
( )( ) ( )( )( ) ( )N21
N21
pzpzpzzzzzzzk
−−−−−−
=L
L
( ) ( )( ) M
M
NN
M
k
kk
N
k
kk
zaza
zbzbb
za
zb
zXzY
zH−−
−−
=
−
=
−
+++
+++=
+
==
∑
∑
K
K1
1
110
1
0
11
⇒ Un filtre RII est complètement spécifié par les valeurs des pôles et des zéros de H(z) (à k près).
PropriPropriééttééss dd’’un un filtrefiltre RIIRII
[ ] [ ] [ ] [ ] [ ]∑∑==
−+−=M
k
N
k
knykaknxkbny10
x(n)+b0
+b1
+b2
+
+
+
a1
a2
z-1
y(n)
z-1
z-1
z-1
Diagramme de flux pour N=M=2
À l’instar des filtres RIF, deux filtres RII se distinguent uniquement par leur coefficients !
OrigineOrigine du nom RIIdu nom RII
On a :
Si on remplace le signal d’entrée x[n] par une impulsion δ[n], alors :
[ ] [ ] [ ]∑∑−
=
−
=
−+−==1M
1kk
1N
0kk knyaknb]n[hny δ
[ ] [ ] [ ]
[ ] [ ] [ ])1M(nya2nya1nya
)1N(nb1nbnb
1M21
1N10
−−++−+−+
−−++−+=
−
−
L
L δδδ
[ ] [ ] [ ]∑∑−
=
−
=
−+−=1M
1kk
1N
0kk knyaknxbny
OrigineOrigine du nom RIIdu nom RII
[ ][ ]
[ ]⎪⎪⎩
⎪⎪⎨
⎧
−
−≤−+=
−=
=
∑
∑−
=
−
=1M
1kk
1M
1kkn
1
0
autrement]kn[ya
1Nnsi]kn[yabnh
]0[yb1h
b0h
M
Et puisque :
[ ]⎩⎨⎧
≠=
=−kn 0kn 1
knforfor
δ
On en déduit :
La réponse impulsionnelle dure infiniment !
ObservationsObservationsLa réponse impulsionnelle dure infiniment ! Contrairement aux filtres RIF, la réponse du filtre n’est pas simplement égale aux valeurssuccessives de ses coefficients.
[ ]⎪⎪⎩
⎪⎪⎨
⎧
−
−≤−+=
∑
∑−
=
−
=1M
1kk
1M
1kkn
autrement]kn[ya
1Nnsi]kn[yabnh
Pour un filtre d’ordre M :
RRééponseponse en en frfrééquencequence dd’’un un filtrefiltre IIRIIRLa transformée z de
La fonction de réponse en fréquence du filtreest obtenue en remplaçant z by ejωTe :
est :[ ] [ ] [ ]∑∑
−
=
−
=
−+−=1M
1kk
1N
0kk knyaknxbny
( )∑
∑−
=
−
−
=
−
+= 1M
1k
kk
1N
0k
kk
za1
zbzH
( )∑
∑−
=
−
−
=
−
=
+== 1M
1k
Tjkk
1N
0k
Tjkk
eze
e
eTj
ea1
ebzH)(H
ω
ω
ωω
Puisque e-j2πk = 1, on a :
Par conséquent :
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
RRééponseponse en en frfrééquencequence dd’’un un filtrefiltre IIRIIR
( )ωπω HTk2H
e
=⎟⎟⎠
⎞⎜⎜⎝
⎛+
( ) ( )ωπω Hk2H =+
∑
∑
∑
∑−
=
−
−
=
−
−
=
⎟⎟⎠
⎞⎜⎜⎝
⎛+−
−
=
⎟⎟⎠
⎞⎜⎜⎝
⎛+−
+=
+
=⎟⎟⎠
⎞⎜⎜⎝
⎛+= 1M
1k
Tjkk
1N
0k
Tjkk
1M
1k
TT2jk
k
1N
0k
TT2jk
k
e e
e
ee
ee
ea1
eb
ea1
eb
T2H
ω
ω
πω
πω
πω
StabilitStabilitéé dd’’un filtre RIIun filtre RII
Il faut s’assurer que le H(z) ne possède pas de pôles à l’intérieur du cercle défini par z=1.Les pôles situés le long de z=1 donnent lieu à des réponses oscillatoires.H(z) est souvent exprimé en fonction des puissances négatives de z ; il faut dans ce cas convertir son expression suivant les puissances positives de z avant de déterminer les pôles et leur position dans le plan z.
RRééponseponse en phase den phase d’’un un filtrefiltre RIFRIFPartant de :
On a :
En général, la réponse en phase n’est pas lineáire !
( )∑
∑−
=
−
−
=
−
=
+== 1M
1k
Tjkk
1N
0k
Tjkk
eze
e
eTj
ea1
ebzH)(H
ω
ω
ωω
( )
⎟⎠
⎞⎜⎝
⎛ +−⎟⎠
⎞⎜⎝
⎛=
⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜
⎝
⎛
+=
∑∑
∑
∑
−
=
−−
=
−
−
=
−
−
=
−
1M
1k
Tjkk
1N
0k
Tjkk
1M
1k
Tjkk
1N
0k
Tjkk
ee
e
e
ea1argebarg
ea1
ebarg)(Harg
ωω
ω
ω
ω
Comparaison entre RII et RIFComparaison entre RII et RIF
La stabilité dépend de la position des pôles de H(z)Peut donner une performance adéquate pour n=1 ou 2Réponse en phase non linéaire en généralLa gamme dynamique des différents états se calcule difficilement et peut avoir un impact négatif sur la performanceEffets de quantisation et d’arrondi plus prononcés que pour RIF.Possibilité de cycles limites
Stable par défaut
Demande n>> 1 pour une bonne performanceRéponse en phase linéaire si filtre causalLa gamme dynamique des différents états se calcule facilement
RIIRIIRIFRIF
Utilisation pour gUtilisation pour géénnéérer des fonctionsrer des fonctions
Le fait que les pôles situés le long de z=1 donnent lieu à des réponses oscillatoires peut servir à générer des fonctions sinusoïdales en temps-réel, avec des fréquences et des amplitudes programmables.
<=>
<=>Pour des fonctions périodiques de forme arbitraire, on peut utiliser des tables de valeurs
( ) ( )tut ..sin 0ω( )
( ) 1.cos..2.sin.
02
0
+ω−
ω
e
e
TzzTz
( ) ( )tut ..cos 0ω( )[ ]( ) 1.cos..2
.cos.
02
0
+ω−
ω−
e
e
TzzTzz
Conception dConception d’’un un filtrefiltre RIIRII
Cinq étapes sont requises :1. Spécification du filtre2. Calcul des coefficients.3. Choix d’une architecture de mise en
oeuvre.4. Simulation (option).5. Implémentation.
(a)
1
f(norm)fc : cut-off frequency
pass-band stop-band
pass-band stop-bandtransition band
1
sδ
pass-bandripple
stop-bandripple
fpb : pass-band frequency
fsb : stop-band frequencyf(norm)
(b)
p1 δ+
s∆
p∆0
-3p1 δ−
fs/2
fc : cut-off frequency
fs/2
|H(f)|(dB)
|H(f)|(linear)
|H(f)|
ÉÉtapetape 1 : 1 : spspéécificationcification du du filtrefiltre
Il existe deux approches :Placement direct des pôles et zeros dans la plan zConversion d’un filtre analogique :
En utilisant la transformation bilinéaireEn utilisant le principe de l’invariance de la réponseimpulsionnelle
Dans le cas de la transformation d’un filtreanalogique, 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.
ÉÉtapetape 2 : 2 : calculcalcul des coefficientsdes coefficients
MMééthodethode du placement des du placement des pôlespôles et et zzéérosros
Basée sur le principe que, dans le plan z :Le placement d’un zéros près ou sur le cercle unité dans le plan z minimise la fonction de réponse en fréquence du filtre à cet endroit.Le placement d’un pôle près ou sur le cercle unité dans le plan z 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 au début mais qui demande beaucoup de calculs ensuite.
Exemple :
MMééthodethode du placement des du placement des pôlespôles et et zzéérosros
% 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éspole2 = 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észero2 = -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) = 1zplane(numz, denz); % affichage des pôles et zérosfigure(2); freqz(numz,denz,256); % affichage de la réponse en fréquence
t=[0:1:127]; % test avec 128 valeurs d’un sinus corrompux=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');
MMééthodethode du placement des du placement des pôlespôles et et zzéérosros
MMééthodethode du placement des du placement des pôlespôles et et zzéérosros
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Real Part
Imag
inar
y P
art
0 0.2 0.4 0.6 0.8 1-300
-200
-100
0
100
Normalized Frequency (×π rad/sample)Ph
ase
(deg
rees
)
0 0.2 0.4 0.6 0.8 1-40
-20
0
20
40
60
Normalized Frequency (×π rad/sample)
Mag
nitu
de (d
B)
0 20 40 60 80 100 120-1000
-800
-600
-400
-200
0
200
400
600
800
1000
MMééthodethode du placement des du placement des pôlespôles et et zzéérosros% 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ôlespoles=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) = 1zplane(numz, denz); % affichage des pôles et zérosfigure(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');
0 20 40 60 80 100 120-1000
-800
-600
-400
-200
0
200
400
600
800
1000 0 0.2 0.4 0.6 0.8 1-400
-300
-200
-100
0
Normalized Frequency (×π rad/sample)
Phas
e (d
egre
es)
0 0.2 0.4 0.6 0.8 1-40
-20
0
20
40
60
Normalized Frequency (×π rad/sample)
Mag
nitu
de (d
B)
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
8
Real Part
Imag
inar
y P
art
MMééthodethode du placement des du placement des pôlespôles et et zzéérosros
Conversion dConversion d’’un un filtrefiltre analogiqueanalogique
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 :
La transformation bilinéaire :( )
enTtth]n[h ==
...s)s(H)z(H ==
MMééthodethode de de ll’’invarianceinvariance de la de la rrééponseponse impulsionnelleimpulsionnelle
% Conception d’un filtre par la méthode de l’invariance de la réponse impulsionnelle
[num,den]=butter(15,2*pi,'s'); % Filtre Passe Bas de Butterworth dans le domaine s avec N=15, fc=1 Hz[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
% dans s donne dans t, ce qui donne dans z :
%%%
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 zaz=-a.*pz; % détermination des coefficients des fractions élémentaires correspondantesK=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 zfigure(4); freqz(numz,denz); % réponse en fréquence numérique
( )enTtth]n[h ==
∑ −=
i i
i
psaKsH )(
21 psB
psA
−+
−tptp 21 BeAe +
( )e2
e2
e1
e1
e2e1 Tp
Tp
Tp
Tp
TpTp ezBe
ezAeBA
ezzB
ezzA
−−
+−
−++=
−+
−
-7 -6 -5 -4 -3 -2 -1 0-8
-6
-4
-2
0
2
4
6
8
10-1
100
101
102
-200
-100
0
100
200
Frequency (rad/s)
Phas
e (d
egre
es)
10-1
100
101
102
10-20
10-10
100
Frequency (rad/s)
Mag
nitu
de
-1 -0.5 0 0.5 1 1.5 2 2.5 3
-1.5
-1
-0.5
0
0.5
1
1.5
Real Part
Imag
inar
y P
art
10-2
10-1
100
-1500
-1000
-500
0
Normalized Frequency (×π rad/sample)
Pha
se (d
egre
es)
10-2
10-1
100
-200
-150
-100
-50
0
50
Normalized Frequency (×π rad/sample)
Mag
nitu
de (
dB)
ffcc== ωωcc/2/2ππ=1 Hz=1 Hz
ffcc== ((ωωcc/2/2ππ))fe=1 Hz=1 Hz
MMééthodethode de de ll’’invarianceinvariance de la de la rrééponseponse impulsionnelleimpulsionnelle
Normalement
On peut donc dériver H(z) de H(s) par la transformation
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.
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
)zln(T1se
)s(H)z(H=
=
)zln(T1sez
e
sTe =⇒=
Si , alors et jouent le même rôledans les domaines s et zOn peut donc dériver H(z) de H(s) par la transformation
( )
( )
( )( ) )z(Y
z1z1
2T)z(A
)z(Y2
Tz1)z(Az)z(A
2T)T)1k((y)kT(y)T)1k((A)kT(A
)s(Ys1)s(Ad)(y)t(A
1
1e
e1
1
eeeee
t
−
−
−−
∞−
−+
=⇒
++=⇒
−++−=
=⇒= ∫ ττ
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
k-1 k t=kTe
y(t)y((k-1)Te )
y(kTe )
A((k-1)Te )
s1
1
1e
z1z1
2T
−
−
−+)kT(A)t(A e=
1
1
e z1z1
T2s
)s(H)z(H−
−
+−
==
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
Conséquences dans le domaine jω :
Les fréquences dans le domaine ω sontreliées à celles du domaine z par la relation :
⎟⎠
⎞⎜⎝
⎛=
+−
=⇒+−
= −
−
−
−
2TtgT
2j
e1e1
T2
jz1z1
T2
s ed
eeTdj
eTdj
ea1
1
e
ωω ω
ω
⎟⎠
⎞⎜⎝
⎛=
2TtgT
2 ed
eaωω
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
Étapes de conception d’un filtre RII par la méthode de la transformation bilinéaire :
1. Trouver ωa du filtre analogique à partir de ωd
du filtre numérique :
2. Trouver le H(s) normalisé du filtre analogiqueet opérer la transformation s -> s/ ωa
3. Appliquer : 1
1
e z1z1
T2s
)s(H)z(H−
−
+−
==
⎟⎠
⎞⎜⎝
⎛=
2TtgT
2 ed
eaωω
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
On peut accélérer le processus :
On peut donc dériver directement H(z) de H(z) par la transformation :
1
1
11
2
1)()(
−
−
+−
⎟⎠⎞
⎜⎝⎛
==
zz
Ttgs
ed
sHzHω
1
1
1
11
1
11
2
1
11
2112
22
−
−
−
−−
−
+−
⎟⎠⎞
⎜⎝⎛
=⇒
+−
=⎟⎠⎞
⎜⎝⎛
⇒+−
=⎟⎠
⎞⎜⎝
⎛=
zz
Ttg
s
zzs
Ttgzz
TsetTtgT
eda
ed
a
e
ed
ea
ωω
ωωωω
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
Exemple d’utilisation :On veut concevoir un filtre numérique passe bas avec les caractéristiques suivantes :
Fréquence de coupure de 6 kHzFréquence d’échantillonnage de 20 kHz
On veut réaliser le filtre à partir d’un filtre analogique équivalent de Butterworth.La fonction de transfert normalisée d’un filtre passe bas de Butterworth de second ordre est :
( )12
12 ++
=ss
sH
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
Exemple d’utilisation :La fonction de transfert normalisée d’un filtre passe bas de Butterworth de second ordre est :
La fonction de transfert dénormalisée dans le domaine z est :
ou encore :
( )12
12 ++
=ss
sH
( ) ⎟⎠⎞
⎜⎝⎛=
++=
−
−
+−
= 2121
1
1
1112
ea
zz
as
Ttgaavecss
zH ω
( ) 22
1
22
110
22
21
2
2
2
2
21
11211221
21−−
−−
−−
−−
++++
=
⎟⎟⎠
⎞⎜⎜⎝
⎛ +−+⎟⎟⎠
⎞⎜⎜⎝
⎛ −+⎟⎟⎠
⎞⎜⎜⎝
⎛ ++
++=
zazazbzbb
za
aaza
aa
aazzzH
Exemple de code Matlab pour calculer les coefficients :
a = tan(pi*2/8); % fréquence de coupure à 2kHz, fe à 8 kHzb = 1 + 2^0.5*a + a^2;b0 = a^2/b; %b1 = 2*b0;b2 = b0;a1 = 2*(a^2 -1)/b;a2 = (1 - 2^0.5*a + a^2)/b;
numz = [b0 b1 b2];denz = [1 a1 a2];
figure(1)freqz(numz,denz,512,8000)
fid = fopen('IIR_coef_float.txt', 'w'); % sauvegarde des coefficientsfprintf(fid,'%0.4f,%0.4f,%0.4f\n',numz);fprintf(fid,'%0.4f,%0.4f\n',denz);
fclose(fid);
Résultats : numz = [0.1311, 0.2622, 0.1311]denz = [1, -0.7478, 0.2722]
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
( ) 22
1
22
110
22
21
2
2
2
2
21
11211221
21−−
−−
−−
−−
++++
=
⎟⎟⎠
⎞⎜⎜⎝
⎛ +−+⎟⎟
⎠
⎞⎜⎜⎝
⎛ −+⎟⎟
⎠
⎞⎜⎜⎝
⎛ ++
++=
zazazbzbb
za
aaza
aa
aazzzH
0 500 1000 1500 2000 2500 3000 3500 4000-200
-150
-100
-50
0
Frequency (Hz)
Phas
e (d
egre
es)
0 500 1000 1500 2000 2500 3000 3500 4000-150
-100
-50
0
Frequency (Hz)
Mag
nitu
de (
dB)
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
[num,den]=butter(8,2*pi*2000,'s'); % Filtre PB de Butterworth dans le domaine s% avec N=8, fc=2 kHz
figure(1); plot(p,'xk'); % digramme des pôles, marqués par des x noirs figure(2); freqs(num,den); % réponse en fréquence analogique
[numz,denz] = bilinear(num,den,16000); % transformation bilinéaire avec fe=16 KHzfigure(3); zplane(numz, denz); % digramme des pôles et zéros dans le plan zfigure(4); freqz(numz,denz,512,16000); % réponse en fréquence numérique
-14000 -12000 -10000 -8000 -6000 -4000 -2000-1.5
-1
-0.5
0
0.5
1
1.5x 10
4
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Real Part
Imag
inar
y P
art
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
103
104
105
-200
-100
0
100
200
Frequency (rad/s)
Phas
e (d
egre
es)
103
104
105
10-10
10-5
100
Frequency (rad/s)
Mag
nitu
de
-14000 -12000 -10000 -8000 -6000 -4000 -2000-1.5
-1
-0.5
0
0.5
1
1.5x 10
4
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Real Part
Imag
inar
y P
art
102
103
-800
-600
-400
-200
0
Frequency (Hz)
Phas
e (d
egre
es)
102
103
-400
-300
-200
-100
0
100
Frequency (Hz)
Mag
nitu
de (
dB)
MMééthodethode de la transformation de la transformation bilinbilinééaireaire
ÉÉtapetape 3 : structures de 3 : structures de misemise en oeuvreen oeuvre
Forme directe I :
( ) ( )( ) M
M
NN
M
k
kk
N
k
kk
zazazbzbb
za
zb
zXzYzH
−−
−−
=
−
=
−
+++
+++=
+
==
∑
∑K
K1
1
110
1
0
11
Équation aux différences :
[ ] [ ] [ ] [ ] [ ]∑∑==
−+−=M
1k
N
0k
knykaknxkbny
Diagramme de flux pour la forme directe Ix(n)
+b0
+b1
+b2
+bN-1
+bN
+
+
+
+
+
a1
a2
aM-1
aM
z-1
y(n)
z-1
z-1z-1
z-1
z-1
ÉÉtapetape 3 : structures de 3 : structures de misemise en oeuvreen oeuvre
Forme directe II :( ) ( ) ( )zHzHzb
za1
1zH 21
N
0k
kkM
1k
kk
=+
= ∑∑ =
−
=
−
Si M=N, alors on peut poser :( )( )
( )( ) ∑
∑ =
−
=
−==
+==
N
0k
kk2M
1k
kk
1 zbzPzYH et
za1
1zXzP)z(H
( ) ( )∑=
−=N
kk knpbny
0( ) ( ) ( )∑
=
−−=N
kk knpanxnp
1
La transformée inverse de p(z) et y(z) donne :
ÉÉtapetape 3 : structures de 3 : structures de misemise en oeuvreen oeuvre
+b0
+b1
z-1
+b2
+bN
-a1
-a2
-aN
+
+
+
+
y(n)x(n) P(n)
z-1
z-1
P(n-1)
P(n-2)
P(n-N)
ÉÉtapetape 3 : structures de 3 : structures de misemise en oeuvreen oeuvre
Diagramme de flux pour la forme directe II
ÉÉtapetape 5 : 5 : misemise en oeuvreen oeuvre
void IIR_Isr (void){
short a1 = 0x0; // coefficients du filtreshort a2 = 0x15f6; short b0 = 0x257d;short b1 = 0x4afd;short b2 = 0x257d;
static short p1=0, p2=0; // variables persistentesshort xn, p0, y0; // variables d’e/sint 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); // Write the signal to the serial port return;
}
Code cCode c
>>15 non requis si calculs fait en virgule flottante>>15 non requis si calculs fait en virgule flottante
.def _iir_sa
.sect "mycode"
_iir_sa .cproc a1, a2, b0, b1, b2, delays, x_ptr, y_ptr, mask, mask2
.reg p0, p1, p2
.reg prod1, prod2, prod3, prod4, prod5
.reg sum1, sum2, sum3
.reg x, y0
LDW *x_ptr, xAND x,mask,xLDH *+delays[0], p1LDH *+delays[1], p2MPY a1, p1, prod1MPY a2, p2, prod2ADD prod1, prod2, sum1SHR sum1, 15, sum1ADD x, sum1, p0MPY b0, p0, prod3MPY b1, p1, prod4MPY b2, p2, prod5ADD prod4, prod5, sum2ADD prod3, sum2, sum3SHRU sum3, 15, y0
STH p1, *+delays[1]STH p0, *+delays[0]
AND y0, mask2, y0 STW y0, *y_ptr
.return y0
.endproc
Code Code assembleurassembleurlinlinééaireaire
ÉÉtapetape 5 : 5 : misemise en oeuvreen oeuvre