Matlab 如何定义跨越3维的功率谱?
我正在尝试将一些现有的matlab代码从二维修改为三维,并运行到一个概念块中。原始脚本通过对功率谱和随机噪声的乘积运行ifft(3)从2d随机噪声生成分形。为了定义功率谱,我必须定义U、V和W维度的频率 我有一个关于W维度频率相对于U和V应该是什么样子的思维障碍。显然,它们不仅仅是U或V的转置。如果它有助于澄清问题,在开始和结束时包括一些额外的代码。var powerspectrum当前正在返回2d矩阵,它应该是3d矩阵。谢谢Matlab 如何定义跨越3维的功率谱?,matlab,matrix,3d,geometry,fractals,Matlab,Matrix,3d,Geometry,Fractals,我正在尝试将一些现有的matlab代码从二维修改为三维,并运行到一个概念块中。原始脚本通过对功率谱和随机噪声的乘积运行ifft(3)从2d随机噪声生成分形。为了定义功率谱,我必须定义U、V和W维度的频率 我有一个关于W维度频率相对于U和V应该是什么样子的思维障碍。显然,它们不仅仅是U或V的转置。如果它有助于澄清问题,在开始和结束时包括一些额外的代码。var powerspectrum当前正在返回2d矩阵,它应该是3d矩阵。谢谢 beta = -2; imsize = [sidelength, s
beta = -2;
imsize = [sidelength, sidelength, sidelength]; %length of sides of image in pixels;
% Generate the grid of frequencies. u is the set of frequencies along the first dimension
u = [(0:floor(imsize(1)/2)) -(ceil(imsize(1)/2)-1:-1:1)]'/imsize(1); % First quadrant are positive frequencies. Zero frequency is at u(1,1).
u = repmat(u,1,imsize(2)); % Reproduce these frequencies along ever row.
v = [(0:floor(imsize(2)/2)) -(ceil(imsize(2)/2)-1:-1:1)]/imsize(2); % v is the set of frequencies along the second dimension. For a square region it will be the transpose of u.
v = repmat(v,imsize(1),1); % Reproduce these frequencies along ever column.
w = [(0:floor(imsize(3)/2)) -(ceil(imsize(3)/2)-1:-1:1)]/imsize(3); % W is the set of frequencies along the *third* dimension.
w = repmat(w,imsize(3),1); % Reproduce these frequencies along every PAGE.
powerspectrum = (u.^2 + v.^2 + w.^2).^(beta/2); % Generate the power spectrum
phases = randn(imsize); % Generate a grid of random phase shifts
complexpattern = ifftn(powerspectrum.^0.5 .* (cos(2*pi*phases)+1i*sin(2*pi*phases))); % Inverse Fourier transform to obtain the the spatial pattern
除了使用
repmat
之外,您还可以将u
、v
和w
分别放入[sidelength 11]
、[1 sidelength 1]
和[1 sidelength]
数组中,然后让它们完成工作并创建一个[sidelength sidelength sidelength]
数组:
u = [(0:floor(imsize(1)/2)) -(ceil(imsize(1)/2)-1:-1:1)]'/imsize(1);
u = reshape(u,[],1)
v = [(0:floor(imsize(2)/2)) -(ceil(imsize(2)/2)-1:-1:1)]/imsize(2);
v = reshape(v,1,[]);
w = [(0:floor(imsize(3)/2)) -(ceil(imsize(3)/2)-1:-1:1)]/imsize(3);
w = reshape(w,1,1,[]);
powerspectrum = (u.^2 + v.^2 + w.^2).^(beta/2);
phases = randn(imsize);
complexpattern = ifftn(powerspectrum.^0.5 .* (cos(2*pi*phases)+1i*sin(2*pi*phases)));