When you compare the 2d FFT to the 3d FFT, you must view slices through the 3d FFT that correspond to the plane of the 2d FFT. You will know you have got the right slice orientation if the dimensions of the slice through the 3d FFT match the dimensions of the 2d FFT. You must also analyze many slices of the 3d FFT to see which slices, if any, look like the 2d FFT.
I understand this stuff better when I analyze simulated data. With only 7x5 spatial points, you are extremely limited in your ability to identify spatial waves, travelling or otherwise. Therefore I use 100 time points and 24x20 spatial points in the three examples below. Examples 1 and 2 show spatial waves that do not travel. Example 3 shows a travelling wave.
t=0:(nt-1); x=0:(nx-1); y=0:(ny-1);
Example 1: Oscillation along the x-direction only, with spatial frequency fx=1/8:
a=cos(2*pi*ft1*T+2*pi*fx1*X+2*pi*fy1*Y);
A=abs(fftshift(fftn(a)));
The plots of a(time and space) and A (3d FFT of a) are below. Since a and A are 3D arrays, we must plot slices through them. In this example, a(t,x,y) does not change with time. The top panel in the figure below shows a(x,y) at t=0. If we chose a later time, it would look exactly the same.
The bottom left panel shows abs(A(fx,fy)) at ft=0. Remember that the temporal frequency of the oscillation is 0 in this example. The plot has spikes at fx,fy=-1/8, 0 and at fx,fy=+1/8, 0.
The bottom right panel shows abs(A(fx,fy)) at ft=0.04 Hz. There is no power in the 3d signal at this temporal frequency. Therefore abs(A)=0 at all spatial frequencies, for this slice.
Example 2: Oscillation along the x- and y-direction, with spatial frequencies fx=1/8, fy=1/5. The signal is the same at all times, i.e. ft=0:
a=cos(2*pi*ft1*T+2*pi*fx1*X+2*pi*fy1*Y);
A=abs(fftshift(fftn(a)));
The plots of a(time and space) and A (3d FFT of a) are below. Since a and A are 3D arrays, we can only plot slices through them. In this example, a(t,x,y) does not change with time. The top panel in the figure below shows a(x,y) at t=0. If we chose a later time, it would look exactly the same. We rotated the view to look down on the surface.
The bottom left panel shows abs(A(fx,fy)) at ft=0. Remember that the temporal frequency of the oscillation is 0 in this example. The plot has spikes at fx,fy=-1/8,-1/5 and at fx,fy=+1/8,+1/5. We rotated the view to look down on the surface.
The bottom right panel shows abs(A(fx,fy)) at ft=0.04 Hz. There is no power in the 3d signal at this temporal frequency. Therefore abs(A)=0 at all spatial frequencies, for this slice.
Example 3: Travelling wave, with spatial frequencies fx1=1/8, fy1=1/5 (same as example 2), and temporal frequency ft1=0.1 Hz.
ft1=0.1; fx1=1/8; fy1=1/5;
a=cos(2*pi*ft1*T+2*pi*fx1*X+2*pi*fy1*Y);
A=abs(fftshift(fftn(a)));
The figure shows plots of a(t,x,y) at three times (top row), and it shows plots of A (3d FFT of a) at four frequencies (bottom row). In some cases, the view is rotated to look down on the surface.
The top row shows a(x,y) at t=0, t=1, t=2. The plots show that the wave is travelling down and to the left. The direction of travel in the x,y plane is given by the vector -(fx1,fy1). The speed is proportional to ft1.
The bottom row shows abs(A(fx,fy)) at ft=0 Hz, ft=+0.1 Hz, ft=-0.1 Hz, and ft=0.2 Hz. Note the differnt vertical axis scales in the four plots. At f=0 Hz and f=0.2 Hz, there is no power in the 3d signal, at any of the spatial frequencies. At f=+-0.1 Hz, there IS power in the signal, at the expected spatial frequencies: fx=+-1/8, fy=+-1/5.
The scripts for the three examples are attached.