| Crates.io | embfft |
| lib.rs | embfft |
| version | 0.2.1 |
| created_at | 2025-04-05 20:33:56.155399+00 |
| updated_at | 2025-04-09 20:32:17.21428+00 |
| description | Non-blocking FFT for embedded systems |
| homepage | |
| repository | https://github.com/lsartory/embfft |
| max_upload_size | |
| id | 1622391 |
| size | 45,307 |
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.
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
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
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);
}
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);
}
Thanks to Robert Bristow-Johnson for the explanation of the algorithm, as well as for the example implementation.
| Date | Version | Changes |
|---|---|---|
| 2025-04-09 | 0.2.1 | Code cleanup and performance improvement |
| 2025-04-06 | 0.2.0 | Add inverse FFT |
| 2025-04-05 | 0.1.0 | Initial release |