control.impulse_response(sys, T=None, X0=0.0, input=0, output=None, T_num=None, transpose=False, return_x=False, squeeze=True)

Impulse response of a linear system

If the system has multiple inputs or outputs (MIMO), one input has to be selected for the simulation. Optionally, one output may be selected. The parameters input and output do this. All other inputs are set to 0, all other outputs are ignored.

For information on the shape of parameters T, X0 and return values T, yout, see Time series data.

  • sys (StateSpace, TransferFunction) – LTI system to simulate

  • T (array_like or float, optional) – Time vector, or simulation time duration if a scalar (time vector is autocomputed if not given; see step_response() for more detail)

  • X0 (array_like or float, optional) –

    Initial condition (default = 0)

    Numbers are converted to constant arrays with the correct shape.

  • input (int) – Index of the input that will be used in this simulation.

  • output (int) – Index of the output that will be used in this simulation. Set to None to not trim outputs

  • T_num (int, optional) – Number of time steps to use in simulation if T is not provided as an array (autocomputed if not given); ignored if sys is discrete-time.

  • transpose (bool) – If True, transpose all input and output arrays (for backward compatibility with MATLAB and scipy.signal.lsim())

  • return_x (bool) – If True, return the state vector (default = False).

  • squeeze (bool, optional (default=True)) – If True, remove single-dimensional entries from the shape of the output. For single output systems, this converts the output response to a 1D array.


  • T (array) – Time values of the output

  • yout (array) – Response of the system

  • xout (array) – Individual response of each x variable


This function uses the forced_response function to compute the time response. For continuous time systems, the initial condition is altered to account for the initial impulse.


>>> T, yout = impulse_response(sys, T, X0)