Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FFTW-1D-FFT用于C语言中的二维阵列_C_Fft_Fftw - Fatal编程技术网

FFTW-1D-FFT用于C语言中的二维阵列

FFTW-1D-FFT用于C语言中的二维阵列,c,fft,fftw,C,Fft,Fftw,我试图实现在C中为2D数组的每一行计算1D FFT。 这是我的代码(m和n分别是矩阵的行数和列数): 谁能告诉我为什么我有错误的结果?我可能用错误的方式调用了fftw\u plan fftw\u plan\u many\u dft,但我看不出来。从文档中,似乎fftw\u plan\u many\u dft假设2D数组由连续的1D数组表示,行是按顺序存储的。通过有意义的名称numRows和numColumns调用'm'和'n'不是一个好主意吗? int howmany; int i; int i

我试图实现在C中为2D数组的每一行计算1D FFT。 这是我的代码(m和n分别是矩阵的行数和列数):


谁能告诉我为什么我有错误的结果?我可能用错误的方式调用了fftw\u plan fftw\u plan\u many\u dft,但我看不出来。

从文档中,似乎
fftw\u plan\u many\u dft
假设2D数组由连续的1D数组表示,行是按顺序存储的。通过有意义的名称
numRows
numColumns
调用'm'和'n'不是一个好主意吗?
int howmany;
int i;
int idist = 1;
int inembed;
int istride;
int j;
int m;
int n;
int odist = 1;
int onembed;
int ostride;
int rank = 1;

fftw_complex *in;
fftw_complex *out;

fftw_plan plan_forward;

m = atoi(argv[1]);
n = atoi(argv[2]);

howmany = m;
istride = n;
ostride = n;
inembed = n;
onembed = n;

in = fftw_malloc ( sizeof ( fftw_complex ) * m * n );
out = fftw_malloc ( sizeof ( fftw_complex ) * m * n );

for ( i = 0; i < ( m * n ); i++ )
{
    in[i][0] = m * n - i - 1 ;
    in[i][1] = 0 ;
}

printf("Print Initial Data: \n");
for ( i = 0 ; i < m ; i ++)
{
    for ( j = 0; j < n; j++ )
    {
        printf ( "  %12f\t", in[j + i * n][0]);
    }
    printf("\n");
}

plan_forward = fftw_plan_many_dft(rank, &n, howmany,
        in, &inembed,
        istride, idist,
        out, &onembed,
        ostride, odist,
        FFTW_FORWARD, FFTW_ESTIMATE);

fftw_execute ( plan_forward );

printf("Print Result FFT:\n");
for ( i = 0 ; i < m ; i ++)
{
    for ( j = 0; j < n; j++ )
    {
        printf ( "  %4d  %12f  %12f\n", i, out[j + i * n][0], out[j + i * n][1] );
    }
    printf("\n");
}

fftw_destroy_plan ( plan_forward );

fftw_free ( out );
fftw_free ( in );
Print Initial Data: 
 15.000000       14.000000       13.000000       12.000000  
 11.000000       10.000000        9.000000        8.000000  
  7.000000        6.000000        5.000000        4.000000  
  3.000000        2.000000        1.000000        0.000000  
Print Result FFT:
 0     36.000000      0.000000
 0     32.000000      0.000000
 0     28.000000      0.000000
 0     24.000000      0.000000

 1      8.000000     -8.000000
 1      8.000000     -8.000000
 1      8.000000     -8.000000
 1      8.000000     -8.000000

 2      8.000000      0.000000
 2      8.000000      0.000000
 2      8.000000      0.000000
 2      8.000000      0.000000

 3      8.000000      8.000000
 3      8.000000      8.000000
 3      8.000000      8.000000
 3      8.000000      8.000000