diff --git a/Examples/FFT_01/FFT_01.ino b/Examples/FFT_01/FFT_01.ino index c60e054..c41d22c 100644 --- a/Examples/FFT_01/FFT_01.ino +++ b/Examples/FFT_01/FFT_01.ino @@ -60,11 +60,11 @@ void setup() void loop() { /* Build raw data */ - double cycles = (((samples-1) * signalFrequency) / samplingFrequency); //Number of signal cycles that the sampling will read + double ratio = twoPi * signalFrequency / samplingFrequency; // Fraction of a complete cycle stored at each sample (in radians) for (uint16_t i = 0; i < samples; i++) { - vReal[i] = int8_t((amplitude * (sin((i * (twoPi * cycles)) / samples))) / 2.0);/* Build data with positive and negative values*/ - //vReal[i] = uint8_t((amplitude * (sin((i * (twoPi * cycles)) / samples) + 1.0)) / 2.0);/* Build data displaced on the Y axis to include only positive values*/ + vReal[i] = int8_t(amplitude * sin(i * ratio) / 2.0);/* Build data with positive and negative values*/ + //vReal[i] = uint8_t((amplitude * (sin(i * ratio) + 1.0)) / 2.0);/* Build data displaced on the Y axis to include only positive values*/ vImag[i] = 0.0; //Imaginary part must be zeroed in case of looping to avoid wrong calculations and overflows } diff --git a/Examples/FFT_02/FFT_02.ino b/Examples/FFT_02/FFT_02.ino index c71e588..4c7ecd6 100644 --- a/Examples/FFT_02/FFT_02.ino +++ b/Examples/FFT_02/FFT_02.ino @@ -63,10 +63,10 @@ void loop() for(double frequency = startFrequency; frequency<=stopFrequency; frequency+=step_size) { /* Build raw data */ - double cycles = (((samples-1) * frequency) / sampling); + double ratio = twoPi * frequency / sampling; // Fraction of a complete cycle stored at each sample (in radians) for (uint16_t i = 0; i < samples; i++) { - vReal[i] = int8_t((amplitude * (sin((i * (twoPi * cycles)) / samples))) / 2.0); + vReal[i] = int8_t(amplitude * sin(i * ratio) / 2.0);/* Build data with positive and negative values*/ vImag[i] = 0; //Reset the imaginary values vector for each new frequency } /*Serial.println("Data:"); diff --git a/Examples/FFT_04/FFT_04.ino b/Examples/FFT_04/FFT_04.ino index 36c2ac7..be6a970 100644 --- a/Examples/FFT_04/FFT_04.ino +++ b/Examples/FFT_04/FFT_04.ino @@ -61,11 +61,11 @@ void setup() void loop() { /* Build raw data */ - double cycles = (((samples-1) * signalFrequency) / samplingFrequency); //Number of signal cycles that the sampling will read + double ratio = twoPi * signalFrequency / samplingFrequency; // Fraction of a complete cycle stored at each sample (in radians) for (uint16_t i = 0; i < samples; i++) { - vReal[i] = int8_t((amplitude * (sin((i * (twoPi * cycles)) / samples))) / 2.0);/* Build data with positive and negative values*/ - //vReal[i] = uint8_t((amplitude * (sin((i * (twoPi * cycles)) / samples) + 1.0)) / 2.0);/* Build data displaced on the Y axis to include only positive values*/ + vReal[i] = int8_t(amplitude * sin(i * ratio) / 2.0);/* Build data with positive and negative values*/ + //vReal[i] = uint8_t((amplitude * (sin(i * ratio) + 1.0)) / 2.0);/* Build data displaced on the Y axis to include only positive values*/ vImag[i] = 0.0; //Imaginary part must be zeroed in case of looping to avoid wrong calculations and overflows } FFT = arduinoFFT(vReal, vImag, samples, samplingFrequency); /* Create FFT object */ diff --git a/Examples/FFT_05/FFT_05.ino b/Examples/FFT_05/FFT_05.ino index 6a87686..a382b7f 100644 --- a/Examples/FFT_05/FFT_05.ino +++ b/Examples/FFT_05/FFT_05.ino @@ -61,11 +61,11 @@ void setup() void loop() { /* Build raw data */ - double cycles = (((samples-1) * signalFrequency) / samplingFrequency); //Number of signal cycles that the sampling will read + double ratio = twoPi * signalFrequency / samplingFrequency; // Fraction of a complete cycle stored at each sample (in radians) for (uint16_t i = 0; i < samples; i++) { - vReal[i] = int8_t((amplitude * (sin((i * (twoPi * cycles)) / samples))) / 2.0);/* Build data with positive and negative values*/ - //vReal[i] = uint8_t((amplitude * (sin((i * (twoPi * cycles)) / samples) + 1.0)) / 2.0);/* Build data displaced on the Y axis to include only positive values*/ + vReal[i] = int8_t(amplitude * sin(i * ratio) / 2.0);/* Build data with positive and negative values*/ + //vReal[i] = uint8_t((amplitude * (sin(i * ratio) + 1.0)) / 2.0);/* Build data displaced on the Y axis to include only positive values*/ vImag[i] = 0.0; //Imaginary part must be zeroed in case of looping to avoid wrong calculations and overflows } FFT = arduinoFFT(vReal, vImag, samples, samplingFrequency); /* Create FFT object */ diff --git a/README.md b/README.md index 0a36864..93cd705 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Destructor * **!Compute**(double *vReal, double *vImag, uint16_t samples, uint8_t dir); * **!Compute**(double *vReal, double *vImag, uint16_t samples, uint8_t power, uint8_t dir); * **Compute**(uint8_t dir); -Calcuates the Fast Fourier Transform. +Calculates the Fast Fourier Transform. * **!DCRemoval**(double *vData, uint16_t samples); * **DCRemoval**(); Removes the DC component from the sample data. diff --git a/changeLog.txt b/changeLog.txt index 33612ef..e15375d 100644 --- a/changeLog.txt +++ b/changeLog.txt @@ -1,3 +1,9 @@ +28/12/23 v1.6.2 +Fix issue 52 and symplify calculation of synthetic data for examples 1, 2, 4, and 5. + +25/07/23 v1.6.1 +Code optimization for speed improvements. See issue 84 for more details. + 03/09/23 v1.6 Include some functionality from development branch. diff --git a/library.json b/library.json index 23366bd..87dadea 100644 --- a/library.json +++ b/library.json @@ -20,7 +20,7 @@ "email": "contact@arduinoos.com" } ], - "version": "1.6.1", + "version": "1.6.2", "frameworks": ["arduino","mbed","espidf"], "platforms": "*", "headers": "arduinoFFT.h" diff --git a/library.properties b/library.properties index 712867e..951628c 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=arduinoFFT -version=1.6.1 +version=1.6.2 author=Enrique Condes maintainer=Enrique Condes sentence=A library for implementing floating point Fast Fourier Transform calculations on Arduino. diff --git a/src/arduinoFFT.cpp b/src/arduinoFFT.cpp index 417cd27..02b1b67 100644 --- a/src/arduinoFFT.cpp +++ b/src/arduinoFFT.cpp @@ -292,7 +292,7 @@ void arduinoFFT::Windowing(FFTWindow windowType, FFTDirection dir) { void arduinoFFT::Windowing(double *vData, uint16_t samples, FFTWindow windowType, FFTDirection dir) { // Weighing factors are computed once before multiple use of FFT -// The weighing function is symetric; half the weighs are recorded +// The weighing function is symmetric; half the weighs are recorded #warning("This method is deprecated and may be removed on future revisions.") double samplesMinusOne = (double(samples) - 1.0); for (uint16_t i = 0; i < (samples >> 1); i++) {