arduinoFFT
Fast Fourier Transform for Arduino
This is a fork from https://code.google.com/p/makefurt/ which has been abandoned since 2011.
This is a C++ library for Arduino for computing FFT. Now it works both on Arduino and C projects.
Tested on Arduino 1.6.11
Installation on Arduino
Use the Arduino Library Manager to install and keep it updated. Just look for arduinoFFT. Only for Arduino 1.5+
Manual installation on Arduino
To install this library, just place this entire folder as a subfolder in your Arduino installation
When installed, this library should look like:
ArduinolibrariesarduinoFTT (this library’s folder) ArduinolibrariesarduinoFTTarduinoFTT.cpp (the library implementation file, uses 32 bits floats vectors) ArduinolibrariesarduinoFTTarduinoFTT.h (the library header file, uses 32 bits floats vectors) ArduinolibrariesarduinoFTTkeywords.txt (the syntax coloring file) ArduinolibrariesarduinoFTTexamples (the examples in the “open” menu) ArduinolibrariesarduinoFTTreadme.md (this file)
Building on Arduino
After this library is installed, you just have to start the Arduino application. You may see a few warning messages as it’s built.
To use this library in a sketch, go to the Sketch | Import Library menu and select arduinoFTT. This will add a corresponding line to the top of your sketch:
#include <arduinoFTT.h>
TODO
Ratio table for windowing function.
Document windowing functions advantages and disadvantages.
Optimize usage and arguments.
Add new windowing functions.
* Spectrum table?
API
arduinoFFT(void);
arduinoFFT(double *vReal, double *vImag, uint16_t samples, double samplingFrequency); Constructor
~arduinoFFT(void); Destructor
ComplexToMagnitude(double *vReal, double *vImag, uint16_t samples);
ComplexToMagnitude();
Compute(double *vReal, double *vImag, uint16_t samples, uint8_t dir);
Compute(double *vReal, double *vImag, uint16_t samples, uint8_t power, uint8_t dir);
Compute(uint8_t dir); Calcuates the Fast Fourier Transform.
DCRemoval(double *vData, uint16_t samples);
DCRemoval(); Removes the DC component from the sample data.
MajorPeak(double *vD, uint16_t samples, double samplingFrequency);
MajorPeak();
MajorPeakParabola(); Looks for and returns the frequency of the biggest spike in the analyzed signal.
Revision(void); Returns the library revision.
Windowing(double *vData, uint16_t samples, uint8_t windowType, uint8_t dir);
Windowing(uint8_t windowType, uint8_t dir); Performs a windowing function on the values array. The possible windowing options are:
FFT_WIN_TYP_RECTANGLE
FFT_WIN_TYP_HAMMING
FFT_WIN_TYP_HANN
FFT_WIN_TYP_TRIANGLE
FFT_WIN_TYP_NUTTALL
FFT_WIN_TYP_BLACKMAN
FFT_WIN_TYP_BLACKMAN_NUTTALL
FFT_WIN_TYP_BLACKMAN_HARRIS
FFT_WIN_TYP_FLT_TOP
FFT_WIN_TYP_WELCH
Exponent(uint16_t value); Calculates and returns the base 2 logarithm of the given value.
References
Used by
Basic Tasks Sample
SoC support
esp32
esp32c2
esp32c3
esp32s2
esp32s3
esp8266
host
rp2040
rp2350