与MATLAB相比,FFTW给出了错误的结果

时间:2015-06-26 13:48:52

标签: c++ matlab signal-processing fftw

在分析了一些信号数据后,我做了一些再合成。用于分析例如一个wav文件我使用CUDA-CUFFT进行一维复数FFT变换,经过一些信号处理操作(切割信号,...)后,我使用FFTWF进行IFFT变换(FFTW =浮点型)。

在CUDA方面,我用MATLAB验证了FFT变换并获得了几乎相同的结果(由于舍入误差,它不是相同的精确度)。在切断信号并执行FFTShift操作后,信号似乎几乎相等。 plot showing the difference of the magnitudes of the matlab values with my values after cutting the signal and performin the fftshift operation

但是在IFFT操作之后我得到了完全不同的结果(直接在IFFT操作之后我反转输出,我也在MATLAB中做 - >然后我将FFTW输出保存到二进制文件中进行比较)

P.S :(有关其他信息。在翻转输出后,我使用sqrtf(FFTLEN);对结果进行规范(在CUDA网站上,我使用1/sqrtf(FFTLEN)

指定输出

magnitude difference plot after the IFFT operation and performing the flipud/reverse in MATLAB and in my program

对于使用FFTW的IFFT转换,我在文档中使用以下语法: http://www.fftw.org/doc/Complex-One_002dDimensional-DFTs.html 但是不使用fftw_complex类型,而是使用C ++ - complex-type并将其强制转换为fftw_complex-type。操作标志为FFTW_BACKWARD,因为我在CUDA网站上使用CUFFT_FORAWRD

fftwf_plan localFFTPlan;
localFFTPlan = fftwf_plan_dft_1d((int)sFFTParams.uFFTLength, reinterpret_cast<fftwf_complex*>(&tFFTraw[0]), reinterpret_cast<fftwf_complex*>(&tFFTin[0]), FFTW_BACKWARD, FFTW_MEASURE);
fftwf_execute(localFFTPlan);
fftwf_destroy_plan(localFFTPlan);

在MATLAB中,执行相同的操作:

flipud(ifft(fftshift(st))

任何人都可以帮助我,为什么在IFFT转换后结果出错了(如上图所示,在操作之前一切正常)?

修改 数组分配如下所示:     TFFTContainer tFFTin(sFFTParams.uFFTLength,gComplexZero);

0 个答案:

没有答案
相关问题