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.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (782.1 kB view details)

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

doppler_dsp-0.3.6-cp314-cp314-macosx_14_0_arm64.whl (618.2 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

doppler_dsp-0.3.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (781.9 kB view details)

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

doppler_dsp-0.3.6-cp313-cp313-macosx_14_0_arm64.whl (618.1 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

doppler_dsp-0.3.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (782.0 kB view details)

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

doppler_dsp-0.3.6-cp312-cp312-macosx_14_0_arm64.whl (618.2 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

File details

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

File metadata

File hashes

Hashes for doppler_dsp-0.3.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f054366ad4d94e57b05124de5c77c5a2decda10e77e449c9bbf4fb7aa08cc523
MD5 d567d292d1bca718a5e2a78a36b0d5ae
BLAKE2b-256 74a6091e9c6009a720e1e68d14960d74a8040db94fe24f2158bb07f5ac931576

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.6-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.6-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.6-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 91caf3a9b3d5d01d745e6a77eed59eb37250d9facfbb5b501e7578375a717e21
MD5 4c9ad625b4da2f5fa83a2ede14bd0d17
BLAKE2b-256 30bbc5901cf70aac5d3ed1115a3a7f87ea9c74034917989941f924ae89fece7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.6-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.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 992cec69ec875fa02c276a40838b3380d183c9832a8435c886abbba9961a2026
MD5 4c9b72650e1aebf855582cbe6b321a4f
BLAKE2b-256 dc51c7fdc8238a3a9392b9f5cc91f9ba3a3a9e94ef245bdb2ffbdb3e80e481f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.6-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.6-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.6-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 3b4a998931016638b24d03ed3fb6c56d11144256f396ca0659d06a1fe1eff87f
MD5 b92664fe6649c05070afb6f27268c7a9
BLAKE2b-256 a157d2cd06136c0498651caa45aaf13b8ef374846196a9351c4c4cdeb3a6459d

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.6-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.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8d14724fb5e0f5958d1591f598e10e3114b087ec6ed1cfb4a82aafba20ac4546
MD5 6316822dd1095ab071e5fdbbeffdfc49
BLAKE2b-256 4cc2cd458acc66b9fe717a64663622ffbf06de267d79e52a3d3ac05d954d90cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.6-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.6-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for doppler_dsp-0.3.6-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 658c085c9f6465227bcf9887d8add4727eede033e70d8b7e631517a668eaf96e
MD5 4f99d3fa8e1ce10a0c911064ee083e47
BLAKE2b-256 b5fb9050ad9a4aef057346799067e660302695dc221ab16900c58c71e17d25b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for doppler_dsp-0.3.6-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