Kir*_*kov 5 c c++ fft inverse fftw
我正在尝试使用FFT进行一些过滤.我正在使用r2r_1d计划,我不知道如何进行逆变换...
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);
}
Run Code Online (Sandbox Code Playgroud)
我做的所有事情都正确吗?我很困惑,因为在FFTW复数DFT中你可以用这样的标志设置变换方向:
p = fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_ESTIMATE);
或
p = fftw_plan_dft_1d(N,in,out,FFTW_BACKWARD,FFTW_ESTIMATE);
http://www.fftw.org/fftw3_doc/Real_002dto_002dReal-Transform-Kinds.html
http://www.fftw.org/fftw3_doc/1d-Real_002deven-DFTs-_0028DCTs_0029.html
“种类”指定方向。
(另请注意,您可能希望通过除以 n 来重新归一化信号。FFTW 的归一化约定在变换及其逆之后乘以 n。)