Skip to main content

Dead-simple, ultra-fast digital signal processing.

Project description

doppler

Dead-simple, ultra-fast digital signal processing.

CI Docs PyPI Python License: MIT C99 Rust uv Ruff

doppler is a lean C99 signal processing library built for one goal: maximum throughput with minimum friction — from any language. The full DSP stack lives in one portable core with paper-thin Python bindings and a Rust FFI. No runtime surprises, no framework lock-in.

What's inside

  • NCO / LO — 32-bit phase accumulator, 2¹⁶-entry LUT, AVX-512 batch generation, FM ctrl port
  • FIR filter — AVX-512 complex taps, CI8/CI16/CI32/CF32 input types
  • FFT — 1D and 2D, selectable backend (FFTW or pocketfft)
  • Polyphase resampler — continuously-variable rate, built-in 4096-phase × 19-tap Kaiser bank (60 dB)
  • Halfband decimator — dedicated 2:1 decimator exploiting halfband symmetry; 375 MSa/s at 60 dB
  • DDC / DDCR — digital down-converter for complex and real ADC input; Architecture D2 for ~2× savings on real input
  • Accumulator — F32 and CF64 running accumulators with configurable window
  • Delay — CF64 sample delay line
  • Signal streaming — low-latency ZMQ transport (PUB/SUB, PUSH/PULL, REQ/REP)
  • Circular buffers — double-mapped ring buffers for zero-copy, lock-free IPC (F32/F64/I16)
  • Multi-language — clean C ABI; Python bindings for all modules and Rust FFI

Benchmarks

Throughput depends heavily on hardware, compiler, and SIMD availability. On a Ryzen 7 AI 350 (16 GB, -O2), typical figures range from hundreds of MSa/s (FFT, FIR complex, resampler) to tens of GSa/s (raw NCO phase accumulator).

To measure on your machine:

make bench              # C + Python; saves JSON to benchmarks/history/
make build              # then run C binaries directly, e.g.:
./build/native/src/fir/bench_fir_core
./build/native/src/hbdecim/bench_hbdecim_core
./build/native/src/resamp/bench_resamp_core

Historical Python benchmark snapshots are in benchmarks/history/.

Quick example

C:

#include "fft/fft_core.h"
#include <complex.h>

dp_fft_t *fft = dp_fft_create(1024, -1, 1);
dp_cf32_t in[1024], out[1024];
/* ... fill in[] ... */
dp_fft_execute_cf32(fft, in, 1024, out);
dp_fft_destroy(fft);

Python:

import numpy as np
from doppler.spectral import FFT

x = np.random.randn(1024).astype(np.complex64)
spectrum = FFT(1024).execute(x)

DDC (tune a carrier to baseband):

from doppler.ddc import DDC
import numpy as np

ddc = DDC(norm_freq=-0.1, num_in=4096, rate=0.25)
x = np.random.randn(4096).astype(np.complex64)
y = ddc.execute(x)   # CF32, len ≈ 1024

Documentation

Full docs at doppler-dsp.github.io/doppler

Document Contents
Quick Start Build, install, run the examples (Docker quickstart included)
Build Guide CMake options, platform notes, Python setup, Docker details
Architecture Design overview and layer diagram
Examples: C C code examples — FFT, FIR, NCO, streaming
Examples: Python Python code examples
Examples: Streaming PUB/SUB and PUSH/PULL examples

| CLAUDE.md | Development notes and project context (for contributors) |

Build

make          # build (Linux/macOS; MSYS2 on Windows)
make test     # run CTest suite

Or with Python bindings:

make pyext && uv sync

See Build Guide for platform-specific instructions and all CMake options.

Licensing

The doppler source code is MIT-licensed.

If built with FFTW support (default), the resulting binary links against FFTW, which is licensed under the GNU General Public License (GPL). In this case, the distributed binary is covered by the GPL.

If built with -DUSE_FFTW=OFF, the pocketfft backend is used instead. pocketfft is BSD-3-Clause-licensed (see POCKETFFT_LICENSE) which is compatible with the MIT-license and so the resulting binary remains MIT-licensed with BSD-3-Clause licensed FFT features.

See Build Guide for details and the installed LICENSE files.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

doppler_dsp-0.3.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (788.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

doppler_dsp-0.3.5-cp314-cp314-macosx_14_0_arm64.whl (616.3 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

doppler_dsp-0.3.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (779.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

doppler_dsp-0.3.5-cp313-cp313-macosx_14_0_arm64.whl (616.2 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

doppler_dsp-0.3.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (779.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

doppler_dsp-0.3.5-cp312-cp312-macosx_14_0_arm64.whl (616.3 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

File details

Details for the file doppler_dsp-0.3.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 43cfccb5209d392ccd85eaf8fca29bd604be165c5294350a5d0ab909c16bb967
MD5 889600205474f6c1efc8b6907faae796
BLAKE2b-256 2c1af2e51d2a617aa23ddf5f922f4bc07d2f001dcb2ca06b9b98e5b805d946cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on doppler-dsp/doppler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file doppler_dsp-0.3.5-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.5-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 9a8d6a9c8d8081b4ce741b07e33c0c1427761016849464f51941d91318f93bd6
MD5 b1473ccc1feca14f8e690494cc739e7b
BLAKE2b-256 1358317961a834154b506da7e011841abaf188b38dcc2bc5b7ffedd699b0c5d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.5-cp314-cp314-macosx_14_0_arm64.whl:

Publisher: release.yml on doppler-dsp/doppler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file doppler_dsp-0.3.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f237af860e24b1812cfb97e2a73156514b8fdd5bff222c8be4d57cd6855fe341
MD5 0eab2d2cd396c57d74cb9e2ad4ff9397
BLAKE2b-256 2c3b5aaf7ff51d83c3957fb78590d6a92cd5c547ec85e8bbc6d50a331daa49cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on doppler-dsp/doppler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file doppler_dsp-0.3.5-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.5-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 aa94502971f3e18b7f3e0928cf7ae636288905b130a5bdd7c7e56919d56ac9f4
MD5 c1188a5c324bdfcbd19b780c4904b794
BLAKE2b-256 a975cde736fd891e097c51477bff0706a7b7374c7f098eaf00f68fa30da054b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.5-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: release.yml on doppler-dsp/doppler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file doppler_dsp-0.3.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6d88e3a8cc72bf20c55ab9bd0a261fab429d71ed907912e29b4fe9e45325b28e
MD5 5520ed7c9d8384695a95d24d78dc2863
BLAKE2b-256 710997dee07b3d6bc084afe1810e55e6f69489bedc9ab03d0c1fc3c78b133197

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on doppler-dsp/doppler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file doppler_dsp-0.3.5-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.5-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ba796434ad4a65f9be74e5909b67d70e4c1aabf903874e0d650bc5ad258df939
MD5 8c09c390b2aad91e72efef696364c7b5
BLAKE2b-256 b8048c19b80ada700eb357fdc1afccc628e24d6d598ebbd5e0c73f92ac44add3

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.5-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: release.yml on doppler-dsp/doppler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page