【问题标题】:what is correct result after FFT, if input array is {0,1,2,3,4,5,6,7}如果输入数组是 {0,1,2,3,4,5,6,7},FFT 后的正确结果是什么
【发布时间】:2011-05-30 14:49:25
【问题描述】:

如果输入数组是 {0,1,2,3,4,5,6,7},谁能告诉我快速 Furier 变换后的正确结果是什么。

我得到了 {28,0,0,0,0,0,0,0}。不对吧?

只想测试 C 中的 FFT 实现。

谢谢, 安德烈

【问题讨论】:

    标签: fft


    【解决方案1】:

    {0,1,2,3,4,5,6,7} 的 FFT 的正确答案是

    {28.0000 + 0.0000i, 
    -4.0000 + 9.6569i,
    -4.0000 + 4.0000i,
    -4.0000 + 1.6569i,
    -4.0000 + 0.0000i, 
    -4.0000 - 1.6569i,
    -4.0000 - 4.0000i,
    -4.0000 - 9.6569i}
    

    【讨论】:

    • 请注意,“正确”答案不止一个,这只是其中之一 - 至少有 3 种不同的方法来处理比例因子。
    【解决方案2】:

    不,这是不正确的(单个非零输出元素意味着您的输入由常数值或单个复指数分量组成)。

    为什么不使用现有的 FFT 实现,例如 FFTW 来提供参考结果?或者只是实现一个简单的 DFT?

    【讨论】:

      【解决方案3】:

      根据Wolfram Alpha是:

      请注意,没有单一的“正确答案”,因为 DFT/FFT 的定义不止一个,每个定义之间的差异是您为正向和逆变换所包含的比例因子。 (此答案与之前接受的答案之间的差异只是sqrt(8) 的比例因子)。

      【讨论】:

      • 比例因子从何而来?
      • @Rekin:正如我上面提到的,当涉及到比例因子时,至少有 3 种不同的方式来定义 DFT 和 IDFT。您可以为每个方向缩放 1、sqrt(N) 或 N。
      • 好的。您知道将 DFT 按因子缩放的任何优点吗?就像,在我看来,Factor 和 InverseFactor(WolframAlpha 函数)给出了相同的结果。可能是因为缩放?
      • 是的,这真的没关系 - 这只是一个约定 - 您只需要知道您的特定 FFT 实现使用哪些缩放因子。
      【解决方案4】:

      Divij 答案假定输入 {0,1,2,3,4,5,6,7} 的大小为 8,即:

      {0,0i},{1,0i},{2,0i},{3,0i},{4,0i},{5,0i},{6,0i}

      对于被认为是 size=4 的二进制复数的输入,即:

      {0,1i},{2,3i},{4,5i},{6,7i}, 结果是:

      {12, 16i}
      {-8, 0i}
      {-4, -4i}
      {0, -8i}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 2022-09-27
        相关资源
        最近更新 更多