Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Utilisation de la commande FEEDBACK pour fermer les boucles de rétroaction

Cet exemple vous explique pourquoi vous devez toujours utiliser la commande FEEDBACK pour fermer les boucles de rétroaction.

Deux méthodes permettant de fermer les boucles de rétroaction

Considérons la boucle de rétroaction suivante

K = 2;
G = tf([1 2],[1 .5 3])
G =
 
       s + 2
  ---------------
  s^2 + 0.5 s + 3
 
Continuous-time transfer function.

Deux méthodes au moins vous permettent de calculer la fonction de transfert en boucle fermée H de r à y :

  • Utilisez la commande feedback

  • Utilisez la formule

H=G1+GK

Pour calculer H au moyen de feedback, tapez

H = feedback(G,K)
H =
 
       s + 2
  ---------------
  s^2 + 2.5 s + 7
 
Continuous-time transfer function.

Pour calculer H à partir de la formule, tapez

H2 = G/(1+G*K)
H2 =
 
        s^3 + 2.5 s^2 + 4 s + 6
  -----------------------------------
  s^4 + 3 s^3 + 11.25 s^2 + 11 s + 21
 
Continuous-time transfer function.

Pourquoi il est préférable d’utiliser la commande FEEDBACK

Le calcul de H à partir de la formule présente pour principal problème d’augmenter l’ordre de la fonction de transfert en boucle fermée. Dans l’exemple ci-dessus, H2 a doublé l’ordre de H. En effet, l’expression G/(1+G*K) est évaluée en tant que rapport des deux fonctions de transfert G et 1+G*K. Si

G(s)=N(s)D(s)

alors G/(1+G*K) est évalué en tant que :

ND(D+KND)-1=NDD(D+KN).

Les pôles de G sont alors ajoutés à la fois au numérateur et au dénominateur de H. Vous pouvez vous en assurer en examinant la représentation ZPK :

zpk(H2)
ans =
 
       (s+2) (s^2 + 0.5s + 3)
  ---------------------------------
  (s^2 + 0.5s + 3) (s^2 + 2.5s + 7)
 
Continuous-time zero/pole/gain model.

Ce nombre excessif de pôles et de zéros peut avoir un effet négatif sur la précision de vos résultats lorsque vous traitez des fonctions de transfert d'ordre élevé, comme l’indique l'exemple suivant. Cet exemple comporte une fonction de transfert de 17e ordre G. Comme vous l’avez fait précédemment, utilisez les deux approches pour calculer la fonction de transfert en boucle fermée pour K=1 :

load numdemo G
H1 = feedback(G,1);          % good
H2 = G/(1+G);                % bad

Pour disposer d’un point de référence, calculez également un modèle FRD contenant la réponse en fréquence de G et appliquez feedback directement aux données de la réponse en fréquence :

w = logspace(2,5.1,100);
H0 = feedback(frd(G,w),1);

Comparez ensuite les magnitudes des réponses en boucle fermée.

h = sigmaplot(H0,'b',H1,'g--',H2,'r');
legend('Reference H0','H1=feedback(G,1)','H2=G/(1+G)','location','southwest')
setoptions(h,'YlimMode','manual','Ylim',{[-60 0]})

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Reference H0, H1=feedback(G,1), H2=G/(1+G).

La réponse en fréquence de H2 est imprécise pour les fréquences inférieures à 2e4 rad/s. Cette imprécision peut être attribuée à la dynamique supplémentaire (annulation) introduite près de z=1. Pour être précis, H2 comporte près de deux fois plus de pôles et de zéros à proximité de z=1 que H1. Par conséquent, H2(z) est beaucoup moins précis près de z=1, ce qui fausse la réponse aux basses fréquences. Pour plus de détails, voir l’exemple Using the Right Model Representation.

Voir aussi

Sujets associés