Metadata-Version: 2.1
Name: doppler-dsp
Version: 0.71.0
Summary: Practical, portable, performant digital signal processing.
License: MIT
Requires-Python: >=3.9
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: C
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: System :: Hardware :: Hardware Drivers
Keywords: dsp,sdr,fft,fir,nco,signal-processing,nats,iq
Project-URL: Homepage, https://doppler-dsp.github.io/doppler/
Project-URL: Repository, https://github.com/doppler-dsp/doppler
Project-URL: Documentation, https://doppler-dsp.github.io/doppler/
Project-URL: Bug Tracker, https://github.com/doppler-dsp/doppler/issues
Author: doppler contributors
Requires-Dist: numpy; python_version >= '3.11'
Requires-Dist: numpy<2.3; python_version == '3.10'
Requires-Dist: numpy<2.1; python_version == '3.9'
Provides-Extra: cli
Requires-Dist: pydantic>=2.0 ; extra == "cli"
Requires-Dist: pyyaml>=6.0 ; extra == "cli"
Requires-Dist: rich>=13.0 ; extra == "cli"
Provides-Extra: specan
Requires-Dist: rich>=13.0 ; extra == "specan"
Provides-Extra: specan-web
Requires-Dist: fastapi>=0.100 ; extra == "specan-web"
Requires-Dist: uvicorn[standard]>=0.23 ; extra == "specan-web"
Requires-Dist: websockets>=12.0 ; extra == "specan-web"
Description-Content-Type: text/markdown

<p align="center">
  <img src="https://raw.githubusercontent.com/doppler-dsp/doppler/main/docs/assets/wordmark.png?v=3" alt="doppler — signal, shifted" width="560">
</p>

<p align="center"><strong>Practical, portable, performant digital signal processing.</strong></p>

<!-- badges:start -->

<p align="center">
  <a href="https://github.com/doppler-dsp/doppler/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/doppler-dsp/doppler/ci.yml?branch=main&style=flat-square&logo=githubactions&logoColor=white&label=CI" alt="CI"></a>
  <a href="https://doppler-dsp.github.io/doppler/"><img src="https://img.shields.io/badge/docs-doppler--dsp.github.io-0A7BBB?style=flat-square&logo=materialformkdocs&logoColor=white" alt="Docs"></a>
  <a href="https://github.com/doppler-dsp/doppler/releases/latest"><img src="https://img.shields.io/github/v/release/doppler-dsp/doppler?style=flat-square&logo=github&label=release" alt="Latest release"></a>
  <a href="https://github.com/doppler-dsp/doppler/blob/main/LICENSE"><img src="https://img.shields.io/github/license/doppler-dsp/doppler?style=flat-square&logo=opensourceinitiative&logoColor=white" alt="License"></a>
</p>

<p align="center">
  <a href="https://pypi.org/project/doppler-dsp/"><img src="https://img.shields.io/pypi/v/doppler-dsp?style=flat-square&logo=pypi&logoColor=white" alt="PyPI"></a>
  <a href="https://pypi.org/project/doppler-dsp/"><img src="https://img.shields.io/pypi/pyversions/doppler-dsp?style=flat-square&logo=python&logoColor=white" alt="Python versions"></a>
  <a href="https://doppler-dsp.github.io/doppler/install/python/"><img src="https://img.shields.io/badge/wheels-Linux%20%7C%20macOS%20%7C%20Windows-3776AB?style=flat-square&logo=python&logoColor=white" alt="Wheels: Linux, macOS, Windows"></a>
  <a href="https://doppler-dsp.github.io/doppler/install/c/#system-packages-deb-rpm"><img src="https://img.shields.io/badge/.deb-amd64%20%7C%20arm64-A81D33?style=flat-square&logo=debian&logoColor=white" alt=".deb packages"></a>
  <a href="https://doppler-dsp.github.io/doppler/install/c/#system-packages-deb-rpm"><img src="https://img.shields.io/badge/.rpm-x86__64%20%7C%20aarch64-EE0000?style=flat-square&logo=redhat&logoColor=white" alt=".rpm packages"></a>
  <a href="https://doppler-dsp.github.io/doppler/install/docker/"><img src="https://img.shields.io/badge/ghcr.io-runtime%20%7C%20sdk-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker images on ghcr.io"></a>
</p>

<p align="center">
  <a href="https://doppler-dsp.github.io/doppler/quickstart-c/"><img src="https://img.shields.io/badge/C99-core-00599C?style=flat-square&logo=c&logoColor=white" alt="C99 core"></a>
  <a href="https://doppler-dsp.github.io/doppler/install/rust/"><img src="https://img.shields.io/badge/Rust-FFI-CE4A00?style=flat-square&logo=rust&logoColor=white" alt="Rust FFI"></a>
  <a href="https://github.com/astral-sh/uv"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json&style=flat-square" alt="uv"></a>
  <a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&style=flat-square" alt="Ruff"></a>
</p>

<!-- badges:end -->

<!-- readme-sync:start -->

doppler is a C99 DSP library — NCO, FIR, FFT, polyphase resampling, DDC,
AGC, carrier and burst acquisition, DSSS receivers, convolutional and
Reed-Solomon coding, CCSDS framing and more — with file, buffer, and
NATS-based streaming, and a
scenario-driven waveform generator (`wfmgen`) with byte-identical
CLI/Python/C parity. Python and Rust wrap the same C core — no second
implementation, no divergence, full SIMD throughput from any language.

**New here?** Start with [Start Here](docs/start-here.md) — a one-page map from
"what are you trying to do" to the right doc.

**Navigate** — [Python Quick Start](docs/quickstart.md) · [Architecture](docs/architecture.md) · [Gallery](docs/gallery/index.md) · [Examples](docs/examples/index.md) · [Guides](docs/guide/index.md) · [Waveform Generator](docs/guide/wfmgen/index.md) · [Design](docs/design/index.md) · [Contributing](docs/dev/index.md)

**API Reference** — [Full Python + C API index](docs/api/index.md)

______________________________________________________________________

## Why it's built this way

Every algorithm lives in C exactly once. The Python layer is type conversion
and lifetime bridging — a few hundred lines of glue, not a reimplementation.
Bugs get fixed once, benchmarks reflect real hardware, and a C transmitter
talks to a Python subscriber without surprises.

## Performance

Measured throughput, per build and per machine, is on
[Benchmarks](docs/benchmarks.md) — generated by `make bench-docs` rather than
quoted here, so it cannot go stale. `make bench` measures your hardware.

## Try it

```bash
pip install doppler-dsp
```

```python
from doppler.spectral import FFT
import numpy as np

x = np.random.randn(1024).astype(np.complex64)
X = FFT(1024).execute_cf32(x)
print(f"FFT: {len(x)} samples in -> {X.shape[0]} complex64 bins out")
```

> [!TIP]
> **Using C?**
>
> [`jbx get-doppler`](docs/install/c.md#get-jbx) gets `libdoppler.a`/`.so` and
> the headers in one command — see [C Quick Start](docs/quickstart-c.md).

Everything else — install options, the waveform generator, streaming,
building from source — is in [Python Quick Start](docs/quickstart.md).

## Docs

Full docs: **[doppler-dsp.github.io/doppler](https://doppler-dsp.github.io/doppler/)**

## Licensing

MIT. The core C library is pure C99 and links `-lm` and `-lpthread`. Its FFT
uses the
vendored pocketfft (BSD-3-Clause) for double precision and arbitrary sizes, and
the vendored PFFFT (Pommier/FFTPACK, BSD) for the native single-precision SIMD
path. The optional NATS stream component (`libdoppler_stream`) vendors
`nats.c` (Apache-2.0) — it too is pure C99, so no C++ toolchain is needed
anywhere in the build.

<!-- readme-sync:end -->
