GPU 上的 3D 矩阵上的 fftshift

fftshift on a 3D matrix on GPU

我有一个 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 支持。

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

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

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