Двухмерное преобразование Фурье¶
Преобразование Фурье задается формулой: При выполнении преобразования симметричный квадрат от \(X [-а; а],\) нужно превратить с учетом периодичности в квадрат \(X [0; а],\). для этого меняются местами
половины массива по оси X и Y. После выполнения преобразования необходимо вернуть все на место.
Задаем функцию Гаусса и вычисляем ее значения на сетке. Меняем местами четверти квадрата. Выполняем преобразование Фурье. У результата меняем четверти квадрата в обратную сторону.
#!/usr/bin/python # -*- coding: utf-8 import numpy as np import scipy.fftpack as ff from mayavi import mlab def gau(x,y): return np.exp(-10000*(x**2+y**2)) ii=int(512./2+1) [X,Y] = np.mgrid[-2:2:512j,-2:2:512j] #print X V=gau(X,Y) b=np.vstack((V[ii:,:],V[0:ii,:])) # меняем местами начало и конец b=np.hstack((b[:,ii:],b[:,0:ii])) # меняем местами начало и конец mlab.surf(X[::4,::4], Y[::4,::4], V.real[::4,::4], extent=(-2,2,-2,2, 0,1)) mlab.surf(X[::4,::4], Y[::4,::4], V.imag[::4,::4], extent=(-2,2,-2,2, 2,3)) # View it. fv=ff.fft2(b) a=np.vstack((fv[ii:,:],fv[0:ii,:])) # меняем местами начало и конец a=np.hstack((a[:,ii:],a[:,0:ii])) # меняем местами начало и конец mlab.surf(X[::4,::4], Y[::4,::4], a.real[::4,::4], extent=(-2,2,-2,2, 4,5) ) mlab.surf(X[::4,::4], Y[::4,::4], a.imag[::4,::4], extent=(-2,2,-2,2, 6,7) ) mlab.show()