Discrete and Fast Fourier Transformation
We have seen in the two above examples that for functions that are defined analytically the Fourier series can be in principle calculated exactly by analytic integration. For many practically interesting functions such integration cannot be performed explicitly. Moreover, functions are in practice often represented by discretely sampled values. For example, laboratory measurements produce discrete signals. Computers can also evaluate functions for a discrete set of numbers etc. In such cases we wish to compute the trigonometric polynomial approximation numerically.
Example: Audio data
Download trumpet.txt
Download piano.txt
import IPython.display as disp
import urllib.request
# Download trumpet.txt from the server
urllib.request.urlretrieve("http://codinginchemistry.com/trumpet.txt", "trumpet.txt")
# Download piano.txt from the server
urllib.request.urlretrieve("http://codinginchemistry.com/piano.txt", "piano.txt")
data_trumpet = np.loadtxt('trumpet.txt')
data_piano = np.loadtxt('piano.txt')
sampling_rate = 44100
plt.plot(data_trumpet[:3000])
plt.plot(data_piano[:3000])
display(disp.Audio(data_trumpet, rate=sampling_rate))
display(disp.Audio(data_piano, rate=sampling_rate))