gpt4 book ai didi

c - FFTW3 2D,传递 fftw_complex 数组

转载 作者:行者123 更新时间:2023-11-30 16:34:21 25 4
gpt4 key购买 nike

我正在尝试执行 here 中的指示计算二维傅里叶变换:

#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;
}

我收到以下错误:

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。如何纠正我的错误?

最佳答案

fftw_complex *signal

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

3D 数组衰减为指向 2D 数组的指针。所以你应该将该论证写为

fftw_complex (*signal)[][]

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

关于c - FFTW3 2D,传递 fftw_complex 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com