control.impulse_response(sys, T=None, input=None, output=None, T_num=None, transpose=False, return_x=False, squeeze=None)[source]

Compute the impulse response for a linear system.

If the system has multiple inputs and/or multiple outputs, the impulse response is computed for each input/output pair, with all other inputs set to zero. Optionally, a single input and/or single output can be selected, in which case all other inputs are set to 0 and 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)

  • input (int, optional) – Only compute the impulse response for the listed input. If not specified, the impulse responses for each independent input are computed.

  • output (int, optional) – Only report the step response for the listed output. If not specified, all outputs are reported.

  • 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, optional) – If True, transpose all input and output arrays (for backward compatibility with MATLAB and scipy.signal.lsim()). Default value is False.

  • return_x (bool, optional) – If True, return the state vector when assigning to a tuple (default = False). See forced_response() for more details.

  • squeeze (bool, optional) – By default, if a system is single-input, single-output (SISO) then the output response is returned as a 1D array (indexed by time). If squeeze=True, remove single-dimensional entries from the shape of the output even if the system is not SISO. If squeeze=False, keep the output as a 2D array (indexed by the output number and time) even if the system is SISO. The default value can be set using config.defaults[‘control.squeeze_time_response’].


results – Impulse response represented as a TimeResponseData object containing the following properties:

  • time (array): Time values of the output.

  • outputs (array): Response of the system. If the system is SISO and squeeze is not True, the array is 1D (indexed by time). If the system is not SISO or squeeze is False, the array is 3D (indexed by the output, trace, and time).

  • states (array): Time evolution of the state vector, represented as either a 2D array indexed by state and time (if SISO) or a 3D array indexed by state, trace, and time. Not affected by squeeze.

The return value of the system can also be accessed by assigning the function to a tuple of length 2 (time, output) or of length 3 (time, output, state) if return_x is True.

Return type



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. For discrete-time aystems, the impulse is sized so that it has unit area. Response for nonlinear systems is computed using input_output_response.


>>> G = ct.rss(4)
>>> T, yout = ct.impulse_response(G)