【问题标题】:Matlab own fft2 without loopsMatlab自己的fft2没有循环
【发布时间】:2014-11-16 11:07:24
【问题描述】:

我有问题。

我有一个任务是在 Matlab 中不使用 for 循环编写自己的 fft2。 有一个计算这个任务的公式:

F(u,v) = sum (0 to M-1) {sum(o to N-1) {f(m,n)*e^(-i*2pi*(um/M + vn/ N))}}

或者为了更好的阅读: http://www.directupload.net/file/d/3808/qs3r9ogz_png.htm

使用两个 for 循环很容易做到这一点,但如果没有这些循环,我不知道如何做到这一点,完全不知道。 我们没有得到教学人员的帮助。他们甚至没有给出提示或参考书,我们可以在哪里读到它。

现在,我想在这里寻求帮助。

【问题讨论】:

    标签: matlab fft


    【解决方案1】:

    你熟悉 DFT 的矩阵形式吗?看看这里:http://en.wikipedia.org/wiki/DFT_matrix

    您可以执行类似的操作以获得 2D DFT 的矩阵形式。
    您需要转换矩阵。第一个是对f 的列进行操作的 N×N DFT 矩阵,如上面的链接中所述。接下来,您需要另一个对f 行进行运算的 M-byM DFT 矩阵。最后,您转换后的信号由

    F = Wm * f * Wn;
    

    没有任何循环。 请注意,DFT 矩阵也可以通过使用类似

    的东西来构建而无需循环
    (1:M)*((1:M)')
    

    【讨论】:

    • 你的回答好像很好,但是我这边知识欠缺。我不知道如何创建这些 DFT 矩阵。我有这个公式。我不需要这个,如果,我该如何使用它。这个问题对我来说很难解决。
    • @user3556115 按照我提供的链接。 DFT 矩阵在那里定义。
    【解决方案2】:

    对 Thp 的回答稍作修正:(1:M)*((1:M)') 不是创建矩阵的正确方法,但 (1:M)'*(1:M) 是正确的方法。

    【讨论】:

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