Question

Say I have this matrix in memory and I want to calculate the 3D FFT

   T =

        0    1    2    3
        4    5    6    7
        8    9   10   11
       12   13   14   15
       16   17   18   19
       20   21   22   23
       24   25   26   27
       28   29   30   31
       32   33   34   35
       36   37   38   39
       40   41   42   43
       44   45   46   47
       44   45   46   47
       52   53   54   55
       56   57   58   59
       60   61   62   63

real(fft2(T))
ans =

   2000    -32    -32    -32
   -128      0      0      0
   -112      0      0      0
   -128      0      0      0
   -144      0      0      0
   -128      0      0      0
   -112      0      0      0
   -128      0      0      0
   -144      0      0      0
   -128      0      0      0
   -112      0      0      0
   -128      0      0      0
   -144      0      0      0
   -128      0      0      0
   -112      0      0      0
   -128      0      0      0

real(fftn(T))
ans =

   2000    -32    -32    -32
   -128      0      0      0
   -112      0      0      0
   -128      0      0      0
   -144      0      0      0
   -128      0      0      0
   -112      0      0      0
   -128      0      0      0
   -144      0      0      0
   -128      0      0      0
   -112      0      0      0
   -128      0      0      0
   -144      0      0      0
   -128      0      0      0
   -112      0      0      0
   -128      0      0      0

Why am I getting the same result? How 3D FFTs can be done in Matlab/Octave?

Was it helpful?

Solution

A 3D-FFT should be applied to a 3D-array. If you apply the 3D-FFT to a 2D-array you get the same result as a 2D-FFT, because there is no third dimension in the array.

Think about it this way: an N-dimensional FFT is just N 1-dimensional FFT's, one along each dimension. If there is no third dimension in the array, the FFT along that dimension does nothing.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top