function [output1, output2] = fft2D(input)
output1 = input';
output1 = fft(output1);
output1 = output1';
output1 = fft(output1);
output2 = fft2(input);
end
所以我在 output2 中计算
input
的二维 FFT,在 output1 中计算 input
的相同二维 FFT。 fft()
对于 2D 矩阵,跨列向量应用 FFT。所以上面我将它应用于行,然后应用于列。但是对于随机矩阵
[1 1 4 1;
12 13 124 1;
12 2 2 1;
1 1 1 0]
我的
output1
是: 1.0e+02 *
1.7700 + 0.0000i -1.0500 + 0.1400i 1.3700 + 0.0000i -1.0500 - 0.1400i
-0.1000 - 1.4700i -0.0200 + 1.1100i -0.0800 - 1.2100i -0.2400 + 1.1300i
-1.2900 + 0.0000i 1.1900 - 0.1200i -1.0900 + 0.0000i 1.1900 + 0.1200i
-0.1000 + 1.4700i -0.2400 - 1.1300i -0.0800 + 1.2100i -0.0200 - 1.1100i
我的
output2
是 1.0e+02 *
1.7700 + 0.0000i -1.0500 - 0.1400i 1.3700 + 0.0000i -1.0500 + 0.1400i
-0.1000 - 1.4700i -0.2400 + 1.1300i -0.0800 - 1.2100i -0.0200 + 1.1100i
-1.2900 + 0.0000i 1.1900 + 0.1200i -1.0900 + 0.0000i 1.1900 - 0.1200i
-0.1000 + 1.4700i -0.0200 - 1.1100i -0.0800 + 1.2100i -0.2400 - 1.1300i
它们是相同的值,但在不同的位置互换!这让我发疯了很长时间,因为根据我(重新)在线阅读的内容,可以通过跨行然后跨列应用 1D FFT 来执行 2D FFT。任何帮助或建议都会很棒!
最佳答案
使用 output1 = output1.'
而不是 output1 = output1'
因为后者给出了共轭转置并且你想要转置。
function [output1, output2] = fft2D(input)
output1 = input.';
output1 = fft(output1);
output1 = output1.';
output1 = fft(output1);
output2 = fft2(input);
end
或者,您可以指定要进行 FFT 的维度。
function [output1, output2] = fft2D(input)
output1 = fft(input,[],1);
output1 = fft(output1,[],2);
output2 = fft2(input);
end
关于与跨行和列执行的多个 fft (1D) 相比,Matlab fft2 (2D) 给出了可互换的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49057222/