使用傅立叶正弦变换FFTW进行微分

问题描述

我们如何用FFTW_RODFT00(正弦变换)计算函数的一阶导数?

我很幸运地计算出二阶导数,因为sqrt(-1)^ 2 = -1并在使用虚数值的同时返回了一个虚数值,我们可以将其进行正弦逆变换以得到df(x) 。另一方面,对于一阶导数,我担心我们可能会有一个实数值(与i = sqrt(-1)相乘)来对FFTW_REDFT00进行逆变换?

这是我的代码

#include "math.h" 
#include "fftw3w.h"
#include "common.h"
//#include <complex>

#define M_PI       3.14159265358979323846
#define FFN_R2R 3

float b[FFN_R2R]={1,2,3};


static void normalize_r2r(void){

    const float const_k=1.f/(2*(FFN_R2R+1));
for(unsigned int i=0; i<FFN_R2R; ++i) b[i]*=const_k;
}

static void delta_r2r(void) {

    
const float fM_PI= (float) M_PI;


fftwf_plan gplan[2];

gplan[0]= fftwf_plan_r2r_1d(FFN_R2R,b,FFTW_RODFT00,FFTW_ESTIMATE);
gplan[1]= fftwf_plan_r2r_1d(FFN_R2R,FFTW_ESTIMATE);

fftwf_execute(gplan[0]);


/**/

const float rcpL=1.f/(1*(FFN_R2R+1));
unsigned int i;
float k;
for(i=0,k=0.f; i<FFN_R2R; ++i,++k){


    b[i]*=  -( fM_PI*rcpL*(k+1.f) * fM_PI*rcpL*(k+1.f) );   



    }


fftwf_execute(gplan[1]);
normalize_r2r();

for(uint i=0; i<FFN_R2R; ++i) printf("%f \n",b[i]);
} 


解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)