2個のSimulin​kモデルでlinmo​dを使用し2個のボー​ド線図を描きたい

조회 수: 9 (최근 30일)
milk
milk 2023년 1월 30일
댓글: milk 2023년 1월 31일
途中でつまずいてしまったため質問をします.
複数個のモデル,例えば
1 20
G1(s) = -----------    ,G2(s) = --------------------
s + 1 s^2 + 11s +10
のモデルをsimulinkのtransfer Fncを使用し作成することを考えます(sample.png).
この時コードを上記公式回答を参考に,
[a,b,c,d] = linmod('simulinkファイル名(拡張子なし)');
[num1,den1] = ss2tf(a,b,c,d,1)
[num2,den2] = ss2tf(a,b,c,d,2)
Gs1 = tf(num1,den1)
Gs2 = tf(num2,den2)
bode(Gs1)
hold on
bode(Gs2)
としてみたのですが,tfの使用で行またはベクトルでなければならないとエラーが出ます.
単体でボード線図を書くときは
1
G(s) = -----------    
s + 1
[num,den] = linmod('simulinkファイル名(拡張子なし)');
Gs = tf(num,den);
bode(Gs)
でボード線図を表示させることは可能なのですが,入手出力が2個でもボード線図を書きたいです.

채택된 답변

Toshinobu Shintai
Toshinobu Shintai 2023년 1월 30일
エラーになる理由は、"ss2tf"で得られる伝達関数が1入力2出力を表現するものになっているからです。以下のように、num1が2行になっており、行の数が出力の数を表しています。よって、num1をそのままtfに入れるとエラーとなります。
[a,b,c,d] = linmod('test_model')
a = 3×3
-1 0 0 0 -11 -10 0 1 0
b = 3×2
1 0 0 1 0 0
c = 2×3
1 0 0 0 0 20
d = 2×2
0 0 0 0
[num1,den1] = ss2tf(a,b,c,d,1)
num1 = 2×4
0 1 11 10 0 0 0 0
den1 = 1×4
1 12 21 10
ここで、以下のように1行目だけを与えると、以下のように伝達関数を得ることができます。
Gs1 = tf(num1(1, :), den1)
Gs1 = s^2 + 11 s + 10 ------------------------ s^3 + 12 s^2 + 21 s + 10 Continuous-time transfer function.
  댓글 수: 1
milk
milk 2023년 1월 31일
上記のようにやってみたらできました!,またソースコード及びサンプルファイルの作成もお忙しい中ありがとうございました!

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

추가 답변 (0개)

카테고리

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

제품

Community Treasure Hunt

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

Start Hunting!