Как изменить размер массива плана (выполнения) fftw? - PullRequest
5 голосов
/ 15 мая 2019

Мне нужна ваша помощь.

Я определил массив и план в моем основном cpp. Затем я помещаю данные в массив и выполняю fftw в моем подпрограмме cpp. sub cpp находится в потоке, который зациклен.

Я определил размер массива достаточно, потому что количество данных является динамическим. но fftw делает fft для всего размера массива, поэтому результат в моем случае неверный. потому что количество данных всегда меньше размера массива.

Определение массива в sub cpp - это простой способ решения проблемы, но я не хочу определять массив в sub cpp, потому что sub cpp зациклен.

Я хочу определить массив только один раз и изменить размер окна FFT независимо от размера массива.

Как я могу это сделать?

/////// in my main cpp //////
fft_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*nScanSize);
fft_out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*nScanSize);
p = fftw_plan_dft_1d(nScanSize, fft_in, fft_out, FFTW_FORWARD, FFTW_ESTIMATE);
/////////////////////////////

/////// in my sub cpp -> looped ///////
for (i = 0; i < nChannelCountAI; i++) {

    for (j = nFirstIndex; j < nLastIndex; j++) {
        fft_in[j - nFirstIndex][0] = RawData[i][j];
        fft_in[j - nFirstIndex][1] = 0;
    }

    fftw_execute(p);
}
/////////////////////////////
...