Skip to main content

Foundations Chapter Exercises (with Full Solutions)

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

Prerequisites: psd_phase_noise_jitter · lti_vs_ltv | Next: 03 core-theory chapter exercises

This page is the exercise set for Chapter 02 (Foundations). Problem types cover derivation problems (derive the expressions by hand), numerical problems (plug in numbers, carry the units, do the dimension check), and reverse-design problems (given a target spec, back-solve the required parameters).

How to use this page: work each problem yourself first, then expand the "Solution" to compare. Every solution follows the same format: step-by-step substitution (with units) → result → dimension check → one-line Python verification. All Python verifications call this site's real library simulations/common/ (no invented APIs), so you can paste them straight into a REPL.

Core formulas involved (all from the spec and this chapter's pages, using the same notation):

  • phase→time: Δt=Δϕ2πf0\Delta t=\dfrac{\Delta\phi}{2\pi f_0} (spec Eq. 17)
  • phase variance: σϕ2=f1f2Sϕ(f)df\sigma_\phi^2=\displaystyle\int_{f_1}^{f_2}S_\phi(f)\,df (spec Eq. 18)
  • rms jitter: σt=12πf0f1f2Sϕ(f)df\sigma_t=\dfrac{1}{2\pi f_0}\sqrt{\displaystyle\int_{f_1}^{f_2}S_\phi(f)\,df} (spec Eq. 19)
  • SSB↔phase PSD (small-angle): L(Δf)12Sϕ(Δf)\mathcal{L}(\Delta f)\approx\tfrac12 S_\phi(\Delta f) (spec Eq. 16)
  • Parseval: n=0cn2=1π02πΓ(x)2dx=2Γrms2\displaystyle\sum_{n=0}^{\infty}c_n^2=\frac{1}{\pi}\int_0^{2\pi}\lvert\Gamma(x)\rvert^2dx=2\,\Gamma_{rms}^2 ([P1] Eq.(20), p.185)
  • Lorentzian linewidth (FWHM): Δf3dB=Dπ\Delta f_{3\mathrm{dB}}=\dfrac{D}{\pi}, phase diffusion Var[Δϕ(t)]=2Dt\operatorname{Var}[\Delta\phi(t)]=2D\lvert t\rvert (spec §11.2; linked to [E2] Demir 2000, not among the 5 source PDFs)
  • Allan slope reference: white FM τ1/2\to\tau^{-1/2}, flicker FM τ0\to\tau^{0}, random-walk FM τ+1/2\to\tau^{+1/2} (spec §11.2; Allan is external literature)

Problems

Exercise 1 (numerical) — phase ↔ time conversion

An oscillator at f0=5f_0=5 GHz has an instantaneous excess-phase offset Δϕ=5×104\Delta\phi=5\times10^{-4} rad. Find the corresponding timing error Δt\Delta t (fs), and convert Δϕ\Delta\phi to degrees.

Quick check (work it out yourself, then check)
fs
Graded correct within ±5% relative error; scientific notation is accepted.

Exercise 2 (numerical) — rms jitter from phase variance

A clock has rms phase σϕ=14.07\sigma_\phi=14.07 mrad (over the 1→100 MHz integration band), with f0=5f_0=5 GHz. Find the rms timing jitter σt\sigma_t (fs).

Exercise 3 (derivation + numerical) — Parseval: Γrms\Gamma_{rms} and cn2\sum c_n^2 from the ISF

The ISF of an ideal LC oscillator is Γ(θ)=sinθ\Gamma(\theta)=-\sin\theta.

(a) Using the definition Γrms2=12π02πΓ2(θ)dθ\Gamma_{rms}^2=\dfrac{1}{2\pi}\displaystyle\int_0^{2\pi}\Gamma^2(\theta)\,d\theta, compute Γrms\Gamma_{rms} by hand. (b) Using Parseval (spec Eq. 11), find n=0cn2\sum_{n=0}^{\infty}c_n^2, and state which cnc_n is the only nonzero one.

Exercise 4 (numerical) — phase variance from PSD integration

An oscillator's one-sided phase PSD at offset ff, in the 1/f21/f^2 region, can be written Sϕ(f)=Kf2S_\phi(f)=\dfrac{K}{f^2}, with K=104 rad2HzK=10^{-4}\ \text{rad}^2\cdot\text{Hz} (i.e., Sϕ(1Hz)=104S_\phi(1\,\text{Hz})=10^{-4}). Find the phase variance σϕ2\sigma_\phi^2 and σϕ\sigma_\phi (mrad) over the integration band f1=103f_1=10^3 Hz to f2=106f_2=10^6 Hz.

Quick check (work it out yourself, then check)
mrad
Graded correct within ±6% relative error; scientific notation is accepted.

Exercise 5 (concept + derivation) — LTI vs LTV: same impulse, different phase

The ideal-LC ISF is Γ(θ)=sinθ\Gamma(\theta)=-\sin\theta. The same charge impulse Δq\Delta q is injected (a) at the waveform zero-crossing (θ=π/2\theta=\pi/2, where the cos\cos waveform has its maximum slope and sin-\sin is at its extremum) and (b) at the waveform peak (θ=0\theta=0). Using Δϕ=Γ(θ)Δq/qmax\Delta\phi=\Gamma(\theta)\,\Delta q/q_{max}, show how much the two phase effects differ, and explain in one sentence why this is "LTV, not LTI". Take Δq=1\Delta q=1 fC, qmax=1q_{max}=1 pC.

Quick check (work it out yourself, then check)
mrad
Graded correct within ±2% relative error; scientific notation is accepted.

Exercise 6 (reverse design) — phase diffusion from the Lorentzian linewidth

A free-running oscillator's measured carrier 3-dB linewidth (FWHM) is Δf3dB=1\Delta f_{3\mathrm{dB}}=1 kHz.

(a) Back-solve the phase-diffusion coefficient DD (rad²/s). (b) Estimate how long tt it takes for the phase to accumulate a variance Var[Δϕ]=1 rad2\operatorname{Var}[\Delta\phi]=1\ \text{rad}^2 (the phase has "wandered by about 1 rad" and coherence has largely collapsed).

Quick check (work it out yourself, then check)
rad²/s
Graded correct within ±2% relative error; scientific notation is accepted.

Exercise 7 (concept + slope reading) — Allan deviation slopes

On a log–log Allan-deviation plot σy(τ)\sigma_y(\tau) you measure three segments with different slopes: 1/2-1/2, 00, +1/2+1/2. Which FM noise type does each correspond to? Also explain why "flicker FM" forms a flat plateau (floor) in the ADEV.

Exercise 8 (numerical) — from a single L(Δf)\mathcal{L}(\Delta f) point to SϕS_\phi to jitter

A spur-free oscillator measures L(1MHz)=120\mathcal{L}(1\,\text{MHz})=-120 dBc/Hz at Δf=1\Delta f=1 MHz. (a) Find SϕS_\phi at that offset (rad²/Hz). (b) If over the 1-decade span 1→10 MHz the PSD follows 1/f21/f^2 (i.e., Sϕ=K/f2S_\phi=K/f^2, with KK set by (a)), and f0=5f_0=5 GHz, find the rms jitter σt\sigma_t (fs) over this band.

Quick check (work it out yourself, then check)
fs
Graded correct within ±5% relative error; scientific notation is accepted.

Solutions

Exercise 1 solution (phase ↔ time conversion)

Step-by-step substitution (with units). Using phase→time (spec Eq. 17):

Δt=Δϕ2πf0=5×104 rad2π×5×109 Hz=5×1043.1416×1010 s.\Delta t=\frac{\Delta\phi}{2\pi f_0}=\frac{5\times10^{-4}\ \text{rad}}{2\pi\times5\times10^{9}\ \text{Hz}}=\frac{5\times10^{-4}}{3.1416\times10^{10}}\ \text{s}.Δt1.59×1014 s=15.9 fs.\Delta t\approx1.59\times10^{-14}\ \text{s}=15.9\ \text{fs}.

Converting to degrees:

Δϕ=5×104×180π0.0286.\Delta\phi=5\times10^{-4}\times\frac{180}{\pi}\approx0.0286^\circ.

Result: Δt15.9\Delta t\approx15.9 fs, Δϕ0.0286\Delta\phi\approx0.0286^\circ.

Dimension check: [rad][rad/s]=[s]\dfrac{[\text{rad}]}{[\text{rad/s}]}=[\text{s}] ✓ (the unit of 2πf02\pi f_0 is rad/s; rad is dimensionless, so the ratio gives seconds). This is exactly the timing error of canonical Example A in spec §8.

from simulations.common.noise_utils import phase_to_time_error
dt = phase_to_time_error(5e-4, f0=5e9)
print(dt*1e15, "fs") # -> 15.92 fs
Exercise 2 solution (rms jitter from phase variance)

Step-by-step substitution (with units). rms jitter (spec Eq. 19). Here σϕ\sigma_\phi is given directly, so Sϕdf=σϕ\sqrt{\int S_\phi df}=\sigma_\phi and the formula reduces to the rms version of phase→time:

σt=σϕ2πf0=14.07×103 rad2π×5×109 Hz=1.407×1023.1416×1010 s.\sigma_t=\frac{\sigma_\phi}{2\pi f_0}=\frac{14.07\times10^{-3}\ \text{rad}}{2\pi\times5\times10^{9}\ \text{Hz}}=\frac{1.407\times10^{-2}}{3.1416\times10^{10}}\ \text{s}.σt4.479×1013 s=447.9 fs.\sigma_t\approx4.479\times10^{-13}\ \text{s}=447.9\ \text{fs}.

Result: σt447.9\sigma_t\approx447.9 fs. This corresponds to canonical Example C in spec §8 (the lab_08 result for f0=5f_0=5 GHz, L(1MHz)=100\mathcal{L}(1\text{MHz})=-100 dBc/Hz, 1/f² slope, integrated 1→100 MHz).

Dimension check: [rad][rad/s]=[s]\dfrac{[\text{rad}]}{[\text{rad/s}]}=[\text{s}] ✓.

import numpy as np
sigma_phi = 14.07e-3 # rad
f0 = 5e9
sigma_t = sigma_phi/(2*np.pi*f0)
print(sigma_t*1e15, "fs") # -> 447.9 fs

(For the full integral version see numerical_feeling and integrate_rms_jitter in simulations/common/noise_utils.py.)

Exercise 3 solution (Parseval: Γrms\Gamma_{rms} and cn2\sum c_n^2 from the ISF)

(a) Compute Γrms\Gamma_{rms} by direct integration. Using the fact that sin2θ\sin^2\theta averages to 12\tfrac12 over one period:

Γrms2=12π02π(sinθ)2dθ=12π02πsin2θdθ=12ππ=12.\Gamma_{rms}^2=\frac{1}{2\pi}\int_0^{2\pi}(-\sin\theta)^2\,d\theta=\frac{1}{2\pi}\int_0^{2\pi}\sin^2\theta\,d\theta=\frac{1}{2\pi}\cdot\pi=\frac12.Γrms=120.707.\Gamma_{rms}=\frac{1}{\sqrt2}\approx0.707.

(b) Find cn2\sum c_n^2 with Parseval. Spec Eq. 11 ([P1] Eq.(20), p.185):

n=0cn2=2Γrms2=2×12=1.\sum_{n=0}^{\infty}c_n^2=2\,\Gamma_{rms}^2=2\times\frac12=1.

Which cnc_n is nonzero: Γ(θ)=sinθ=cos(θ+π2)\Gamma(\theta)=-\sin\theta=\cos(\theta+\tfrac{\pi}{2}) is a pure first harmonic, so only c1=1c_1=1 (with θ1=π/2\theta_1=\pi/2); all others c0=c2==0c_0=c_2=\dots=0. Check: cn2=c12=1\sum c_n^2=c_1^2=1 ✓.

Result: Γrms=1/20.707\Gamma_{rms}=1/\sqrt2\approx0.707, cn2=1\sum c_n^2=1, the only nonzero coefficient is c1=1c_1=1.

Dimension check: Γ\Gamma is dimensionless (spec notation table), so Γrms2\Gamma_{rms}^2 and cn2\sum c_n^2 are both dimensionless ✓.

import numpy as np
from simulations.common.isf_utils import gamma_lc_ideal, gamma_rms, compute_fourier_coefficients
theta = np.linspace(0, 2*np.pi, 4096, endpoint=False)
g = gamma_lc_ideal(theta) # = -sin(theta)
print(gamma_rms(theta, g)) # -> 0.7071
a0, a, b, c, ph = compute_fourier_coefficients(theta, g, n_harmonics=5)
print(np.sum(c**2)) # -> ~1.0 (== 2*Gamma_rms^2)
Exercise 4 solution (phase variance from PSD integration)

Step-by-step substitution (with units). Phase variance (spec Eq. 18), substituting Sϕ(f)=K/f2S_\phi(f)=K/f^2:

σϕ2=f1f2Kf2df=K[1f]f1f2=K(1f11f2).\sigma_\phi^2=\int_{f_1}^{f_2}\frac{K}{f^2}\,df=K\left[-\frac1f\right]_{f_1}^{f_2}=K\left(\frac{1}{f_1}-\frac{1}{f_2}\right).

Substituting K=104 rad2HzK=10^{-4}\ \text{rad}^2\cdot\text{Hz}, f1=103f_1=10^3 Hz, f2=106f_2=10^6 Hz:

σϕ2=104(11031106)=104×(103106)=104×9.99×104=9.99×108 rad2.\sigma_\phi^2=10^{-4}\left(\frac{1}{10^3}-\frac{1}{10^6}\right)=10^{-4}\times(10^{-3}-10^{-6})=10^{-4}\times9.99\times10^{-4}=9.99\times10^{-8}\ \text{rad}^2.σϕ=9.99×1083.16×104 rad=0.316 mrad.\sigma_\phi=\sqrt{9.99\times10^{-8}}\approx3.16\times10^{-4}\ \text{rad}=0.316\ \text{mrad}.

Result: σϕ29.99×108 rad2\sigma_\phi^2\approx9.99\times10^{-8}\ \text{rad}^2, σϕ0.316\sigma_\phi\approx0.316 mrad.

Intuition: the 1/f21/f^2 integral is dominated by the low-frequency end f1f_1 (1/f11/f21/f_1\gg1/f_2) — which is exactly why close-in phase noise contributes most of the total jitter.

Dimension check: [K][1/f]=(rad2Hz)(1/Hz)=rad2[K]\cdot[1/f]=(\text{rad}^2\cdot\text{Hz})\cdot(1/\text{Hz})=\text{rad}^2 ✓ (σϕ2\sigma_\phi^2 is in rad²).

import numpy as np
K, f1, f2 = 1e-4, 1e3, 1e6
var = K*(1/f1 - 1/f2)
print(var, "rad^2 ->", np.sqrt(var)*1e3, "mrad") # -> 9.99e-8 rad^2 -> 0.316 mrad
Exercise 5 solution (LTI vs LTV: same impulse, different phase)

Step-by-step substitution (with units). Using the operational ISF (spec Eq. 5) Δϕ=Γ(θ)Δq/qmax\Delta\phi=\Gamma(\theta)\,\Delta q/q_{max}. Δq/qmax=1015/1012=103\Delta q/q_{max}=10^{-15}/10^{-12}=10^{-3}.

(a) Zero-crossing θ=π/2\theta=\pi/2 (Γ=sin(π/2)=1\Gamma=-\sin(\pi/2)=-1, maximum sensitivity):

Δϕa=(1)×103=1×103 rad=1 mrad.\Delta\phi_a=(-1)\times10^{-3}=-1\times10^{-3}\ \text{rad}=-1\ \text{mrad}.

(b) Peak θ=0\theta=0 (Γ=sin0=0\Gamma=-\sin 0=0, zero sensitivity):

Δϕb=0×103=0 rad.\Delta\phi_b=0\times10^{-3}=0\ \text{rad}.

Result: injection at the zero-crossing produces a phase step of Δϕ=1\lvert\Delta\phi\rvert=1 mrad; injection at the peak produces 0 phase step (there the charge only changes the amplitude, which is subsequently pulled back by amplitude restoring).

Why this is LTV, not LTI: the impulse response of an LTI (linear time-invariant) system depends only on the elapsed time tτt-\tau, not on the injection instant τ\tau. Here, however, the same Δq\Delta q at θ=π/2\theta=\pi/2 versus θ=0\theta=0 produces completely different Δϕ\Delta\phi — the response explicitly depends on the absolute injection phase Γ(ω0τ)\Gamma(\omega_0\tau), which is precisely the defining signature of an LTV (linear time-varying) system (see lti_vs_ltv).

Dimension check: Γ\Gamma dimensionless × Δq/qmax\times\ \Delta q/q_{max} (C/C, dimensionless) == rad ✓.

from simulations.common.isf_utils import gamma_lc_ideal, impulse_to_phase_step
import numpy as np
dq, qmax = 1e-15, 1e-12
for name, theta in [("zero-crossing", np.pi/2), ("peak", 0.0)]:
g = gamma_lc_ideal(theta) # -sin(theta)
dphi = impulse_to_phase_step(dq, g, qmax)
print(name, dphi*1e3, "mrad") # -> -1.0 mrad ; 0.0 mrad
Exercise 6 solution (phase diffusion from the Lorentzian linewidth)

Note: Lorentzian linewidth and phase diffusion are external literature ([E2] Demir 2000), not among the 5 source PDFs; the formulas are taken verbatim from spec §11.2.

(a) Back-solve DD. FWHM linewidth (spec §11.2):

Δf3dB=DπD=πΔf3dB=π×103 Hz=3.142×103 rad2/s.\Delta f_{3\mathrm{dB}}=\frac{D}{\pi}\quad\Longrightarrow\quad D=\pi\,\Delta f_{3\mathrm{dB}}=\pi\times10^{3}\ \text{Hz}=3.142\times10^{3}\ \text{rad}^2/\text{s}.

(b) Estimate the time to accumulate 1 rad². Phase diffusion (spec §11.2) Var[Δϕ(t)]=2Dt\operatorname{Var}[\Delta\phi(t)]=2D\lvert t\rvert; setting it =1 rad2=1\ \text{rad}^2:

t=12D=12×3.142×1031.59×104 s=159 μs.t=\frac{1}{2D}=\frac{1}{2\times3.142\times10^{3}}\approx1.59\times10^{-4}\ \text{s}=159\ \mu\text{s}.

Result: D3.14×103 rad2/sD\approx3.14\times10^{3}\ \text{rad}^2/\text{s}; accumulating 1 rad2\approx1\ \text{rad}^2 of phase variance takes about 159 µs (i.e., a coherence time of order τc1/(2D)\tau_c\sim1/(2D)). Note that 1/Δf3dB=11/\Delta f_{3\mathrm{dB}}=1 ms is of the same order — the narrower the linewidth, the longer the coherence time; the two are reciprocals.

Dimension check: (a) [Δf]=Hz=1/s[\,\Delta f\,]=\text{Hz}=1/\text{s}, multiplied by π\pi (dimensionless), gives DD in rad²/s (rad² being the square of the dimensionless "rad" of phase variance, per second) ✓. (b) rad2rad2/s=s\dfrac{\text{rad}^2}{\text{rad}^2/\text{s}}=\text{s} ✓.

import numpy as np
df_3db = 1e3 # Hz (FWHM)
D = np.pi*df_3db # rad^2/s
t = 1/(2*D) # Var = 2 D t = 1 rad^2
print(D, "rad^2/s ;", t*1e6, "us") # -> 3141.6 rad^2/s ; 159.2 us

(Background and full derivation: lorentzian_linewidth.)

Exercise 7 solution (reading Allan-deviation slopes)

Note: The Allan variance is external literature (Allan 1966), not among the 5 source PDFs; the slope table is taken verbatim from spec §11.2.

Slope reference (spec §11.2). On a log–log σy(τ)\sigma_y(\tau) plot:

Measured slope σy(τ)τ?\sigma_y(\tau)\propto\tau^{?}Noise typePhysics
τ1/2\tau^{-1/2}white FM (white frequency modulation)frequency is white noise → phase is a random walk; the longer you average, the more stable
τ0\tau^{0} (plateau/floor)flicker FM (1/f frequency)σy\sigma_y is independent of the gate time τ\tau → ADEV forms a flat floor
τ+1/2\tau^{+1/2}random-walk FM (random walk of frequency)the frequency itself drifts → the longer you average, the worse it gets; slope turns upward

Why flicker FM forms a plateau: substitute Sy(f)1/fS_y(f)\propto1/f (flicker FM) into the spec §11.2 expression σy2(τ)=20Sy(f)sin4(πfτ)(πfτ)2df\sigma_y^2(\tau)=2\displaystyle\int_0^\infty S_y(f)\dfrac{\sin^4(\pi f\tau)}{(\pi f\tau)^2}\,df and change variables to u=πfτu=\pi f\tau: τ\tau cancels completely out of the integrand — the integral becomes a pure numerical constant independent of τ\tau, so σy2(τ)=\sigma_y^2(\tau)= constant σy(τ)τ0\Rightarrow\sigma_y(\tau)\propto\tau^0, a horizontal line (floor) on the log–log plot. This floor is the signature long-term-stability feature of quartz/atomic clocks, marking the limit that no amount of extra averaging time can push down.

Result: τ1/2\tau^{-1/2}\to white FM, τ0\tau^{0}\to flicker FM (floor), τ+1/2\tau^{+1/2}\to random-walk FM.

Dimension check: σy(τ)\sigma_y(\tau) is the dimensionless fractional-frequency stability (y=Δf/f0y=\Delta f/f_0); its power-law relationship with τ\tau only compares slopes and carries no dimension ✓.

import numpy as np
# Read off by the slope definition: fit the log-log slope of a sigma_y(tau) segment
tau = np.logspace(-3, 1, 200)
for label, slope in [("white FM", -0.5), ("flicker FM", 0.0), ("random-walk FM", 0.5)]:
sy = tau**slope
fit = np.polyfit(np.log10(tau), np.log10(sy), 1)[0]
print(label, "slope =", round(fit, 2)) # -> -0.5 ; 0.0 ; 0.5

(Full derivation and plots: allan_variance.)

Exercise 8 solution (from a single L\mathcal{L} point to SϕS_\phi to jitter)

(a) LSϕ\mathcal{L}\to S_\phi. First convert dBc/Hz back to linear:

Llin(1MHz)=10120/10=1012 (per Hz).\mathcal{L}_{\text{lin}}(1\,\text{MHz})=10^{-120/10}=10^{-12}\ \text{(per Hz)}.

The small-angle relation (spec Eq. 16) L12SϕSϕ=2Llin\mathcal{L}\approx\tfrac12 S_\phi\Rightarrow S_\phi=2\mathcal{L}_{\text{lin}}:

Sϕ(1MHz)=2×1012=2×1012 rad2/Hz.S_\phi(1\,\text{MHz})=2\times10^{-12}=2\times10^{-12}\ \text{rad}^2/\text{Hz}.

(b) Set KK, then integrate for σt\sigma_t. With the 1/f21/f^2 model Sϕ(f)=K/f2S_\phi(f)=K/f^2, use (a) to set KK at f=106f=10^6 Hz:

K=Sϕ(106)(106)2=2×1012×1012=2 rad2Hz.K=S_\phi(10^6)\cdot(10^6)^2=2\times10^{-12}\times10^{12}=2\ \text{rad}^2\cdot\text{Hz}.

Phase variance (spec Eq. 18), integrated f1=106f2=107f_1=10^6\to f_2=10^7 Hz:

σϕ2=f1f2Kf2df=K ⁣(1f11f2)=2(11061107)=2×9×107=1.8×106 rad2.\sigma_\phi^2=\int_{f_1}^{f_2}\frac{K}{f^2}df=K\!\left(\frac{1}{f_1}-\frac{1}{f_2}\right)=2\left(\frac{1}{10^6}-\frac{1}{10^7}\right)=2\times9\times10^{-7}=1.8\times10^{-6}\ \text{rad}^2.σϕ=1.8×1061.342×103 rad=1.342 mrad.\sigma_\phi=\sqrt{1.8\times10^{-6}}\approx1.342\times10^{-3}\ \text{rad}=1.342\ \text{mrad}.

rms jitter (spec Eq. 19), with f0=5f_0=5 GHz:

σt=σϕ2πf0=1.342×1032π×5×1094.27×1014 s=42.7 fs.\sigma_t=\frac{\sigma_\phi}{2\pi f_0}=\frac{1.342\times10^{-3}}{2\pi\times5\times10^{9}}\approx4.27\times10^{-14}\ \text{s}=42.7\ \text{fs}.

Result: Sϕ(1MHz)=2×1012 rad2/HzS_\phi(1\text{MHz})=2\times10^{-12}\ \text{rad}^2/\text{Hz}, σϕ1.34\sigma_\phi\approx1.34 mrad, σt42.7\sigma_t\approx42.7 fs (1→10 MHz band).

Dimension check: (a) L\mathcal{L} and SϕS_\phi are both per-Hz (rad²/Hz) ✓; (b) [K][1/f]=rad2HzHz1=rad2[K]\cdot[1/f]=\text{rad}^2\cdot\text{Hz}\cdot\text{Hz}^{-1}=\text{rad}^2 ✓; radrad/s=s\dfrac{\text{rad}}{\text{rad/s}}=\text{s} ✓.

import numpy as np
from simulations.common.noise_utils import integrate_rms_jitter
# Analytic path (direct substitution)
L_dbc = -120.0
S_phi_1M = 2*10**(L_dbc/10) # = 2e-12 rad^2/Hz
K = S_phi_1M*(1e6)**2 # = 2 rad^2*Hz
var = K*(1/1e6 - 1/1e7)
sigma_phi = np.sqrt(var)
sigma_t = sigma_phi/(2*np.pi*5e9)
print(sigma_phi*1e3, "mrad ;", sigma_t*1e15, "fs") # -> 1.342 mrad ; 42.7 fs

# Numeric path (fold L(f)=K/f^2 back to dBc/Hz, then integrate); matches the analytic result
f = np.logspace(6, 7, 2000)
L_curve = 10*np.log10(0.5*K/f**2) # L = S_phi/2 = (K/f^2)/2
st, sp = integrate_rms_jitter(f, L_curve, f0=5e9, fmin=1e6, fmax=1e7)
print(st*1e15, "fs (numeric)") # -> ~42.7 fs

Key takeaways

  • phase↔time: Δt=Δϕ/(2πf0)\Delta t=\Delta\phi/(2\pi f_0); rms version σt=σϕ/(2πf0)\sigma_t=\sigma_\phi/(2\pi f_0) (Exercises 1, 2).
  • Parseval: cn2=2Γrms2\sum c_n^2=2\Gamma_{rms}^2; for sin-\sin, Γrms=1/2\Gamma_{rms}=1/\sqrt2 and cn2=1\sum c_n^2=1 (Exercise 3).
  • PSD integration: in the 1/f21/f^2 region σϕ2\sigma_\phi^2 is dominated by the low-frequency end; σϕ2=K(1/f11/f2)\sigma_\phi^2=K(1/f_1-1/f_2) (Exercises 4, 8).
  • The essence of LTV: the response depends on the absolute injection phase; the same impulse at different phases gives different Δϕ\Delta\phi (Exercise 5).
  • Lorentzian: D=πΔf3dBD=\pi\Delta f_{3\mathrm{dB}}, coherence time 1/(2D)\sim1/(2D) (Exercise 6, external literature).
  • Allan slopes: τ1/2/τ0/τ+1/2\tau^{-1/2}/\tau^0/\tau^{+1/2}\to white/flicker/random-walk FM; flicker FM forms a floor (Exercise 7, external literature).
  • All Python verifications call simulations/common/ (noise_utils, isf_utils) and can be reproduced directly.

Further reading