Skip to content

Gallery

Worked examples across every doppler subsystem — nearly all of them 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).

The scripts draw with matplotlib and some design filters with scipy, which are not dependencies of the library. Install both once with pip install "doppler-dsp[examples]"; a script that needs one and does not find it says so and names that command.

A page whose subject is a C API instead carries a compiled-and-run c fence and points at its demo under native/examples/.

Looking for a runnable script that isn't a rendered walkthrough — LO, NCO, FFT, ring buffers, the C API reference programs, or the NATS streaming demo? Those live on the Examples page instead.

Signal sources

Oscillators and noise: the NCO, the LO and AWGN.

  • AWGN Generator — complex Box-Muller noise, amplitude histogram, and flat PSD.

Waveform generation (wfm)

Compose, generate and stream any waveform: the Synth, scenes and Plans, codes, frames, and the wfmgen tool.

Channel impairment

What a channel does to a signal: a Doppler channel with clock Doppler, delay and noise.

Rate conversion & resampling

Polyphase resampling, rate converters and halfband decimators.

Down-conversion (DDC)

Complex- and real-input digital down-converters, and their matched flavors.

Spectral analysis

FFTs, correlators, power spectra and spectrograms.

Measurement suite

Tone, NPR and two-tone IMD metrics returned as named records.

Acquisition

Finding a signal before anything tracks it: bursts, preambles and carriers.

Tracking & synchronization

Loop filters, carrier and timing recovery, and the narrowband receivers built on them.

Automatic gain control (AGC)

A log-domain feedback AGC.

Detection statistics

Pd, Pfa and threshold models, a lock detector and a sync-word finder.

Spread spectrum (DSSS)

Despreading, polynomial-phase estimation and the DSSS receivers.

  • A Message Over DSSS, Received and Deframed — a data source sent one chunk per burst, received by DsssBurstReceiver, and returned byte for byte by FrameDesc.deframe.
  • AsyncDsssPool: emitters that come and go — three receivers, four emitters on one Gold code: each held by one receiver, a departure freeing its receiver, and the newcomer taking it, read from the pool's own status after every push.
  • AsyncDsssPool: ten emitters through six receivers — ten emitters on one Gold code, each on its own Doppler ramp and within ±8 dB of the others, come and go through six receivers: each held by one receiver from soon after it arrives, a freed receiver taking the next, and a weak emitter waiting for the strong one that masks it.
  • AsyncDsssReceiver: a signal's lifecycle — one packaged receiver through an emitter's life: searched, tracked through a fade, released when it departs, reset, and re-acquired on its return, read from its own state after every push
  • AsyncDsssReceiver: the specification link — one packaged receiver on a link whose Doppler stretches the chip clock as well as the carrier, through both regimes of a pass: carrier-to-code aiding, a missed hand-off searched again, and the decode scored by BER, EVM and M2M4
  • DSSS Acquisition — Pd / Pfa vs Es/N0 — detection characterisation curves.
  • DsssBurstReceiver — the Composed Burst Chain — the end-to-end DSSS burst walkthrough: a train sent from one frame description on all three wfmgen faces, then BurstAcquisition -> refine -> BurstDemod behind one push(), the same answer at every block size
  • DsssReceiver — the Composed Continuous DSSS Receiver — Acquisition -> Dll(segments) -> RateConverter -> MpskReceiver at real chip/symbol rates, collapsed into one DsssReceiver and one steps() call -- the despreader removes the code and an explicit resampler bridges it to a normal demodulator.
  • Streaming Async Despreader — Dll(segments) despreading a Doppler-dilated code on an asynchronous data clock, unaided and with the carrier's rate aid.

M-PSK modulation

M-ary PSK symbol map and demap, hard, soft and differential.

Channel coding

Convolutional, Reed-Solomon and interleaving codes.

CCSDS literals

The values CCSDS 131.0-B picked for synchronization and coding.

  • A CCSDS CADU, as a Frame Description — a frame as a list of fields and a list of stages, each carrying the span it covers: why a pipeline cannot express the one thing CCSDS's stages disagree about, and what an outer code reports on the receive side that a CRC cannot

Bit-error rate (BER)

A BER meter that aligns a recovered stream to a reference.

Telemetry

In-band probes that record loop internals.

Sample-format conversion (cvt)

Converters between float IQ and fixed-point integers.