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:
- Nodal analysis — unknown node voltages; KCL at each node (preferred in electronics and SPICE)
- Mesh analysis — unknown loop currents; KVL around each mesh (planar circuits)
- Source transformation — V_s in series with R ⇔ I_s = V_s/R in parallel with R
- Superposition — in linear circuits, add the effects of each source acting alone
- Thevenin/Norton — reduce everything seen by a load to one source + one impedance
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
- Ohm's law and power:
V = IR; P = VI = I²R = V²/R - KCL / KVL:
ΣI_in = ΣI_out at a node; ΣV = 0 around a loop - Voltage divider:
V_out = V_in·R₂/(R₁ + R₂) - Current divider:
I₁ = I·R₂/(R₁ + R₂) - Thevenin/Norton:
V_th = V_open; R_th = V_open/I_short; I_N = V_th/R_th - Maximum power transfer:
R_L = R_th → P_max = V_th²/(4R_th) - Loaded divider:
V_out = V_th·R_L/(R_th + R_L)
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Ω).
- 25 °C: 3.3 × 10/(10 + 10)
- 50 °C (NTC on top): 3.3 × 10/(3.6 + 10)
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.
- V_th = 12 × 10/57
- R_th = 47 ∥ 10
Answer: 2.11 V behind 8.25 kΩ
Worked example: Norton equivalent
Given: V_th = 6 V, R_th = 5 kΩ
Find: I_N.
- 6/5000
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 ───┴────────────┴─────────┘ GNDSeen 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 VThe 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
- Wrong: Ignoring the load on a divider. — Right: Model the source as Thevenin and include R_L.
- Wrong: Choosing huge divider resistors to save current without checking ADC input current. — Right: Keep R_th small versus the load, or buffer it.
- Wrong: Turning off dependent sources when finding R_th. — Right: Use a test source; dependent sources stay active.
Applications
- LED indicators: Series resistor sized by Ohm's law.
- Transistor biasing: Thevenin equivalent of base-bias dividers.
- Sensor interfaces: Thermistor/LDR dividers into ADCs.
- Interstage loading: Output vs input impedance of amplifier stages.
Key takeaways
- V = IR, KCL, KVL are the foundation.
- Thevenin/Norton reduce any linear network.
- Always check loading: R_L ≫ R_th for voltage signals.
- Dependent sources model transistors and op-amps.
Going further
- Modified nodal analysis: How SPICE builds its matrices.
- Two-port parameters: h, y, z parameters of amplifiers.
- Millman's theorem: Parallel sources shortcut.