kopia lustrzana https://github.com/kosme/arduinoFFT
Fix to issue 57
rodzic
89defc7588
commit
b19bdc7b6c
|
@ -248,7 +248,11 @@ void arduinoFFT::Windowing(uint8_t windowType, uint8_t dir)
|
||||||
weighingFactor = 0.54 * (1.0 - cos(twoPi * ratio));
|
weighingFactor = 0.54 * (1.0 - cos(twoPi * ratio));
|
||||||
break;
|
break;
|
||||||
case FFT_WIN_TYP_TRIANGLE: // triangle (Bartlett)
|
case FFT_WIN_TYP_TRIANGLE: // triangle (Bartlett)
|
||||||
|
#if defined(ESP8266) || defined(ESP32)
|
||||||
|
weighingFactor = 1.0 - ((2.0 * fabs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne);
|
||||||
|
#else
|
||||||
weighingFactor = 1.0 - ((2.0 * abs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne);
|
weighingFactor = 1.0 - ((2.0 * abs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case FFT_WIN_TYP_NUTTALL: // nuttall
|
case FFT_WIN_TYP_NUTTALL: // nuttall
|
||||||
weighingFactor = 0.355768 - (0.487396 * (cos(twoPi * ratio))) + (0.144232 * (cos(fourPi * ratio))) - (0.012604 * (cos(sixPi * ratio)));
|
weighingFactor = 0.355768 - (0.487396 * (cos(twoPi * ratio))) + (0.144232 * (cos(fourPi * ratio))) - (0.012604 * (cos(sixPi * ratio)));
|
||||||
|
@ -302,7 +306,11 @@ void arduinoFFT::Windowing(double *vData, uint16_t samples, uint8_t windowType,
|
||||||
weighingFactor = 0.54 * (1.0 - cos(twoPi * ratio));
|
weighingFactor = 0.54 * (1.0 - cos(twoPi * ratio));
|
||||||
break;
|
break;
|
||||||
case FFT_WIN_TYP_TRIANGLE: // triangle (Bartlett)
|
case FFT_WIN_TYP_TRIANGLE: // triangle (Bartlett)
|
||||||
|
#if defined(ESP8266) || defined(ESP32)
|
||||||
|
weighingFactor = 1.0 - ((2.0 * fabs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne);
|
||||||
|
#else
|
||||||
weighingFactor = 1.0 - ((2.0 * abs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne);
|
weighingFactor = 1.0 - ((2.0 * abs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case FFT_WIN_TYP_NUTTALL: // nuttall
|
case FFT_WIN_TYP_NUTTALL: // nuttall
|
||||||
weighingFactor = 0.355768 - (0.487396 * (cos(twoPi * ratio))) + (0.144232 * (cos(fourPi * ratio))) - (0.012604 * (cos(sixPi * ratio)));
|
weighingFactor = 0.355768 - (0.487396 * (cos(twoPi * ratio))) + (0.144232 * (cos(fourPi * ratio))) - (0.012604 * (cos(sixPi * ratio)));
|
||||||
|
@ -376,7 +384,11 @@ void arduinoFFT::MajorPeak(double *f, double *v)
|
||||||
interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples);
|
interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples);
|
||||||
// returned value: interpolated frequency peak apex
|
// returned value: interpolated frequency peak apex
|
||||||
*f = interpolatedX;
|
*f = interpolatedX;
|
||||||
|
#if defined(ESP8266) || defined(ESP32)
|
||||||
|
*v = fabs(this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1]);
|
||||||
|
#else
|
||||||
*v = abs(this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1]);
|
*v = abs(this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1]);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double arduinoFFT::MajorPeak(double *vD, uint16_t samples, double samplingFrequency)
|
double arduinoFFT::MajorPeak(double *vD, uint16_t samples, double samplingFrequency)
|
||||||
|
@ -424,7 +436,11 @@ void arduinoFFT::MajorPeak(double *vD, uint16_t samples, double samplingFrequenc
|
||||||
interpolatedX = ((IndexOfMaxY + delta) * samplingFrequency) / (samples);
|
interpolatedX = ((IndexOfMaxY + delta) * samplingFrequency) / (samples);
|
||||||
// returned value: interpolated frequency peak apex
|
// returned value: interpolated frequency peak apex
|
||||||
*f = interpolatedX;
|
*f = interpolatedX;
|
||||||
|
#if defined(ESP8266) || defined(ESP32)
|
||||||
|
*v = fabs(vD[IndexOfMaxY - 1] - (2.0 * vD[IndexOfMaxY]) + vD[IndexOfMaxY + 1]);
|
||||||
|
#else
|
||||||
*v = abs(vD[IndexOfMaxY - 1] - (2.0 * vD[IndexOfMaxY]) + vD[IndexOfMaxY + 1]);
|
*v = abs(vD[IndexOfMaxY - 1] - (2.0 * vD[IndexOfMaxY]) + vD[IndexOfMaxY + 1]);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t arduinoFFT::Exponent(uint16_t value)
|
uint8_t arduinoFFT::Exponent(uint16_t value)
|
||||||
|
|
Ładowanie…
Reference in New Issue