diff options
| author | Finlay Davidson <finlay.davidson@coderclass.nl> | 2023-05-28 03:03:49 +0200 |
|---|---|---|
| committer | JF <JF002@users.noreply.github.com> | 2023-06-17 17:46:48 +0200 |
| commit | 505520d83b59e74cb567a3a1e6e55d910faec522 (patch) | |
| tree | b9f67465ea3e08156ab33440d5644b39c7a5e774 /src/libs/arduinoFFT-develop/Examples/FFT_01 | |
| parent | 473a0795d6fbad10fcf769cae3095bb85aa86d59 (diff) | |
arduinofft: Move to submodule, define srqt_internal externally
Diffstat (limited to 'src/libs/arduinoFFT-develop/Examples/FFT_01')
| -rw-r--r-- | src/libs/arduinoFFT-develop/Examples/FFT_01/FFT_01.ino | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/src/libs/arduinoFFT-develop/Examples/FFT_01/FFT_01.ino b/src/libs/arduinoFFT-develop/Examples/FFT_01/FFT_01.ino deleted file mode 100644 index 22b5024a..00000000 --- a/src/libs/arduinoFFT-develop/Examples/FFT_01/FFT_01.ino +++ /dev/null @@ -1,119 +0,0 @@ -/* - - Example of use of the FFT libray - - Copyright (C) 2014 Enrique Condes - Copyright (C) 2020 Bim Overbohm (header-only, template, speed improvements) - - 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/>. - -*/ - -/* - In this example, the Arduino simulates the sampling of a sinusoidal 1000 Hz - signal with an amplitude of 100, sampled at 5000 Hz. Samples are stored - inside the vReal array. The samples are windowed according to Hamming - function. The FFT is computed using the windowed samples. Then the magnitudes - of each of the frequencies that compose the signal are calculated. Finally, - the frequency with the highest peak is obtained, being that the main frequency - present in the signal. -*/ - -#include "arduinoFFT.h" - -/* -These values can be changed in order to evaluate the functions -*/ -const uint16_t samples = 64; //This value MUST ALWAYS be a power of 2 -const double signalFrequency = 1000; -const double samplingFrequency = 5000; -const uint8_t amplitude = 100; - -/* -These are the input and output vectors -Input vectors receive computed results from FFT -*/ -double vReal[samples]; -double vImag[samples]; - -/* Create FFT object */ -ArduinoFFT<double> FFT = ArduinoFFT<double>(vReal, vImag, samples, samplingFrequency); - -#define SCL_INDEX 0x00 -#define SCL_TIME 0x01 -#define SCL_FREQUENCY 0x02 -#define SCL_PLOT 0x03 - -void setup() -{ - Serial.begin(115200); - Serial.println("Ready"); -} - -void loop() -{ - /* Build raw data */ - double cycles = (((samples-1) * signalFrequency) / samplingFrequency); //Number of signal cycles that the sampling will read - for (uint16_t i = 0; i < samples; i++) - { - vReal[i] = int8_t((amplitude * (sin((i * (TWO_PI * 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*/ - vImag[i] = 0.0; //Imaginary part must be zeroed in case of looping to avoid wrong calculations and overflows - } - /* Print the results of the simulated sampling according to time */ - Serial.println("Data:"); - PrintVector(vReal, samples, SCL_TIME); - FFT.windowing(FFTWindow::Hamming, FFTDirection::Forward); /* Weigh data */ - Serial.println("Weighed data:"); - PrintVector(vReal, samples, SCL_TIME); - FFT.compute(FFTDirection::Forward); /* Compute FFT */ - Serial.println("Computed Real values:"); - PrintVector(vReal, samples, SCL_INDEX); - Serial.println("Computed Imaginary values:"); - PrintVector(vImag, samples, SCL_INDEX); - FFT.complexToMagnitude(); /* Compute magnitudes */ - Serial.println("Computed magnitudes:"); - PrintVector(vReal, (samples >> 1), SCL_FREQUENCY); - double x = FFT.majorPeak(); - Serial.println(x, 6); - while(1); /* Run Once */ - // delay(2000); /* Repeat after delay */ -} - -void PrintVector(double *vData, uint16_t bufferSize, uint8_t scaleType) -{ - for (uint16_t i = 0; i < bufferSize; i++) - { - double abscissa; - /* Print abscissa value */ - switch (scaleType) - { - case SCL_INDEX: - abscissa = (i * 1.0); - break; - case SCL_TIME: - abscissa = ((i * 1.0) / samplingFrequency); - break; - case SCL_FREQUENCY: - abscissa = ((i * 1.0 * samplingFrequency) / samples); - break; - } - Serial.print(abscissa, 6); - if(scaleType==SCL_FREQUENCY) - Serial.print("Hz"); - Serial.print(" "); - Serial.println(vData[i], 4); - } - Serial.println(); -} |
