Skip to content
Snippets Groups Projects
python-data-project-scipy.ipynb 86.7 KiB
Newer Older
Patrick Kinnear's avatar
Patrick Kinnear committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Signal processing using Scipy\n",
    "\n",
    "In this notebook we will explore how the [scipy](https://scipy.org/scipylib/) package can be used to perform signal processing.\n",
    "\n",
    "Scipy stands for *sci*entific *py*thon, and is a package with a vast range of modules for a range of scientific computing problems. From linear algebra to optimization; from integration to interpolation: it is the go-to Python package for traditional scientific computing problems. Scipy is built from numpy's `ndarray`, and scipy interfaces with `matlotlib` for visuals. So when working with scipy it is essential we also have numpy and matplotlib imported too."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
Patrick Kinnear's avatar
Patrick Kinnear committed
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Scipy is a large package with many submodules. It is standard to just import the modules we will be working with on a givgen task. In this notebook, we'll be using the modules `fftpack` and `signal`, which give access to methods related to the Fast Fourier Transform, and signal processing, respectively. We will also need some helper functions for reading in signals, from the `scipy.io` module."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
Patrick Kinnear's avatar
Patrick Kinnear committed
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy import fftpack\n",
    "from scipy import signal\n",
    "from scipy.io import wavfile"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Working with signals\n",
    "A signal is a series of measurements over time, related to some phenmomenon. It could be the light emitted from a chemical reaction, sound transmitted through the air, or the heat of an organism throughout some biological process. When we work with signals in python, we are considering digital signals: samples of a signal taken at discrete time-steps. Today we will be working with a familiar signal: we'll be working with audio signals (i.e. those coming from sound waves). \n",
    "\n",
    "### Reading in a wav aoudio file.\n",
    "Let's see how we can represent an audio signal in python. We are going to use the `wavfile.read` helper to read in a recording of a guitar chord (you can listen to it by clicking on the file in the Jupyter folder)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
Patrick Kinnear's avatar
Patrick Kinnear committed
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/lib/python3.6/site-packages/scipy/io/wavfile.py:273: WavFileWarning: Chunk (non-data) not understood, skipping it.\n",
      "  WavFileWarning)\n"
     ]
    }
   ],
   "source": [
    "chord = wavfile.read(\"data/chord-11.wav\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This function returns a tuple. The first element is the sample rate, and the second is the actual data from the file."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "scrolled": true
   },
Patrick Kinnear's avatar
Patrick Kinnear committed
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(44100, array([[ -8,  45],\n",
       "        [ 30,  91],\n",
       "        [ 82, 129],\n",
       "        ...,\n",
       "        [  0,   0],\n",
       "        [  0,   0],\n",
       "        [  0,   0]], dtype=int16))"
      ]
     },
     "execution_count": 44,
Patrick Kinnear's avatar
Patrick Kinnear committed
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chord"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plotting the data from the wav with `plt` will give the charactersitic plot of the sound wave that we're used to."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
Patrick Kinnear's avatar
Patrick Kinnear committed
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f05cb3e3e48>,\n",
       " <matplotlib.lines.Line2D at 0x7f05cb3e3f98>]"
     "execution_count": 45,
Patrick Kinnear's avatar
Patrick Kinnear committed
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(chord[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To check we're doing things correctly, let's write that data back to another file. By opening the original file and the file we've written, you should convinve yourself that the numpy array created by `wavfile.read` really does represent the audio signal of the wav file."
Patrick Kinnear's avatar
Patrick Kinnear committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
Patrick Kinnear's avatar
Patrick Kinnear committed
   "metadata": {},
   "outputs": [],
   "source": [
    "wavfile.write(\"data/test.wav\", chord[0], chord[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Possible subtlety here on stereo vs mono!!!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "def to_mono(sound):\n",
    "    if sound[1].shape[1] ==1:\n",
    "        return sound\n",
    "    else:\n",
    "        aves = []\n",
    "        for t in sound[1]:\n",
    "            aves.append(np.mean(t))\n",
    "        return sound[0], np.array(aves, dtype=np.int16)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_chord = to_mono(chord)\n",
    "new_chord[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f05cb89c860>]"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(new_chord[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "wavfile.write(\"data/test.wav\", new_chord[0], new_chord[1])"
   ]
  },
Patrick Kinnear's avatar
Patrick Kinnear committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Applying the FFT\n",
    "The Fourier transfrom is a way of breaking down a signal into its component parts. With audio signals, it tells us how we could have built up our original signal by combining certain elementary (sin and cosine) sound waves. It's a bit like \"unmixing\" coloured paint to find out how much red, blue and yellow went into a given colour. The process is quite complicated, so for the purposes of this notebook we will just understand it at this high level: given a signal, the Fourier transform gives us its decomposition into elementary waves, which is like a kind of fingerprint unique to that signal. The Fast Fourier Transform (FFT) is a particularly efficient algorithm for calculating the Fourier transform of a signal."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
Patrick Kinnear's avatar
Patrick Kinnear committed
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.01112000e+05,  1.12499153e+05,  9.23704002e+02, ...,\n",
       "       -6.83353758e+01, -2.08448737e+02, -1.32400000e+03])"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chord_transform = fftpack.rfft(new_chord[1])\n",
    "chord_transform"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, `chord_transform` is an array listing how much of each frequency makes up the given signal. However, it isn't clear what exactly these frequencies are! Scipy can give us these too: we just need to tell `fftpack.fftfreq` how many discrete samples make up `new_chord`, and how much time each sample represents (this is the inverse of the sample rate)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "freqs = fftpack.fftfreq(len(new_chord[1]), d=(1/new_chord[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can plot frequencies, against how much of each frequency made up our signal."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Fourier coefficient')"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(freqs, chord_transform)\n",
    "plt.xlabel(\"Frequency (Hz)\")\n",
    "plt.ylabel(\"Fourier coefficient\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, the FFT seems to have calculated that our signal doesn't contain any negative frequencies! Negative frequency doesn't make much sense for sound waves, but for some other signals (e.g. a revolving wheel) it might have meaning. The negative frequencies are stored by `fftpack.fft` in the first `n/2` entries of each array. So we can ignore negatve frequencies like so."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Fourier coefficient')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(freqs[:int(len(freqs)/2)], chord_transform[:int(len(freqs)/2)])\n",
    "plt.xlabel(\"Frequency (Hz)\")\n",
    "plt.ylabel(\"Fourier coefficient\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have now obtained the fourier coefficients for our audio signal."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Power Spectral Density\n",
    "This is way faster to do than FFT! :D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0.00000000e+00, 1.19345984e-05, 2.38691968e-05, ...,\n",
       "        4.99976131e-01, 4.99988065e-01, 5.00000000e-01]),\n",
       " array([1.28297399e-21, 3.02110344e+05, 2.92487281e+05, ...,\n",
       "        1.04438286e+02, 1.14860010e+00, 2.09210644e+01], dtype=float32))"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "psd = signal.periodogram(new_chord[1])\n",
    "psd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
Patrick Kinnear's avatar
Patrick Kinnear committed
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f05aafb84e0>]"
     "execution_count": 114,
Patrick Kinnear's avatar
Patrick Kinnear committed
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
Patrick Kinnear's avatar
Patrick Kinnear committed
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(psd[0], psd[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Comparing Yes and No\n",
    "Blah Blah Blah\n",
    "\n",
    "Let's do it!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [],
   "source": [
    "yes = to_mono(wavfile.read(\"data/yes_male.wav\"))\n",
    "no = to_mono(wavfile.read(\"data/no_male.wav\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {},
   "outputs": [],
   "source": [
    "yes_psd = signal.periodogram(yes[1], fs=yes[0])\n",
    "no_psd = signal.periodogram(no[1], fs=no[0])"
Patrick Kinnear's avatar
Patrick Kinnear committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
Patrick Kinnear's avatar
Patrick Kinnear committed
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f05aa378b00>]"
     "execution_count": 185,
Patrick Kinnear's avatar
Patrick Kinnear committed
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
Patrick Kinnear's avatar
Patrick Kinnear committed
    }
   ],
   "source": [
    "plt.plot(yes_psd[0], yes_psd[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f05aa2d74e0>]"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(no_psd[0], no_psd[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the signal for \"no\" does not contain as much high-frequency as the signal for \"yes\". We will try to create a classifier based on this feature."
Patrick Kinnear's avatar
Patrick Kinnear committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "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.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}