Let us consider a 2D discrete fast Fourier transform of a separable function:

```
using FFTW
xs = collect(0.0:0.1:0.9)
ys = xs
zs = cos.(xs).^2*sin.(ys')
fzs = fft(zs)
```

The result of 2D DFF transform of `zs`

is

On the other hand, since the function is separable, we can compute 2D Fourier transform as a product of two 1D Fourier transforms:

```
fzs2 = fft(cos.(xs).^2)*fft(sin.(ys))'
```

This gives us

As we see, the two results do not exactly coincide. However, if we permute the columns of `fzs2`

, we actually obtain `fzs`

: we need to permute columns 2 and 10, 3 and 9, etc. If one does fft shift, it corresponds to exchanging columns corresponding to ky and -ky.

**Can anyone explain why this happens?**