在GPU的3D矩阵上进行fftshift

时间:2018-08-20 17:09:27

标签: matlab gpu fft

我有一个3D矩阵512*512*100。我想使用GPU在其每一页上应用fftshift。我现在正在做的是:

  G = rand(512,512,100, 'gpuArray');
  for i=1:100
      G(:,:,i) = fftshift(G(:,:,i));
  end

是否有更快的方法来应用fftshift而不循环执行?例如,fft2可以直接应用于分别在每个页面上执行操作的3D阵列。但是,fftshift不能那样工作。此外,fftshift不支持pageFun

1 个答案:

答案 0 :(得分:4)

fftshift有一个可选的第二个输入参数,用于选择沿哪个维度应用偏移。不幸的是,无法提供两个维度,因此fftshift(G,[1,2])将不起作用。您必须打两次fftshift

G = fftshift(fftshift(G,1),2);

希望这比单页调用100次要快。