使用 pyfftw 对 2D ndarray 进行 ifft 时,我发现生成的相位在许多位置上是不连续的。我的代码如下:
import numpy as np
import pyfftw
from scipy.fft import ifftshift,fftshift
import matplotlib.pyplot as plt
N = 256
kx = np.linspace(-np.floor(N/2),np.ceil(N/2)-1,N)
kX,kY = np.meshgrid(kx,kx)
kR = np.sqrt(kX**2 + kY**2)
mask = np.where((kR<=15),1,0)
ifft_obj = pyfftw.builders.ifft2(ifftshift(mask))
wave = fftshift(ifft_obj())
plt.imshow(np.angle(wave),cmap='jet')
plt.colorbar()
相位图如下
最小相位值是
-3.141592653589793
和最大值是3.141592653589793
并且它们的差大于2pi。使用 scipy.fft 只会得到相同的结果。但是,当我转向 Matlab 时,结果看起来更合理。我的代码是:
N = 256;
kx = linspace(-floor(N/2),ceil(N/2)-1,N);
[kX,kY] = meshgrid(kx,kx);
kR = sqrt(kX.^2 + kY.^2);
mask = single(kR<=15);
wave = fftshift(ifft2(ifftshift(mask)));
imshow(angle(wave));
caxis([min(angle(wave),[],'all') max(angle(wave),[],'all')]);
axis image; colormap jet;colorbar;
我想知道是什么导致了 python 代码中的相位不连续以及如何纠正它。