Comparison

numx vs the Alternatives

Different tools solve different problems. numx does not replace CMSIS-DSP for hardware-optimized Cortex-M DSP. It does not replace kiss_fft for someone who only needs a simple FFT. Here is what each library is optimized for, so you can pick the one that fits.

FeaturenumxCMSIS-DSPkiss_fftESP-DSPlibm
Platform coverageAny C99 targetCortex-M / Cortex-AAny C targetESP32 onlyAny C target
Zero dependenciesYesRequires CMSIS headersYesESP-IDFC stdlib
Zero dynamic allocationYesYesYesYesNo
Reentrant / ISR-safeYesMostlyYesVariesNo
FFTYes (f32 + Q15)Yes (many types)Yes (f32)Yes (optimized)No
Signal processingYesYesNoYesNo
ODE solversYesNoNoNoNo
Linear algebraYesPartialNoNoNo
Automatic differentiationYesNoNoNoNo
Compressed sensingYesNoNoNoNo
StatisticsYesPartialNoNoNo
Root findingYesNoNoNoNo
Integration / diffYesNoNoNoNo
Hardware SIMD (Helium, Neon)NoYesNoYes-
Typed status codesYesPartialNoNoNo
LicenseMITApache 2.0BSDApache 2.0Various

When to choose numx

  • + Project spans multiple platforms (ESP32, ARM, x86-64) and you want one library across all of them
  • + You need algorithms beyond DSP: ODE solvers, autodiff, compressed sensing, interpolation, root finding
  • + Targeting RISC-V, AVR, or ESP32 where CMSIS-DSP is not available
  • + You need full reentrancy guarantees (ISR + RTOS + multicore)
  • + You want typed error codes on every function call

When to choose CMSIS-DSP

  • + Exclusively targeting Cortex-M or Cortex-A and need hardware-accelerated SIMD (Helium, Neon)
  • + You need data types numx does not currently support: q7, q31, float16
  • + Already in the CMSIS ecosystem

When to choose kiss_fft

  • + You only need FFT and want minimal code with a well-established library
  • + On a platform with no numx validation data