{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## ThinkDSP\n", "\n", "This notebook contains an example from Chapter 10: Signals and Systems\n", "\n", "Copyright 2015 Allen Downey\n", "\n", "License: [Creative Commons Attribution 4.0 International](http://creativecommons.org/licenses/by/4.0/)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Get thinkdsp.py\n", "\n", "import os\n", "\n", "if not os.path.exists('thinkdsp.py'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/thinkdsp.py" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from thinkdsp import decorate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LTI System Theory\n", "\n", "This notebook contains one of the coolest examples in Think DSP. It uses LTI system theory to characterize the acoustics of a recording space and simulate the effect this space would have on the sound of a violin performance.\n", "\n", "I'll start with a recording of a gunshot:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('180960__kleeb__gunshot.wav'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/180960__kleeb__gunshot.wav" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from thinkdsp import read_wave\n", "\n", "response = read_wave('180960__kleeb__gunshot.wav')\n", "\n", "start = 0.12\n", "response = response.segment(start=start)\n", "response.shift(-start)\n", "\n", "response.plot()\n", "decorate(xlabel='Time (s)', ylabel='Amplitude')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you play this recording, you can hear the initial shot and several seconds of echos." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This wave records the \"impulse response\" of the room where the gun was fired." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's load a recording of a violin performance:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('92002__jcveliz__violin-origional.wav'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/92002__jcveliz__violin-origional.wav" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave = read_wave('92002__jcveliz__violin-origional.wav')\n", "wave.truncate(len(response))\n", "wave.normalize()\n", "wave.plot()\n", "decorate(xlabel='Time (s)', ylabel='Amplitude')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And listen to it:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can figure out what the violin would sound like if it was played in the room where the gun was fired. All we have to do is convolve the two waves:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "output = wave.convolve(response)\n", "output.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it looks like:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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j7h60aJF3HrrrcybN4+2bduyceNGRo0axXnnnceoUaN49NFHufzyy5k6dSoA69atY+7cuXzxxRcMGTKEs846i+HDhzN58mROOeUUdu3axaxZs7j//vu59957Afj888/54osvGDRoEMuWLfv52Hl5eQwdOpQpU6Zw/vnnM3/+fIqKithzzz0ZOXIkV155JQMGDGD16tWcdNJJLFmyhJtuuokBAwZwww038MorrzBhwoS0vE3WgqoNflgCa0tg54+wzfvTZy9+8k3U9Tt2VabvYFts8FlT+7z55pucddZZtG3bFoDWrVvz3nvvMXLkSADOPfdc5s6tvhn+9NNPJy8vj65du/L9998DMHjwYN58803Kysp49dVXOfroo2nUqBFz587l3HPPBaBLly507ty5RoICp/U1efJkAJ555hmGDRsGwMyZM7nsssvo2bMnQ4YM4ccff2Tr1q3MmTOHc845B4BTTz016riBibAWVG1wX9D8MLnSkijbBg2agKQw/Ualfwa2NLVUlJZOpqgqEuNzEbi+agqNqm0BCgoKGDhwIK+99hqTJ09mxIgRNdZHc8QRR7BixQpKS0uZOnUq113nnKWorKzkvffe+3neqUjxpIunLSgROVlElorIChEZG2b9XSKywH0sE5HNAesqAtZNy27kJhXrt5XB+hVwW3v4+InUdjbv7vQEZYyPHH/88Tz77LNs2LABgI0bN9K/f3+eeeYZACZNmsSAAQNi7mf48OFMnDiRd955h5NOOglwpvKYNGkSAMuWLWP16tUcdNBBNbYTEc444wyuuuoqDj74YNq0aQPAoEGD+M9//vNzvQULFoTs89VXX2XTpug9eePlWYISkXzgXmAw0BUYISJdA+uo6pWq2lNVewL/Bl4MWL2jap2qDsla4CY91i91npf9L7X9bPw69Vj87LnzvY7AeOCQQw7hz3/+M8cccwyHHnooV111Fffccw8TJ06kR48ePPnkk/zrX/+KuZ9BgwYxZ84cTjjhBBo0aADAJZdcQkVFBd27d2fYsGE89thjNVpgVYYNG8ZTTz318+k9gHvuuYeSkhJ69OhB165deeCBBwAYP348c+bMoXfv3rz++ut06tQpLe+DZ9NtiMgRwI2qepK7PA5AVW+LUP9dYLyqvuEub1PVpokcs9ZOt3Fj0Lwv12+A/OyfvS0aG/8kaStHA8+MhP2O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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave.plot(label='original')\n", "output.plot(label='convolved')\n", "decorate(xlabel='Time (s)', ylabel='Amplitude')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it sounds like:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you think this example is black magic, you are not alone. But there is a good reason why this works, and I do my best to explain it in Chapter 10. So stay tuned.\n", "\n", "I'd like to thank jcveliz and kleeb for making these recordings available from freesound.org." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true } }, "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.10" } }, "nbformat": 4, "nbformat_minor": 4 }