mirror of https://github.com/BlackLight/gTuna.git
47 lines
1001 B
C++
47 lines
1001 B
C++
#include <cmath>
|
|
#include <fftw3.h>
|
|
#include "gtuna.hpp"
|
|
#define SIZE 4096
|
|
|
|
#ifndef M_PI
|
|
#define M_PI 3.14159265358979323
|
|
#endif
|
|
|
|
size_t getMaxFreq (vector<double> data) {
|
|
int i, maxIndex = 1;
|
|
double maxFreq = data[maxIndex];
|
|
|
|
for (i=2; i < data.size(); i++) {
|
|
if (data[i] > maxFreq) {
|
|
maxIndex = i;
|
|
maxFreq = data[i];
|
|
}
|
|
}
|
|
|
|
return maxIndex;
|
|
}
|
|
|
|
vector<double> FFT (vector<double> data) {
|
|
fftw_plan p;
|
|
fftw_complex *dataIn = (fftw_complex*) fftw_malloc(data.size() * sizeof(fftw_complex));
|
|
fftw_complex *dataOut = (fftw_complex*) fftw_malloc(data.size() * sizeof(fftw_complex));
|
|
|
|
for (int i=0; i < data.size(); i++) {
|
|
dataIn[i][0] = data[i];
|
|
dataIn[i][1] = 0.0;
|
|
}
|
|
|
|
p = fftw_plan_dft_1d(data.size(), dataIn, dataOut, FFTW_FORWARD, FFTW_ESTIMATE);
|
|
fftw_execute(p);
|
|
|
|
for (int i=0; i < data.size(); i++) {
|
|
data[i] = sqrt( dataOut[i][0]*dataOut[i][0] + dataOut[i][1]*dataOut[i][1] );
|
|
}
|
|
|
|
fftw_destroy_plan(p);
|
|
fftw_free(dataIn);
|
|
fftw_free(dataOut);
|
|
return data;
|
|
}
|
|
|