Main Content

ss2tf

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

説明

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

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

すべて折りたたむ

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

50 個の時間サンプルを生成します。サンプリング間隔は Δt=1/Fs と定義します。

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

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

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

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

A=(cosΔtsinΔt-sinΔtcosΔt),B=(1-cosΔtsinΔt),C=(-10),D=(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')

Figure contains an axes object. The axes object with xlabel t contains an object of type stem.

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

[b,a] = ss2tf(A,B,C,D);
yt = filter(b,a,u);

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

Figure contains an axes object. The axes object with xlabel t contains an object of type stem.

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

H(z)=1-z-1(1+cosΔt)+z-2cosΔt1-2z-1cosΔt+z-2.

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

bf = [1 -(1+cos(dt)) cos(dt)];
af = [1 -2*cos(dt) 1];
yf = filter(bf,af,u);

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

Figure contains an axes object. The axes object with xlabel t contains an object of type stem.

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

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

総測定時間を 16 秒に指定します。サンプリング間隔は Δt=1/Fs と定義します。

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

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

x(n+1)=Ax(n)+Bu(n),y(n)=Cx(n)+Du(n),

ここで、x=(r1v1r2v2)T は状態ベクトルであり、rivi はそれぞれ i 番目の質量の位置と速度です。入力ベクトルは u=(u1u2)T で出力ベクトルは y=(a1a2)T です。状態空間行列は次のようになります。

A=exp(AcΔt),B=Ac-1(A-I)Bc,C=(-201010-20),D=I,

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

Ac=(0100-2010000110-20),Bc=(00100001),

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

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 つ目の質量 m1 に正の方向の単位インパルスを与えます。

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

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

x = [0 0 0 0]';
y = zeros(2,N);

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

Figure contains an axes object. The axes object with title Mass 1 Excited, xlabel t contains 2 objects of type stem. These objects represent a_1, a_2.

システムを伝達関数表現に変換します。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

Figure contains an axes object. The axes object with title Mass 1 Excited, xlabel t contains 2 objects of type stem. These objects represent a_1, a_2.

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

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

Figure contains an axes object. The axes object with title Mass 2 Excited, xlabel t contains 2 objects of type stem. These objects represent a_1, a_2.

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

Figure contains an axes object. The axes object with title Mass 2 Excited, xlabel t contains 2 objects of type stem. These objects represent a_1, a_2.

入力引数

すべて折りたたむ

状態行列。行列として指定します。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 より前に導入

参考

(Signal Processing Toolbox) | (Signal Processing Toolbox) | (Signal Processing Toolbox) | (Signal Processing Toolbox) | (Signal Processing Toolbox) | (Signal Processing Toolbox)