我有一个问题。
我有一个任务是在Matlab中不使用for循环编写自己的fft2。 有一个计算此任务的公式:
F(u,v)= sum(0到M-1){sum(o到N-1){f(m,n)* e ^( - i * 2pi *(um / M + vn / N))}}
或者为了更好的阅读: http://www.directupload.net/file/d/3808/qs3r9ogz_png.htm
使用两个for循环很容易做到但我不知道如何在没有这些循环的情况下做到这一点,绝对不知道。 我们没有得到教学人员的帮助。他们甚至不会给一本书的提示或参考,我们可以在那里阅读它。
现在,我想尝试在这里获得帮助。
答案 0 :(得分:0)
您熟悉DFT的矩阵形式吗?看看这里:http://en.wikipedia.org/wiki/DFT_matrix
你可以做类似的事情来获得2D DFT的矩阵形式
你需要转换矩阵。第一个是N-by-N DFT矩阵,它在f
的列上运行,如上面的链接所述。接下来,您需要另一个M-byM DFT矩阵,对f
行进行操作。最后,您转换的信号由
F = Wm * f * Wn;
没有任何循环。 注意,通过使用类似
之类的东西,也可以在没有循环的情况下构造DFT矩阵(1:M)*((1:M)')
答案 1 :(得分:0)
在Thp的回答中稍作修正:(1:M)*((1:M)')
不是创建矩阵的正确方法,但是(1:M)'*(1:M)
是正确的方法。