我正在尝试使用从Fortran转换为从Netlib (http://www.netlib.org/fftpack/)下载的FFTPACK。不幸的是,它似乎并没有真正记录下来,而且非常神秘(就像我想象的大多数FFT代码一样)。显然,它应该遵循与最初的Fortran代码类似的结构,所以这就是我所尝试的。
到目前为止,我的情况如下:
void main()
{
int n = 10;
float* wsave;
forward_transform(function1, wsave, n);
}
void forward_transform(float (*f)(float), float* wsave, int n)
{
int *ifac;
int i;
float r[n];
for (i = 0; i< n; i++)//set function values
{
r[i] = f((float)(-M_PI + i*2*M_PI/(n-1)));
}
__ogg_fdrffti(n, *wsave, *ifac);//initialize
__ogg_fdrfftf(n, *r, *wsave, *ifac);//forward transform
}这段代码能够编译,但是当我调用__ogg_fdrffti时会产生一个分段错误。我试图通过gbd将其输入fft.c,以查看错误的确切位置,但我似乎无法做到这一点(代码在forward_transform函数中的同一行中仍然是分段错误),这使我相信我在传递各种数组的方式上犯了错误。
有人对FFTPACK的C版有任何经验或例子吗?
发布于 2014-11-03 21:52:30
这些函数中初始化的变量必须存在于内存中的某个地方。您正在传递指针。
试一试
void main()
{
int n = 10;
float wsave;
forward_transform(function1, wsave, n);
}
void forward_transform(float (*f)(float), float wsave, int n)
{
int ifac;
int i;
float r[n];
for (i = 0; i< n; i++)//set function values
{
r[i] = f((float)(-M_PI + i*2*M_PI/(n-1)));
}
__ogg_fdrffti(n, &wsave, &ifac);//initialize
__ogg_fdrfftf(n, r, &wsave, &ifac);//forward transform
}注意,指针是使用实际变量上的地址运算符&创建的。
https://stackoverflow.com/questions/26722849
复制相似问题