FFTPACK在C语言中的示例

FFTPACK在C语言中的示例,c,fft,C,Fft,我正在尝试使用从Netlib()下载的从Fortran转换为C的FFTPACK。不幸的是,它似乎没有真正的文档记录,而且非常神秘(正如我想象的大多数FFT代码)。显然,它应该遵循与原始Fortran代码类似的结构,所以这就是我所尝试的 以下是我目前掌握的情况: void main() { int n = 10; float* wsave; forward_transform(function1, wsave, n); } void forward_transform(flo

我正在尝试使用从Netlib()下载的从Fortran转换为C的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
}
void main()
{
int n=10;
浮动*wsave;
前向_变换(函数1,wsave,n);
}
无效前向_变换(float(*f)(float),float*wsave,int n)
{
国际会计师公会;
int i;
浮动r[n];
对于(i=0;i
这段代码设法编译,但当我调用
\uuuogg\ufdrffti
时,会给出一个segfault。我试图通过gbd输入fft.c以查看错误的确切位置,但我似乎无法做到这一点(代码仍然在我的前向_变换函数的同一行中分段错误),这让我相信我在传递各种数组时不知何故犯了错误


有没有人有过C版FFTPACK的经验或例子

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

试一试

void main()
{
int n=10;
浮动wsave;
前向_变换(函数1,wsave,n);
}
无效前向_变换(float(*f)(float),float wsave,int n)
{
国际会计师联合会;
int i;
浮动r[n];
对于(i=0;i

请注意,指针是在实际变量上使用地址操作符
&
创建的。

谢谢,这似乎有点帮助。如果我也将
*r
更改为
&r
,我至少可以进入ftt功能。现在,第一次呼叫工作正常,但在第二次呼叫中,我遇到seg故障。在第31行(对fft的第一次调用)输入gdb,我可以打印r并获得一个数字数组,但在第32行(第二次fft调用),当我打印r时,它返回一个内存地址。如果我问这个内存地址*r是什么,我会得到错误“无法访问地址0x处的内存…”。有什么想法吗?再次感谢。@HH抱歉,我应该发现的。只需使用
r
。数组名已经是指向该数组的指针。
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
}