DAC Waveform & Spur Control (Dither, RTZ, Code-Jitter)
← Back to:Digital-to-Analog Converters (DACs)
Waveform-path spurs are not “mystery noise”: classify them by how they move with frequency, code pattern, and update timing, then lock determinism (seed/L/sync/modes) and apply the right tool (dither, shaping, RTZ, symmetry) to meet a clear spur mask.
The goal is repeatable spectra: the same stimulus and settings must produce the same worst spurs, so fixes are measurable, portable to production, and stable across builds.
What this page solves (spurs from the waveform path)
A DAC can meet excellent headline specs yet still show discrete “spikes” in the spectrum that move with code pattern, update timing, or tone frequency. This section teaches a practical way to classify those spurs first, so the right control knobs (dither, shaping, RTZ/NRZ, symmetry, jitter isolation) are applied in the correct order.
- Spurs at fixed absolute frequencies (do not track the output tone).
- Spurs that move with fOUT (often symmetric sidebands around the tone).
- Comb-like spurs with near-constant spacing (often tied to pattern length).
- Single-tone looks clean, but multi-tone / sweep becomes spur-dominated.
- Spurs appear only at certain code regions, step sizes, or update modes.
- Repeatable lines at the same offsets after each capture.
- Spacing or offsets track pattern length, update timing, or a periodic modulator.
- Often improved by dither / pattern control / symmetry or by removing periodic jitter coupling.
- Energy spreads broadly; discrete lines are unstable or do not converge.
- More averaging lowers uncertainty, but does not reveal fixed spur families.
- Usually attacked by improving phase-noise/jitter, analog noise, or bandwidth shaping (not by chasing “one spur”).
- Sweep fOUT: check whether spurs move with the tone (sidebands/modulation) or stay fixed (leakage/interference).
- Change pattern length L (or PRBS seed): watch if spur spacing changes with Δf ≈ fS/L.
- Toggle dither / RTZ: coherent lines that collapse into a smooth floor indicate “spur-to-noise” conversion is working.
Design takeaway: classify spurs by what they track (tone, sample rate, pattern length, periodic modulator) before selecting controls. This prevents expensive fixes (filters, clock trees, layout rework) from being applied to the wrong spur family.
A practical spur taxonomy (where each spur lives in frequency)
A useful spectrum “map” does not start from guessing. It starts from a small set of spur families and a simple rule: a spur is identified by what it tracks when a single knob changes. This section provides the frequency families and the minimum knob tests that confirm each one.
Tracks: moves with fOUT.
Confirm: sweep fOUT; harmonic spacing scales with the tone.
Tracks: shifts when fS changes; stays symmetric around multiples of fS.
Confirm: change fS (or interpolation ratio); image clusters slide accordingly.
Tracks: spacing changes when L or seed changes; spacing scales with fS.
Confirm: double L → spacing halves; switch PRBS seed → line set shifts.
Tracks: follows the modulator (periodic jitter, periodic dither, PSU ripple, or periodic pattern transitions).
Confirm: change the suspected modulator frequency; sidebands move by the same offset.
- Sweep fOUT slightly: if spurs stay at fixed absolute frequencies, treat them as leakage/interference first.
- Change pattern length L (or the waveform repetition period): if spur spacing follows fS/L, treat it as a pattern-comb family.
- Change fS (or interpolation ratio): if clusters move with k·fS ± fOUT, treat it as an image family (then hand off to the filter/architecture path).
- Toggle dither: if discrete lines collapse into a smooth floor, the spur is coherent and controllable by spur-to-noise conversion.
Design takeaway: treat frequency as an address. Identify the family first (harmonic / image / pattern-comb / sideband), then apply the matching control knob. This preserves engineering time and avoids “fixing” images with dither or chasing pattern combs with filters.
Code-dependent spurs: why the same amplitude looks different across codes
Many “mystery spurs” are not random noise. They are a deterministic mapping from which bits/segments switch and when they switch into repeatable transient energy that becomes discrete lines in the spectrum. This behavior can exist even when INL/DNL numbers look acceptable, because it is driven by dynamic switching events rather than static code accuracy alone.
- Discrete lines repeat capture-to-capture when the same pattern is replayed.
- Changing pattern length, seed, or code region changes the spur set.
- Averaging does not “wash out” the lines; it often makes them look more like fixed spikes.
- Replay a fixed pattern and capture multiple FFTs: coherent spurs stay pinned with similar amplitude.
- Change pattern length L (or PRBS seed): code-dependent spur sets shift; comb spacing often follows Δf ≈ fS/L.
- Constrain code region (small-signal around a bias vs full-scale swing): spur magnitude often changes with which bits/segments dominate switching.
Design takeaway: treat “code” as a deterministic excitation. A spur that changes with seed, pattern length, or code region is usually a switching-event signature, not random noise.
Major-carry & large-step management (when steps are unavoidable)
Large steps are common in bias switching, trim updates, and multi-channel synchronous control. The problem is not “a step exists”; it is that a large step concentrates switching energy into a narrow time window, making it easier to couple into reference, supplies, output loading, and measurement bandwidth. When large-step events repeat, they become coherent spur sources.
- Synchronous multi-channel updates: switching energy stacks in the same instant.
- Periodic setpoint switching: repeated steps create coherent spectral lines.
- Sensitive output chain: capacitive loads, transformers, or high-gain post-amps amplify transients.
- Goal: reduce simultaneous bit flips to lower peak disturbance.
- Best when waveform/control firmware can choose the update sequence.
- Trade-off: may constrain waveform freedom or require FPGA/firmware changes.
- Goal: spread a large event across multiple smaller events to reduce coherent spur strength.
- Best when settling time can be traded for cleaner spectra and lower coupling.
- Trade-off: longer transition time; more activity in the update clock domain.
- Goal: prevent switching transients from being visible during the “measurement” window.
- Best when output timing can be separated from the internal update event.
- Trade-off: adds new error terms (droop, injection); keep the focus on spur reduction.
- Time-domain: step response (overshoot, ringing, settling) with the same load and probe method.
- Frequency-domain: FFT with fixed capture length and consistent windowing; compare spur lines near the band of interest.
- Only one knob changes per run (sequence vs staging vs hold), while fS, amplitude, and load stay constant.
Design takeaway: major-carry is an energy concentration problem. Reduce simultaneous toggles, spread the step in time, or hide the transient from the presentation window—then validate with comparable step + FFT results.
Code-jitter: update-time uncertainty that behaves like AM/PM modulation
Code-jitter is not “clock phase noise” by itself. It is uncertainty in the relative timing between the data-update event and the intended sampling/update edge. That relative timing error acts like a small AM/PM modulator, often producing symmetric sidebands around the output tone.
- Setup/hold marginal: data and update edges compete; small PVT shifts change the relative edge order.
- Clock-domain crossing slip: periodic phase slip or FIFO/handshake cadence creates a coherent timing modulation.
- Pattern scheduler periodicity: waveform generator/NCO/interpolator introduces a repeating micro-phase error.
- Sidebands near fOUT ± fJ (sometimes also ±2fJ, …).
- Sidebands stay symmetric around the tone when fOUT changes slightly.
- Changing the update/trigger/CDC settings can move or remove fJ more than a clock cleaner would.
- Eliminate deterministic timing errors first (CDC slip, edge competition, periodic scheduler cadence).
- Lock the update relationship (stable trigger alignment, sufficient setup/hold, deterministic handoff).
- Apply jitter cleaning to reduce true clock phase noise after the update path is deterministic.
Design takeaway: sidebands that track a specific offset frequency are often an update-timing modulation problem. Fix deterministic update timing first, then clean the clock.
Dither done right: turning deterministic spurs into a controllable noise floor
Dither is not “adding noise to get better results.” It is a deliberate way to break coherence so discrete spur lines lose their deterministic structure. The trade is simple and predictable: spur amplitude goes down while the broadband floor goes up.
- Convert coherent error into non-coherent error so discrete lines collapse toward the floor.
- Use the smallest amplitude that achieves the target spur reduction.
- Validate with identical FFT settings so “spur ↓ / floor ↑” can be compared directly.
- Best when coherence must be broken reliably across operating conditions.
- Keep amplitude minimal to avoid unnecessary floor penalty.
- Often produces predictable behavior with small side effects.
- Avoid short, repeating implementations that behave like a periodic pattern.
- Good for repeatable production tests and firmware control.
- Risk: a short PRBS period acts like a periodic pattern and can create a comb with spacing near Δf ≈ fS/L.
- Identify the worst spur in the band of interest under a repeatable test pattern.
- Start from a very small dither level and increase stepwise.
- Stop when the spur drops to near the noise floor (or below the defined SFDR target), while the floor increase remains acceptable.
- Lock the chosen level (and PRBS seed/length if used) for consistent behavior across builds.
Design takeaway: the correct dither level is “just enough to de-cohere.” Oversized dither wastes noise floor for little additional spur benefit.
Noise shaping & digital shaping: pushing noise where your system can tolerate it
Shaping is not a reconstruction filter. It does not “remove” error energy; it re-allocates error energy across frequency so the in-band region becomes cleaner while out-of-band regions carry more of the burden. This only improves the final result when the system can tolerate (or later suppress) the moved energy.
- Defined in-band: the system cares about a known narrow band (audio, a control band, a measurement band).
- Out-of-band tolerance: energy moved outside the band does not violate emissions, interference, or adjacent-band limits.
- Headroom downstream: drivers and following stages stay linear with higher out-of-band content.
- Benefit: lower in-band noise density and fewer coherent structures in the band of interest.
- Cost: higher out-of-band energy; downstream linearity and out-of-band management become more critical.
- Benefit: move energy away from the most sensitive band or sideband region.
- Cost: can raise peak content and stress headroom; validate crest factor and linearity margins.
- Out-of-band drives nonlinearity: higher OOB content pushes a driver into slight compression, creating new in-band spurs.
- OOB violates system limits: the “moved” energy exceeds image/emissions/EMI allowances when filtering margin is limited.
- Measure in-band metrics (SFDR/SNDR/noise density) with fixed capture and window.
- Scan out-of-band envelope under the same conditions (do not only look near the tone).
- Confirm downstream stages stay linear with the new out-of-band content.
Design takeaway: shaping is an energy relocation tool. It succeeds only when the system can tolerate (or later suppress) the moved energy without creating new nonlinearity-driven spurs.
RTZ vs NRZ: when return-to-zero reduces images/spurs and when it hurts you
RTZ and NRZ are pulse-shape choices. They change how energy is distributed in frequency. RTZ can make some image and spur behaviors easier to manage, but it also strengthens high-frequency content and can increase downstream stress. The right choice depends on bandwidth, out-of-band margin, and where SFDR matters most.
- RTZ: more pulse-like; stronger high-frequency content and a different envelope that can shift where images/spurs appear.
- NRZ: energy more concentrated; often easier on out-of-band limits but can be more sensitive to some deterministic update/switching signatures.
- Target bandwidth: wideband and near-Nyquist cases are more sensitive to RTZ high-frequency content.
- Out-of-band margin: limited filtering headroom favors NRZ; strong headroom can unlock RTZ benefits.
- SFDR focus: compare close-in sidebands versus far-out images; RTZ/NRZ can trade one for the other.
- Keep capture length, window, and RBW consistent; change only RTZ/NRZ mode.
- Check both close-in sidebands and far-out image regions under the same conditions.
- Scan out-of-band envelope to ensure the chosen mode does not violate system limits.
Design takeaway: RTZ/NRZ is a spectrum trade. Compare with identical test settings and decide based on bandwidth, out-of-band margin, and where SFDR is most critical.
Half-wave symmetry & waveform constraints: cancel what your hardware can’t fix
Half-wave symmetry is a waveform-structure technique: the second half of a period is the inverted copy of the first half. This constraint can suppress even-order content and some symmetry-related spurs without changing hardware, but it reduces waveform freedom and may not fit every control strategy.
- Design any waveform segment for the first half-period (0 → T/2).
- Generate the second half (T/2 → T) as the inverted copy of the first half.
- Use the same amplitude scaling and timing so the symmetry constraint remains intact.
- Tends to reduce even-order harmonics (2nd, 4th, …) when the dominant distortion has an even-order signature.
- Can reduce some symmetry-related spurs that arise from waveform asymmetry, biasing, or even-order nonlinear structure.
- Benefit depends on the actual nonlinearity shape; strong DC offsets, mode changes, or downstream nonlinearity can limit cancellation.
- Waveform degrees of freedom drop: only the first half is independent; the second half is constrained.
- Some control and modulation strategies require asymmetry or DC content and are incompatible with strict half-wave symmetry.
- Peak and zero-crossing behavior may change; verify that the downstream path stays linear and stable.
- Synthesized waveforms where LUT-based constraints are easy to enforce.
- Stimulus and calibration waveforms to suppress even-order structure during measurements.
- Test excitation where the goal is spectral cleanliness rather than arbitrary shape freedom.
Design takeaway: half-wave symmetry is a structural cancellation tool. Use it when waveform freedom is negotiable and even-order content is a dominant pain point.
Measurement & debug playbook: making spurs reproducible
A spur that cannot be reproduced cannot be debugged. The goal of this playbook is to keep one variable changing at a time, lock the measurement configuration, and classify spurs by how they move when frequency, pattern, sample rate, and waveform controls are changed.
- Coherent capture: coherent sampling, or at least fixed record length and FFT size.
- Fixed pattern: fixed code sequence and PRBS seed/length where applicable.
- Fixed trigger relationship: stable sync/trigger phase relationship across captures.
- Fixed FFT config: window choice and RBW-equivalent stay constant for comparisons.
- If lines move with the tone as fixed-offset sidebands, treat as modulation-like (timing/update/jitter family).
- If lines stay at fixed absolute frequencies, treat as fixed coupling or external interference family.
- If spur spacing changes with L, classify as pattern comb / code-dependent family.
- If changing seed changes spur structure, treat as deterministic pattern sensitivity.
- If image-related families move with fS (k·fS ± fOUT), classify as sampling/image family.
- If nothing moves, prioritize deterministic sources (timing/pattern/coupling).
- Dither: discrete spurs collapse toward the floor (spur ↓, floor ↑).
- RTZ/NRZ: spur positions and far-out envelope can shift; compare with identical FFT settings.
- Half-wave symmetry: even-order content and symmetry-linked lines tend to reduce when applicable.
| Test ID | Setup | Stimulus | Control knob | FFT config | Pass criteria |
|---|---|---|---|---|---|
| T01_FOUT_SHIFT | Fixed clock & sync | Single-tone | fOUT only | N, window, RBW fixed | Spur family labeled |
| T02_PATTERN_L | Same setup as T01 | Fixed pattern / PRBS | L / seed only | N, window, RBW fixed | Comb spacing explained |
| T03_TOGGLE_TOOLS | Same setup as T01 | Single-tone + variants | dither/RTZ/symmetry | N, window, RBW fixed | Best lever identified |
Add a Notes field per test for “observed motion” (moves with fOUT, spacing tracks L, moves with fS) and a final classification tag.
Design takeaway: lock the measurement, change one knob at a time, and classify by spur motion. Reproducibility is the fastest path to root cause.
Production checklist & pass/fail fields (vendor ask + firmware locks)
This section turns waveform/spur control into procurement and production fields: what vendors must provide to make spurs reproducible, what firmware/FPGA must lock to prevent spur drift, and how to build a minimal factory test that still covers worst-case conditions.
- A vendor inquiry sheet with repeatable spur test conditions and required evidence.
- A firmware/FPGA lock list (seed/L/sync/mode-switch rules) that stabilizes spur behavior.
- A production pass/fail matrix (few points, high coverage) with a clear spur mask definition.
- RTZ/NRZ (or equivalent) support, default state, parameter steps, and any mode-change caveats.
- Dither capability: supported types (if any), amplitude controls, and recommended usage boundaries.
- Interpolation / NCO / DUC chain options (if present): enable/bypass rules that change spur placement.
- Glitch or transient metric vs code (or representative major-carry plots) with bandwidth, load, and output settings stated.
- Worst-case spur notes across patterns: which stimulus (tone / PRBS / sweep / multi-tone) triggers the highest discrete lines.
- Temperature and supply corners used for worst-case characterization (conditions, not marketing “typical”).
- Record length / coherent capture guidance (or an approved fixed-length method).
- Window and RBW-equivalent recommendation (so spur numbers are comparable).
- Spur accounting rule: what is included/excluded (harmonics, images, sidebands), and the offset bands to evaluate.
- Seed + length L for PRBS/noise/pattern sources (record in config and log it).
- Clock-domain crossing rules for pattern updates (avoid deterministic slip).
- Sync strategy for multi-channel updates and triggers (same topology, same reset sequence).
- Mode-switch policy for RTZ/NRZ, interpolation, and DUC blocks (allowed states and safe transition windows).
Use a fixed and documented clock tree during validation so sidebands and coherence-sensitive spurs do not shift between builds. Example families often used in converter clock trees:
- TI LMK04828B (clock distribution / jitter-cleaning class)
- ADI HMC7044 (jitter attenuation class)
- ADI AD9528 (PLL + clock distribution class)
- Mask region: define the offset band(s) around the carrier (close-in) and define image regions (far-out) to check.
- Accounting: specify whether harmonics are excluded or included, and how the “worst spur” is selected.
- FFT config lock: fixed N, window, and RBW-equivalent for all comparisons.
- Frequency points: include low, mid, and edge-of-band (where spur families often change behavior).
- Stimulus set: single-tone + one deterministic pattern (fixed PRBS seed/L) to catch comb and code-dependent lines.
- Mode set: lock NRZ/RTZ choice(s) used in the product; if both are allowed, test both.
- One “mode-switch sanity” test if runtime switching is permitted (verify spurs do not jump unexpectedly).
| Field | What to lock | Pass/Fail evidence | Notes |
|---|---|---|---|
| Pattern determinism | PRBS seed + L, update rate, CDC rules | Comb spacing stable across runs | Log seed/L in test record |
| Mode control | RTZ/NRZ + interpolation/DUC states | Spur mask met in allowed modes | If switching allowed: define safe window |
| Measurement lock | N, window, RBW-equivalent, trigger relationship | Comparable spur numbers | Change one knob at a time |
| Clock tree baseline | Fixed validated clocking parts/config | Sidebands stable run-to-run | Examples: LMK04828B / HMC7044 / AD9528 |
When requesting vendor data, ask for a “same-method” comparison under the recommended FFT configuration and stimulus set. Example reference families often used in waveform/spur discussions:
- ADI AD9174
- ADI AD9164
- TI DAC38J84
- TI DAC39J84
Final rule: vendor data, firmware configuration, and production tests must share the same reproducibility assumptions (pattern seed/L, sync, and FFT configuration), otherwise spur comparisons become invalid.
FAQs (Waveform & Spur Control)
Short, actionable answers for waveform-path spurs: how to classify by motion, stabilize patterns and timing, apply dither/RTZ/symmetry/shaping correctly, and keep results comparable across measurements and builds.