/*
Example of use of the FFT library to compute FFT for a signal sampled through the ADC.
Copyright (C) 2018 Enrique Condés and Ragnar Ranøyen Homb
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/>.
*/
#include "arduinoFFT.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>
#include <Arduino.h>
#define DC 4
#define CS 1
#define MOSI 3
#define SCK 2
#define RST 5
#define MISO 0
const double sw1[] = {4.00, 3.00, 4.00, 3.00, 2.00, 3.00, 6.00, 4.00, 4.00, 6.00, 2.00, 2.00, 4.00, 4.00, 4.00, 2.00, 2.00, 4.00, 6.00, 2.00, 4.00, 6.00, 2.00, 2.00, 2.00, 4.00, 4.00, 540.00, 540.00, 542.00, 538.00, 539.00, 539.00, 539.00, 538.00, 538.00, 540.00, 542.00, 538.00, 538.00, 539.00, 540.00, 542.00, 538.00, 538.00, 540.00, 539.00, 540.00, 540.00, 543.00, 539.00, 538.00, 539.00, 543.00, 538.00, 539.00, 4.00, 7.00, 7.00, 3.00, 4.00, 3.00, 4.00, 6.00, 4.00, 4.00, 3.00, 4.00, 3.00, 3.00, 4.00, 4.00, 5.00, 4.00, 2.00, 3.00, 4.00, 4.00, 3.00, 4.00, 6.00, 4.00, 4.00, 2.00, 4.00, 7.00, 1.00, 540.00, 540.00, 540.00, 543.00, 539.00, 538.00, 540.00, 540.00, 543.00, 539.00, 540.00, 539.00, 538.00, 540.00, 539.00, 540.00, 541.00, 539.00, 539.00, 540.00, 543.00, 539.00, 540.00, 540.00, 540.00, 542.00, 539.00, 539.00, 540.00, 539.00, 540.00, 541.00, 3.00, 4.00, 4.00, 4.00, 6.00, 4.00, 2.00, 3.00, 4.00, 6.00, 3.00, 4.00, 3.00, 3.00, 4.00, 2.00, 4.00, 3.00, 2.00, 4.00, 4.00, 4.00, 6.00, 3.00, 6.00, 3.00, 4.00, 2.00, 4.00, 7.00, 3.00, 2.00, 536.00, 540.00, 540.00, 541.00, 538.00, 538.00, 538.00, 540.00, 540.00, 544.00, 539.00, 543.00, 540.00, 540.00, 540.00, 543.00, 539.00, 540.00, 540.00, 540.00, 540.00, 539.00, 540.00, 539.00, 540.00, 543.00, 538.00, 540.00, 540.00, 539.00, 543.00, 538.00, 4.00, 3.00, 3.00, 4.00, 6.00, 3.00, 4.00, 4.00, 7.00, 3.00, 7.00, 3.00, 4.00, 3.00, 4.00, 6.00, 2.00, 3.00, 4.00, 3.00, 2.00, 6.00, 4.00, 6.00, 2.00, 3.00, 3.00, 4.00, 6.00, 8.00, 7.00, 2.00, 2.00, 4.00, 540.00, 543.00, 539.00, 539.00, 539.00, 539.00, 540.00, 539.00, 539.00, 540.00, 542.00, 540.00, 540.00, 540.00, 541.00, 538.00, 539.00, 539.00, 540.00, 539.00, 539.00, 541.00, 540.00, 541.00, 540.00, 540.00, 539.00, 540.00, 543.00, 538.00, 540.00, 540.00, 540.00, 540.00, 542.00, 538.00, 543.00, 540.00, 540.00};
const double sw2[] = {2.00, 5.00, 4.00, 4.00, 2.00, 3.00, 4.00, 5.00, 4.00, 3.00, 4.00, 6.00, 3.00, 3.00, 4.00, 4.00, 2.00, 4.00, 6.00, 2.00, 4.00, 4.00, 3.00, 3.00, 7.00, 3.00, 4.00, 2.00, 2.00, 4.00, 6.00, 4.00, 538.00, 539.00, 538.00, 540.00, 539.00, 540.00, 538.00, 539.00, 538.00, 540.00, 538.00, 542.00, 539.00, 539.00, 538.00, 539.00, 540.00, 542.00, 539.00, 539.00, 538.00, 538.00, 539.00, 538.00, 539.00, 539.00, 541.00, 7.00, 3.00, 4.00, 6.00, 4.00, 4.00, 2.00, 3.00, 4.00, 2.00, 4.00, 3.00, 3.00, 4.00, 4.00, 7.00, 7.00, 2.00, 3.00, 4.00, 4.00, 4.00, 4.00, 2.00, 4.00, 7.00, 4.00, 2.00, 4.00, 7.00, 536.00, 543.00, 539.00, 539.00, 540.00, 542.00, 540.00, 539.00, 542.00, 542.00, 538.00, 540.00, 540.00, 539.00, 538.00, 540.00, 543.00, 540.00, 540.00, 543.00, 539.00, 539.00, 540.00, 538.00, 540.00, 539.00, 538.00, 540.00, 538.00, 538.00, 540.00, 543.00, 543.00, 539.00, 538.00, 540.00, 542.00, 540.00, 544.00, 3.00, 3.00, 4.00, 4.00, 4.00, 7.00, 2.00, 3.00, 5.00, 4.00, 4.00, 2.00, 3.00, 4.00, 6.00, 3.00, 4.00, 4.00, 4.00, 6.00, 3.00, 2.00, 4.00, 4.00, 7.00, 2.00, 3.00, 4.00, 3.00, 4.00, 7.00, 7.00, 3.00, 2.00, 3.00, 4.00, 4.00, 4.00, 7.00, 539.00, 539.00, 539.00, 540.00, 539.00, 539.00, 540.00, 543.00, 540.00, 539.00, 539.00, 538.00, 542.00, 539.00, 540.00, 540.00, 542.00, 538.00, 540.00, 540.00, 539.00, 540.00, 542.00, 540.00, 540.00, 539.00, 538.00, 539.00, 540.00, 539.00, 539.00, 543.00, 5.00, 2.00, 4.00, 4.00, 5.00, 3.00, 4.00, 4.00, 7.00, 3.00, 3.00, 6.00, 4.00, 4.00, 2.00, 3.00, 7.00, 2.00, 3.00, 4.00, 6.00, 6.00, 2.00, 3.00, 4.00, 4.00, 4.00, 3.00, 3.00, 6.00, 2.00, 4.00, 4.00, 3.00, 4.00, 6.00, 539.00, 539.00, 540.00, 540.00, 538.00, 539.00, 540.00, 542.00, 539.00, 540.00, 540.00, 543.00, 538.00, 538.00, 540.00, 540.00, 539.00, 539.00, 543.00, 540.00, 539.00};
const double sw3[] = {6.00, 7.00, 4.00, 7.00, 3.00, 6.00, 3.00, 4.00, 4.00, 6.00, 3.00, 3.00, 3.00, 4.00, 3.00, 2.00, 3.00, 4.00, 6.00, 4.00, 4.00, 3.00, 3.00, 3.00, 6.00, 6.00, 4.00, 3.00, 2.00, 4.00, 6.00, 3.00, 540.00, 541.00, 538.00, 539.00, 540.00, 539.00, 539.00, 540.00, 538.00, 539.00, 539.00, 542.00, 539.00, 535.00, 538.00, 543.00, 538.00, 539.00, 542.00, 544.00, 540.00, 540.00, 540.00, 539.00, 540.00, 543.00, 538.00, 4.00, 3.00, 3.00, 4.00, 4.00, 4.00, 3.00, 3.00, 4.00, 5.00, 7.00, 4.00, 4.00, 2.00, 7.00, 7.00, 4.00, 3.00, 4.00, 5.00, 3.00, 2.00, 4.00, 3.00, 2.00, 3.00, 4.00, 3.00, 3.00, 3.00, 539.00, 542.00, 539.00, 540.00, 539.00, 539.00, 538.00, 539.00, 539.00, 539.00, 540.00, 542.00, 539.00, 539.00, 536.00, 540.00, 543.00, 538.00, 539.00, 539.00, 540.00, 543.00, 539.00, 539.00, 539.00, 539.00, 539.00, 539.00, 539.00, 540.00, 539.00, 3.00, 3.00, 4.00, 4.00, 4.00, 5.00, 3.00, 3.00, 4.00, 3.00, 7.00, 4.00, 4.00, 4.00, 3.00, 2.00, 6.00, 2.00, 3.00, 4.00, 3.00, 2.00, 3.00, 4.00, 3.00, 3.00, 6.00, 2.00, 4.00, 4.00, 4.00, 538.00, 540.00, 542.00, 539.00, 539.00, 539.00, 539.00, 539.00, 541.00, 543.00, 539.00, 538.00, 539.00, 540.00, 539.00, 541.00, 538.00, 539.00, 542.00, 539.00, 540.00, 543.00, 538.00, 539.00, 540.00, 539.00, 540.00, 539.00, 538.00, 539.00, 540.00, 6.00, 3.00, 4.00, 2.00, 3.00, 4.00, 4.00, 5.00, 4.00, 3.00, 3.00, 4.00, 7.00, 2.00, 4.00, 7.00, 2.00, 3.00, 4.00, 3.00, 4.00, 4.00, 2.00, 3.00, 4.00, 6.00, 8.00, 3.00, 3.00, 3.00, 6.00, 2.00, 2.00, 4.00, 4.00, 2.00, 2.00, 3.00, 6.00, 539.00, 540.00, 543.00, 539.00, 538.00, 541.00, 539.00, 539.00, 539.00, 540.00, 543.00, 539.00, 538.00, 539.00, 540.00, 539.00, 539.00, 540.00, 542.00, 540.00, 539.00, 539.00, 539.00, 540.00, 543.00, 539.00, 539.00, 541.00, 540.00, 541.00, 539.00, 539.00, 543.00, 540.00, 539.00};
const double sw4[] = {4.00, 3.00, 3.00, 4.00, 4.00, 4.00, 3.00, 3.00, 4.00, 6.00, 7.00, 4.00, 2.00, 2.00, 2.00, 4.00, 3.00, 4.00, 3.00, 4.00, 7.00, 2.00, 2.00, 4.00, 4.00, 3.00, 2.00, 4.00, 3.00, 4.00, 4.00, 4.00, 2.00, 538.00, 538.00, 539.00, 540.00, 544.00, 538.00, 540.00, 541.00, 543.00, 539.00, 538.00, 538.00, 543.00, 538.00, 538.00, 540.00, 539.00, 538.00, 539.00, 539.00, 534.00, 543.00, 539.00, 539.00, 538.00, 3.00, 3.00, 6.00, 4.00, 6.00, 4.00, 6.00, 6.00, 3.00, 3.00, 4.00, 6.00, 6.00, 2.00, 3.00, 4.00, 4.00, 2.00, 2.00, 4.00, 6.00, 3.00, 4.00, 7.00, 2.00, 3.00, 3.00, 4.00, 6.00, 4.00, 4.00, 7.00, 2.00, 3.00, 3.00, 540.00, 538.00, 539.00, 538.00, 540.00, 539.00, 540.00, 543.00, 539.00, 538.00, 540.00, 542.00, 540.00, 540.00, 543.00, 538.00, 539.00, 539.00, 539.00, 540.00, 542.00, 538.00, 538.00, 539.00, 540.00, 540.00, 543.00, 538.00, 539.00, 539.00, 540.00, 538.00, 539.00, 539.00, 540.00, 542.00, 540.00, 6.00, 3.00, 4.00, 7.00, 3.00, 3.00, 4.00, 3.00, 4.00, 6.00, 3.00, 3.00, 4.00, 7.00, 2.00, 3.00, 3.00, 3.00, 3.00, 4.00, 6.00, 7.00, 3.00, 2.00, 3.00, 4.00, 4.00, 3.00, 4.00, 7.00, 2.00, 4.00, 4.00, 2.00, 2.00, 2.00, 3.00, 0.00, 4.00, 540.00, 543.00, 539.00, 539.00, 538.00, 537.00, 540.00, 543.00, 539.00, 539.00, 540.00, 540.00, 539.00, 540.00, 542.00, 539.00, 543.00, 541.00, 543.00, 539.00, 539.00, 539.00, 543.00, 538.00, 539.00, 539.00, 540.00, 539.00, 539.00, 540.00, 540.00, 540.00, 539.00, 3.00, 7.00, 2.00, 3.00, 4.00, 3.00, 3.00, 3.00, 3.00, 4.00, 7.00, 3.00, 3.00, 4.00, 7.00, 4.00, 3.00, 3.00, 8.00, 4.00, 7.00, 3.00, 3.00, 4.00, 4.00, 4.00, 2.00, 3.00, 2.00, 3.00, 4.00, 539.00, 540.00, 542.00, 540.00, 540.00, 540.00, 540.00, 541.00, 538.00, 539.00, 539.00, 539.00, 539.00, 540.00, 539.00, 540.00, 540.00, 539.00, 540.00, 540.00, 540.00, 539.00, 540.00};
const double sine1[] = {5.00, 24.00, 38.00, 48.00, 64.00, 83.00, 95.00, 115.00, 133.00, 158.00, 176.00, 199.00, 223.00, 248.00, 272.00, 297.00, 324.00, 344.00, 366.00, 386.00, 408.00, 426.00, 443.00, 460.00, 476.00, 484.00, 494.00, 506.00, 514.00, 521.00, 530.00, 530.00, 534.00, 537.00, 539.00, 544.00, 539.00, 530.00, 484.00, 462.00, 450.00, 430.00, 415.00, 391.00, 372.00, 350.00, 329.00, 302.00, 253.00, 225.00, 158.00, 129.00, 110.00, 93.00, 79.00, 59.00, 46.00, 9.00, 2.00, 0.00, 1.00, 3.00, 7.00, 11.00, 32.00, 42.00, 75.00, 100.00, 118.00, 137.00, 161.00, 181.00, 204.00, 227.00, 252.00, 279.00, 299.00, 324.00, 378.00, 399.00, 415.00, 433.00, 454.00, 465.00, 479.00, 494.00, 500.00, 508.00, 517.00, 523.00, 528.00, 532.00, 536.00, 539.00, 543.00, 541.00, 544.00, 534.00, 527.00, 523.00, 517.00, 508.00, 500.00, 490.00, 480.00, 446.00, 427.00, 380.00, 350.00, 329.00, 301.00, 278.00, 256.00, 228.00, 182.00, 128.00, 101.00, 84.00, 69.00, 57.00, 42.00, 19.00, 10.00, 0.00, 0.00, 4.00, 6.00, 13.00, 22.00, 32.00, 46.00, 57.00, 71.00, 88.00, 107.00, 178.00, 212.00, 236.00, 260.00, 285.00, 310.00, 337.00, 356.00, 406.00, 421.00, 440.00, 456.00, 474.00, 482.00, 494.00, 504.00, 516.00, 520.00, 529.00, 534.00, 533.00, 536.00, 539.00, 540.00, 540.00, 540.00, 535.00, 531.00, 522.00, 515.00, 510.00, 497.00, 487.00, 460.00, 417.00, 387.00, 370.00, 344.00, 320.00, 295.00, 272.00, 184.00, 151.00, 133.00, 112.00, 93.00, 78.00, 62.00, 50.00, 34.00, 18.00, 6.00, 6.00, 6.00, 12.00, 21.00, 31.00, 42.00, 56.00, 74.00, 86.00, 104.00, 124.00, 146.00, 163.00, 185.00, 210.00, 234.00, 258.00, 282.00, 306.00, 330.00, 355.00, 376.00, 396.00, 415.00, 433.00, 453.00, 469.00, 477.00, 490.00, 500.00, 510.00, 521.00, 523.00, 528.00, 534.00, 536.00, 539.00, 539.00, 541.00, 543.00, 538.00, 536.00, 532.00, 532.00, 522.00, 515.00, 508.00, 499.00, 492.00, 476.00, 463.00, 448.00, 435.00, 413.00, 388.00, 373.00, 350.00, 331.00, 302.00, 277.00, 255.00, 233.00, 210.00, 182.00, 160.00, 140.00, 122.00, 101.00, 84.00};
const double sine2[] = {49.00, 13.00, 6.00, 3.00, 1.00, 0.00, 2.00, 7.00, 16.00, 20.00, 31.00, 42.00, 56.00, 73.00, 86.00, 104.00, 125.00, 142.00, 164.00, 190.00, 209.00, 234.00, 259.00, 282.00, 306.00, 331.00, 354.00, 380.00, 396.00, 414.00, 435.00, 454.00, 465.00, 478.00, 490.00, 501.00, 514.00, 516.00, 523.00, 530.00, 535.00, 538.00, 543.00, 539.00, 540.00, 537.00, 493.00, 475.00, 459.00, 446.00, 432.00, 408.00, 389.00, 370.00, 347.00, 328.00, 269.00, 239.00, 178.00, 140.00, 121.00, 105.00, 68.00, 37.00, 21.00, 15.00, 6.00, 2.00, 1.00, 3.00, 8.00, 14.00, 37.00, 57.00, 67.00, 84.00, 103.00, 124.00, 139.00, 161.00, 183.00, 209.00, 254.00, 318.00, 354.00, 378.00, 399.00, 415.00, 434.00, 451.00, 465.00, 478.00, 490.00, 518.00, 519.00, 535.00, 538.00, 538.00, 542.00, 540.00, 539.00, 537.00, 535.00, 533.00, 528.00, 522.00, 515.00, 507.00, 498.00, 490.00, 439.00, 418.00, 392.00, 373.00, 352.00, 328.00, 303.00, 215.00, 181.00, 160.00, 138.00, 119.00, 103.00, 85.00, 51.00, 37.00, 14.00, 4.00, 2.00, 1.00, 3.00, 9.00, 20.00, 24.00, 36.00, 48.00, 65.00, 82.00, 94.00, 113.00, 132.00, 152.00, 173.00, 196.00, 220.00, 245.00, 270.00, 293.00, 318.00, 342.00, 367.00, 384.00, 404.00, 420.00, 442.00, 456.00, 471.00, 483.00, 495.00, 508.00, 514.00, 519.00, 526.00, 531.00, 539.00, 538.00, 540.00, 541.00, 539.00, 534.00, 531.00, 526.00, 520.00, 516.00, 503.00, 494.00, 468.00, 452.00, 405.00, 376.00, 354.00, 331.00, 306.00, 252.00, 232.00, 172.00, 140.00, 125.00, 102.00, 84.00, 53.00, 39.00, 8.00, 1.00, 0.00, 2.00, 3.00, 8.00, 17.00, 22.00, 33.00, 45.00, 57.00, 73.00, 93.00, 107.00, 127.00, 146.00, 168.00, 193.00, 212.00, 236.00, 262.00, 286.00, 310.00, 335.00, 361.00, 379.00, 398.00, 418.00, 437.00, 452.00, 468.00, 484.00, 491.00, 502.00, 511.00, 519.00, 528.00, 529.00, 537.00, 536.00, 539.00, 540.00, 540.00, 539.00, 538.00, 539.00, 532.00, 528.00, 521.00, 516.00, 510.00, 497.00, 486.00, 475.00, 464.00, 444.00, 427.00, 410.00, 391.00, 370.00, 347.00, 324.00, 299.00, 274.00};
const double sine3[] = {2.00, 7.00, 17.00, 31.00, 45.00, 60.00, 76.00, 90.00, 109.00, 127.00, 143.00, 170.00, 192.00, 216.00, 240.00, 265.00, 292.00, 314.00, 338.00, 364.00, 382.00, 401.00, 420.00, 438.00, 455.00, 470.00, 485.00, 493.00, 502.00, 512.00, 519.00, 526.00, 533.00, 533.00, 536.00, 539.00, 540.00, 534.00, 529.00, 481.00, 463.00, 448.00, 433.00, 415.00, 394.00, 375.00, 353.00, 333.00, 277.00, 250.00, 186.00, 153.00, 136.00, 115.00, 95.00, 81.00, 65.00, 50.00, 25.00, 14.00, 4.00, 0.00, 1.00, 6.00, 14.00, 18.00, 27.00, 38.00, 52.00, 66.00, 82.00, 120.00, 141.00, 189.00, 226.00, 249.00, 277.00, 297.00, 322.00, 346.00, 369.00, 387.00, 407.00, 428.00, 448.00, 459.00, 474.00, 487.00, 508.00, 515.00, 523.00, 534.00, 537.00, 540.00, 542.00, 540.00, 539.00, 537.00, 537.00, 531.00, 524.00, 518.00, 511.00, 502.00, 480.00, 442.00, 414.00, 395.00, 376.00, 356.00, 329.00, 278.00, 253.00, 194.00, 159.00, 139.00, 124.00, 103.00, 85.00, 68.00, 54.00, 26.00, 20.00, 2.00, 4.00, 0.00, 6.00, 8.00, 17.00, 26.00, 32.00, 44.00, 59.00, 74.00, 90.00, 156.00, 191.00, 215.00, 236.00, 262.00, 283.00, 308.00, 361.00, 383.00, 431.00, 453.00, 470.00, 479.00, 491.00, 502.00, 510.00, 521.00, 529.00, 537.00, 537.00, 538.00, 543.00, 539.00, 535.00, 533.00, 529.00, 524.00, 516.00, 509.00, 501.00, 493.00, 479.00, 465.00, 453.00, 436.00, 415.00, 396.00, 378.00, 356.00, 331.00, 307.00, 283.00, 262.00, 235.00, 211.00, 187.00, 165.00, 146.00, 124.00, 107.00, 88.00, 72.00, 56.00, 43.00, 35.00, 20.00, 14.00, 7.00, 6.00, 0.00, 0.00, 5.00, 6.00, 14.00, 18.00, 27.00, 40.00, 55.00, 67.00, 79.00, 100.00, 120.00, 140.00, 157.00, 178.00, 204.00, 228.00, 255.00, 275.00, 300.00, 325.00, 348.00, 368.00, 391.00, 414.00, 428.00, 446.00, 463.00, 475.00, 488.00, 498.00, 506.00, 516.00, 522.00, 527.00, 532.00, 536.00, 539.00, 540.00, 540.00, 540.00, 537.00, 538.00, 532.00, 526.00, 520.00, 515.00, 508.00, 497.00, 452.00, 424.00, 409.00, 391.00, 368.00, 349.00, 322.00, 302.00, 245.00, 219.00, 136.00, 109.00};
const double sine4[] = {66.00, 24.00, 8.00, 3.00, 4.00, 0.00, 2.00, 8.00, 17.00, 22.00, 30.00, 43.00, 60.00, 72.00, 88.00, 107.00, 126.00, 145.00, 169.00, 188.00, 212.00, 237.00, 261.00, 284.00, 309.00, 339.00, 356.00, 378.00, 398.00, 418.00, 436.00, 456.00, 466.00, 480.00, 497.00, 509.00, 518.00, 521.00, 527.00, 532.00, 536.00, 539.00, 544.00, 541.00, 506.00, 491.00, 480.00, 468.00, 456.00, 436.00, 419.00, 400.00, 383.00, 358.00, 336.00, 282.00, 255.00, 177.00, 155.00, 133.00, 117.00, 78.00, 39.00, 22.00, 14.00, 9.00, 7.00, 1.00, 3.00, 4.00, 21.00, 37.00, 48.00, 67.00, 78.00, 96.00, 115.00, 133.00, 153.00, 175.00, 198.00, 222.00, 246.00, 271.00, 320.00, 344.00, 370.00, 394.00, 410.00, 429.00, 446.00, 462.00, 478.00, 487.00, 501.00, 509.00, 516.00, 522.00, 529.00, 536.00, 538.00, 539.00, 540.00, 543.00, 539.00, 536.00, 530.00, 524.00, 518.00, 512.00, 504.00, 477.00, 462.00, 418.00, 392.00, 369.00, 347.00, 323.00, 302.00, 246.00, 224.00, 163.00, 136.00, 115.00, 96.00, 79.00, 64.00, 51.00, 26.00, 17.00, 2.00, 0.00, 1.00, 6.00, 10.00, 18.00, 28.00, 40.00, 55.00, 64.00, 100.00, 151.00, 181.00, 206.00, 226.00, 251.00, 275.00, 299.00, 324.00, 381.00, 399.00, 415.00, 433.00, 453.00, 464.00, 478.00, 491.00, 502.00, 510.00, 517.00, 524.00, 532.00, 533.00, 537.00, 539.00, 544.00, 543.00, 540.00, 534.00, 530.00, 524.00, 520.00, 512.00, 501.00, 478.00, 465.00, 424.00, 397.00, 378.00, 356.00, 336.00, 308.00, 284.00, 260.00, 236.00, 187.00, 165.00, 116.00, 90.00, 73.00, 60.00, 43.00, 32.00, 23.00, 17.00, 8.00, 4.00, 0.00, 1.00, 28.00, 43.00, 54.00, 66.00, 83.00, 100.00, 121.00, 138.00, 158.00, 182.00, 208.00, 228.00, 252.00, 277.00, 301.00, 327.00, 350.00, 374.00, 390.00, 412.00, 430.00, 449.00, 464.00, 475.00, 488.00, 501.00, 508.00, 516.00, 526.00, 528.00, 532.00, 536.00, 539.00, 539.00, 543.00, 544.00, 538.00, 536.00, 533.00, 532.00, 524.00, 518.00, 511.00, 503.00, 496.00, 480.00, 471.00, 452.00, 435.00, 417.00, 399.00, 380.00, 360.00, 334.00, 310.00, 287.00, 264.00};
const double tri1[] = {384.00, 431.00, 448.00, 464.00, 472.00, 485.00, 491.00, 500.00, 511.00, 520.00, 531.00, 534.00, 533.00, 526.00, 519.00, 510.00, 504.00, 491.00, 481.00, 472.00, 461.00, 450.00, 441.00, 425.00, 412.00, 400.00, 386.00, 375.00, 363.00, 344.00, 330.00, 316.00, 300.00, 285.00, 270.00, 256.00, 237.00, 225.00, 206.00, 138.00, 119.00, 14.00, 12.00, 23.00, 40.00, 56.00, 75.00, 91.00, 103.00, 119.00, 152.00, 169.00, 221.00, 237.00, 256.00, 264.00, 284.00, 303.00, 314.00, 372.00, 391.00, 404.00, 418.00, 433.00, 441.00, 455.00, 476.00, 501.00, 514.00, 523.00, 530.00, 538.00, 534.00, 529.00, 518.00, 509.00, 500.00, 489.00, 480.00, 473.00, 458.00, 435.00, 401.00, 383.00, 371.00, 358.00, 344.00, 327.00, 312.00, 283.00, 267.00, 248.00, 233.00, 216.00, 203.00, 162.00, 146.00, 131.00, 116.00, 102.00, 88.00, 68.00, 54.00, 38.00, 22.00, 9.00, 15.00, 31.00, 48.00, 64.00, 79.00, 96.00, 112.00, 126.00, 140.00, 156.00, 173.00, 191.00, 202.00, 218.00, 235.00, 250.00, 264.00, 281.00, 298.00, 315.00, 326.00, 343.00, 360.00, 374.00, 386.00, 401.00, 417.00, 426.00, 439.00, 450.00, 463.00, 477.00, 482.00, 492.00, 503.00, 510.00, 521.00, 532.00, 535.00, 535.00, 528.00, 521.00, 516.00, 502.00, 493.00, 486.00, 472.00, 463.00, 455.00, 439.00, 427.00, 417.00, 402.00, 388.00, 376.00, 363.00, 351.00, 331.00, 316.00, 302.00, 286.00, 271.00, 256.00, 243.00, 223.00, 208.00, 188.00, 168.00, 153.00, 138.00, 127.00, 108.00, 96.00, 76.00, 60.00, 46.00, 9.00, 14.00, 53.00, 80.00, 92.00, 109.00, 123.00, 155.00, 194.00, 216.00, 232.00, 246.00, 262.00, 278.00, 297.00, 308.00, 324.00, 338.00, 373.00, 384.00, 419.00, 441.00, 448.00, 460.00, 472.00, 485.00, 492.00, 503.00, 509.00, 519.00, 535.00, 536.00, 528.00, 519.00, 511.00, 503.00, 496.00, 484.00, 474.00, 462.00, 454.00, 438.00, 426.00, 414.00, 401.00, 388.00, 378.00, 363.00, 346.00, 331.00, 317.00, 302.00, 285.00, 270.00, 255.00, 242.00, 223.00, 208.00, 170.00, 146.00, 130.00, 118.00, 102.00, 90.00, 76.00, 54.00, 22.00, 24.00, 47.00, 64.00, 82.00, 93.00, 111.00, 126.00};
const double tri2[] = {387.00, 447.00, 477.00, 490.00, 500.00, 509.00, 520.00, 536.00, 537.00, 511.00, 505.00, 492.00, 482.00, 472.00, 462.00, 450.00, 427.00, 408.00, 388.00, 377.00, 363.00, 351.00, 332.00, 317.00, 303.00, 287.00, 272.00, 260.00, 240.00, 228.00, 207.00, 164.00, 146.00, 131.00, 121.00, 102.00, 86.00, 73.00, 53.00, 10.00, 36.00, 51.00, 67.00, 88.00, 98.00, 130.00, 148.00, 185.00, 207.00, 222.00, 240.00, 259.00, 287.00, 303.00, 340.00, 360.00, 377.00, 390.00, 401.00, 414.00, 428.00, 453.00, 465.00, 492.00, 503.00, 512.00, 520.00, 528.00, 537.00, 526.00, 518.00, 513.00, 500.00, 490.00, 481.00, 473.00, 460.00, 449.00, 435.00, 424.00, 410.00, 399.00, 383.00, 370.00, 355.00, 341.00, 329.00, 309.00, 294.00, 280.00, 267.00, 247.00, 232.00, 218.00, 177.00, 157.00, 137.00, 124.00, 110.00, 96.00, 78.00, 61.00, 27.00, 14.00, 34.00, 59.00, 72.00, 88.00, 104.00, 120.00, 134.00, 152.00, 183.00, 202.00, 238.00, 263.00, 275.00, 291.00, 306.00, 322.00, 337.00, 352.00, 366.00, 380.00, 396.00, 420.00, 464.00, 478.00, 488.00, 499.00, 508.00, 521.00, 524.00, 532.00, 539.00, 534.00, 523.00, 515.00, 506.00, 497.00, 488.00, 480.00, 467.00, 456.00, 447.00, 432.00, 419.00, 407.00, 391.00, 378.00, 365.00, 350.00, 338.00, 319.00, 305.00, 290.00, 274.00, 262.00, 242.00, 226.00, 211.00, 196.00, 179.00, 165.00, 152.00, 132.00, 120.00, 104.00, 87.00, 71.00, 56.00, 42.00, 24.00, 9.00, 14.00, 28.00, 45.00, 64.00, 76.00, 93.00, 109.00, 127.00, 137.00, 153.00, 170.00, 188.00, 201.00, 216.00, 233.00, 248.00, 263.00, 278.00, 295.00, 311.00, 325.00, 340.00, 356.00, 373.00, 383.00, 395.00, 409.00, 426.00, 434.00, 446.00, 458.00, 470.00, 480.00, 490.00, 503.00, 507.00, 516.00, 525.00, 533.00, 538.00, 532.00, 527.00, 514.00, 506.00, 497.00, 488.00, 478.00, 470.00, 454.00, 443.00, 432.00, 420.00, 406.00, 390.00, 380.00, 365.00, 353.00, 336.00, 320.00, 308.00, 293.00, 274.00, 258.00, 243.00, 227.00, 210.00, 196.00, 183.00, 164.00, 148.00, 133.00, 119.00, 103.00, 88.00, 75.00, 55.00, 40.00, 24.00, 12.00, 13.00, 28.00, 45.00};
const double tri3[] = {500.00, 528.00, 535.00, 526.00, 522.00, 513.00, 501.00, 492.00, 483.00, 473.00, 465.00, 452.00, 439.00, 426.00, 415.00, 402.00, 388.00, 376.00, 361.00, 346.00, 333.00, 321.00, 302.00, 287.00, 274.00, 255.00, 239.00, 224.00, 174.00, 75.00, 56.00, 39.00, 18.00, 6.00, 23.00, 42.00, 55.00, 69.00, 85.00, 117.00, 164.00, 190.00, 203.00, 220.00, 238.00, 251.00, 267.00, 282.00, 321.00, 335.00, 375.00, 387.00, 402.00, 418.00, 427.00, 440.00, 452.00, 463.00, 483.00, 509.00, 521.00, 529.00, 538.00, 537.00, 525.00, 518.00, 513.00, 500.00, 490.00, 482.00, 473.00, 446.00, 435.00, 420.00, 408.00, 396.00, 383.00, 371.00, 353.00, 339.00, 326.00, 312.00, 294.00, 282.00, 262.00, 246.00, 232.00, 195.00, 171.00, 156.00, 140.00, 127.00, 111.00, 96.00, 79.00, 62.00, 8.00, 26.00, 41.00, 54.00, 70.00, 86.00, 102.00, 155.00, 177.00, 194.00, 209.00, 228.00, 241.00, 271.00, 314.00, 334.00, 350.00, 368.00, 378.00, 391.00, 400.00, 416.00, 430.00, 446.00, 467.00, 478.00, 501.00, 518.00, 522.00, 530.00, 539.00, 533.00, 525.00, 520.00, 507.00, 499.00, 490.00, 468.00, 458.00, 448.00, 437.00, 423.00, 409.00, 396.00, 383.00, 369.00, 354.00, 341.00, 326.00, 310.00, 294.00, 280.00, 267.00, 249.00, 234.00, 216.00, 173.00, 157.00, 143.00, 127.00, 117.00, 96.00, 80.00, 47.00, 32.00, 14.00, 37.00, 54.00, 72.00, 86.00, 102.00, 116.00, 130.00, 186.00, 210.00, 226.00, 242.00, 261.00, 273.00, 290.00, 303.00, 319.00, 348.00, 407.00, 424.00, 432.00, 444.00, 456.00, 468.00, 477.00, 490.00, 501.00, 506.00, 516.00, 525.00, 535.00, 539.00, 532.00, 524.00, 516.00, 507.00, 501.00, 488.00, 477.00, 467.00, 457.00, 442.00, 437.00, 420.00, 407.00, 394.00, 382.00, 369.00, 355.00, 343.00, 327.00, 308.00, 292.00, 278.00, 262.00, 246.00, 232.00, 217.00, 199.00, 184.00, 164.00, 155.00, 140.00, 122.00, 107.00, 92.00, 75.00, 59.00, 45.00, 32.00, 15.00, 12.00, 28.00, 46.00, 59.00, 74.00, 90.00, 107.00, 122.00, 136.00, 151.00, 170.00, 182.00, 199.00, 211.00, 229.00, 246.00, 265.00, 276.00, 291.00, 308.00, 326.00, 342.00, 352.00, 368.00};
const double tri4[] = {381.00, 323.00, 306.00, 286.00, 272.00, 257.00, 241.00, 195.00, 109.00, 76.00, 63.00, 50.00, 31.00, 15.00, 11.00, 27.00, 39.00, 54.00, 71.00, 87.00, 140.00, 167.00, 178.00, 196.00, 211.00, 226.00, 242.00, 260.00, 296.00, 334.00, 355.00, 371.00, 383.00, 396.00, 413.00, 422.00, 434.00, 460.00, 471.00, 498.00, 510.00, 519.00, 525.00, 532.00, 538.00, 532.00, 526.00, 514.00, 506.00, 500.00, 491.00, 476.00, 466.00, 455.00, 442.00, 432.00, 419.00, 407.00, 396.00, 380.00, 366.00, 352.00, 337.00, 321.00, 307.00, 292.00, 279.00, 261.00, 244.00, 225.00, 205.00, 189.00, 175.00, 159.00, 143.00, 128.00, 117.00, 97.00, 81.00, 67.00, 51.00, 38.00, 7.00, 19.00, 40.00, 53.00, 68.00, 86.00, 100.00, 115.00, 128.00, 145.00, 161.00, 176.00, 195.00, 207.00, 223.00, 240.00, 255.00, 271.00, 286.00, 302.00, 318.00, 335.00, 347.00, 363.00, 378.00, 387.00, 401.00, 414.00, 428.00, 440.00, 453.00, 467.00, 473.00, 484.00, 494.00, 504.00, 512.00, 520.00, 532.00, 535.00, 535.00, 527.00, 520.00, 515.00, 501.00, 492.00, 484.00, 476.00, 462.00, 450.00, 441.00, 425.00, 413.00, 400.00, 387.00, 375.00, 364.00, 344.00, 330.00, 314.00, 295.00, 285.00, 269.00, 253.00, 239.00, 199.00, 179.00, 159.00, 144.00, 128.00, 115.00, 100.00, 83.00, 53.00, 33.00, 12.00, 34.00, 50.00, 67.00, 85.00, 97.00, 115.00, 145.00, 161.00, 178.00, 213.00, 235.00, 253.00, 265.00, 281.00, 298.00, 314.00, 330.00, 346.00, 361.00, 373.00, 385.00, 429.00, 451.00, 458.00, 469.00, 481.00, 490.00, 499.00, 509.00, 521.00, 524.00, 538.00, 528.00, 506.00, 494.00, 488.00, 474.00, 463.00, 452.00, 443.00, 428.00, 416.00, 403.00, 392.00, 360.00, 344.00, 330.00, 314.00, 299.00, 284.00, 272.00, 255.00, 238.00, 199.00, 174.00, 158.00, 145.00, 128.00, 114.00, 100.00, 86.00, 28.00, 3.00, 17.00, 35.00, 53.00, 67.00, 82.00, 96.00, 132.00, 145.00, 185.00, 207.00, 227.00, 238.00, 254.00, 273.00, 286.00, 302.00, 321.00, 386.00, 405.00, 421.00, 430.00, 442.00, 454.00, 466.00, 477.00, 488.00, 495.00, 505.00, 514.00, 522.00, 529.00, 537.00, 534.00, 528.00, 516.00};
ArduinoFFT FFT = ArduinoFFT(); /* Create FFT object */
/*
These values can be changed in order to evaluate the functions
*/
#define CHANNEL A0
const uint16_t samples = 128; //This value MUST ALWAYS be a power of 2
const double samplingFrequency = 10000; //Hz, must be less than 10000 due to ADC
unsigned int sampling_period_us;
unsigned long microseconds;
/*
These are the input and output vectors
Input vectors receive computed results from FFT
*/
double vReal[samples];
double vImag[samples];
#define SCL_INDEX 0x00
#define SCL_TIME 0x01
#define SCL_FREQUENCY 0x02
#define SCL_PLOT 0x03
void setup()
{
sampling_period_us = round(1000000*(1.0/samplingFrequency));
Serial.begin(115200);
while(!Serial);
Serial.println("Ready");
}
void loop()
{
/*SAMPLING*/
microseconds = micros();
for(int i=0; i<samples; i++)
{
vReal[i] = sine1[i]; //analogRead(CHANNEL);
vImag[i] = 0.0;
while(micros() - microseconds < sampling_period_us){
//empty loop
}
microseconds += sampling_period_us;
}
/* Print the results of the sampling according to time */
//Serial.print("{");
//for(int i = 0; i < samples; i++)
//{
// Serial.println(vReal[i]);
//Serial.print(", ");
//}
//Serial.print("\t");
FFT.Compute(vReal, vImag, samples, FFT_FORWARD); /* Compute FFT */
magnitude();
printSpectrum();
//Serial.println("Computed Real values:");
//PrintVector(vReal, samples, SCL_INDEX);
//Serial.println("Computed Imaginary values:");
//PrintVector(vImag, samples, SCL_INDEX);
//FFT.ComplexToMagnitude(vReal, vImag, samples); /* Compute magnitudes */
//Serial.println("Computed magnitudes:");
//PrintVector(vReal, (samples >> 1), SCL_FREQUENCY);
//double x = FFT.MajorPeak(vReal, samples, samplingFrequency);
//Serial.println(x, 6); //Print out what frequency is the most dominant.
//while(1); /* Run Once */
delay(2000); /* Repeat after delay */
}
void magnitude()
{
for(int i = 0; i < samples; i++)
{
vReal[i] = sqrt(vReal[i]*vReal[i] + vImag[i]*vImag[i]);
}
}
void printSpectrum()
{
for(int i = 0; i < samples; i++)
{
Serial.println(vReal[i]);
}
}
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();
}