{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Lecture 26: Time Series Analysis\n", "J.R. Gladden, University of Mississippi, Dept. of Physics\n", "Physics 503" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "#### Imports and Initialization\n", "Set up the details of sampling rates and signal duration." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "%matplotlib qt4\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Nyquist frequency: 200.00 Hz\n" ] } ], "source": [ "plt.close('all')\n", "\n", "Fs = 400.0 #Sampling rate (samples per second)\n", "Ts = 1.0/float(Fs) # Sampling interval (s)\n", "Td = 20.0 # Duration of signal\n", "\n", "print(\"Nyquist frequency: %3.2f Hz\" % (Fs/2.0))\n", "# Time vector\n", "t = np.arange(0,Td,Ts)\n" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Sample signal types\n", "Generate some signals to analyze such as multitone, chirp, gaussian, and gaussian shaped wavepacket." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "def chirp(t, A=1.0, w0 = 10.0, ramp = 0.2):\n", " return np.sin(2.0*np.pi*ramp*w0*t*t)\n", " \n", "def multitone(t, ws, A=1.0):\n", " y = np.zeros(len(t))\n", " for w in ws:\n", " y+=A*np.sin(2.0*np.pi*w*t)\n", " return y\n", "\n", "def gaussian(t,sigma=5.0, A=1.0):\n", " return A*np.exp(-( (t-t.max()/2.0)/sigma)**2)\n", " \n", "def wavepacket(t,sigma=0.5, A=1.0, omega=None):\n", " if not omega: omega=20*sigma\n", " return A*np.exp(-( (t-t.max()/2.0)/sigma)**2)*np.sin(2*np.pi*omega*t)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Perform FFT and Visualize\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "y=multitone(t,(5,20,80))\n", "#y=chirp(t, ramp=0.1)\n", "#y=gaussian(t,sigma=0.2)\n", "#y=wavepacket(t,sigma=4,omega=50)\n", "\n", "N=len(t)\n", "\n", "#Compute the normalized FFT of a real signal\n", "Y=np.fft.rfft(y)/N\n", "freqs = np.fft.rfftfreq(len(y),d=Ts)\n", "\n", "#Visualize results\n", "plt.close('all')\n", "plt.subplot(211)\n", "plt.plot(t,y)\n", "plt.xlabel(\"Time (sec)\")\n", "plt.ylabel(\"Signal (A.U.)\")\n", "\n", "plt.subplot(212)\n", "plt.plot(freqs,abs(Y))\n", "plt.xlabel(\"Frequency (Hz)\")\n", "plt.ylabel(\"FFT Amplitude\")\n", "\n", "plt.figure()\n", "plt.specgram(y,Fs=Fs)\n", "plt.xlabel(\"Time (s)\")\n", "plt.ylabel(\"Frequency (Hz)\")\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 0 }