numx for ESP32: Scientific Computing
at 240 MHz
ESP32 runs at 240 MHz with hardware floating-point. Now it can run real math to match. The ESP32 has the silicon to handle serious numerical computation. Until numx, the software ecosystem had not caught up.
Production Validated
243 tests. 243 passing. On the hardware.
NIKX Technologies ran numx in the TERRA production IoT platform on ESP32-S3 hardware through 2024 and 2025. Signal processing pipelines, ODE solvers, FFT, linear algebra, all running allocation-free at 240 MHz. The validation numbers are not synthetic. They are from production workloads.
Quick start with ESP-IDF
1. Add component
# In your ESP-IDF project
git clone https://github.com/NIKX-Tech/numx.git components/numx
idf.py set-target esp32s3
idf.py build2. Use in your app
#include "numx/numx.h"
/* Example: FIR low-pass filter on ADC stream */
void app_main(void) {
/* 32-tap FIR coefficients (low-pass, Fs=10kHz, Fc=1kHz) */
static const numx_real_t h[32] = { /* ... */ };
static numx_real_t adc_buf[256];
static numx_real_t filtered[256];
/* Acquire ADC samples ... */
numx_status_t s = numx_signal_fir(h, 32, adc_buf, 256, filtered);
if (s != NUMX_OK) return;
/* FFT to find dominant frequency */
static numx_complex_f32_t fft_buf[256];
for (int i = 0; i < 256; i++) {
fft_buf[i].re = filtered[i];
fft_buf[i].im = 0.0f;
}
numx_fft_f32(fft_buf, 256);
numx_real_t mag[129];
numx_fft_magnitude(fft_buf, 256, mag);
/* mag[k] is amplitude at k * (Fs / N) Hz */
}Available modules
All modules compile and run on ESP32. Eight are production-validated on ESP32-S3.
linalg
Vectors and matrices.
stats
Descriptive statistics on fixed-size buffers.
roots
Equation root-finding.
integrate
Numerical integration.
differentiate
Finite difference derivatives.
interpolate
Curve fitting and reconstruction.
poly
Polynomial arithmetic.
ode
ODE solvers for physical simulation.
signal
Signal processing primitives.
fft
Fast Fourier Transform.
autodiff
Automatic differentiation without a runtime.
compressed_sensing
Sparse signal recovery.
sketch
Randomized matrix methods.
ntt
Number Theoretic Transform over Z_3329[x]/(x^256+1).
Ready to build?
Follow the full integration guide or browse the module documentation.