class control.TransferFunction(*args)

A class for representing transfer functions

The TransferFunction class is used to represent systems in transfer function form.

The main data members are ‘num’ and ‘den’, which are 2-D lists of arrays containing MIMO numerator and denominator coefficients. For example,

>>> num[2][5] = numpy.array([1., 4., 8.])

means that the numerator of the transfer function from the 6th input to the 3rd output is set to s^2 + 4s + 8.

Discrete-time transfer functions are implemented by using the ‘dt’ instance variable and setting it to something other than ‘None’. If ‘dt’ has a non-zero value, then it must match whenever two transfer functions are combined. If ‘dt’ is set to True, the system will be treated as a discrete time system with unspecified sampling time.


Construct a transfer function.

The default constructor is TransferFunction(num, den), where num and den are lists of lists of arrays containing polynomial coefficients. To crete a discrete time transfer funtion, use TransferFunction(num, den, dt). To call the copy constructor, call TransferFunction(sys), where sys is a TransferFunction object (continuous or discrete).


Return the zero-frequency (or DC) gain

For a continous-time transfer function G(s), the DC gain is G(0) For a discrete-time transfer function G(z), the DC gain is G(1)


gain : ndarray

The zero-frequency gain


Evaluate a transfer function at a single angular frequency.

self.evalfr(omega) returns the value of the transfer function matrix with input value s = i * omega.

feedback(other=1, sign=-1)

Feedback interconnection between two LTI objects.


Evaluate a transfer function at a list of angular frequencies.

mag, phase, omega = self.freqresp(omega)

reports the value of the magnitude, phase, and angular frequency of the transfer function matrix evaluated at s = i * omega, where omega is a list of angular frequencies, and is a sorted version of the input omega.


Evaluate the systems’s transfer function for a complex variable

Returns a matrix of values evaluated at complex variable s.


Check to see if a system is a continuous-time system


sys : LTI system

System to be checked

strict: bool (default = False) :

If strict is True, make sure that timebase is not None


Check to see if a system is a discrete-time system


strict: bool (default = False) :

If strict is True, make sure that timebase is not None


Remove cancelling pole/zero pairs from a transfer function


Compute the poles of a transfer function.


Return a list of a list of scipy.signal.lti objects.

For instance,

>>> out = tfobject.returnScipySignalLTI()
>>> out[3][5]

is a signal.scipy.lti object corresponding to the transfer function from the 6th input to the 4th output.

sample(Ts, method='zoh', alpha=None)

Convert a continuous-time system to discrete time

Creates a discrete-time system from a continuous-time system by sampling. Multiple methods of conversion are supported.


Ts : float

Sampling period

method : {“gbt”, “bilinear”, “euler”, “backward_diff”, “zoh”, “matched”}

Which method to use:

  • gbt: generalized bilinear transformation
  • bilinear: Tustin’s approximation (“gbt” with alpha=0.5)
  • euler: Euler (or forward differencing) method (“gbt” with alpha=0)
  • backward_diff: Backwards differencing (“gbt” with alpha=1.0)
  • zoh: zero-order hold (default)

alpha : float within [0, 1]

The generalized bilinear transformation weighting parameter, which should only be specified with method=”gbt”, and is ignored otherwise


sysd : StateSpace system

Discrete time system, with sampling rate Ts


  1. Available only for SISO systems
  2. Uses the command cont2discrete from scipy.signal


>>> sys = TransferFunction(1, [1,1])
>>> sysd = sys.sample(0.5, method='bilinear')

Compute the zeros of a transfer function.