| 
							- /*
 - 
 - 	FFT libray
 - 	Copyright (C) 2010 Didier Longueville
 - 	Copyright (C) 2014 Enrique Condes
 - 
 - 	This program is free software: you can redistribute it and/or modify
 - 	it under the terms of the GNU General Public License as published by
 - 	the Free Software Foundation, either version 3 of the License, or
 - 	(at your option) any later version.
 - 
 - 	This program is distributed in the hope that it will be useful,
 - 	but WITHOUT ANY WARRANTY; without even the implied warranty of
 - 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - 	GNU General Public License for more details.
 - 
 - 	You should have received a copy of the GNU General Public License
 - 	along with this program.  If not, see <http://www.gnu.org/licenses/>.
 - 
 - */
 - 
 - #ifndef arduinoFFT_h /* Prevent loading library twice */
 - #define arduinoFFT_h
 - 
 - #include <stdlib.h>
 - #include <stdio.h>
 - #include <math.h>
 - #include <defs.h>
 - #include <types.h>
 - 
 - #define FFT_LIB_REV 0x14
 - /* Custom constants */
 - #define FFT_FORWARD 0x01
 - #define FFT_REVERSE 0x00
 - 
 - /* Windowing type */
 - #define FFT_WIN_TYP_RECTANGLE 0x00 /* rectangle (Box car) */
 - #define FFT_WIN_TYP_HAMMING 0x01 /* hamming */
 - #define FFT_WIN_TYP_HANN 0x02 /* hann */
 - #define FFT_WIN_TYP_TRIANGLE 0x03 /* triangle (Bartlett) */
 - #define FFT_WIN_TYP_NUTTALL 0x04 /* nuttall */
 - #define FFT_WIN_TYP_BLACKMAN 0x05 /* blackman */
 - #define FFT_WIN_TYP_BLACKMAN_NUTTALL 0x06 /* blackman nuttall */
 - #define FFT_WIN_TYP_BLACKMAN_HARRIS 0x07 /* blackman harris*/
 - #define FFT_WIN_TYP_FLT_TOP 0x08 /* flat top */
 - #define FFT_WIN_TYP_WELCH 0x09 /* welch */
 - /*Mathematial constants*/
 - #define twoPi 6.28318531
 - #define fourPi 12.56637061
 - #define sixPi 18.84955593
 - 
 - #ifdef __AVR__
 - 	static const double _c1[]PROGMEM = {0.0000000000, 0.7071067812, 0.9238795325, 0.9807852804,
 - 																0.9951847267, 0.9987954562, 0.9996988187, 0.9999247018,
 - 																0.9999811753, 0.9999952938, 0.9999988235, 0.9999997059,
 - 																0.9999999265, 0.9999999816, 0.9999999954, 0.9999999989,
 - 																0.9999999997};
 - 	static const double _c2[]PROGMEM = {1.0000000000, 0.7071067812, 0.3826834324, 0.1950903220,
 - 																0.0980171403, 0.0490676743, 0.0245412285, 0.0122715383,
 - 																0.0061358846, 0.0030679568, 0.0015339802, 0.0007669903,
 - 																0.0003834952, 0.0001917476, 0.0000958738, 0.0000479369,
 - 																0.0000239684};
 - #endif
 - class arduinoFFT {
 - public:
 - 	/* Constructor */
 - 	arduinoFFT(void);
 - 	arduinoFFT(double *vReal, double *vImag, uint16_t samples, double samplingFrequency);
 - 	/* Destructor */
 - 	~arduinoFFT(void);
 - 	/* Functions */
 - 	uint8_t Revision(void);
 - 	uint8_t Exponent(uint16_t value);
 - 
 - 	void ComplexToMagnitude(double *vReal, double *vImag, uint16_t samples);
 - 	void Compute(double *vReal, double *vImag, uint16_t samples, uint8_t dir);
 - 	void Compute(double *vReal, double *vImag, uint16_t samples, uint8_t power, uint8_t dir);
 - 	void DCRemoval(double *vData, uint16_t samples);
 - 	double MajorPeak(double *vD, uint16_t samples, double samplingFrequency);
 - 	void MajorPeak(double *vD, uint16_t samples, double samplingFrequency, double *f, double *v);
 - 	void Windowing(double *vData, uint16_t samples, uint8_t windowType, uint8_t dir);
 - 
 - 	void ComplexToMagnitude();
 - 	void Compute(uint8_t dir);
 - 	void DCRemoval();
 - 	void MajorPeakAndMagnitude(double *freq_interpolated, double *mag_interpolated); // Added by me
 - 	double MajorPeak();
 - 	void MajorPeak(double *f, double *v);
 - 	void Windowing(uint8_t windowType, uint8_t dir);
 - 
 - private:
 - 	/* Variables */
 - 	uint16_t _samples;
 - 	double _samplingFrequency;
 - 	double *_vReal;
 - 	double *_vImag;
 - 	uint8_t _power;
 - 	/* Functions */
 - 	void Swap(double *x, double *y);
 - };
 - 
 - #endif
 
 
  |