aboutsummaryrefslogtreecommitdiff
path: root/module-design.typ
diff options
context:
space:
mode:
Diffstat (limited to 'module-design.typ')
-rw-r--r--module-design.typ231
1 files changed, 225 insertions, 6 deletions
diff --git a/module-design.typ b/module-design.typ
index d3cca58..3fb5715 100644
--- a/module-design.typ
+++ b/module-design.typ
@@ -110,7 +110,7 @@ operators.
[$k_B$], [Boltzmann constant], [$num("1.381e-23")$], [$unit("joule per kelvin")$],
[$T$], [Absolute temperature], [N/A], [$unit(K)$],
- [$upright(e)$], [Elementary charge], [$num("1.603e-19")$], [$unit(C)$],
+ [$e$], [Elementary charge], [$num("1.603e-19")$], [$unit(C)$],
),
caption: [Fundamental constants],
) <table-fundamental-constants>
@@ -149,7 +149,7 @@ operators.
[ref], [Reference], [$V_"ref"$],
[pp], [Peak-to-peak], [$V_"pp"$],
[rms], [Root-mean-square], [$V_"rms"$],
- [n, noise], [Noise], [$V_n, upright(e)_n, i_n$],
+ [n, noise], [Noise], [$V_n, e_n, i_n$],
[OS], [Offset], [$V_"OS"$],
[leak], [Leakage], [$I_"leak"$],
[supply], [Power supply], [$V_"supply"$],
@@ -227,15 +227,15 @@ operators.
table(
columns: 3,
table.header([Symbol], [Definition], [Typical unit]),
- [$upright(e)_n$], [Voltage noise spectral density], [$unit("nV")/sqrt(unit("Hz"))$],
+ [$e_n$], [Voltage noise spectral density], [$unit("nV")/sqrt(unit("Hz"))$],
[$upright(i)_n$],
[Current noise spectral density],
[$unit("pA")/sqrt(unit("Hz"))$ or $unit("fA")/sqrt(unit("Hz"))$],
- [$upright(e)_(n,"white")$], [White noise component], [$unit("nV")/sqrt(unit("Hz"))$],
+ [$e_(n,"white")$], [White noise component], [$unit("nV")/sqrt(unit("Hz"))$],
- [$upright(e)_(n,1/f)$], [$1/f$ noise component], [$unit("nV")/sqrt(unit("Hz"))$ at $qty(1, "Hz")$],
+ [$e_(n,1/f)$], [$1/f$ noise component], [$unit("nV")/sqrt(unit("Hz"))$ at $qty(1, "Hz")$],
[$f_c$], [Noise corner frequency ($1/f$ to white)], [$unit("Hz")$],
@@ -1018,7 +1018,7 @@ A $qty(90, "dB") upright("SNR")$ with a $qty(20, "Vpp")$ signal range implies an
$upright("RMS")$ noise floor of:
$
- V_("noise","rms") = qty(20, "V")/10^(90/20) = qty(20, "V")/31623 approx qty(632.455, "uVrms")
+ V_("noise","rms") = qty(20, "V")/10^(90/20) = qty(20, "V")/31623 = qty(632.455, "uVrms")
$
For Gaussian noise, the peak-to-peak value is approximately $6 times$ the
@@ -1246,6 +1246,225 @@ Thermal noise is fundamental and cannot be compensated. Mitigation is through:
For SAME, thermal noise contribution must be budgeted, not eliminated.
+===== Operational amplifier voltage noise <opamp-voltage-noise>
+
+====== Physical mechanism <opamp-voltage-noise-physical-mechanism>
+
+Op-amp input voltage noise arises from two mechanisms:
+/ White noise: Thermal noise in input stage transistors, shot noise from
+ base and gate currents,
+/ $1/f$ noise (flicker noise): Surface defects and charge trapping in
+ semiconductors; dominates at low frequencies.
+
+====== Mathematical model <opamp-voltage-noise-mathematical-model>
+
+Op-amp voltage noise is specified as a spectral density
+$e_n (f)$ in $unit("nV")/sqrt(unit("Hz"))$:
+
+$
+ 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
+power:
+
+$ f_c = (e_(n,1/f) / e_(n,"white"))^2 $
+
+Integrating total $upright("RMS")$ noise over bandwidth $f_L$ to $f_H$ yields:
+
+$
+ V_(n,"rms") = e_(n,"white") sqrt((f_H - f_L) + f_c ln(f_H/f_L))
+$
+
+For DC to $qty(20, "kHz")$ with significant $1/f$ content, the lower bound $f_L$
+cannot be zero (as $ln(f_H/0) arrow infinity$). In practice, $f_L$ is
+established by the total observation time or the low-frequency cutoff of a DC
+servo loop.
+
+====== Typical magnitude <opamp-voltage-noise-typical-magnitude>
+
+#figure(
+ table(
+ columns: 4,
+ table.header([Op-amp class], [$e_(n,"white")$], [$f_c$], [Notes]),
+ [General purpose (TL07x)], [$18 unit("nV")/sqrt(unit("Hz"))$], [$qty(200, "Hz")$], [JFET input],
+
+ [Low noise (OPA211)], [$1.1 unit("nV")/sqrt(unit("Hz"))$], [$qty(10, "Hz")$], [Bipolar input],
+
+ [Precision low noise (LT1028)], [$0.85 unit("nV")/sqrt(unit("Hz"))$], [$qty(3.5, "Hz")$], [Bipolar input],
+
+ [Chopper stabilized (LTC2057)], [$7 unit("nV")/sqrt(unit("Hz"))$], [$lt qty(1, "Hz")$], [No $1/f$ corner],
+ ),
+ caption: [Op-amp voltage noise typical magnitudes],
+) <table-opamp-voltage-noise-typical-magnitude>
+
+For a precision op-amp ($1 unit("nV")/sqrt(unit("Hz")), f_c = qty(10, "Hz")$)
+over $qty(0.001, "Hz")$ to $qty(20, "kHz")$:
+
+$
+ V_(n,"rms") & = sqrt((num("1e-9"))^2 times 20000 + (num("1e-9"))^2 times 10 times 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")
+$
+
+====== Where it enters <opamp-voltage-noise-where-it-enters>
+
+Op-amp voltage noise appears directly at the input and is gained by the
+closed-loop gain:
+
+$ V_(n,"out") = e_n times (1+R_f/R_"in") $
+
+For a unity-gain buffer ($R_f = 0$), $V_(n,"out") = e_n$. For a gain-of-10
+amplifier, output noise is $10 times$ input voltage noise.
+
+====== Compensation strategy <opamp-voltage-noise-compensation-strategy>
+
+- Select low noise bipolar op-amps ($e_n < 2 unit("nV")/sqrt(unit("Hz"))$) for
+ low-source-impedance nodes,
+- Minimize closed-loop gain stages in initial processing stages,
+- Use chopper-stabilized amplifiers where $1/f$ where drift dominates
+ (accepting switching ripple filtering requirements),
+- Implementing active DC servo loops to high-pass filter $1/f$ noise below the
+ signal band.
+
+===== Operational amplifier current noise <opamp-current-noise>
+
+====== Physical mechanism <opamp-current-noise-physical-mechanism>
+
+Op-amp input curent noise arises from shot noise associated with DC input bias
+currents flowing through semiconductor junctions. It is significant primarily in
+bipolar-input op-amps; JFET and CMOS input op-amps have negligible current noise
+due to their extremely low bias currents.
+
+====== Mathematical model <opamp-current-noise-mechanical-model>
+
+Current noise spectral density $i_n$ in $unit("pA")/sqrt(unit("Hz"))$ flows
+through the source impedance $Z_"source"$ seen by the op-amp terminal,
+generating an equivalent input voltage noise:
+
+$ V_(n,i) = i_n times Z_"source" $
+
+Total $upright("RMS")$ voltage noise contribution over bandwidth $upright("BW")$:
+
+$ V_(n,i,"rms") = i_n times Z_"source" times sqrt(upright("BW")) $
+
+====== Typical magnitude <opamp-current-noise-typical-magnitude>
+
+#figure(
+ table(
+ columns: 3,
+ table.header([Op-amp class], [$i_n$], [Notes]),
+ [Bipolar (LT1028)], [$1 unit("pA")/sqrt(unit("Hz"))$], [Low voltage noise, moderate current noise],
+
+ [JFET (OPA627)], [$2.5 unit("fA")/sqrt(unit("Hz"))$], [Negligible],
+ [CMOS (LMC6001)], [$0.13 unit("fA")/sqrt(unit("Hz"))$], [Negligible],
+ ),
+ caption: [Op-amp current noise typical magnitudes],
+) <table-opamp-current-noise-typical-magnitude>
+
+For a bipolar op-amp ($1 unit("pA")/sqrt(unit("Hz"))$) with $qty(10, "kilo ohm")$
+source impedance over $qty(20, "kHz")$:
+
+$
+ 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):
+
+$
+ V_(n,i,"rms") = num("1e-12") times 10^6 times sqrt(20000) approx qty(141, "uVrms")
+$
+
+This demonstrates why bipolar op-amps are fundamentally unsuitable for driving
+high-impedance nodes in the SAME ecosystem.
+
+====== Where it enters <opamp-current-noise-where-it-enters>
+
+Current noise flows through all passive networks connected to the op-amp inputs.
+The total current-noise-induced voltage error is dominated by the highest
+equivalent impedance node connected to either terminal.
+
+====== Compensation strategy <opamp-current-noise-compensation-strategy>
+
+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
+ ($Z_"source" lt qty(1, "kilo ohm")$),
+- Minimizing non-inverting terminal impedance by grouding it directly to AGND
+ where DC offset allows, avoiding extra thermal and current noise
+ contributions.
+
+===== Power supply noise coupling <power-supply-noise-coupling>
+
+====== Physical mechanism <power-supply-noise-coupling-physical-mechanism>
+
+Fluctuations and high-frequency ripple on the power supply rails couple into the
+signal path through finite Power Supply Rejection Ratio ($upright("PSRR")$).
+Because $upright("PSRR")$ degrades with frequency at approximately
+$qty(-20, "decibel per decade")$, high-frequency supply ripple poses a
+significantly greater threat to precision than DC supply variations.
+
+====== Mathematical model <power-supply-noise-coupling-mathematical-model>
+
+The output error voltage $V_(n,"supply")$ resulting from supply ripple
+($V_("ripple")$) is:
+
+$ V_(n,"supply") = V_("ripple") / (upright("PSRR")(f)) $
+
+Where $upright("PSRR")$ expressed in $unit("dB")$ represents the ration of AC
+supply variation to output error variation:
+
+$
+ upright("PSRR")_(unit("dB")) = 20 log_10(V_("supply")/V_("out"))
+$
+
+====== Typical magnitude <power-supply-noise-coupling-typical-magnitude>
+
+#figure(
+ table(
+ columns: 3,
+ table.header([Op-amp], [$upright("PSRR")$ (DC)], [$upright("PSRR")$ ($qty(10, "kHz")$)]),
+ [TL072], [$qty(100, "dB")$], [$qty(80, "dB")$],
+ [OPA211], [$qty(130, "dB")$], [$qty(90, "dB")$],
+ [LT1028], [$qty(120, "dB")$], [$qty(90, "dB")$],
+ ),
+ caption: [Power supply noise coupling typical magnitudes],
+) <table-power-supply-noise-coupling-typical-magnitude>
+
+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")$:
+
+$
+ V_(n,"supply") = qty(500, "uV") / 10^(80/20) = qty(500, "uV") / 10000 = qty(50, "nVpp")
+$
+
+At audio-band frequencies, power supply noise coupling is negligible when rails
+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:
+
+$
+ V_(n,"supply",qty(500, "kHz")) = qty(500, "nV") / 10^(30/20) = qty(500, "uV") / 31.6 approx qty(15.8, "uVpp")
+$
+
+====== Where it enters <power-supply-noise-coupling-where-it-enters>
+
+- Every active op-amp and active element connected to the rails,
+- High-gain stages (where output noise is further amplified by subsequent stages),
+-PWAM modulation cores susceptible to $qty(500, "kHz")$ carrier rail modulation.
+
+====== Compensation strategy <power-supply-noise-coupling-compensation-strategy>
+
+- Enforce power supply cleanliness specification per @power-distribution,
+- Mandate local ceramic decoupling ($qty(100, "nF")$ X7R/NP0) placed within
+ $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
+ signal bandwidth.
+
== Error compensation strategies <error-compensation-strategies>
== Advanced compensation topologies <advanced-compensation-topologies>