diff --git a/README.md b/README.md index 851bf39..37861ba 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,9 @@ Destructor * **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**(); Looks for and returns the frequency of the biggest spike in the analyzed signal. diff --git a/keywords.txt b/keywords.txt index 3a25dd3..1daabde 100644 --- a/keywords.txt +++ b/keywords.txt @@ -14,6 +14,7 @@ arduinoFFT KEYWORD1 ComplexToMagnitude KEYWORD2 Compute KEYWORD2 +DCRemoval KEYWORD2 Windowing KEYWORD2 Exponent KEYWORD2 Revision KEYWORD2 diff --git a/src/arduinoFFT.cpp b/src/arduinoFFT.cpp index c44d4d9..d4b411b 100644 --- a/src/arduinoFFT.cpp +++ b/src/arduinoFFT.cpp @@ -177,6 +177,39 @@ void arduinoFFT::ComplexToMagnitude(double *vReal, double *vImag, uint16_t sampl } } +void arduinoFFT::DCRemoval() +{ + // calculate the mean of vData + double mean = 0; + for (uint16_t i = 1; i < ((this->_samples >> 1) + 1); i++) + { + mean += this->_vReal[i]; + } + mean /= this->_samples; + // Subtract the mean from vData + for (uint16_t i = 1; i < ((this->_samples >> 1) + 1); i++) + { + this->_vReal[i] -= mean; + } +} + +void arduinoFFT::DCRemoval(double *vData, uint16_t samples) +{ + // calculate the mean of vData + #warning("This method is deprecated and will be removed on future revisions.") + double mean = 0; + for (uint16_t i = 1; i < ((samples >> 1) + 1); i++) + { + mean += vData[i]; + } + mean /= samples; + // Subtract the mean from vData + for (uint16_t i = 1; i < ((samples >> 1) + 1); i++) + { + vData[i] -= mean; + } +} + void arduinoFFT::Windowing(uint8_t windowType, uint8_t dir) {// Weighing factors are computed once before multiple use of FFT // The weighing function is symetric; half the weighs are recorded diff --git a/src/arduinoFFT.h b/src/arduinoFFT.h index 3b8c203..665dea3 100644 --- a/src/arduinoFFT.h +++ b/src/arduinoFFT.h @@ -72,10 +72,12 @@ public: 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 Windowing(double *vData, uint16_t samples, uint8_t windowType, uint8_t dir); void ComplexToMagnitude(); void Compute(uint8_t dir); + void DCRemoval(); double MajorPeak(); void Windowing(uint8_t windowType, uint8_t dir);