Skip to main content

Computing the ISF Directly from the Waveform — the Three Methods of [P1]'s Appendix

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

Prerequisites: isf_definition (the definition of Γ\Gamma and the tangential-projection intuition), waveform_slope (the 1/slope1/\text{slope} heuristic and its divergence at waveform peaks) | Next: derivation_floquet_ppv (the rigorous adjoint/PPV — the source of this page's "ground truth"), lab_32 (the impulse method implemented on an equation-level ring)

The preceding pages define Γ(ω0τ)\Gamma(\omega_0\tau) very carefully, but they leave one intensely practical question open: given an actual oscillator in hand (a SPICE netlist, a set of equations, or a measured steady-state waveform), how do you actually COMPUTE Γ\Gamma? The appendix of [P1], "Calculation of the Impulse Sensitivity Function" ([P1] pp.192–193), gives three methods that form a spectrum from most accurate to fastest. This page transcribes all three verbatim, derives each step by step, and states each one's failure conditions clearly — then stages a three-way duel on a single van der Pol oscillator to turn "how far apart are they" into numbers.

Physical intuition (conclusion first): the three methods are really three tiers of the same thing. Method A (impulse injection) is "just run the experiment": poke the oscillator, measure the phase shift, assume nothing — so it is the most accurate and the slowest. Method B (closed form) replaces the experiment with geometry: it assumes that of the displacement you poke into the state, only the component tangent to the trajectory survives as phase — the experiment collapses into one inner product, computable from a single period of the waveform. Method C (first derivative) cuts once more: it assumes the denominator (the squared "speed" along the trajectory) is roughly constant, so Γ\Gamma becomes directly proportional to the waveform slope. Every cut buys speed and costs one more assumption that can fail. The core lesson of this page: Method B's tangential projection quietly assumes that "decaying amplitude perturbations leave no phase behind" — the moment amplitude-to-phase coupling (AM→PM) appears, it starts leaking.

Method A: direct measurement of the impulse response ([P1] Appendix A, p.192)

[P1]'s description on p.192 (transcribed): inject an impulse at different relative phases of the oscillation waveform and let the oscillator run for a few cycles; by sweeping the impulse injection time across one cycle and measuring the resulting time shift Δt\Delta t, you obtain hϕ(t,τ)h_\phi(t,\tau), using the conversion

Δϕ=2πΔtT,\Delta\phi=2\pi\,\frac{\Delta t}{T},

where TT is the period of oscillation ([P1] p.192; this is exactly the phase–time conversion used in impulse_to_phase_shift). The paper adds that many SPICE implementations can perform the sweep automatically, and since each impulse needs only a few simulated cycles, it executes quickly; once hϕ(t,τ)h_\phi(t,\tau) is found, "the ISF is calculated by multiplication with qmaxq_{max}" (compare [P1] Eq.(10): hϕ=Γ/qmaxu(tτ)h_\phi=\Gamma/q_{max}\cdot u(t-\tau), so Γ=qmaxhϕ\Gamma=q_{max}h_\phi is the step height).

[P1]'s own verdict (p.192, verbatim): "This method is the most accurate of the three methods presented."the most accurate of the three. The price is NphaseN_{phase} transient runs (one per injection phase).

  • Unit check: Δϕ=2π[s]/[s]=\Delta\phi=2\pi\,[\text{s}]/[\text{s}]= rad ✓; Γ=qmaxhϕ\Gamma=q_{max}\cdot h_\phi, [C][rad/C]=[C]\cdot[\text{rad/C}]= dimensionless ✓.
  • This site has implemented the method three times: a sinusoidal oscillator (lab_04, error ~0.001), a van der Pol (lab_15), and a MOS Level-1 equation-level ring (lab_32).
  • Mind the wrap-around: fold Δt\Delta t back into [T/2,T/2)[-T/2,\,T/2) before converting, or you are off by a whole cycle (an implementation detail of lab_15/lab_32).

Method B: a closed form from the waveform ([P1] Appendix B, pp.192–193)

Step 1: project the perturbation onto the direction of motion — Eq. (31)

Consider the state-space trajectory of an nnth-order system ([P1] Fig. 29, p.192: "State-space trajectory of an nnth-order oscillator"). The effect of a group of external impulses is a perturbation vector ΔX\Delta\vec X that instantly moves the state to X+ΔX\vec X+\Delta\vec X. The paper's key assumption sentence (p.192, verbatim): "As discussed earlier, amplitude variations eventually die away, but phase variations do not." To compute the equivalent time shift, project the perturbation onto the normalized velocity vector ([P1] Eq.(31), p.192):

l=ΔXX˙X˙l=\Delta\vec X\cdot\frac{\dot{\vec X}}{\bigl|\dot{\vec X}\bigr|}
  • ll is the "equivalent displacement along the trajectory" (the paper's wording), and X˙\dot{\vec X} is the first derivative of the state vector (the trajectory's "velocity").
  • Unit check: with all states as voltages, [ΔX]=[\Delta\vec X]= V and X˙/X˙\dot{\vec X}/|\dot{\vec X}| dimensionless → ll in V ✓ (a displacement carries the state's units).
  • Hidden assumption #1: the inner product requires all state components to share one unit / one scale. If the state mixes V and A (e.g., an LC's vC,iLv_C,i_L) you must normalize first — and the choice of normalization changes the answer (see "failure conditions").

The figure below replicates Fig. 29's state-space picture (left) and Fig. 30's three-method comparison (right — the Method C section refers back to it), computed on this site's van der Pol toy:

Conceptual replica of [P1] Fig. 29 and Fig. 30: left, an actually-integrated van der Pol μ=2.0 state-space trajectory (thick limit cycle, state vector, perturbation vector, re-converging trajectory and Δφ); right, the three ISF computation methods on μ=0.2 in the paper's monochrome style

Conceptual replica, not a digitization of the originals. Left: corresponds to [P1] Fig. 29 (p.192), original caption verbatim: "State-space trajectory of an nnth-order oscillator." — the original is an nn-dimensional schematic hand drawing (no specific system); the replica instead actually computes a van der Pol (μ=2.0): thick line = limit cycle, thin line = the genuinely integrated re-converging trajectory after a kick Δx=0.45\Delta x=0.45 on the xx axis (deliberately exaggerated for legibility), with Δϕ\Delta\phi marked as the same-time gap between the two trajectories and measured from late zero crossings as 0.768-0.768 rad (0.122-0.122 cycles). Right: corresponds to [P1] Fig. 30 (p.193), original caption verbatim: "ISF's obtained from different methods.", original plot title "Calculation of Impulse Sensitivity Function" — the original's oscillator is not specified; the replica uses the same μ=0.2 vdP (the same machinery as the duel below), with the original's line styles: solid = 1st Method (A), dotted = 2nd Method (B), dashed = 3rd Method (C), and phase zero at the waveform minimum so the positive lobe precedes the negative one (the original's ordering). Honest difference: in the paper the 1st and 2nd methods nearly coincide and the dashed 3rd deviates (an NN-identical-stage ring keeps Eq.(36)'s denominator constant); on this single-node vdP it is Methods B and C that nearly coincide (rms gap 0.134), while the impulse truth A departs near the waveform extrema (AM→PM, see the duel below). Numbers: Γrms\Gamma_{rms} A/B/C =0.7777=0.7777/0.70970.7097/0.67580.6758; rms BA=0.2365|B-A|=0.2365, rms CA=0.3219|C-A|=0.3219. Script: simulations/fig_p1_fig2930_replica.py (run with PYTHONPATH=. python simulations/fig_p1_fig2930_replica.py, about 1 s).

Step 2: displacement ÷ speed = time shift — Eq. (32)

A displacement ll along the trajectory is equivalent to a time shift of "ll divided by the speed X˙|\dot{\vec X}|" ([P1] Eq.(32), p.193):

Δt=lX˙=ΔXX˙X˙2\Delta t=\frac{l}{\bigl|\dot{\vec X}\bigr|}=\Delta\vec X\cdot\frac{\dot{\vec X}}{\bigl|\dot{\vec X}\bigr|^{2}}
  • Unit check: [V][V/s]/[V/s]2=[V]/[V/s]=[\text{V}]\cdot[\text{V/s}]/[\text{V/s}]^2=[\text{V}]/[\text{V/s}]= s ✓.
  • Note the denominator becomes a square: one factor from normalizing the tangent vector, one from converting displacement to time. This is exactly the "divide by z/θ2\vert\partial\mathbf z/\partial\theta\vert^2" step in the ideal-LC derivation of isf_definition.

Step 3: time shift → phase — Eq. (33)

([P1] Eq.(33), p.193):

Δϕ=2πΔtT=2πT(ΔXX˙X˙2).\Delta\phi=2\pi\,\frac{\Delta t}{T}=\frac{2\pi}{T}\left(\Delta\vec X\cdot\frac{\dot{\vec X}}{\bigl|\dot{\vec X}\bigr|^{2}}\right).

Since 2π/T=ω02\pi/T=\omega_0, this is the "state-space projection" form often quoted: Δϕ=ω0(ΔXX˙)/X˙2\Delta\phi=\omega_0\,(\Delta\vec X\cdot\dot{\vec X})/|\dot{\vec X}|^2.

Step 4: the special case of node-voltage states — Eq. (34)

If the state variables are node voltages and the impulse hits node ii, the voltage jump is given by [P1] Eq.(9) (ΔVi=Δqi/Ci\Delta V_i=\Delta q_i/C_i), and Eq.(33) reduces to ([P1] Eq.(34), p.193):

Δϕi=2πTΔqiCiv˙iv˙2\Delta\phi_i=\frac{2\pi}{T}\cdot\frac{\Delta q_i}{C_i}\cdot\frac{\dot v_i}{\bigl|\dot{\vec v}\bigr|^{2}}

where v˙2\vert\dot{\vec v}\vert^2 is the norm of the first derivative of the waveform vector and v˙i\dot v_i is the derivative of the ii-th node voltage (definitions verbatim from p.193).

  • Step-by-step reading: ΔX\Delta\vec X has only its ii-th component nonzero (=Δqi/Ci=\Delta q_i/C_i), so the inner product ΔXv˙\Delta\vec X\cdot\dot{\vec v} keeps only the v˙i\dot v_i term.
  • Unit check: [rad/s][C]/[F][V/s][V/s]2=[rad/s][V][V/s]=\dfrac{[\text{rad/s}]\cdot[\text{C}]/[\text{F}]\cdot[\text{V/s}]}{[\text{V/s}]^2}=\dfrac{[\text{rad/s}]\cdot[\text{V}]}{[\text{V/s}]}= rad ✓.

Step 5: rewrite with the normalized waveform — Eqs. (35), (36)

Substitute the normalized waveform ff of [P1] Eq.(1) (vi=Vmaxfi(x)v_i=V_{max}\,f_i(x), x=ω0τx=\omega_0\tau, with ff's derivatives taken with respect to xx). Step by step:

v˙i=ddt[Vmaxfi(x)]=Vmaxfi(x)ω0(chain rule, dx/dt=ω0)v˙2=j(Vmaxfjω0)2=ω02Vmax2f2(equal amplitudes Vmax: the identical-stage assumption)Δϕ=ω0ΔqCiVmaxfiω0ω02Vmax2f2=ΔqCiVmaxfif2(every ω0 cancels)\begin{aligned} \dot v_i&=\frac{d}{dt}\bigl[V_{max}f_i(x)\bigr]=V_{max}\,f_i'(x)\,\omega_0 &&(\text{chain rule},\ dx/dt=\omega_0)\\[4pt] \bigl|\dot{\vec v}\bigr|^{2}&=\sum_j\bigl(V_{max}f_j'\omega_0\bigr)^2=\omega_0^2V_{max}^2\,\bigl|\vec f\,'\bigr|^{2} &&(\text{equal amplitudes }V_{max}\text{: the identical-stage assumption})\\[4pt] \Delta\phi&=\omega_0\cdot\frac{\Delta q}{C_i}\cdot\frac{V_{max}f_i'\,\omega_0}{\omega_0^2V_{max}^2\bigl|\vec f\,'\bigr|^{2}} =\frac{\Delta q}{C_iV_{max}}\cdot\frac{f_i'}{\bigl|\vec f\,'\bigr|^{2}} &&(\text{every }\omega_0\text{ cancels}) \end{aligned}

Recognizing CiVmax=C_iV_{max}= the node's maximum charge swing gives ([P1] Eq.(35), p.193, transcribed verbatim):

Δϕ=Δqqifif2\Delta\phi=\frac{\Delta q}{q_i}\cdot\frac{f_i'}{\bigl|\vec f\,'\bigr|^{2}}

Notation note: [P1] Eq.(35) prints qiq_i — the maximum charge swing of node ii, i.e., the main text's (and this site's) qmaxq_{max} for that node. fif_i' is "the derivative of the normalized waveform on node ii" with respect to the phase xx (p.193, verbatim).

Comparing against the definition Δϕ=ΓΔq/qmax\Delta\phi=\Gamma\,\Delta q/q_{max}, the ISF reads off directly ([P1] Eq.(36), p.193):

Γi(x)=fif2=fij=1nfj2\Gamma_i(x)=\frac{f_i'}{\bigl|\vec f\,'\bigr|^{2}}=\frac{f_i'}{\displaystyle\sum_{j=1}^{n}f_j'^{\,2}}
  • Unit check: ff' is dimensionless (a dimensionless waveform differentiated with respect to rad) → Γ\Gamma dimensionless ✓.
  • [P1]'s observation after Eq.(36) (p.193 — important; paraphrase plus the key sentence): this expression is maximum during transitions (where the derivative of ff is maximum), and that maximum value is inversely proportional to the maximum derivative — verbatim: "waveforms with larger slope show a smaller peak in the ISF function." This is the original source of the entire design intuition of waveform_slope.

Step 6: the second-order special case — Eq. (37), and the exact check on f=cosf=\cos

For a second-order system one can use the normalized waveform ff and its derivative ff' as the state variables, so the denominator of Eq.(36) keeps only two terms ([P1] Eq.(37), p.193):

Γ(x)=ff2+f2\Gamma(x)=\frac{f'}{f'^{\,2}+f''^{\,2}}

where ff'' is the second derivative of ff (defined on p.193). Verify the ideal sinusoid by hand ([P1]'s own sanity check on p.193 — here with the algebra written out): take f(x)=cosxf(x)=\cos x,

f(x)=sinx,f(x)=cosx,f2+f2=sin2x+cos2x=1(Pythagorean identity: the denominator is identically 1),Γ(x)=sinx1=sinx.\begin{aligned} f'(x)&=-\sin x,\qquad f''(x)=-\cos x,\\[4pt] f'^{\,2}+f''^{\,2}&=\sin^2x+\cos^2x=1\qquad(\text{Pythagorean identity: the denominator is identically }1),\\[4pt] \Gamma(x)&=\frac{-\sin x}{1}=-\sin x. \end{aligned}

The paper's conclusion (p.193, verbatim): "In the case of an ideal sinusoidal oscillator f=cos(x)f=\cos(x), so that Γ(ωt)=sin(ωt)\Gamma(\omega t)=-\sin(\omega t), which is consistent with the argument of Section III." Numerically we verify this to machine precision (simulations/fig_isf_three_methods.py prints max |Eq.(37) on cos - (-sin)| = 2.2e-16).

This step also resolves the "1/slope1/\text{slope} diverges at the peak" paradox left open by waveform_slope:

  • On transitions (f2f2f'^2\gg f''^2): Γf/f2=1/f\Gamma\approx f'/f'^{\,2}=1/f' — precisely the regime where the 1/slope1/\text{slope} heuristic applies.
  • Near peaks (f0f'\to0): the numerator f0f'\to0 while the denominator is held up by f2f''^{\,2}, so Γf/f20\Gamma\approx f'/f''^{\,2}\to0bounded, and tending to 0, no divergence.
  • So 1/slope1/\text{slope} is the shadow of Eq.(37) in its slope-dominated limit; Eq.(37) is its rigorous parent formula, interpolating continuously between the two limits.
  • But beware: Eq.(37) has its own sick point — if at some phase ff' and ff'' approach 0 simultaneously (the waveform has a dead zone where both slope and curvature are flat), the denominator collapses and Γ\Gamma spikes (the waveform of worked example 2 below shows a spurious peak of Γ22.8\vert\Gamma\vert\approx22.8 at x2.81x\approx2.81). The higher-order form Eq.(36) is safer, its denominator being propped up by the other nodes' fj2f_j'^{\,2}.

Method C: the first-derivative approximation — Eq. (38) ([P1] Appendix C, p.193)

The paper (p.193, paraphrase): this is a simplified version of the second approach. In certain cases the denominator of Eq.(36) shows little variation and can be approximated by a constant — the concrete example being a ring oscillator with NN identical stages (the stage transitions take turns, so jfj2\sum_j f_j'^2 is nearly constant). The denominator may then be approximated by fmax2f_{max}'^{\,2} ([P1] Eq.(38), p.193):

Γi(x)=fi(x)fmax2\Gamma_i(x)=\frac{f_i'(x)}{f_{max}'^{\,2}}

The ISF is directly proportional to the waveform slope (divided by one constant). [P1]'s honest verdict (p.193, verbatim): "Although this method is approximate, it is the easiest to use and allows a designer to rapidly develop important insights into the behavior of an oscillator." [P1] Fig. 30 (p.193, "ISF's obtained from different methods") plots the three methods together; Method C (dashed) deviates in lobe height and detail but gets the shape right (see the right half of the replica figure in Method B, Step 1, for its conceptual replica).

  • It is the engine of this site's interactive tool: interactive tool 7, the IsfSandbox (draw a waveform → see its ISF) uses precisely the [P2]-appendix variant of this slope approximation (each edge normalized by its own maximum slope, which is what lets rise/fall asymmetry produce c00c_0\neq0); this page is that widget's rigorous pedigree.
  • The ring closed form of [P2] App. B (Eqs.(52)–(55), Γrms=2π2/(3η3)N1.5\Gamma_{rms}=\sqrt{2\pi^2/(3\eta^3)}\,N^{-1.5}, see rms_isf) is essentially the result of integrating Method C's triangular ISF.
  • Failure: if the denominator jfj2\sum_j f_j'^2 varies strongly with phase (single-node view, few stages, badly distorted waveform), the constant-denominator approximation collapses — the μ=2 van der Pol in the duel below is exactly that case.

The three-method duel: one van der Pol, three answers — how far apart?

Theory done; now numbers. On a van der Pol oscillator (x¨μ(1x2)x˙+x=0\ddot x-\mu(1-x^2)\dot x+x=0; the same toy as lab_15 and derivation_floquet_ppv), we kick charge into the xx axis (xx is this toy's "node voltage" — the vdP rewrites as a parallel RLC plus a nonlinear conductance with x=vCx=v_C, and a current impulse instantaneously changes exactly xx), and put the three methods on stage:

  • Method A (ground truth): impulse measurement at 24 phases (reusing lab_25's extract_isf_impulse_axis, machinery already cross-verified against the adjoint/PPV to rms 0.0023).
  • Method B: Eq.(37) with f=x/Af=x/A, f=y/(ω0A)f'=y/(\omega_0A), f=y˙/(ω02A)f''=\dot y/(\omega_0^2A), needing only one period of the waveform.
  • Method C: Eq.(38), f/fmax2f'/f_{max}'^{\,2}.
  • References: the harmonic limit sinθ-\sin\theta (phase θ=0\theta=0 aligned to the waveform maximum, i.e., the fcosθf\approx\cos\theta convention) and the rigorous adjoint/PPV curve (lab_25; the PPV is external literature, [E2] Demir 2000, not among the site's 5 PDFs).

The three ISF computation methods dueling on a van der Pol at μ=0.2 and μ=2.0: Methods B/C get the near-harmonic shape right but miss the AM→PM contribution near the peaks, and visibly fail under strong nonlinearity

Parameter table: μ{0.2,2.0}\mu\in\{0.2,\,2.0\}; impulse Δq=0.02\Delta q=0.02 (Δq/qmax1%\Delta q/q_{max}\approx1\%, qmax ⁣= ⁣A2q_{max}\!=\!A\approx2); 24 injection phases; RK4 step 2.5×1032.5\times10^{-3} (impulse runs) / T/6000T/6000 (waveform grid); everything in normalized dimensionless units. Pedagogical toy model, not transistor-level. Full script: simulations/fig_isf_three_methods.py (run with PYTHONPATH=. python simulations/fig_isf_three_methods.py, about 3 s). Measured output:

--- mu = 0.2 ---
T = 6.2989 # -> 6.2989 (the 2π(1+μ²/16) prediction)
A = 2.0004 # -> 2.0004 (harmonic limit A=2)
Gamma_rms (Method B) = 0.7097 # -> 0.7097 (≈ the true-LC 1/√2=0.7071, not the representative 0.5)
Gamma_rms (Method A points) = 0.7777 # -> 0.7777 (the truth sits 9% above Method B)
peak |Gamma_B| = 0.9762 # -> 0.9762
peak |Gamma_A| = 1.0144 # -> 1.0144
rms |B - A(impulse)| = 0.2365 # -> 0.2365 (Method B's projection error)
rms |C - A(impulse)| = 0.3219 # -> 0.3219
rms |B - (-sin)| = 0.078 # -> 0.078 (Method B essentially IS −sin)
rms |A - (-sin)| = 0.28 # -> 0.28 (the truth left −sin long ago)
--- mu = 2.0 ---
Gamma_rms (Method B) = 1.9898 # -> 1.9898
Gamma_rms (Method A points) = 3.2151 # -> 3.2151 (Method B underestimates by 38%, ≈4.2 dB of phase noise)
peak |Gamma_A| = 5.0011 # -> 5.0011
rms |B - A(impulse)| = 2.072 # -> 2.072 (off the rails)
rms |C - A(impulse)| = 3.1803 # -> 3.1803 (collapse: one node, no N-stage sum to prop the denominator)
rms |B - A(impulse)| at mu=0.05 = 0.0586 # -> 0.0586 (shrink μ 4×, error shrinks 4.0×: error ∝ O(μ))
rms |B - PPV| (mu=0.2) = 0.237 # -> 0.237 (impulse ≡ PPV to 0.002, so the whole gap is Method B's projection error)

How to read the figure (and the numbers):

  1. Left panel (μ=0.2, near-harmonic): Method B (blue) and Method C (green) are essentially sinθ-\sin\theta (black dashed, rms gap 0.078), and Γrms\Gamma_{rms} lands on the true-LC 1/21/\sqrt2 (0.7097 vs 0.7071 — note this is the true-LC value 1/21/\sqrt2, not the site's representative value 0.5). But the measured impulse points (red circles) and the rigorous PPV (purple dash-dot) coincide with each other and systematically leave Method B near the waveform peaks: at the peak, Method B says Γ0.11\Gamma\approx-0.11; the truth is 0.59-0.59.
  2. That gap is not numerical noise — it is Method B's principled omission. Recall the assumption sentence of Step 1: "amplitude variations eventually die away, but phase variations do not" — it assumes that while an amplitude perturbation decays, it drags no phase along. The van der Pol's amplitude, however, back-modulates the instantaneous frequency (isochron twist, AM→PM): a radial offset Δr\Delta r decays as eμte^{-\mu t}, detunes the frequency by O(μΔr)O(\mu\Delta r) while decaying, and accumulates a phase O(μΔreμt)dt=O(Δr)\int O(\mu\Delta r e^{-\mu t})dt=O(\Delta r)the μ\mu of the decay rate and the μ\mu of the modulation strength cancel, leaving a finite residual phase. Only the oblique adjoint/PPV projection books this entry; the orthogonal tangential projection cannot (see derivation_floquet_ppv; this criterion is external literature, [E2]). Numerical evidence: dropping μ\mu from 0.2 to 0.05 (4× smaller) shrinks the rms gap from 0.2365 → 0.0586 (exactly 4.0× smaller) — error O(μ)\propto O(\mu), concentrated exactly where Method B predicts Γ0\Gamma\approx0 (the peaks; precisely the "high AM–PM leaves residual phase even for peak injection" cell of the failure table in isf_definition).
  3. Right panel (μ=2.0, strongly nonlinear): Method B's lobe height (3.85 vs the true 5.00), position, and width are all wrong, and Γrms\Gamma_{rms} is underestimated by 38%; via LΓrms2\mathcal L\propto\Gamma_{rms}^2 ([P1] Eq.(21) — its 4Δω24\Delta\omega^2 denominator is the SSB bookkeeping convention; the clean time-domain derivation gives 2Δω22\Delta\omega^2, see white_noise_to_phase_noise) that is an underestimate of about 4.2 dB of phase noise. Method C (green) fares worse: the relaxation waveform's huge fmaxf'_{max} squashes the whole ISF toward 0 (rms gap 3.18).
  4. Engineering conclusion: for sign-off numbers use Method A (or the adjoint/PPV); use Method B for a "one-period quick look at the shape", quantitatively trustworthy on near-harmonic, low-AM–PM oscillators (error O(μ)\sim O(\mu)); use Method C only in the "NN identical ring stages" scenario it was invented for (the dual-lobe ISF of lab_32 is the equation-level validation of that scenario).

Worked examples

Example 1: Γ(π/6)\Gamma(\pi/6) via Eq.(37), connected to canonical Example A

Problem: ideal sinusoid f(x)=cosxf(x)=\cos x. Use the closed form Eq.(37) to find Γ(π/6)\Gamma(\pi/6), then with qmax=1q_{max}=1 pC, Δq=1\Delta q=1 fC, f0=5f_0=5 GHz compute the phase step and timing error.

Step-by-step substitution (with units):

f(π/6)=sinπ6=0.5,f(π/6)=cosπ6=0.8660,f2+f2=0.25+0.75=1(the sinusoid’s denominator is identically 1),Γ(π/6)=0.51=0.5(dimensionless),Δϕ=ΓΔqqmax=0.5×(1×1015C)1×1012C=5×104 rad,Δt=Δϕ2πf0=5×104 rad2π×5×109 Hz=1.59×1014 s=15.9 fs.\begin{aligned} f'(\pi/6)&=-\sin\frac{\pi}{6}=-0.5,\qquad f''(\pi/6)=-\cos\frac{\pi}{6}=-0.8660,\\[4pt] f'^{\,2}+f''^{\,2}&=0.25+0.75=1\qquad(\text{the sinusoid's denominator is identically }1),\\[4pt] \Gamma(\pi/6)&=\frac{-0.5}{1}=-0.5\qquad(\text{dimensionless}),\\[4pt] \Delta\phi&=\frac{\vert\Gamma\vert\,\Delta q}{q_{max}}=\frac{0.5\times(1\times10^{-15}\,\text{C})}{1\times10^{-12}\,\text{C}}=5\times10^{-4}\ \text{rad},\\[4pt] \Delta t&=\frac{\Delta\phi}{2\pi f_0}=\frac{5\times10^{-4}\ \text{rad}}{2\pi\times5\times10^{9}\ \text{Hz}}=1.59\times10^{-14}\ \text{s}=15.9\ \text{fs}. \end{aligned}
  • Result: the closed form gives Γ=0.5\Gamma=-0.5 at θ=π/6\theta=\pi/6 — exactly the site's canonical Example A: Γ=0.5\vert\Gamma\vert=0.5, 5×1045\times10^{-4} rad, 15.9 fs.
  • Dimension check: Γ\Gamma dimensionless ✓; [rad]/[rad/s]=[s][\text{rad}]/[\text{rad/s}]=[\text{s}] ✓.
  • Python verification:
import numpy as np
th = np.pi/6
fp, fpp = -np.sin(th), -np.cos(th)
g = fp/(fp**2 + fpp**2)
dphi = abs(g)*1e-15/1e-12
print(round(g, 4), round(dphi, 6), round(dphi/(2*np.pi*5e9)*1e15, 1))
# -> -0.5 0.0005 15.9 (Γ, Δφ [rad], Δt [fs])

Example 2: with second-harmonic distortion, by how much does Method C overshoot Method B?

Problem: a waveform with 30% second harmonic: f(x)=cosx+0.3cos2xf(x)=\cos x+0.3\cos 2x. Near the zero crossing, at x=π/2x=\pi/2, compute Γ\Gamma with Method B (Eq.(37)) and Method C (Eq.(38)) and compare.

Step-by-step substitution: first the derivatives,

f(x)=sinx0.6sin2x,f(x)=cosx1.2cos2x.f'(x)=-\sin x-0.6\sin 2x,\qquad f''(x)=-\cos x-1.2\cos 2x.

At x=π/2x=\pi/2: sinx=1\sin x=1, sin2x=0\sin 2x=0, cosx=0\cos x=0, cos2x=1\cos 2x=-1, so

f=1,f=+1.2,ΓB=ff2+f2=11+1.44=0.4098,fmax2=1.9247(numerical extremum: fmax=1.3873 at x58),ΓC=ffmax2=11.9247=0.5196,ΓCΓB=1.27.\begin{aligned} f'&=-1,\qquad f''=+1.2,\\[4pt] \Gamma_B&=\frac{f'}{f'^{\,2}+f''^{\,2}}=\frac{-1}{1+1.44}=-0.4098,\\[4pt] f_{max}'^{\,2}&=1.9247\quad(\text{numerical extremum: }f'_{max}=1.3873\text{ at }x\approx58^\circ),\\[4pt] \Gamma_C&=\frac{f'}{f_{max}'^{\,2}}=\frac{-1}{1.9247}=-0.5196,\qquad \frac{\Gamma_C}{\Gamma_B}=1.27. \end{aligned}
  • Result: with only 30% harmonic distortion, Method C already overshoots Method B by 27% at the ZC — because it forces "constant denominator" onto a waveform whose denominator does vary with phase. In Γ2\Gamma^2 terms that is roughly a 2 dB phase-noise error source.
  • Bonus (Method B's own sick point): on this waveform, at x2.81x\approx2.81 both ff' and ff'' pass near 0 simultaneously, and Eq.(37)'s Γ\vert\Gamma\vert spikes to 22.8 (a spurious peak) — Method B "cures the 1/slope1/\text{slope} divergence at the peak", but its own denominator can also die; scan f2+f2f'^{\,2}+f''^{\,2} for near-zeros before trusting it.
  • Dimension check: dimensionless throughout ✓ (ff, ff', ff'', Γ\Gamma all dimensionless).
  • Python verification:
import numpy as np
x = np.linspace(0, 2*np.pi, 200001)
fp = -(np.sin(x) + 0.6*np.sin(2*x))
fpp = -(np.cos(x) + 1.2*np.cos(2*x))
i = np.argmin(np.abs(x - np.pi/2))
gB = fp[i]/(fp[i]**2 + fpp[i]**2)
gC = fp[i]/np.max(fp**2)
print(round(gB,4), round(gC,4), round(gC/gB,4), round(np.max(fp**2),4))
# -> -0.4098 -0.5196 1.2677 1.9247 (Γ_B, Γ_C, ratio, f'²max)

Applicability and failure conditions (all three methods)

MethodNeedsCostAccuracyFailure conditions
A impulse (p.192)re-runnable transients (simulator or equations)NphaseN_{phase} transientsmost accurate of the three ([P1]'s words), cross-verified vs adjoint/PPV to rms ~0.002Δq\Delta q too large (nonlinearity), unwrapped Δt\Delta t, not yet in steady state
B closed form (Eqs.(31)–(37))one period of the steady-state waveform + derivativesone algebraic passerror O(μ)\sim O(\mu) for near-harmonic, low-AM–PM oscillators; here rms 0.24 at μ=0.2AM→PM (isochron twist): the orthogonal tangential projection misses the phase accumulated while the amplitude decays; mixed state units / scale choices change the answer; the denominator dies where ff' and ff'' vanish together
C first derivative (Eq.(38))one period of waveform slopecheapestqualitatively good inside "N identical ring stages" ([P1] Fig.30)denominator jfj2\sum_j f_j'^2 varies strongly with phase: single node, few stages, strong distortion (here rms 3.18 at μ=2); rise/fall asymmetry needs per-edge normalization ([P2] App., the IsfSandbox's approach)

Key takeaways

  • [P1]'s appendix gives three ways to compute the ISF: A impulse injection (most accurate) → B closed form Γ=f/(f2+f2)\Gamma=f'/(f'^{\,2}+f''^{\,2}) (one period of waveform suffices) → C slope approximation Γ=f/fmax2\Gamma=f'/f_{max}'^{\,2} (fastest, ring-specific) ([P1] Eqs.(31)–(38), pp.192–193).
  • Method B's chain: project onto the unit tangent (Eq.(31)) → divide by speed to get time (Eq.(32)) → multiply by 2π/T2\pi/T to get phase (Eq.(33)) → node-voltage special case (Eq.(34)) → normalized waveform (Eqs.(35)(36)) → second-order special case (Eq.(37)).
  • Substituting f=cosxf=\cos x into Eq.(37): the denominator sin2+cos2=1\sin^2+\cos^2=1, so Γ=sinx\Gamma=-\sin x exactly — at the peak the numerator vanishes and the result stays bounded, resolving the 1/slope1/\text{slope} heuristic's divergence; 1/slope1/\text{slope} is just its limit where f2f2f'^2\gg f''^2.
  • Method B's original sin is the orthogonal projection: it assumes "decaying amplitude leaves no phase". Turn on AM→PM (a van der Pol suffices) and the truth departs from Method B, with error O(μ)\propto O(\mu) concentrated at the peaks; under strong nonlinearity (μ=2) Γrms\Gamma_{rms} is underestimated by 38% ≈ 4.2 dB of phase noise. The rigorous fix is the adjoint/PPV oblique projection (external literature).
  • Method C is the engine of the IsfSandbox and of [P2]'s ring closed form; leave the "N identical stages" scenario and it collapses.
  • Practical order: build intuition with C/B first; get sign-off numbers from A or the adjoint.

Further reading

  • The definition of Γ\Gamma and the tangential-projection intuition: isf_definition
  • The 1/slope1/\text{slope} heuristic (the shadow of this page's Eq.(37)): waveform_slope
  • The rigorous adjoint/PPV (the full mathematics of Method B's missing term): derivation_floquet_ppv (external literature, [E2] Demir 2000)
  • Three implementations of the impulse method: lab_04 (sinusoid), lab_15 (van der Pol), lab_32 (MOS Level-1 ring)
  • The slope approximation, interactive: interactive tool 7, the IsfSandbox
  • The ring Γrms\Gamma_{rms} closed form (the integral of Method C): rms_isf