Lorentzian Linewidth: Resolving the 1/f² Divergence Paradox at Δf→0
β: This English translation is in beta — the Traditional-Chinese original is the authoritative version.
Prerequisites: white_noise_to_phase_noise (the signature result [P1] Eq.(21)), rms_isf ( sets the phase diffusion), stochastic_noise_basics (autocorrelation ↔ Wiener–Khinchin).
The previous page white_noise_to_phase_noise derived the signature result of oscillator phase noise, [P1] Eq.(21): the phase-noise skirt caused by white noise is
The equation is beautiful, but it hides a disturbing mathematical pathology: the denominator contains , so as the offset (infinitely close to the carrier), the bracket and . Read literally, the noise power density at the exact center of the carrier is infinite — which is obviously wrong: a real oscillator has finite total power (namely its output power) and cannot pack infinite power density into any single frequency.
This page resolves that paradox head-on. Conclusion first: is the far-offset asymptote of the "phase linearization" approximation, not the truth near the carrier. Honestly account for the random-walk nature of the phase, and the carrier spectrum flattens near the carrier into a Lorentzian, with a finite peak, conserved total power, and a naturally defined finite 3-dB linewidth .
Physical intuition (conclusion first): white noise keeps kicking the phase, so does not settle at any value; like a drunkard's walk it random-walks without bound (a Wiener process). The phase variance grows linearly: . The carrier therefore gradually loses memory: the longer the separation, the larger and less correlated the phase difference, so the autocorrelation decays exponentially. The Fourier transform of an exponentially decaying autocorrelation is a Lorentzian — a bell-shaped line of finite height and finite width. is merely the tail of this Lorentzian "far from center." Near the center it must flatten, because "complete phase amnesia" can at most spread the power flat — it can never make it diverge.
This page follows the complete step-by-step Lorentzian derivation of spec 11.2 throughout. The mechanism used here — "phase diffusion → exponential autocorrelation → Lorentzian" — is external literature, corresponding mainly to [E2] A. Demir, A. Mehrotra, and J. Roychowdhury, "Phase Noise in Oscillators: A Unifying Theory and Numerical Methods for Characterization," IEEE Trans. Circuits Syst. I, vol. 47, no. 5, pp. 655–674, May 2000 (DOI: 10.1109/81.847872), not among the 5 source PDFs downloaded on this site (volume/issue/pages/DOI verified; see [E2] in references). [P1] itself obtains by linearization but never addresses the divergence; the phase-diffusion model of Demir et al. is exactly the standard tool that fills that gap.
Step 0: The root of the problem — the phase is a random walk, not a fixed value
Return to the phase integral of [P1] Eq.(11) (see convolution_derivation):
The integral of white noise is a Wiener process — a Brownian-motion-style random walk. Its key property: no restoring force (the phase is the Floquet neutral direction, see derivation_floquet_ppv), so the phase never returns to some equilibrium value; it diffuses without bound.
- Mathematical signature: the variance of integrated white noise grows linearly with time (this is the defining property of a Wiener process). Write the proportionality constant as :
Here is called the phase diffusion constant, in units of (spec 11.2). carries an absolute value because the variance is the same looking forward or backward (stationary increments).
-
Unit check: ; right-hand side ✓.
-
Why linear and not something else: white noise is uncorrelated across time; integrating independent increments makes the variances add linearly, like "summing dice rolls" () — this is the origin of the walk and the variance, and it is exactly the same thing as in numerical_feeling (accumulated jitter is the time-domain version of the phase walk).
This step already exposes the seed of the paradox: the derivation treats as "small, linearizable, bounded"; but the real is an unbounded walk. When you ask "what happens infinitely close to the carrier (, i.e., observing infinitely long, )", has long since wandered to rad and the linearization has broken down. So the divergence is not physics — it is an approximation used where it fails.
Step 1: Carrier autocorrelation — turning the phase walk into exponential decay via the Gaussian characteristic function
Write the carrier as (the pure-phase version of [P1] Eq.(1); amplitude held constant, phase only):
We want its autocorrelation function (the average product of the signal with itself delayed by ):
Step (i): expand the two cosines with the product-to-sum identity. Let :
Using :
- The slow term is independent of absolute time (it contains only and the phase difference) and survives the averaging.
- The fast term contains ; time-averaging over (or averaging over the random phase) kills it — it oscillates near and is invisible to any long-term carrier average. Drop it.
Hence
Step (ii): move the average inside using the Gaussian characteristic function. Expand . is zero-mean Gaussian (integrated white noise → Gaussian; and the distribution is symmetric, so ):
The remaining uses the Gaussian characteristic function — for a zero-mean Gaussian variable ,
This is the mathematical pivot of this page: for a Gaussian, "the average of a complex exponential" equals "". Substitute Step 0's :
Step (iii): combine to get the carrier autocorrelation (spec 11.2). Absorb into the normalization (adopting the unit-power convention , consistent with lab_18):
- Physical meaning: is the carrier's own oscillation; is the memory-loss envelope — the longer the separation, the more phase difference accumulates and the smaller gets: the autocorrelation decays exponentially. Larger (fiercer noise) means faster memory loss.
- Unit check: ? — note that appears in an exponent and must be dimensionless. The convention here treats the "" of as dimensionless (phase is dimensionless radians to begin with), so is effectively and is dimensionless ✓. is dimensionless (power-normalized) ✓.
- Connection to [P1]: [P1] never wrote this ; it stops at "phase small, linear." Once you admit the phase is an unbounded walk, this exponential decay is the only self-consistent outcome (the core of [E2] Demir 2000).
Step 2: Wiener-Khinchin — exponentially decaying autocorrelation ⇒ Lorentzian spectrum
Wiener-Khinchin theorem: the power spectral density of a stationary random process is the Fourier transform of its autocorrelation :
Substitute Step 1's . Splitting gives two identical two-sided-exponential transforms, shifted to . We only need the branch around (near the positive-frequency carrier).
The standard transform used (Fourier transform of the two-sided exponential — the canonical Lorentzian pair):
Work it out by hand (split into the and halves):
Let the offset angular frequency near the carrier be (absorbing the branch of the , which amounts to shifting the frequency origin to the carrier), and carry the prefactor :
- This is the Lorentzian: a bell-shaped line centered on the carrier, with a finite peak, symmetric left and right.
- See how the divergence is gone: as , — finite! The peak is , not infinity. The divergence is cured.
- Unit/shape check: the two denominator terms share the same dimension (both ), so the shape of the ratio is correct; the overall constant is fixed by total-power normalization (see Step 4).
Why the far offset returns to (consistent with [P1])
When (far enough from the carrier), the denominator :
The far-offset asymptote is exactly — in full agreement with [P1] Eq.(21). So the Lorentzian does not overturn [P1]; it embeds [P1]'s into a complete lineshape that flattens near the carrier: far out, flat close in, with the corner at . The figure below overlays all three (simulation / Lorentzian theory / asymptote).
Step 3: 3-dB linewidth (FWHM) = D/π
The Lorentzian's full width at half maximum (FWHM) is what engineers call the "3-dB linewidth" or simply the "linewidth." Find it: the peak at is ; at half maximum :
So the half-maximum points sit at (rad/s).
- HWHM (half width): rad/s Hz.
- FWHM (3-dB full width): twice the HWHM, rad/s
- Physical meaning: larger (fiercer noise, faster phase amnesia) means a wider linewidth and a "fatter" carrier. An ideal noiseless oscillator has → linewidth → it degenerates into a delta line (pure carrier).
- Unit check: ✓.
- Where "3 dB" comes from: half height half power dB, hence "3-dB linewidth."
Step 4: Total power conservation — the Lorentzian flattens the infinity into a finite integral
The most fatal consequence of the near-carrier divergence: integrating from diverges (), which would say the phase-noise power is infinite. The Lorentzian cures this, because the Lorentzian's integral converges. Using the standard integral :
- Physical meaning: summing the power over all offsets gives a finite constant — exactly equal to the carrier's total power (after proper normalization). The phase walk merely smears the power originally concentrated in a delta line into a Lorentzian of finite width; no total power is lost (energy conservation). This is "total power conservation" (the key teaching point of spec 11.2).
- Compare with the delta line: as the Lorentzian (infinitely tall and thin), degenerating back into the ideal carrier; for it is flattened into a finite peak. The power never diverged — it was only redistributed.
The paradox resolved in one sentence: the divergence is a "false divergence" — it comes from forcing the unbounded phase walk into a bounded linear approximation. The real spectrum must flatten into a Lorentzian near the carrier (peak , width , total power carrier power, conserved). [P1] Eq.(21)'s holds only for ; it is the Lorentzian's far tail.
Step 5: Connecting to the ISF — expressing D in terms of Γrms and qmax
Now connect the abstract back to [P1]'s ISF quantities. Matching "the two expressions for the near-carrier skirt" pins down .
From the Lorentzian side: far out, . Write it as a phase PSD — the double-sided phase PSD of a Wiener phase () is ; this site keeps its books in single-sided PSD throughout (consistent with jitter_kernels), so
From the ISF side (the clean time-domain version from the previous page, , writing ):
Set them equal (same skirt, so the coefficients must match):
Substituting into Step 3's linewidth formula gives the 3-dB linewidth directly in ISF quantities:
- Design message: linewidth — the same set of knobs as [P1] Eq.(21)'s ! For a narrow linewidth (a clean carrier), you still increase the charge swing , suppress , and lower the noise PSD . The Lorentzian introduces no new knob; it merely repackages the same physical quantities into "linewidth," a directly measurable number.
- Unit check: (using and ) ✓, so is in Hz ✓.
- Factor-of-2 note (the clean version after the v5 correction): is a physical quantity (the decay rate of , ) and is independent of the bookkeeping convention for . Only changes: the clean time-domain version is ; [P1] Eq.(21)'s SSB version is — the famous 3 dB lives in , not in . (v3 had mistakenly stuffed into as if it were , making the linewidth 2× too large; fixed in v5 — MC adjudication in diffusion_dictionary and lab_23.) This page is consistent with lab_18 throughout (lab_18 generates directly with , so the mechanism check is unaffected by the mapping).
Companion simulation figure
simulations/lab_18_lorentzian.py synthesizes a carrier from a segment of Wiener phase (accumulated white noise, ),
estimates its spectrum with Welch, and overlays the Lorentzian theory and the asymptote;
the right panel directly measures to verify its linear growth ().

| Item | Value (lab_18) | Notes |
|---|---|---|
| Model | toy / illustrative (not transistor-level) | Wiener phase synthesized directly, labeled in normalized units |
| Carrier | (normalized) | Arbitrary carrier; only the relative offset matters |
| Phase diffusion | The single knob controlling the linewidth | |
| Phase increment | Wiener: variance | |
| 3-dB linewidth | Hz | FWHM; HWHM Hz |
| Near carrier | Flattens into a finite peak | No longer diverges |
| Far from carrier | asymptote | Consistent with [P1] Eq.(21) |
How to read the left panel: at large offsets, the blue curve (simulated spectrum) slides down along the red dotted line ( asymptote); approaching the carrier, the blue curve departs from , hugs the black dashed line (Lorentzian), and flattens; the green dash-dot line marks the HWHM position — exactly where the corner happens. One glance at this figure says it all: is the tail; the Lorentzian is the whole picture. How to read the right panel: the measured (blue) lands precisely on the line (black dashed), confirming that the phase really is a linearly diffusing random walk — the very root of the exponential autocorrelation and hence the Lorentzian.
Interactive: same L(f_ref) spec, two lineshapes, smeared away by RBW
The figure above is the white-FM case; beyond_lorentzian proves that under flicker FM the same machinery yields a near-Gaussian line core instead of a Lorentzian, with linewidths that can differ by two orders of magnitude for the same spec point. The widget below overlays both lineshapes on the same axes and lets you sweep a spectrum analyzer's resolution bandwidth (RBW) — see for yourself how the "flattening" gets smeared away by the instrument's own resolution once the RBW is too wide:
How to read it: fix a single spec point and toggle white FM / flicker FM to see how different FWHM_true is (tens-to-hundreds of Hz for white FM versus thousands of Hz for flicker FM — up to a hundredfold difference for the same number); then drag the RBW slider to the right and watch when the gray dashed curve (true lineshape) and the blue solid curve (RBW-convolved "measured" trace) part ways — once RBW is much larger than the linewidth, all you measure is a wide, featureless hump, and the flattening / near-Gaussian shoulder information is gone.
Core Python (full script: simulations/lab_18_lorentzian.py):
import numpy as np
from scipy.signal import welch
RNG = np.random.default_rng(18)
fs, n, f0, D = 4096.0, 2**20, 400.0, 2.0 # D = phase diffusion [rad^2/s]
t = np.arange(n) / fs
# Wiener phase: increments ~ N(0, 2 D dt) -> Var[phi(t)] = 2 D t
dphi = RNG.standard_normal(n) * np.sqrt(2 * D / fs)
phi = np.cumsum(dphi)
x = np.cos(2 * np.pi * f0 * t + phi)
f, P = welch(x, fs=fs, nperseg=2**16, scaling="density") # spectrum: the carrier is a Lorentzian
off = f - f0
lor = D / (D**2 + (2 * np.pi * off)**2) # Lorentzian theory
fwhm = D / np.pi # 3-dB linewidth = D/pi Hz
Worked examples
Both problems follow the strict format: problem → step-by-step substitution (with units) → result → dimension check → one-line Python verification. Example 1 works backward from a "real PN spec" to and the linewidth (the most design-flavored calculation); Example 2 works forward from the ISF quantities.
Example 1 (canonical: from 5 GHz, dBc/Hz @ 1 MHz back to and the linewidth): a GHz oscillator measures dBc/Hz with a slope. Find the phase diffusion and the 3-dB linewidth .
Step-by-step substitution:
-
Convert dBc/Hz back to linear. dBc/Hz means .
-
Get the phase PSD from . .
-
Extrapolate the coefficient using the shape. Single-sided ; at MHz: rad/s, . Hence
-
Solve for . .
-
Compute the 3-dB linewidth. .
Result: , 3-dB linewidth Hz kHz.
Intuition check: a 5 GHz oscillator at dBc/Hz@1MHz actually has a carrier that is a Lorentzian about 0.63 kHz wide — a fractional linewidth of relative to the 5 GHz carrier (equivalent to a on the order of ). If the measurement resolution bandwidth (RBW) is far wider than 0.63 kHz, what you see is a "spike" smeared flat by the RBW, and the Lorentzian flattening is completely invisible; to see it you need Hz-class RBW or cross-correlation methods. This is why everyday PN plots show only and never the Lorentzian plateau — the measurement resolution cannot get close enough to the carrier.
Dimension check: ; with and treating rad as dimensionless, ... which simplifies to , ✓.
import numpy as np
L_dbc = -100.0 # dBc/Hz @ 1 MHz, 1/f^2 slope
df = 1e6
L_lin = 10**(L_dbc/10) # = 1e-10 /Hz (intermediate value)
S_phi = 2 * L_lin # L ~ S_phi/2 -> rad^2/Hz
dw = 2*np.pi*df
D = S_phi * dw**2 / 4 # single-sided S_phi = 4D/dw^2 -> D
linewidth = D / np.pi # 3-dB linewidth [Hz]
print(round(D), "rad^2/s ;", round(linewidth), "Hz") # -> 1974 rad^2/s ; 628 Hz
Example 2 (forward from the ISF quantities to and the linewidth): use the numbers of the previous page's canonical Example B — pC, , . Find and the 3-dB linewidth.
Step-by-step substitution:
-
Compute .