Add DC removal function

pull/24/head
Dantali0n 2018-11-24 11:42:59 +01:00
rodzic 68e59c2e61
commit efc53f9f60
4 zmienionych plików z 40 dodań i 0 usunięć

Wyświetl plik

@ -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.

Wyświetl plik

@ -14,6 +14,7 @@ arduinoFFT KEYWORD1
ComplexToMagnitude KEYWORD2
Compute KEYWORD2
DCRemoval KEYWORD2
Windowing KEYWORD2
Exponent KEYWORD2
Revision KEYWORD2

Wyświetl plik

@ -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

Wyświetl plik

@ -72,10 +72,13 @@ 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 Windowing(double *vData, uint16_t samples, uint8_t windowType, uint8_t dir, uint8_t a);
void ComplexToMagnitude();
void Compute(uint8_t dir);
void DCRemoval();
double MajorPeak();
void Windowing(uint8_t windowType, uint8_t dir);