In [ ]:
%matplotlib inline

Fast Fourier Transform snippets

Documentation

Import directives


In [ ]:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

Make data


In [ ]:
pattern = np.zeros((4, 4))
pattern[1:3,1:3] = 1

In [ ]:
pattern

In [ ]:
signal = np.tile(pattern, (2, 2))

In [ ]:
fig = plt.figure(figsize=(16.0, 10.0))
ax = fig.add_subplot(111)
ax.imshow(signal, interpolation='nearest', cmap=cm.gray)

Fourier transform with Numpy

Do the fourier transform


In [ ]:
transformed_signal = np.fft.fft2(signal)
#transformed_signal

In [ ]:
fig = plt.figure(figsize=(16.0, 10.0))
ax = fig.add_subplot(111)
ax.imshow(abs(transformed_signal), interpolation='nearest', cmap=cm.gray)

Filter


In [ ]:
max_value = np.max(abs(transformed_signal))
filtered_transformed_signal = transformed_signal * (abs(transformed_signal) > max_value*0.5)

In [ ]:
#filtered_transformed_signal[6, 6] = 0
#filtered_transformed_signal[2, 2] = 0
#filtered_transformed_signal[2, 6] = 0
#filtered_transformed_signal[6, 2] = 0
#filtered_transformed_signal[1, 6] = 0
#filtered_transformed_signal[6, 1] = 0
#filtered_transformed_signal[1, 2] = 0
#filtered_transformed_signal[2, 1] = 0

#filtered_transformed_signal

fig = plt.figure(figsize=(16.0, 10.0))
ax = fig.add_subplot(111)
ax.imshow(abs(filtered_transformed_signal), interpolation='nearest', cmap=cm.gray)

Do the reverse transform


In [ ]:
filtered_signal = np.fft.ifft2(filtered_transformed_signal)
#filtered_signal

In [ ]:
fig = plt.figure(figsize=(16.0, 10.0))
ax = fig.add_subplot(111)
ax.imshow(abs(filtered_signal), interpolation='nearest', cmap=cm.gray)

In [ ]:
#shifted_filtered_signal = np.fft.ifftshift(transformed_signal)
#shifted_filtered_signal

In [ ]:
#shifted_transformed_signal = np.fft.fftshift(transformed_signal)
#shifted_transformed_signal