Расчет длины волны, амплитуды и фазы с использованием FFTW - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь использовать C ++ и FFTW для получения амплитуды, длины волны и фазы из ряда чисел без особой удачи, и мне было интересно, если кто-нибудь может мне помочь, пожалуйста?

Я искал в Интернете, нопоскольку я новичок в FFT, я не смог найти ничего достаточно конкретного, чтобы я понял

У меня есть 370 двойных значений, которые я читаю из файла в массив inputRecord, например, 1.11567, 1.11599, 1.11679 * 1005.*

Это то, что я делаю до сих пор с FFTW:

double *input;
fftw_complex *output;
fftw_plan p;
int binCount = inputCount/ 2; // inputCount = the number of records in the input file

input = (double*)fftw_malloc(sizeof(double) * inputCount);
output = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * inputCount);

p = fftw_plan_dft_r2c_1d(barCount, input, output, FFTW_ESTIMATE);

// Copy the double numbers into the FFTW input array 
for (int i = 0; i < barCount; i++)
{
    input[i] = inputRecord[i];
}

fftw_execute(p); //performs the fourier transform, fills `output'

Затем я перебираю выходной массив FFTW, пытаясь получить амплитуду с помощью этого вычисления: Amplitude = 2 * abs(FFTOutput[i]) / 370

Я также хотел бы получить длину волны (понятия не имею, как) и фазу синусоиды (также не знаю, как это сделать)

Любая помощь очень ценится.

...