Gallery¶
Worked examples across every doppler subsystem — each one a runnable script
under src/doppler/examples/,
grouped below by DSP domain. Most pages render a figure; run make gallery
to regenerate every image, or run a single script directly (each page lists
its command under Reproduce / Run it).
Looking for a runnable script that isn't a rendered walkthrough — LO, NCO, FFT, ring buffers, C programs, or the NATS streaming demo? Those live on the Examples page instead.
Sources & Waveforms¶
- Waveform Generator — tone / PN / QPSK / BPSK from one declarative
Synth. - Symbols: bring your own constellation — pi/4-QPSK and 16-QAM from an arbitrary complex stream.
- Waveform Scenes — sum, add, headroom; a SoI under a CW interferer over one noise floor.
- Waveform I/O — one capture written to raw / CSV / BLUE / SigMF and read back.
- Waveform JSON Round-Trip —
--recorda scene to JSON and replay it byte-identically. - Waveform Write — the shortest path from a
Composerto a file and back. - WCDMA Carriers — four RRC channels measured with
PSDandAccTrace. - Prepare Once, Sweep Many (Plan) — one declarative scene evaluated at many SNR operating points via the
Planstimulus engine. - One Cache Slot for a Whole Background Field —
background=Truefolds a static emitter population into a single pre-summed cache entry: 67x smaller, and the whole field becomes one overridable control. - A Crowded Band — twenty RRC carriers in one segment, prepared in parallel across cores;
Plan.render(enable=...)thins them for free. - AWGN — complex Box-Muller noise, amplitude histogram, and flat PSD.
- Doppler Channel — clock Doppler as an impairment: one ppm dilates the whole time base and shifts the carrier, so a code loop sees the rate error its carrier loop implies.
Filters & Resampling¶
- CIC Decimation — wideband IQ → CIC → narrowband slice; ~90 dB alias rejection.
- RateConverter — automatic CIC / halfband / polyphase cascade for any rate ratio.
- Farrow Interpolator — fractional-delay resampling.
- HalfbandDecimatorQ15 — fixed-point Q15 halfband 2:1 decimator for interleaved IQ int16.
Down-Conversion (DDC)¶
- Real-input DDC — real passband in, complex baseband out, caller-owned buffer, thread-per-shard scaling.
Detection & Acquisition¶
- Correlation — coherent integration, 2-D template matching, streaming CFAR.
- Detection Curves — Pd vs SNR and dwell from closed-form Marcum Q.
- Monte Carlo — 30,000-trial validation of the Marcum Q curves.
- Lock Detection: Verify Counts — level + time hysteresis vs. a naive comparator on a marginal signal.
- 2-D Acquisition — GPS/CDMA Doppler × code-phase search with Bonferroni-corrected CFAR.
- DSSS Acquisition: Pd/Pfa — detection characterisation curves.
- 5-Burst DSSS Link (wfmgen's 3 Faces) — every
wfmgenproduction path feeding the same full receiver chain. - Streaming Async Despreader —
Dll(segments)PN-epoch despreader. - Full-Chain Lock-Up —
Dll -> Costas -> SymbolSynccold-started with no code, carrier, or timing knowledge, watched over one sharedTelemetrycontext. - DsssReceiver — the Composed Continuous DSSS Receiver —
Acquisition -> Dll(segments) -> RateConverter -> MpskReceiverat real chip/symbol rates, collapsed into oneDsssReceiverand onesteps()call -- the despreader removes the code and an explicit resampler bridges it to a normal demodulator. - AsyncDsssReceiver: the SPEC Waveform — the packaged receiver decoding SPEC's own continuous async DSSS (CCSDS Gold-1023, 3.069 Mcps, 2700 bps) through physically-coupled clock Doppler, in both pass regimes (TCA-crossing ramp and ±50 kHz offset extremum), with the pre-despread carrier loop tracking the ramp and a binary symbol-lock indicator.
- CarrierAcquisition: RRC Pulse Shaping — PSDMF residual-carrier estimation against an RRC-shaped BPSK stream, and why the
psd_templateoverride matters.
Synchronization Loops¶
- Carrier Loop Stress — Costas loop pull-in under noise.
- Costas Loop (theory) — loop-filter design and steady-state behaviour.
- Code Loop Tracking — delay-locked loop code tracking.
- DLL Code Loop (theory) — discriminator and loop-filter derivation.
- Symbol Timing Recovery — timing-error-detector-driven resampling.
- Timing Loop (theory) — the timing loop's transfer function.
- Arbitrary-Rate Symbol Recovery — matched filtering and symbol timing in one dot product, at a non-integer samples-per-symbol.
- M-PSK Carrier Loop (theory) — decision-directed carrier recovery.
- NDA Carrier Loop (theory) — non-data-aided carrier recovery.
Constellations & Receivers¶
- M-PSK Constellation — M-PSK mapping and constellation rendering.
- M-PSK Receiver — integrated carrier + timing + bit recovery.
- M-PSK Receiver: Performance — EVM, SER, lock time, false alarm and level invariance over random geometries.
Measurement¶
- Measurement Suite — SNR / SINAD / THD / SFDR / ENOB from
ToneMeasure. - Measurement Suite: IMD & NPR — two-tone IMD/IM3, TOI, and notched-noise NPR.
- Measuring an Error Rate, Defensibly —
BerMeteron AWGN: detected alignment, inverse binomial sampling, and the exact confidence interval.
Quantization & Fixed-Point¶
- ADC Quantisation — staircase resolution and noise floor across 3–8 bits.
- Q15 vs UQ15 — bipolar vs offset-binary encodings of the same Q15 step.
- cvt Quantization — the three cvt formats overlaid at identical noise floor.
Gain Control¶
- AGC — closed-loop power controller with decimated and per-sample loop updates.
Telemetry¶
- Telemetry: Many Emitters, One Consumer — three emitters fanning into one ring, one consumer.
- Capturing All Receiver Telemetry — every MpskReceiver probe captured and stored from one ring.