Javascript required
Skip to content Skip to sidebar Skip to footer

Solution of Lti System State Space Representation Oscillator

A step response is a common evaluation of the dynamics of a simulated system. A linear time invariant (LTI) system can be described equivalently as a transfer function, a state space model, or solved numerically with and ODE integrator. This tutorial shows how to simulate a first and second order system in Python.

First Order System Simulation

Consider a first order differential equation with constants `K_p=3` and `\tau_p=2`, input `u`, and output response `y`.

$$\tau_p \frac{dy}{dt} = -y + K_p u$$

Three methods to represent this differential equation is as a (1) transfer function, (2) state space model, and (3) semi-explicit differential equation. Source code is included below to simulate a step response in these three forms.

1. Transfer Function

$$\frac{Y(s)}{U(s)} = \frac{K_p}{\tau_p \,s + 1}$$

2. State Space Model

$$\dot x = A x + B u$$

$$y = C x + D u$$

$$A = -\frac{1}{\tau_p} \quad B = \frac{K_p}{\tau_p} \quad C=1 \quad D=0$$

3. Differential Equation

$$\frac{dy}{dt} = -\frac{1}{\tau_p} y + \frac{K_p}{\tau_p} u$$

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
from scipy.integrate import odeint

# Simulate taup * dy/dt = -y + K*u
Kp = 3.0
taup = 2.0

# (1) Transfer Function
num = [Kp]
den = [taup, 1 ]
sys1 = signal.TransferFunction (num,den)
t1,y1 = signal.step (sys1)

# (2) State Space
A = -1.0/taup
B = Kp/taup
C = 1.0
D = 0.0
sys2 = signal.StateSpace (A,B,C,D)
t2,y2 = signal.step (sys2)

# (3) ODE Integrator
def model3(y,t):
u = 1
return (-y + Kp * u)/taup
t3 = np.linspace ( 0 , 14 , 100 )
y3 = odeint(model3, 0 ,t3)

plt.figure ( 1 )
plt.plot (t1,y1, 'b--' ,linewidth= 3 ,label= 'Transfer Fcn' )
plt.plot (t2,y2, 'g:' ,linewidth= 2 ,label= 'State Space' )
plt.plot (t3,y3, 'r-' ,linewidth= 1 ,label= 'ODE Integrator' )
plt.xlabel ( 'Time' )
plt.ylabel ( 'Response (y)' )
plt.legend (loc= 'best' )
plt.show ( )

Second Order System Simulation

1. Laplace Domain, Transfer Function

$$\frac{Y(s)}{U(s)} = \frac{K_p}{\tau_s^2 s^2 + 2 \zeta \tau_s s + 1}e^{-\theta_p s}$$

2. State Space Form

$$\begin{bmatrix}\dot x_1\\\dot x_2\end{bmatrix} = \begin{bmatrix}0&1\\-\frac{1}{\tau_s^2}&-\frac{2 \zeta}{\tau_s}\end{bmatrix} \begin{bmatrix}x_1\\x_2\end{bmatrix} + \begin{bmatrix}0\\\frac{K_p}{\tau_{s}^2}\end{bmatrix} u\left(t-\theta_p\right)$$

$$y = \begin{bmatrix}1 & 0\end{bmatrix} \begin{bmatrix}x_1\\x_2\end{bmatrix} + \begin{bmatrix}0\end{bmatrix} u$$

3. Second Order Differential Equation

$$\tau_s^2 \frac{d^2y}{dt^2} + 2 \zeta \tau_s \frac{dy}{dt} + y = K_p \, u\left(t-\theta_p \right)$$

          Kp    = 2.0  # gain  tau   = 1.0  # time constant  zeta  = 0.25 # damping factor  theta = 0.0  # no time delay        

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
from scipy.integrate import odeint

# tau * dy2/dt2 + 2*zeta*tau*dy/dt + y = Kp*u
Kp = 2.0# gain
tau = 1.0 # time constant
zeta = 0.25 # damping factor
theta = 0.0 # no time delay
du = 1.0# change in u

# (1) Transfer Function
num = [Kp]
den = [tau**2 , 2*zeta*tau, 1 ]
sys1 = signal.TransferFunction (num,den)
t1,y1 = signal.step (sys1)

# (2) State Space
A = [ [ 0.0 , 1.0 ] , [-1.0/tau**2 ,-2.0*zeta/tau] ]
B = [ [ 0.0 ] , [Kp/tau**2 ] ]
C = [ 1.0 , 0.0 ]
D = 0.0
sys2 = signal.StateSpace (A,B,C,D)
t2,y2 = signal.step (sys2)

# (3) ODE Integrator
def model3(x,t):
y = x[ 0 ]
dydt = x[ 1 ]
dy2dt2 = (-2.0*zeta*tau*dydt - y + Kp*du)/tau**2
return [dydt,dy2dt2]
t3 = np.linspace ( 0 , 25 , 100 )
x3 = odeint(model3, [ 0 , 0 ] ,t3)
y3 = x3[:, 0 ]

plt.figure ( 1 )
plt.plot (t1,y1*du, 'b--' ,linewidth= 3 ,label= 'Transfer Fcn' )
plt.plot (t2,y2*du, 'g:' ,linewidth= 2 ,label= 'State Space' )
plt.plot (t3,y3, 'r-' ,linewidth= 1 ,label= 'ODE Integrator' )
y_ss = Kp * du
plt.plot ( [ 0 , max (t1) ] , [y_ss,y_ss] , 'k:' )
plt.xlim ( [ 0 , max (t1) ] )
plt.xlabel ( 'Time' )
plt.ylabel ( 'Response (y)' )
plt.legend (loc= 'best' )
plt.savefig ( '2nd_order.png' )
plt.show ( )

Higher Order Simulation

A simple higher order simulation is the combination of n first order equations. The value of the time constant is 10/n in this example. The first equation is a first order differential expression.

$$\tau \frac{dy_1}{dt} = -y_1 + 1$$

Additional equations are also first order differential expressions for i = 2, n.

$$\tau \frac{dy_i}{dt} = -y_i + y_{i-1}$$

Solution of Lti System State Space Representation Oscillator

Source: https://apmonitor.com/pdc/index.php/Main/ModelSimulation