ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ss2tf

状態空間表現から伝達関数への変換

構文

[b,a] = ss2tf(A,B,C,D)
[b,a] = ss2tf(A,B,C,D,ni)

説明

[b,a] = ss2tf(A,B,C,D) は、システムの状態空間表現を等価な伝達関数に変換します。ss2tf は、連続時間システムの場合はラプラス変換の伝達関数を返し、離散時間システムの場合は Z 変換の伝達関数を返します。

[b,a] = ss2tf(A,B,C,D,ni) は、複数の入力をもつシステムの ni 番目の入力に単位インパルスを与えたときの伝達関数を返します。

すべて折りたたむ

単位弾性定数のバネで壁につながれた単位質量 で構成される 1 次元の離散時間振動システムについて考えます。センサーによりこの質量の加速度 Hz でサンプリングします。

50 個の時間サンプルを生成します。サンプリング間隔は と定義します。

Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);

この振動子は次の状態空間方程式で表すことができます。

ここで、 は状態ベクトルであり、 はそれぞれ質量の位置と速度です。行列は次のようになります。

A = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B = [1-cos(dt);sin(dt)];
C = [-1 0];
D = 1;

システムに正の方向の単位インパルスを与えます。状態空間モデルを使用して、すべてゼロの初期状態からのシステムの時間発展を計算します。

u = [1 zeros(1,N-1)];

x = [0;0];
for k = 1:N
    y(k) = C*x + D*u(k);
    x = A*x + B*u(k);
end

質量の加速度を時間の関数としてプロットします。

stem(t,y,'filled')
xlabel('t')

伝達関数 H(z) で時間依存の加速度を計算して入力をフィルター処理します。結果をプロットします。

[b,a] = ss2tf(A,B,C,D);
yt = filter(b,a,u);
stem(t,yt,'filled')
xlabel('t')

このシステムの伝達関数の解析式は次のようになります。

この式を使用して入力をフィルター処理します。応答をプロットします。

bf = [1 -(1+cos(dt)) cos(dt)];
af = [1 -2*cos(dt) 1];
yf = filter(bf,af,u);
stem(t,yf,'filled')
xlabel('t')

3 つのいずれでも結果は同じになります。

2 つの壁の間に拘束された 2 つの単位質量 および で構成される理想的な 1 次元の振動システムがあります。各質量は単位弾性定数のバネでそれぞれ近い方の壁につながれています。さらに、もう 1 つの同じバネで 2 つの質量がつながれています。センサーによりこれらの質量の加速度 および Hz でサンプリングします。

総測定時間を 16 秒に指定します。サンプリング間隔は と定義します。

Fs = 16;
dt = 1/Fs;
N = 257;
t = dt*(0:N-1);

このシステムは次の状態空間モデルで表すことができます。

ここで、 は状態ベクトルであり、 はそれぞれ 番目の質量の位置と速度です。入力ベクトルは で出力ベクトルは です。状態空間行列は次のようになります。

連続時間状態空間行列は次のようになります。

は適切なサイズの単位行列を示します。

Ac = [0 1 0 0;-2 0 1 0;0 0 0 1;1 0 -2 0];
A = expm(Ac*dt);
Bc = [0 0;1 0;0 0;0 1];
B = Ac\(A-eye(4))*Bc;
C = [-2 0 1 0;1 0 -2 0];
D = eye(2);

1 つ目の質量 に正の方向の単位インパルスを与えます。

ux = [1 zeros(1,N-1)];
u0 = zeros(1,N);
u = [ux;u0];

モデルを使用して、すべてゼロの初期状態からのシステムの時間発展を計算します。

x = [0;0;0;0];
for k = 1:N
    y(:,k) = C*x + D*u(:,k);
    x = A*x + B*u(:,k);
end

2 つの質量の加速度を時間の関数としてプロットします。

stem(t,y','.')
xlabel('t')
legend('a_1','a_2')
title('Mass 1 Excited')
grid

システムを伝達関数表現に変換します。1 つ目の質量に正の単位インパルスの励起を与えたときのシステムの応答を求めます。

[b1,a1] = ss2tf(A,B,C,D,1);
y1u1 = filter(b1(1,:),a1,ux);
y1u2 = filter(b1(2,:),a1,ux);

結果をプロットします。伝達関数から状態空間モデルと同じ応答が得られます。

stem(t,[y1u1;y1u2]','.')
xlabel('t')
legend('a_1','a_2')
title('Mass 1 Excited')
grid

システムを初期構成にリセットします。次に、もう 1 つの質量 に正の方向の単位インパルスを与えます。システムの時間発展を計算します。

u = [u0;ux];

x = [0;0;0;0];
for k = 1:N
    y(:,k) = C*x + D*u(:,k);
    x = A*x + B*u(:,k);
end

加速度をプロットします。2 つの質量の応答が入れ替わります。

stem(t,y','.')
xlabel('t')
legend('a_1','a_2')
title('Mass 2 Excited')
grid

2 つ目の質量に正の単位インパルスの励起を与えたときのシステムの応答を求めます。

[b2,a2] = ss2tf(A,B,C,D,2);
y2u1 = filter(b2(1,:),a2,ux);
y2u2 = filter(b2(2,:),a2,ux);

結果をプロットします。伝達関数から状態空間モデルと同じ応答が得られます。

stem(t,[y2u1;y2u2]','.')
xlabel('t')
legend('a_1','a_2')
title('Mass 2 Excited')
grid

入力引数

すべて折りたたむ

状態行列。行列として指定します。p 個の入力と q 個の出力から成るシステムが n 個の状態変数で表される場合、A は n 行 n 列になります。

データ型: single | double

状態空間への入力行列。行列として指定します。p 個の入力と q 個の出力から成るシステムが n 個の状態変数で表される場合、B は n 行 p 列になります。

データ型: single | double

状態空間からの出力行列。行列として指定します。p 個の入力と q 個の出力から成るシステムが n 個の状態変数で表される場合、C は q 行 n 列になります。

データ型: single | double

フィードスルー行列。行列として指定します。p 個の入力と q 個の出力から成るシステムが n 個の状態変数で表される場合、D は q 行 p 列になります。

データ型: single | double

入力インデックス。整数値スカラーとして指定します。p 個の入力から成るシステムについて、ni 番目の入力に適用される単位インパルスに対する応答を計算するには、ss2tf の最後に引数 ni=1,…,p を指定します。

データ型: single | double

出力引数

すべて折りたたむ

伝達関数の分子係数。ベクトルまたは行列として返されます。p 個の入力と q 個の出力から成るシステムが n 個の状態変数で表される場合、各入力に対する b は q 行 (n+1) 列になります。係数は s または z の降べきの順に返されます。

伝達関数の分母係数。ベクトルとして返されます。p 個の入力と q 個の出力から成るシステムが n 個の状態変数で表される場合、各入力に対する a は 1 行 (n+1) 列になります。係数は s または z の降べきの順に返されます。

詳細

すべて折りたたむ

伝達関数

  • 離散時間システムの場合、状態空間行列では状態ベクトル x、入力 u、出力 y の関係が次のように表されます。

    x(k+1)=Ax(k)+Bu(k)y(k)=Cx(k)+Du(k).

    伝達関数はシステムのインパルス応答の Z 変換です。状態空間行列では次のように表されます。

    H(z)=C(zIA)1B+D.

  • 連続時間システムの場合、状態空間行列では状態ベクトル x、入力 u、出力 y の関係が次のように表されます。

    x˙=Ax+Buy=Cx+Du.

    伝達関数はシステムのインパルス応答のラプラス変換です。状態空間行列では次のように表されます。

    H(s)=C(sIA)1B+D.

R2006a より前に導入