Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在FFTW3中取二阶导数_C_Fftw_Derivative - Fatal编程技术网

C 在FFTW3中取二阶导数

C 在FFTW3中取二阶导数,c,fftw,derivative,C,Fftw,Derivative,我已经使用前向FFT和IFFT(归一化结果)测试了我的代码中的一些实函数,效果很好 然而,我想取一个实函数的二阶导数。为了简单起见,我将sin(2*pi*t)作为一个测试用例。以下是我使用的相关代码(库中的FFT函数): int main(无效) { int i; int-nyh=(N/2)+1; 双结果_数组[nyh][2]; 双x_k[nyh][2]; 双x_r[N]; 文件*psit; psit=fopen(“psitest.txt”,“w”); init(); fft(x,result_

我已经使用前向FFT和IFFT(归一化结果)测试了我的代码中的一些实函数,效果很好

然而,我想取一个实函数的二阶导数。为了简单起见,我将
sin(2*pi*t)
作为一个测试用例。以下是我使用的相关代码(库中的FFT函数):

int main(无效)
{
int i;
int-nyh=(N/2)+1;
双结果_数组[nyh][2];
双x_k[nyh][2];
双x_r[N];
文件*psit;
psit=fopen(“psitest.txt”,“w”);
init();
fft(x,result_array);//函数库中的函数,这已经过测试
psi(结果数组,x_k);
ifft(x_k,x_r);//库中的函数,这已经过测试

对于(i=0;i我猜是
sin(3*pi*t)
引入不连续性,因为它不会在采样间隔中给出整数个周期。对于大多数FFT相关应用程序,您会应用窗函数来处理此类不连续性,但显然这会在导数中引入错误项,我不确定您是否能够对此进行纠正。

我猜是sin(3*pi*t)
引入不连续性,因为它不会在采样间隔中给出整数个周期。对于大多数FFT相关应用程序,您会应用窗函数来处理此类不连续性,但显然这会在导数中引入错误项,我不确定您是否能够对此进行纠正。

我不知道你是否已经解决了这个问题…但是我想主要的问题是sin(3pit)在域[0,1]中不是周期性的(sin(0)!=sin(3*Pi))


FFT无法正常工作…

我不知道您是否已修复此问题…但我猜主要问题是sin(3πt)在域[0,1]中不是周期性的(sin(0)!=sin(3*Pi))

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