Cours:Elen4 TNS TP FxTransfertStabilité : Différence entre versions
(→Fonctions de transfert) |
|||
(24 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Cours:Elen4_TNS|{{Rouge|'''Retour à la page du cours'''}}]] | [[Cours:Elen4_TNS|{{Rouge|'''Retour à la page du cours'''}}]] | ||
− | + | <center> | |
+ | '''<big>TP2 : Fonction de transfert et stabilité des filtres</big>''' | ||
+ | </center> | ||
+ | |||
+ | Cette séance est consacrée à l'affichage des réponses d'un filtre numérique et à l'étude de sa stabilité. Vous travaillerez avec '''matlab'''. | ||
== Fonctions de transfert == | == Fonctions de transfert == | ||
− | |||
− | |||
===== Exercice 1 ===== | ===== Exercice 1 ===== | ||
À l’aide de la fonction <code>impz()</code>, obtenir les premiers termes de la réponse impulsionnelle ''h(n)'' du SLIT causal dont la fonction de transfert est | À l’aide de la fonction <code>impz()</code>, obtenir les premiers termes de la réponse impulsionnelle ''h(n)'' du SLIT causal dont la fonction de transfert est | ||
− | { | + | {{FxT |H(z)| |
− | + | 1+2z<sup>-1</sup>+z<sup>-2</sup> | |
− | + | | | |
− | | | + | 1+0,5z<sup>-1</sup>+0,25z<sup>-2</sup>}} |
− | |||
− | |||
− | |||
− | |||
Lister les valeurs obtenues et les confronter à celles obtenues en TD. Tracer le graphe de ''h(n)''. | Lister les valeurs obtenues et les confronter à celles obtenues en TD. Tracer le graphe de ''h(n)''. | ||
Ligne 23 : | Ligne 21 : | ||
a) Calculer et afficher le module et le déphasage de la fonction transfert suivante : | a) Calculer et afficher le module et le déphasage de la fonction transfert suivante : | ||
− | { | + | {{FxT |H(z)| |
− | + | 3z<sup>6</sup>−0,0047z<sup>5</sup>+1,1739z<sup>4</sup>+0,0005z<sup>3</sup>−1,7220z<sup>2</sup>+0,0043z−2,4518 | |
− | + | | | |
− | | | + | z<sup>6</sup> −0,0024z<sup>5</sup> +1,4618z<sup>4</sup> −0,0042z<sup>3</sup> +1,3215z<sup>2</sup> −0,0019z+0,7389}} |
− | + | ||
− | |||
− | |||
− | |||
* Vous pourrez utiliser <code>freqz(B,A,W)</code> pour obtenir le tableau des valeurs de la réponse en fréquences directement à partir des coefficients du filtre (pour des pulsations définies dans le tableau <code>W</code>). | * Vous pourrez utiliser <code>freqz(B,A,W)</code> pour obtenir le tableau des valeurs de la réponse en fréquences directement à partir des coefficients du filtre (pour des pulsations définies dans le tableau <code>W</code>). | ||
b) Tracer le module en dB. Pour mémoire : <nowiki>|</nowiki>H<sub>dB</sub><nowiki>|</nowiki> = 20''log''(<nowiki>|</nowiki>H<nowiki>|</nowiki>). Le ''log'' se codant par <code>log10()</code> | b) Tracer le module en dB. Pour mémoire : <nowiki>|</nowiki>H<sub>dB</sub><nowiki>|</nowiki> = 20''log''(<nowiki>|</nowiki>H<nowiki>|</nowiki>). Le ''log'' se codant par <code>log10()</code> | ||
+ | |||
+ | ===== Exercice 3 ===== | ||
+ | |||
+ | Soit un filtre exprimé sous la forme de facteurs composé de polynômes du premier degré, dont la fonction de transfert est | ||
+ | {{FxT |H(z)| | ||
+ | z+1 | ||
+ | | | ||
+ | (z + 0, 38)(z − 0, 46)}} | ||
+ | |||
+ | a) Calculer et représenter graphiquement le module et le déphasage du filtre défini par cette fonction de transfert. | ||
+ | |||
+ | b) Occasionnellement, il peut être intéressant de connaitre le temps de propagation de groupe τ(ω) défini par : | ||
+ | {{FxT |τ(ω)| | ||
+ | dφ | dω }} | ||
+ | |||
+ | ''Le temps de propagation de groupe fait référence aux lignes de transmission, dans lesquelles les différentes fréquences d’un signal se propagent à des vitesses différentes, ce qui entraîne une dispersion dans le temps de l’énergie du signal.'' | ||
+ | |||
+ | De façon pratique et pour une période d’échantillonnage Ts, τ s’obtient par <code>Ts*grpdelay(B,A,W)</code>. Calculer et tracer τ(ω) pour Ts = 0,0001. | ||
+ | |||
+ | ===== Exercice 4 ===== | ||
+ | |||
+ | Voici une collection de fonctions de transfert ''H<sub>i</sub>(z)'' du second ordre : | ||
+ | {{FxT |H<sub>i</sub>(z)| | ||
+ | N<sub>i</sub>(z) | ||
+ | | | ||
+ | z<sup>2</sup> + 0,5z + 0,25 | ||
+ | }} | ||
+ | |||
+ | Calculer et tracer le module de ces fonctions de transferts pour | ||
+ | |||
+ | a) N<sub>1</sub>(z) = (1+z)<sup>2</sup> | ||
+ | |||
+ | b) N<sub>2</sub>(z) = (1-z)<sup>2</sup> | ||
+ | |||
+ | c) N<sub>3</sub>(z) = (1-z<sup>2</sup>) | ||
+ | |||
+ | d) N<sub>4</sub>(z) = (z<sup>2</sup> + 0,7z + 1) | ||
+ | |||
+ | e) N<sub>5</sub>(z) = (0,25z<sup>2</sup> + 0,5z + 1) | ||
+ | |||
+ | Identifier chacun de ces filtres. | ||
== Stabilité de filtres == | == Stabilité de filtres == | ||
− | [[ | + | ===== Exercice 1 ===== |
+ | |||
+ | Soit le polynôme D(z) = z<sup>7</sup> + 0,5z<sup>6</sup> + 0,4z<sup>5</sup> + 2z<sup>4</sup> + 0,75z<sup>3</sup> + 0,8z<sup>2</sup> + 0,6z + 0,55 | ||
+ | |||
+ | a) Saisir et exécuter le script suivant | ||
+ | <source lang=matlab> | ||
+ | clear ; | ||
+ | |||
+ | D = [1 0.5 0.4 2 0.75 0.8 0.6 0.55]; | ||
+ | |||
+ | R = roots(D); | ||
+ | RR = real(R); | ||
+ | IR = imag(R); | ||
+ | plot(RR,IR,’*’); axis equal; | ||
+ | hold on; | ||
+ | w = 0:0.01:pi; | ||
+ | plot(cos(2*w),sin(2*w)); | ||
+ | hold off; | ||
+ | disp(’Module Angle en deg.’); | ||
+ | disp([abs(R) (angle(R))*180/pi]); | ||
+ | </source> | ||
+ | |||
+ | b) Indiquez les racines de D qui sont à l’intérieur du cercle unité et celles qui sont à l’extérieur. | ||
+ | |||
+ | c) De façon plus concise, la fonction <code>zplane()</code> permet de placer les pôles et les zéros par rapport au cercle unité. Utiliser cette fonction pour obtenir un graphe identique à la première question. | ||
+ | |||
+ | ===== Exercice 2 ===== | ||
+ | |||
+ | Déterminer si les racines du polynôme suivant sont à l’intérieur du cercle unité ou non (cf. TD pour comparer) : | ||
+ | <center> | ||
+ | D(z) = 2z<sup>4</sup> + 3z<sup>3</sup> + 4z<sup>2</sup> + z + 1 | ||
+ | </center> | ||
+ | |||
+ | ===== Exercice 3 ===== | ||
+ | |||
+ | Déterminer si le SLIT causal suivant est stable (cf. TD pour comparer) : | ||
+ | {{FxT | H(z) | | ||
+ | 1 | ||
+ | | | ||
+ | 5z<sup>4</sup> + 3z<sup>3</sup> + 6z<sup>2</sup> + z + 2}} | ||
+ | Tracer sa réponse impulsionnelle pour contrôler. | ||
+ | |||
+ | ===== Exercice 4 ===== | ||
+ | |||
+ | Déterminer si les fonctions de transfert suivantes caractérisent un SLIT causal stable ou non : | ||
+ | {{FxT | H<sub>a</sub>(z) | | ||
+ | z+1 | ||
+ | | | ||
+ | z<sup>2</sup> + 0,2z + 0,4}} | ||
+ | {{FxT | H<sub>b</sub>(z) | | ||
+ | 1+0,4z+0,3z<sup>2</sup> | ||
+ | | | ||
+ | z<sup>2</sup> + 0,4z + 1}} | ||
+ | {{FxT | H<sub>c</sub>(z) | | ||
+ | z<sup>2</sup>(z+3) | ||
+ | | | ||
+ | z<sup>2</sup> + 0,8z + 0,5}} | ||
+ | {{FxT | H<sub>d</sub>(z) | | ||
+ | z<sup>-1</sup>+1 | ||
+ | | | ||
+ | 0,25z<sup>-2</sup> + 0,4z<sup>-1</sup> + 1}} | ||
+ | Tracer les réponses impulsionnelles pour contrôler. | ||
+ | |||
+ | ===== Exercice 5 ===== | ||
+ | |||
+ | Lorsque des paramètres sont présents dans la fonction de transfert du système, il est possible de déterminer graphiquement les valeurs de ces paramètres qui entrainent un système stable. Par exemple pour un SLIT dont le dénominateur de la fonction de transfert est | ||
+ | <center> | ||
+ | D(z) = 2z<sup>3</sup> + z<sup>2</sup> + c z + 1 | ||
+ | </center> | ||
+ | Le script suivant met en place un ''slider'' permettant de régler les valeurs de ''c'' et d'afficher les pôles : | ||
+ | <source lang=matlab> | ||
+ | clear all | ||
+ | D = [2 1 0 1]; | ||
+ | R = roots(D); | ||
+ | zplane(R); | ||
+ | slmin=0; slmax=5; | ||
+ | hsl = uicontrol(’Style’,’slider’,... | ||
+ | ’Min’,slmin,’Max’,slmax ,... | ||
+ | ’SliderStep’,[1 1]./50,... | ||
+ | ’Position’,[20 20 200 20]); | ||
+ | set(hsl,’Callback’, @sliderCallback); | ||
+ | </source> | ||
+ | avec la fonction <code>sliderCallback()</code> appelée à chaque déplacement du ''slider'' : | ||
+ | <source lang=matlab> | ||
+ | function sliderCallback(h,e) | ||
+ | c = get(h,’Value’); | ||
+ | zplane(roots([2 1 c 1])); | ||
+ | legend([’c=’ num2str(c)]) | ||
+ | end | ||
+ | </source> |
Version actuelle datée du 20 mars 2024 à 16:36
TP2 : Fonction de transfert et stabilité des filtres
Cette séance est consacrée à l'affichage des réponses d'un filtre numérique et à l'étude de sa stabilité. Vous travaillerez avec matlab.
Sommaire
Fonctions de transfert
Exercice 1
À l’aide de la fonction impz()
, obtenir les premiers termes de la réponse impulsionnelle h(n) du SLIT causal dont la fonction de transfert est
H(z) = |
1+2z-1+z-2 |
| |
1+0,5z-1+0,25z-2 |
Lister les valeurs obtenues et les confronter à celles obtenues en TD. Tracer le graphe de h(n).
Exercice 2
a) Calculer et afficher le module et le déphasage de la fonction transfert suivante :
H(z) = |
3z6−0,0047z5+1,1739z4+0,0005z3−1,7220z2+0,0043z−2,4518 |
| |
z6 −0,0024z5 +1,4618z4 −0,0042z3 +1,3215z2 −0,0019z+0,7389 |
- Vous pourrez utiliser
freqz(B,A,W)
pour obtenir le tableau des valeurs de la réponse en fréquences directement à partir des coefficients du filtre (pour des pulsations définies dans le tableauW
).
b) Tracer le module en dB. Pour mémoire : |HdB| = 20log(|H|). Le log se codant par log10()
Exercice 3
Soit un filtre exprimé sous la forme de facteurs composé de polynômes du premier degré, dont la fonction de transfert est
H(z) = |
z+1 |
| |
(z + 0, 38)(z − 0, 46) |
a) Calculer et représenter graphiquement le module et le déphasage du filtre défini par cette fonction de transfert.
b) Occasionnellement, il peut être intéressant de connaitre le temps de propagation de groupe τ(ω) défini par :
τ(ω) = |
dφ |
| |
dω |
Le temps de propagation de groupe fait référence aux lignes de transmission, dans lesquelles les différentes fréquences d’un signal se propagent à des vitesses différentes, ce qui entraîne une dispersion dans le temps de l’énergie du signal.
De façon pratique et pour une période d’échantillonnage Ts, τ s’obtient par Ts*grpdelay(B,A,W)
. Calculer et tracer τ(ω) pour Ts = 0,0001.
Exercice 4
Voici une collection de fonctions de transfert Hi(z) du second ordre :
Hi(z) = |
Ni(z) |
| |
z2 + 0,5z + 0,25 |
Calculer et tracer le module de ces fonctions de transferts pour
a) N1(z) = (1+z)2
b) N2(z) = (1-z)2
c) N3(z) = (1-z2)
d) N4(z) = (z2 + 0,7z + 1)
e) N5(z) = (0,25z2 + 0,5z + 1)
Identifier chacun de ces filtres.
Stabilité de filtres
Exercice 1
Soit le polynôme D(z) = z7 + 0,5z6 + 0,4z5 + 2z4 + 0,75z3 + 0,8z2 + 0,6z + 0,55
a) Saisir et exécuter le script suivant
clear ;
D = [1 0.5 0.4 2 0.75 0.8 0.6 0.55];
R = roots(D);
RR = real(R);
IR = imag(R);
plot(RR,IR,’*’); axis equal;
hold on;
w = 0:0.01:pi;
plot(cos(2*w),sin(2*w));
hold off;
disp(’Module Angle en deg.’);
disp([abs(R) (angle(R))*180/pi]);
b) Indiquez les racines de D qui sont à l’intérieur du cercle unité et celles qui sont à l’extérieur.
c) De façon plus concise, la fonction zplane()
permet de placer les pôles et les zéros par rapport au cercle unité. Utiliser cette fonction pour obtenir un graphe identique à la première question.
Exercice 2
Déterminer si les racines du polynôme suivant sont à l’intérieur du cercle unité ou non (cf. TD pour comparer) :
D(z) = 2z4 + 3z3 + 4z2 + z + 1
Exercice 3
Déterminer si le SLIT causal suivant est stable (cf. TD pour comparer) :
H(z) = |
1 |
| |
5z4 + 3z3 + 6z2 + z + 2 |
Tracer sa réponse impulsionnelle pour contrôler.
Exercice 4
Déterminer si les fonctions de transfert suivantes caractérisent un SLIT causal stable ou non :
Ha(z) = |
z+1 |
| |
z2 + 0,2z + 0,4 |
Hb(z) = |
1+0,4z+0,3z2 |
| |
z2 + 0,4z + 1 |
Hc(z) = |
z2(z+3) |
| |
z2 + 0,8z + 0,5 |
Hd(z) = |
z-1+1 |
| |
0,25z-2 + 0,4z-1 + 1 |
Tracer les réponses impulsionnelles pour contrôler.
Exercice 5
Lorsque des paramètres sont présents dans la fonction de transfert du système, il est possible de déterminer graphiquement les valeurs de ces paramètres qui entrainent un système stable. Par exemple pour un SLIT dont le dénominateur de la fonction de transfert est
D(z) = 2z3 + z2 + c z + 1
Le script suivant met en place un slider permettant de régler les valeurs de c et d'afficher les pôles :
clear all
D = [2 1 0 1];
R = roots(D);
zplane(R);
slmin=0; slmax=5;
hsl = uicontrol(’Style’,’slider’,...
’Min’,slmin,’Max’,slmax ,...
’SliderStep’,[1 1]./50,...
’Position’,[20 20 200 20]);
set(hsl,’Callback’, @sliderCallback);
avec la fonction sliderCallback()
appelée à chaque déplacement du slider :
function sliderCallback(h,e)
c = get(h,’Value’);
zplane(roots([2 1 c 1]));
legend([’c=’ num2str(c)])
end