首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFTW3 2D,传递fftw_complex数组

FFTW3 2D,传递fftw_complex数组
EN

Stack Overflow用户
提问于 2018-03-19 05:53:53
回答 1查看 526关注 0票数 0

我正在尝试实现here中的指令来计算2D傅立叶变换:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include </usr/local/include/fftw3.h>
#include <math.h>

#define NUM_POINTS 600

#define REAL 0
#define IMAG 1

void acquire_from_somewhere(fftw_complex *signal) {

    int i, j, m_gamma=2, Lambda=1;
    double theta=0.095,kappa=5.;
    for (i = 0; i < NUM_POINTS; ++i) {
    for (j = 0; j < NUM_POINTS; ++j) {
    double x = (double)i / (double)NUM_POINTS * M_PI, y = (double)j / (double)NUM_POINTS * M_PI;

    signal[i][j][REAL] = Lambda*cos(theta/2)*cos(theta/2)*cos(m_gamma * atan(y/x));

    signal[i][j][IMAG] =0.;
    }}
}

void do_something_with(fftw_complex *result, double *mag) {
    int i,j;
    for (i = 0; i < NUM_POINTS; ++i) {
    for (j = 0; j < NUM_POINTS; ++j) {
        *mag = sqrt(result[i][j][REAL] * result[i][j][REAL] + result[i][j][IMAG] * result[i][j][IMAG]);

        printf("%g\n", *mag);
    }}
}


/* Resume reading here */

int main() {

    double mag;
    fftw_complex signal[NUM_POINTS][NUM_POINTS];
    fftw_complex result[NUM_POINTS][NUM_POINTS];

    fftw_plan plan = fftw_plan_dft_2d(NUM_POINTS,NUM_POINTS,
                                  &signal[0][0],
                                  &result[0][0],
                                  FFTW_FORWARD,
                                  FFTW_ESTIMATE);

    acquire_from_somewhere(&signal[0][0]);
    fftw_execute(plan);
    do_something_with(&result[0][0], &mag);

//    printf("%g\n", mag);

        fftw_destroy_plan(plan);

        return 0;
}

我得到以下类型的错误:

代码语言:javascript
复制
FFT.c:26:21: error: subscripted value is not an array, pointer, or vector
    signal[i][j][REAL] = Lambda*cos(theta/2)*cos(theta/2)*cos(m_gamma * atan(y/x));//Lambda*(cos(theta/2)*cos(theta/2)*cos(m_gamm...
    ~~~~~~~~~~~~^~~~~

我不知道该去哪里找...我想,传统的传递2D数组的方式对fftw_complex不起作用。如何改正我的错误?

EN

回答 1

Stack Overflow用户

发布于 2018-03-19 06:08:29

代码语言:javascript
复制
fftw_complex *signal

指示正在传递指向fftw_complex的指针,可能是衰减的一维数组。

3D数组衰减为指向2D数组的指针。所以你应该把这个参数写成

代码语言:javascript
复制
fftw_complex (*signal)[][]

另外,在您的问题中,您谈到了2D数组,但将signal视为3D数组,不一致。

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

https://stackoverflow.com/questions/49353207

复制
相关文章

相似问题

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