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

10 views (last 30 days)
milk
milk on 30 Jan 2023
Commented: milk on 31 Jan 2023
途中でつまずいてしまったため質問をします.
複数個のモデル,例えば
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個でもボード線図を書きたいです.

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 30 Jan 2023
エラーになる理由は、"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 Comment
milk
milk on 31 Jan 2023
上記のようにやってみたらできました!,またソースコード及びサンプルファイルの作成もお忙しい中ありがとうございました!

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!