Effacer les filtres
Effacer les filtres

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

4 vues (au cours des 30 derniers jours)
milk
milk le 30 Jan 2023
Commenté : milk le 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個でもボード線図を書きたいです.

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Simulink dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!