如何通过添加恒定的时间维度将2D矩阵转换为3D矩阵?

时间:2014-03-13 10:11:17

标签: matlab matrix

对于空间维度,我有一个二维矩阵512 x 512,如何通过添加一个恒定的时间维度来构建一个三维矩阵?我想在时间方向上使用FFT变换来证明只有DC。

我尝试过以下代码:

data3D(:, :, 1) = data;         % data has already load from the above.
im3 = abs(ifft(data3D, [], 3)); % use ifft to the 3rd direction.
imshow(im3);                    % to show the image from the ifft. 

2 个答案:

答案 0 :(得分:0)

如果你想让你的第三个维度(时间)保持不变,你需要的就是沿着这个维度repmat

data3D = repmat( data2D, [1, 1, T] ); % create T replicates along time

答案 1 :(得分:0)

为了更通用的目的,您可以将时间向量放在第三维上,例如:

t = linspace(0, 1, 100);
T = reshape(t, [1 1 length(t)];

通常使用bsxfun进行计算,例如,如果您的空间矩阵A包含某些谐波分析的相量,请让它随时间演变:

s = real(bsxfun(@times, A, exp(1i*omega*T)));

然后傅立叶沿时间维度对其进行变换

S = fft(s, [], 3);

为了使问题不变于空间维数(2D,3D),我会将所有空间维度沿着一个垂直向量放置,时间维度沿着水平维度放置,并使用2D矩阵执行我的逻辑

A_ = A(:)
t = linspace(0, 1, 100);
s = real(bsxfun(@times, A_, exp(1i*omega*t)))
S = fft(s, [], 2);

您可以随时使用reshape

返回原始的2D(或3D)排列
S_2D = reshape(S, [size(A,1) size(A,2) length(t)]);