我想对信号应用半导数滤波器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];
}
}
我使用一个简单的正弦函数对其进行测试。输出全为零。任何人都能弄清楚吗?