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

11 次查看(过去 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 中查找有关 Additional Math and Discrete 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!