Crate spectrum_analyzer
source · [−]Expand description
A simple and fast no_std
library to get the frequency spectrum of a digital signal
(e.g. audio) using FFT. It follows the KISS principle and consists of simple building
blocks/optional features.
In short, this is a convenient wrapper around a FFT implementation. You choose the implementation at compile time via Cargo features. This crate uses “microfft” by default for FFT. See README for more advise.
Examples
Scaling via dynamic closure
use spectrum_analyzer::{samples_fft_to_spectrum, FrequencyLimit};
// get data from audio source
let samples = vec![0.0, 1.1, 5.5, -5.5];
let res = samples_fft_to_spectrum(
&samples,
44100,
FrequencyLimit::All,
Some(&|val, info| val - info.min),
);
Scaling via static function
use spectrum_analyzer::{samples_fft_to_spectrum, FrequencyLimit};
use spectrum_analyzer::scaling::scale_to_zero_to_one;
// get data from audio source
let samples = vec![0.0, 1.1, 5.5, -5.5];
let res = samples_fft_to_spectrum(
&samples,
44100,
FrequencyLimit::All,
Some(&scale_to_zero_to_one),
);
Modules
Errors related to the spectrum analysis via FFT. Most probably, the errors will result in wrong input data, before the actual calculation has begun.
This module contains convenient public transform functions that you can use
as parameters in crate::samples_fft_to_spectrum
for scaling the
frequency value (the FFT result). They act as “idea/inspiration”. Feel free
to either compose them or create your own derivation from them.
Several window functions which you can apply before doing the FFT. For more information:
Structs
Convenient wrapper around the processed FFT result which describes each frequency and
its value/amplitude in the analyzed slice of samples. It only consists of the frequencies
which were desired, e.g. specified via
crate::limit::FrequencyLimit
when crate::samples_fft_to_spectrum
was called.
Enums
Can be used to specify a desired frequency limit. If you know that you only
need frequencies f <= 1000Hz
, 1000 <= f <= 6777
, or 10000 <= f
, then this
can help you to accelerate overall computation speed and memory usage.
Possible errors when creating a FrequencyLimit
-object.
Functions
Takes an array of samples (length must be a power of 2), e.g. 2048, applies an FFT (using the specified FFT implementation) on it and returns all frequencies with their volume/magnitude.
Type Definitions
A frequency. A convenient wrapper type around f32
.
The value of a frequency in a frequency spectrum. Convenient wrapper around f32
.
Not necessarily the magnitude of the complex numbers because scaling/normalization
functions could have been applied.