2016-03-23 5 views
1

私はコマンドss2tfを使用して変換しようとしましたが、このコマンドのsintaxは、システムの入力数を入力する場所を示しますが、出力数は入力しません。それにもかかわらず、私は行列伝達関数を4入力および4出力システムを状態空間から伝達関数行列に変換する方法はありますか?

[num,den]=ss2tf(Ac,Bc,Cc,Dc,4)で取得しようとしました。ここで、 '4'は入力数です。

その結果、ベクトル「numが」4×9の寸法を有し、私のベクトル「denは」1x9の寸法を有しているので、「DEN」は4×9次元のaswellを持たなければならないので、私は

F=tf(num,den)

を使用してエラーを得ました。

したがって、状態空間から伝達関数を得る別の方法がありますか(入力と出力の数を含むオプション付き)? Ac、Bc、Cc及びDcの二色性は、それぞれ8×8である。 8x4,4x8および4x4。

編集:それを解決する方法を考え出しました。以下に答えがあります。

答えて

0

私はあなたが関数の構文を誤解していると思います。

[b,a] = ss2tf(A,B,C,D) converts a state-space representation of a system into an equivalent transfer function. ss2tf returns the Laplace-transform transfer function for continuous-time systems and the Z-transform transfer function for discrete-time systems. [b,a] = ss2tf(A,B,C,D,ni) returns the transfer function that results when the n ith input of a system with multiple inputs is excited by a unit impulse.

ですから、入力/出力の数を指定する必要はありません、彼らはあなたの状態空間行列のそれぞれのサイズによって暗示されています。ここでは、documentationが言うことです。最初の構文を使用するとうまくいくはずです。

+0

それはエラーにつながるので、実際に、私は、この場合は最初の構文を使用することはできません。 「」エラーをIUが** **複数の入力を持つシステムを指定する必要がありss2tf(ライン26) を使用。 bode(行5)のエラー [num、den] = ss2tf(Ac、Bc、Cc、Dc); '' – gustavoreche

+0

これで、入力を 'for'ループでループして、 2番目の構文を使用して一度に入力します。次に、 'n'が入力の数である' n'転送関数で終わるでしょう。 – am304

1

システムがp入力とq出力を持っている場合は、tranfer関数行列G(s)pラインとqの列があります。 G(s)の各要素pqは、エントリーpおよび出力qに対するSISO伝達関数です。

nをシステムオーダーとします。したがって、[b,a] = ss2tf(A,B,C,D,1)と入力すると、の寸法がqx(n+1)aの寸法が1x(n+1)となります。 G(s)の要素1x1を得るには、最初の行bとベクトルaからSISO伝達関数を取得する必要があります。同様に、要素1x2については、bの2行目とベクトルaから伝達関数を取得する必要があります。 bのすべての行を使用して転送関数を取得した後、最初の行はG(s)になります。

その他の行については、[b,a] = ss2tf(A,B,C,D,2)と入力してから(すべてのSISO伝達関数を再度取得する必要があります)、[b,a] = ss2tf(A,B,C,D,3)などを実行します。

最後に、使用行列の連結G(s)のコンパクトな形状を得るために、のような:

G_s=[g11 g12 g13 ... g1q;g21 g22 ..g2q; ....;gp1 gp2 .. gpq]

3

ここでは、私はそれを行う必要がある方法です。コードは自己説明的です。

clear all; 
close all; 
clc; 

% Generate random state-space system 
sys = rss(2,2,2); 

%% Generate transfer function matrix with Matlab tf 
% For each output 
for i = 1:size(sys,1) 

    % For each input 
    for j = 1:size(sys,2) 

     % Get SISO transfer function 
     [num,den] = ss2tf(sys(i,j).A,sys(i,j).B,sys(i,j).C,sys(i,j).D); 

     % Compute tf 
     Gtf(i,j) = tf(num,den); 
    end 
end 

%% Generate transfer function matrix symbolic 
% Laplace variable 
s = sym('s'); 

% For each output 
for i = 1:size(sys,1) 

    % For each input 
    for j = 1:size(sys,2) 

     % Get SISO transfer function 
     [num,den] = ss2tf(sys(i,j).A,sys(i,j).B,sys(i,j).C,sys(i,j).D); 

     % Compute tf 
     Gsym(i,j) = poly2sym(num,s); 
    end 
end 

% Den is the same for all elements 
Gsym = Gsym/poly2sym(den,s); 

% Numeric vectors is transformed to symbolic vector, to make everything 
% readable change the variable precision arithmetic to 4 digits for output 
pretty(vpa(Gsym,4)) 

-Edit-私は私が実際にMATLABは、この機能は、機能ss2tf自体に組み込まれていないことを少し驚いていることを言わなければなりません。

0

tf2ssまたはss2tfを使用する必要はありません。あなたはただ使用することができます

G_s = tf(G); 

直接1つのシステム表現から他のものへの変換。

関連する問題