Код: Выделить всё
fftw_complex* in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
fftw_complex* out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
for (int i = 0; i < N; ++i) {
in[i][0] = data[i].real();
in[i][1] = data[i].imag();
}
fftw_plan plan = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(plan);
std::vector fftResult(N);
for (int i = 0; i < N; ++i) {
fftResult[i] = std::complex(out[i][0], out[i][1]);
}
fftw_destroy_plan(plan);
fftw_free(in);
fftw_free(out);
Код: Выделить всё
float result1 = sqrtf(pow(fftResult[i].real(),2) + pow(fftResult[i].imag(),2)); //
float result2 = pow(result1,2); //
float result3 = pow(N,2); //
float result4 = result2 / result3; //
float result5 = log10(result4); //
float result6 = 10 * result5; //
magnitude[i] = result6; //
Подробнее здесь: https://stackoverflow.com/questions/789 ... m-from-fft
Мобильная версия