Skip to main content

Crate embfft

Crate embfft 

Source
Expand description

§EmbFft

EmbFft is an easy to use Fast Fourier Transform library primarily meant for embedded systems. It is based on a state machine that allows other tasks to be performed between iterations, without having to rely on multi-threading or async functions.

§Features

The library offers the following features:

  • Easy to use
  • Non-blocking processing
  • Suitable for no_std environments
  • No external dependencies at run time
  • Low RAM requirements thanks to in-place conversion; no memory allocation is required
  • All trigonometry-related computations are performed at compile time, only additions and multiplications are required at run time
  • Supports any buffer size greater than 4, as long as it is a power of two
  • Allows single-precision (f32) as well as double-precision (f64) conversions

§Limitations

Because of the FFT algorithm used, the following limitations exist:

  • ROM space is required to store pre-computed sine tables
  • Buffers must be a power of 2 in size

§Examples

§Non-blocking

let mut data = [
    (1.0f32, 1.0), (2.0, 2.0),
    (3.0f32, 3.0), (4.0, 4.0),
    (5.0f32, 5.0), (6.0, 6.0),
    (7.0f32, 7.0), (8.0, 8.0)
];

let mut fft = embfft::EmbFft::new(&mut data);
while !fft.is_done() {
    fft.fft_iterate();
    // Other actions can be performed here between two iterations
}

for x in data {
    println!("{:?}", x);
}

§Blocking

let mut data = [
    (1.0f32, 1.0), (2.0, 2.0),
    (3.0f32, 3.0), (4.0, 4.0),
    (5.0f32, 5.0), (6.0, 6.0),
    (7.0f32, 7.0), (8.0, 8.0)
];

embfft::EmbFft::new(&mut data).fft();

for x in data {
    println!("{:?}", x);
}

§Acknowledgement

Thanks to Robert Bristow-Johnson for the explanation of the algorithm, as well as for the example implementation.

§Changelog

DateVersionChanges
2025-04-090.2.1Code cleanup and performance improvement
2025-04-060.2.0Add inverse FFT
2025-04-050.1.0Initial release

Structs§

EmbFft
Decimation in frequency fast Fourier transform
EmbIfft
Decimation in time inverse fast Fourier transform