FFTW结果与MATLAB中的FFT不同

时间:2019-06-24 14:40:45

标签: c matlab fft fftw

我使用FFTW和MATLAB fft比较前向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);

我绘制了两个结果的实部和虚部:

fft vs fftw

实部几乎具有相同的值,而虚部具有完全不同的值。如何解决此问题?

2 个答案:

答案 0 :(得分:2)

您应该查看“ Imag”图上方左侧图的比例因子。 它说10 ^ -15。相对于实际信号幅度而言,这是很小的(至少较大的部分是> 10 ^ 1),因此结果非常相似。

浮点算法通常不会提供完全相同的结果,只要它们不是以完全相同的方式实现的。 (即使那样,它们的取舍选项也可能不同)。

此质量检查可能会提供一些见解: Floating point inaccuracy examples

答案 1 :(得分:0)

四舍五入到满量程的0.001%(真实),请注意,虚数值全部为零。