3D DFT を実装しようとしていますが、問題が発生しています。私がすべきことは、各方向に 1 つずつ、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 に拡張すると、結果が一致しなくなりました。誰が何が悪いのか知っていますか?