Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Utilizzo del FEEDBACK per chiudere i loop di feedback

Questo esempio mostra il motivo per cui si dovrebbe sempre utilizzare FEEDBACK per chiudere i loop di feedback.

I due modi per chiudere i loop di feedback

Si consideri il seguente loop di feedback

dove

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

È possibile calcolare la funzione di trasferimento a loop chiuso H da r a y in almeno due modi:

  • Utilizzando il comando feedback

  • Utilizzando la formula

H=G1+GK

Per calcolare H utilizzando feedback, digitare

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

Per calcolare H dalla formula, digitare

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.

I motivi per cui è preferibile utilizzare FEEDBACK

Il problema principale del calcolo di H dalla formula è che gonfia l'ordine della funzione di trasferimento a loop chiuso. Nell'esempio precedente, H2 a un ordine doppio rispetto ad H. Questo accade perché l'espressione G/(1+G*K) è valutata come rapporto delle due funzioni di trasferimento G e 1+G*K. Se

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

viene quindi G/(1+G*K) valutato come:

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

Di conseguenza, i poli di G sono aggiunti sia al numeratore che al denominatore di H. È possibile confermarlo osservando la rappresentazione 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.

Questo eccesso di poli e zeri può influire negativamente sull'accuratezza dei risultati quando si tratta di funzioni di trasferimento di ordine elevato, come mostrato nell'esempio successivo. Questo esempio prevede una funzione di trasferimento del 17-esimo ordine G. Come in precedenza, utilizzare entrambi gli approcci per calcolare la funzione di trasferimento a loop chiuso per K=1:

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

Per avere un punto di riferimento, calcolare inoltre un modello FRD contenente la risposta in frequenza di G e applicare feedback direttamente ai dati della risposta in frequenza:

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

Confrontate quindi le magnitudini delle risposte a loop chiuso:

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 risposta in frequenza di H2 è imprecisa per frequenze inferiori a 2e4 rad/s. Questa inaccuratezza può essere ricondotta alle ulteriori dinamiche (che si annullano) introdotte in prossimità di z=1. In particolare, H2 ha un numero di poli e zeri vicino a z=1 circa doppio rispetto a H1. Di conseguenza, H2(z) ha un'accuratezza molto più scarsa in prossimità di z=1 che distorce la risposta alle basse frequenze. Vedere l'esempio Using the Right Model Representation per maggiori dettagli.

Vedi anche

Argomenti complementari