#import "../lib/unify.typ": qty, unit #import "@preview/cetz:0.5.2" #import "@preview/cetz-plot:0.1.4": plot #figure( cetz.canvas({ import cetz.draw: * plot.plot( size: (12, 6), x-mode: "log", x-label: [Frequency $f$ ($unit("Hz")$)], y-label: [Coupled Voltage $V_"coupled"$ ($unit("mV")$)], x-min: 10, x-max: 100000, y-min: 0.001, y-max: 65, x-grid: "minor", y-grid: "minor", { // 20 kHz System Bandwidth limit vertical reference line plot.add( ((20000, 0.001), (20000, 100)), style: ( stroke: (paint: luma(120), thickness: 0.8pt, dash: "dashed"), ), label: none, ) // Unshielded PCB trace: C_mutual = 1 pF, Z_victim = 10 kOhm plot.add( style: (stroke: (dash: "solid")), label: [Unshielded trace \ ($qty(1, "pF"), qty(10, "kilo ohm")$)], domain: (10, 100000), samples: 1000, f => 2 * calc.pi * f * 1e-12 * 10000 * 10 * 1000, // in mV ) // Low-impedance node: C_mutual = 1 pF, Z_victim = 1 kOhm plot.add( style: (stroke: (dash: "dashed")), label: [Low-impedance node \ ($qty(1, "pF"), qty(1, "kilo ohm")$)], domain: (10, 100000), samples: 1000, f => 2 * calc.pi * f * 1e-12 * 1000 * 10 * 1000, // in mV ) // Guard trace shielding: C_mutual = 0.05 pF, Z_victim = 10 kOhm plot.add( style: (stroke: (dash: "dotted")), label: [Guard trace shielded \ ($qty(0.05, "pF"), qty(10, "kilo ohm")$)], domain: (10, 100000), samples: 1000, f => 2 * calc.pi * f * 0.05e-12 * 10000 * 10 * 1000, // in mV ) }, ) }), caption: [Capacitive crosstalk coupled voltage ($V_"coupled"$) vs. frequency across different PCB layout conditions, demonstrating the $qty(20, "decibel per decade")$ slope up to the $qty(20, "kHz")$ system bandwidth boundary], )