利用FFTW和MATLABfft
对前向FFT进行了比较输入信号是高斯的代码
使用C的FFTW:
float *signal; /*input signal*/
int nt; /*length of the signal*/
fftw_complex *in, *out;
fftw_plan plan1;
in = fftw_malloc(nt*sizeof(fftw_complex));
out = fftw_malloc(nt*sizeof(fftw_complex));
for (j=0;j<nt;j++){
in[j][0]=(double)signal[j];
in[j][1]=0.0;
}
plan1 = fftw_plan_dft_1d(nt, in, out, -1, FFTW_ESTIMATE);
fftw_execute(plan1);
fftw_destroy_plan(plan1);
for (j=0;j<nt;j++){
real[j]=(float)out[j][0];
imag[j]=(float)out[j][1];
}
fft
在MATLAB中的函数:fft(signal);
我绘制了两个结果的实部和虚部:
实数部分的值几乎相同,而虚数部分的值则大不相同如何解决这个问题?
最佳答案
您应该查看“Imag”绘图左侧绘图的比例因子。
上面写着10^-15这与实际信号大小(至少是大于10^1的较大部分)的关系很小,因此结果非常相似。
一般来说,只要浮点算法的实现方式不完全相同,它们就不会产生完全相同的结果(即使这样,它们也可以根据取整的不同选项而有所不同)。
这个QA可能会提供一些见解:
Floating point inaccuracy examples
关于c - FFTW结果与MATLAB中的FFT不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56738949/