ESP32 240 MHz, FPU ESP32-S3 243/243 validated ESP-IDF v5+

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.

ESP32-S3 tests243 / 243
malloc() calls0
Modules validated8 of 14
PlatformESP-IDF v5

Quick start with ESP-IDF

1. Add component

bash
# In your ESP-IDF project
git clone https://github.com/NIKX-Tech/numx.git components/numx
idf.py set-target esp32s3
idf.py build

2. Use in your app

c
#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 */
}

Ready to build?

Follow the full integration guide or browse the module documentation.