why margin() give positive phase & gain margin for unstable plant

8 visualizzazioni (ultimi 30 giorni)
Hello,
I m trying to write a piece of code that traces a pre-defined complex plane as a disturbance for given plant. Then I tried to check stability of each point in space by using margin() function.
However, I noticed that margin() is giving positive gain&phase margins for even unstable plants. I could not understand the reason behind it. Here is my test case;
s = tf('s');
G = 1/((s+3)*(s-2));
margin(G);
step(G);
G_cl = feedback(G,1);
step(G_cl);
I also checked closed loop tf, but it was also unstable.
  1 Commento
Ömer Faruk Arslan
Ömer Faruk Arslan il 24 Gen 2022
Modificato: Ömer Faruk Arslan il 24 Gen 2022
In addition to this, I will be very appreciated for your advices for stability tests available with complex numbers. ( To define generic disturbance case, I am using f = a+b*1i as disturbance.)

Accedi per commentare.

Risposta accettata

Paul
Paul il 24 Gen 2022
I don't think margin() first verifies that the closed loop system is stable. It just applies the gain and phase criteria to the input its given. As always, one needs to (or at least should) verify that the closed loop system is stable before computing stability margins. The allmargin() function can do this, but it doesn't make a bode plot.
s = tf('s');
G = 1/((s+3)*(s-2));
allmargin(G)
ans = struct with fields:
GainMargin: [6 Inf] GMFrequency: [0 Inf] PhaseMargin: [1×0 double] PMFrequency: [1×0 double] DelayMargin: [1×0 double] DMFrequency: [1×0 double] Stable: 0
Note that the last field, 'Stable', indicates that the closed loop system is unstable, which means the GainMargin and PhaseMargin don't take on their usual meaning. Also, the GainMargin is given in absolute gain, not dB.
  4 Commenti
Ömer Faruk Arslan
Ömer Faruk Arslan il 25 Gen 2022
Exactly like that. Assume that we have plant G = 1/(s^2+4s+4) and we have f = a+b*1i; where a & b are traced in cartesian space like a =[-5:5] & b =[-2:2].
In this case we have open loop TF as "G*f" but it has complex coefficients. Most of the matlab function don't support complex numbers in stability check? ( I see that bode(G*f) can work, but I want to traced whole space, not one by one with eye check)
Paul
Paul il 25 Gen 2022
Still would like some more clarifiication.
We have a plant G(s) with real coefficients.
We have a feedback gain, f, that is a complex, with open loop transfer function f*G(s).
Is the goal to find all of the values of f that make the closed loop transfer function H(s) = f*G(s)/(1 + f*G(s)) unstable?
Or is the goal to find the smallest (in some sense) f that makes the closed loop unstable?

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2015b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by