123 Main Street, New York, NY 10001

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.

Typical symptoms (what can be observed on a spectrum analyzer / FFT)
  • 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.
Fast classification (first decision before tuning anything)
Deterministic (coherent) spurs
  • 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.
Stochastic floor (noise-like)
  • 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”).
Minimal experiments (10 minutes, high signal-to-noise for root-cause)
  1. Sweep fOUT: check whether spurs move with the tone (sidebands/modulation) or stay fixed (leakage/interference).
  2. Change pattern length L (or PRBS seed): watch if spur spacing changes with Δf ≈ fS/L.
  3. 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.

Spur taxonomy decision map for waveform path issues Block diagram showing inputs from waveform and update timing, a split into deterministic spurs versus noise floor, and recommended control levers including pattern control, dither, shaping, RTZ/NRZ, symmetry, and jitter isolation. Start here: classify first, then choose controls Inputs Waveform / Pattern PRBS · tones · steps Update Timing setup/hold · triggers Output Chain coupling · loading Classification Deterministic spurs repeatable lines track pattern / timing Noise floor broadband energy unstable lines Control levers Pattern control Dither Shaping RTZ / Symmetry Rule: identify by what the spur tracks (tone / Fs / pattern / modulator) before tuning.

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.

Spur families (frequency “addresses” and how to confirm)
Harmonics (reference family, not the main topic here)
Where: near n·fOUT (n = 2, 3, …).
Tracks: moves with fOUT.
Confirm: sweep fOUT; harmonic spacing scales with the tone.
Sampling images and aliases (often addressed by reconstruction filtering on a sibling page)
Where: near k·fS ± fOUT (k = 1, 2, …).
Tracks: shifts when fS changes; stays symmetric around multiples of fS.
Confirm: change fS (or interpolation ratio); image clusters slide accordingly.
Pattern-comb spurs (signature of periodic code or periodic update error)
Where: lines spaced by Δf ≈ fS/L, where L is the repeating pattern length (samples).
Tracks: spacing changes when L or seed changes; spacing scales with fS.
Confirm: double L → spacing halves; switch PRBS seed → line set shifts.
Modulation sidebands (the “fOUT ± fMOD” family)
Where: symmetric sidebands around the tone at fOUT ± fMOD (and sometimes ±2fMOD, …).
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.
A disciplined “tracks what” workflow (the fastest way to avoid blind tuning)
  1. Sweep fOUT slightly: if spurs stay at fixed absolute frequencies, treat them as leakage/interference first.
  2. Change pattern length L (or the waveform repetition period): if spur spacing follows fS/L, treat it as a pattern-comb family.
  3. 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).
  4. 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.

Frequency map overlay for DAC spur families A single frequency axis showing the main tone, harmonics, sampling images around multiples of sample rate, pattern-comb spacing labeled as Fs over L, and modulation sidebands around the tone. Identify spurs by what they track (tone / Fs / pattern / modulator) 0 Frequency Families: Harmonics (n·fOUT) · Images (k·Fs ± fOUT) · Pattern comb (Δf ≈ Fs/L) · Sidebands (fOUT ± fMOD) fOUT 2fOUT 3fOUT ±fMOD k·Fs ± fOUT Δf ≈ Fs / L Harmonic Image Pattern Sideband Use knob tests: fOUT / Fs / L / modulator

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.

What makes a spur “code-dependent”
  • 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.
Common root-cause families (engineering view, not a textbook)
1) Unequal bit/segment switching energy → periodic error
Different bits/segments inject different transient energy (charge injection, RON/Cpar coupling, reference/ground return disturbance). When a waveform makes certain toggle sets repeat with a fixed cadence, that energy becomes a coherent error waveform, producing repeatable spur lines.
2) Major-carry events → large transient spikes
When many bits flip at once (major-carry), the peak disturbance is much larger than typical code steps. If these large flips occur periodically (common in some ramps, switching setpoints, or certain modulation patterns), they create a strong coherent spur signature.
3) Dynamic mismatch (current sources / switch timing) → pattern-linked lines
Even with good static matching, dynamic settling and timing skew can make the same nominal code land differently depending on the recent switching history. When that history is periodic, it produces discrete lines tied to the code pattern rather than a smooth noise floor.
Minimal confirmation tests (fast, high confidence)
  1. Replay a fixed pattern and capture multiple FFTs: coherent spurs stay pinned with similar amplitude.
  2. Change pattern length L (or PRBS seed): code-dependent spur sets shift; comb spacing often follows Δf ≈ fS/L.
  3. 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.

Code to switching events to spurs mapping Three-layer diagram: a code pattern grid on top, switching events in the middle highlighting small toggles and major carry events, and a spectrum sketch at the bottom showing coherent spur lines. Code pattern → switching events → coherent spurs Code pattern Switching events Spectrum outcome toggle idle major small toggle major-carry tone coherent spur lines

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.

When major-carry hurts the most (common pattern across applications)
  • 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.
Control strategies (spur-focused, ordered by practicality)
Strategy A: code-order optimization (Gray-like / segmented update)
  • 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.
Strategy B: multi-step transition (slew limiting / staged steps)
  • 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.
Strategy C: sample/hold or deglitch masking (output presented after switching settles)
  • 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.
Verification (simple and comparable)
  1. Time-domain: step response (overshoot, ringing, settling) with the same load and probe method.
  2. Frequency-domain: FFT with fixed capture length and consistent windowing; compare spur lines near the band of interest.
  3. 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.

Large-step transition options for major-carry control Three side-by-side options: direct jump, multi-step transition, and hold/update masking. Each shows a simple step waveform and a small spectrum sketch indicating relative spur levels. Large-step options: reduce peak energy, spread energy, or mask the transient Direct jump Multi-step Hold & update fast staged hold spurs lower cleaner Compare with the same Fs, amplitude, and load; change only the transition method per run.

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.

Practical root causes (debug-oriented list)
  • 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.
How it shows up in the spectrum (fast identification)
  • 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.
Correct order of fixes (avoid expensive “wrong-family” actions)
  1. Eliminate deterministic timing errors first (CDC slip, edge competition, periodic scheduler cadence).
  2. Lock the update relationship (stable trigger alignment, sufficient setup/hold, deterministic handoff).
  3. 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.

Ideal versus jittered update timing and resulting sidebands Two timing lanes show ideal update edges versus jittered update edges relative to data. A small spectrum sketch shows a tone with symmetric sidebands at plus/minus fJ. Update timing uncertainty behaves like AM/PM modulation Timing Ideal Jittered Data stable update update Δt edge spread Spectrum tone ± fJ

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.

What dither is trying to achieve (a measurable goal)
  • 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.
Dither types (engineering selection, minimal theory)
Random noise (most robust against re-coherence)
  • Best when coherence must be broken reliably across operating conditions.
  • Keep amplitude minimal to avoid unnecessary floor penalty.
Triangular PDF (classic for controlling quantization-like structure)
  • Often produces predictable behavior with small side effects.
  • Avoid short, repeating implementations that behave like a periodic pattern.
PRBS (easy to implement, but watch pattern length)
  • 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.
How to choose dither amplitude (simple acceptance rule)
  1. Identify the worst spur in the band of interest under a repeatable test pattern.
  2. Start from a very small dither level and increase stepwise.
  3. Stop when the spur drops to near the noise floor (or below the defined SFDR target), while the floor increase remains acceptable.
  4. 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.

Dither effect: spur down, noise floor up Two spectrum sketches comparing before and after dither: large coherent spur lines reduce, while the broadband noise floor rises slightly. Dither converts coherent spurs into a controllable floor Before After dither spur ↑ spur ↓ floor ↑

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.

When shaping is a good fit (quick boundary checks)
  • 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.
Shaping tools (concept-level, selection view)
ΣΔ / multi-bit shaping (common in hi-fi and some RF DAC modes)
  • 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.
Digital pre-shaping (spectral shaping to avoid sensitive regions)
  • 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.
Common failure modes (what to check before celebrating)
  • 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.
Validation (keep it comparable)
  1. Measure in-band metrics (SFDR/SNDR/noise density) with fixed capture and window.
  2. Scan out-of-band envelope under the same conditions (do not only look near the tone).
  3. 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.

Noise shaping moves error energy out of the band of interest A frequency axis with an in-band region highlighted. Two spectra show before and after shaping: lower in-band floor and higher out-of-band floor. Shaping: in-band cleaner, out-of-band heavier frequency in-band before after in-band ↓ out-of-band ↑

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.

Intuition (what changes in the spectrum)
  • 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.
A practical selection checklist (3 conditions)
  1. Target bandwidth: wideband and near-Nyquist cases are more sensitive to RTZ high-frequency content.
  2. Out-of-band margin: limited filtering headroom favors NRZ; strong headroom can unlock RTZ benefits.
  3. SFDR focus: compare close-in sidebands versus far-out images; RTZ/NRZ can trade one for the other.
Test correctly (spurs may move, not disappear)
  • 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.

NRZ and RTZ pulse shapes and qualitative spectrum envelopes Top shows NRZ and RTZ waveforms. Bottom shows qualitative spectrum envelopes indicating RTZ has stronger high-frequency content and different envelope compared with NRZ. Pulse shape changes the spectral envelope Waveforms NRZ hold RTZ to zero Spectrum envelopes frequency NRZ RTZ RTZ HF content ↑

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.

What “half-wave symmetry” means (construction view)
  1. Design any waveform segment for the first half-period (0 → T/2).
  2. Generate the second half (T/2 → T) as the inverted copy of the first half.
  3. Use the same amplitude scaling and timing so the symmetry constraint remains intact.
What it can suppress (and what it depends on)
  • 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.
Cost and constraints (when it may not fit)
  • 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.
Where it is most useful
  • 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.

Half-wave symmetry waveform comparison and even-order reduction Side-by-side waveforms: a generic asymmetric waveform and a half-wave symmetric waveform. Below, two spectra show even-order lines reduced for the symmetric case. Half-wave symmetry reduces even-order structure Generic Half-wave T/2 Spectrum Spectrum even even ↓

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.

Four things that make spurs repeatable (lock these first)
  • 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.
Fast classification flow (one knob at a time)
Step 1 — Change fOUT
  • 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.
Step 2 — Change pattern (length L / seed)
  • If spur spacing changes with L, classify as pattern comb / code-dependent family.
  • If changing seed changes spur structure, treat as deterministic pattern sensitivity.
Step 3 — Change fS
  • If image-related families move with fS (k·fS ± fOUT), classify as sampling/image family.
  • If nothing moves, prioritize deterministic sources (timing/pattern/coupling).
Step 4 — Toggle dither / RTZ / symmetry
  • 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 matrix (fielded template)
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.

Debug flowchart for classifying DAC spurs A four-step flowchart: change fOUT, change pattern, change fS, toggle dither/RTZ/symmetry. Each step points to compact classification tags. Spur debug flow: change one knob at a time Change fOUT Change pattern Change fS Toggle tools moves? spacing? image? response Classification tags modulation-like pattern comb image family coherence broken even-order reduced next best lever

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.

Output of this checklist
  • 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.
Vendor fields to request (waveform/spur related only)
A) Supported modes and controllable knobs
  • 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.
B) Code/glitch/major-carry evidence with test conditions
  • 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”).
C) Recommended measurement configuration (to match vendor results)
  • 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.
Firmware/FPGA lock list (prevent spur drift between builds)
Determinism locks (must be stable)
  • 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).
Reference clock / jitter-cleaning parts to lock in validation (examples)

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)
Production pass/fail fields (minimal tests, high coverage)
Spur mask definition (field template)
  • 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.
Minimal coverage recipe (few points, worst-case bias)
  • 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
Comparable reference DAC parts (for inquiry parity and test alignment)

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
Production checklist card for waveform and spur control A table-style checklist with three columns: Vendor, Firmware, and Test. Each column contains short keyword pills representing required fields to lock and validate spurs. Production checklist (waveform / spur control) Vendor Firmware Test Modes (RTZ/NRZ) Dither knobs Glitch vs code Worst-case notes FFT recipe Seed + L CDC rules Sync strategy Mode-switch policy Clock baseline fOUT set Pattern set Coherent capture Window/RBW Spur mask LOCK

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.

Request a Quote

Accepted Formats

pdf, csv, xls, xlsx, zip

Attachment

Drag & drop files here or use the button below.

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.

Why do some spurs move with fOUT while others stay fixed?
Short answer

Spur motion reveals the family: tone-centered sidebands typically indicate modulation-like timing/update issues, while fixed-frequency lines often indicate fixed coupling or an external interferer. Image-related families move with fS; pattern comb lines change with pattern length L.

Quick checks
  • Change fOUT only: does the spur stay at a fixed offset from the tone (sideband family)?
  • Change fS only: do suspect lines move as k·fS ± fOUT (image family)?
  • Change pattern length L/seed only: does spacing or structure change (pattern comb)?
Pass/Fail

Classification is “pass” when a spur family keeps the same motion behavior across repeated captures with the same FFT setup (N/window/RBW) and the same trigger relationship.

Common pitfall

Changing FFT window/RBW while changing fOUT makes spur “motion” comparisons invalid.

A spur looks like noise — how to tell if it’s deterministic (pattern/code) instead?
Short answer

Deterministic lines repeat at the same bins when capture and stimulus are locked; stochastic noise does not. Lock seed/L, trigger relationship, and FFT settings, then repeat captures.

Quick checks
  • Repeat 5–10 captures with identical stimulus and FFT settings: do the same bins spike every time?
  • Freeze PRBS seed and length L: does the “noise-like” structure become stable?
  • Toggle dither: do discrete lines collapse into a smoother floor (spur → floor behavior)?
Pass/Fail

“Deterministic” is confirmed when the same lines remain within the same bins after repeated captures with fixed seed/L and fixed FFT config.

Common pitfall

Leaving pattern generation in an uncontrolled clock domain (CDC slip) can make deterministic spurs look random.

Why does changing PRBS seed or pattern length change the spur spacing?
Short answer

A repeating code pattern creates a comb: changing the repeat length L changes the comb spacing. Changing the seed changes the deterministic sequence, which can redistribute discrete lines.

Quick checks
  • Keep fOUT and fS fixed; change L only: comb spacing should change consistently.
  • Keep L fixed; change seed only: spacing stays, but line heights/locations can reshuffle.
  • Log seed and L in every capture to make comparisons valid.
Pass/Fail

A pattern-comb root cause is confirmed when spacing tracks L and remains stable across repeated captures with fixed FFT settings.

Common pitfall

Using a “random-looking” short sequence can reintroduce strong discrete spurs due to unintended periodicity.

How to choose dither amplitude so it breaks spurs without wasting SNR?
Short answer

Dither should be just large enough to de-cohere the discrete lines so the worst spur falls to the noise floor; any larger only raises the floor without additional spur benefit.

Quick checks
  • Increase dither in small steps with fixed FFT settings and fixed pattern seed/L.
  • Track worst spur in the target offset band and track floor rise (spur ↓ / floor ↑).
  • Stop when the worst spur is no longer above the floor by a meaningful margin.
Pass/Fail

Pass when the worst discrete line in the target band drops to (or below) the measured floor while floor rise remains acceptable for the system mask.

Common pitfall

Changing dither and the window/RBW at the same time hides the true trade-off.

Why can dither create new discrete lines instead of smoothing them?
Short answer

Dither only helps when it is effectively non-periodic over the capture window. Short cycles, repeated seeds, or deterministic interference between update timing and the dither sequence can re-cohere into lines.

Quick checks
  • Change PRBS seed (keep L fixed): do the new lines move or reshuffle?
  • Increase L: do lines weaken as periodicity reduces?
  • Change update rate or capture length: does the line set change (coherence artifact)?
Pass/Fail

Pass when enabling dither reduces the worst discrete spur without creating a new stable comb that violates the spur mask.

Common pitfall

Treating “PRBS” as inherently random while using a short, repeating sequence.

What is “code-jitter” and how does it show up in the spectrum?
Short answer

Code-jitter is update-time uncertainty between the data transition and the DAC update edge. It behaves like AM/PM modulation and typically appears as symmetric sidebands around the carrier (fOUT ± fJ and sometimes multiples).

Quick checks
  • Lock trigger/sync; verify deterministic latency stays constant across captures.
  • Change fOUT only: sidebands remain centered around the tone with fixed offset.
  • Change update/clocking relationship (one knob): sideband spacing changes if the source is update-related.
Pass/Fail

Pass when sidebands reduce (or stop moving) after deterministic update timing and CDC rules are locked.

Common pitfall

Confusing code-jitter sidebands with image families; images move with fS, sidebands stay centered around fOUT.

RTZ vs NRZ: why can RTZ reduce some spurs but worsen far-out behavior?
Short answer

RTZ changes the pulse shape, so it changes the spectral envelope and how errors map into spurs. It can help certain near-tone spur mechanisms but can increase high-frequency content that stresses far-out masks and downstream margin.

Quick checks
  • Compare NRZ vs RTZ with identical FFT settings and identical stimulus.
  • Evaluate both close-in offset bands and far-out regions (envelope changes matter).
  • Record mode state and any required resync sequence for repeatable results.
Pass/Fail

Pass when the selected mode meets the defined spur mask in the system-relevant bands and remains stable across repeated captures.

Common pitfall

Switching modes without a defined resync/reset policy can make comparisons look inconsistent even when the hardware is fine.

Noise shaping: what gets “moved out of band,” and what is the trade-off?
Short answer

Shaping redistributes error energy so the in-band floor and spur visibility drop, while out-of-band energy increases. This is not a reconstruction filter; it is an error-energy “move,” and the trade-off is higher out-of-band requirements.

Quick checks
  • Compare in-band floor before/after shaping (same FFT config).
  • Also measure out-of-band regions; verify the system can tolerate the moved energy.
  • Lock mode and interpolation states; shaping interactions can change results.
Pass/Fail

Pass when in-band mask improves and the increased out-of-band energy still stays within the system’s allowable regions.

Common pitfall

Only measuring the in-band improvement and ignoring far-out regions where the shaping pushes energy.

Half-wave symmetry: when does it reduce even-order content and when does it do nothing?
Short answer

Half-wave symmetry is most effective when even-order structure is dominant. If the dominant mechanism is not even-order (or the waveform cannot be constrained), the improvement can be limited.

Quick checks
  • A/B test: original waveform vs half-wave symmetric waveform (same amplitude, same FFT settings).
  • Track even-order terms and symmetry-linked discrete lines; verify they reduce consistently.
  • Verify that waveform constraints do not break the control/modulation requirement.
Pass/Fail

Pass when even-order content drops while the remaining spectrum still meets the spur mask and the waveform requirement remains satisfied.

Common pitfall

Testing symmetry with different capture lengths or different window functions and attributing changes to symmetry.

A large step (major-carry) makes the spectrum dirty — what helps without redesigning hardware?
Short answer

Large-step events concentrate switching energy and can excite deterministic spurs. Practical fixes are code/sequence management and controlled transitions, verified by step-response plus FFT under the same measurement settings.

Quick checks
  • Compare direct jump vs segmented transition vs “hold and settle” approach (one knob at a time).
  • Measure FFT in a fixed post-step window to compare spur masks fairly.
  • Repeat with the same trigger and fixed pattern settings to confirm determinism.
Pass/Fail

Pass when the chosen step strategy meets the defined spur mask in the specified settling window and remains stable across repeated runs.

Common pitfall

Comparing FFTs that use different time windows after the step (not the same settling slice).

How to set FFT length, window, and RBW so spur numbers are comparable?
Short answer

Comparable spur numbers require fixed N, fixed window, and a fixed RBW-equivalent across all captures. Coherent capture (or a fixed-length method) prevents spectral leakage from dominating the “spur” metric.

Quick checks
  • Fix N and window for the whole debug session; document them in the test record.
  • Keep the same trigger relationship and record length so bins align across runs.
  • Use the same spur accounting rule (what counts as “worst spur” and where).
Pass/Fail

Pass when the same stimulus produces the same worst-spur result (within expected run-to-run variation) under the same FFT configuration.

Common pitfall

Switching between “pretty spectrum settings” and “production settings” mid-debug and comparing numbers anyway.

What must be locked for production to prevent spur drift across builds?
Short answer

Spur behavior stays stable only when determinism is locked: seed/L, CDC rules, sync topology, mode-switch policy, and the FFT configuration used for pass/fail. Production tests should use a minimal frequency/pattern set biased toward worst-case families.

Quick checks
  • Lock seed and pattern length L; log them in every test record.
  • Lock trigger/sync policy and mode-switch rules (RTZ/NRZ, interpolation, DUC states).
  • Lock FFT settings (N/window/RBW-equivalent) for factory comparison.
  • Use a small test matrix: a few fOUT points + a few patterns to cover worst-case families.
Pass/Fail

Pass when repeating the same production stimulus (same seed/L and same FFT config) produces the same worst-spur result and meets the spur mask across allowed modes.

Common pitfall

Allowing runtime mode switching without a documented safe-transition window and resync sequence.