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 and the tangential-projection intuition), waveform_slope (the 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 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 ? 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 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 , you obtain , using the conversion
where 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 is found, "the ISF is calculated by multiplication with " (compare [P1] Eq.(10): , so 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 transient runs (one per injection phase).
- Unit check: rad ✓; , 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 back into 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 th-order system ([P1] Fig. 29, p.192: "State-space trajectory of an th-order oscillator"). The effect of a group of external impulses is a perturbation vector that instantly moves the state to . 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):
- is the "equivalent displacement along the trajectory" (the paper's wording), and is the first derivative of the state vector (the trajectory's "velocity").
- Unit check: with all states as voltages, V and dimensionless → 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 ) 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](/isf-teaching-site/en/assets/images/p1_fig2930_replica-ac6c97ccbe184c706ba02a2e2c1b9c0f.png)
Conceptual replica, not a digitization of the originals. Left: corresponds to [P1] Fig. 29 (p.192), original caption verbatim: "State-space trajectory of an th-order oscillator." — the original is an -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 on the axis (deliberately exaggerated for legibility), with marked as the same-time gap between the two trajectories and measured from late zero crossings as rad ( 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 -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: A/B/C //; rms , rms . 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 along the trajectory is equivalent to a time shift of " divided by the speed " ([P1] Eq.(32), p.193):