Итак, у меня есть матрица со значениями 72x72, каждое из которых соответствует некоторой энергии на решетке tri angular с 72x72 узлами. Я пытаюсь преобразовать значения Фурье, но я не понимаю, как это сделать с np.fft.fftn
.
Чтобы проиллюстрировать мою проблему, я написал следующий базовый код c с некоторыми случайными значениями. Tri angular дает координаты решетки x, y.
import numpy as np
import matplotlib.pyplot as plt
def triangular(nsize):
x=0
y=0
X=np.zeros((nsize,nsize))
Y=np.zeros((nsize,nsize))
for i in range(nsize):
for j in range(nsize):
X[i,j]+=1/2*j+i
Y[i,j]+=np.sqrt(3)/2*j
return(X,Y)
xx = triangular(72)[0]
yy = triangular(72)[1]
plt.figure()
plt.pcolormesh(xx, yy, np.reshape(np.random.rand(72**2),(72,72)))
Я не использую случайные данные, но хотел не усложнять пример. Фактически, я каждый раз вижу один и тот же график, когда я сейчас использую следующее БПФ:
matrix = []
matrix.append(triangular(72)[0])
matrix.append(triangular(72)[1])
matrix.append(np.reshape(np.random.rand(72**2),(72,72)))
spectrum_3d = np.fft.fftn(matrix) # Fourrier transform along x, y, energy
kx = np.linspace(-4*np.pi/3,4*np.pi/3,72) #this is the range I want to plot
ky = np.linspace(-2*np.pi/np.sqrt(3),2*np.pi/np.sqrt(3),72)
Ky, Kx = np.meshgrid(ky, kx, indexing='ij') #making a grid
plt.figure(figsize=(11,9))
psd = plt.pcolormesh(Kx, Ky, abs(spectrum_3d[2])**2)
cbar = plt.colorbar(psd)
plt.xlabel('kx')
plt.ylabel('ky')
Мой результат выглядит всегда одинаково, и я не надену не знаю, что пошло не так. Также для моих коррелированных значений, которые имеют большую симметрию, график выглядит одинаково.