三维矩阵上的FFT和IFFT(Matlab)

时间:2012-06-09 15:58:35

标签: matlab fft ifft

我在MATLAB中有70个灰度帧的电影。我把它们放在一个三维矩阵中,所以尺寸是X,Y和时间 我想确定时间维度中的频率,因此我必须计算3 rd 维度中每个点的FFT。这不是问题,但我必须使用ifft将图像返回到原始表单 在正常情况下,这将是真的:X = ifft(fft(X)),但在处理多维数据时,这不是MATLAB中的情况。

这是我使用的代码:

for i = 1:length              
    y(:, :, i) = [img1{i, level}];  %# take each picture from an cell array and put it
end                                 %# and put it in 3D array
y2 = ifft(fft(y, NFFT,3), NFFT, 3); %# NFFT = 128, the 3 is the dimension in which i want
                                    %# to calculate the FFT and IFFT

y为480x640x70,因此共有70张640x480像素的图像。

如果我仅使用fft,则y2为480x640x128(这是正常的,因为我们需要使用NFFT获得128分。) 如果我使用fftifft,则y2为480x640x128像素。这不正常,128应该再次为70 我尝试通过使用2个for循环在一个维度上完成它,这很好。但是,for循环花了很多时间。

1 个答案:

答案 0 :(得分:0)

您需要致电:

  y2 = ifft(fft(y, 128,3), 70, 3); 

或更一般地

  y2 = ifft(fft(y, NFFT, 3), size(y,3), 3);

你正在这样做,你要求ifft的输出也让第三个维度等于NFFT,这对你来说是128。