Skip to content

Instantly share code, notes, and snippets.

@stellaconyer
Last active December 28, 2015 14:58
Show Gist options
  • Save stellaconyer/7518145 to your computer and use it in GitHub Desktop.
Save stellaconyer/7518145 to your computer and use it in GitHub Desktop.
Ugh FFT
{
"metadata": {
"name": "ipython_fft_notebook"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": "Working with Numpy FFT Results: Scaling and Folding"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Imports\n-------"
},
{
"cell_type": "code",
"collapsed": false,
"input": "import numpy as np\nimport matplotlib.pyplot as plt",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Create a Test Signal\n--------------------\n$f_s$ is the sampling frequency, while $f$ is a base frequency for the signal content. We create a signal that contains components at a couple of multiples of this base frequency. Note the amplitudes here since we will be trying to extract those correctly from the FFT later."
},
{
"cell_type": "code",
"collapsed": false,
"input": "f_s = 20.0 # Hz\nf = 1.0 # Hz\ntime = np.arange(0.0, 20.0)\nx = [0.24590220324499532,0.24590220324499532,0.24590220324499532,0.24590220324499532,0.24590220324499532,-0.07442586160611826,-0.1323241019198671,-0.08916969105452299,-0.026862233163509518,-0.15631467037089167,0.6693070089813321,4.287531481476128,3.895478621537983,-0.37101299451887604,-2.762409826387465,-2.3222388322293757,-0.5376023906666785,-1.3985013543009757,-4.691760809159279,0.3508775671260431]",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": "plt.plot(time, x)\nplt.xlabel(\"Time (sec)\")\nplt.ylabel(\"x\")",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 21,
"text": "<matplotlib.text.Text at 0x109e400d0>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nKQhEROLc/wOkwqNCjoGHNQAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x109e19490>"
}
],
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Compute the FFT\n---------------\nThe FFT and a matching vector of frequencies"
},
{
"cell_type": "code",
"collapsed": false,
"input": "fft_x = np.fft.fft(x)\nn = len(fft_x)\nfreq = np.fft.fftfreq(n, 1/f_s)\nprint n\nprint freq\n",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "20\n[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -10. -9. -8. -7. -6.\n -5. -4. -3. -2. -1.]\n"
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": "plt.plot(np.abs(fft_x))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 23,
"text": "[<matplotlib.lines.Line2D at 0x109e21cd0>]"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x109e98450>"
}
],
"prompt_number": 23
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Swap Half Spaces\n----------------\nNote that frequencies in the FFT and the freq vector go from zero to some larger positive number then from a large negative number back toward zero. We can swap that so that the DC component is in the center of the vector while maintaining a two-sided spectrum."
},
{
"cell_type": "code",
"collapsed": false,
"input": "fft_x_shifted = np.fft.fftshift(fft_x)\nfreq_shifted = np.fft.fftshift(freq)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": "plt.plot(freq_shifted, np.abs(fft_x_shifted))\nplt.xlabel(\"Frequency (Hz)\")",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 25,
"text": "<matplotlib.text.Text at 0x109d6a050>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nYv8PuiWnXf4Bi6EAAAAASUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x109e20950>"
}
],
"prompt_number": 25
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Fold Negative Frequencies and Scale\n------------------------------\nIt's actually more common to look at just the first half of the unshifted FFT and frequency vectors and fold all the amplitude information into the positive frequencies. Furthermore, to get ampltude right, we must normalize by the length of the original FFT. Note the factor of $2/n$ in the following which accomplishes both the folding and scaling."
},
{
"cell_type": "code",
"collapsed": false,
"input": "half_n = np.ceil(n/2.0)\nfft_x_half = (2.0 / n) * fft_x[:half_n]\nfreq_half = freq[:half_n]",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": "plt.plot(freq_half, np.abs(fft_x_half))\nplt.xlabel(\"Frequency (Hz)\")\nplt.ylabel(\"Amplitude\")",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": "<matplotlib.text.Text at 0x109f17ad0>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x109f347d0>"
}
],
"prompt_number": 27
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now the spectrum contains spikes at the correct amplitudes at only positive frequencies, which are the only ones with physicality."
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment