{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Project 2\n", "\n", "## Fourier methods, Matched Filtering, and Differential Equations\n", "
\n", "This notebook is arranged in cells. Texts are usually written in the markdown cells, and here you can use html tags (make it bold, italic, colored, etc). You can double click on this cell to see the formatting.
\n", "
\n", "The ellipsis (...) are provided where you are expected to write your solution but feel free to change the template (not over much) in case this style is not to your taste.
\n", "
\n", "Hit \"Shift-Enter\" on a code cell to evaluate it. Double click a Markdown cell to edit.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Write your partner's name here (if you have one).
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "### Link Okpy" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from client.api.notebook import Notebook\n", "ok = Notebook('project2.ok')\n", "_ = ok.auth(inline = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import json\n", "from scipy import signal\n", "from scipy.interpolate import interp1d\n", "from scipy.signal import butter, filtfilt, iirdesign, zpk2tf, freqz\n", "from IPython.display import Audio\n", "from scipy.io import wavfile\n", "import h5py\n", "import matplotlib.mlab as mlab\n", "#For plotting\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Problem - LIGO Gravitational Wave Detection\n", "\n", "On February 11 2016, the LIGO (Laser Interferometer Gravitational-wave Observatory) and Virgo collaboration announced the first observation of gravitational waves from the collision and merger of a pair of black holes. Such observation was made on 14 September 2015 by the two detectors of the LIGO (Hanford and Livington); hence, the signal was named \"GW150914.\" This event took place in a distant galaxy more than one billion light years from the Earth. LIGO estimated that the peak gravitational-wave power radiated during the final moments of the black hole merger was more than ten times greater than the combined light power from all the stars and galaxies in the observable Universe. This remarkable discovery marks the beginning of an exciting new era of astronomy as we open an entirely new, gravitational-wave, window on the Universe. The 2017 Nobel Prize was awarded to researchers of the LIGO/Virgo collaboration for such discovery (https://www.nobelprize.org/nobel_prizes/physics/laureates/2017/press.html).\n", "

\n", "Gravitational waves are \"ripples\" in space-time produced by some of the most violent events in the cosmos, such as the collisions and mergers of massive compact stars. Their existence was predicted by Einstein in 1916, when he showed that accelerating massive objects would shake space-time so much that waves of distorted space would radiate from the source. \n", "

\n", "In the same year that Einstein predicted gravitational waves, the physicist Karl Schwarzschild showed that Einstein's work permitted the existence of black holes. There have been dramatic improvements in our theoretical understanding of these bizarre objects - including, over the past decade, some remarkable advances in modeling a pair of black holes (referred to as a binary) through several close orbits before they finally merge. These computer models have allowed us to construct precise gravitational waveforms - i.e. the pattern of gravitational waves emitted by the black holes as they approach ever closer and finally merge into a single, larger black hole - in accordance with the predictions of general relativity. The direct observation of a binary black hole merger would therefore provide a powerful cosmic laboratory for testing Einstein's theory.\n", "

\n", "\n", "

\n", "The above image shows the predictions of the best-matching waveform computed from general relativity, over the three stages of the event: inspiral, merger and ringdown. A visual simulation is available here: http://www.glowscript.org/#/user/rhilborn/folder/Public/program/BinaryInSpiral\n", "

\n", "LIGO comprised of two giant laser interferometers located thousands of kilometers apart, one in Livingston, Louisiana and the other in Hanford, Washington. As shown in the below simplified diagram, an interferometer like LIGO consists of two \"arms\" (each one 4km long) at right angles to each other, along which a laser beam is shone and reflected by mirrors (suspended as test masses) at each end. When a gravitational wave passes by, the stretching and squashing of space causes the arms of the interferometer alternately to lengthen and shrink, one getting longer while the other gets shorter and then vice-versa. As the interferometers' arms change lengths, the laser beams take a different time to travel through the arms - which means that the two beams are no longer \"in step\" (or in phase) and what we call an interference pattern is produced. This is why we refer to the LIGO detectors as \"interferometers\".\n", "

\n", "\n", "

\n", "The difference between the two arm lengths is proportional to the strength of the passing gravitational wave, referred to as the gravitational-wave strain, and this number is mind-bogglingly small. For a gravitational wave typical of what we can detect, we expect the strain to be about 1/10,000th the width of a proton! However LIGO's interferometers are so sensitive that they can measure even such tiny amounts.\n", "

\n", "In Project 2, we take the strain data from LIGO and use matched filtering to find hidden signals from noisy data. Ultimately, we aim to show that the waveform detected by LIGO matched the predictions of general relativity, confirming that LIGO has detected gravitational waves.\n", "

\n", "First, load the data from LIGO Hanford's H1 detector and Livingston's L1 detector.\n", "

\n", "                                        Reference: http://www.ligo.org/science/Publication-GW150914/" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Load data\n", "events = json.load(open(\"BBH_events_v3.json\",\"r\"))\n", "event = events['GW150914']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Module for reading LIGO data files\n", "import readligo as rl" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# H1 data\n", "# \"strain_H1\" is a vector of strain values\n", "# \"time_H1\" is a vector of time values to match the strain vector\n", "# chan_dic_H1 is a dictionary of data quality channels. Ignore this. \n", "fn_H1 = event['fn_H1']\n", "strain_H1, time, chan_dict_H1 = rl.loaddata(fn_H1, 'H1')\n", "\n", "# L1 data\n", "fn_L1 = event['fn_L1']\n", "strain_L1, time, chan_dict_L1 = rl.loaddata(fn_L1, 'L1')\n", "\n", "# Approximate time of a binary black hole merger (Mon Sep 14 09:50:45 GMT 2015 )\n", "tevent = event['tevent'] - time[0]\n", "\n", "# Time since 9:50:29 GMT 2015\n", "time = time - time[0]\n", "tevent = tevent - time[0]\n", "\n", "# Template waveform\n", "fn_template = event['fn_template']\n", "\n", "# Sampling rate\n", "fs = event['fs']\n", "\n", "# frequency band for bandpassing signal\n", "fband = event['fband']" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "We define the vector \"time\" as the time since Sep 14 9:50:29 GMT 2015. The event of a binary black hole merger occurred around Sep 14 09:50:45 GMT 2015 (\"tevent\" - about 16s after time[0]). The strain values of H1 and L1 detectors are stored as \"strain_H1\" and \"strain_L1\" respectively.\n", "

\n", " 1. Plot the time strain data for both H1 and L1. Mark the event of a merger on the plot.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "plt.figure(figsize=(10,8))\n", "\n", "...\n", "\n", "plt.xlabel('time since Sep 14 9:50:29 GMT 2015 [s]'); plt.ylabel('strain')\n", "plt.grid('on')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "The FFT $y[k]$ of length $N$ of the length-$N$ sequence $x[n]$ is defined as\n", "\n", "and the inverse transform is defined as follows\n", "\n", "

\n", "These transforms can be calculated by means of np.fft.fft (np.fft.rfft) and np.fft.ifft. (https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.fft.html)\n", "

\n", "From the definition of the FFT it can be seen that\n", "

\n", "\n", "

\n", "For $N$ even, the elements $y[1]...y[N/2−1]$ contain the positive-frequency terms, and the elements $y[N/2]...y[N−1]$ contain the negative-frequency terms, in order of decreasingly negative frequency. For $N$ odd, the elements $y[1]...y[(N−1)/2]$ contain the positive-frequency terms, and the elements $y[(N+1)/2]...y[N−1]$ contain the negative-frequency terms, in order of decreasingly negative frequency.\n", "

\n", "In case the sequence x is real-valued, the values of $y[n]$ for positive frequencies is the conjugate of the values y[n] for negative frequencies (because the spectrum is symmetric). Typically, only the FFT corresponding to positive frequencies is plotted.\n", "

\n", "np.fft.fft gives $y[0],y[1]...y[N-1]$ while np.fft.rfft gives $y[0],y[1]...y[N/2−1]$ (real FFT).\n", "

\n", "Now, let us plot the FFT of the sum of two sines as an example." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Number of samples\n", "N = 600\n", "# sampling rate\n", "fs_example = 800.0\n", "# sample spacing\n", "dt_example = 1.0 / fs_example\n", "\n", "t = (1 / fs_example * np.arange(N))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using $N = 600$ samples with the sample rate $f_s = 800$, assume that $t$ runs from $0$ to $N/f_s$.\n", "

\n", "We define the sum of two sines as:\n", "$$ f(t) = a_1 \\mathrm{sin}(2\\pi w_1 t) + a_2 \\mathrm{sin}(2\\pi w_2 t) $$\n", "
where $a_1 = 0.5, a_2 = 1.6, w_1 = 50, w_2 = 130$.\n", "

\n", "1. Using np.fft.rfft:
\n", "Now, compute the FFT of $f(t)$ by doing np.fft.rfft(f(t)). Then, take the absolute value of it and then multiply by a normalization factor $2/N$. \n", "

\n", "You can get the frequency using np.fft.rfftfreq. (\"np.fft.rfftfreq(len(y), d = 1./fs_example)\")\n", "

\n", "2. Using np.fft.fft:
\n", "Similarly, compute the FFT of $f(t)$ by doing np.fft.fft(f(t)) and take the absolute value of it and then multiply by a normalization factor $2/N$. You can also get the frequency using np.fft.fftfreq. (\"np.fft.fftfreq(len(y), d = 1./fs_example)\")\n", "

\n", "Now, select the first $N/2$ values in order to only plot the positive-frequency terms. \n", "

\n", " 2. Plot the FFT of $f(t)$ using both np.fft.rfft and np.fft.fft.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define f(t)\n", "def f(t, a1, a2, w1, w2):\n", " return ...\n", " \n", "y = f(t, 0.5, 1.6, 50, 130)\n", "\n", "# Use rfft\n", "...\n", "\n", "# Use fft\n", "...\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, transform back to the time domain. Let yf = np.fft.rfft(f(t)). Then, you can find the inverse FFT by doing np.fft.irfft(yf, len(f(t))). \n", "

\n", " Plot the inverse FFT of yf (equivalent to ploting $f(t)$ vs. $t$).
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": false }, "outputs": [], "source": [ "y = f(t, 0.5, 1.6, 50, 130)\n", "yf = np.fft.rfft(y)\n", "y_inv = np.fft.irfft(yf, len(y))\n", "\n", "plt.figure(figsize = (10,4))\n", "\n", "plt.plot(t, y_inv, '--')\n", "plt.xlabel('t'); plt.ylabel('f(t)')\n", "plt.xlim(0.1, 0.2); plt.title(\"Inverse transform using irfft\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " 3. For LIGO strain data, $f_s = 4096$ Hz. Let $N = 4f_s$. Do the FFT of the H1 strain data using \"np.fft.rfft\" (compute the FFT of the strain data by doing np.fft.rfft(data). Then, take the absolute value of it and then multiply by a normalization factor $2/N$. You can get the frequency using np.fft.rfftfreq.) and plot it as a function of frequency in log-scale. We are not doing any binning, so the spectrum is expected to be quite noisy.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "N = 4*fs\n", "fs = event['fs']\n", "dt = 1.0 / fs\n", "\n", "...\n", "\n", "plt.figure(figsize = (10,7))\n", "\n", "plt.loglog( ... )\n", "\n", "plt.xlim(20, 2000)\n", "plt.xlabel('frequency [Hz]')\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plotting strain data in the Fourier domain gives us an idea of the frequency content of the data. Here, we visualize the frequency content of the data by plotting the amplitude spectral density, ASD.\n", "\n", "The ASDs are the square root of the power spectral densities (PSDs), which are averages of the square of the fast fourier transforms (FFTs) of the data.\n", "\n", "They are an estimate of the \"strain-equivalent noise\" of the detectors versus frequency,\n", "which limit the ability of the detectors to identify GW signals. (There's a signal in these data! For the moment, let's ignore that, and assume it's all noise.)\n", "\n", " 4. mlab.psd (https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.psd.html) gives PSDs. Use this to compute PSDs and take square roots to obtain ASDs. The input data are strain values, and let Fs = fs (which is 4096) and NFFT = 4*fs. (We are dividing the data into NFFT length segments) Plot ASDs of both H1 and L1 data. Label each plot.

\n", "(Hint: Do \"PSD, freqs = mlab.psd(data, Fs = fs, NFFT = 4$*$fs)\" to get the PSD values
\n", " Then, plot np.sqrt(PSD) as a function of freqs.)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "N = 4*fs\n", "fs = event['fs']\n", "dt = 1.0 / fs\n", "\n", "...\n", "\n", "plt.figure(figsize=(10,8))\n", "\n", "plt.loglog( ... )\n", "plt.loglog( ... )\n", "\n", "plt.axis([20, 2000, 1e-24, 1e-19])\n", "plt.grid('on')\n", "plt.ylabel('ASD (strain/rtHz)')\n", "plt.xlabel('Freq (Hz)')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the above plot, we only show the data between 20 Hz and 2000 Hz.\n", "\n", "You see strong spectral lines in the data; they are all of instrumental origin. However, you can't see the signal in this plot, since it is relatively weak and less than a second long, while this plot averages over 32 seconds of data. So this plot is entirely dominated by instrumental noise.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Now, let's plot the best-matching gravitational waveform predicted by General Relativity." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n02lcfvnlmDp1Kk4//XT09fUBUGJ63rx5mDFjBr785S+jvb294Ny3334bCxYswJw5c7Bw4ULs2LGj\nYMyiRYtw1VVXYd68eTj88MPR1NSEr3/96zjmmGOwaNEic5zbz4u+l48++ihWrFiBGTNmoKGhAdde\ne63555ROp3Httddi7ty5mD9/Pn77298CUD+TJ598Ms4++2wce+yxtvedEELIAYaUctg8jjrqKJnP\nmjVrcj+47wuFjzfuVsfiPfbH3/lfdTy6p/CYB3w+n5w5c6b5eOihh2QymZQTJ06U0WhUSinllVde\nKR944AHZ0tIiTz75ZPPzW265Rd50001SSikPO+wwefvtt0sppbzzzjvlN77xDSmllDfccIO89dZb\nba999dVXyx/84AdSSilffPFFOXPmTCmllEuXLpVf/OIXbc/Zs2eP+fqHP/yheU0rN9xwg5wxY4bs\n7e2VLS0tcsKECXLbtm1y8+bNcurUqVJKKe+//345efJk2dHRIfv6+uShhx4qt27dKqWUsrW1VUop\nZSqVkgsWLJDvvvuu+R1/9rOfmddpbGyUK1eulFJK+YMf/MB2LQsWLJCXXXaZlFLKl19+Oef63/72\nt6WUUra1tclMJiOllPKee+6RV199tZRSyu9///vyX/7lX8y52trapJRSVlVVyZ07d8rjjz9evvDC\nCwXX3Lx5s/T7/ebazj//fPnAAw9IKaWcPn26bGpqklJK+eMf/9ic/2tf+5p89NFHZSKRkPPnz5e7\nd++WUkr50EMPyUsvvbTgGl/72tfkBRdcIDOZjHziiSdkTU2NXL16tUyn03L27Nly5cqVRX9erPdy\n6tSpctmyZVJKKa+77jrzPv32t7+VN998s5RSypaWFjlnzhy5adMmuXTpUllZWSk3bdpUsDYpbf5u\nlTFLly4d7CUckJTdfSnh33Unyu6e9BO8L/YAeEv2sxZibOYAwCnUe8YZZ+Avf/kLzjvvPDz99NP4\n+c9/jpdffhlr1qzBSSedBABIJBKYP3++ec4555wDAJgzZw7+9Kc/Fb32a6+9Zu7P+9nPfhatra3o\n6upyPef999/Hj370I3R0dCAajWLhwoW24770pS+hoqICFRUVOOWUU/Dmm2+ioaEhZ8ypp56Kuro6\nAMCxxx6Ljz/+GBMnTsQjjzyCu+++G6lUCjt27MCaNWswY8YMAMAFF1xgnn/ZZZfh/vvvxy9+8Qs8\n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\nYf9ezp2dYjTJ1/CfC889+wyC4y6W09f63AsvYvfmYRzfYl+/9OILmF17Ga+cZNd9+JFHsa/nYGV1\njDBm7yO/96efeRbRSXafrx99DYcOnQRogqPHjuEryWn2/rz4Es6sxphMYzz1tacBACdPnAAAjMbm\n9hmxDp8b4H/7wuHqhXI9//X6ey6Gat6Xt6RsgR//lzAihBwEsALgwJtzS9/copT+FoDfAoAbb7yR\nLi0tKdf96699CVcu9rC09B7tWYfdI/j0qy/i3fe9X+u2/dpfvQy89Ao+9tGlQrq/WOTl8/jNZx/D\nje+6E+++Up2D/ewDrwAvvoyPfeSDyukGAHC09Rr+0+EXcNe971NOOgCAX3nuIVze87G0dK/2dfW+\n+BnM7zmApaXblc+feewY8PTX8eEP3I9LF7rKNX94/Em8tjzE0tK3Kp8fff008MRT+Nb778FNlyga\n4ADsf/5hdLot7b3+5eqzmF85B93fYe+1VfzqU4/i+ltvxweu31t6/tkT68CXH8a9d74LS7fsLz0/\njWLgC5/FgSuuxgw5UbrO4XNbwKEv4e7bb8XSHQdL+19fGQKPHMJV192EpXdfVnp+/WsngaeextL7\n7sM1e8uBEI9PX8KhE0fwwQ9+sCTNxwlF8NnP4ObrrsHS0vWlveefOI7ff/FZ3Pnu+3DFYnHayySM\nkfzlZ3Hz9ddgaem60t4Ht57H08vl1wsApx87BjzzdSy9/34cXOji0KFD2bozGxPgoQdw5XU3YOne\nKwr7ji4PgS8ewp233Yylu4vvxSRk7/OlV16DpaVrC8/5ry4DX/kq7nv3Xbj/2sXCc1vPnAKe+xru\nuPseXL+/SOn+6vMPY0/Hw9JS8f9/y4Mp8KXP48prr8fS/VcVnvuDY09gkY5K37Nzx9aAxx/BTbe+\nC0s37Ss8lzz4OVxzxUEsLd1WeLzz1b9Ab3YeS0v3Fx7/v48+jkV3gqWlDxQe/93XHsPqMMDS0vsL\nj5NHPo8rL91X+Le4OgyAB/8KV15zHZa+JU/W+uLGc+idO1X6e/M+/xkcvPwKLC3dlD32H088ifl4\ngKWlD2aPbTx9Enjuadx9z724Nv1+fPL1VeDRR3H3nXfggzewf0PdIyvAE1/Bbe+6A++7bg8A4PVH\njgLPP48PfuD92SSaQ5vP46nz+ffRua0J8IUHcPNNN2DpvVcCYN9rj5/N19CXzgFPPI573n037rpi\n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\n7Nu+Z0tEdOUk6RhJh0tal1t2saQLBtmvT9JjkvaTNFnSakkHp3WXSFqaVAk0sQAACzxJREFUvi+V\n9LlOX+cY5ckcSYen79Ml/TiXJ4PuP96n4eZL2m6DpN0Klnf1vTLSfMlt36esE/V9evx+OU7SbZJ2\nSPO7l+RFnZ4tVfKkjs+WQfMlLa/bs6VSvuS2r8WzpWn930u6qCQv2vZs6doSv4i4Q9Jzw9i1Z4eC\nG26eRMSmiLg/ff+lslbUe7U5eR0zgntlIF19r0hty5cTJD0WET9tQ5LGhZJ8+TNJyyLi5bRNUd+h\ndXu2DJonNX22VLlXBtLV94rUtnypy7NFkmTbkv5A0lUFq9v6bOnawG8AH7e9JhWpFhV5Fg0F13gQ\n9epQcIPlyTa295X0Fkk/Gs7+XabKdYWk22zf52wUmIZevVekof3eZ6j1QdWL98tBkt5h+0e2/832\nWwu2qduzpUqebFOjZ0vVfKnbs2VI94vq82xpeIekZyJifcG6tj5bei3w+ydlRaHzJW1SVmw6LJGV\nm/ZCk+fKeWJ7mqRrJZ0fEVuGun+XqXpdb4+I+ZIWSzrX9jHNG/TQvSIN7X6ZLOk9kr45nP27zERJ\nMyW9TdKnJV2T/oc+ZD10v1TOk5o9W6rmS92eLUO5X+r0bGk4U8WlfZVVvV96KvCLiGci4rWI2Crp\nCmXFo80GHQpOkjzIUHDdomKeyPYkZQ/mr0fEdUPdv9tUva6IeDJ9blbW92Rju567V6Qh/96LJd0f\nEc8Mc/9uslHSdZG5W9JWZWOL5tXq2aJqeVK7Z4sq5kvdni2qmC9JnZ4tsj1R0u9Lurpkk7Y+W3oq\n8GtcfPI+SesKNqvVUHBV8iT9r+ufJT0cEZ8f6v7dqGK+TLU9vfFd0km57XruXpGG/Hu3/A+1V+8X\nSdcrezldtg9S9oJ184DytXq2qEKe1PHZomr5Urtni6r9G2qo07NFykYgeyQiNpasb++zZbDWH+N1\nUnZTbJL0W2X/k/iopP8paa2kNSkz5qRt95R0U27fU5S1LntM0oW55btKWiFpvbLWRzM7fZ1jkSeS\n3q6seHiNpFVpOiWtK9y/m6YR5Mt+ylpPrZb0YC/dKyPJlzQ/VdKzknZuOmav3i+TJV2p7I/N/ZKO\nL8mXOj1bBs2Tmj5bquRLHZ8tVf8N1erZkpZ/VdKfNm07as8WRu4AAACoiZ6q6gUAAEA5Aj8AAICa\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# read in the template and parameters for the theoretical waveform\n", "f_template = h5py.File(fn_template, \"r\")\n", "template_p, template_c = f_template[\"template\"][...]\n", "time_template = time+(tevent-16)\n", "\n", "plt.figure(figsize=(10,8))\n", "plt.plot(time_template,template_p, label = 'Waveform template')\n", "plt.plot(tevent*np.ones(2), [-2.0e-18, 1.e-18], '--', label = 'Event of a binary black hole merger')\n", "\n", "plt.xlim(15, 17); plt.ylim(-1.0e-18, 1.0e-18)\n", "plt.xlabel('time since Sep 14 9:50:29 GMT 2015 [s]'); plt.ylabel('strain')\n", "plt.grid('on')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Following https://arxiv.org/pdf/1710.04635.pdf, we model the gravitational wave signal by making analogies to electromagnetic waves.\n", "\n", "Assume that two masses orbit their common center of mass. The orbiting system emits gravitational waves, which carry energy away from the system, leading to a decay of the orbits, that is, there is an “in-spiral” of the masses.\n", "\n", "Starting from an expression that indicates how the orbital frequency changes as the binary system radiates\n", "energy, we can find how the distance between two masses (denoted as $r$) changes with time:\n", "\n", "$$ \\frac{dr}{dt} = \\frac{-\\eta N c}{4}\\Big( \\frac{r_s}{r} \\Big)^3 $$\n", "\n", "where $r_s$ is the Schwarzschild radius, the distance from the center of a spherically symmetric mass at which the escape speed, calculated from Newtonian mechanics in this case, is equal to the speed of light. For two binary masses, $r_s = 2GM/c^2$. $\\eta = m_1 m_2/(m_1 + m_2)^2$ is a dimensionless raio of the masses, and $N$ is a numerical factor which depends on the details of the theory used to derive the result. Here, $\\eta = 0.247, N = 6.4, M = 60.5M_{\\mathrm{sun}}$.\n", "\n", "We can now find the waveform with the following calculational steps:\n", "\n", "1. Let $r_i = 5.3r_s$ (initial separation of two masses) and $t_i$ = time_template[64805] (16.26s since Sep 14 9:50:29 GMT 2015). Assume $t_f = 16.4$. Use $10000$ steps, so $\\Delta t = (t_f-t_i)/10000$\n", "\n", "2. Solve the above differential equation in three different ways:\n", "\n", "          (1) Analytically: $r(t) = \\big[r_i^4 - N\\eta r_s^3 c (t-t_i)\\big]^{1/4}$\n", "\n", "          (2) Euler's Method (numerically): Let $f(r) = \\frac{dr}{dt}$. Then, $r(t+\\Delta t) = \\Delta t \\cdot f(r)$ for small $\\Delta t$.\n", "\n", "          (3) Runge-Kutta Method (numerically): Let $f(r) = \\frac{dr}{dt}$. $k_1 = \\Delta t \\cdot f(r), k_2 = \\Delta t \\cdot f(r+\\frac{1}{2}k_1)$. Then, $r(t+\\Delta t) = r(t) + k_2$ for small $\\Delta t$.\n", "\n", "            Yes, it is silly to solve this DEQ numerically since its analytic solution can be found very easily. But if you have nonlinear equations, (2) and (3) can be very useful.\n", "\n", "3. Calculate $r$ for the current time value. ($\\Delta t$ should be very small.)\n", "\n", "4. Use Kepler's third law to find $w(t)$ (which shows orbital frequency) and calculate $w$ for the current time value.\n", "\n", "$$ w^2 = \\frac{GM}{r^3} $$.\n", "\n", "5. Use that value of $w$ and calculate the interferometer strain signal $h(t)$:\n", "\n", "$$ h(t) = \\frac{\\Delta L_x(t) - \\Delta L_y(t)}{L} \\propto w^{2/3}\\mathrm{cos}(2w(t-t_i)) $$\n", "\n", "5. For the next time value, repeat step 3-5 to find $r, w, h$.\n", "\n", "6. Stop when $t$ reaches 16.4 ($t_f = 16.4$).\n", "\n", "7. Scale $h(t)$ so that $h(t_i)$ = template_p[64805]. (Remember that $t_i$ = time_template[64805].) \n", "\n", " 5. Solving the given differential equation in three different ways (analytically, using Euler's method, using Runge-Kutta Method), find three different versions of $h(t)$. Then, show how our estimate of the waveform ($h(t)$) matches with the actual waveform (\"template_p\"); first plot \"template_p\" as a function of \"time_template\" and then plot three different versions of $h(t)$ in the same figure. Try different $M = 55M_{\\mathrm{sun}}, 60.5M_{\\mathrm{sun}}, 65M_{\\mathrm{sun}}$ and show that $M = 60.5M_{\\mathrm{sun}}$ fits best to the given waveform (for $M = 55M_{\\mathrm{sun}}, 65M_{\\mathrm{sun}}$, plot $h(t)$ using only the analytic solution. For $M = 60.5M_{\\mathrm{sun}}$, try all three methods to plot $h(t)$.) Label all plots. set the x limits of the axes as plt.xlim(ti, 16.45).
\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "G = 6.67408e-11\n", "Msun = 1.99e30\n", "c = 2.99792e8\n", "\n", "N = 32/5\n", "eta = 0.247\n", "\n", "ti = time_template[64805]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Method 1: Analytic solution\n", "..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Method 2: Euler's method\n", "..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Method 3: Runge-Kutta Method\n", "..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": false }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You should find that with $M = 60.5M_{\\mathrm{sun}}$, $h(t)$ agrees reasonably well with the actual waveform which uses numerical GR. Our estimate breaks down as we get closer to the merger event. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "From the ASD in Part 4, we can see that noise fluctuations are much larger at low and high frequencies and near spectral lines, reaching a roughly flat (\"white\") minimum in the band around 80 to 300 Hz.\n", "\n", "We can \"whiten\" the data (dividing it by the noise amplitude spectrum, in the fourier domain), suppressing the extra noise at low frequencies and at the spectral lines, to better see the weak signals in the most sensitive band. Note that only the data are needed in this process.\n", "\n", "To get rid of remaining high frequency noise, we will also bandpass the data.\n", "\n", "Now, define a function called \"whiten\" which takes the strain data (\"strain\"), interpolated psd (\"interp_psd\"), and dt (1.0 / fs = 1.0 / 4096).\n", "\n", "      Note:\n", "\n", "          1. For L1 and H1, strain = strain_L1 and strain = strain_H1 respectively.\n", "\n", "          2. Let Pxx_H1 be the psd values you obtained in Part 4 for H1. Then, interpolate this as \"psd_H1 = interp1d(freqs, Pxx_H1)\" (https://docs.scipy.org/doc/scipy-0.19.1/reference/generated/scipy.interpolate.interp1d.html). psd_H1 is a function; to get the psd values at the needed frequencies (say you have an array \"freqs\"), you should do psd_H1(freqs).\n", "\n", "          3. So \"whiten(strain_H1,psd_H1,1.0/fs)\" would whiten the strain data for H1.\n", "\n", " 6. Define a function \"whiten\". Then, whiten the H1 and L1 strain data. (Replace ellipsis)
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# transform to freq domain, divide by asd, then transform back\n", "def whiten(strain, interp_psd, dt):\n", " # Given strain data, first transform to frequency domain\n", " # Use \"np.fft.rfftfreq\" to get the frequencies and \"np.fft.rfft\" to get the FFT of the strain\n", " freqs = ...\n", " hf = ...\n", " \n", " # Normalization factor\n", " norm = 1./np.sqrt(1./(dt*2))\n", " \n", " # Divide by the ASD and multiply by the normalization factor\n", " white_hf = hf / np.sqrt(interp_psd(freqs)) * norm\n", " \n", " # Transform back to the time domain using \"np.fft.irfft\" (Hint: n = len(strain)) \n", " # https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.fft.irfft.html\n", " white_ht = ...\n", " return white_ht " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "dt = 1.0 / fs\n", "\n", "# Interpolate the PSD values\n", "psd_H1 = interp1d( ... )\n", "psd_L1 = interp1d( ... )\n", "\n", "strain_H1_whiten = whiten(strain_H1,psd_H1,dt)\n", "strain_L1_whiten = whiten(strain_L1,psd_L1,dt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " Remember that the sampling rate (\"fs\") is 4096 Hz. What is the nyquist frequency?
\n", "(Note: The data cannot capture frequency content above the Nyquist frequency, but that's OK, because GW150914 only has detectable frequency content in the range 20 Hz - 300 Hz.)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "nyq = ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, suppress the high frequency noise (no signal there) with some bandpassing. (We bandpass from 43 to 300 Hz, since we are looking for a signal in that frequency band and the detector noise is pretty low there. This will keep power in this frequency range, but suppress power away from this frequency.) We use scipy.signal.butter (https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.butter.html) and scipy.signal.filtfilt (https://docs.scipy.org/doc/scipy-0.19.1/reference/generated/scipy.signal.filtfilt.html)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# bandpass filter coefficients \n", "order = 4\n", "lowcut= 43\n", "highcut= 360\n", "low = lowcut / nyq\n", "high = highcut / nyq\n", "\n", "bb, ab = butter(order, [low, high], btype='band')\n", "normalization = np.sqrt((highcut-lowcut)/nyq)\n", "strain_H1_whitenbp = filtfilt(bb, ab, strain_H1_whiten) / normalization\n", "strain_L1_whitenbp = filtfilt(bb, ab, strain_L1_whiten) / normalization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Shift L1 event by 7 ms (Signal arrived 7 ms earlier at L1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "strain_L1_shift = -np.roll(strain_L1_whitenbp,int(0.007*fs))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Plot \"strain_L1_shift\" (whitened L1 strain shifted by 7ms) and \"strain_H1_whitenbp\" (whitened H1 strain) as a function of time. Set \"plt.xlim(ti, 16.45); plt.ylim(-10, 10)\". Do you see a signal?
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "The FFT input signal is inherently truncated. This truncation can be modelled as multiplication of an infinite signal with a rectangular window function. In the spectral domain this multiplication becomes convolution of the signal spectrum with the window function spectrum, being of form sin⁡(x)/x. This convolution is the cause of an effect called spectral leakage (https://en.wikipedia.org/wiki/Spectral_leakage)\n", "\n", "Hence, spectral leakage is caused by discontinuities in the original, noninteger number of periods in a signal. Windowing the signal with a dedicated window function helps mitigate spectral leakage by reducing the amplitude of the discontinuities at the boundaries\n", "\n", "\n", "\n", "In this project, we use the Blackman window (https://docs.scipy.org/doc/numpy/reference/generated/numpy.blackman.html#numpy.blackman). \n", "\n", " 7. Recall that in Part 2 we found the FFT of $f(t)$ using np.fft.rfft. Now, define a window function \"w = np.blackman(N)\" and multiply $f(t)$ by w and do the FFT. $\\big($np.fft.rfft(w*f(t))$\\big)$. Plot the FFT of $f(t)$ with and without the window function. Set the y-axis as log-scale (plt.semilogy). Show that windowing reduces spectral leakage.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Matched filtering is the optimal way to find a known signal buried in stationary, Gaussian noise. It is the standard technique used by the gravitational wave community to find GW signals from compact binary mergers in noisy detector data. LIGO scientists use matched filtering to find such \"hidden\" signals. A matched filter works by compressing the entire signal into one time bin (by convention, the \"end time\" of the waveform).\n", "\n", "Here, we use only one template (the one identified in the full search as being a good match to the data). Assuming that the data around this event is fairly Gaussian and stationary, we'll use this simple method to identify the signal (matching the template) in our 32 second stretch of data. \n", "\n", "\n", " 8. Do the matched filtering. First, start with the L1 strain data.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# To calculate the PSD of the data, choose an overlap and a window \n", "fs = event['fs']\n", "dt = 1.0 / fs\n", "NFFT = 4*fs\n", "psd_window = np.blackman(NFFT)\n", "# and a 50% overlap:\n", "NOVL = NFFT/2\n", "\n", "# Complex waveform template\n", "template = (template_p + template_c*1.j) \n", "\n", "# the length and sampling rate of the template MUST match that of the data.\n", "datafreq = np.fft.fftfreq(template.size, d = 1./fs)\n", "df = np.abs(datafreq[1] - datafreq[0])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " Window the data. (Replace ellipsis in the cell below)
\n", "\n", "1. Define the window: \"np.blackman(template.size)\"\n", "\n", "2. Do the FFT of the template with window using \"np.fft.fft\": multiply \"template\" by \"dwindow\" and then do FFT. The normalization factor is \"1/fs\" (i.e. multiply the FFT of the template by 1/fs)\n", "\n", "3. Do the FFT of the L1 strain data with window using \"np.fft.fft\": multiply the L1 strain data by \"dwindow\" and then do FFT. The normalization factor is \"1/fs\" (i.e. multiply the FFT of the template by 1/fs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# window the data (Replace ellipsis)\n", "\n", "# 1. Define the window\n", "dwindow = ...\n", "\n", "# 2. Do the FFT of the template (with dwindow)\n", "template_fft = ...\n", "\n", "# 3. Take the Fourier Transform (FFT) of the data (with dwindow)\n", "data = strain_L1.copy()\n", "data_fft = ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " Plot the blackman window as a function of time. Do you think using this window is useful in our analysis? Note that the merger event occurred around 16s since Sep 14 9:50:29 GMT 2015, and the data stretches over 32s.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " Plot the FFT of the template with and without the window (as a function of frequency). Only use positive frequencies. Plot the squared magnitude of the FFT (power spectrum). Label all plots. Set the range of x-axis between 10 and 2000. Plot both axes in log scale.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we need an estimate of the noise power in each FFT bin." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# First, calculate the PSD of the data. Also use an overlap, and window:\n", "data_psd, freqs = mlab.psd(data, Fs = fs, NFFT = NFFT, window=psd_window, noverlap=NOVL)\n", "# Interpolate to get the PSD values at the needed frequencies. This defines the noise power in each frequency bin.\n", "power_vec = np.interp(np.abs(datafreq), freqs, data_psd)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " Plot the noise power spectral density (defined by \"power_vec\"). Set the range of x-axis between 10 and 2000. Plot both axes in log scale.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Calculate the matched filter output in the time domain. (Replace ellipsis in the cell below)
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "1. Multiply the Fourier Space template and data, and divide by the noise power in each frequency bin: i.e. Multiply the FFT of the data with the conjugate (using \".conjugate()\") of the FFT of the template and divide by the noise power (\"power_vec\")\n", "\n", "2. Taking the Inverse Fourier Transform (IFFT) of the filter output (take it back to the time domain): i.e. Take the inverse FFT (using np.fft.ifft) of the step 1 output and multiply by the factor \"2*fs\"\n", "\n", "Hence, the result will be plotted as a function of time off-set between the template and the data:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 1. Multiply the Fourier Space template and data, and divide by the noise power in each frequency bin.\n", "optimal = ...\n", "\n", "# 2. Taking the Inverse Fourier Transform (IFFT) of the filter output (take it back to the time domain)\n", "optimal_time = ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Normalize the matched filter output. (Replace ellipsis in the cell below)
\n", "\n", "1. Find $\\sigma = \\sqrt{\\big<\\frac{\\tilde{h}(f)\\tilde{h}^*(f)}{S_n(f)}\\big>}$\n", "(Hint: First multiply the FFT of the template by its conjugate (using \".conjugate()\") and then divide by the noise PSD. Basically you did $\\frac{\\tilde{h}(f)\\tilde{h}^*(f)}{S_n(f)}$. You have an array then (each array element correspond to each element in the frequency array \"datafreq\" you defined earlier). Now, sum array elements and multiply by \"df\" which you defined earlier.\n", "\n", "2. Normalize the matched filter output so that we expect a value of 1 at times of just noise: i.e. Divide the absolute value of \"optimal_time\" by sigma." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 1. Find $\\sigma$\n", "sigmasq = ...\n", "sigma = np.sqrt(sigmasq.real)\n", "\n", "# 2. Normalize the matched filter output so that we expect a value of 1 at times of just noise\n", "SNR = ...\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Apply time offset, phase to template. Finally, whiten the template and band-pass it. (All routine given - nothing to do here, just run the cell.)
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# shift the SNR vector by the template length so that the peak is at the END of the template\n", "peaksample = int(data.size / 2) # location of peak in the template\n", "SNR_complex = optimal_time/sigma\n", "SNR_complex = np.roll(SNR_complex,peaksample)\n", "SNR = abs(SNR_complex)\n", "\n", "# apply time offset, phase to template\n", "# find the time and SNR value at maximum:\n", "indmax = np.argmax(SNR)\n", "timemax = time[indmax]\n", "SNRmax = SNR[indmax]\n", "\n", "d_eff = sigma / SNRmax\n", "# Calculate optimal horizon distnace\n", "horizon = sigma/8\n", "\n", "# Extract time offset and phase at peak\n", "phase = np.angle(SNR_complex[indmax])\n", "offset = (indmax-peaksample)\n", "\n", "# apply time offset, phase, and d_eff to template \n", "template_phaseshifted = np.real(template*np.exp(1j*phase)) # phase shift the template\n", "template_rolled = np.roll(template_phaseshifted,offset) / d_eff # Apply time offset and scale amplitude\n", "\n", "# Whiten and band-pass the template for plotting\n", "template_whitened = whiten(template_rolled,interp1d(freqs, data_psd),dt) # whiten the template\n", "template_match = filtfilt(bb, ab, template_whitened) / normalization # Band-pass the template\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Plot the original, phase-shifted template (\"template_rolled\") and the whitened template (\"template_whitened\"). Show the plot between the time range (15.6, 16.45) since Sep 14 9:50:29 GMT 2015. You will see that the waveform before ~ 16.3s is largely suppressed. That is because we divide the FFT of the template by the noise PSD in the Fourier space during whitening. Now, calculate FFT(template)/Noise PSD$^{1/2}$ and plot it as a function of frequency in the log-log plot. Set the x-axis range between 5 and 2000 Hz.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Plot SNR as a function of time. (Remember that the GW signal arrived 7 ms earlier at L1. So shift the L1 time accordingly - this is done conventionally.) Set plt.xlim(16.3, 16.5).
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": false }, "outputs": [], "source": [ "..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Shift L1 event by 7 ms (Signal arrived 7 ms earlier at L1)\n", "template_match_shift_L1 = -np.roll(template_match,int(0.007*fs))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " At what time does SNR peak? Print the result. (Remember that the GW signal arrived 7 ms earlier at L1. So shift the L1 time accordingly - this is done conventionally.)
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " First, plot the whitened strain data (from Part 6) as a function of time. Then, plot the matched waveform (\"template_match_shift_L1\") in the same figure. Show that the whitened strain data match well to the waveform predicted by GR.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " 9. Repeat Part 8 for the H1 strain data and do: 1. Plot SNR vs. time, 2. plot the whitened strain data and matched waveform vs. time, 3. find the time at which SNR peaked.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " 10. First, compare the SNR peak time for both H1 and L1 data. (Print the results) Then, plot the whitened L1 and H1 strain in the same plot. Plot the waveform matched to the H1 strain data in the same plot as well.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So we conclude that the whitened strain data match well to the waveform predicted by General Relativity; we have detected the gravitational wave predicted by GR!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Extra (all the routine given; just run the cell!):\n", "\n", "Make wav (sound) files from the filtered, downsampled data, +-2s around the event." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "eventname = 'GW150914' \n", "\n", "Pxx = (1.e-22*(18./(0.1+freqs))**2)**2+0.7e-23**2+((freqs/2000.)*4.e-23)**2\n", "psd_smooth = interp1d(freqs, Pxx)\n", "\n", "template_offset = 16.\n", "\n", "# function to keep the data within integer limits, and write to wavfile:\n", "def write_wavfile(filename,fs,data):\n", " d = np.int16(data/np.max(np.abs(data)) * 32767 * 0.9)\n", " wavfile.write(filename,int(fs), d)\n", "\n", "deltat_sound = 2. # seconds around the event\n", "\n", "# index into the strain time series for this time interval:\n", "indxd = np.where((time >= tevent-deltat_sound) & (time < tevent+deltat_sound))\n", "\n", "# write the files:\n", "write_wavfile(eventname+\"_H1_whitenbp.wav\",int(fs), strain_H1_whitenbp[indxd])\n", "write_wavfile(eventname+\"_L1_whitenbp.wav\",int(fs), strain_L1_whitenbp[indxd])\n", "\n", "# re-whiten the template using the smoothed PSD; it sounds better!\n", "template_p_smooth = whiten(template_p,psd_smooth,dt)\n", "\n", "# and the template, sooming in on [-3,+1] seconds around the merger:\n", "indxt = np.where((time >= (time[0]+template_offset-deltat_sound)) & (time < (time[0]+template_offset+deltat_sound)))\n", "write_wavfile(eventname+\"_template_whiten.wav\",int(fs), template_p_smooth[indxt])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With good headphones, you may be able to hear a faint thump in the middle; that's our signal!" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fna = eventname+\"_template_whiten.wav\"\n", "print(fna)\n", "Audio(fna)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fna = eventname+\"_H1_whitenbp.wav\"\n", "print(fna)\n", "Audio(fna)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## To Submit\n", "Execute the following cell to submit.\n", "If you make changes, execute the cell again to resubmit the final copy of the notebook, they do not get updated automatically.
\n", "__We recommend that all the above cells should be executed (their output visible) in the notebook at the time of submission.__
\n", "Only the final submission before the deadline will be graded. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "_ = ok.submit()" ] } ], "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": 2 }