FFTW中的频域滤波器

时间:2019-05-12 15:22:34

标签: c filter fftw phase

我想对信号应用半导数滤波器sqrt(d/dt)。我们知道很难在时域中实现,但是只能在频域中乘以sqrt(iw)w是角频率)。并执行IFFT将其返回到时域。但是我找不到正确的答案。

    in = (fftw_complex *) fftw_malloc(nt*sizeof(fftw_complex));  
    out = (fftw_complex *) fftw_malloc(nt*sizeof(fftw_complex)); 
    out_ps = (fftw_complex *) fftw_malloc(nt*sizeof(fftw_complex)); 

    for(k=0;k<ng;k++){
        /* FORWARD */
        for (j=0;j<nt;j++){
            in[j][0]=dat[k][j];
            in[j][1]=0.0;
        }

        plan1 = fftw_plan_dft_1d(nt, in, out, FFTW_FORWARD, FFTW_ESTIMATE);

        fftw_execute(plan1);
        fftw_destroy_plan(plan1);

        /* 45 Phase shift in frequency domain */
        for (j=0;j<nt;j++){
               w = j/nt;
               out_ps[j][0] = sqrt(w/2.0)*(out[j][0]-out[j][1]);
               out_ps[j][1] = sqrt(w/2.0)*(out[j][0]+out[j][1]);
        }

        /* INVERSE */
        plan2 = fftw_plan_dft_1d(nt, out_ps, in, FFTW_BACKWARD, FFTW_ESTIMATE);
        fftw_execute(plan2);
        fftw_destroy_plan(plan2);
        for (j=0;j<nt;j++){
                 inv_dat[k][j] = in[j][0];
        }            
    }

我使用一个简单的正弦函数对其进行测试。输出全为零。任何人都能弄清楚吗?

0 个答案:

没有答案