在FFTW3中取二阶导数

| 我已经使用前向FFT和IFFT(对结果进行了归一化)对代码的一些实际功能进行了测试,效果很好。 但是,我想对实函数取二阶导数。为简单起见,我将“ 0”作为测试用例。这是我使用的相关代码(库中的FFT函数):
int main(void)
{
    int i;
    int nyh = (N/2) + 1;

    double result_array[nyh][2];

    double x_k[nyh][2];
    double x_r[N];

    FILE* psit;
    psit=fopen(\"psitest.txt\",\"w\");  

    init();

    fft(x, result_array);  //function in a library, this has been tested
    psi(result_array, x_k);  
    ifft(x_k, x_r);        //function in a library, this has been tested

    for(i=0;i<N;i++)
    {
        fprintf(psit, \"%f\\n\", x_r[i]);
    }


    fclose(psit);

    return 0;
}

void psi(double array[nyh][2], double out[nyh][2])
{
    int i;

    for ( i = 0; i < N/2; i++ )
    {
        out[i][0] = -4.0*pi*pi*i*i*array[i][0];
        out[i][1] = -4.0*pi*pi*i*i*array[i][1];
    }   
    out[N/2][0]=0.0;
    out[N/2][1]=0.0;
}

void init()
{
    int i;

    for(i=0;i<N;i++) 
    {
        x[i] = sin(2.0*pi*i/N);
    }
}
现在是问题所在:该算法对于形式为
sin( 2*pi*t*K)
的任何函数都可以完美地工作,其中K是整数,但是如果我将其作为测试函数
sin(3*pi*t)
,则该算法将失败。我在编码中看不到错误。 请注意,因为该函数是实函数,所以我只需要取
k
值的一半。这不是问题。     
已邀请:
        我的猜测是ѭ3会引入不连续性,因为它不会在采样间隔中给出整数个周期。对于大多数与FFT相关的应用,您可以应用窗口函数来处理此类不连续性,但是显然,这将在您的导数中引入误差项,并且我不确定是否可以对此进行校正。     
        我不知道您是否已解决此问题...但是我想主要的问题是sin(3 Pi t)在[[0,1](sin(0)!= sin(3 * Pi))。 FFT无法正常运作...     

要回复问题请先登录注册