Tôi đang cố gắng thực hiện một số tính năng lọc với FFT. Tôi đang sử dụng kế hoạch r2r_1d và tôi không biết cách làm biến đổi nghịch đảo ...Cách thực hiện nghịch đảo thực với FFT thực trong thư viện FFTW
void PerformFiltering(double* data, int n)
{
/* FFT */
double* spectrum = new double[n];
fftw_plan plan;
plan = fftw_plan_r2r_1d(n, data, spectrum, FFTW_REDFT00, FFTW_ESTIMATE);
fftw_execute(plan); // signal to spectrum
fftw_destroy_plan(plan);
/* some filtering here */
/* Inverse FFT */
plan = fftw_plan_r2r_1d(n, spectrum, data, FFTW_REDFT00, FFTW_ESTIMATE);
fftw_execute(plan); // spectrum to signal (inverse FFT)
fftw_destroy_plan(plan);
}
Tôi có làm mọi thứ đúng không? Tôi đang bối rối vì trong FFTW phức tạp DFT của bạn có thể thiết lập một hướng chuyển đổi bằng cờ như thế này:
p = fftw_plan_dft_1d (N, trong, ra, FFTW_FORWARD, FFTW_ESTIMATE);
hoặc
p = fftw_plan_dft_1d (N, trong, ngoài, FFTW_BACKWARD, FFTW_ESTIMATE);