Enquanto que a Transformada de Fourier de Tempo Discreta transforma um sinal do domínio de tempo para o domínio de frequência, a Transformada Inversa de Fourier de Tempo Discreta transforma a representação do sinal de volta para o domínio de tempo.
A biblioteca NumPy possui uma função ifft que executa a transformação inversa.
O exemplo que vamos ver utiliza uma onda senoidal com múltiplas frequências: 1 Hertz, 2 Hertz e 4 Hertz.
Começaremos importando as bibliotecas necessárias:
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
Definimos o período de tempo:
t = np.arange(0, 10, 0.01)
print(t[1:15])
[0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14]
Criamos uma onda senoidal com múltiplas frequências (1 Hz, 2 Hz e 4 Hz):
a = np.sin(2*np.pi*t) + np.sin(2*2*np.pi*t) + np.sin(4*2*np.pi*t)
Plotamos a onda senoidal original:
plt.figure(figsize=(15,5))
plt.plot(t, a)
plt.title("Gráfico da onda senoidal")
plt.xlabel('Tempo')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()
Executamos a transformada de Fourier no sinal:
tx = np.fft.fft(a)
Plotamos a onda senoidal utilizando a transformada Fourier:
plt.figure(figsize=(15,5))
plt.plot(t, tx)
plt.title("Gráfico da onda senoidal utilizando transformada de Fourier")
plt.xlabel('Frequência')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()
Executamos a transformada inversa de Fourier no sinal para retornar ao domínio de tempo:
itx = np.fft.ifft(tx);
Plotamos a onda senoidal original utilizando a transformada inversa de Fourier:
plt.figure(figsize=(15,5))
plt.plot(t, itx)
plt.title("Gráfico da onda senoidal utilizando transformada inversa de Fourier")
plt.xlabel('Tempo')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()