aboutsummaryrefslogtreecommitdiff
path: root/module-design.typ
diff options
context:
space:
mode:
Diffstat (limited to 'module-design.typ')
-rw-r--r--module-design.typ131
1 files changed, 98 insertions, 33 deletions
diff --git a/module-design.typ b/module-design.typ
index bebb2ce..5288949 100644
--- a/module-design.typ
+++ b/module-design.typ
@@ -1,4 +1,6 @@
#import "lib/unify.typ": num, qty, qtyrange, unit
+#import "lib/apply_prefix.typ": apply-prefix
+#import "lib/assert_aeq.typ": assert-aeq
#import "@preview/diverential:0.3.0": *
= Module design <module-design>
@@ -1007,6 +1009,9 @@ each other.
The SAME signal range is $plus.minus qty(10, "V")$, a span of $qty(20, "V")$.
Precision of $qty(10, "ppm")$ means the maximum acceptable error is:
+#let epsilon_max = 20 * apply-prefix(10, "micro")
+#assert.eq(epsilon_max, apply-prefix(200, "micro"))
+
$ epsilon_"max" = qty(20, "V") times num("10e-6") = qty(200, "uV") $
This is our total error budget. Every error source - noise, drift, offset,
@@ -1020,15 +1025,19 @@ nonlinearity - must sum to less than $qty(200, "uV")$ referred to output
A $qty(90, "dB") upright("SNR")$ with a $qty(20, "Vpp")$ signal range implies an
$upright("RMS")$ noise floor of:
+#let v_noise_rms = 20 / (calc.pow(10, 90 / 20))
+#assert-aeq(v_noise_rms, apply-prefix(632.455, "micro"))
$
- V_("noise","rms") = qty(20, "V")/10^(90/20) = qty(20, "V")/31623 = qty(632.455, "uVrms")
+ V_("noise","rms") = qty(20, "V")/10^(90/20) = qty(20, "V")/31623 approx qty(632.455, "uVrms")
$
For Gaussian noise, the peak-to-peak value is approximately $6 times$ the
$upright("RMS")$ value ($2 Phi (3) - 1 approx qty(99.7, "percent")$ containment):
+#let v_noise_pp = 6 * apply-prefix(632.455, "micro")
+#assert-aeq(v_noise_pp, apply-prefix(3.7947, "milli"))
$
- V_("noise","pp") approx 6 times qty(632.455, "uV") = qty(3.79473, "mVpp")
+ V_("noise","pp") approx 6 times qty(632.455, "uV") approx qty(3.7947, "mVpp")
$
This appears to conflict with our $qty(200, "uV")$ precision requirement. The
@@ -1053,12 +1062,16 @@ $tau = qty(25, "us")$: it represents one Nyquist interval
($f_"sample" = 2 upright("BW") = qty(40, "kHz")$, giving
$T_"sample" = qty(25, "us")$).
+#let epsilon_noise = (
+ apply-prefix(632.455, "micro") / calc.sqrt(2 * 20000 * apply-prefix(25, "micro"))
+)
+#assert-aeq(epsilon_noise, apply-prefix(632.455, "micro"))
$
epsilon_"noise" = qty(632.455, "uV") / sqrt(2 times 20000 times num("25e-6")) = qty(632.455, "uV") / 1 = qty(632.455, "uV")
$
This means noise alone consumes more than our entire precision budget for
-simgle-sample measurements.
+single-sample measurements.
===== Resolution <snr-and-noise-floor-resolution>
@@ -1082,8 +1095,8 @@ noise, while the $qty(10, "ppm")$ precision requires $lt qty(200, "uV")$
systematic error. These are independent budgets.
In real-world analog computing (such as differential equation solving), feedback
-loops and integrators inherently ast as low-pass filters
-($tau gt.double qty(25, "uV")$). As a result, long-term or dynamic patch
+loops and integrators inherently act as low-pass filters
+($tau gt.double qty(25, "us")$). As a result, long-term or dynamic patch
execution naturally attenuates the random noise variance toward zero, leaving
the $qty(10, "ppm")$ systematic precision as the true controlling factor for
continuous computation.
@@ -1092,12 +1105,16 @@ continuous computation.
The drift rate specification of $qty(0.014, "ppm per hour")$ means:
+#let dv_epsilon_t = apply-prefix(0.014, "micro") * 20
+#assert-aeq(dv_epsilon_t, apply-prefix(280, "nano"))
$
dv(epsilon, t) lt.eq num("0.014e-6") times qty(20, "volt per hour") = qty(280, "nano volt per hour")
$
Over 30 days (720 hours), the accumulated drift is:
+#let epsilon_drift_day = 0.014 * 720
+#assert.eq(epsilon_drift_day, 10.08)
$ epsilon_("drift",qty(30, "day")) = 0.014 times 720 = qty(10.08, "ppm") $
This is precisely calibrated so that 30 days of drift consumes the entire
@@ -1126,6 +1143,8 @@ For a sinusoidal signal at frequency $f$ to be reproduced within
$qty(10, "ppm")$ amplitude error, the amplifier gain at the frequency must
satisfy:
+#let af_a0 = 1 - apply-prefix(10, "micro")
+#assert.eq(af_a0, 0.99999)
$
A(f)/A(0) & gt.eq 1 - num("10e-6") \
A(f)/A(0) & gt.eq 0.99999
@@ -1139,6 +1158,8 @@ $ A(f)/A(0) gt.eq 1/sqrt(1 + (f G/upright("GBW"))^2) $
Solving for $qty(10, "ppm")$ gain error at $qty(20, "kHz")$ with $G = 1$
(unity gain buffer):
+#let gbw = 20000 / calc.sqrt(calc.pow(1 / 0.99999, 2) - 1)
+#assert-aeq(gbw, apply-prefix(4.5, "mega"), precision: 30000)
$
upright("GBW") gt.eq 20000 / sqrt((1/0.99999)^2 - 1) approx 20000/sqrt(0.00002) approx qty(4.5, "MHz")
$
@@ -1206,6 +1227,8 @@ $ V_(n,"rms") = sqrt(4 k_B T R upright("BW")) $
At $T = qty(300, "K")$ ($qty(27, "dC")$), for a $qty(10, "kilo ohm")$ resistor
over $qty(20, "kHz")$ bandwidth:
+#let n_rms = calc.sqrt(4 * 1.381 * calc.pow(10, -23) * 300 * 10000 * 20000)
+#assert-aeq(n_rms, apply-prefix(1.8205, "micro"))
$
V_(n,"rms") & = sqrt(4 times num("1.381e-23") times 300 times 10000 times 20000) \
V_(n,"rms") & approx qty(1.82, "uVrms")
@@ -1213,6 +1236,8 @@ $
For a $qty(1, "mega ohm")$ resistor (input impedance):
+#let n_rms = calc.sqrt(4 * 1.381 * calc.pow(10, -23) * 300 * 1000000 * 20000)
+#assert-aeq(n_rms, apply-prefix(18.205, "micro"))
$
V_(n,"rms") & = sqrt(4 times num("1.381e-23") times 300 times 1000000 times 20000) \
V_(n,"rms") & approx qty(18.2, "uVrms")
@@ -1221,9 +1246,9 @@ $
====== Where it enters <resistor-thermal-noise-where-it-enters>
/ Front-panel input nodes: The mandated $Z_"in" gt.eq qty(1, "mega ohm")$
- impedance om white input jacks creates an unavoidable
+ impedance on white input jacks creates an unavoidable
$approx qty(18.2, "uVrms")$ noise floor right at the module boundary. This
- necessitates dropping internal suming nodes down to $qty(1, "kilo ohm")$
+ necessitates dropping internal summing nodes down to $qty(1, "kilo ohm")$
post-buffering to prevent additive thermal noise accumulation,
/ Feedback resistors: Thermal noise generated in feedback elements is scaled to
the output by the stage's noise gain ($G_N = 1 + R_f / R_"in"$).
@@ -1231,7 +1256,7 @@ $
$G_N gt.eq 1$, meaning thermal noise is never attenuated along with the
signal,
/ Input resistors: In summing junction amplifiers,
-/ High-impedance nodes: Within integrators, sample-an-holds, and
+/ High-impedance nodes: Within integrators, sample-and-holds, and
current-to-voltage converters.
====== Scaling law <resistor-thermal-noise-scaling-law>
@@ -1268,7 +1293,7 @@ $
e_n (f) = sqrt(e_(n,"white")^2 + (e_(n,1/f)^2)/f) = e_(n,"white") sqrt(1 + f_c/f)
$
-The corner frequency $f_c$ is where $1/f$ noise noise power equals white noise
+The corner frequency $f_c$ is where $1/f$ noise power equals white noise
power:
$ f_c = (e_(n,1/f) / e_(n,"white"))^2 $
@@ -1304,6 +1329,10 @@ servo loop.
For a precision op-amp ($1 unit("nano volt per shertz"), f_c = qty(10, "Hz")$)
over $qty(0.001, "Hz")$ to $qty(20, "kHz")$:
+#let v_n_rms = calc.sqrt(
+ calc.pow(calc.pow(10, -9), 2) * 20000 + (calc.pow(calc.pow(10, -9), 2) * 10 * calc.ln(20000 / 0.001)),
+)
+#assert-aeq(v_n_rms, apply-prefix(0.43, "micro"))
$
V_(n,"rms") & = sqrt((num("1e-9"))^2 times 20000 + (num("1e-9"))^2 times 10 ln(20000/0.001)) \
V_(n,"rms") & = sqrt(num("2e-14") + num("1.68e-13")) = sqrt(num("1.88e-13")) approx qty(0.43, "uVrms")
@@ -1368,12 +1397,16 @@ $ V_(n,i,"rms") = i_n times Z_"source" times sqrt(upright("BW")) $
For a bipolar op-amp ($1 unit("pico ampere per shertz")$) with $qty(10, "kilo ohm")$
source impedance over $qty(20, "kHz")$:
+#let v_n_i_rms = apply-prefix(1, "pico") * 10000 * calc.sqrt(20000)
+#assert-aeq(v_n_i_rms, apply-prefix(1.41, "micro"))
$
V_(n,i,"rms") = num("1e-12") times 10000 times sqrt(20000) approx qty(1.41, "uVrms")
$
For a $qty(1, "mega ohm")$ source impedance (as mandated for SAME input jacks):
+#let v_n_i_rms = apply-prefix(1, "pico") * calc.pow(10, 6) * calc.sqrt(20000)
+#assert-aeq(v_n_i_rms, apply-prefix(141, "micro"))
$
V_(n,i,"rms") = num("1e-12") times 10^6 times sqrt(20000) approx qty(141, "uVrms")
$
@@ -1393,9 +1426,9 @@ Current noise cannot be cancelled by differential substraction because $i_(n+)$
and $i_(n-)$ are uncorrelated shot-noise sources. Mitigation requires:
- Mandating JFET or CMOS input buffers for all $Z_"in" gt.eq qty(1, "mega ohm")$
front-panel input interfaces,
-- Restring low-noise bipolar op-amps exclusively to low-impedance nodes
+- Restricting low-noise bipolar op-amps exclusively to low-impedance nodes
($Z_"source" lt qty(1, "kilo ohm")$),
-- Minimizing non-inverting terminal impedance by grouding it directly to AGND
+- Minimizing non-inverting terminal impedance by grounding it directly to AGND
where DC offset allows, avoiding extra thermal and current noise
contributions.
@@ -1416,11 +1449,11 @@ The output error voltage $V_(n,"supply")$ resulting from supply ripple
$ V_(n,"supply") = V_("ripple") / (upright("PSRR")(f)) $
-Where $upright("PSRR")$ expressed in $unit("dB")$ represents the ration of AC
+Where $upright("PSRR")$ expressed in $unit("dB")$ represents the ratio of AC
supply variation to output error variation:
$
- upright("PSRR")_(unit("dB")) = 20 log_10(V_("supply")/V_("out"))
+ upright("PSRR")_(unit("dB")) = 20 log_10((Delta V_("supply"))/(Delta V_("out")))
$
====== Typical magnitude <power-supply-noise-coupling-typical-magnitude>
@@ -1440,8 +1473,10 @@ For SAME analog supply cleanliness specification ($qty(500, "uVpp")$ ripple on
$plus.minus qty(15, "V")$ rails) with $qty(80, "dB") upright("PSRR")$ at
$qty(10, "kHz")$:
+#let v_n_supply = apply-prefix(500, "micro") / calc.pow(10, 80 / 20)
+#assert-aeq(v_n_supply, apply-prefix(50, "nano"))
$
- V_(n,"supply") = qty(500, "uV") / 10^(80/20) = qty(500, "uV") / 10000 = qty(50, "nVpp")
+ V_(n,"supply") = qty(500, "uV") / 10^(80/20) = qty(500, "uV") / 10000 approx qty(50, "nVpp")
$
At audio-band frequencies, power supply noise coupling is negligible when rails
@@ -1449,8 +1484,10 @@ meet specification. However, at the $qty(500, "kHz")$ switching frequency of
PWAM time-domain cores, reduced $upright("PSRR")$ ($qty(30, "dB")$) for
general-purpose parts) increases coupling:
+#let v_n_supply_500khz = apply-prefix(500, "micro") / calc.pow(10, 30 / 20)
+#assert-aeq(v_n_supply_500khz, apply-prefix(15.8, "micro"))
$
- V_(n,"supply",qty(500, "kHz")) = qty(500, "nV") / 10^(30/20) = qty(500, "uV") / 31.6 approx qty(15.8, "uVpp")
+ V_(n,"supply",qty(500, "kHz")) = qty(500, "uVpp") / 10^(30/20) = qty(500, "uV") / 31.6 approx qty(15.8, "uVpp")
$
====== Where it enters <power-supply-noise-coupling-where-it-enters>
@@ -1466,7 +1503,7 @@ $
$qty(5, "mm")$ of every IC supply pin to maintain high-frequency PSRR,
- Use RC or LC power rail filtering for sensitive reference and low-noise input
stages,
-- Select precision op-amps with flat $upright("PSRR")$ characteristics aross the
+- Select precision op-amps with flat $upright("PSRR")$ characteristics across the
signal bandwidth.
===== Radiated and conducted RF interference
@@ -1490,7 +1527,7 @@ an electric field of strength $E$ is:
$ V_("induced") approx E dot l dot eta $
-Where $eta$ is the antenna coupling efficiency ($0.01$ to $0.5$, dependin on
+Where $eta$ is the antenna coupling efficiency ($0.01$ to $0.5$, depending on
frequency and geometry).
The resulting demodulated DC offset error $V_(upright("DC"),"error")$ created by
@@ -1502,24 +1539,30 @@ $ V_(upright("DC"),"error") = alpha dot V_("induced") $
<radiated-and-conducted-rf-interference-typical-magnitude>
For a $l = qty(1, "m")$ unshielded banana patch cable in an
-$E = qty(3, "volt per meter")$ ambient RF field (per EN-6100-4-3
+$E = qty(3, "volt per meter")$ ambient RF field (per EN-61000-4-3
specification limit) with coupling efficiency $eta = 0.1$:
+#let v_induced = 3 * 1 * 0.1
+#assert-aeq(v_induced, apply-prefix(300, "milli"))
$ V_("induced") = 3 times 1 times 0.1 = qty(300, "mVpp") $
Without input filtering, RFI demodulation with $alpha = 0.03$ produces a DC
offset error of:
+#let v_dc_error = 0.03 * apply-prefix(300, "milli")
+#assert-aeq(v_dc_error, apply-prefix(9, "milli"))
$
V_(upright("DC"),"error") = 0.03 times qty(300, "mV") = qty(9, "mV") (qty(450, "ppm"))
$
-This exceeds out total systematic error budget by a factor of $45$.
+This exceeds our total systematic error budget by a factor of $45$.
However, enforcing the mandated $qty(40, "dB")$ RF attenuation above
$qty(1, "MHz")$ at the input jack (a factor of $100$ voltage reduction)
-reduces induced RF to $qty(3, "mVpp")$, yeilding a demodulated DC offset of:
+reduces induced RF to $qty(3, "mVpp")$, yielding a demodulated DC offset of:
+#let v_dc_error_filtered = 0.03 * apply-prefix(3, "milli")
+#assert-aeq(v_dc_error_filtered, apply-prefix(90, "micro"))
$
V_(upright("DC"),"error","filtered") = 0.03 times qty(3, "mV") = qty(90, "uV") (qty(4.5, "ppm"))
$
@@ -1590,6 +1633,8 @@ For intra-chassis module operation, $R_("AGND") lt.eq qty(0.5, "milli ohm")$
per @pcb-ground-planes and @backplane-connector). A
$I_("return") = qty(100, "mA")$ analog return current produces:
+#let v_error_internal = apply-prefix(100, "milli") * apply-prefix(0.5, "milli")
+#assert-aeq(v_error_internal, apply-prefix(50, "micro"))
$
V_("error","internal") = qty(100, "mA") times qty(0.5, "milli ohm") = qty(50, "uV") (qty(2.5, "ppm"))
$
@@ -1604,6 +1649,8 @@ However, utilizing an Interface Module with mandated
$upright("CMRR") gt.eq qty(120, "dB")$ per @module-category-interface-modules
attenuates a $qty(10, "mV")$ external ground offset to:
+#let v_error_external = apply-prefix(10, "milli") / calc.pow(10, 120 / 20)
+#assert-aeq(v_error_external, apply-prefix(10, "nano"))
$
V_("error","external") = qty(10, "mV") / 10^(120/20) = qty(10, "mV") / 10^6 = qty(10, "nV") (qty(0.5, "ppb"))
$
@@ -1679,14 +1726,16 @@ represents the dielectric material relaxation time constants.
) <table-capacitor-dielectric-absorption-noise-typical-magnitude>
For a standard polypropylene capacitor ($qty(0.05, "percent") upright("DA")$)
-step-charged charged at $qty(10, "V")$:
+step-charged at $qty(10, "V")$:
+#let v_da = 10 * 0.0005
+#assert.eq(v_da, apply-prefix(5, "milli"))
$
V_(upright("DA")) = qty(10, "V") times 0.0005 = qty(5, "mV") (qty(250, "ppm"))
$
This single residual term exceeds our $qty(200, "uV")$ systematic error budget
-y a factor of $25$.
+by a factor of $25$.
====== Where it enters <capacitor-dielectric-absorption-noise-where-it-enters>
@@ -1708,7 +1757,7 @@ vulnerable.
Dielectric absorption cannot be cancelled electronically after charge has soaked
into the dielectric. Mitigation relies strictly on component selection and
circuit topology:
-- Mandating Class 1 C0G/NP0 ceramic or PTFE/polysyrene capacitors for all
+- Mandating Class 1 C0G/NP0 ceramic or PTFE/polystyrene capacitors for all
integrator feedback and sample-hold storage paths,
- Prohibiting Class 2 ceramic (X7R, X5R, Y5V) capacitors anywhere in the
precision analog signal path,
@@ -1756,6 +1805,8 @@ For a standard PVC-insulated patch cable,
$k_("tribo") approx qty(50, "milli volt per meter per second")$
experiencing mild flexing ($dv(L, t) = qty(1, "milli meter per second")$):
+#let v_tribo = apply-prefix(50, "milli") * apply-prefix(1, "milli")
+#assert-aeq(v_tribo, apply-prefix(50, "micro"))
$
V_("tribo") = num("50e-3") times num ("1e-3") = qty(50, "uV") (qty(2.5, "ppm"))
$
@@ -1763,6 +1814,8 @@ $
Using a low-noise graphite-coated cable
($k_("tribo") approx qty(1, "milli volt per meter per second")$):
+#let v_tribo = apply-prefix(1, "milli") * apply-prefix(1, "milli")
+#assert-aeq(v_tribo, apply-prefix(1, "micro"))
$
V_("tribo") = num("1e-3") times num("1e-3") = qty(1, "uV") (qty(0.05, "ppm"))
$
@@ -1772,6 +1825,8 @@ For an X7R ceramic capacitor
$qty(1, "g")$ ($qty(0.1, "N")$) acoustic/mechanical vibration spike on a
$qty(100, "nF")$ node:
+#let v_piezo = (apply-prefix(200, "pico") * 0.1) / apply-prefix(100, "nano")
+#assert-aeq(v_piezo, apply-prefix(200, "micro"))
$
V_("piezo") = (num("200e-12") times 0.1) / num("100e-9") = qty(200, "uV") (qty(10, "ppm"))
$
@@ -1796,7 +1851,7 @@ coefficient $d_33$, and inversely with total node capacitance $C$.
<triboelectric-and-piezoelectric-effects-compensation-strategy>
Triboelectric and piezoelectric noise transients are mechanical in origin and
-cannot be filtered by active DC feedback loop. Mitigation requires physical
+cannot be filtered by active DC feedback loops. Mitigation requires physical
prevention:
- Mandating low-noise silicone or graphite-shielded banana patch cables per
@banana-format,
@@ -1811,7 +1866,7 @@ prevention:
====== Physical mechanism <pcb-leakage-currents-physical-mechanism>
-Surface contamination (no-clean flux residue, ionic salts, airbone dust and
+Surface contamination (no-clean flux residue, ionic salts, airborne dust and
condensed moisture) creates parasitic resistive conduction paths across FR-4
dielectric substrate surfaces. At high-impedance signal nodes, these parasitic
paths bleed microamperes to picoamperes of stray current from adjacent power or
@@ -1835,21 +1890,29 @@ $
For a clean, dry FR-4 PCB at $qty(50, "percent") upright("RH")$, surface
resistance between adjacent traces is typically
-$R_("leak") approx qty("1e12", "ohm")$. Under high ambient humidity
+$R_("leak") approx qty(1, "tera ohm")$. Under high ambient humidity
($qty(70, "percent") upright("RH")$) or with uncleaned flux residue, surface
-resistance drops sharply to $R_("leak") approx qty("1e9", "ohm")$.
+resistance drops sharply to $R_("leak") approx qty(1, "giga ohm")$.
For a $V_("trace") = qty(10, "V")$ potential adjacent to a
$Z_("source") = qty(1, "mega ohm")$ input node (white banana jack boundary):
-- On a clean PCB ($R_("leak") = qty("1e12", "ohm")$):
+- On a clean PCB ($R_("leak") = qty(1, "tera ohm")$):
+#let i_leak = 10 / apply-prefix(1, "tera")
+#assert-aeq(i_leak, apply-prefix(10, "pico"))
+#let v_error = i_leak * apply-prefix(1, "mega")
+#assert-aeq(v_error, apply-prefix(10, "micro"))
$
- I_("leak") & = qty(10, "V") / qty("1e12", "ohm") = qty(10, "pA") \
+ I_("leak") & = qty(10, "V") / qty(1, "tera ohm") = qty(10, "pA") \
V_("error") & = qty(10, "pA") times qty(1, "mega ohm") = qty(10, "uV") (qty(0.5, "ppm"))
$
-- On a contaminated PCB ($R_("leak") = qty("1e9", "ohm")$):
+- On a contaminated PCB ($R_("leak") = qty(1, "giga ohm")$):
+#let i_leak = 10 / apply-prefix(1, "giga")
+#assert-aeq(i_leak, apply-prefix(10, "nano"))
+#let v_error = i_leak * apply-prefix(1, "mega")
+#assert-aeq(v_error, apply-prefix(10, "milli"))
$
- I_("leak") & = qty(10, "V") / qty("1e9", "ohm") = qty(10, "nA") \
+ I_("leak") & = qty(10, "V") / qty(1, "giga ohm") = qty(10, "nA") \
V_("error") & = qty(10, "nA") times qty(1, "mega ohm") = qty(10, "mV") (qty(500, "ppm"))
$
@@ -1896,7 +1959,7 @@ Mitigation requires strict physical layout controls:
Inductors, when used in analog circuits (filters, RF chokes, DC-DC converters,
etc.), introduce several non-ideal error mechanisms:
-/ DC resistance ($upright("DCR")$): Finite copper wire resistance cause IR
+/ DC resistance ($upright("DCR")$): Finite copper wire resistance causes IR
voltage drops and thermal power dissipation,
/ Core losses: Ferromagnetic cores exhibit hysteresis and eddy current losses,
acting as a frequency-dependent parallel resistance,
@@ -1963,6 +2026,8 @@ materials.
For a $qty(10, "mH")$ ferrite signal-path inductor with
$qty(5, "ohm") upright("DCR")$ carrying a $qty(1, "mA")$ signal current:
+#let v_drop = 5 * apply-prefix(1, "milli")
+#assert-aeq(v_drop, apply-prefix(5, "milli"))
$ V_"drop" = qty(5, "ohm") times qty(1, "mA") = qty(5, "mV") (qty(250, "ppm")) $
This single $upright("DCR")$ term exceeds out $qty(200, "uV")$ systematic
@@ -1979,7 +2044,7 @@ error budget by a factor of $25$.
====== Scaling law <inductor-losses-and-parasitic-effects-scaling-law>
DC resistance voltage drop scales linearly with signal current $I$ and
-$upright("DCR")$. Core losses scale non-linearly with frequency($f^alpha$) and
+$upright("DCR")$. Core losses scale non-linearly with frequency ($f^alpha$) and
flux density ($B^beta$). Parasitic impedance peak scales inversely with
winding capacitance $C_"parasitic"$.