gpt4 book ai didi

c - FFTW 结果与 MATLAB 中的 FFT 不同

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:02 24 4
gpt4 key购买 nike

我比较了使用 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

实部几乎是相同的值,而虚部则有很大的不同。如何解决这个问题?

最佳答案

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

浮点算法通常不会提供完全相同的结果,只要它们不是以完全相同的方式实现的。 (即便如此,它们也可能因四舍五入的不同选项而有所不同)。

此 QA 可能会提供一些见解: Floating point inaccuracy examples

关于c - FFTW 结果与 MATLAB 中的 FFT 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56738949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com