我在计算高斯的2D FFT时遇到问题。当我使用函数plt.imshow()时,FFT是正确的。但是,当我尝试将其绘制为空间频率的函数时,会削减3/4的FFT。
我做错了什么?
另外,我总是用这种方法计算微分方程。在那里一切都很好。
最佳, 维克多
我的代码是:
import numpy as np
import matplotlib.pyplot as plt
L=1
N=2048
#print(shape)
x = np.arange(-L,L,2.*L/N)
y= np.arange(-L,L,2.*L/N)
xx, yy=np.meshgrid(x,y)
#print(xx,yy)
#print(np.size(x))
kx= np.fft.fftfreq(np.size(x),2.*L/N)
ky=np.fft.fftfreq(np.size(y),2.*L/N)
kxx,kyy= np.meshgrid(kx,ky)
#print(xx)
gauss= np.exp(xx**2+yy**2)
#print(gauss)
plt.figure()
plt.pcolormesh(xx,yy, gauss)
plt.gca().set_aspect("equal")
plt.colorbar()
plt.show()
FFT=np.fft.fft2(gauss)
FFT_Shift = np.fft.fftshift(FFT)
FFT_Log= np.log(FFT)
#print(FFT)
plt.figure()
# This one does not work
plt.pcolormesh(kxx,kyy,abs(np.fft.fftshift(FFT_Log)))
# However, using imshow works fine
#plt.imshow(abs(FFT_Log)) # This one works
plt.gca().set_aspect("equal")
plt.colorbar()
plt.show()