TODO: describe your project.
Project description
doppler
Dead-simple, ultra-fast digital signal processing.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file doppler_dsp-0.3.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: doppler_dsp-0.3.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 744.9 kB
- Tags: CPython 3.13, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4400f53083e465ad3e51b9dc8b27c26a01ce878394f2886cfbd280a79a6e035c
|
|
| MD5 |
a1fabf968865ec86744fe3fc707187a9
|
|
| BLAKE2b-256 |
9f3f4d984ed58d5d6262ac405b00a05daa073a1f0d1cfd5f5c383b8048df97ce
|
Provenance
The following attestation bundles were made for doppler_dsp-0.3.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on doppler-dsp/doppler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
doppler_dsp-0.3.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
4400f53083e465ad3e51b9dc8b27c26a01ce878394f2886cfbd280a79a6e035c - Sigstore transparency entry: 1573950327
- Sigstore integration time:
-
Permalink:
doppler-dsp/doppler@49d6ad689e6b50fdb0a3886393c431fed37566f7 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/doppler-dsp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@49d6ad689e6b50fdb0a3886393c431fed37566f7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file doppler_dsp-0.3.4-cp313-cp313-macosx_14_0_arm64.whl.
File metadata
- Download URL: doppler_dsp-0.3.4-cp313-cp313-macosx_14_0_arm64.whl
- Upload date:
- Size: 594.7 kB
- Tags: CPython 3.13, macOS 14.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7ad7d6bebb8fc90a01b51ce401daa40a0de12e3af1410a17af5d61be457c0fa
|
|
| MD5 |
b96ed4e95d6f902a8d1cfe40dbd8b025
|
|
| BLAKE2b-256 |
eacec04014c79518e995081a5e5272a9ded060deb98653129e0c2aeeff1341d9
|
Provenance
The following attestation bundles were made for doppler_dsp-0.3.4-cp313-cp313-macosx_14_0_arm64.whl:
Publisher:
release.yml on doppler-dsp/doppler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
doppler_dsp-0.3.4-cp313-cp313-macosx_14_0_arm64.whl -
Subject digest:
d7ad7d6bebb8fc90a01b51ce401daa40a0de12e3af1410a17af5d61be457c0fa - Sigstore transparency entry: 1573950308
- Sigstore integration time:
-
Permalink:
doppler-dsp/doppler@49d6ad689e6b50fdb0a3886393c431fed37566f7 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/doppler-dsp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@49d6ad689e6b50fdb0a3886393c431fed37566f7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file doppler_dsp-0.3.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: doppler_dsp-0.3.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 752.3 kB
- Tags: CPython 3.12, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cdcaf73165c6dac4e30b6f9d7eb26426b606784e60d9333a258bc2a1e716e83
|
|
| MD5 |
8a7a01244648360bb7ae9251e7cb2f9d
|
|
| BLAKE2b-256 |
419b33e3371e80c0c1eb15badad664c22e96cdd84017d549b233b03642b5c8bb
|
Provenance
The following attestation bundles were made for doppler_dsp-0.3.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on doppler-dsp/doppler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
doppler_dsp-0.3.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
8cdcaf73165c6dac4e30b6f9d7eb26426b606784e60d9333a258bc2a1e716e83 - Sigstore transparency entry: 1573950324
- Sigstore integration time:
-
Permalink:
doppler-dsp/doppler@49d6ad689e6b50fdb0a3886393c431fed37566f7 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/doppler-dsp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@49d6ad689e6b50fdb0a3886393c431fed37566f7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file doppler_dsp-0.3.4-cp312-cp312-macosx_14_0_arm64.whl.
File metadata
- Download URL: doppler_dsp-0.3.4-cp312-cp312-macosx_14_0_arm64.whl
- Upload date:
- Size: 594.8 kB
- Tags: CPython 3.12, macOS 14.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc17cb1e56d4b932f5f62539907c17c12bebdb6894452f3564aacde740d64017
|
|
| MD5 |
0ba81492f33503f69dc1f478bfdbdb3f
|
|
| BLAKE2b-256 |
36ec23a1cc151f2b30e45076c7cdbd6ada339f8e7aa95ac38751f4db84f880ec
|
Provenance
The following attestation bundles were made for doppler_dsp-0.3.4-cp312-cp312-macosx_14_0_arm64.whl:
Publisher:
release.yml on doppler-dsp/doppler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
doppler_dsp-0.3.4-cp312-cp312-macosx_14_0_arm64.whl -
Subject digest:
bc17cb1e56d4b932f5f62539907c17c12bebdb6894452f3564aacde740d64017 - Sigstore transparency entry: 1573950318
- Sigstore integration time:
-
Permalink:
doppler-dsp/doppler@49d6ad689e6b50fdb0a3886393c431fed37566f7 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/doppler-dsp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@49d6ad689e6b50fdb0a3886393c431fed37566f7 -
Trigger Event:
push
-
Statement type: