Я пытаюсь реализовать 3D DFT, но у меня возникли проблемы.То, что я считаю, что я должен сделать, это просто сделать 3 последовательных 1D DFT, по одному в каждом направлении.Предполагая, что 1D DFT верен, вы видите, что не так с этим кодом:
def dft3d(self, real3d, img3d, nx, ny, nz, dir):
#Transform depth
for i in range(nx):
for j in range(ny):
real = numpy.zeros(nz)
img = numpy.zeros(nz)
for k in range(nz):
real[k] = real3d[i][j][k]
img[k] = img3d[i][j][k]
self.dft(real, img, nz, 1) #This was indented too much. It should work now.
for k in range(nz):
real3d[i][j][k] = real[k]
img3d[i][j][k] = img[k]
#Transform cols
for k in range(nz):
for i in range(nx):
real = numpy.zeros(ny)
img = numpy.zeros(ny)
for j in range(ny):
real[j] = real3d[i][j][k]
img[j] = img3d[i][j][k]
self.dft(real, img, ny, 1)
for j in range(ny):
real3d[i][j][k] = real[j]
img3d[i][j][k] = img[j]
#Transform rows
for j in range(ny):
for k in range(nz):
real = numpy.zeros(nx)
img = numpy.zeros(nx)
for i in range(nx):
real[i] = real3d[i][j][k]
img[i] = img3d[i][j][k]
self.dft(real, img, nx, 1)
for i in range(nx):
real3d[i][j][k] = real[i]
img3d[i][j][k] = img[i]
Я знаю, что есть встроенные версии этого в python, но я не могу их использовать.Я просто тестирую свой алгоритм в python, чтобы я мог сравнить результаты моего алгоритма и встроенных.Насколько я могу судить, он отлично работал как для 1D, так и для 2D преобразований, но как только я расширил его до 3D, результаты больше не совпадают.Кто-нибудь знает, что не так?