필터 지우기
필터 지우기

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

조회 수: 15 (최근 30일)
Ömer Faruk Arslan
Ömer Faruk Arslan 2022년 1월 24일
댓글: Paul 2022년 1월 25일
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
Ömer Faruk Arslan
Ömer Faruk Arslan 2022년 1월 24일
편집: Ömer Faruk Arslan 2022년 1월 24일
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.)

댓글을 달려면 로그인하십시오.

채택된 답변

Paul
Paul 2022년 1월 24일
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
Ömer Faruk Arslan
Ömer Faruk Arslan 2022년 1월 25일
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 2022년 1월 25일
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?

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Stability Analysis에 대해 자세히 알아보기

제품


릴리스

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by