Chapter 4: Transfer Functions and Block Diagrams

Lesson 2: Poles, Zeros, and System Modes

This lesson develops a rigorous link between the algebraic structure of transfer functions and the time-domain behavior of linear time-invariant (LTI) systems. We introduce formal definitions of poles and zeros, show how poles generate system modes via differential equations and Laplace transforms, and illustrate how these concepts appear in robotics-relevant models and software libraries (Python, C++, Java, MATLAB/Simulink, and Wolfram Mathematica).

1. Conceptual Overview

From the previous lesson, a single-input single-output (SISO) LTI system with zero initial conditions is characterized in the Laplace domain by a transfer function \( G(s) = \dfrac{Y(s)}{U(s)} \), relating the Laplace transforms of output \( Y(s) \) and input \( U(s) \). For a typical physical system, \( G(s) \) is a rational function:

\[ G(s) \;=\; \dfrac{Y(s)}{U(s)} \;=\; \dfrac{b_m s^m + b_{m-1} s^{m-1} + \dots + b_1 s + b_0} {s^n + a_{n-1} s^{n-1} + \dots + a_1 s + a_0}, \quad n \ge m,\; a_n = 1. \]

The denominator polynomial encodes the autonomous dynamics of the system; its roots are called poles and are directly responsible for the characteristic modes of the time response (exponentials and oscillations). The numerator polynomial encodes how the input excites those modes and introduces zeros, which are frequencies or growth rates that are suppressed in the input-output behavior.

The conceptual pipeline from physical model to poles, zeros, and modes can be summarized as:

flowchart TD
  A["Physical laws (mechanical, electrical, etc.)"] --> B["Linear ODE model with constant coefficients"]
  B --> C["Apply Laplace transform (zero initial conditions)"]
  C --> D["Obtain transfer function G(s) = Y(s)/U(s)"]
  D --> E["Factor denominator: roots are poles"]
  D --> F["Factor numerator: roots are zeros"]
  E --> G["Poles → exponential / oscillatory modes in time"]
  F --> H["Zeros → attenuated or cancelled input directions"]
        

2. Formal Definitions of Poles, Zeros, and System Order

Let the transfer function be expressed in factorized form (assuming real coefficients and cancellation of any common factors between numerator and denominator):

\[ G(s) = K \; \dfrac{\displaystyle\prod_{i=1}^{n_z} (s - z_i)^{\mu_i}} {\displaystyle\prod_{j=1}^{n_p} (s - p_j)^{\nu_j}}, \quad \mu_i, \nu_j \in \mathbb{N}. \]

  • A complex number \( p_j \in \mathbb{C} \) is a pole of \( G(s) \) of multiplicity \( \nu_j \) if \( G(s) \) can be written as above and no higher integer power of \( (s - p_j) \) divides the denominator.
  • A complex number \( z_i \in \mathbb{C} \) is a zero of \( G(s) \) of multiplicity \( \mu_i \) if \( G(z_i) = 0 \) and \( (s - z_i)^{\mu_i} \) is the highest power dividing the numerator.
  • The system order (for a minimal realization) is \( n = \sum_{j=1}^{n_p} \nu_j \), the degree of the denominator.
  • The relative degree is \( r = \sum_{j=1}^{n_p} \nu_j - \sum_{i=1}^{n_z} \mu_i \). For a proper transfer function we have \( r \ge 0 \), and for a strictly proper transfer function \( r \ge 1 \).

Throughout this course we usually assume a minimal, strictly proper model, i.e., there are no exact cancellations between poles and zeros and the numerator degree is strictly less than the denominator degree. Non-minimal models lead to hidden modes, which we will revisit later in this lesson.

3. Differential Equations, Characteristic Polynomial, and Modes

3.1 Homogeneous solution and characteristic polynomial

Consider an nth-order linear ODE with constant coefficients, as obtained in previous chapters:

\[ a_n \dfrac{d^n y(t)}{dt^n} + a_{n-1} \dfrac{d^{n-1} y(t)}{dt^{n-1}} + \dots + a_1 \dfrac{dy(t)}{dt} + a_0 y(t) \;=\; b_m \dfrac{d^m u(t)}{dt^m} + \dots + b_0 u(t). \]

The homogeneous equation (zero input \( u(t) \equiv 0 \)) is

\[ a_n \dfrac{d^n y_h(t)}{dt^n} + a_{n-1} \dfrac{d^{n-1} y_h(t)}{dt^{n-1}} + \dots + a_1 \dfrac{dy_h(t)}{dt} + a_0 y_h(t) = 0. \]

Seeking exponential solutions \( y_h(t) = e^{s t} \) gives the characteristic polynomial:

\[ a_n s^n + a_{n-1} s^{n-1} + \dots + a_1 s + a_0 = 0. \]

Its roots \( s = p_j \) are exactly the poles of the transfer function \( G(s) \) (for zero initial conditions) derived via the Laplace transform. A fundamental result from ODE theory states that the homogeneous solution can be written as

\[ y_h(t) = \sum_{j=1}^{n_p} \sum_{\ell=0}^{\nu_j - 1} C_{j,\ell} \, t^{\ell} e^{p_j t}, \quad C_{j,\ell} \in \mathbb{C}, \]

where \( p_j \) are the distinct roots (poles) with multiplicities \( \nu_j \). Each term \( t^{\ell} e^{p_j t} \) is called a mode of the system.

3.2 Impulse response and partial fraction expansion

The impulse response \( g(t) \) of a strictly proper system is obtained by inverse Laplace transform of \( G(s) \). Using partial fractions, we can write

\[ G(s) = \sum_{j=1}^{n_p} \sum_{\ell=1}^{\nu_j} \dfrac{r_{j,\ell}}{(s - p_j)^{\ell}}, \quad r_{j,\ell} \in \mathbb{C}, \]

and recall the Laplace transform pair

\[ \mathcal{L}^{-1}\!\left\{\dfrac{1}{(s - p_j)^{\ell}}\right\} = \dfrac{t^{\ell - 1}}{(\ell - 1)!} e^{p_j t} u(t), \quad t \ge 0, \]

where \( u(t) \) is the unit-step function. Therefore the impulse response is

\[ g(t) = \sum_{j=1}^{n_p} \sum_{\ell=1}^{\nu_j} r_{j,\ell} \, \dfrac{t^{\ell - 1}}{(\ell - 1)!} e^{p_j t} u(t). \]

Conclusion: every pole \( p_j \) of the transfer function generates one or more modes of the form \( t^{\ell-1} e^{p_j t} \) in the time-domain behavior. The numerator (zeros) affects the coefficients \( r_{j,\ell} \) but not the exponents \( p_j \).

4. Classification of Modes by Pole Location

Let a pole be denoted by \( p = \sigma + j\omega \). The associated basic mode is \( e^{p t} = e^{\sigma t} e^{j\omega t} \), and any real system response is a real linear combination of such modes. Using Euler's formula, when \( \omega \neq 0 \) we obtain

\[ e^{\sigma t} e^{j\omega t} = e^{\sigma t}(\cos(\omega t) + j\sin(\omega t)). \]

Thus, for conjugate pairs \( p_{1,2} = \sigma \pm j\omega \), the real-valued mode can always be written as

\[ y_{\text{osc}}(t) = e^{\sigma t}\big(C_1 \cos(\omega t) + C_2 \sin(\omega t)\big), \quad C_1, C_2 \in \mathbb{R}. \]

We obtain the following qualitative classification:

  • Real pole \( p = \sigma \in \mathbb{R} \):
    • \( \sigma < 0 \): decaying exponential mode.
    • \( \sigma = 0 \): constant (integrator) mode.
    • \( \sigma > 0 \): growing exponential mode.
  • Complex conjugate pair \( \sigma \pm j\omega \), \( \omega \neq 0 \):
    • \( \sigma < 0 \): decaying oscillation.
    • \( \sigma = 0 \): sustained oscillation.
    • \( \sigma > 0 \): growing oscillation.
  • Repeated pole \( p \) with multiplicity \( \nu > 1 \): polynomially weighted exponential \( t^{\ell} e^{p t} \) terms produce responses that can rise initially even if \( \sigma < 0 \).

The precise link between pole locations and different notions of stability will be formally developed in Chapter 7; here we focus on the structural connection between poles and modes.

flowchart TD
  S["Pole s0 in complex plane"] --> R["Real part of s0 negative?"]
  R -->|yes| D["Decaying behavior \nin time"]
  R -->|no| R2["Real part of s0 zero?"]
  R2 -->|yes| M["Marginal behavior \n(constant or \nsustained oscillation)"]
  R2 -->|no| G["Growing behavior \nin time"]
  S --> IM["Imag part of \ns0 nonzero?"]
  IM -->|no| REAL["Pure exponential \n(no oscillation)"]
  IM -->|yes| OSC["Oscillatory exponential \n(sin/cos modulated)"]
  D --> REAL
  D --> OSC
  G --> REAL
  G --> OSC
        

5. Zeros and Input-Output Behavior

While poles determine intrinsic modes, zeros encode directions in which the input is suppressed in the output. Algebraically, a finite zero \( z \) satisfies \( G(z) = 0 \), so that (formally) an input mode with Laplace-domain factor \( 1/(s - z) \) is attenuated.

Consider a simple example:

\[ G(s) = \dfrac{s + 2}{(s + 1)(s + 3)}. \]

  • Poles: \( p_1 = -1, \; p_2 = -3 \).
  • Zero: \( z_1 = -2 \).

Using partial fractions:

\[ G(s) = \dfrac{1}{2}\dfrac{1}{s + 1} + \dfrac{1}{2}\dfrac{1}{s + 3}. \]

The impulse response is then

\[ g(t) = \dfrac{1}{2} e^{-t} u(t) + \dfrac{1}{2} e^{-3t} u(t), \]

which contains only the modes associated with the poles. The zero at \( s = -2 \) shapes the relative weights of the exponentials via the residues, and, for certain inputs (e.g. an exponential input related to \( s = -2 \)), it partially cancels the response.

In general, for an exponential input \( u(t) = e^{s_0 t} u(t) \) with Laplace transform \( U(s) = 1/(s - s_0) \), the steady-state component of the output is proportional to \( G(s_0) \). If \( G(s_0) = 0 \), the corresponding exponential component is suppressed; hence the term transmission zero.

6. Pole-Zero Cancellation and Hidden Modes

Suppose a transfer function before simplification is

\[ G_{\text{raw}}(s) = \dfrac{k (s + 2)}{(s + 2)(s + 5)} = \dfrac{k}{s + 5}. \]

Algebraically, a pole at \( s = -2 \) cancels a zero at the same location, yielding a first-order transfer function \( k/(s + 5) \). However, the underlying differential equation remains second order; the mode \( e^{-2 t} \) can still be present due to initial conditions, even if it does not appear in the input-output map \( G(s) \).

For control design, such cancellations are dangerous if the cancelled pole is unstable (with \( \Re(p) > 0 \)) or nearly unstable. The transfer function may hide an internal mode that cannot be influenced by the input in a simple way. A later course on state-space methods will formalize these ideas using controllability and observability theory.

7. Example – Robotic Joint Model and Its Poles

A simple rotational joint in a robot manipulator with motor torque input can often be approximated (after linearization) by

\[ J \ddot{\theta}(t) + B \dot{\theta}(t) + K \theta(t) = K_t u(t), \]

where \( \theta(t) \) is joint angle, \( u(t) \) is armature voltage or torque command, \( J > 0 \) is the equivalent inertia, \( B \ge 0 \) viscous friction, and \( K \ge 0 \) an equivalent stiffness due to elastic transmissions.

Taking Laplace transforms with zero initial conditions gives

\[ (J s^2 + B s + K)\Theta(s) = K_t U(s) \quad \Rightarrow \quad G(s) = \dfrac{\Theta(s)}{U(s)} = \dfrac{K_t}{J s^2 + B s + K}. \]

The poles are the roots of \( J s^2 + B s + K = 0 \):

\[ s_{1,2} = \dfrac{-B \pm \sqrt{B^2 - 4 J K}}{2J}. \]

  • If \( B^2 > 4 J K \), both poles are real and negative (for \( B > 0, J > 0, K > 0 \)), yielding a sum of two decaying exponentials.
  • If \( B^2 = 4 J K \), there is a repeated pole and the response contains a term proportional to \( t e^{s t} \).
  • If \( B^2 < 4 J K \), there is a complex conjugate pair: \( s_{1,2} = \sigma \pm j\omega \) with \( \sigma = -B/(2J) < 0 \), leading to decaying oscillations of the joint.

This second-order joint model is ubiquitous in robotics. In later chapters we will relate these pole locations to time-domain metrics such as overshoot and settling time for joint position control.

8. Python Implementation (Control and Robotics Context)

Python offers symbolic and numerical tools well suited to pole-zero analysis. For robotics-focused work, one often combines libraries such as sympy, control, and roboticstoolbox.


import numpy as np
import control  # python-control library
from math import sqrt

# Joint model parameters (example values)
J = 0.01   # kg m^2
B = 0.02   # N m s/rad
K = 1.0    # N m/rad
Kt = 0.5   # N m per unit input

# Transfer function G(s) = Theta(s)/U(s)
num = [Kt]
den = [J, B, K]
G = control.TransferFunction(num, den)

print("Transfer function G(s) = Theta(s)/U(s):")
print(G)

# Poles and zeros
poles = control.pole(G)
zeros = control.zero(G)

print("Poles:", poles)
print("Zeros:", zeros)

# Step response (e.g., position response to a step in torque command)
t, y = control.step_response(G)
# t, y can be plotted with matplotlib
      

For a robotics library connection, we may estimate \( J \) from a simplified rigid-link model using roboticstoolbox:


from roboticstoolbox import DHRobot, RevoluteDH

# Simple 1-DOF revolute joint with unit-link parameters (toy example)
robot = DHRobot([RevoluteDH(a=0.5, d=0.0, alpha=0.0)], name="one_link")

# Joint inertia about the axis at configuration q = 0
M = robot.inertia([0.0])
J_est = float(M[0, 0])

print("Estimated joint inertia J_est:", J_est)
      

The estimated inertia J_est can then be used in the transfer function \( G(s) \), and poles can be recomputed. This illustrates how mechanical modeling and control-theoretic pole analysis are combined in robotics.

9. C++ Implementation with Eigen and Robotics-Oriented Code

In C++, pole computation is often done either analytically (for low-order systems) or numerically via linear algebra libraries such as Eigen. Robotics frameworks (e.g., ros_control) frequently use such libraries underneath.


#include <iostream>
#include <complex>
#include <cmath>

// Second-order joint model: G(s) = Kt / (J s^2 + B s + K)
struct JointModel {
    double J;
    double B;
    double K;
    double Kt;
};

std::pair<std::complex<double>, std::complex<double>>
compute_poles(const JointModel& jm) {
    double J = jm.J;
    double B = jm.B;
    double K = jm.K;

    double disc = B * B - 4.0 * J * K;
    std::complex<double> sqrt_disc = std::sqrt(std::complex<double>(disc, 0.0));

    std::complex<double> s1 = (-B + sqrt_disc) / (2.0 * J);
    std::complex<double> s2 = (-B - sqrt_disc) / (2.0 * J);
    return {s1, s2};
}

int main() {
    JointModel jm{0.01, 0.02, 1.0, 0.5};
    auto poles = compute_poles(jm);

    std::cout << "Pole 1: " << poles.first  << std::endl;
    std::cout << "Pole 2: " << poles.second << std::endl;

    return 0;
}
      

In robotics software stacks, the same numerical primitives may be encapsulated inside controllers that interact with joint-space dynamics or reduced-order linear models of the robot arm. Eigen can also be used to compute eigenvalues of state matrices once state-space models are introduced.

10. Java, MATLAB/Simulink, and Wolfram Mathematica

10.1 Java with Apache Commons Math

Java does not provide polynomial root finding in the standard library, but packages such as Apache Commons Math can be used. In robotics contexts (e.g., Java-based robot frameworks), such libraries support linear-system analysis.


import org.apache.commons.math3.analysis.polynomials.PolynomialFunction;
import org.apache.commons.math3.analysis.solvers.LaguerreSolver;

public class JointPoles {
    public static void main(String[] args) {
        double J = 0.01;
        double B = 0.02;
        double K = 1.0;

        // Denominator: J s^2 + B s + K
        double[] coeffs = {K, B, J}; // constant term first
        PolynomialFunction den = new PolynomialFunction(coeffs);

        LaguerreSolver solver = new LaguerreSolver();
        // For quadratics, we know there are two roots; use complex root-finding
        org.apache.commons.math3.complex.Complex[] roots = solver.solveAllComplex(coeffs, 0.0);

        for (org.apache.commons.math3.complex.Complex r : roots) {
            System.out.println("Pole: " + r);
        }
    }
}
      

10.2 MATLAB/Simulink (Control and Robotics System Toolboxes)

MATLAB's Control System Toolbox provides built-in functions for transfer functions and pole-zero analysis. Combined with Robotics System Toolbox, these are standard tools in robot control design.


% Parameters
J  = 0.01;
B  = 0.02;
K  = 1.0;
Kt = 0.5;

s = tf('s');
G = Kt / (J*s^2 + B*s + K);

[zG, pG, kG] = zpkdata(G, 'v');  % zeros, poles, gain in vector form
disp('Poles:'); disp(pG);
disp('Zeros:'); disp(zG);

figure; pzmap(G); grid on;
title('Pole-zero map of joint model G(s)');

% In Simulink, one would:
% 1) Use a Transfer Fcn block with numerator [Kt] and denominator [J B K]
% 2) Drive it with a Step block (torque command)
% 3) Observe joint angle with a Scope block
      

10.3 Wolfram Mathematica

Mathematica offers symbolic and numeric functionality for linear systems. The poles and zeros of a transfer function are easily computed and visualized.


J  = 0.01;
B  = 0.02;
K  = 1.0;
Kt = 0.5;

s =.
G[s_] := Kt/(J s^2 + B s + K);

(* TransferFunctionModel from input u to output theta *)
tf = TransferFunctionModel[{Kt}, {J, B, K}, s];

poles = Pole[tf];
zeros = Zero[tf];

Print["Poles: ", poles];
Print["Zeros: ", zeros];

PoleZeroPlot[tf]
      

These tools allow one to connect symbolic dynamics, numerical simulation, and pole-zero maps in a single environment, which is valuable for high-fidelity robot control design.

11. Problems and Solutions

Problem 1 (Poles, zeros, and impulse response): Consider the transfer function \( G_1(s) = \dfrac{5}{s(s + 2)} \).
(a) Find the poles and zeros.
(b) Compute the impulse response \( g_1(t) \) for \( t \ge 0 \).
(c) Identify the modes present in \( g_1(t) \).

Solution:
(a) The denominator is \( s(s + 2) \), so the poles are \( p_1 = 0 \) and \( p_2 = -2 \). The numerator is a nonzero constant, so there are no finite zeros.

(b) Use partial fractions:

\[ \dfrac{5}{s(s + 2)} = \dfrac{A}{s} + \dfrac{B}{s + 2}. \]

Solving for \( A \) and \( B \) yields \( A = \tfrac{5}{2} \), \( B = -\tfrac{5}{2} \), hence

\[ G_1(s) = \dfrac{5}{2} \dfrac{1}{s} - \dfrac{5}{2} \dfrac{1}{s + 2}. \]

Using known Laplace pairs: \( \mathcal{L}^{-1}\{1/s\} = u(t) \) and \( \mathcal{L}^{-1}\{1/(s + 2)\} = e^{-2t} u(t) \), we get

\[ g_1(t) = \dfrac{5}{2} u(t) - \dfrac{5}{2} e^{-2t} u(t), \quad t \ge 0. \]

(c) The modes present are \( e^{0\cdot t} = 1 \) and \( e^{-2 t} \), associated with poles at \( 0 \) and \( -2 \), respectively.


Problem 2 (Repeated pole and polynomially weighted mode): Let \( G_2(s) = \dfrac{3}{(s + 1)^2} \).
(a) Find the impulse response \( g_2(t) \) for \( t \ge 0 \).
(b) Identify the corresponding mode.

Solution:
(a) Using the Laplace pair \( \mathcal{L}^{-1}\{1/(s + 1)^2\} = t e^{-t} u(t) \), we obtain

\[ g_2(t) = 3 t e^{-t} u(t), \quad t \ge 0. \]

(b) There is a single pole at \( p = -1 \) with multiplicity \( \nu = 2 \), and the associated mode is \( t e^{-t} \). The factor \( t \) can cause an initial growth before eventual decay.


Problem 3 (Robotic joint model and pole location): For the joint model \( G(s) = \dfrac{K_t}{J s^2 + B s + K} \) with \( J > 0, B > 0, K > 0 \):
(a) Derive the expression for the poles.
(b) Show that the real part of both poles is negative.
(c) Give a condition on \( B^2 \) and \( 4 J K \) for complex conjugate poles to occur.

Solution:
(a) The poles are the roots of \( J s^2 + B s + K = 0 \), hence

\[ s_{1,2} = \dfrac{-B \pm \sqrt{B^2 - 4 J K}}{2J}. \]

(b) The real part of each pole is \( \Re(s_{1,2}) = -B/(2J) \). With \( B > 0 \) and \( J > 0 \), we have \( \Re(s_{1,2}) < 0 \), so both poles lie in the left half-plane.

(c) The poles are complex conjugate if and only if the discriminant is negative, \( B^2 - 4 J K < 0 \), which is equivalent to \( B^2 < 4 J K \). In that case, the joint exhibits decaying oscillations.


Problem 4 (Pole-zero cancellation and hidden mode): Consider the unsimplified transfer function \( G_{\text{raw}}(s) = \dfrac{k (s + 2)}{(s + 2)(s + 5)} \).
(a) List its poles and zeros.
(b) Simplify \( G_{\text{raw}}(s) \) algebraically and list poles and zeros of the simplified transfer function.
(c) Explain why the original second-order dynamics may still contain a mode associated with \( s = -2 \) in the homogeneous solution.

Solution:
(a) Before cancellation, the denominator is \( (s + 2)(s + 5) \) and numerator \( k (s + 2) \). Thus the poles are \( -2 \) and \( -5 \), and there is a zero at \( -2 \).

(b) Cancelling the common factor gives

\[ G_{\text{min}}(s) = \dfrac{k}{s + 5}, \]

which has a single pole at \( -5 \) and no finite zeros.

(c) The underlying differential equation is of second order, and the homogeneous solution still contains modes associated with both roots of the original characteristic polynomial \( (s + 2)(s + 5) = 0 \). The cancellation only removes the influence of the \( e^{-2 t} \) mode on the input-output map; initial conditions can still excite this mode internally. Hence \( e^{-2 t} \) is a hidden mode.

12. Summary

In this lesson we established the central role of poles and zeros in the analysis of linear control systems. Starting from differential equations, we showed that poles arise as roots of the characteristic polynomial and correspond to exponential or oscillatory modes \( t^{\ell} e^{p t} \) in the time domain. Zeros do not create new exponents but modify the way inputs excite these modes, including complete suppression of certain exponential inputs. We also discussed pole-zero cancellation and the possibility of hidden modes, and we illustrated how to compute poles and zeros in robotics-relevant software environments such as Python, C++, Java, MATLAB/Simulink, and Wolfram Mathematica. These concepts form the foundation for the detailed time-response analysis in the next chapters and for block-diagram manipulation in the next lesson.

13. References

  1. Bode, H.W. (1938). Relations between attenuation and phase in feedback amplifier design. Bell System Technical Journal, 17(3), 229–244.
  2. Evans, W.R. (1948). Control system synthesis by root locus method. Transactions of the American Institute of Electrical Engineers, 67(1), 547–551.
  3. Kalman, R.E. (1960). On the general theory of control systems. IRE Transactions on Automatic Control, 4(3), 110–110.
  4. Zames, G. (1966). On the input-output stability of time-varying nonlinear feedback systems. IEEE Transactions on Automatic Control, 11(2), 228–238.
  5. MacFarlane, A.G.J. (1963). On the theory of linear systems with poles and zeros in the right-half s plane. Proceedings of the Institution of Electrical Engineers, 110(2), 399–404.
  6. Rosenbrock, H.H. (1969). On the zeros of a transfer function. Computer Journal, 12(3), 265–268.
  7. Vidyasagar, M. (1972). On the zeros of multivariable systems. International Journal of Control, 16(3), 491–498.
  8. Desoer, C.A., & Whalen, J.H. (1963). A note on the stability of linear time-invariant systems. Journal of the Franklin Institute, 275(5), 408–412.