Lecture notes from the Fourier Transform brown bag talk:
————— 5 Feb 2018 —————
Well, it was probably a blur, but we got through a few good ideas. Got this from Max, who organizes the brown-bag lecture series. The video he links is, indeed, excellent. Thanks, Max!
Dr. Liner,
Thanks again for doing Brown Bag! Sorry it cut short, I had forgotten there was a a lab in their at 1:30 and didn't inform you.
Also, if you have time you should check out this introduction to Fourier Transforms: https://www.youtube.com/watch?v=spUNpyF58BY . It has a great intuitive visualization, and may be useful for sending to students who are learning FTs!
Best,
Max
————— 1 Feb 2018 —————
I'll be giving an improv brown-bag lecture next Monday on campus, here is the flyer. Should be fun!
Cartoon credit
Fig 1. FFT of 50 Hz sine wave sampled at 1 millisecond (0.001 sec). Lower plot is the Fourier Transform amplitude spectrum.
|
Fig 2. FFT of 50 Hz square wave showing harmonics. The harmonics arise because the Fourier Transform decomposes the signal into sine and cosine waves that are not a natural fit for square waves. To represent the square wave no singe frequency will suffice, it takes a doubly periodic family of sin-cos waves: each sin-cos is periodic in itself and the harmonics are periodic multiples. In the case shown, the nth harmonic (fn) is related to the fundamental (f0) by the rule: fn = f0*(2n+1) where n=0,1,2,... Consequently, it is better practice to describe such signals as 50 cycles per second (cps) and reserve the term Hertz (Hz) for smooth signals. In passing, I note that harmonics can also arise from smooth signals if there is amplitude asymetry present, indicating nonlinear processes are at work. For discussion of this case, see Chapter 2 of my DISC book available from SEG or Amazon.
|
---------------------
Python FFT code, most of it is for pretty plotting.
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack
from scipy import signal
# Number of sample points
nt = 1000
# sample spacing (seconds)
dt = 0.001
# make the time vector
t = np.linspace(0.0, nt*dt, nt)
# calculate sine function at each time point
y1 = np.sin(50.0 * 2.0*np.pi*t)
# do the FFT
yf = scipy.fftpack.fft(y1)
# make the frequency vector from zero to Nyquist
xf = np.linspace(0.0, 1.0/(2.0*dt), nt/2)
# plot the sine wave and its Fourier amplitude spectrum
plt.subplot(2,1,1)
plt.plot(t,y1)
plt.subplot(2,1,2)
plt.plot(xf, 2.0/nt * np.abs(yf[0:nt/2]))
plt.grid()
plt.ylim(0,1.5)
plt.title('Fourier Transform of 50 Hz Sine Wave')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Fourier Amplitude')
plt.tight_layout()
plt.show()
# calculate the square wave function at each time point
y2 = signal.square(2 * np.pi * 50 * t)
yf = scipy.fftpack.fft(y2)
# plot the square wave and its Fourier amplitude spectrum
plt.subplot(2,1,1)
plt.plot(t,y2)
plt.subplot(2,1,2)
plt.plot(xf, 2.0/nt * np.abs(yf[0:nt/2]))
plt.grid()
plt.ylim(0,1.5)
plt.title('Fourier Transform of 50 Hz Square Wave')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Fourier Amplitude')
plt.tight_layout()
plt.show()