ss2tf

Convert state-space representation to transfer function

Syntax

Description

example

[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.

example

[b,a] = ss2tf(A,B,C,D,ni) returns the transfer function that results when the nith input of a system with multiple inputs is excited by a unit impulse.

Examples

expand all

Mass-Spring System

A one-dimensional discrete-time oscillating system consists of a unit mass, $m$, attached to a wall by a spring of unit elastic constant. A sensor samples the acceleration, $a$, of the mass at $F_s=5$ Hz.

Generate 50 time samples. Define the sampling interval $\Delta t=1/F_s$.

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

The oscillator can be described by the state-space equations

$$\matrix{x(k+1)=Ax(k)+Bu(k),\cr y(k)=Cx(k)+Du(k),\hfill\cr}$$

where $x=\pmatrix{r&v}^T$ is the state vector, $r$ and $v$ are respectively the position and velocity of the mass, and the matrices

$$A=\pmatrix{\hfill\cos\Delta t&\sin\Delta t\cr-\sin\Delta t&\cos\Delta
t\cr},\quad B=\pmatrix{1-\cos\Delta t\cr\sin\Delta t\cr},\quad
C=\pmatrix{-1&0\cr},\quad D=\pmatrix{1\cr}.$$

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

The system is excited with a unit impulse in the positive direction. Use the state-space model to compute the time evolution of the system starting from an all-zero initial state.

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

Plot the acceleration of the mass as a function of time.

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

Compute the time-dependent acceleration using the transfer function H(z) to filter the input. Plot the result.

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

The transfer function of the system has an analytic expression:

$$H(z)={{1-z^{-1}(1+\cos\Delta t)+z^{-2}\cos\Delta
t}\over{1-2z^{-1}\cos\Delta t+z^{-2}}}.$$

Use the expression to filter the input. Plot the response.

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

The result is the same in all three cases.

Two-Body Oscillator

An ideal one-dimensional oscillating system consists of two unit masses, $m_1$ and $m_2$, confined between two walls. Each mass is attached to the nearest wall by a spring of unit elastic constant. Another such spring connects the two masses. Sensors sample $a_1$ and $a_2$, the accelerations of the masses, at $F_s=16$ Hz.

Specify a total measurement time of 16 s. Define the sampling interval $\Delta t=1/F_s$.

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

The system can be described by the state-space model

$$\matrix{x(n+1)=Ax(n)+Bu(n),\cr y(n)=Cx(n)+Du(n),\hfill\cr}$$

where $x=\pmatrix{r_1&v_1&r_2&v_2}^T$ is the state vector and $r_i$ and $v_i$ are respectively the location and the velocity of the $i$-th mass. The input vector $u=\pmatrix{u_1&u_2}^T$ and the output vector $y=\pmatrix{a_1&a_2}^T$. The state-space matrices are

$$A=\exp(A_c\Delta t),\quad B=A_c^{-1}(A-I)B_c,\quad
C=\pmatrix{-2&0&1&0\cr1&0&-2&0\cr},\quad D=I,$$

the continuous-time state-space matrices are

$$A_c=\pmatrix{0&1&0&0\cr-2&0&1&0\cr0&0&0&1\cr1&0&-2&0\cr},\quad
B_c=\pmatrix{0&0\cr1&0\cr0&0\cr0&1\cr},$$

and $I$ denotes an identity matrix of the appropriate size.

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);

The first mass, $m_1$, receives a unit impulse in the positive direction.

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

Use the model to compute the time evolution of the system starting from an all-zero initial state.

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

Plot the accelerations of the two masses as functions of time.

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

Convert the system to its transfer function representation. Find the response of the system to a positive unit impulse excitation on the first mass.

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

Plot the result. The transfer function gives the same response as the state-space model.

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

The system is reset to its initial configuration. Now the other mass, $m_2$, receives a unit impulse in the positive direction. Compute the time evolution of the system.

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

Plot the accelerations. The responses of the individual masses are switched.

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

Find the response of the system to a positive unit impulse excitation on the second mass.

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

Plot the result. The transfer function gives the same response as the state-space model.

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

Input Arguments

expand all

A — State matrixmatrix

State matrix, specified as a matrix. If the system has p inputs and q outputs and is described by n state variables, then A is n-by-n.

Data Types: single | double

B — Input-to-state matrixmatrix

Input-to-state matrix, specified as a matrix. If the system has p inputs and q outputs and is described by n state variables, then B is n-by-p.

Data Types: single | double

C — State-to-output matrixmatrix

State-to-output matrix, specified as a matrix. If the system has p inputs and q outputs and is described by n state variables, then C is q-by-n.

Data Types: single | double

D — Feedthrough matrixmatrix

Feedthrough matrix, specified as a matrix. If the system has p inputs and q outputs and is described by n state variables, then D is q-by-p.

Data Types: single | double

ni — Input index1 (default) | integer scalar

Input index, specified as an integer scalar. If the system has p inputs, use ss2tf with a trailing argument ni = 1, …, p to compute the response to a unit impulse applied to the nith input.

Data Types: single | double

Output Arguments

expand all

b — Transfer function numerator coefficientsvector | matrix

Transfer function numerator coefficients, returned as a vector or matrix. If the system has p inputs and q outputs and is described by n state variables, then b is q-by-(n + 1) for each input. The coefficients are returned in descending powers of s or z.

a — Transfer function denominator coefficientsvector

Transfer function denominator coefficients, returned as a vector. If the system has p inputs and q outputs and is described by n state variables, then a is 1-by-(n + 1) for each input. The coefficients are returned in descending powers of s or z.

More About

expand all

Transfer Function

  • For discrete-time systems, the state-space matrices relate the state vector x, the input u, and the output y through

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

    The transfer function is the Z-transform of the system's impulse response. It can be expressed in terms of the state-space matrices as

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

  • For continuous-time systems, the state-space matrices relate the state vector x, the input u, and the output y through

    x˙=Ax+Buy=Cx+Du.

    The transfer function is the Laplace transform of the system's impulse response. It can be expressed in terms of the state-space matrices as

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

See Also

| | | | |

Was this topic helpful?