Skip to main content

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

Worked Examples

This page is the hands-on worked-example bank for ISF / phase noise / jitter. The theory pages show where the formulas come from; here you learn to plug in the numbers, compute all the way through, check the units, and verify with one line of Python. All formulas are carried over verbatim from [the AUTHORING_SPEC authoritative formula table]; numbers follow numerical_feeling and the spec Section 8 canonical values (qmax=1q_{max}=1 pC, Γrms=0.5\Gamma_{rms}=0.5, f0=5f_0=5 GHz, L(1MHz)=100\mathcal{L}(1\text{MHz})=-100 dBc/Hz).

How to use this page: cover the step-by-step solution, work each problem yourself, then check. The core skill of an analog designer is order-of-magnitude estimation at the whiteboard — seeing "100-100 dBc/Hz @ 1 MHz, 5 GHz" you should call out "a few hundred fs of jitter" within 30 seconds. The one-line Python at the end of each problem is only for checking, never a substitute for the hand calculation.

Four levels:

  • (A) Basic conversions: rad ↔ fs, dBc ↔ linear, phase PSD ↔ L\mathcal{L}. Drill until they become reflexes.
  • (B) ISF → phase noise: Eq.(21)/(23)/(24) algebra — turn Γrms,c0,qmax\Gamma_{rms},c_0,q_{max} into dBc/Hz.
  • (C) jitter integration: integrate L(f)\mathcal{L}(f) to get σt\sigma_t; the high-pass kernel of period jitter.
  • (D) design back-calculation: how large a qmax/Γrmsq_{max}/\Gamma_{rms} for 120-120 dBc/Hz; how to choose the ring stage count NN.

Every problem follows a fixed format: Problem → step-by-step solution (with units) → Result → dimension check → one-line Python verification. All Python calls real functions from simulations/common/ (see the spec Section 5 API) and runs as-is.


Level A: Basic conversions

This level has only two core relations — memorize them cold:

Δt=Δϕ2πf0,Llinear=10LdBc/Hz/10,Sϕ=2Llinear.\Delta t=\frac{\Delta\phi}{2\pi f_0},\qquad \mathcal{L}_{\text{linear}}=10^{\mathcal{L}_{\text{dBc/Hz}}/10},\qquad S_\phi=2\,\mathcal{L}_{\text{linear}} .

Example A1: phase → time (how many fs is 1 mrad at 5 GHz?)

Problem: f0=5f_0=5 GHz, Δϕ=1\Delta\phi=1 mrad; find the timing error Δt\Delta t.

Step-by-step solution

Step 1: write the phase→time conversion (spec formula 17, Δt=Δϕ/(2πf0)\Delta t=\Delta\phi/(2\pi f_0)). The unit of 2πf02\pi f_0 is rad/s (angular frequency) and Δϕ\Delta\phi is rad; the quotient is seconds:

Δt=Δϕ2πf0=1×103 rad2π×5×109 rad/s.\Delta t=\frac{\Delta\phi}{2\pi f_0}=\frac{1\times10^{-3}\ \text{rad}}{2\pi\times5\times10^{9}\ \text{rad/s}} .

Step 2: evaluate the denominator: 2π×5×109=3.1416×10102\pi\times5\times10^{9}=3.1416\times10^{10} rad/s.

Δt=1033.1416×1010 s=3.183×1014 s=31.8 fs.\Delta t=\frac{10^{-3}}{3.1416\times10^{10}}\ \text{s}=3.183\times10^{-14}\ \text{s}=31.8\ \text{fs} .

Result: Δt31.8\Delta t\approx31.8 fs.

Dimension check: [rad]/[rad/s]=[s][\text{rad}]/[\text{rad/s}]=[\text{s}] ✓. Intuition anchor: at 5 GHz, "1 mrad ≈ 32 fs"; conversely "1 rad ≈ 31.8 ps" (the very same 31.8331.83 digits, offset by 10310^3). The period is T=200T=200 ps, so 1 mrad is about 1.6×1041.6\times10^{-4} of a period.

Python verification

from simulations.common.noise_utils import phase_to_time_error
print(phase_to_time_error(1e-3, 5e9) * 1e15, "fs") # -> 31.83 fs

Example A2: dBc/Hz → linear (how much is −100 dBc/Hz?)

Problem: L=100\mathcal{L}=-100 dBc/Hz. Convert to linear (power ratio relative to the carrier, per Hz), then recover the phase PSD SϕS_\phi.

Step-by-step solution

Step 1: dBc/Hz is the "decibels relative to carrier" unit of 10log10()10\log_{10}(\cdot); invert by dividing by 10 and raising 10 to that power:

Llinear=10L/10=10100/10=1010 [1/Hz].\mathcal{L}_{\text{linear}}=10^{\mathcal{L}/10}=10^{-100/10}=10^{-10}\ [\text{1/Hz}] .

Step 2: under the small-angle single-tone PM approximation, L(f)12Sϕ(f)\mathcal{L}(f)\approx\tfrac12 S_\phi(f) (spec formula 16 and the Section 10.2 "L12SϕL\approx\tfrac12 S_\phi" derivation), so back out the phase PSD:

Sϕ=2Llinear=2×1010 rad2/Hz.S_\phi=2\,\mathcal{L}_{\text{linear}}=2\times10^{-10}\ \text{rad}^2/\text{Hz} .

Result: Llinear=1010\mathcal{L}_{\text{linear}}=10^{-10}/Hz, Sϕ=2×1010S_\phi=2\times10^{-10} rad²/Hz.

Dimension check: dBc/Hz is a dimensionless power ratio per Hz; Llinear\mathcal{L}_{\text{linear}} is likewise 1/Hz; after the ×2 it reads as a phase PSD in rad²/Hz (rad² is the unit of phase variance; integrating the variance density over ff gives rad²) ✓. Mnemonic: every 10-10 dB = one decade less in linear power; every 20-20 dB = one decade less in voltage/phase amplitude.

Python verification

import numpy as np
from simulations.common.noise_utils import phase_psd_to_l_dbc_per_hz
s_phi = 2 * 10**(-100/10)
print(s_phi, "rad^2/Hz") # -> 2e-10
print(phase_psd_to_l_dbc_per_hz(s_phi), "dBc/Hz") # -> -100.0 (round trip consistent)

Example A3: injected charge → phase step → time (a 1 fC kick)

Problem (canonical Example A): qmax=1q_{max}=1 pC, Δq=1\Delta q=1 fC, Γ=0.5\Gamma=0.5, f0=5f_0=5 GHz. Find the phase step Δϕ\Delta\phi and timing error Δt\Delta t caused by a single impulse.

Step-by-step solution

Step 1: use the operational ISF definition (spec formula 5, Δϕ=Γ(ω0τ)Δq/qmax\Delta\phi=\Gamma(\omega_0\tau)\,\Delta q/q_{max}). Γ\Gamma is dimensionless and Δq/qmax\Delta q/q_{max} is dimensionless, so Δϕ\Delta\phi is a pure number (rad):

Δϕ=ΓΔqqmax=0.5×(1×1015 C)1×1012 C=5×104 rad.\Delta\phi=\frac{\Gamma\,\Delta q}{q_{max}}=\frac{0.5\times(1\times10^{-15}\ \text{C})}{1\times10^{-12}\ \text{C}}=5\times10^{-4}\ \text{rad} .

In degrees: 5×104×180π0.02865\times10^{-4}\times\dfrac{180}{\pi}\approx0.0286^\circ.

Step 2: convert to time using the A1 conversion (f0=5f_0=5 GHz):

Δt=5×1042π×5×109 s1.59×1014 s=15.9 fs.\Delta t=\frac{5\times10^{-4}}{2\pi\times5\times10^{9}}\ \text{s}\approx1.59\times10^{-14}\ \text{s}=15.9\ \text{fs} .

Result: Δϕ=5×104\Delta\phi=5\times10^{-4} rad (0.02860.0286^\circ), Δt15.9\Delta t\approx15.9 fs.

Dimension check: Δϕ\Delta\phi: [C]/[C]=[\text{C}]/[\text{C}]= dimensionless ✓; Δt\Delta t: [rad]/[rad/s]=[s][\text{rad}]/[\text{rad/s}]=[\text{s}] ✓. Intuition: 1 fC ≈ 6240 electrons; even at the most sensitive phase it kicks out only ~16 fs. One kick is tiny, but noise kicks continuously and the phase integrator accumulates it (see convolution_derivation).

Python verification

from simulations.common.isf_utils import impulse_to_phase_step
from simulations.common.noise_utils import phase_to_time_error
dphi = impulse_to_phase_step(delta_q=1e-15, gamma_value=0.5, qmax=1e-12)
print(dphi, "rad ->", phase_to_time_error(dphi, 5e9)*1e15, "fs") # 0.0005 rad -> 15.92 fs

Example A4: phase sensitivity varies with injection phase (a taste of LTV)

Problem: an ideal LC oscillator has ISF Γ(θ)=sinθ\Gamma(\theta)=-\sin\theta. With the same Δq=1\Delta q=1 fC and qmax=1q_{max}=1 pC, inject at the zero crossing (θ=π/2\theta=\pi/2, maximum waveform slope) and at the peak (θ=0\theta=0, waveform top), and find Δϕ\Delta\phi in each case.

Step-by-step solution

Step 1: read off the ISF at both points. Note the phase convention here: with VcosθV\propto\cos\theta the peak is at θ=0\theta=0 and the (falling-edge) zero crossing at θ=π/2\theta=\pi/2; the ideal LC has Γ=sinθ\Gamma=-\sin\theta:

Γ(θ=π/2)=sinπ2=1,Γ(θ=0)=sin0=0.\Gamma(\theta=\pi/2)=-\sin\tfrac{\pi}{2}=-1,\qquad \Gamma(\theta=0)=-\sin 0=0 .

Step 2: substitute each into Δϕ=ΓΔq/qmax\Delta\phi=\Gamma\,\Delta q/q_{max} (Δq/qmax=1015/1012=103\Delta q/q_{max}=10^{-15}/10^{-12}=10^{-3}):

ΔϕZC=(1)(103)=1×103 rad,Δϕpeak=(0)(103)=0 rad.\Delta\phi_{\text{ZC}}=(-1)(10^{-3})=-1\times10^{-3}\ \text{rad},\qquad \Delta\phi_{\text{peak}}=(0)(10^{-3})=0\ \text{rad}.

Result: injection at the zero crossing → 1-1 mrad (maximum phase effect); injection at the peak → 0 rad (pure amplitude change, no phase change).

Dimension check: both are [][C]/[C]=[\,]\cdot[\text{C}]/[\text{C}]= rad ✓. This is the essence of LTV (linear time-variant) behavior: the effect of the same impulse depends on which phase of the waveform it kicks. Γ=0\Gamma=0 at the peak because the perturbation there is purely radial (amplitude) with no tangential (phase) component, and amplitude is pulled back by the restoring mechanism. See impulse_to_phase_shift.

Python verification

import numpy as np
from simulations.common.isf_utils import gamma_lc_ideal, impulse_to_phase_step
for name, th in [("ZC", np.pi/2), ("peak", 0.0)]:
g = gamma_lc_ideal(th) # = -sin(theta)
print(name, impulse_to_phase_step(1e-15, g, 1e-12), "rad")
# ZC -0.001 rad ; peak 0.0 rad

Level B: ISF → phase noise (algebra)

This level repeatedly uses three signature formulas (all [P1], carried verbatim from spec Section 3):

  • White noise 1/f² [P1] Eq.(21), p.185: L=10log10 ⁣(Γrms2qmax2in2/Δf4Δω2)\mathcal{L}=10\log_{10}\!\big(\frac{\Gamma_{rms}^2}{q_{max}^2}\cdot\frac{\overline{i_n^2}/\Delta f}{4\Delta\omega^2}\big)
  • flicker 1/f³ [P1] Eq.(23), p.185: contains the c02c_0^2 and ω1/f/Δω\omega_{1/f}/\Delta\omega factors.
  • 1/f³ corner [P1] Eq.(24), p.185: Δω1/f3=ω1/fc02/(2Γrms2)\Delta\omega_{1/f^3}=\omega_{1/f}\,c_0^2/(2\Gamma_{rms}^2).

Reminder: the denominator of Eq.(21) is 4Δω24\Delta\omega^2 (SSB bookkeeping convention). A clean time-domain derivation gives 2Δω22\Delta\omega^2; the factor of 2 is a well-known minor dispute in the literature and does not affect the Γrms2/qmax2\Gamma_{rms}^2/q_{max}^2 scaling or the 20-20 dB/dec slope. See white_noise_to_phase_noise. This page uses the 4Δω24\Delta\omega^2 of the original [P1] expression throughout.

Example B1: white noise → L (canonical Example B, computed to the last digit)

Problem: f0=5f_0=5 GHz, Δf=1\Delta f=1 MHz offset, qmax=1q_{max}=1 pC, Γrms=0.5\Gamma_{rms}=0.5, white noise in2/Δf=Si=1024\overline{i_n^2}/\Delta f=S_i=10^{-24} A²/Hz. Use Eq.(21) to find L(1MHz)\mathcal{L}(1\text{MHz}).

Step-by-step solution

Step 1: convert the offset frequency to angular frequency: Δω=2πΔf=2π×106=6.283×106\Delta\omega=2\pi\Delta f=2\pi\times10^{6}=6.283\times10^{6} rad/s, Δω2=3.948×1013 (rad/s)2\Delta\omega^2=3.948\times10^{13}\ (\text{rad/s})^2.

Step 2: evaluate the bracket of Eq.(21) (separate the dimensionless part from the part carrying units first):

Γrms2qmax2=0.25(1012)2=0.25×1024=2.5×1023 C2.\frac{\Gamma_{rms}^2}{q_{max}^2}=\frac{0.25}{(10^{-12})^2}=0.25\times10^{24}=2.5\times10^{23}\ \text{C}^{-2} . Si4Δω2=10244×3.948×1013=10241.579×1014=6.333×1039 A2/Hzs2.\frac{S_i}{4\Delta\omega^2}=\frac{10^{-24}}{4\times3.948\times10^{13}}=\frac{10^{-24}}{1.579\times10^{14}}=6.333\times10^{-39}\ \text{A}^2/\text{Hz}\cdot\text{s}^2 .

Step 3: multiply (units checked below):

2.5×1023×6.333×1039=1.583×1015.2.5\times10^{23}\times6.333\times10^{-39}=1.583\times10^{-15} .

Step 4: take 10log1010\log_{10}:

L=10log10(1.583×1015)=148.0 dBc/Hz.\mathcal{L}=10\log_{10}(1.583\times10^{-15})=-148.0\ \text{dBc/Hz} .

Result: L(1MHz)=148.0\mathcal{L}(1\text{MHz})=-148.0 dBc/Hz.

Dimension check: the bracket must be dimensionless (argument of a log). [C2][A2Hz1s2][\text{C}^{-2}]\cdot[\text{A}^2\,\text{Hz}^{-1}\,\text{s}^2]; with A=C/s\text{A}=\text{C/s}A2=C2/s2\text{A}^2=\text{C}^2/\text{s}^2, Hz1=s\text{Hz}^{-1}=\text{s}, collect C2(C2/s2)ss2=C2C2s2s3=s\text{C}^{-2}\cdot(\text{C}^2/\text{s}^2)\cdot\text{s}\cdot\text{s}^2=\text{C}^{-2}\cdot\text{C}^2\cdot\text{s}^{-2}\cdot\text{s}^{3}=\text{s}. One 1/s1/\text{s} is still missing — it comes from the per-Hz nature of a PSD: the result is "relative power per Hz", so the argument is really 1/Hz, and after the log it is dBc/Hz ✓. (This is exactly why the units are easy to misread; just remember "the final answer is dBc/Hz".)

Intuition: this is the floor set by a single ideal white-noise source. Real circuits have multiple noise sources, cyclostationarity, and flicker; measurements come in tens of dB higher.

Python verification

import numpy as np
Grms, qmax, Si = 0.5, 1e-12, 1e-24
dw = 2*np.pi*1e6
L = 10*np.log10((Grms**2/qmax**2) * (Si/(4*dw**2)))
print(round(L, 2), "dBc/Hz") # -> -148.0

Example B2: use Parseval to get Γrms\Gamma_{rms} from cnc_n, then compute L

Problem: the ideal-LC ISF is purely Γ(θ)=sinθ\Gamma(\theta)=-\sin\theta, i.e. only the first harmonic c1=1c_1=1 and all other cn=0c_n=0. (a) Use Parseval (Eq.(20)) to find Γrms\Gamma_{rms}; (b) with qmax=1q_{max}=1 pC, Si=1024S_i=10^{-24}, Δf=1\Delta f=1 MHz, find L.

Step-by-step solution

Step 1 (a): Parseval ([P1] Eq.(20)): ncn2=2Γrms2\sum_n c_n^2=2\Gamma_{rms}^2. Here ncn2=c12=1\sum_n c_n^2=c_1^2=1, so

2Γrms2=1  Γrms=120.707.2\Gamma_{rms}^2=1\ \Rightarrow\ \Gamma_{rms}=\frac{1}{\sqrt2}\approx0.707 .

(Direct check: Γrms2=12π02πsin2θdθ=12\Gamma_{rms}^2=\frac{1}{2\pi}\int_0^{2\pi}\sin^2\theta\,d\theta=\tfrac12, which also gives Γrms=1/2\Gamma_{rms}=1/\sqrt2 ✓.)

Step 2 (b): substitute into Eq.(21) with Γrms2=0.5\Gamma_{rms}^2=0.5:

L=10log10 ⁣(0.5(1012)210244×3.948×1013)=10log10(3.166×1015)=145.0 dBc/Hz.\mathcal{L}=10\log_{10}\!\left(\frac{0.5}{(10^{-12})^2}\cdot\frac{10^{-24}}{4\times3.948\times10^{13}}\right) =10\log_{10}(3.166\times10^{-15})=-145.0\ \text{dBc/Hz} .

Result: Γrms=0.707\Gamma_{rms}=0.707; L(1MHz)=145.0\mathcal{L}(1\text{MHz})=-145.0 dBc/Hz.

Dimension check: Γrms\Gamma_{rms} is dimensionless (the cnc_n are dimensionless) ✓; L same as Example B1, dBc/Hz ✓. Note Γrms=0.707\Gamma_{rms}=0.707 is larger than the canonical 0.50.5, so L comes out about 33 dB above B1 (10log10(0.5/0.25)=310\log_{10}(0.5/0.25)=3 dB) — consistent.

Python verification

import numpy as np
from simulations.common.isf_utils import gamma_lc_ideal, gamma_rms
theta = np.linspace(0, 2*np.pi, 100000, endpoint=False)
Grms = gamma_rms(theta, gamma_lc_ideal(theta))
print("Grms =", round(Grms, 4)) # -> 0.7071
L = 10*np.log10((Grms**2/(1e-12)**2)*(1e-24/(4*(2*np.pi*1e6)**2)))
print(round(L, 2), "dBc/Hz") # -> -145.0

Example B3: symmetry and 1/f³ (the role of c0c_0)

Problem: two oscillators with identical white noise and qmaxq_{max}, ω1/f=2π×1\omega_{1/f}=2\pi\times1 MHz. A has a fully symmetric waveform (c0=0c_0=0); B is slightly asymmetric (c0=0.2c_0=0.2, c1=1c_1=1). Which one shows close-in 1/f³ upconversion? What is each 1/f³ contribution at Δf=10\Delta f=10 kHz?

Step-by-step solution

Step 1: look at Eq.(23) — phase noise in the 1/f³ region is proportional to c02c_0^2.

L1/f3=10log10 ⁣(c02qmax2Si8Δω2ω1/fΔω).\mathcal{L}_{1/f^3}=10\log_{10}\!\left(\frac{c_0^2}{q_{max}^2}\cdot\frac{S_i}{8\Delta\omega^2}\cdot\frac{\omega_{1/f}}{\Delta\omega}\right) .

Step 2, for A: c0=0c_0=0\Rightarrow the bracket =0L1/f3=0\Rightarrow \mathcal{L}_{1/f^3}\to-\infty dBc/Hz (no flicker upconversion; the 1/f³ region is fully suppressed). In practice it never truly reaches -\infty (other mechanisms take over), but it can sit far below B.

Step 3, for B: c0=0.2c_0=0.2, a finite value. Use Eq.(24) to compare the two 1/f³ corners:

Δω1/f3=ω1/fc022Γrms2.\Delta\omega_{1/f^3}=\omega_{1/f}\cdot\frac{c_0^2}{2\Gamma_{rms}^2} .

For B, cn2=c02+c12=0.04+1=1.04Γrms2=0.52\sum c_n^2=c_0^2+c_1^2=0.04+1=1.04\Rightarrow\Gamma_{rms}^2=0.52, so

Δω1/f3,B=ω1/f0.042×0.52=ω1/f×0.0385.\Delta\omega_{1/f^3,B}=\omega_{1/f}\cdot\frac{0.04}{2\times0.52}=\omega_{1/f}\times0.0385 .

That is, B's 1/f³ corner sits at 0.0385ω1/f=2π×38.5\approx0.0385\,\omega_{1/f}=2\pi\times38.5 kHz. For A, the corner 0\to0.

Result: A (symmetric, c0=0c_0=0) has no 1/f³ upconversion; B (c0=0.2c_0=0.2) does, with a corner near 38.538.5 kHz. Design rule: suppress c0c_0 through waveform symmetry and the 1/f³ corner can be pushed far below the device ω1/f\omega_{1/f}.

Dimension check: in Eq.(24), c02/Γrms2c_0^2/\Gamma_{rms}^2 is dimensionless; multiplying by ω1/f\omega_{1/f} (rad/s) gives rad/s ✓.

Python verification

import numpy as np
w_1f = 2*np.pi*1e6
for name, c0, c1 in [("A", 0.0, 1.0), ("B", 0.2, 1.0)]:
Grms2 = 0.5*(c0**2 + c1**2) # Parseval: sum cn^2 = 2 Grms^2
corner = w_1f * c0**2/(2*Grms2)
print(name, "1/f^3 corner =", corner/(2*np.pi)*1e-3, "kHz")
# A 0.0 kHz ; B 38.46 kHz

Example B4: white-noise floor and the −20 dB/dec slope vs offset

Problem: reuse the B1 oscillator (L(1MHz)=148\mathcal{L}(1\text{MHz})=-148 dBc/Hz, 1/f² region). What is L at Δf=10\Delta f=10 MHz? (I.e. push the offset out by 10×.)

Step-by-step solution

Step 1: in Eq.(21), L1/Δω2\mathcal{L}\propto1/\Delta\omega^2; after the log this is 20log10Δω+-20\log_{10}\Delta\omega+const, i.e. every 10× in offset drops L by 20 dB (20-20 dB/decade).

Step 2: Δf\Delta f goes from 1 MHz → 10 MHz (×10):

L(10MHz)=L(1MHz)20log10(10)=14820=168 dBc/Hz.\mathcal{L}(10\text{MHz})=\mathcal{L}(1\text{MHz})-20\log_{10}(10)=-148-20=-168\ \text{dBc/Hz} .

Result: L(10MHz)=168\mathcal{L}(10\text{MHz})=-168 dBc/Hz.

Dimension check: the argument of 20log10(Δf2/Δf1)-20\log_{10}(\Delta f_2/\Delta f_1) is dimensionless (a frequency ratio) ✓; the result is a dB difference, and adding it to dBc/Hz still gives dBc/Hz ✓. Intuition: "20 dB per decade" in the 1/f² region is the most-used visual slope on a phase-noise plot; compare 30-30 dB/dec in the 1/f³ region.

Python verification

import numpy as np
Grms, qmax, Si = 0.5, 1e-12, 1e-24
def L(df): return 10*np.log10((Grms**2/qmax**2)*(Si/(4*(2*np.pi*df)**2)))
print(round(L(1e6),2), round(L(10e6),2), "dBc/Hz",
"slope =", round(L(10e6)-L(1e6),1), "dB/dec") # -148.0 -168.0 ; -20.0

Level C: jitter integration

Core idea: phase noise is a frequency-domain density, jitter is a time-domain rms; they connect via "integrate + square root + ÷(2πf0)\div(2\pi f_0)" (spec formulas 18, 19):

σϕ2=f1f2Sϕ(f)df,σt=σϕ2πf0.\sigma_\phi^2=\int_{f_1}^{f_2}S_\phi(f)\,df,\qquad \sigma_t=\frac{\sigma_\phi}{2\pi f_0} .

Example C1: L(f) → rms jitter (canonical Example C, 1/f² integration)

Problem: L(1MHz)=100\mathcal{L}(1\text{MHz})=-100 dBc/Hz, 1/f² slope, integrate from f1=1f_1=1 MHz to f2=100f_2=100 MHz, f0=5f_0=5 GHz. Find σϕ\sigma_\phi and σt\sigma_t.

Step-by-step solution

Step 1: convert the datasheet point to a phase PSD (using A2): Sϕ(fref)=2×1010S_\phi(f_{ref})=2\times10^{-10} rad²/Hz, fref=1f_{ref}=1 MHz.

Step 2: write the 1/f² shape (anchored at freff_{ref}):

Sϕ(f)=Sϕ(fref)(freff)2=2×1010(106)21f2.S_\phi(f)=S_\phi(f_{ref})\left(\frac{f_{ref}}{f}\right)^2=2\times10^{-10}\,(10^6)^2\,\frac1{f^2} .

Step 3: integrate (f2df=1/f\int f^{-2}df=-1/f):

σϕ2=2×1010(106)2 ⁣106108 ⁣dff2=2×102(11061108)=200×9.9×107=1.98×104 rad2.\sigma_\phi^2=2\times10^{-10}(10^6)^2\!\int_{10^6}^{10^8}\!\frac{df}{f^2} =2\times10^{2}\left(\frac1{10^6}-\frac1{10^8}\right)=200\times9.9\times10^{-7}=1.98\times10^{-4}\ \text{rad}^2 .

So σϕ=1.98×104=1.407×102\sigma_\phi=\sqrt{1.98\times10^{-4}}=1.407\times10^{-2} rad =14.07=14.07 mrad.

Step 4: convert to rms jitter (f0=5f_0=5 GHz):

σt=σϕ2πf0=1.407×1022π×5×1094.48×1013 s=447.9 fs.\sigma_t=\frac{\sigma_\phi}{2\pi f_0}=\frac{1.407\times10^{-2}}{2\pi\times5\times10^{9}}\approx4.48\times10^{-13}\ \text{s}=447.9\ \text{fs} .

Result: σϕ=14.07\sigma_\phi=14.07 mrad, σt=447.9\sigma_t=447.9 fs.

Dimension check: σϕ2\sigma_\phi^2: [rad2/Hz][Hz]=rad2[\text{rad}^2/\text{Hz}]\cdot[\text{Hz}]=\text{rad}^2 ✓; σt\sigma_t: [rad]/[rad/s]=[s][\text{rad}]/[\text{rad/s}]=[\text{s}] ✓. Intuition: the 1/f² integral is dominated by the lower limit f1f_1 (1/f11/f21/f_1\gg1/f_2) — where you start integrating matters most. With 120-120 dBc/Hz @ 1 MHz instead (20 dB better = 1/100 the power, 1/10 the amplitude), the jitter shrinks to ~45 fs.

rms jitter obtained by integrating L(f)

Python verification

import numpy as np
from simulations.common.noise_utils import leeson_one_over_f2, integrate_rms_jitter
f = np.logspace(6, 8, 4000) # 1 MHz -> 100 MHz
L = leeson_one_over_f2(f, L_ref_dbc=-100, f_ref=1e6) # 1/f^2 skirt
sigma_t, sigma_phi = integrate_rms_jitter(f, L, f0=5e9, fmin=1e6, fmax=100e6)
print(round(sigma_phi*1e3,2), "mrad ;", round(sigma_t*1e15,1), "fs") # 14.07 mrad ; 447.9 fs

Example C2: lower-limit dominance — what if the lower limit moves?

Problem: same spectrum as C1 (100-100 dBc/Hz @ 1 MHz, 1/f², f0=5f_0=5 GHz), but integrate from f1=100f_1=100 kHz to 100 MHz. Estimate σt\sigma_t and compare with C1.

Step-by-step solution

Step 1: for 1/f², σϕ2(1/f11/f2)1/f1\sigma_\phi^2\propto(1/f_1-1/f_2)\approx1/f_1 (lower-limit dominated). The lower limit moves from 10610^6 to 10510^5 (10× smaller), so 1/f11/f_1 is 10× larger:

σϕ22×102(11051108)=200×(105108)2.0×103 rad2.\sigma_\phi^2\approx2\times10^{2}\left(\frac1{10^5}-\frac1{10^8}\right)=200\times(10^{-5}-10^{-8})\approx2.0\times10^{-3}\ \text{rad}^2 .

Step 2: σϕ=2.0×103=4.47×102\sigma_\phi=\sqrt{2.0\times10^{-3}}=4.47\times10^{-2} rad =44.7=44.7 mrad (about 103.16\sqrt{10}\approx3.16× C1).

Step 3: σt=4.47×1022π×5×1091.42×1012\sigma_t=\dfrac{4.47\times10^{-2}}{2\pi\times5\times10^{9}}\approx1.42\times10^{-12} s =1.42=1.42 ps.

Result: σt1.42\sigma_t\approx1.42 ps (C1 was 448 fs). Lowering the limit by 10× → jitter grows by about 103.16\sqrt{10}\approx3.16×.

Dimension check: same as C1 ✓. Intuition: this is why an "rms jitter" number is only meaningful with its integration band attached; the instrument's lower limit (or the PLL loop bandwidth) determines how much accumulated jitter you get to see.

Python verification

import numpy as np
from simulations.common.noise_utils import leeson_one_over_f2, integrate_rms_jitter
f = np.logspace(5, 8, 6000) # 100 kHz -> 100 MHz
L = leeson_one_over_f2(f, L_ref_dbc=-100, f_ref=1e6)
sigma_t, sigma_phi = integrate_rms_jitter(f, L, f0=5e9, fmin=1e5, fmax=100e6)
print(round(sigma_phi*1e3,1), "mrad ;", round(sigma_t*1e12,2), "ps") # ~44.7 mrad ; ~1.42 ps

Example C3: the high-pass kernel of period jitter

Problem: period jitter (the deviation of a single period, TkTT_k-T) is the first difference of phase. Using the spec Section 10.2 kernel 1ej2πfT2\lvert1-e^{-j2\pi fT}\rvert^2, estimate the period jitter σT\sigma_T for the C1 spectrum (100-100 dBc/Hz @ 1 MHz, 1/f², f0=5f_0=5 GHz, T=200T=200 ps).

Step-by-step solution

Step 1: write the period-jitter formula (spec Section 10.2 period/cycle-to-cycle kernel):

σT2=1(2πf0)20Sϕ(f)1ej2πfT2df.\sigma_T^2=\frac1{(2\pi f_0)^2}\int_0^{\infty}S_\phi(f)\,\lvert1-e^{-j2\pi fT}\rvert^2\,df .

Step 2: understand what the kernel does: 1ej2πfT2=2(1cos2πfT)=4sin2(πfT)\lvert1-e^{-j2\pi fT}\rvert^2=2(1-\cos2\pi fT)=4\sin^2(\pi fT) is high-pass — low frequencies (fT1fT\ll1) are suppressed (f2\propto f^2), so period jitter is not dominated by the low-frequency 1/f² lower limit (opposite to the accumulated jitter of C1/C2). This is why period jitter is usually much smaller than the "accumulated jitter" of the same spectrum.

Step 3: numerical integration (not feasible by hand — hand it to the computer; constants aligned with the spec kernel). See the Python below: σT27.6\sigma_T\approx27.6 fs.

Result: σT27.6\sigma_T\approx27.6 fs (versus the C1 accumulated σt=448\sigma_t=448 fs — more than an order of magnitude smaller).

Dimension check: the kernel 1ej2πfT2\lvert1-e^{-j2\pi fT}\rvert^2 is dimensionless; Sϕ(kernel)df\int S_\phi\,(\text{kernel})\,df gives rad²; dividing by the (rad/s)2(\text{rad/s})^2 of (2πf0)2(2\pi f_0)^2… note the order: first rad², then dividing by (2πf0)2(2\pi f_0)^2 gives s², and the square root gives s ✓. Resolved (v5): the exact prefactor for period/cycle-to-cycle jitter has been derived from first principles + Monte-Carlo verified in jitter_kernels (under the single-sided SϕS_\phi convention the kernel is 4sin24\sin^2 with prefactor 1/ω021/\omega_0^2; the 27.6 fs here is the band-limited version of that page's closed-form 28.28 fs) Cross-check against standard references; here we use the kernel given in spec Section 10.2, and the number is for order-of-magnitude feel only.

Python verification

import numpy as np
T, f0, fref, Lref = 1/5e9, 5e9, 1e6, -100
f = np.logspace(3, 10, 2_000_000) # wide band: the high-pass kernel suppresses low f
S_phi = 2 * 10**((Lref + 20*np.log10(fref/f))/10) # 1/f^2 phase PSD
kernel = np.abs(1 - np.exp(-1j*2*np.pi*f*T))**2 # first-difference high-pass kernel
trapz = getattr(np, "trapezoid", np.trapz)
sigma_T = np.sqrt(trapz(S_phi*kernel, f)) / (2*np.pi*f0)
print(round(sigma_T*1e15, 1), "fs") # ~27.6 fs

Example C4: ring accumulated jitter σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t}

Problem ([P2] Eq.(8)): a ring has jitter proportionality constant κ=1×108 s\kappa=1\times10^{-8}\ \sqrt{\text{s}} (toy value). Find the accumulated rms jitter for measurement intervals Δt=1 μ\Delta t=1\ \mus and Δt=1\Delta t=1 ms.

Step-by-step solution

Step 1: the random-walk law ([P2] Eq.(8), the signature of an oscillator with no absolute time reference): σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t}.

Step 2: Δt=106\Delta t=10^{-6} s:

σΔt=108106=108×103=1011 s=10 ps.\sigma_{\Delta t}=10^{-8}\sqrt{10^{-6}}=10^{-8}\times10^{-3}=10^{-11}\ \text{s}=10\ \text{ps} .

Step 3: Δt=103\Delta t=10^{-3} s:

σΔt=108103=108×3.162×102=3.16×1010 s=316 ps.\sigma_{\Delta t}=10^{-8}\sqrt{10^{-3}}=10^{-8}\times3.162\times10^{-2}=3.16\times10^{-10}\ \text{s}=316\ \text{ps} .

Result: 1 μs → 10 ps; 1 ms → 316 ps. Interval ×1000, jitter ×100031.6\sqrt{1000}\approx31.6.

Dimension check: κ\kappa has units of s\sqrt{\text{s}}, Δt\sqrt{\Delta t} is s\sqrt{\text{s}}, and their product is s ✓ (which is also why κ\kappa carries that odd unit). Intuition: the phase of a ring (no high-Q tank) is a pure random walk — the longer you wait, the larger the error, and it never converges. This is exactly the time-domain picture of why rings are noisier than LC. Companion figure:

ring accumulated-jitter random walk

Python verification

import numpy as np
kappa = 1e-8 # sqrt(s)
for dt in [1e-6, 1e-3]:
print(dt, "s ->", kappa*np.sqrt(dt)*1e12, "ps")
# 1e-06 s -> 10.0 ps ; 0.001 s -> 316.2 ps

Level D: design back-calculation

Run the formulas in reverse: given a spec, find the required qmaxq_{max}, how small Γrms\Gamma_{rms} must be, how many stages NN.

Example D1: how large must qmaxq_{max} be for −120 dBc/Hz @ 1 MHz?

Problem: spec L(1MHz)=120\mathcal{L}(1\text{MHz})=-120 dBc/Hz, f0=5f_0=5 GHz. Assume a single white-noise source Si=1×1021S_i=1\times10^{-21} A²/Hz (1000× the canonical value, closer to a real node injection) and Γrms=0.5\Gamma_{rms}=0.5. Back-solve the required qmaxq_{max}.

Step-by-step solution

Step 1: solve Eq.(21) for qmaxq_{max}. First convert the spec to linear: Llin=10120/10=1012\mathcal{L}_{\text{lin}}=10^{-120/10}=10^{-12}.

1012=Γrms2qmax2Si4Δω2  qmax2=Γrms2Si4Δω2Llin.10^{-12}=\frac{\Gamma_{rms}^2}{q_{max}^2}\cdot\frac{S_i}{4\Delta\omega^2} \ \Rightarrow\ q_{max}^2=\frac{\Gamma_{rms}^2\,S_i}{4\Delta\omega^2\,\mathcal{L}_{\text{lin}}} .

Step 2: plug in numbers (Δω2=3.948×1013\Delta\omega^2=3.948\times10^{13}, Γrms2=0.25\Gamma_{rms}^2=0.25):

qmax2=0.25×10214×3.948×1013×1012=0.25×10211.579×102=1.583×1024 C2.q_{max}^2=\frac{0.25\times10^{-21}}{4\times3.948\times10^{13}\times10^{-12}} =\frac{0.25\times10^{-21}}{1.579\times10^{2}}=1.583\times10^{-24}\ \text{C}^2 .

Step 3: take the square root: qmax=1.583×1024=1.258×1012q_{max}=\sqrt{1.583\times10^{-24}}=1.258\times10^{-12} C =1.26=1.26 pC.

Result: qmax1.26q_{max}\approx1.26 pC (i.e. raise the canonical 1 pC by about 26%; at this noise level the spec is met).

Dimension check: qmax2q_{max}^2: [][A2Hz1]/([rad/s]2[])[\,]\cdot[\text{A}^2\text{Hz}^{-1}]/([\text{rad/s}]^2\cdot[\,]); with A2Hz1=C2s2s=C2s1\text{A}^2\text{Hz}^{-1}=\text{C}^2\text{s}^{-2}\cdot\text{s}=\text{C}^2\text{s}^{-1}, dividing by s2\text{s}^{-2} gives C2s\text{C}^2\text{s}, and after absorbing the PSD's per-Hz it is C2\text{C}^2 ✓. Design intuition: L1/qmax2\mathcal{L}\propto1/q_{max}^2, so doubling qmaxq_{max} → 6 dB lower phase noise. Ways to increase qmax=CnodeVmaxq_{max}=C_{node}V_{max}: raise the swing VmaxV_{max} or the node capacitance/current.

Python verification

import numpy as np
Grms, Si, dw, Llin = 0.5, 1e-21, 2*np.pi*1e6, 10**(-120/10)
qmax = np.sqrt(Grms**2 * Si / (4*dw**2 * Llin))
print(round(qmax*1e12, 3), "pC") # -> 1.258 pC

Example D2: with qmaxq_{max} fixed, how small a Γrms\Gamma_{rms} for −120 dBc/Hz?

Problem: same spec and noise as D1 (120-120 dBc/Hz, Si=1021S_i=10^{-21}, Δf=1\Delta f=1 MHz, f0=5f_0=5 GHz), but this time qmax=1q_{max}=1 pC is fixed (the swing cannot be raised further). Back-solve the required Γrms\Gamma_{rms}.

Step-by-step solution

Step 1: solve Eq.(21) for Γrms\Gamma_{rms}:

Γrms2=Llinqmax24Δω2Si=1012×(1012)2×4×3.948×10131021.\Gamma_{rms}^2=\frac{\mathcal{L}_{\text{lin}}\,q_{max}^2\,4\Delta\omega^2}{S_i} =\frac{10^{-12}\times(10^{-12})^2\times4\times3.948\times10^{13}}{10^{-21}} .

Step 2: evaluate the numerator term by term: 1012×1024=103610^{-12}\times10^{-24}=10^{-36}; ×1.579×1014=1.579×1022\times1.579\times10^{14}=1.579\times10^{-22}. Divide by 102110^{-21}: Γrms2=0.1579\Gamma_{rms}^2=0.1579.

Step 3: Γrms=0.1579=0.397\Gamma_{rms}=\sqrt{0.1579}=0.397.

Result: Γrms0.40\Gamma_{rms}\approx0.40 (the ISF rms must drop from 0.5 to 0.40, about a 20% reduction).

Dimension check: Γrms2\Gamma_{rms}^2 is dimensionless (same argument analysis as B1; all unit-bearing terms cancel) ✓. Design intuition: LΓrms2\mathcal{L}\propto\Gamma_{rms}^2, so halving Γrms\Gamma_{rms} → 6 dB lower phase noise. Ways to lower Γrms\Gamma_{rms}: waveform symmetry (suppress c0c_0), schedule noise injection at phases where the ISF is small, more ring stages (see D3). D1 (tune qmaxq_{max}) and D2 (tune Γrms\Gamma_{rms}) are two independent knobs toward the same spec.

Python verification

import numpy as np
qmax, Si, dw, Llin = 1e-12, 1e-21, 2*np.pi*1e6, 10**(-120/10)
Grms = np.sqrt(Llin * qmax**2 * 4*dw**2 / Si)
print(round(Grms, 3)) # -> 0.397

Example D3: choosing the ring stage count NN (frequency vs ISF)

Problem: build an f0=5f_0=5 GHz single-ended ring. (a) With per-stage delay τD=20\tau_D=20 ps, how many stages NN? (b) Going from N=5N=5 to N=15N=15 stages (adjusting τD\tau_D to hold f0f_0), use ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2} to estimate the phase-noise change in dB (looking at the Γrms\Gamma_{rms} factor only).

Step-by-step solution

Step 1 (a): ring frequency ([P2] Eq.(15)): f0=12NτDN=12f0τDf_0=\dfrac1{2N\tau_D}\Rightarrow N=\dfrac1{2f_0\tau_D}.

N=12×5×109×20×1012=10.2=5.N=\frac1{2\times5\times10^{9}\times20\times10^{-12}}=\frac1{0.2}=5 .

Step 2 (b): ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2} ([P2] Eq.(16), p.794, re-verified in v7: the square root covers only the constant; the body text's 4/N1.54/N^{1.5}@η=0.75\eta=0.75 and App.B Eq.(55) triple-confirm this. v3 had misread it as N3/4N^{-3/4}; scaling-level statement). Ratio:

Γrms(15)Γrms(5)=(155)3/2=31.5=0.1925.\frac{\Gamma_{rms}(15)}{\Gamma_{rms}(5)}=\left(\frac{15}{5}\right)^{-3/2}=3^{-1.5}=0.1925 .

Step 3: phase noise Γrms2\propto\Gamma_{rms}^2, so the change (dB):

ΔL=10log10 ⁣(0.19252)=10log10(0.0370)=14.3 dB.\Delta\mathcal{L}=10\log_{10}\!\big(0.1925^2\big)=10\log_{10}(0.0370)=-14.3\ \text{dB} .

Result: (a) N=5N=5 stages. (b) Looking at the Γrms\Gamma_{rms} term alone, going from N=5N=5 to 15 lowers phase noise by about 14.3 dB.

Dimension check: N=1/(2f0τD)N=1/(2f_0\tau_D): 1/([Hz][s])=1/([s1][s])=1/([\text{Hz}][\text{s}])=1/([\text{s}^{-1}][\text{s}])= dimensionless ✓ (NN must be an integer; here it comes out exact). ΔL\Delta\mathcal{L}: the argument of 10log1010\log_{10} is a dimensionless ratio ✓.

Important caveat: the above isolates Γrms\Gamma_{rms} only. The full [P2] conclusion is — at fixed f0f_0 and total power PP, the phase noise / jitter of a single-ended ring is nearly independent of NN (see the FOM in [P2] Eq.(23), p.796, verified). Increasing NN does lower Γrms\Gamma_{rms}, but the noise sources multiply and the per-stage swing/power allocation changes, and these cancel. So the "14.3 dB" of D3(b) is a single-factor teaching illustration, not a gain a real design gets for free. See lc_vs_ring and lab_03. This is pedagogical toy scaling, not transistor-level.

Python verification

import numpy as np
f0, tauD = 5e9, 20e-12
N = 1/(2*f0*tauD)
print("N =", N) # -> 5.0
ratio = (15/5)**-1.5 # Grms scaling
print("dPN =", round(10*np.log10(ratio**2), 1), "dB") # -> -14.3 dB (Grms factor only)

Problem: a 5 GHz clock requires integrated rms jitter σt100\sigma_t\le100 fs (integrated 1 MHz→100 MHz, 1/f² spectrum). Back-solve how low L\mathcal{L} must be at 1 MHz.

Step-by-step solution

Step 1: C1 already established the mapping — for the same integration band and 1/f² shape, σtLlin(fref)\sigma_t\propto\sqrt{\mathcal{L}_{\text{lin}}(f_{ref})} (since σϕ2Sϕ(fref)Llin\sigma_\phi^2\propto S_\phi(f_{ref})\propto\mathcal{L}_{\text{lin}}, then take the square root). C1 baseline: L=100\mathcal{L}=-100 dBc/Hz → σt=447.9\sigma_t=447.9 fs.

Step 2: getting from 447.9 fs down to 100 fs is a factor of 447.9/100=4.479447.9/100=4.479. Jitter is a voltage/amplitude-like quantity, so reducing it by kk corresponds to reducing phase-noise power by k2k^2:

ΔL=20log10(4.479)=13.0 dB.\Delta\mathcal{L}=-20\log_{10}(4.479)=-13.0\ \text{dB} .

Step 3: required level: 10013.0=113.0-100-13.0=-113.0 dBc/Hz @ 1 MHz.

Result: L(1MHz)113\mathcal{L}(1\text{MHz})\approx-113 dBc/Hz is needed (1/f², integrated 1→100 MHz) to reach σt100\sigma_t\le100 fs.

Dimension check: the argument of 20log10(ratio)-20\log_{10}(\text{ratio}) is dimensionless ✓; the dB difference added to dBc/Hz is still dBc/Hz ✓. SerDes link: 100 fs RJ in a high-speed SerDes (e.g. UI = 1/(28 Gbps) ≈ 35.7 ps) directly determines eye closure and BER; see lab_12 and serdes_clocking_connection.

Python verification

import numpy as np
from simulations.common.noise_utils import leeson_one_over_f2, integrate_rms_jitter
target_fs = 100.0
# measure sigma_t from the -100 baseline, then back-solve the required dBc/Hz via the square law
f = np.logspace(6, 8, 4000)
L0 = leeson_one_over_f2(f, L_ref_dbc=-100, f_ref=1e6)
st0, _ = integrate_rms_jitter(f, L0, f0=5e9, fmin=1e6, fmax=100e6)
L_req = -100 - 20*np.log10((st0*1e15)/target_fs)
print(round(L_req, 1), "dBc/Hz @ 1 MHz") # -> -113.0 dBc/Hz

Example D5: SerDes BER bathtub (how RJ hits the eye)

Problem: UI = 35.7 ps (28 Gbps), RJ-only σt=2\sigma_t=2 ps. What is the BER at eye center (sampling offset t=0t=0)? And if σt\sigma_t degrades to 4 ps, what does the BER become?

Step-by-step solution

Step 1: RJ-only BER bathtub (spec Section 10.2 SerDes BER): BER(t)=12[Q(UI/2tσt)+Q(UI/2+tσt)]\text{BER}(t)=\tfrac12[Q(\tfrac{UI/2-t}{\sigma_t})+Q(\tfrac{UI/2+t}{\sigma_t})], Q(x)=12erfc(x/2)Q(x)=\tfrac12\mathrm{erfc}(x/\sqrt2).

Step 2: at eye center t=0t=0 the two terms are equal: BER=Q ⁣(UI/2σt)\text{BER}=Q\!\big(\tfrac{UI/2}{\sigma_t}\big).

Step 3: for σt=2\sigma_t=2 ps: UI/2σt=17.852=8.93\dfrac{UI/2}{\sigma_t}=\dfrac{17.85}{2}=8.93. Q(8.93)Q(8.93) is a vanishingly small number (Gaussian tail), 2×1019\approx2\times10^{-19}. For σt=4\sigma_t=4 ps: 17.854=4.46\dfrac{17.85}{4}=4.46, Q(4.46)4×106Q(4.46)\approx4\times10^{-6}.

Result: σt=2\sigma_t=2 ps → BER 2×1019\approx2\times10^{-19}; σt=4\sigma_t=4 ps → BER 4×106\approx4\times10^{-6}. Doubling the jitter → BER degrades by 13 orders of magnitude (the Gaussian tail is extremely sensitive to σ\sigma).

Dimension check: the argument of QQ, UI/2σt=[s][s]\dfrac{UI/2}{\sigma_t}=\dfrac{[\text{s}]}{[\text{s}]}, is dimensionless ✓; BER is dimensionless (a probability) ✓. Intuition: this is why SerDes specs quote σt\sigma_t (rms) while BER depends on the multiple of σ\sigma (the QQ function); a modest jitter saving buys a huge BER improvement. Companion figure:

SerDes eye / BER bathtub

Python verification

import numpy as np
from simulations.common.serdes_utils import ber_bathtub
ui = 1/28e9
for st in [2e-12, 4e-12]:
ber = ber_bathtub(np.array([0.0]), sigma_t=st, ui=ui)[0]
print(st*1e12, "ps -> BER =", f"{ber:.2e}")
# 2.0 ps -> BER ~ 2e-19 ; 4.0 ps -> BER ~ 4e-06

Self-check list

After finishing the 15 problems above, cover the answers and quiz yourself — every item should get an instant "direction" answer in your head:

Level A (conversion reflexes)

  • Given a phase error (rad), immediately convert to time (s) via ÷(2πf0)\div(2\pi f_0) and run the [rad]/[rad/s]=[s][\text{rad}]/[\text{rad/s}]=[\text{s}] check.
  • Remember "at 5 GHz: 1 mrad ≈ 32 fs, 1 rad ≈ 31.8 ps".
  • dBc/Hz → linear (10L/1010^{\mathcal{L}/10}) → phase PSD (×2\times2) in one breath.
  • Understand why Δϕ=ΓΔq/qmax\Delta\phi=\Gamma\,\Delta q/q_{max} is dimensionless, and that the ISF varies with injection phase (LTV).

Level B (ISF → phase noise)

  • Can write Eq.(21) from memory and plug in numbers to get dBc/Hz; know the denominator is 4Δω24\Delta\omega^2 (SSB convention).
  • Can use Parseval (cn2=2Γrms2\sum c_n^2=2\Gamma_{rms}^2) to get Γrms\Gamma_{rms} from the cnc_n.
  • Know that 1/f³ upconversion exists only when c00c_0\ne0, with corner =ω1/fc02/(2Γrms2)=\omega_{1/f}c_0^2/(2\Gamma_{rms}^2).
  • 1/f² is 20-20 dB/dec, 1/f³ is 30-30 dB/dec — read them off a plot by eye.

Level C (jitter integration)

  • Can run the full chain dBc/Hz → (integrate) → σϕ\sigma_\phi → (÷2πf0\div2\pi f_0) → σt\sigma_t.
  • Know that 1/f² accumulated jitter is dominated by the lower integration limit; an rms-jitter number must always come with its band.
  • Understand that period jitter uses a high-pass kernel and is not dominated by low frequencies; distinguish it from accumulated jitter.
  • Remember ring accumulated jitter σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t} (random walk, never converges).

Level D (design back-calculation)

  • Given a dBc/Hz spec, can back-solve qmaxq_{max} or Γrms\Gamma_{rms} (doubling qmaxq_{max} or halving Γrms\Gamma_{rms} each gives 6-6 dB).
  • Can compute the ring stage count from f0=1/(2NτD)f_0=1/(2N\tau_D), and remember the caveat "at fixed f0,Pf_0,P, ring PN is nearly independent of NN".
  • Can translate a jitter spec (fs) back into dBc/Hz at 1 MHz (reducing σt\sigma_t by kkL\mathcal{L} drops by 20log10k20\log_{10}k dB).
  • Know that RJ-limited BER is extremely sensitive to σt\sigma_t (Gaussian tail); a small jitter improvement → a large BER improvement.

Honesty notes

  • The period-jitter prefactor in Example C3 carries TODO: manual verification needed (tied to the single-/double-sided spectrum convention).
  • The ring ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2} in Example D3 ([P2] Eq.(16), p.794; re-verified in v7: the square root covers only the constant; the body text's 4/N1.54/N^{1.5}@η=0.75\eta=0.75 and App.B Eq.(55) triple-confirm this; v3 had misread it as N3/4N^{-3/4}). The "14.3 dB" is the correct dB conversion of the Γrms2\Gamma_{rms}^2 ratio (15/5)3=1/27(15/5)^{-3}=1/27 for N=515N=5\to15 (10log10(1/27)=14.310\log_{10}(1/27)=-14.3 dB), but it remains a single-factor illustration only, not a real design gain (toy scaling, not transistor-level; see the FOM N-independence caveat in D3).

Further reading