Control SystemsInternubiquitous

Transfer Function G(s): Definition and Derivation

Learn how transfer function G(s) is defined, derived from ODEs, and used to read poles, zeros, and DC gain for control design.

10 min readAhmet Zahid ArıcanUpdated 30 Oct 2026
Transfer Function G(s): Definition and Derivation
Contents & prerequisites

What is a transfer function and why do embedded control systems use it?

A transfer function G(s) is the ratio of a linear system's output to its input, expressed in the Laplace domain as G(s) = Y(s)/U(s) with all initial conditions set to zero. It compresses a differential equation — the thing that actually describes a motor, a filter, or a thermal plant — into a single algebraic expression in the complex variable s. For an embedded engineer tuning a PID loop or designing a sensor filter, G(s) is the object you actually manipulate: you don't simulate the ODE by hand, you look at where the poles sit.

Definition: input-output relationship in the Laplace domain

Given a linear, time-invariant (LTI) system with input u(t) and output y(t), the transfer function is defined as G(s) = L{y(t)} / L{u(t)} = Y(s)/U(s), where L{} denotes the Laplace transform and all initial conditions are zero. This definition only holds for LTI systems — systems whose parameters don't change with time and whose response scales linearly with input amplitude. A stepper motor driver switching between microstep tables, or a thermal system with temperature-dependent resistance, violates LTI assumptions at some operating range; G(s) is then a local approximation, valid around an operating point, not a global truth.

Why Laplace transforms simplify differential equations

The Laplace transform turns differentiation into multiplication by s, which converts a linear ODE into a polynomial equation. A second-order mechanical or electrical system described by a d²y/dt² + b dy/dt + c y = u(t) becomes, after transformation, (a s² + b s + c) Y(s) = U(s). Solving a differential equation in the time domain means integrating; solving the same problem in the s-domain means dividing two polynomials. That's the entire appeal — convolution in time becomes multiplication in s, and coupled ODEs become systems of linear algebraic equations you can manipulate with pencil and paper or a symbolic math tool.

Physical meaning: how G(s) predicts system output for any input

G(s) predicts the output of a system for any input by multiplication in the frequency domain: Y(s) = G(s) · U(s). Once you know G(s), you don't need to re-derive the physics for every new input signal — a step, a ramp, a sinusoid — because the transform of that input is a known, tabulated expression, and the output transform is just the product. This is why G(s) is sometimes called the system's fingerprint: it's input-agnostic, carrying only the plant's own dynamics.

How do you derive a transfer function from a differential equation?

Deriving G(s) from an ODE is a three-step mechanical process: transform every term, zero the initial conditions, and solve algebraically for Y(s)/U(s). The physics goes into writing the ODE; everything after that is algebra.

Step-by-step Laplace transform of time-domain ODEs

Start with the governing equation, for example a damped second-order system:

a·d²y/dt² + b·dy/dt + c·y(t) = u(t)

Apply the Laplace transform term by term, using L{dy/dt} = sY(s) − y(0) and L{d²y/dt²} = s²Y(s) − s·y(0) − y'(0):

a[s²Y(s) − s·y(0) − y'(0)] + b[sY(s) − y(0)] + c·Y(s) = U(s)

Applying zero initial conditions

Transfer functions are defined under zero initial conditions — y(0) = 0 and y'(0) = 0 — because G(s) is meant to describe the system's intrinsic dynamics, not a particular starting state. Non-zero initial conditions produce extra terms that represent the free (unforced) response; those are handled separately in a full time-domain solution, but they don't belong in G(s) itself. With zero initial conditions, the equation above collapses to:

a·s²Y(s) + b·s·Y(s) + c·Y(s) = U(s)

Rearranging to isolate Y(s)/U(s)

Factor Y(s) out and divide:

Y(s)(a·s² + b·s + c) = U(s)
G(s) = Y(s)/U(s) = 1 / (a·s² + b·s + c)

That's a complete, general second-order transfer function. Every physical system you'll meet in embedded control — RC filters, motor-encoder loops, thermal plants — reduces to this same procedure, differing only in what a, b, and c represent physically.

What do poles, zeros, and DC gain tell you about system behavior?

Poles determine stability and the natural response's shape, zeros reshape the frequency response, and DC gain sets the steady-state output-to-input ratio. Reading these three features off G(s) directly tells you whether a design is usable without running a single simulation.

Location of poles and stability

Poles are the roots of the denominator of G(s) — the values of s where G(s) goes to infinity — and for a stable LTI system every pole must have a negative real part, placing it in the left half of the complex s-plane. A pole at s = −5 rad/s decays as e^(−5t), settling quickly; a pole at s = −0.1 rad/s decays an order of magnitude slower. A pole with positive real part means the time-domain response grows without bound — an unstable system. Complex-conjugate pole pairs (s = −ζωₙ ± jωₙ√(1−ζ²)) produce oscillatory, underdamped responses, with the damping ratio ζ controlling overshoot and the natural frequency ωₙ controlling oscillation speed.

Zeros and their effect on frequency response

Zeros are the roots of the numerator of G(s), and they reshape the frequency response by boosting gain and advancing phase near their frequency, without affecting stability directly. A zero near the dominant pole can cause overshoot even in an otherwise well-damped system, because it momentarily lets high-frequency content through before the pole rolls it off. In Bode-plot terms, each pole contributes −20 dB/decade of rolloff and −90° of phase lag past its corner frequency; each zero contributes the mirror image, +20 dB/decade and +90° of phase lead. This is the direct link between G(s) and the frequency-response plots used to check phase and gain margin before closing a feedback loop.

DC gain: steady-state output per unit input

DC gain is G(0) — the transfer function evaluated at s = 0 — and it tells you the steady-state output per unit of constant input, once all transients have died out. For G(s) = K/(s² + bs + c), DC gain is K/c. A DC gain of 1 means a unit step input eventually produces a unit output with zero steady-state error; a DC gain of 0.8 means the output settles 20% low. This single number is what links G(s) to steady-state error (Ess), one of the five core specifications — rise time, overshoot, settling time, peak time, and steady-state error — covered in detail in Performance Specs: %OS, Ts, Tr, Tp, Ess.

How do you build transfer functions from circuits and mechanical systems?

Transfer functions come from writing the governing physical equation — Kirchhoff's laws for circuits, Newton's second law for mechanics — and Laplace-transforming it exactly as shown above. The physics changes; the algebra doesn't.

RC and RLC circuit example: voltage divider to G(s)

For a series RC low-pass filter with input voltage Vin and output taken across the capacitor, Kirchhoff's voltage law gives:

Vin(t) = R·i(t) + Vc(t),   i(t) = C·dVc/dt

Substituting and Laplace-transforming with zero initial charge:

Vin(s) = RC·s·Vc(s) + Vc(s)
G(s) = Vc(s)/Vin(s) = 1 / (RCs + 1)

This is a single real pole at s = −1/(RC). With R = 10 kΩ and C = 100 nF, the pole sits at −1000 rad/s, corresponding to a corner frequency of about 159 Hz — verify against your actual component tolerances, since 10% resistors and capacitors shift this corner proportionally. Adding an inductor in series produces an RLC circuit with a second-order denominator, Ls²C + RCs + 1, and the same pole-location reasoning as the generic second-order example applies directly.

Mass-spring-damper: force input to displacement output

Newton's second law for a mass m, damper b, and spring k driven by force f(t), with displacement x(t):

m·d²x/dt² + b·dx/dt + k·x(t) = f(t)

Laplace-transforming with zero initial conditions and solving for X(s)/F(s):

G(s) = 1 / (m·s² + b·s + k)

This is structurally identical to the RLC circuit — mass maps to inductance, damping to resistance, spring stiffness to inverse capacitance. That structural equivalence is why control theory transfers so cleanly between electrical and mechanical domains: once you've solved one second-order system, you've solved them all.

Electromechanical systems: motor speed control

A DC motor's transfer function from armature voltage to angular speed combines an electrical pole (armature inductance and resistance) with a mechanical pole (rotor inertia and friction), typically reducing to a form like G(s) = Km / ((Ls + R)(Js + b) + KmKb), where Km is the motor torque constant, Kb the back-EMF constant, J the rotor inertia, and b the mechanical damping. Look up these parameters in your motor's datasheet rather than assuming typical values — Km and J in particular vary significantly between frame sizes and winding configurations.

What is the relationship between transfer function and system performance?

Pole locations map directly onto the time-domain specifications used to judge a closed-loop design: settling time, overshoot, and rise time are all computable from where the poles sit in the s-plane.

How pole locations determine settling time and overshoot

For a dominant complex-conjugate pole pair at −ζωₙ ± jωₙ√(1−ζ²), settling time to within 2% of final value is approximately Ts ≈ 4/(ζωₙ), and percent overshoot is approximately %OS ≈ exp(−ζπ/√(1−ζ²)) × 100. Moving the poles further left (more negative real part) shortens settling time; increasing ζ (moving poles toward the negative real axis) reduces overshoot at the cost of a slower rise.

DC gain and static error

DC gain combined with the system type (how many poles sit at the origin) determines whether steady-state error for a given reference is zero, finite, or infinite — a type-0 system tracking a step input settles at an error proportional to 1/(1+K), not zero, unless compensated with integral action.

Connection to time-domain specifications

These pole-to-spec relationships are exactly how a transfer function derived from physics turns into a measurable target. If a design requirement says "settling time under 50 ms and overshoot under 10%," you translate that into a required ζ and ωₙ, place the closed-loop poles accordingly, and then design the controller gains that put them there — the same five numbers detailed in Performance Specs: %OS, Ts, Tr, Tp, Ess are the bridge between G(s) algebra and a spec sheet.

How do transfer functions combine in block diagrams?

Transfer functions combine using three rules — series multiplication, parallel addition, and feedback reduction — that let you collapse an entire control loop, sensor, and plant into one equivalent G(s).

Series, parallel, and feedback connections

ConnectionCombined G(s)When it applies
Series (cascade)G(s) = G1(s)·G2(s)Output of one block feeds directly into the next, no loading
ParallelG(s) = G1(s) + G2(s)Both blocks share the same input, outputs summed
FeedbackG(s) = G1(s) / (1 + G1(s)H(s))G1 is forward path, H is feedback path (negative feedback shown)

The feedback formula is the one that matters most in practice: it's the algebraic statement of what a closed loop does to the open-loop plant G1(s), and it's where stability margins and closed-loop pole locations actually get set.

Why understanding G(s) is prerequisite to block algebra

Block-diagram reduction only works if each block is itself a valid transfer function — a correctly derived, zero-initial-condition, LTI ratio of Laplace transforms. Treating a nonlinear actuator or a saturating amplifier as a single G(s) block without first linearizing it around an operating point produces a reduced diagram that looks right algebraically but predicts nothing real.

Practical examples: cascaded controllers and sensors

A typical embedded motor-control loop cascades a PI current controller, a motor electrical transfer function, a motor mechanical transfer function, and a feedback path through an encoder's scaling gain — four blocks in series inside a feedback loop. Each block's G(s) is derived independently using the exact ODE-to-Laplace procedure shown above, then combined with the series and feedback rules to get one closed-loop transfer function, which is what you actually analyze for stability margin and what you tune the PI gains against before writing a line of firmware.

Learning

Sign in to track your progress.

Evidence

Public projects engineers linked to Transfer Function G(s): Definition and Derivation.

Add evidence

No engineer has linked a project to this topic yet. Built something that proves it? Add the project and tag it with control-systems-transfer-function-gs-definition-and-derivation — it then shows here and on your public profile.