执行4d FFT并指定频域

时间:2016-08-11 22:22:49

标签: matlab multidimensional-array fft

我在研究双板几何图像重建时遇到了这个问题。假设我有一个15乘15的数组,在一个平面上有间距1,其中57到57个探测器的阵列在另一个平行平面上间距为0.5。因此,总测量数据成为尺寸为57×57×15×15的4-d阵列。我要做的第一件事就是对数据执行4-d(或更精确的双2-d)傅里叶变换。分别是探测器晶格和源晶格,我想在MATLAB中使用内置函数fft2。我的代码如下:

for s = 1:Ns
    data(:,:,s) = fftshift(fft2(data(:,:,s)));  % fft2 assumes exp(-i*omega*t)
end

data = reshape(data(:,:,1:Ns),[Nx,Ny,sqrt(Ns),sqrt(Ns)]);

for i = 1:Nx
    for j = 1:Ny
        data(i,j,:,:) = fftshift(fft2(squeeze(data(i,j,:,:))));
    end
end
val = data;

在上面的代码中,data是衡量标准,最初尺寸为57乘57乘225. Nx = Ny = 57,Ns = 225。任何人都可以向我指出我的双重2-FFT FFT的上述实现是否存在问题,或者至少我是如何验证它的?我的第二个问题是频域。根据MATLAB的说明,相对于探测器平面的频率晶格应为(-28:28)*2*pi/57/0.5(对于两个分量),而相对于源晶格的频率晶格应为(-7:7)*2*pi/15/1(对于两个分量也是如此) 。真的吗?可以说val位置(29,29,8,8)的元素恰好代表探测器频率和源频率的0频率吗?提前谢谢!

0 个答案:

没有答案