I am trying to implement an inverse FFT using the forward FFT. For clarity:
Let S[t] be a signal in time, and S[w] the transformed signal. As per this site, it seems one can reverse S[w], use the forward FFT routine, then reverse the resulting signal again and this should give S[t]. I won't go into why should it work but it's all in the link provided.
I attempted to try this method, and it seems to recreate the signal when I use a high sample rate. However, it seems that even if I do not go over the Nyquist frequency, I encounter some weird effect. Here is my code in NumPy:
# Generate a signal of s cosine with 200 [Hz]
f = 200
Fs = 10
t = np.linspace(-10,10,Fs*20)
s = cos(2*np.pi*f*t)
# Take fft
u = np.fft.fft(s)
# Reverse in time
u = u[::-1]
# Transform again
u_t = np.fft.fft(u)
# Reverse and normalize
s_new = np.divide(u_t[::-1],s.shape[-1])
# Finally slice for easier viewing
plt.plot(t[1:100],s_new[1:100])
plt.plot(t[1:100],s[1:100])
This code yields the following graph:
I am a little confused, the theory looked sound and I can't think what I did wrong here.
Note: I tried calling np.fft.fft
and then np.fft.ifft
and the reconstruction goes as planned. Therefore I believe this problem is not due to aliasing.
Edit: I made way by simply taking the complex conjugation instead of reversing (using np.conj()
where I reverse). This solves the problem, but I still do not understand why reversing in time does not accomplish a conjugation, so I'd love someone to explain it to me. I leave the modified code in case it helps someone else:
# Generate a signal
f = 200
Fs = 10
t = np.linspace(-10,10,Fs*20)
s = cos(2*np.pi*f*t)
# Take fft
u = np.fft.fft(s)
# Conjugate
u = np.conj(u)
# Transform again
u_t = np.fft.fft(u)
# conjugate and normalize
s_new = np.divide(np.conj(u_t),s.shape[-1])
# Finally slice for easier viewing
plt.plot(t[1:100],s_new[1:100])
plt.plot(t[1:100],s[1:100])
f=200;Fs=10
2) What is the purpose of the time reversal in your code? Try to spot the differences in the forward and inverse transforms here. Something is indeed flipped between the forward and inverse transforms but that is certainly not the time order of the samples (?). $\endgroup$