Oscillator Frequency Drift Estimator

Estimate drift in ppm and Hz from temperature change, aging, supply variation, and load capacitance shifts.

How to Use

  1. Enter the oscillator’s nominal frequency and choose the unit.
  2. Enter drift sources you care about (temperature, aging, supply, load capacitance).
  3. Select a combination method: Worst-case (stack) or RSS (root-sum-square).
  4. Open Show Work for formulas and intermediate steps.
  5. Use Share Link to generate a restoreable URL (only on click).

This tool uses a practical linear approximation. Real crystals can be non-linear vs temperature (and TCXO/OCXO behavior varies by part).

Drift Dashboard
Live estimate updates as you type (no URL changes).
Total Drift
Δf
Time Error
Status:
Temperature contribution
Aging contribution
Supply contribution
Load cap contribution
Inputs & Settings
Enter what you know from the datasheet. Leave optional sources blank to ignore them.
Common: 32.768 kHz, 1 MHz, 16 MHz, 26 MHz, 100 MHz
Worst-case is conservative; RSS assumes independent sources.
If you know min/max, use half-range from nominal (approx).
Use datasheet slope estimate. Leave blank if you only want aging/supply/load.
Used for aging (ppm/year) and time error estimate.
If your datasheet gives “first year” and “thereafter”, use a weighted average.
Optional: supply sensitivity applies mainly to oscillators/RC, some TCXO/VCXO specs.
If datasheet gives ppm across a range, convert to ppm/V slope (approx).
Optional: includes parasitics and tolerance drift. Use absolute change.
If you don’t know, leave blank (ignored). Sensitivity varies widely by crystal + network.

Show Work (step-by-step)
Work is shown in base units where applicable. ppm means “parts per million” of the nominal frequency.

Reference

  • ppm to Hz: Δf(Hz) = f₀(Hz) × (ppm ÷ 1,000,000)
  • Temp drift (linear): ppmT = (ppm/°C) × ΔT
  • Aging: ppmA = (ppm/year) × years
  • Supply: ppmV = (ppm/V) × ΔV
  • Load cap: ppmCL = (ppm/pF) × ΔCL
  • Worst-case combine: |ppm| = |ppmT| + |ppmA| + |ppmV| + |ppmCL|
  • RSS combine: |ppm| = √(ppmT² + ppmA² + ppmV² + ppmCL²)
  • Time error: error(seconds) ≈ elapsed(seconds) × (ppm ÷ 1,000,000)

For best accuracy, use the exact datasheet spec method (some use peak-to-peak, some use ±, some specify across temperature range).

FAQ

Worst-case vs RSS — which should I use?

Worst-case stacks absolute contributions and is conservative. RSS is often used when error sources are independent and random.

My crystal temperature drift isn’t linear. Is this wrong?

Many tuning-fork and AT-cut crystals have curved temperature behavior. This tool is an estimator—use a slope near your operating point, or treat this as a quick bound.

What does “time error” mean?

If a clock runs fast/slow by X ppm, it accumulates about X microseconds per second. Over long durations it adds up.

Tool Info

Last updated:

Updates may include new presets, tighter validation, and improved edge-case handling.