Двухмерное преобразование Фурье

Преобразование Фурье задается формулой: При выполнении преобразования симметричный квадрат от \(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()

Выполнить описанный пример