{ "cells": [ { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import scipy\n", "\n", "# Graphing helper function\n", "def setup_graph(title='', x_label='', y_label='', fig_size=None):\n", " fig = plt.figure()\n", " if fig_size != None:\n", " fig.set_size_inches(fig_size[0], fig_size[1])\n", " ax = fig.add_subplot(111)\n", " ax.set_title(title)\n", " ax.set_xlabel(x_label)\n", " ax.set_ylabel(y_label)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sampling a test function\n", "\n", "Wave with:\n", "\n", "* Frequency of 1 Hz\n", "* Amplitude of 5\n", "\n", "We will sample:\n", "\n", "* At 10 samples per second\n", "* For 3 seconds\n", "* So a total of 30 samples" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sample_rate = 10 # samples per sec\n", "total_sampling_time = 3\n", "num_samples = sample_rate * total_sampling_time\n", "\n", "t = np.linspace(0, total_sampling_time, num_samples)\n", "\n", "# between x = 0 and x = 1, a complete revolution (2 pi) has been made, so this is\n", "# a 1 Hz signal with an amplitude of 5\n", "frequency_in_hz = 1\n", "wave_amplitude = 5\n", "f = lambda x: wave_amplitude * np.sin(frequency_in_hz * 2*np.pi*x)\n", " \n", "sampled_f = [f(i) for i in t]\n" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAAGJCAYAAABFF896AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xec1OXVPv7rsHSRJkU6iFgQEJFeF1hUELFATFRMYvlq\nTJEEoybxUfGJmthC1Gii8fmhhBWTICpd6rKo9C5ioyMKAovUBXb3/v1xdmTFLbPTzqdc79drX5Qd\nZi4zmZ0z9+fc5xbnHIiIiIiIKHYVrAMQEREREfkdi2oiIiIiojixqCYiIiIiihOLaiIiIiKiOLGo\nJiIiIiKKE4tqIiIiIqI4sagmIkoCEWkmIgdFRAwe+2ER+ZfB4/5dRB5I9eMSEXlBResARERBICJb\nANzmnJsPAM65HQBqGkZK+SEEzrm7Uv2YRERewZVqIiIiIqI4sagmIoqTiIwH0BzA1MKWj9+KSAsR\nKRCRCoW3WSAifxSR90XkkIi8IyJnicgEEflGRJaKSPMi93mBiMwWkX0islFEflDK47cUkazC+3kX\nQL3Tvj9MRD4Ukf0iMl9ELijyvS2FedcVZn9FRBqIyIzC+5stIrWK3P4/IvKliOQUPmbbIt8bJyL/\nW/j7fiKyQ0RGi8huEflCRH4a///aRETexKKaiChOzrkfA9gOYKhzrqZz7unIt0676Q8B3ASgMYBz\nASwG8H8A6gD4GMDDACAi1QHMBjABWiD/CMALRYvh07wOYHnhbR8F8JPIN0TkvMLv3w2gPoCZ0OK/\naPvfdQAGADgfwFWFt/ld4e3TCv9txAwArQE0ALAKQGYp/9OcDeDMwv/e2wv/G2qVcnsiIt9iUU1E\nlDhlbUoc55zb6pw7BC1cP3POLXDOFQD4L4BLCm83FMAW59x4p9YCmAzge6vVItIMQGcADznnTjrn\nFgGYWuQm1wOY5pyb75zLB/A0gGoAeha5zfPOub3OuS8BLAKwxDm3zjl3AsBbRXLBOfeqc+6oc+4k\ngP8FcLGInFnCf+8JAH90zuU752YCOAwt3ImIAocbFYmIUmd3kd8fK+bPNQp/3wJAdxHZX/hnga4Y\nFzfRozGAHOfcsSJ/tw1A0yLf3xb5hnPOicgOAE3Km6uwleVxACOgq+Ku8KsegEPFZNtX+IEh4miR\n/0YiokBhUU1ElBiJnLaxA0CWc+7yKG77JYA6IlKtSGHdHECkmN0FoN1p/6YZgJ0x5LoJ2h4ywDm3\nvbCVIwdlr9ATEQUe2z+IiBLjKwDnnPZ3sRab0wCcJyIjRaSiiFQSkc7F9VQ757YDWAHgkcLb9YYW\nvhH/AXCliPQvvK/fAsiF9nOXVw0AxwHkiMgZAP4Eg9F9RERexKKaiCgx/gzgwcIJG6ML/65owRl1\n8emcOwzgMugGxV2FX38GULmEf3IjgO4A9gF4EMBrRe7rUwAjAfwNwNcArgRwlXMur4RcpeUcD92Q\n+QWADwF8EO1/UxT3TUTka+Kc7c+4wsuHr0AvTxYAuNU5t9Q0FBERERFROXihp/pZADOccz8oHPFU\n3ToQEREREVF5mK5Ui0hNAKudc63NQhARERERxcm6p7oVgL2Fp3CtEpGXRaSacSYiIiIionKxLqor\nAugE4AXnXCfoDNPf2UYiIiIiIiof657qnQB2OOdWFP55EoD7T7+RiHDHOBERERGlhHOu3CNRTYtq\n59xuEdkhIucVjn0aCOCjEm6b2nCUMGPGjMGYMWOsY1AM+Nz5G58//+Jz5298/vxNJLYjBqxXqgHg\nbgCZIlIJwGYAtxjnISIiIiIqF/Oi2jm3FkAX6xxERERERLGy3qhIIZCenm4dgWLE587f+Pz5F587\nf+PzF07mJypGQ0ScH3ISERERkb+JSEwbFblSTUREREQUJxbVRERERERxYlFNRERERBQnFtVERERE\nRHFiUU1EREREFCcW1UREREREcWJRTUREREQUJxbVRERERERxYlFNRERERBQnFtVERERERHFiUU1E\nREREFCcW1UREREREcWJRTUREREQUJxbVRERERERxYlFNRERERBQnFtVERERERHFiUU1EREREFCcW\n1UREREREcWJRTUREREQUJxbVRERERERxYlFNRERERBQnFtVEFCpbtwKffGKdgoiIgoZFNRGFxrFj\nwJVXAr17A2vXWqchIqIgYVFNRKHxu98B7doBL74IXHEF8NFH1omICABycoBRo4CpU62TEMWuonUA\nIqJUmDMHmDxZV6jr1gWOHwcuuwxYsABo08Y6HVE4OQe88QZwzz1Ajx7AL34BZGQA1apZJyMqP65U\nE1Hg7d8P3HILMG6cFtQAMHIk8MgjwMCBwJYttvmIwmjTJr1i9Kc/AW++qV+dOwPPPmudjCg24pyz\nzlAmEXF+yFnUpk3AlCnApZcCnToBNWpYJyIKJ+eA668HmjYFxo79/vdffBF4+mlg4UKgWbPU5yMK\n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\nc0/ysicDi2qiBNqxQz+lr12rxXVpTpwAnn4a+MtfgPvvB37968T0YxORHhQxfLhOD4hmnvunn+os\n3OxsbSUhotjk5uqV20iRvXy5Tq+65JJTRXaXLrrJuLiJWVu26Pc3b/ZfCxaLaqIEe+AB/QHy6qsl\n3+a997Rvs2VLHdmV6hMZicJg3jxd8ZoypfQrQDw1kSi5DhzQ1qyiK9q5ud8tsrt0ARo21EPVatTQ\n8xj8hkU1UYIdPKgHwsyapavWRe3fD/zud8D06cCzz+pKWjJmWxORmjlT27JmzgQuvbT42zz8sL7J\nz5jB1yNRquzapQV2pMhesQI480zgm2+0paRRI+uE5ceimigJXnwRmDxZx3yJ6AaoiRO1P2z4cO25\nrlXLOiVROLzzjl4Zmj1bNyEWtWQJcM01wOrV/nwTJwoK54DPP9eFqZI+AHsdi2qiJDh5EmjfHhg7\nVmfo3nWXHvH68stAt27W6YjC5z//0X0L8+ad6pk+fFj7PJ94ArjuOtt8ROR/LKqJkuSdd7SYPnFC\nWz5GjeJGRCJLEyboa3HBAv2we8cd+gF43DjrZEQUBLEW1TxRkagMw4YB27bpr9yISGRv5EjdHJWR\nAfz2tzw1kYi8gSvVRETkSy+8oCcvZmfrGD0iokRg+wcREYXO118D9etbpyCiIGFRTUREREQUp1iL\n6grJCENEREREFCYsqomIiIiI4sSimoiIiIgoTiyqiYiIiIjixKKaiIiIiChOLKqJiIiIiOLEopqI\niIiIKE4sqomIiIiI4sSimoiIiIgoTiyqiYiIiIjixKKaiIiIiChOLKqJiIiIiOLEopqIiIiIKE4s\nqomIiIiI4sSimoiIiIgoTiyqiYiIiIjixKKaiIiIiChOLKqJiIiIiOLEopqIiIiIKE4sqomIiIiI\n4sSimoiIiIgoTqZFtYj8SkQ2ish6EfmzZRYiIiIioliZFdUikg7gKgDtnXPtATxtlYWSKysryzoC\nxYjPnb/x+fMvPnf+xucvnCxXqu8C8GfnXB4AOOf2GmahJOIPF//ic+dvfP78i8+dv/H5CyfLovo8\nAH1FZImILBCRzoZZiIiIiIhiVjGZdy4icwA0LPpXAByA/yl87DrOue4i0gXAfwCck8w8RERERETJ\nIM45mwcWmQHgCefcwsI/fw6gm3NuXzG3tQlJRERERKHjnJPy/pukrlSX4W0AAwAsFJHzAFQqrqAG\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "setup_graph(title='time domain', x_label='time (in seconds)', y_label='amplitude', fig_size=(12,6))\n", "_ = plt.plot(t, sampled_f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Take the fft" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "fft_output = np.fft.fft(sampled_f)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.5/site-packages/numpy/core/numeric.py:482: ComplexWarning: Casting complex values to real discards the imaginary part\n", " return array(a, dtype, copy=False, order=order)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtQAAAGJCAYAAACq1aREAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmUXHd95/33V619l1pWywsYjNnGxrGNcVgyQYQljpOx\ngQAJJieEJAxM4IEnkDksSbCcEA9wOE4ghFlYPIYTTIAnZksgdsY0DISAbbyBwXjG4GBQt9StxVqs\ntX/PH7fKXWr1Utute2/V+3VOHXVXVVf97FK3PvXp772/SCkhSZIkqT2Lil6AJEmSVGUGakmSJKkD\nBmpJkiSpAwZqSZIkqQMGakmSJKkDBmpJkiSpAwZqSZIkqQMGaknKUUT8OCIORsRDEbGv9ueWiDgz\nIqZqn9cvt0fE2xru93BEHGv42ru7vLZnR8RPyvp4klQVi4tegCT1uQT8akrpK41XRsSZtdvWpZN3\n2Povtfu8Evi9lNIv5rS2qK2hrI8nSZVgQy1J+Ys2b2vuwSMui4jvRsSuiLg5Ip7UcNtURJzV8Pm1\nEfFnEbES+EfgtBnN+ZUR8emI+GTtulsj4rx2H6/T/zZJqgIDtSQVq6NAHRFPAD4BvAE4BfgS8IWI\nqP8GctbGOKV0EPgV4GcppTUppbUppbHazZcBfwdsAK4HPhsRQx08niT1NQO1JOXvs7X2eFdE/H3D\n9QHsjIjdtdve1MZjvwz4Ykrp5pTSceC9wArgmQ3P0arbUko31B7vGmA58PQOHk+S+poz1JKUv8tn\nzlDXJGB4lhnqVpwGPPDIA6aUagcGnt7BYz5yYGHt8R6sPY8kaRY21JKUvzxnqH8GnDnjukcBD9Y+\nPgisbLitca55riD/qEcWFxHAGcBPO3g8SeprBmpJKk43xic+BfxqRDwnIhZHxB8Bh4Bv1m6/Hbgi\nIhZFxCXAsxu+dhwYjoi1Mx7zqRHxwtrc9B/WHu9bHTyeJPU1A7Uk5Wu+1rbjRjel9EPgt4APADuB\nXwX+Q0rpWO0u/y/ZQYa7gZcDNzR87b1kBx3eX5vhrrfNnwN+o/Y1rwBeVJunbvfxJKmvRWeje00+\nScQZwMeAEWAK+B8ppb+OiCuBVwM7and9e0rpy7kvSJI0q9rP5cellH676LVIUlX06qDEY8CbUkp3\nRMRq4LaIuKl22zUppWt6tA5JkiSpq3oSqGvnIh2rfbw/Ir7P9BHonoJJkiRJldWTkY8TnjDiMcAo\ncC7wZuB3gL3ArcCbU0p7e7ogSZIkqQM9PSixNu7xGeCNKaX9wAeBs1JK55M12I5+SJIkqVJ61lDX\ntsH9IvCllNL7Zrn9TOALKaXzZrnNc5tKkiSpJ1JKLY0k93KnxI8C9zSG6YjYUpuvBngx8N25vrjX\noynqnm3btrFt27ail6E2+NpVm69fdfnaVZuvX7Vl+1m1pieBOiKeRXYu07sj4nayc6++nWxzgPPJ\nTqX3Y+A1vViPJEmS1C29OsvHN4ChWW7ynNOSJEmqNHdKVO62bt1a9BLUJl+7avP1qy5fu2rz9Rs8\nPT9tXjsiIlVhnZIkSaq2iGj5oEQbakmSJKkDBmpJkiSpAwZqSZIkqQMGakmSJKkDBmpJkiSpAwZq\nSZIkqQMGakmSJKkDBmpJkiSpAwZqSZIkqQMGakmSJKkDBmpJkiSpAwZqSZIkqQMGakmSJKkDBmpJ\nkiSpAwZqSZIkqQMGakmSJKkDBmpJkiSpAwZqSZIkqQMGakmSJKkDBmpJkiSpAwZqSZIkqQMGakmS\nJKkDBmpJkiSpAwbqCnn72+H664tehSRJ6idPfSrs2lX0KqptcdELUPPuuQdWrCh6FZIkqV9MTcEd\nd8BPfgIbNxa9muqyoa6QsTGYmCh6FZIkqV/s2ZOF6rGxoldSbQbqChkbg8nJolchSZL6RT1XGKg7\nY6CuiJRsqCVJUnfVc4WBujMG6orYuxcOH7ahliRJ3WND3R0G6orYvh2WLjVQS5Kk7pmczPLF9u1F\nr6TaDNQVMTYGT36yIx+SJKl7JiayfGFD3RkDdUWMjcETnwgPPwxHjhS9GkmS1A8mJ+GccwzUnTJQ\nV8TYGJx6anaOSMc+JElSN0xMwLnnGqg7ZaCuiLEx2LIFhocN1JIkqTsmJ+Hss+HQoey34GqPgboi\n6g31pk3OUUuSpO6YmMiyxZYtMD5e9Gqqy0BdETbUkiSp2yYns2yxZYtjH50wUFdEPVDbUEuSpG5p\nbKgN1O0zUFeEDbUkSeqmlGyou8VAXQHHjsHu3dk7SBtqSZLUDQ89BMuXw7JlBupOGagrYMeO7N3j\n0JANtSRJ6o56Ow1ZoHa3xPYZqCugPu4BNtSSJKk76vPTYEPdKQN1BTQGahtqSZLUDTMbagN1+wzU\nFTAzUNtQS5KkTk1MGKi7xUBdAfVNXSD71YwNtSRJ6tTk5IkjH+Pj2Zk/1DoDdQU0NtTr18O+fdmZ\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "setup_graph(title='FFT output', x_label='FFT bins', y_label='amplitude', fig_size=(12,6))\n", "_ = plt.plot(fft_output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Why is it symmetric?\n", "\n", "* Because it is a complex-input fourier transform, and for real input, the 2nd half will always be a mirror image.\n", "* For real-valued input, the fft output is always symmetric.\n", "* Since we are only dealing with real input, let's just use a real-input version of the fft." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "rfft_output = np.fft.rfft(sampled_f)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.5/site-packages/numpy/core/numeric.py:482: ComplexWarning: Casting complex values to real discards the imaginary part\n", " return array(a, dtype, copy=False, order=order)\n" ] }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "setup_graph(title='rFFT output', x_label='frequency (in Hz)', y_label='amplitude', fig_size=(12,6))\n", "_ = plt.plot(rfft_output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Get the x-axis labels correct\n", "\n", "## We want the x-axis to represent frequency\n", "\n", "In our DFT equation $$G(\\frac{n}{N}) = \\sum_{k=0}^{N-1} g(k) e^{-i 2 \\pi k \\frac{n}{N} }$$\n", "\n", "* $G(\\frac{n}{N})$ means the DFT output for the frequency which goes through $\\frac{n}{N}$ cycles per sample.\n", "* And we take frequencies from 0 to (the total number of samples divided by 2)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Getting frequencies on x-axis right\n", "rfreqs = [(i*1.0/num_samples)*sample_rate for i in range(num_samples//2+1)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Frequencies range from 0 to the Nyquist Frequency (sample rate / 2)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0.0,\n", " 0.3333333333333333,\n", " 0.6666666666666666,\n", " 1.0,\n", " 1.3333333333333333,\n", " 1.6666666666666665,\n", " 2.0,\n", " 2.3333333333333335,\n", " 2.6666666666666665,\n", " 3.0,\n", " 3.333333333333333,\n", " 3.6666666666666665,\n", " 4.0,\n", " 4.333333333333334,\n", " 4.666666666666667,\n", " 5.0]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# So you can see, our frequencies go from 0 to 5Hz. 5 is half of the sample rate,\n", "# which is what it should be (Nyquist Frequency).\n", "rfreqs" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.5/site-packages/numpy/core/numeric.py:482: ComplexWarning: Casting complex values to real discards the imaginary part\n", " return array(a, dtype, copy=False, order=order)\n" ] }, { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "setup_graph(title='Corrected rFFT Output', x_label='frequency (in Hz)', y_label='amplitude', fig_size=(12,6))\n", "_ = plt.plot(rfreqs, rfft_output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting y-axis labels correct\n", "\n", "## We want the y-axis to represent magnitude\n", "\n", "We are actually getting negative values, and it looks like our amplitude is way larger than what it should be (which is 5).\n", "\n", "The magnitude of each component is:\n", "\n", "$$magnitude(i) = \\frac{\\sqrt{i.real^2 + i.imag^2}}{N}$$" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "rfft_mag = [np.sqrt(i.real**2 + i.imag**2)/len(rfft_output) for i in rfft_output]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "setup_graph(title='Corrected rFFT Output', x_label='frequency (in Hz)', y_label='magnitude', fig_size=(12,6))\n", "_ = plt.plot(rfreqs, rfft_mag)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Inverse FFT\n", "\n", "We can take the output of the FFT and perform an Inverse FFT to get back to our original wave (using the Inverse Real FFT - irfft)." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [], "source": [ "irfft_output = np.fft.irfft(rfft_output)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nFCcW1UREREREcWJRTUREREQUJxbVRERERERxYlFNRERERBQnFtVERERERHFiUU1EREREFCcW1URE\nREREcWJRTUREREQUJxbVRERERERxYlFNRERERBQnFtVERERERHFiUU1EREREFCcW1UREREREcTIt\nqkXkThFZLyJrReRPllmIiIiIiGJlVlSLSDqAKwB0cM51APCEVRZKrqysLOsIFCP+7PyNPz//4s/O\n3/jzCyfLleo7APzJOZcHAM65PYZZKIn4y8W/+LPzN/78/Is/O3/jzy+cLIvqcwH0E5ElIrJARLoY\nZiEiIiIiilnFZN65iMwB0KjolwA4AP9d+Nh1nXM9RKQrgH8DODuZeYiIiIiIkkGcczYPLDIDwKPO\nuYWF/70BQHfn3N5ibmsTkoiIiIhCxzkn5f07SV2pLsNbAAYCWCgi5wKoVFxBDcT2DyMiIiIiShXL\nonoCgP8TkbUAjgH4oWEWIiIiIqKYmbV/EBEREREFhadOVBSRy0TkExH5TETGlnCbv4rI5yKySkQ6\npTojFa+sn52I9BeR/SKyovDjvy1y0neJyP+KyC4RWVPKbfi886iyfn587nmXiDQTkfkisq7wELS7\nSrgdn38eFM3Pj88/bxKRKiLygYisLPz5PVLC7cr13LNs/ziFiFQA8DcAgwDsBLBMRN52zn1S5DZD\nAbRxzrUVke4A/gGgh0lg+lY0P7tC2c65ESkPSGWZAOBpAC8X900+7zyv1J9fIT73vCkPwBjn3CoR\nqQHgQxGZzdc93yjz51eIzz+Pcc4dE5EBzrkjIpIG4D0R6e2cey9ym1iee15aqe4G4HPn3Fbn3AkA\nrwK48rTbXInCFw7n3AcA/r+9u42Rq6rjOP79UbaNoFZEYptCS6qUpGqBQlEsqU0UE4UQXkBLKBGJ\nL1CsMaJGYzT1jdFGY4IaH0gWQzAi4EMgIGSTBkxpba27bFstNvFZgdoYSqBWDaE/X8wZchnmqQyz\ne6f+Pm/2zrn/uefcPfuf/HPn7L3zJb2RmG39zB00bqkYNWP7EeBQl5DkXY31MX+Q3Ksl2wdsT5ft\nw8BjwKKWsORfTfU5f5D8qyXbR8rmPBr1cOvn6DHnXp2K6kXA3yqv/85L/zhbYx5vExMzr5+5A7io\nfIVyv6TlMzO0eAUk70Zfcq/mJJ0JnAvsbNmV/BsBXeYPkn+1JOkESY8CB4CHbe9rCTnm3KvN8o84\n7k0Ci8tXLe+jcUvFZbM8poj/B8m9mitLB34MfLxc8YwR0mP+kn81ZfsocJ6k1wITkt7VfHbKy1Wn\nK9WPA4srr08vba0xZ/SIiZnXc+5sH25+1WL7AWBM0utnbogxgOTdCEvu1ZukE2kUZLfbvqdNSPKv\nxnrNX/Kv/mw/A9wPXNCy65hzr05F9S7gzZKWSJoLXA3c2xJzL+V+1pLeATxt+x8zO8xoo+fcVdch\nSbqQxu0cn5rZYUYXovO6v+Rd/XWcv+Re7d0K7LN9c4f9yb966zp/yb96kvQGSfPL9quAS4DplrBj\nzr3aLP+w/bykjcAEjWJ/3PZjkm5o7PYttn8u6f1qPNL8X8D1sznmaOhn7oArJX0EeA74N7B+9kYc\nVZJ+CKwFTpX0V2ATMJfk3UjoNX8k92pL0mpgA7C3rO008DlgCcm/2utn/kj+1dVC4DZJolG33G57\ny6A1Zx7+EhERERExoDot/4iIiIiIGEkpqiMiIiIiBpSiOiIiIiJiQCmqIyIiIiIGlKI6IiIiImJA\nKaojIiIiIgaUojoiok+S5pd7zjZfL5R015D6ulTSprJ9g6Rrh9HPsEi6TtI3u+xfIWl8JscUETFM\nKaojIvp3CnBj84XtJ22vG1JfnwK+W/r5nu0fDKmfYer4IATbe4Clkk6bwfFERAxNiuqIiP59mUYh\nOCVps6QlkvbCC1dmfyZpQtIfJW2U9MkSu13S60rcUkkPSNol6ReSlrV2Iul0YKz5SFxJmyTdVLYf\nkvQVSTsl/a481a31/QvKsack7WnGSLqkjOXXku6UdFJpXyVpm6RpSTsknSxpnqRby/snJa2tnOdP\nyjnsl7S50u/1pW0HsLrSfpWkvZIelfRwZagPAlcNNCMRETWRojoion+fBf5ge6Xtz5S26tXYtwBX\nABcCXwKesb0S2AF8oMTcAmy0vQr4NPCdNv2sBqa6jGOO7bcDnwC+2Gb/NcCDpe9zgGlJpwKfB95t\n+wJgErhJ0hjwI+Bjts8F3gP8B/gocNT2inK82yTNLcc/h0YxvAJYL2mRpAVlLBcBFwPLK+P5AvBe\n2+cBl1fafwWs6XKeEREj48TZHkBExHHkIdtHgCOSDgH3lfa9wNsknQy8E7hbksq+sTbHWQI82aWf\nn5afkyW21S5gvBTM99jeXa40Lwe2lb7HgF8CZwNP2J4CsH0YQNLFwDdK235JfwaaV9W3VOJ+W8Zw\nWjn/p0r7ncBZJf4RGkX5XZWxAzwBnNnlPCMiRkaK6oiIV85/K9uuvD5K4/P2BOBQuYLci7rsax73\nedp8jtveKmkNcCnwfUlfB54GJmxveFEn0lt79NVuPNXzbJ5bxzHbvlHSKuAyYFLSStuHSnzHddcR\nEaMkyz8iIvr3LPCal/tm288Cf5J0ZbNN0oo2oX8BFvR52JcUspIWAwdtjwPjQHMJympJbyoxJ0k6\nC9gPLJB0fml/taQ5wFZgQ2lbBpxRYjvZCayRdEq5Qv7CWmlJS23vsr0JOFiOBbCwnGtExMhLUR0R\n0aeytGFb+ee9zb3CO7RfC3yo/FPgb3jxGuOmbcD5fR63XT9rgd2SpoB1wM22/wl8ELhD0m5gO3C2\n7eeA9cC3JE0DE8A84NvAHEl7gDuA60ps2/HYPkBjTfUOGgX5vkrMV8vvbA+wvdz5Axprz7d2OM+I\niJEiO9+8RUTUjaQtwIZSrB6Xyp1A1tk+ONtjiYgYVK5UR0TU09eAD8/2IIalLHv5fQrqiDhe5Ep1\nRERERMSAcqU6IiIiImJAKaojIiIiIgaUojoiIiIiYkApqiMiIiIiBpSiOiIiIiJiQCmqIyIiIiIG\n9D+bHWFIGa9llgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "setup_graph(title='Inverse rFFT Output', x_label='time (in seconds)', y_label='amplitude', fig_size=(12,6))\n", "_ = plt.plot(t, irfft_output)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }