gpt4 book ai didi

c - FFTW 1D结果以转置方式存储

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:45 25 4
gpt4 key购买 nike

我想知道是否可以存储来自 FFTW 的一维 FFT 调用的转置矩阵。考虑我的矩阵 nrows_1 x w_size。目前它存储在大小为 w_size

的 block 中
for (ix = 0 ; ix < nrows_1 ; ix++)
{
plan = fftw_plan_dft_1d(w_size, &source_data[ix*w_size], &transposed_data[ix*w_size],
FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(plan);
}

所以我想使用 FFTW 调用转置结果矩阵。

最佳答案

您可以使用 Advanced Complex DFT的 FFTW。由于参数 howmany,如果参数 ostrideodist 设置正确,所有的 dft 可以立即执行,输出被转置。

下面的代码演示了它是如何工作的。它由 gcc main.c -o main -lfftw3 -lm 编译:

#include <fftw3.h>
#include <stdio.h>

int main(int argc, char* argv[]){

int n=9;
int m=4;

fftw_complex *datasource=fftw_malloc(sizeof(fftw_complex)*m*n);
fftw_complex *dataoutput=fftw_malloc(sizeof(fftw_complex)*m*n);

int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
datasource[i*m+j][0]=(i+j)%4+j*j+i*i*i;
datasource[i*m+j][1]=0;
}
}

printf("input :\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%g ",datasource[i*m+j][0]);
}
printf("\n");
}



fftw_plan plan;
for(i=0;i<n;i++){
plan = fftw_plan_dft_1d(m, &datasource[i*m], &dataoutput[i*m],
FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
}

printf("expected output, real part, not transposed :\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%g ",dataoutput[i*m+j][0]);
}
printf("\n");
}

plan=fftw_plan_many_dft(1, &m, n,
datasource, NULL, 1, m,
dataoutput, NULL,n, 1,
FFTW_FORWARD, FFTW_ESTIMATE);

fftw_execute(plan);
fftw_destroy_plan(plan);

printf("output, real part, already transposed :\n");
for(j=0;j<m;j++){
for(i=0;i<n;i++){
printf("%g ",dataoutput[j*n+i][0]);
}
printf("\n");
}

fftw_free(datasource);
fftw_free(dataoutput);

return 0;
}

我想我的回答来得太晚了,没有用......

关于c - FFTW 1D结果以转置方式存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867559/

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