0

我试图让kiss fft使用visual studio 2013在同一个应用程序中编译float和double实现。我看到我需要做的就是将kiss_fft_scalar设置为double并重新编译以获得double。

为此,我整理了一个标头,其中包含带有 Kiss_fft_scalar 的标头在 2 个不同的命名空间中更改,如下所示:

namespace KissFloat
{
    #undef KISS_FFT_H
    #undef KISS_FTR_H
    #define kiss_fft_scalar float
    #include "kiss_fft.h"
    #include "tools/kiss_fftr.h"
};

namespace KissDouble
{
    #undef KISS_FFT_H
    #undef KISS_FTR_H
    #define kiss_fft_scalar double
    #include "kiss_fft.h"
    #include "tools/kiss_fftr.h"
};

但是,我无法弄清楚如何包含 cpp 代码。我试过单独的 KissFloat 和 KissDouble 文件。然后我在 cpp 文件中尝试了一些东西,但我尝试的一切都以编译错误结束。通常与结构重定义有关。

任何人都可以想出一种方法来完成这项工作吗?还是我最好使用模板重写kiss fft?

4

2 回答 2

1

有趣的想法,但你可能会更好地破解文件,例如制作kiss_fft_scalar模板参数。一个问题是头文件将包含其他头文件,例如stdlib.h. 我想您可以在执行命名空间技巧之前先发制人地包含这些文件。

我猜 struct redef 错误是针对kiss_fft_statein 的_kiss_fft_guts.h?如果您有单独的 Float/Double .cpp 文件并在包含 .c 文件之前使用指令,它可能会起作用。

如果您决定将其模板化,您可以查看Kissfft 的 Eigen (partial) c++ 端口。

于 2017-03-01T18:40:02.893 回答
0

所以我发现 Eigen 已经为我完成了模板吻 FFT 的工作。向其他努力工作的人致敬!;)

本征可在此处获得:

https://bitbucket.org/eigen/eigen/src

并且kiss fft实现在

“不支持/特征/src/FFT/”

于 2017-03-02T10:31:51.413 回答