The frequency domain of mind (a mind, it must be stressed, is an unextended, massless, immaterial singularity) can produce an extended, spacetime domain of matter via ontological Fourier mathematics, and the two domains interact via inverse and forward Fourier transforms.~ Dr. Cody Newman, The Ontological Self: The Ontological Mathematics of Consciousness
I am Optimus Transformer Ruler Of The AutoCorrelation Bots
First i trust everyone is safe. i haven’t written technical blog in a while so figured i would write a Snake_Byte on one of my favorite equations The Fourier Transform:
More specifically we will be dealing with the Fast Fourier Transform which is an implementation of The Discrete Fourier Transform. The Fourier Transform operates on continuous signals and while i do believe we will have analog computing devices (again) in the future we have to operate on 0’s and 1’s at this juncture thus we have a discrete version thereof. The discrete version:
The Discrete Fourier Transform (DFT) is a mathematical operation. The Fast Fourier Transform (FFT) is an efficient algorithm for the evaluation of that operation (actually, a family of such algorithms). However, it is easy to get these two confused. Often, one may see a phrase like “take the FFT of this sequence”, which really means to take the DFT of that sequence using the FFT algorithm to do it efficiently.
The Fourier sequence is a kernel operation for any number of transforms where the kernel is matched to the signal if possible. The Fourier Transform is a series of and which makes it really useful for audio and radar analysis.
For the FFT it only takes
for the sequence computation and as one would imagine this is a substantial gain. The most commonly used FFT algorithm is the Cooley-Tukey algorithm, which was named after J. W. Cooley and John Tukey. It’s a divide and conquer algorithm for the machine calculation of complex Fourier series. It breaks the DFT into smaller DFTs. Other FFT algorithms include the Rader’s algorithm, Winograd Fourier transform algorithm, Chirp Z-transform algorithm, etc. The only rub comes as a function of the delay throughput.
There have been amazing text books written on this subject and i will list them at the end of the blarg[1,2,3]
So lets get on with some code. First we do the usual houskeeping on
import libraries as well as doing some majik for inline display if you are using
JupyterNotebooks. Of note
ffpack which is a package of Fortran subroutines for the fast Fourier transform. It includes complex, real, sine, cosine, and quarter-wave transforms. It was developed by Paul Swarztrauber of the National Center for Atmospheric Research, and is included in the general-purpose mathematical library SLATEC.
# House keeping libraries imports and inline plots: import numpy as np from scipy import fftpack %matplotlib inline import matplotlib.pyplot as pl
We now set up some signals where we create a sinusoid with a sample rate. We use
linspace to set up the amplitude and signal length.
#frequency in cycles per second or Hertz #this is equivalent to concert A Frequency = 20 # Sampling rate or the number of measurements per second # This is the rate of digital audio Sampling_Frequency = 100 # set up the signal space: time = np.linspace(0,2,2 * Sampling_Frequency, endpoint = False) signal = np.sin(Frequency * 2 * np.pi * time)
Next we plot the sinusoid under consideration:
# plot the signal: fif, ax = plt.subplots() ax.plot(time, signal) ax.set_xlabel('Time [seconds]') ax.set_ylabel('Signal Amplitude')
Next we apply the Fast Fourier Transform and transform into the frequency domain:
X_Hat = fftpack.fft(signal) Frequency_Component = fftpack.fftfreq(len(signal)) * Sampling_Frequency
We now plot the transformed sinusoid depicting the frequencies we generated:
# plot frequency components of the signal: fig, ax = plt.subplots() ax.stem(Frequency_Component, np.abs(X_Hat)) # absolute value of spectrum ax.set_xlabel ('Frequency in Hertz [HZ] Of Transformed Signal') ax.set_ylabel ('Frequency Domain (Spectrum) Magnitude') ax.set_xlim(-Sampling_Frequency / 2, Sampling_Frequency / 2) ax.set_ylim(-5,110)
To note you will see two frequency components, this is because there are positive and negative (real and imaginary) components to the transform which is what we see using the stem plots as expected. This is because the kernel as mentioned before is both and .
So something really cool happens when using the FFT. It is called the convolution theorem as well as Dual Domain Theory. Convolution in the time domain yields multiplication in the frequency domain. Mathematically, the convolution theorem states that under suitable conditions the Fourier transform of a convolution of two functions (or signals) is the poin-twise (Hadamard multiplication) product of their Fourier transforms. More generally, convolution in one domain (e.g., time domain) equals point-wise multiplication in the other domain (e.g., frequency domain).
So there you have it. A little taster on the powerful Fourier Transform.
#iwishyouwater <- Cloudbreak this past year
Muzak To Blarg by: Voyager Essential Max Ricther. Phenomenal. November is truly staggering.
 The Fourier Transform and Its Applications by Dr Ronald N Bracewell. i had the honor of taking the actual class at Stanford University from Professor Bracewell.
 The Fourier Transform and Its Applications by E. Roan Brigham. Graet book on butterfly and overlap-add derivations thereof.
 Adaptive Digital Signal Processing by Dr. Claude Lindquist. A phenomenal book on frequency domain signal processing and kernel analysis. A book ahead of its time. Professor Lindquist was a mentor and had a direct effect and affect on my career and the way i approach information theory.