# How do you interpret FFT of an FFT of a discrete signal?

I am new to DSP & Radar domain. I have one question. Say I have a discrete time signal $x[n]$ and I take an FFT of it say the output is $X[k]$. The result what i get is frequencies present in $x[n]$.

Now what will happen if I take fft on $X[k]$ ? How would the spectrum look and what would you interpret from it?

• You probably know the IDFT (let's talk about DFT instead of FFT. FFT is just a method of calculating the DFT); now, compare the DFT and IDFT formula. Done! – Marcus Müller Apr 12 '17 at 9:09

Essentially, what you do is performing the DFT twice. Performing DFT twice amounts to time-reversing the signal:

N = 16; sN= np.sqrt(N)
x = np.random.randn(N)

X = np.fft.fft(x) / sN

x2 = np.fft.fft(X) / sN

plt.plot(x.real)
plt.plot(x2.real)


blue is original signal, green is two-times DFT. As you can see, the signals are time-reversed in the sense of $y[n]=x[-n \mod N]=x[N-n], n=0...N-1$. (y is green, x is blue). Here, I used the unitary version of the DFT, to keep the signals in the same scale. Otherwise, with the "normal" definition of DFT, the green signal would be scaled by 16.

Maximilian Matthé's answer has all the necessary information, viz., $$y[n]=x[-n \mod N]=x[N-n], ~ n=0, \ldots, N-1.$$ This corresponds to the continuous-time result which says that taking the Fourier Transform of $x(t)$ twice gives us $x(-t)$ -- the time-reversal of $x(t)$ -- a result that I used to illustrate in the "good old days" when presentations used viewgraphs by taking a viewgraph showing $x(t)$ off the projector, flipping it over, and putting it back on the projector while saying "This is what $x(-t)$ looks like". But this brings up a subtle difference between the continuous-time case and the discrete-time case, namely, that if we look at the DFT as a linear transformation mapping a vector $\mathbf x$ to a vector $\mathbf X$:

\begin{align}\operatorname{DFT}(\mathbf x) &= \mathbf X\\ &\text{i.e.}\\ \operatorname{DFT}\bigr(\left(x[0], x[1], \cdots, x[N-1]\right)\bigr) &= \left(X[0], X[1], \cdots, X[N-1]\right),\end{align} then $$\operatorname{DFT}\bigr(\operatorname{DFT} \big(\left(x[0], x[1], \cdots, x[N-1]\right)\big) \bigr) = \left(x[0], x[N-1], x[N-2] \cdots, x[2], x[1]\right)$$ and not $\left(x[N-1], x[N-2] \cdots, x[2], x[1], x[0]\right)$ which is what one would get by writing the entries of $\mathbf x$ in reverse order. Just as well, because flipping over a viewgraph on which is written $\left(x[0], x[1], \cdots, x[N-1]\right)$ results in an unreadable mess that is also wrong to boot!

The $0$-th bin is a fixed point of the transformation $\mathbf x \to \operatorname{DFT}\bigr(\operatorname{DFT} \big(\mathbf x\big)\bigr)$; it has the same value after taking the DFT of the DFT of $\mathbf x$. When $N$ is an even number, $N/2$ is also a fixed point of the transformation, and has the same value after taking the DFT twice.

• Good that you point out this special property that time-reversal in discrete is not just reading the values backwards. This took me some time to understand in my undergraduate times :-) – Maximilian Matthé Apr 13 '17 at 17:22