Skip to main content

β: This English translation is in beta — the Traditional-Chinese original is the authoritative version.

Lab 11 — Monte Carlo accumulated jitter — RJ is Gaussian, σ grows as √ΔN

Breadcrumb: Simulation labs › Noise & jitter › This page (Monte Carlo accumulated jitter). Upstream: oscillator_phase, lab_03; downstream: lab_12, lab_13.

This lab uses the most direct method — Monte Carlo (large-scale random sampling statistics) — to prove that the random jitter (RJ, Gaussian, unbounded) accumulated by a free-running (unlocked) oscillator has two key properties:

  1. its distribution is Gaussian;
  2. its standard deviation grows as the square root of the accumulated period count: σΔt=σedgeΔN\sigma_{\Delta t}=\sigma_{edge}\sqrt{\Delta N}.

This is the junction between the "statistical (time-domain) view" and the "spectral view", and it is the microscopic origin of [P2] Eq.(8), σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t}.

Physical intuition (conclusion first): every period, noise pushes the oscillator's edge (zero-crossing/transition instant) by an independent small amount, mean 0, standard deviation σedge\sigma_{edge}. Phase has no restoring force (see oscillator_phase), so these small pushes are never pulled back — they simply accumulate. This is a one-dimensional random walk. After ΔN\Delta N steps, a random walk's position still has mean 0, but its variance is ΔN\Delta N times the single-step variance, so the standard deviation grows as ΔN\sqrt{\Delta N}. And a sum of independent small increments tends to Gaussian by the central limit theorem.

1. Learning objectives

  • Use Monte Carlo to directly "see" the Gaussian distribution of accumulated jitter.
  • Verify the random-walk law σΔt=σedgeΔN\sigma_{\Delta t}=\sigma_{edge}\sqrt{\Delta N}: a 4×4\times increase in ΔN\Delta N gives only a 2×2\times increase in σ\sigma.
  • Link this time-domain result to [P2] Eq.(8), σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t} (κ\kappa a proportionality constant).
  • Understand why phase/jitter accumulates — because phase has no restoring force (unlike amplitude).

2. Mathematical model

Per-period increment. The edge-timing error of the kk-th period is an i.i.d. Gaussian increment:

δkN(0,  σedge2).\delta_k\sim\mathcal{N}(0,\;\sigma_{edge}^2).

Accumulated jitter = sum of increments (random walk). After accumulating ΔN\Delta N periods, the timing error relative to the ideal edge is:

ΔtΔN=k=1ΔNδk.\Delta t_{\Delta N}=\sum_{k=1}^{\Delta N}\delta_k .

Statistical properties (step by step). The increments are independent with zero mean:

E[ΔtΔN]=k=1ΔNE[δk]=0,Var[ΔtΔN]=k=1ΔNVar[δk]=ΔNσedge2,σΔt=Var=σedgeΔN.\begin{aligned} \mathbb{E}[\Delta t_{\Delta N}]&=\sum_{k=1}^{\Delta N}\mathbb{E}[\delta_k]=0,\\ \operatorname{Var}[\Delta t_{\Delta N}]&=\sum_{k=1}^{\Delta N}\operatorname{Var}[\delta_k]=\Delta N\cdot\sigma_{edge}^2,\\ \sigma_{\Delta t}&=\sqrt{\operatorname{Var}}=\sigma_{edge}\sqrt{\Delta N}. \end{aligned}
  • Why variances add: the variance of a sum of independent random variables equals the sum of the individual variances (zero covariance). This is the entire origin of the "ΔN\sqrt{\Delta N}".
  • Why it's Gaussian: a sum of ΔN\Delta N independent increments tends to Gaussian by the central limit theorem (and since each increment is already Gaussian, the sum is exactly Gaussian).
  • Dimension check: σedge\sigma_{edge} is in s, ΔN\sqrt{\Delta N} is dimensionless (ΔN\Delta N is a period count), so σΔt\sigma_{\Delta t} is in s ✓.

Linking to [P2] Eq.(8). Convert the accumulated period count into accumulated time Δt=ΔNT=ΔN/f0\Delta t=\Delta N\cdot T=\Delta N/f_0:

σΔt=σedgeΔN=σedgef0Δt=(σedgef0)κΔt,\sigma_{\Delta t}=\sigma_{edge}\sqrt{\Delta N}=\sigma_{edge}\sqrt{f_0\,\Delta t}=\underbrace{\big(\sigma_{edge}\sqrt{f_0}\big)}_{\kappa}\sqrt{\Delta t},

i.e., [P2] Eq.(8), p.792, σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t}, with κ=σedgef0\kappa=\sigma_{edge}\sqrt{f_0}.

  • Dimension check (κ\kappa): [s][Hz]1/2=[s][s1/2]=[s1/2][\text{s}]\cdot[\text{Hz}]^{1/2}=[\text{s}]\cdot[\text{s}^{-1/2}]=[\text{s}^{1/2}], consistent with the unit s\sqrt{s} given for κ\kappa in the canonical symbol table ✓.

3. Block diagram

4. Core Python code

Verbatim excerpt from main() in simulations/lab_11_monte_carlo_jitter.py: for each accumulation length lag (=ΔN\Delta N), draw n_trials × lag independent Gaussian increments, sum along the period axis to get the accumulated error acc, measure its std, then overlay the theoretical Gaussian.

f0 = 5e9
sigma_edge = 50e-15 # 50 fs per period
n_trials = 200000
lags = [25, 100, 400] # number of periods accumulated

for lag, c in zip(lags, colors):
incr = sigma_edge * RNG.standard_normal((n_trials, lag))
acc = incr.sum(axis=1) # accumulated timing error after `lag` periods
sigma_meas = np.std(acc)
sigma_theory = sigma_edge * np.sqrt(lag)
# histogram (in fs)
ax.hist(acc / 1e-15, bins=120, density=True, alpha=0.35, color=c,
label=fr"$\Delta N$={lag}: 量得 $\sigma$={sigma_meas/1e-15:.0f} fs "
fr"(理論 {sigma_theory/1e-15:.0f} fs)")
# gaussian overlay
xx = np.linspace(acc.min(), acc.max(), 300)
g = np.exp(-xx ** 2 / (2 * sigma_theory ** 2)) / (sigma_theory * np.sqrt(2 * np.pi))
ax.plot(xx / 1e-15, g * 1e-15, color=c, lw=1.6)
  • incr.sum(axis=1) sums lag independent increments — a one-dimensional random walk.
  • sigma_meas = np.std(acc) (measured) converges digit by digit to sigma_theory = sigma_edge*np.sqrt(lag) (theoretical), because n_trials=200000 is large enough.
  • The Gaussian overlay g uses the theoretical σ\sigma; its match to the histogram is the proof that the distribution is Gaussian.

Expected numbers (σedge=50\sigma_{edge}=50 fs): ΔN=25250\Delta N=25\to250 fs, ΔN=100500\Delta N=100\to500 fs, ΔN=4001000\Delta N=400\to1000 fs (each ×4\times4 step in ΔN\Delta N gives ×2\times2 in σ\sigma).

5. Full script path

simulations/lab_11_monte_carlo_jitter.py (dependency: savefig from simulations/common/plot_utils.py. Everything else uses numpy/matplotlib.)

Run with: python scripts/run_all_sims.py.

6. Parameter table

ParameterVariableValueNotes
Oscillation frequencyf05×1095\times10^{9} Hz5 GHz (used for the ΔNΔt\Delta N\leftrightarrow\Delta t conversion)
Per-period jittersigma_edge50×101550\times10^{-15} srms increment per edge per period (50 fs)
Monte Carlo trialsn_trials200000200000trials per ΔN\Delta N
Accumulated period countslags{25,100,400}\{25,100,400\}ΔN\Delta N, in a ×4\times4 geometric progression
Histogram bins120120density histogram
Random seedRNGdefault_rng(11)reproducible results

7. Units table

QuantitySymbolUnitValue in this lab
Per-period incrementδk, σedge\delta_k,\ \sigma_{edge}sσedge=50\sigma_{edge}=50 fs
Accumulated period countΔN\Delta N— (count)25 / 100 / 400
Accumulated jitterΔt, σΔt\Delta t,\ \sigma_{\Delta t}s250 / 500 / 1000 fs
Accumulated timeΔt=ΔN/f0\Delta t=\Delta N/f_0stime spanned by ΔN\Delta N periods
Proportionality constantκ=σedgef0\kappa=\sigma_{edge}\sqrt{f_0}s\sqrt{s}3.5×1012s\approx3.5\times10^{-12}\,\sqrt{s}
Probability density1/s (1/fs on the plot)Gaussian curve

8. Simulation plot

Histograms of accumulated timing error for three ΔN values (25/100/400), all Gaussian, with measured σ matching theoretical σ_edge·√ΔN; x-axis is accumulated error in fs, y-axis is probability density

9. How to read the plot

  • Three bell curves (blue/orange/red for ΔN=25/100/400\Delta N=25/100/400): the histogram (translucent) and the theoretical Gaussian curve (solid line) overlap almost perfectly — this is direct evidence that "RJ is Gaussian".
  • Wider means longer accumulation: as ΔN\Delta N grows, the bell gets shorter and wider. Note the width (σ\sigma) grows only as ΔN\sqrt{\Delta N}: from 2510025\to100 (×4\times4), σ\sigma goes from 250 fs to 500 fs (only ×2\times2); from 100400100\to400 (another ×4\times4), 500 fs becomes 1000 fs (another ×2\times2).
  • "Measured σ vs. theoretical" in the legend: the two numbers are nearly identical, quantitatively verifying σΔt=σedgeΔN\sigma_{\Delta t}=\sigma_{edge}\sqrt{\Delta N}.
  • How to use it: this explains why a free-running oscillator's long-term stability cannot be described by "per-period jitter" alone — jitter grows with observation time. Stopping the accumulation requires a PLL/CDR to lock the phase back to a reference (see lab_13).

10. Corresponding paper equations/figures

  • Core correspondence: [P2] A. Hajimiri, S. Limotyrakis, and T. H. Lee, "Jitter and Phase Noise in Ring Oscillators," IEEE JSSC, 34(6), 1999, Eq.(8), p.792: σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t}. This lab proves its microscopic origin is a random walk of per-edge Gaussian increments, and derives κ=σedgef0\kappa=\sigma_{edge}\sqrt{f_0}.
  • Spec Section 10.2, "period / cycle-to-cycle jitter kernels": accumulated jitter "has no differencing (low-frequency dominated)", corresponding to the pure accumulation here (no high-pass differencing kernel).
  • Phase has no restoring force (hence accumulates): [P1]'s LTV phase model (canonical formula 11), consistent with the geometry in oscillator_phase.
  • Corresponds to site figure monte_carlo_jitter_histogram.png; echoes the time-domain accumulation plot ring_oscillator_timing_noise_accumulation.png in lab_03.

11. Limitations and approximations

  • This is a pedagogical toy model, not transistor-level: we directly assume an independent Gaussian increment σedge\sigma_{edge} per period, without deriving its numerical value from ISF + device noise (that requires [P2]'s κ\kappa/FOM formulas, canonical formulas 22–23, verified verbatim against [P2] Eq.(8)/(12) p.792-793, Eq.(16) p.794, Eq.(23) p.796).
  • Pure RJ, independent increments: assumes period-to-period noise is uncorrelated (white at the period scale). Real 1/f1/f (flicker) noise introduces correlated increments, causing long-term accumulation to deviate from pure ΔN\sqrt{\Delta N} (close-in 1/f31/f^3, see lab_07).
  • Only covers accumulated/long-term jitter: period jitter (single-period deviation) and cycle-to-cycle jitter (adjacent difference) are the first/second-order differences of phase and are outside the scope of this plot (spec Section 10.2).
  • Gaussian, unbounded: RJ is described by σ\sigma with tails extending to infinity — this is exactly why SerDes BER is always >0>0 (see lab_12). Deterministic jitter (DJ, bounded) is outside this model.
  • Finite-sample error: the small difference between sigma_meas and sigma_theory comes from finite n_trials; increasing it improves convergence.

Key takeaways

  • Accumulated jitter is a random walk of per-edge Gaussian increments: mean 0, variance ΔN\propto\Delta N, Gaussian distribution.
  • σΔt=σedgeΔN\sigma_{\Delta t}=\sigma_{edge}\sqrt{\Delta N}: a 4×4\times increase in ΔN\Delta N gives only a 2×2\times increase in σ\sigma.
  • Converting to time gives [P2] Eq.(8), σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t}, with κ=σedgef0\kappa=\sigma_{edge}\sqrt{f_0}.
  • No restoring force on phase → jitter accumulates → poor free-running long-term stability → needs a PLL/CDR to lock it back.

Further reading