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

5 ビュー (過去 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 Center および File ExchangeStability Analysis についてさらに検索

製品


リリース

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by