首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C示例中的FFTPACK

C示例中的FFTPACK
EN

Stack Overflow用户
提问于 2014-11-03 20:43:03
回答 1查看 731关注 0票数 2

我正在尝试使用从Fortran转换为从Netlib (http://www.netlib.org/fftpack/)下载的FFTPACK。不幸的是,它似乎并没有真正记录下来,而且非常神秘(就像我想象的大多数FFT代码一样)。显然,它应该遵循与最初的Fortran代码类似的结构,所以这就是我所尝试的。

到目前为止,我的情况如下:

代码语言:javascript
复制
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版有任何经验或例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-03 21:52:30

这些函数中初始化的变量必须存在于内存中的某个地方。您正在传递指针。

试一试

代码语言:javascript
复制
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
}

注意,指针是使用实际变量上的地址运算符&创建的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26722849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档