pyradar#

pyradar processes sawtooth FMCW ADC samples using an explicit model of the radar that captured them. Array positions, emission timing, waveform physics, sampling, calibration, and algorithm defaults travel together as one immutable pyradar.base.Radar. This lets the same processing functions operate on a SIMO ULA, an AWR1843, or a sparse 192-channel cascade without dataset branches.

The v1 pipeline follows the physical data path:

ADC calibration -> range FFT -> MIMO decode -> Doppler FFT -> RD CFAR
                -> emission-time phase compensation -> DoA -> point cloud
                -> clustering -> multi-target tracking

All public values use SI units and radians. Coordinates are right-handed FLU: x forward, y left, and z up.

Documentation#

  • Getting Started — install pyradar, define a radar model, process ADC data, and understand the core data conventions.

  • User Guide — learn FMCW processing, MIMO and DoA, CFAR, point-cloud generation, tracking, simulation, and time-frequency analysis.

  • Examples — browse executable end-to-end examples and dataset-oriented workflows.

  • API Reference — look up radar-model contracts, signal-processing functions, simulation APIs, and utility adapters.

  • Project — read release notes and contributor-facing development documentation.

Two API levels#

Use the model-aware API for production captures:

result = radar.process_adc(
    adc,
    dims=("loop", "emission", "rx", "sample"),
)
points = result.pointCloud

Use parameter functions when studying one transform in isolation:

from pyradar import rsp

spectrum = rsp.range_fft(
    adc,
    fftSize=512,
    sampleAxis=-1,
    window="hann",
)

Explicit function arguments override model defaults. Raw arrays never receive guessed dimension names; ambiguous input is rejected before any FFT is run.