【问题标题】:NULL instead of arrays in FFTW plans with FFTW_ESTIMATE使用 FFTW_ESTIMATE 的 FFTW 计划中的 NULL 代替数组
【发布时间】:2014-01-22 13:51:23
【问题描述】:

在使用 FFTW_ESTIMATE 时是否可以将 NULL 而不是数组传递给 FFTW 计划例程?

FFTW 文档说:

...从技术上讲,FFTW_ESTIMATE 不会触及您的数组...

当然,这只有在使用新数组执行函数link 时才有意义。

【问题讨论】:

    标签: c fftw


    【解决方案1】:

    创建 FFTW 计划时推荐的方法是在使用数据填充输入数组之前创建计划(因为使用 FFTW_MEASURE 会“触及”您的数据并可能会更改它)。您引用的文档只是说,如果您决定不采用推荐的方法并在创建计划之前将数据存储在输入数组中,那么如果您使用 FFTW_ESTIMATE,一切都应该没问题。

    确实,只有在您使用 FFTW_ESTIMATE 以及之后使用有效指针的 fftw_execute_* 时,才使用 NULL 指针才有意义。 FFTW 在创建计划时是否接受 NULL,您可以尝试看看...我同意从逻辑上讲,在计划时不需要它。

    【讨论】:

    • 正如另一个答案指出的那样。如果您传递两个相等的指针,则计划将假定转换已到位。不确定该扣除是否也适用于 nullptrs。对不合适的地方应用就地变换可能没有问题,但它可能会更慢。 fftw 是一个黑匣子,必须进行实验或查看源代码才能确定。
    【解决方案2】:

    当您创建计划时,它会查看输入和输出是否不同,并相应地调整计划:

    From the docs:

    如果 in == out,则转换是就地的,输入数组是 覆盖。如果 in != out,则两个数组不能重叠(但 FFTW 不检查这种情况)。

    因此,如果您不打算就地转换,则绝对不能传递 2 个 NULLS。反之亦然。

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多