kopia lustrzana https://github.com/kosme/arduinoFFT
82 wiersze
3.3 KiB
Markdown
82 wiersze
3.3 KiB
Markdown
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 and 1.8.10.
|
|
|
|
## 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:
|
|
|
|
`Arduino\libraries\arduinoFTT` (this library's folder)
|
|
`Arduino\libraries\arduinoFTT\arduinoFTT.h` (the library header file, uses 32 bit floats or 64bit doubles)
|
|
`Arduino\libraries\arduinoFTT\keywords.txt` (the syntax coloring file)
|
|
`Arduino\libraries\arduinoFTT\examples` (the examples in the "open" menu)
|
|
`Arduino\libraries\arduinoFTT\LICENSE` (GPL license file)
|
|
`Arduino\libraries\arduinoFTT\README.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**(T *vReal, T *vImag, uint_fast16_t samples, T samplingFrequency, T * weighingFactors = nullptr);
|
|
Constructor.
|
|
The type `T` can be `float` or `double`. `vReal` and `vImag` are pointers to arrays of real and imaginary data and have to be allocated outside of ArduinoFFT. `samples` is the number of samples in `vReal` and `vImag` and `weighingFactors` (if specified). `samplingFrequency` is the sample frequency of the data. `weighingFactors` can optionally be specified to cache weighing factors for the windowing function. This speeds up repeated calls to **windowing()** significantly.
|
|
|
|
* **~ArduinoFFT**(void);
|
|
Destructor.
|
|
* **complexToMagnitude**();
|
|
Convert complex values to their magnitude and store in vReal.
|
|
* **compute**(FFTDirection dir);
|
|
Calcuates the Fast Fourier Transform.
|
|
* **dcRemoval**();
|
|
Removes the DC component from the sample data.
|
|
* **majorPeak**();
|
|
Looks for and returns the frequency of the biggest spike in the analyzed signal.
|
|
* **revision**();
|
|
Returns the library revision.
|
|
* **windowing**(FFTWindow windowType, FFTDirection dir);
|
|
Performs a windowing function on the values array. The possible windowing options are:
|
|
* Rectangle
|
|
* Hamming
|
|
* Hann
|
|
* Triangle
|
|
* Nuttall
|
|
* Blackman
|
|
* Blackman_Nuttall
|
|
* Blackman_Harris
|
|
* Flat_top
|
|
* Welch
|
|
|
|
## Special flags
|
|
|
|
You can define these before including arduinoFFT.h:
|
|
|
|
* #define FFT_SPEED_OVER_PRECISION
|
|
Define this to use reciprocal multiplication for division and some more speedups that might decrease precision.
|
|
|
|
* #define FFT_SQRT_APPROXIMATION
|
|
Define this to use a low-precision square root approximation instead of the regular sqrt() call. This might only work for specific use cases, but is significantly faster. Only works if `T == float`.
|