6 releases
Uses new Rust 2024
| new 0.1.7 | May 16, 2026 |
|---|---|
| 0.1.6 | May 8, 2026 |
| 0.1.4 | Apr 18, 2026 |
#45 in #signal-processing
3.5MB
70K
SLoC
oxicuda-signal
Part of the OxiCUDA ecosystem — Pure Rust CUDA replacement for the COOLJAPAN ecosystem.
Overview
oxicuda-signal is a GPU-accelerated signal, audio, and image processing library for the OxiCUDA ecosystem. It provides CPU reference implementations alongside PTX-generating GPU kernels for a wide range of DSP operations — from spectral transforms and wavelet decompositions to audio feature extraction and computer vision primitives. Kernels are emitted as WGSL/PTX strings at runtime and compiled via the CUDA JIT; no pre-compiled .ptx files are shipped.
Features
- Spectral transforms — DCT-II/III/IV, MDCT/IMDCT via the
dctmodule; Haar, Daubechies db2–db10, Symlets, Biorthogonal, and Coiflet wavelets with multi-level DWT via thedwtmodule - Audio processing — STFT, mel filterbank, MFCC, chroma features, and spectrogram variants (magnitude, power, mel)
- Filtering — FIR (windowed-sinc, raised-cosine), IIR (biquad SOS cascade), and Wiener filter
- Correlation — Autocorrelation, cross-correlation, GCC-PHAT time-delay estimation, circular convolution, PACF, Ljung-Box Q
- Image processing — Non-Maximum Suppression (greedy, soft, heatmap), morphological operations (erode, dilate, open, close, gradient), Gaussian blur, Sobel edge detection
- Window functions — Hann, Hamming, Blackman, Kaiser, flat-top and others with ENBW/CG metrics
- Zero-copy PTX — All GPU kernels generated as
Stringat runtime for JIT compilation
Usage
Add to your Cargo.toml:
[dependencies]
oxicuda-signal = "0.1.5"
use oxicuda_signal::prelude::*;
// Compute MFCC features from a raw audio frame
let samples: Vec<f32> = vec![0.0; 16000];
let config = MfccConfig::default();
let mfcc_features = mfcc(&samples, config).unwrap();
// Multi-level DWT decomposition
let signal = vec![1.0_f32, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0];
let decomp = multilevel_forward(&signal, WaveletFamily::Haar, 2).unwrap();
let reconstructed = multilevel_inverse(&decomp, WaveletFamily::Haar).unwrap();
Status
v0.1.5 (2026-05-01) — 240 tests passing
License
Apache-2.0 — © 2026 COOLJAPAN OU (Team KitaSan)
Dependencies
~6–9MB
~95K SLoC