We will create a signal, transform it, and then shift the signal. Shift the frequencies with the following steps:
30
points:x = np.linspace(0, 2 * np.pi, 30) wave = np.cos(x)
fft()
function:transformed = np.fft.fft(wave)
fftshift()
function:shifted = np.fft.fftshift(transformed)
ifftshift()
function. This should undo the shift. Check with the following code snippet:print(np.all((np.fft.ifftshift(shifted) - transformed) < 10 ** -9))
The result appears as follows:
True
plt.plot(transformed, lw=2, label="Transformed") plt.plot(shifted, '--', lw=3, label="Shifted") plt.title('Shifted and transformed cosine wave') plt.xlabel('Frequency') plt.ylabel('Amplitude') plt.grid() plt.legend(loc='best') plt.show()
The following diagram shows the effect of the shift and the FFT:
We applied the fftshift()
function to a cosine wave. After applying the ifftshift()
function, we got our signal back (see fouriershift.py
):
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi, 30) wave = np.cos(x) transformed = np.fft.fft(wave) shifted = np.fft.fftshift(transformed) print(np.all(np.abs(np.fft.ifftshift(shifted) - transformed) < 10 ** -9)) plt.plot(transformed, lw=2, label="Transformed") plt.plot(shifted, '--', lw=3, label="Shifted") plt.title('Shifted and transformed cosine wave') plt.xlabel('Frequency') plt.ylabel('Amplitude') plt.grid() plt.legend(loc='best') plt.show()