Circuit Analysis for Analog Design

The tools every analog designer uses daily. Learn voltage, current, resistance, conductance, power and energy, Ohm's law, KCL and KVL, nodal and mesh analysis, voltage and current dividers (and why loading matters), source transformation, Thevenin and Norton equivalents, maximum power transfer, superposition and linearity, dependent sources (the basis of transistor models), practical source and load impedance, and the small-signal idea — with worked LED-resistor, bias-divider, sensor-divider, loaded-divider and Thevenin examples and a NumPy nodal solver.

Almost every analog calculation — biasing a transistor, sizing a sensor divider, predicting how an amplifier loads a source — reduces to Ohm's law, Kirchhoff's laws and a few network theorems.

Thevenin's theorem is the single most useful idea: any linear circuit seen from two terminals behaves like one voltage source in series with one resistance. That's how we reason about source impedance, loading and output impedance throughout this course.

An analogy

Current is like water flow, voltage like pressure and resistance like pipe narrowness. KCL says water can't vanish at a junction; KVL says going round a closed loop you end up at the same height you started.

The laws

Ohm's law relates voltage and current in a resistor. KCL (conservation of charge): currents into a node sum to zero. KVL (conservation of energy): voltages around a closed loop sum to zero. Power dissipated in a resistor must stay below its rating (with margin); P = I²R shows why current matters most in low-resistance parts.

Systematic analysis

Methods for any linear circuit:

Loading and impedance thinking

A voltage source should drive a load much larger than its own output resistance (voltage bridging, R_L ≥ 10·R_out) so little signal is lost; current sources should drive loads much smaller than their output resistance. Maximum power transfer (R_L = R_th) is used in RF and antennas but wastes half the power — never used for efficient power delivery. Sensor dividers (e.g. a thermistor with a fixed resistor) must account for the ADC's input impedance.

Dependent sources and small-signal models

Transistors and op-amps are modelled with dependent sources: voltage-controlled current sources (g_m·v_be in a BJT, g_m·v_gs in a MOSFET), current-controlled current sources (β·i_b), and voltage-controlled voltage sources (A·v_d in an op-amp). With dependent sources present, find R_th by applying a test voltage and measuring the test current (you can't just 'turn off' dependent sources). Small-signal analysis applies these linear tools to the small variations around a DC operating point.

Formulas

Worked example: Sensor divider

Given: NTC 10 kΩ at 25 °C, fixed 10 kΩ, 3.3 V supply

Find: Output at 25 °C and at 50 °C (NTC 3.6 kΩ).

Answer: 1.65 V and 2.43 V

Worked example: Bias divider for a transistor

Given: 12 V, R1 = 47 kΩ, R2 = 10 kΩ

Find: V_th and R_th seen by the base.

Answer: 2.11 V behind 8.25 kΩ

Worked example: Norton equivalent

Given: V_th = 6 V, R_th = 5 kΩ

Find: I_N.

Answer: 1.2 mA in parallel with 5 kΩ

Loaded divider and its Thevenin equivalent

  12 V ──┬──[R1 10k]──┬──── Vout          Thevenin view:
         │            │                     Vth = 6 V ──[Rth 5k]──┬── Vout
         │         [R2 10k]  [RL 10k]                              [RL 10k]
         │            │         │                                  │
  GND ───┴────────────┴─────────┘                                 GND

Seen from the output, R1 and R2 collapse into 6 V behind 5 kΩ. A 10 kΩ load then forms a new divider with the 5 kΩ source resistance, pulling the output from 6 V down to 4 V — loading in action.

LED resistor, loaded divider, Thevenin and nodal analysis

# Circuit analysis toolkit: LED resistor, loaded divider, Thevenin equivalent and nodal analysis
Vs, Vf, If = 5.0, 2.0, 0.010
R = (Vs - Vf) / If
print(f"LED resistor = {R:.0f} ohm (use 330 ohm -> {(Vs-Vf)/330*1000:.1f} mA), resistor power {(Vs-Vf)**2/330*1000:.1f} mW")
# Divider 12 V, R1 = 10k, R2 = 10k, loaded by 10k
R1, R2, RL, Vin = 10e3, 10e3, 10e3, 12.0
unloaded = Vin * R2 / (R1 + R2)
R2L = R2 * RL / (R2 + RL)
loaded = Vin * R2L / (R1 + R2L)
print(f"divider: unloaded {unloaded:.2f} V, loaded by 10k {loaded:.2f} V")
Vth, Rth = unloaded, R1 * R2 / (R1 + R2)
print(f"Thevenin: Vth = {Vth:.2f} V, Rth = {Rth/1e3:.1f} k -> into 10k: {Vth*RL/(Rth+RL):.2f} V (same)")
print(f"max power into load when RL = Rth: {Vth**2/(4*Rth)*1000:.2f} mW")
# Nodal analysis with numpy: two nodes
import numpy as np
# Node equations (G matrix) for: 12 V source via 1k to node1; node1-node2 2k; node1-gnd 3k; node2-gnd 4k; 1 mA into node2
G = np.array([[1/1e3 + 1/2e3 + 1/3e3, -1/2e3], [-1/2e3, 1/2e3 + 1/4e3]])
I = np.array([12/1e3, 1e-3])
v = np.linalg.solve(G, I)
print(f"nodal: V1 = {v[0]:.3f} V, V2 = {v[1]:.3f} V")
# LED resistor = 300 ohm (use 330 ohm -> 9.1 mA), resistor power 27.3 mW
# divider: unloaded 6.00 V, loaded by 10k 4.00 V
# Thevenin: Vth = 6.00 V, Rth = 5.0 k -> into 10k: 4.00 V (same)
# max power into load when RL = Rth: 1.80 mW
# nodal: V1 = 8.444 V, V2 = 6.963 V

The nodal method writes KCL at each unknown node as G·v = i and solves it as a matrix — exactly what SPICE does internally. The Thevenin model reproduces the loaded-divider result in one line, which is why designers think in source/load impedances rather than whole networks.

Common mistakes

Applications

Key takeaways

Going further