UltrafastEngine

Pulse calculator: time-bandwidth product

A stand-alone calculator for the time-bandwidth product (TBP) of a pulse, its transform limit, how far it is from it (the stretch factor) and the group-delay dispersion (GDD) that would compress it. It is the same code behind the CLI (ultrafast pulse), Python (ultrafast.calc) and the C API (uf_pulse_calc), like the phase-matching calculator. Every simulation also reports timeBandwidthProduct in summary.json; this calculator is for numbers you have at hand.

Durations and bandwidths are intensity FWHM. The bandwidth is in Hz, or in metres together with the centre wavelength (Δν = c Δλ / λ², first order in Δλ / λ).

Shapes (TBP = Δt · Δν, intensity FWHM)

shape TBP exact form
gaussian 0.4413 2 ln 2 / π
sech2 0.3148 (2 ln(1+√2))² / π²
rectangular 0.8859 2 x / π with sin x / x = 1/√2

With the root-mean-square widths of the intensities, a Gaussian has σ_t σ_ν = 1/(4π) = 0.0796 (timeBandwidthProductRms).

Command line

ultrafast pulse shapes
ultrafast pulse limit --shape sech2 --duration 100e-15                 # transform-limited bandwidth
ultrafast pulse limit --shape gaussian --bandwidth-m 40e-9 --center 1030e-9
ultrafast pulse analyze --duration 300e-15 --bandwidth-m 10e-9 --center 1030e-9
ultrafast pulse measure --request measured.json --json                 # arrays: timeS, intensity, wavelengthM | frequencyHz, spectrum

analyze prints (300 fs, 10 nm at 1030 nm): TBP 0.848, 1.92 × the Gaussian limit, transform-limited duration 156 fs and a GDD magnitude of 14 400 fs².

Python

from ultrafast import calc
calc.tbp("sech2")                                                        # 0.3148
calc.limit("gaussian", duration=100e-15, center=800e-9)                  # bandwidth in Hz and m
r = calc.analyze(duration=300e-15, bandwidth_m=10e-9, center=1030e-9)
r["timeBandwidthProduct"], r["stretchFactor"], r["gddMagnitudeFs2"]
calc.measure(time_s, intensity, spectrum, wavelength_m=wl)               # from measured arrays (FWHM and rms products)

Results

key meaning
timeBandwidthProduct durationFwhmS × bandwidthFwhmHz
transformLimitProduct, ratioToLimit the product of the shape, and the measured product divided by it
transformLimitedDurationS, stretchFactor the shortest duration for this bandwidth, and durationFwhmS divided by it
gddMagnitudeFs2 Gaussian only: \|GDD\| = τ₀² / (4 ln 2) · √(stretch² − 1) for a linearly chirped Gaussian; the sign needs a phase measurement
timeBandwidthProductRms measure only: σ_t σ_ν of the intensity curves

A stretch factor below one means the shape, the widths or the units are wrong; the result says so. A product above the limit does not distinguish a linear chirp from higher-order phase or a structured spectrum: use the instruments or a retrieval for that.

Tests

PulseCalculatorTests (closed-form products, the unit conversion, the chirped-Gaussian GDD, a sampled Gaussian with the rms limit 1/(4π)) and python/tests/test_setup_and_calc.py.