簡體   English   中英

FFTW結果與MATLAB中的FFT不同

[英]FFTW results differ from FFT in MATLAB

我使用FFTW和MATLAB fft比較正向FFT。 輸入信號是高斯分布。 碼:

FFTW使用C:

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];
}

MATLAB中的fft函數:

fft(signal);

我繪制了兩個結果的實部和虛部:

fft vs fftw

實部幾乎是相同的值,而虛部具有完全不同的值。 如何解決這個問題?

您應該在“Imag”的圖表上查看左側繪圖的比例因子。 它說10 ^ -15。 這與真實信號幅度(至少較大的部分> 10 ^ 1)相比非常小,因此結果非常相似。

浮點算法通常傾向於不提供完全相同的結果,只要它們沒有完全以相同的方式實現。 (即便如此,他們可以通過不同的舍入選項來區分)。

此QA可能會提供一些見解: 浮點不准確示例

舍入到最接近滿量程的0.001%(實數),注意虛數值都為零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM