首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFTW guru接口

FFTW guru接口
EN

Stack Overflow用户
提问于 2021-06-30 15:51:02
回答 1查看 131关注 0票数 2

我不明白FFTW的古鲁界面。让我解释一下我是如何根据手册和这个问题如何使用fftw接口来理解它的,也许有人可以澄清我的误解。

代码语言:javascript
复制
fftw_plan fftw_plan_guru64_dft(
 int rank, const fftw_iodim64 *dims,
 int howmany_rank, const fftw_iodim64 *howmany_dims,
 fftw_complex *in, fftw_complex *out,
 int sign, unsigned flags);

假设我们想要计算交错多维数组的DFT,例如这张图片中的6个2x2数组(每个数组都有不同的颜色)。

交错dfts

由于dfts在垂直方向上有3跨,在水平方向上有2步长,所以我认为我们需要秩= 2,dims = {(2,3,3),(2,2,2)}。起点是一个3x2子数组,所以我认为howmany_rank = 2,howmany_dims = {(3,1,1),(2,1,1)}。

然而,FFTW并不是这样做的。我做了一个较小的例子,它很容易用手计算,包括大小为2x1的4个DFT(用颜色表示)。每个dft的形式为(+-1,0),其输出为(+-1,+-1),但这不是FFTW计算的结果。

小例子

这是我用来计算DFT的代码。

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

int main()
{
    fftw_complex* X = fftw_malloc(8 * sizeof(fftw_complex));
    fftw_iodim* sizes = malloc(2 * sizeof(fftw_iodim));
    fftw_iodim* startingPoints = malloc(2 * sizeof(fftw_iodim));
    sizes[0].n = 2; sizes[0].is = 2; sizes[0].os = 2;
    sizes[1].n = 1; sizes[1].is = 2; sizes[1].os = 2;
    startingPoints[0].n = 2; startingPoints[0].is = 1; startingPoints[0].os = 1;
    startingPoints[1].n = 2; startingPoints[1].is = 1; startingPoints[1].os = 1;

    fftw_plan plan = fftw_plan_guru_dft(2, sizes, 2, startingPoints, X, X, FFTW_FORWARD, FFTW_ESTIMATE);

    X[0] = 1.0; X[1] = -1.0;
    X[2] = 1.0; X[3] = -1.0;
    X[4] = 0.0; X[5] = 0.0;
    X[6] = 0.0; X[7] = 0.0;

    fftw_execute(plan);

    printf("\nOutput in row-major order:\n");
    for (int i = 0; i < 8; i++) {
        printf("%lf + %lfi, ", creal(X[i]), cimag(X[i]));
    }

    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-05 16:07:09

纵然主轴是“单位”,即doubles或fftw_complexes,而不是行数:doc/Guru-vector-and-transform-sizes.html#Guru-vector-and-transform-sizes

我的猜测是,在长轴上,步幅必须乘以连续行之间的距离,也就是单位距离。因此,对于数组,它们的iodims.is和iodims.os大步应该是4*3 == 12。

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

https://stackoverflow.com/questions/68198005

复制
相关文章

相似问题

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