{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## ThinkDSP\n", "\n", "This notebook contains solutions to exercises in 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": null, "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": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from thinkdsp import decorate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 1\n", "\n", "In this chapter I describe convolution as the sum of shifted,\n", "scaled copies of a signal. Strictly speaking, this operation is\n", "*linear* convolution, which does not assume that the signal\n", "is periodic.\n", "\n", "But when we multiply the\n", "DFT of the signal by the transfer function, that operation corresponds\n", "to *circular* convolution, which assumes that the signal is\n", "periodic. As a result, you might notice that the output contains\n", "an extra note at the beginning, which wraps around from the end.\n", "\n", "Fortunately, there is a standard solution to this problem. If you\n", "add enough zeros to the end of the signal before computing the DFT,\n", "you can avoid wrap-around and compute a linear convolution.\n", "\n", "Modify the example in `chap10soln.ipynb` and confirm that zero-padding\n", "eliminates the extra note at the beginning of the output." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Solution:* I'll truncate both signals to $2^{16}$ elements, then zero-pad them to $2^{17}$. Using powers of two makes the FFT algorithm most efficient.\n", "\n", "Here's the impulse response:" ] }, { "cell_type": "code", "execution_count": 3, "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": 4, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deZxcVZ338c83nXSHLISEbiBkIQkJS9iCNAEElCVR0BmCIwqoIzgycUEZ9dFH0FEQl8GREXTkUSNGQRlA0dEowbCLAsE0CIQEQsLeJCFNQva1k9/zR92E6k5VdydV3XWr6vt+verV9557bt3fpaB+nHNPnaOIwMzMLG16lToAMzOzXJygzMwslZygzMwslZygzMwslZygzMwslXqXOoDdUV9fH6NGjSp1GGZmVgSPPvro6xHR0L68LBPUqFGjaGpqKnUYZmZWBJJeylXuLj4zM0uloiQoSdMlLZP0VJ7jkvR9SYskPSnpLVnHLpC0MHldUIx4zMys/BWrBfVz4IwOjp8JjEteU4EfAkgaAlwOHAdMBC6XNLhIMZmZWRkrSoKKiAeAFR1UmQLcGBmzgb0kDQXeCdwVESsi4g3gLjpOdGZmViV66hnUMOCVrP3mpCxf+U4kTZXUJKmppaWl2wI1M7N06KkEpRxl0UH5zoUR0yKiMSIaGxp2Go1oZmYVpqcSVDMwImt/OLC4g3IzM6tyPZWgZgAfTkbzHQ+sioglwCzgHZIGJ4Mj3pGUmZlZlSvKD3Ul3QycAtRLaiYzMq8PQET8CJgJvAtYBKwHPpIcWyHp68Cc5K2ujIiOBluYmVmVKEqCiojzOzkewMV5jk0HphcjDjMzqxyeScLMzFLJCcrMzFKpqhNURHD3/Ndo3bqt1KGYmVk7VZ2g7l/QwkU3NvGD+xaVOhQzM2unqhNUy9pNADS/saHEkZiZWXtVnaDMzCy9nKDMzCyVnKDMzCyVnKDMzCyVnKCAyDl/upmZlVJVJ6hca32YmVk6VHWCMjOz9HKCMjOzVHKCMjOzVHKCMjOzVHKCAgIP4zMzS5uqTlCSx/GZmaVVVScoMzNLLycoMzNLpaIkKElnSFogaZGkS3Mcv0bS48nrWUkrs45tzTo2oxjxmJlZ+etd6BtIqgGuAyYDzcAcSTMiYv72OhHx2az6nwaOznqLDRExodA4zMysshSjBTURWBQRz0fEZuAWYEoH9c8Hbi7CdYvHg/jMzFKnGAlqGPBK1n5zUrYTSQcAo4F7s4r7SmqSNFvS2fkuImlqUq+ppaWlCGF7Lj4zszQrRoLK9T2fr01yHnBbRGzNKhsZEY3AB4BrJR2Y68SImBYRjRHR2NDQUFjEZmaWesVIUM3AiKz94cDiPHXPo133XkQsTv4+D9xP2+dTZmZWpYqRoOYA4ySNllRLJgntNBpP0sHAYODhrLLBkuqS7XrgRGB++3PNzKz6FDyKLyJaJX0KmAXUANMjYp6kK4GmiNierM4HboloszzgocCPJW0jkyyvyh79Z2Zm1avgBAUQETOBme3Kvtpu/4oc5z0EHFGMGArhQXxmZulT1TNJeCo+M7P0quoEZWZm6eUEZWZmqeQEZWZmqeQEZWZmqeQEBbQd+W5mZmlQ1QnKo/jMzNKrqhOUmZmllxOUmZmlkhOUmZmlkhOUmZmlkhMUnovPzCyNqjpByWvqmpmlVlUnKDMzSy8nKDMzSyUnKDMzSyUnKGBz6zaefW1NqcMwM7MsTlDAHU8t5R3XPMCyNRtLHYqZmSWcoLKs2dha6hDMzCxRlAQl6QxJCyQtknRpjuMXSmqR9Hjyuijr2AWSFiavC4oRj5mZlb+CE5SkGuA64ExgPHC+pPE5qt4aEROS1/XJuUOAy4HjgInA5ZIGFxrT7sq16sZNj7zEqEtvZ3Prtp4PyMysihWjBTURWBQRz0fEZuAWYEoXz30ncFdErIiIN4C7gDOKEFPRfGfWAgDWbXL3n5lZTypGghoGvJK135yUtfdeSU9Kuk3SiF08F0lTJTVJamppaSlC2Lmu0S1va2Zmu6EYCSrX13r7zrI/AKMi4kjgbuCGXTg3UxgxLSIaI6KxoaFht4PtSEcL63q+PjOznlWMBNUMjMjaHw4szq4QEcsjYlOy+xPgmK6e25260mJyo8rMrDSKkaDmAOMkjZZUC5wHzMiuIGlo1u5ZwNPJ9izgHZIGJ4Mj3pGUmZlZletd6BtERKukT5FJLDXA9IiYJ+lKoCkiZgCXSDoLaAVWABcm566Q9HUySQ7gyohYUWhMZmZW/gpOUAARMROY2a7sq1nblwGX5Tl3OjC9GHGYmVnl8EwSZmaWSk5QXRQdDfEzM7Oic4LqhPzjKDOzknCCMjOzVHKCaqPzbrzVG7e4u8/MrAc4QXXRMd+4m5seeYkjr7iTmx55udThmJlVPCeoNjp+3nTdvYsAuH/Bsp4IxsysqlV1gpq/eHWb/Unf/XOH9d/s2PPACTOz7lbVCWpTjjWe1m1qJSL49p+e4eXl69ukotZtmRS1YYuX3jAz625FmUmikgTwXMs6fnj/c9z7dNuuvJY1mfluH1y0vASRmZlVl6puQeWXaSm1bvMqumZmpeIE1U5Xh5B7qLmZWfdygmrnxKvuZdWGzp8xTX/wxU7r/LrpFRYsXVOEqMzMqo8TVDurN7by52QYeUfTHM15ofNVQb5w25O889oHihabmVk1qeoElS//fD/5vdPqDVtYvm5zzjo1vTzU3MysO1V1gurMsjWb8h90fjIz61ZOUGZmlkpOUGZmlkpVnaBU5H66bduCzTlmpzAzs11XlAQl6QxJCyQtknRpjuOfkzRf0pOS7pF0QNaxrZIeT14zihFPqXz8l49y0L/fUeowzMwqQsFTHUmqAa4DJgPNwBxJMyJifla1vwONEbFe0ieA/wTOTY5tiIgJhcaxOwpZLDfXqXfOf23339DMzNooRgtqIrAoIp6PiM3ALcCU7AoRcV9ErE92ZwPDi3DdktoWwbdmPs3HftFU6lDMzCpSMSaLHQa8krXfDBzXQf2PAtn9YH0lNQGtwFUR8btcJ0maCkwFGDlyZEEBF8PMuUu7XHf95lb61XpeXjOzXVGMFlSu3q6cE9VJ+hDQCHwnq3hkRDQCHwCulXRgrnMjYlpENEZEY0NDQ6ExF9VLy9cx6tLb8x4f/9VZPRiNmVllKEaCagZGZO0PBxa3ryRpEvBl4KyI2PEL2IhYnPx9HrgfOLoIMfWoK2bM67TOsjUbeyASM7PKUYwENQcYJ2m0pFrgPKDNaDxJRwM/JpOclmWVD5ZUl2zXAycC2YMrysJ9C1o6rTPxm/fsWE/KzMw6V/CDkYholfQpYBZQA0yPiHmSrgSaImIGmS69AcCvkwlYX46Is4BDgR9L2kYmWV7VbvRft+rp2YoWLltDw8C6Hr6qmVl5KsqT+4iYCcxsV/bVrO1Jec57CDiiGDGkyQ/uXZhzHr+75y/jrQfWlyAiM7PyU90zSXRTE+rqO5/lxodf2ql8+oMvsHrjFlbkmSHdzMze5LHPPezIK+4E4Cv/MJ6PnjS6xNGYmaVXVbegSumXs3duYZmZ2ZucoEroO7OeYdSlt9O61RPMmpm15wRVIhHB9X95AYDWbTl/12xmVtWqOkFFCfPCi8vX57z+klUbiFIGZmaWElWdoEptc7uuvUXL1nDCf9zLt2Y+zT/9vwf9w14zq2pOUCkw/cEXWL+5lZeWZyZ8/8lfXuCxl1dy65yXAbjt0Wa+9ofOp1MyM6skHmaeAv/5pwW0rNnEie1+xHv1nc/yy9kvs3R1Zh6/y//xsFKEZ2ZWElXdguquH+rujnWbWvn8bU/sVL49OeXyzdvndziLuplZOavyBJWeDPWrpmZWrt/SYZ1nlq7mFw+/yNgvzWTl+s38JBkF+FzL2h6I0MysZ7mLr4ycce1fdmz//KEXd2yf/l9/5sWr3l2CiMzMuk9Vt6DK2bV3L2yz/6HrH2H288uZNa/rK/2amaWZW1AV4q+LXuevi14H4Japx3Pk8EE8+9paGgbW0bp1GyvXb+HGh1/iO+ccSa9e6enaNDPLxwmqAp03bfZOZUP617Ji3WZ+81gz5xwznBPG7M2Rwwcxbt+BJYjQzKxzVZ2gqqkdkb3Ex22PNnPbo80A3HTRcZw4tu3w9rWbWhlQV9X/aphZCvgZVJX74PWPAPC3F1Zw34Jl3Py3lzn88lmc+b2/7DTl0oOLXueh514vRZhmVoX8v8mW87dUTy9ZzS1zXmHNxi18a+YzvPAf79qRzDxi0Mx6gltQltdlv53Lt2Y+A8ANWcPan2tZS9OLK3asDjzq0tv54PWzWb+5FYCHnnud4791D+s2te44Z+OWrTve54lXVvbcTZhZ2VIxZs6WdAbwPaAGuD4irmp3vA64ETgGWA6cGxEvJscuAz4KbAUuiYhZnV2vsbExmpqadjvem//2Mpf9di7nNo7g1qZXdvt9bNd8+IQDuPHhzEKNP//IsdQPqKNl7SaGDurLwfsOZO2mVm546EWuvvNZZl5yMuP335PNrdtYsHQNRwwf1Oa9lqzaQP2AOlau30LDwLpS3I6ZFYmkRyOicafyQhOUpBrgWWAy0AzMAc6PiPlZdT4JHBkRH5d0HvCeiDhX0njgZmAisD9wN3BQRGzt6JqFJihPD1TeJo/fl7vmv9am7PgxQ+jdqxcjhuzBAXv3Z+igvtQPqGNMQ38+edNjXP2+o3j85ZUsW7OJfz15NBu2bGXVhi0MqOvNlq3ByyvWcejQPelXm+n13tyamWm+l+DVlRsYMbjfjuH5G7dsZfPWbQys683CZWsZOaQfffvU7Ijl9bWb2LNvH2p7u4PCrCvyJahiPIOaCCyKiOeTC90CTAHmZ9WZAlyRbN8G/ECZeYamALdExCbgBUmLkvd7uAhx5bRhc4e5z8pA++QEMPv5FR2ec/p//XnH9rf/9EzRY+ouZx21f6lDMOvQ+xtHcNK4+s4r7oZiJKhhQHY/WTNwXL46EdEqaRWwd1I+u925w3JdRNJUYCrAyJEjdzvYPWprOq9klhJzX11V6hDMOnT6oft023sXI0Hl+jlR+37DfHW6cm6mMGIaMA0yXXy7EqBVp+PHDGHJqo28tHw9//eMg5n+1xd5fe0mfvOJt3LvM69x3X3PcfK4emprevH3V1Zy+T+Op653DaPq+7Fg6Rr61PRi1YYttG7dxn6D9uDYUYPZuGUbr63eSF2fXgzpX8sfn1jCxNFD2LJ1G4P71VI/sI5X39jA4H59mLd4NUeN2IuaXqJ/bQ1LV29k45ZtDNtrD2p79+LF5esYPngP+vTKdAUuX7eZAXW9eeH1dYxp6E9d716pmtDYrKcVI0E1AyOy9ocDi/PUaZbUGxgErOjiuUV37bkT+Mytj3f3ZQzYf1BfbvzoRO6Yu5Tv3bOQ/nW9WbVh51nbf3/xiQwbvAd79KnhyeZVjNy7H8P22oPNrdtYs3ELA/v24WcPvsDwwf1495FDdyuWT54ydsf2MQcM5gvvPCRv3UP22zPvsf0G9d2x/S8njd7p+MH7ZWbn2GfPvm3Khw/u12b/wIYBbfa3D/YYv3/+a5tVk2IMkuhNZpDE6cCrZAZJfCAi5mXVuRg4ImuQxD9FxPslHQb8D28OkrgHGNfdgyS2e+8PH+LRl94o+H2qwdkT9ud3j2f+3+HvX5kMwP3PLuOzt765htVxo4fwyAsruPTMQxi0Rx8u++1cHvjCqYzcu1/O9wR4Y91mNm/dxr7tvszNrHp02yCJ5JnSp4BZZIaZT4+IeZKuBJoiYgbwU+AXySCIFcB5ybnzJP2KzICKVuDizpJTMdW4+6RT2T/Kvfp9R7E1grremed47zl6OO85eji/+/urNI4azPK1m5ly3YOcevA+HLTvAM6eMKzTZ36D+9d2a/xmVr6K8juonlasFtR/zHyaHz/wfBEiqgzPfuNM+tQISTuG4nvWCDPrbvlaUFX9Q41qeAA9Kc8Imy+/69CdymqzHsr/z0XH8d33H9WtsZmZdcRz8VW4E8fWs3f/Ot46dm+mTBi2o2X0r28bwyFDByLEh376yE7nvXVs9/yuwcysq5ygKkzfPr3YuGUbbz+ogYtPHUvjAYPbLFB44VtH7Vgu/uRxDSWK0sysc1XexVfqCHbdzy48dsf2YTmGI//oQ8dw0th6fnbhsUwcPWSn1XOvOOuwnZ4rPfaVycz58qTuCdjMbDdVdQuq3PLTHz99EocPe3PS1FzjW045eB9OOXjXftk9xCPpzCyFqjpBlYNTD27gZx+Z2KZsTH1/nn99Xe4pN8zMKkRVd/GVgw8cd8BOZX/49En87Uun77TirZlZJXELKkVqa3qxeeu2NmVHDBu0U73+db3pX9ebhoF1PLN0Ddd/uJHmN9b7R69mVlGcoFLkY28fw3/fu2jH/sxLTm4z71t73z/vaO6cv5RJ4/ftifDMzHqUu/hSZNAeffjaWYcBMHH0kE4nDR3cv5Zzj939pUfMzNLMLagUyV6B9eB9B5YwEjOz0nMLKiU+M2kc57k1ZGa2g1tQKfDp08bymUkHAfDWAzNTDP3Dbq55ZGZWKao6QaVlJonTD31zkMPYfQZ4BnEzM6q8i08pmUuitqaqPwYzs5z8zVgiP/7nYzh82J6Mru/vJb7NzHKo6i6+UtnehffOw/YrcSRmZunlFlQPm3nJyaUOwcysLDhBdZNnvn4GAOdPHLGj7JLTx3HoUP++ycysKwpKUJKGSLpL0sLk7+AcdSZIeljSPElPSjo369jPJb0g6fHkNaGQeNKkb58aHvvKZL4+5fAdZZ+bfFBVLDNvZlYMhbagLgXuiYhxwD3JfnvrgQ9HxGHAGcC1kvbKOv6FiJiQvB4vMJ5dEt28YMWQ/rX09gg9M7PdUui35xTghmT7BuDs9hUi4tmIWJhsLwaWARWz1vjJ4+qZfmEj/WtrSh2KmVlFKTRB7RsRSwCSvx0u5SppIlALPJdV/M2k6+8aSXUdnDtVUpOkppaWlgLDLtzH334gAAPqenPaIfvSt08mQb1j/L78y4mjSxmamVlF6HSYuaS7gVzjob+8KxeSNBT4BXBBRGxf9OgyYCmZpDUN+CJwZa7zI2JaUofGxsai9M0V8kPdcfsMAOCYAzKP3W792AnMmreUi08dW4zQzMyqXqcJKiIm5Tsm6TVJQyNiSZKAluWptydwO/DvETE7672XJJubJP0M+PwuRV+gQsYrHDp0Tx74wqmMGLIHkJmiaOw+uZPTvf/n7by6csPuX8zMrAoV2sU3A7gg2b4A+H37CpJqgf8FboyIX7c7NjT5KzLPr54qMJ4eNXLvfl0alTemYQAnj6uYx25mZj2i0AR1FTBZ0kJgcrKPpEZJ1yd13g+8Dbgwx3DymyTNBeYC9cA3CozHzMwqREFTHUXEcuD0HOVNwEXJ9i+BX+Y5/7RCrm9mZpXLP9LZTb38T87MrFv5a7adf3/3oW32b5l6/I6BENm8JLuZWfdygsry9SmHUdv7zX8kV7/vKI4fszej9u7fpt6Y+v6essjMrJs5QWWR3vxl1IeOH8k5xwzPWW/Y4J1bVGZmVlxeD6q9pGUUWT8Fzt7+2NvG8MlT/GNcM7Pu5gTVBdm9eZe969D8Fc3MrGiquouvo6dI2XMpRfdOem5mZjlUdYLKJVfS6u5lOczMbGdVnaBypZ3t3Xn5nkGZmVnPqOoElcub4/iclczMSqmqE5RbRmZm6VXVCaoj7uIzMyutqk5QuQY/5HwG5e4+M7MeV9UJqj2p46HnZmbWc5yg8nCrycystJygsrz3LcMLWgbezMyKxwkqS98+NTu2s59ByR1/ZmY9zgmqne3JKLuDb1R9PwA+ccqBJYjIzKw6OUG1l7OxlCkc7mU2zMx6TEEJStIQSXdJWpj8HZyn3lZJjyevGVnloyU9kpx/q6TaQuIpJv/2ycystAptQV0K3BMR44B7kv1cNkTEhOR1Vlb5t4FrkvPfAD5aYDy7JDsJffiEAwAPMzczS4tCE9QU4IZk+wbg7K6eqMya6acBt+3O+cV25ZTD8x477ZB9ADhq+F49FY6ZWdUrNEHtGxFLAJK/++Sp11dSk6TZkrYnob2BlRHRmuw3A8PyXUjS1OQ9mlpaWgoMO78zjxjKSWPr+ezkcTvKJo/fl2e/cSaHDxvUbdc1M7O2Ol1RV9LdwH45Dn15F64zMiIWSxoD3CtpLrA6R728T34iYhowDaCxsbEoT4hyvcmAut788qLjdiqv7e3xJGZmPanTBBURk/Idk/SapKERsUTSUGBZnvdYnPx9XtL9wNHAb4C9JPVOWlHDgcW7cQ9mZlaBCm0WzAAuSLYvAH7fvoKkwZLqku164ERgfkQEcB9wTkfnm5lZdSo0QV0FTJa0EJic7COpUdL1SZ1DgSZJT5BJSFdFxPzk2BeBz0laROaZ1E8LjMfMzCpEp118HYmI5cDpOcqbgIuS7YeAI/Kc/zwwsZAYCuEh5WZm6VXVT/79W1wzs/Sq6gRlZmbpVdUJytMZmZmlV1UnKDMzSy8nKDMzS6WqTlBe1t3MLL2qOkGZmVl6VXeCcgPKzCy1qjtBmZlZajlBmZlZKlV1gnIPn5lZelV1gjIzs/RygjIzs1Sq6gQVnuvIzCy1qjpBmZlZelV1gnIDyswsvao6QZmZWXo5QZmZWSpVdYLaq1+fUodgZmZ5FJSgJA2RdJekhcnfwTnqnCrp8azXRklnJ8d+LumFrGMTColnVw3sm0lQHzp+ZE9e1szMuqDQFtSlwD0RMQ64J9lvIyLui4gJETEBOA1YD9yZVeUL249HxOMFxrNbekmluKyZmXWg0AQ1Bbgh2b4BOLuT+ucAd0TE+gKva2ZmFa7QBLVvRCwBSP7u00n984Cb25V9U9KTkq6RVJfvRElTJTVJamppaSksajMzS71OE5SkuyU9leM1ZVcuJGkocAQwK6v4MuAQ4FhgCPDFfOdHxLSIaIyIxoaGhl25tJmZlaHenVWIiEn5jkl6TdLQiFiSJKBlHbzV+4H/jYgtWe+9JNncJOlnwOe7GHdR+Qe7ZmbpU2gX3wzggmT7AuD3HdQ9n3bde0lSQ5LIPL96qsB4donHRpiZpVehCeoqYLKkhcDkZB9JjZKu315J0ihgBPDnduffJGkuMBeoB75RYDxmZlYhOu3i60hELAdOz1HeBFyUtf8iMCxHvdMKub6ZmVWuqp5JwszM0ssJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUskJyszMUqmgBCXpfZLmSdomqbGDemdIWiBpkaRLs8pHS3pE0kJJt0qqLSQeMzOrHIW2oJ4C/gl4IF8FSTXAdcCZwHjgfEnjk8PfBq6JiHHAG8BHC4zHzMwqREEJKiKejogFnVSbCCyKiOcjYjNwCzBFkoDTgNuSejcAZxcSj5mZVY6eeAY1DHgla785KdsbWBkRre3Kc5I0VVKTpKaWlpaiBHbaIfsAcO6xI4ryfmZmVjy9O6sg6W5gvxyHvhwRv+/CNZSjLDoozykipgHTABobG/PW2xXDB/fjxaveXYy3MjOzIus0QUXEpAKv0QxkN1GGA4uB14G9JPVOWlHby83MzHqki28OMC4ZsVcLnAfMiIgA7gPOSepdAHSlRWZmZlWg0GHm75HUDJwA3C5pVlK+v6SZAEnr6FPALOBp4FcRMS95iy8Cn5O0iMwzqZ8WEo+ZmVUOZRoy5aWxsTGamppKHYaZmRWBpEcjYqff0pZlgpLUArxU4NvUk3kOVsl8j5XB91gZfI/5HRARDe0LyzJBFYOkplwZu5L4HiuD77Ey+B53nefiMzOzVHKCMjOzVKrmBDWt1AH0AN9jZfA9Vgbf4y6q2mdQZmaWbtXcgjIzsxRzgjIzs1Sq+ASVb7HErON1yWKJi5LFE0f1fJS7rwv3d6GkFkmPJ6+LShFnISRNl7RM0lN5jkvS95N/Bk9KektPx1ioLtzjKZJWZX2OX+3pGAslaYSk+yQ9nSx0+m856pT1Z9nFeyzrz1JSX0l/k/REco9fy1GnON+rEVGxL6AGeA4YA9QCTwDj29X5JPCjZPs84NZSx13k+7sQ+EGpYy3wPt8GvAV4Ks/xdwF3kJkh/3jgkVLH3A33eArwx1LHWeA9DgXekmwPBJ7N8e9rWX+WXbzHsv4sk89mQLLdB3gEOL5dnaJ8r1Z6CyrnYont6kwhs1giZBZPPD1ZTLEcdOX+yl5EPACs6KDKFODGyJhNZpb8oT0TXXF04R7LXkQsiYjHku01ZObmbL8GXFl/ll28x7KWfDZrk90+yav9aLuifK9WeoLKt1hizjqRmdh2FZmJa8tBV+4P4L1Jd8ltkipxdcau/nModyck3Sp3SDqs1MEUIunyOZrM/31nq5jPsoN7hDL/LCXVSHocWAbcFRF5P8dCvlcrPUF1ZVHEXVo4MWW6EvsfgFERcSRwN2/+X00lKefPsKseIzNf2VHAfwO/K3E8u03SAOA3wGciYnX7wzlOKbvPspN7LPvPMiK2RsQEMuv4TZR0eLsqRfkcKz1B5VssMWcdSb2BQZRPV0un9xcRyyNiU7L7E+CYHoqtJ3Xlcy5rEbF6e7dKRMwE+kiqL3FYu0xSHzJf3DdFxG9zVCn7z7Kze6yUzxIgIlYC9wNntDtUlO/VSk9QORdLbFdnBpnFEiGzeOK9kTzZKwOd3l+7/vuzyPSJV5oZwIeTEWDHA6siYkmpgyomSftt78OXNJHMf7vLSxvVrkni/ynwdER8N0+1sv4su3KP5f5ZSmqQtFeyvQcwCXimXbWifK92uuR7OYuIVknbF0usAaZHxDxJVwJNETGDzL9Mv1Bm0cQVZL7ky0IX7+8SSWcBrWTu78KSBbybJN1MZuRTvTILZF5O5sEsEfEjYCaZ0V+LgPXAR0oT6e7rwj2eA3xCUiuwATivjP5HarsTgX8G5ibPLwC+BIyEivksu3KP5f5ZDgVukFRDJrn+KiL+2B3fq57qyMzMUqnSu/jMzKxMOUGZmVkqOUGZmW8WW/UAAAHxSURBVFkqOUGZmVkqOUGZmVkqOUGZFYmkvbNmqF4q6dWs/Ye66ZpHS7q+g+MNkv7UHdc2624V/Tsos54UEcuBCQCSrgDWRsTV3XzZLwHf6CCmFklLJJ0YEQ92cyxmReUWlFkPkLQ2+XuKpD9L+pWkZyVdJemDyfo6cyUdmNRrkPQbSXOS14k53nMgcGREPJHsvz2rxfb35Dhk5nr7YA/dqlnROEGZ9byjgH8DjiAz68BBETERuB74dFLne8A1EXEs8N7kWHuNQPYCh58HLk4m8TyZzCwFAE3JvllZcRefWc+bs31+OUnPAXcm5XOBU5PtScD4rCV09pQ0MFljaLuhQEvW/oPAdyXdBPw2IpqT8mXA/sW/DbPu5QRl1vM2ZW1vy9rfxpv/TfYCToiIDeS3Aei7fScirpJ0O5m57GZLmhQRzyR1Onofs1RyF59ZOt0JfGr7jqQJOeo8DYzNqnNgRMyNiG+T6dY7JDl0EG27As3KghOUWTpdAjQmKyHPBz7evkLSOhqUNRjiM5KekvQEmRbTHUn5qcDtPRG0WTF5NnOzMibps8CaiOjot1APAFMi4o2ei8yscG5BmZW3H9L2mVYbkhqA7zo5WTlyC8rMzFLJLSgzM0slJygzM0slJygzM0slJygzM0slJygzM0ul/w+BnNLuAfJwZwAAAABJRU5ErkJggg==\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.truncate(2**16)\n", "response.zero_pad(2**17)\n", "\n", "response.normalize()\n", "response.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And its spectrum:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxdVbn/8c/TpPM80ZZSTFtaCkhbIMyCIMooIiqTiqBeCype0evFCqLoT4SLgogoWGYFmUelQAsFWqBTUjrPI02btmnTpmmSZnx+f+yd9DTN2OScs5Pzfb9e53X2WXt6zm6Sp2vttdcyd0dERCRqOiQ7ABERkbooQYmISCQpQYmISCQpQYmISCQpQYmISCSlJzuAlhgwYIBnZGQkOwwREWmB7Ozs7e4+sHZ5m05QGRkZZGVlJTsMERFpATPbUFe5mvhERCSSlKBERCSSlKBERCSSlKBERCSSlKBERCSSlKBERCSSlKBERCSSlKBERCSSlKDq8c9ZG/jeP/QQsIhIsrTpkSTi6dZXFgNQUFxO724dkxyNiEjqUQ1KREQiSQlKREQiSQlKREQiSQlKREQiKW4JysweNbNtZrY4puxZM5sfvtab2fywPMPMSmLWPRivuJrNkh2AiEhqimcvvseB+4F/VBe4+xXVy2Z2N1AQs/0adx8fx3hERKQNiVuCcvfpZpZR1zozM+By4HPxOr+IiLRtyboHdQaw1d1XxZQNN7OPzex9Mzujvh3NbIKZZZlZVl5eXvwjFRGRpEhWgroKeDrmcy5wuLsfB/wU+JeZ9aprR3ef5O6Z7p45cOABU9i3OtM9KBGRpEh4gjKzdOArwLPVZe5e6u47wuVsYA0wOtGxiYhIdCSjBvV5YLm751QXmNlAM0sLl0cAo4C1SYjtAO7JjkBEJDXFs5v508BM4EgzyzGz74arrmT/5j2AM4GFZrYAeAG43t3z4xWbiIhEXzx78V1VT/m1dZS9CLwYr1hERKTt0UgSoZKySrYV7j2gXJ0kRESSQwkqdNnfP+Kk299JdhgiIhJSggot3rQ72SGIiEgMJSgREYkkJahG6BaUiEhyKEGJiEgkKUGJiEgkKUGJiEgkKUGJiEgkKUGJiEgkKUGJiEgkKUGJiEgkKUE1wjQYn4hIUihBiYhIJClBiYhIJClBiYhIJClBiYhIJClBNUJdJEREkkMJqhGe7ABERFKUEpSIiERS3BKUmT1qZtvMbHFM2W1mtsnM5oevC2PW/cLMVpvZCjM7L15xiYhI2xDPGtTjwPl1lP/J3ceHr8kAZnY0cCVwTLjP38wsLY6xNZnuQYmIJEfcEpS7Twfym7j5JcAz7l7q7uuA1cBJ8YqtuWau2cEvX1mU7DBERFJKMu5B3WBmC8MmwL5h2VBgY8w2OWFZJFz10CyenPVJssMQEUkpiU5QDwAjgfFALnB3WF5XS1qdHejMbIKZZZlZVl5eXnyiFBGRpEtognL3re5e6e5VwEPsa8bLAYbFbHoYsLmeY0xy90x3zxw4cGB8AxYRkaRJaIIysyExHy8Fqnv4vQZcaWadzWw4MAqYk8jYREQkWtLjdWAzexo4CxhgZjnAr4GzzGw8QfPdeuA6AHdfYmbPAUuBCuCH7l4Zr9hERCT64pag3P2qOoofaWD724Hb4xWPiIi0LRpJohEa6khEJDmUoBrxnwV19tUQEZE4U4JqxMSX9ICuiEgyKEGJiEgkKUGJiEgkKUHV4cPV25MdgohIylOCqsM3Hp6d7BBERFKeEpSIiESSEpSIiESSEpSIiESSEpSIiESSEpSIiESSElQta/P2JDsEERFBCeoA1z+ZXe+6jImvU1xWkcBoRERSlxJUM+UVliY7BBGRlKAEJSIikaQEJSIikaQEJSIikaQEJSIikaQEVYs3Msd7Y+tFRKR1KEHVYpbsCEREBOKYoMzsUTPbZmaLY8r+YGbLzWyhmb1sZn3C8gwzKzGz+eHrwXjFJSIibUM8a1CPA+fXKpsKfNrdxwIrgV/ErFvj7uPD1/VxjKtFVMMSEUmMuCUod58O5Ncqm+Lu1UMxzAIOi9f5RUSkbUvmPajvAG/EfB5uZh+b2ftmdkZ9O5nZBDPLMrOsvLy8+EdZizpJiIgkRlISlJndAlQAT4VFucDh7n4c8FPgX2bWq6593X2Su2e6e+bAgQMTE7CIiCRcwhOUmV0DfBH4hntQH3H3UnffES5nA2uA0YmOLTh/Ms4qIiK1JTRBmdn5wM+BL7l7cUz5QDNLC5dHAKOAtYmMTUREoiU9Xgc2s6eBs4ABZpYD/Jqg115nYKoF3eFmhT32zgR+a2YVQCVwvbvn13ngOFMvPRGRaIhbgnL3q+oofqSebV8EXoxXLCIi0vZoJAkREYkkJSigpKwy2SGIiEgtSlDAVx/4KNkhiIhILUpQwNLc3TXL6mYuIhINSlDNpPwlIpIYSlAiIhJJSlC1dNCDUCIikaAEVYs30oin9CUikhhKUCIiEklKUCIiEklKULXs2FPW4PqScj3UKyKSCEpQtewoajhBXfDnGQmKREQktTWaoMysm5ndamYPhZ9HmdkX4x9adGVMfJ3sDTuTHYaISLvWlBrUY0ApcGr4OQf4XdwiaiOmLd+a7BBERNq1piSoke5+F1AO4O4lqLe1iIjEWVMSVJmZdSUc5cfMRhLUqEREROKmKRMW/hp4ExhmZk8BpwPXxjMoERGRRhOUu081s3nAKQRNez929+1xj0xERFJavQnKzI6vVZQbvh9uZoe7+7z4hSUiIqmuoRrU3eF7FyATWEBQgxoLzAY+E9/QREQkldXbScLdz3b3s4ENwPHununuJwDHAaubcnAze9TMtpnZ4piyfmY21cxWhe99w3Izs/vMbLWZLayjBiciIimkKb34xrj7ouoP7r4YGN/E4z8OnF+rbCLwjruPAt4JPwNcAIwKXxOAB5p4DhERaYeakqCWmdnDZnaWmX02HFFiWVMO7u7TgfxaxZcAT4TLTwBfjin/hwdmAX3MbEhTziMiIu1PUxLUt4ElwI+BG4GlYdnBGuTuuQDh+yFh+VBgY8x2OWHZfsxsgpllmVlWXl5eC8IQEZEoa0o3873An8JXPNU1OsUBswe6+yRgEkBmZmbDswuKiEib1WiCMrN11J0oRhzkObea2RB3zw2b8LaF5TnAsJjtDgM2H+Q5RESkjWtKE18mcGL4OgO4D3iyBed8DbgmXL4GeDWm/Fthb75TgILqpsAomrFKzyqLiMRTownK3XfEvDa5+73A55pycDN7GpgJHGlmOWb2XeBO4Atmtgr4QvgZYDKwlqAL+0PAD5r/dRJnYU4Bi3IKkh2GiEi71ZQmvtjnkToQ1Kh6NuXg7n5VPavOqWNbB37YlONGxa6Shic3FBGRg9eUwWLvjlmuANYBl8cnHBERkUBTEtR33X1tbIGZDY9TPG2KaVosEZG4aUoniReaWCYiItJqGhrNfAxwDNDbzL4Ss6oXwQCyKc9UgRIRiZuGmviOBL4I9AEujikvBL4Xz6BERETqTVDu/irwqpmd6u4zExhTm7EsdzenHzEg2WGIiLRLDTXx3eTudwFfN7MDuou7+3/HNbI24HevL+O/zjjYATVERKQhDTXxVY9YnpWIQERERGI11MT37/D9ifq2ERERiZeGmvj+TR2DxFZz9y/FJSIREREabuL7Y8KiEBERqaWhJr73q5fNrBMwhqBGtcLdNQidiIjEVVMGi70IeBBYQzCp4HAzu87d34h3cCIikrqaOljs2e6+GsDMRgKvA0pQIiISN00Zi29bdXIKrWXfLLgiIiJx0ZQa1BIzmww8R3AP6jJgbvX4fO7+UhzjExGRFNWUBNUF2Ap8NvycB/QjGJ/PgZROUBWVVaSnNaUiKiIizdFognL3bycikLaqqt4nxUREpCWa0otvOPAjICN2ez2oKyIi8dSUJr5XgEeAfwNV8Q0n8easy2/R/pWqQomIxEVTEtRed78v7pEkycKcXS3a/6M12znnqEGtFI2IiFRrSoL6s5n9GpgClFYXuvu8gzmhmR0JPBtTNAL4FcHEiN8j6IQBcLO7Tz6YcySSqwIlIhIXTUlQxwJXA59jXxOfh5+bzd1XAOMBzCwN2AS8DHwb+JO7J3QMQNO87SIikdSUBHUpMCJO4++dA6xx9w1KFCIiEqspD/AsIGh+i4crgadjPt9gZgvN7FEz61vXDmY2wcyyzCwrLy+vrk2aRWlRRCSampKgBgHLzewtM3stfL3a0hOHI6R/CXg+LHoAGEnQ/JdLMAbgAdx9krtnunvmwIEDWxoGqriJiERTU5r4fh2zbMBngKta4dwXAPPcfStA9TuAmT0E/KcVztGomWt2JOI0IiLSTI3WoMJ5oQqAi4DHCe4bPdgK576KmOY9MxsSs+5SYHErnKNRU5ZubXyjBqgTn4hIfDQ05ftogntEVwE7CLqGm7uf3dKTmlk34AvAdTHFd5nZeIK/+etrrYssVz9zEZG4aKiJbzkwA7g4Zi6on7TGSd29GOhfq+zq1jh2sk2avoahfbpx0dghjW8sIiL1aqiJ76vAFuBdM3vIzM5Bnd4a9fvJy/nhvw7qGWYREYlRb4Jy95fd/QpgDPAe8BNgkJk9YGbnJig+ERFJUU3pJFHk7k+5+xeBw4D5wMS4R9ZG6A6UiEh8NGumPXfPd/e/u/tBDXPUHsX2kSgqrUheICIi7Yymgm1Fby9rWZd1ERHZRwmqhapHoti6ey/FZZXJDUZEpB1pykgS0oDqJr6Tf/9OcgMREWlnVINqMXWTEBGJByWoVtDSaeNFRORASlAttCaviMv/PjPZYYiItDtKUC30h7dWJDsEEZF2SQlKREQiSQkqzj5cvZ3Nu0qSHYaISJujBBVn33h4Nuf9aXqywxARaXOUoBKgUEMgiYg0mxKUiIhEkhKUiIhEkhKUiIhEkhJURFz72Bz+8s6qZIchIhIZSlAR8d6KPO6eujLZYYiIREbSRjM3s/VAIVAJVLh7ppn1A54FMoD1wOXuvjNZMYqISPIkuwZ1truPd/fM8PNE4B13HwW8QxueWn7CP7J4RxMYiogctKjNB3UJcFa4/ATwHvDzZAXTElOWbmXKUiUoEZGDlcwalANTzCzbzCaEZYPcPRcgfD+k9k5mNsHMsswsKy8vL4HhiohIIiWzBnW6u282s0OAqWa2vCk7ufskYBJAZmamZgsUEWmnklaDcvfN4fs24GXgJGCrmQ0BCN+3JSs+ERFJrqQkKDPrbmY9q5eBc4HFwGvANeFm1wCvJiM+ERFJvmQ18Q0CXjaz6hj+5e5vmtlc4Dkz+y7wCXBZkuITEZEkS0qCcve1wLg6yncA5yQ+IhERiZpkPwclIiJSJyUoERGJpJRPUP27d0p2CCIiUoeUT1CVrkepRESiSAmqSglKRCSKUj5BVSlBiYhEUsonKDXxiYhEU8onqKqqZEcgIiJ1SfkElaga1KKcgoScR0SkvYjafFAJl6hOErtKyuosd3funqKp3kVEakvpGlQiO0gYVmf5zuJy7n93dcLiEBFpK1I6QUWhg8Qdk5clOwQRkUhK7QSVwBrU395bjbuzt7ySjImv8+SsDQA8n52TsBhERNoSJagE+WjNDmavy2dncXAv6v5patYTEWlIaieoBDfxVVR6zb0ox/lo9fZ6t926ey8vf6zalYikrpROUMkYReLON4J7Tlt3l/L1h2cfsP4v76wit6CEyx6cyU+eXcDuveWJDlFEJBJSupt5Msbhe2X+5gbX3z11JXdP3dftXEMxiUiqSukaVKKb+BwlGxGRpkrpBJXoYY627i5t1eNt2lXCq/M3teoxRUSiIrWb+CLwHFRjZq/Lp6CknMszhx2w7msPfERuwV4uHnsoHTrU/SCwiEhbldIJqi3c37nun9kAdSao3IK9iQ5HRCRhEt7EZ2bDzOxdM1tmZkvM7Mdh+W1mtsnM5oevC+MdS0WCE9SOPa3bxGdhpSn6aVZEpPmScQ+qAvgfdz8KOAX4oZkdHa77k7uPD1+T4x1Ionvx3fHG8oPeN3tDPhkTX2fJ5n2joreBFkoRkYOW8ATl7rnuPi9cLgSWAUMTHQdAVRv6C//Wkq0AzFgVPNz77cfm1Kx75IO1FJdV1Lvvxvxi3lqyBYD3V+ZRUKxnq0Qk+pLai8/MMoDjgOonVm8ws4Vm9qiZ9a1nnwlmlmVmWXl5eS06fzKegzpY1c151Un13RX7vvvvJy/njslB7ezxD9fxtQc+2m/fC/88g+v+mU1BcTnXPDqH7/0zK+7xlldqJkgRaZmkJSgz6wG8CNzo7ruBB4CRwHggF7i7rv3cfZK7Z7p75sCBA1sUQ1tKUAs27gLgrjdXcOsriw9Y/89w8Nnb/r2UrA07Afhg1XbyCkspLA1qV2Vh0liyqYCi0gomTV9DaUUle8srWzXW57I2MuqWN/hkR3GrHldEUktSevGZWUeC5PSUu78E4O5bY9Y/BPwn3nG0pSa+dduLapark1FDbn1lMf+ctYERA7sfsK6orJK73lzOEzM38Puw5rX+zouaHdMzcz7hL9NW8+HEz+1X/vrCXADWbN/D4f27Nfu4IiKQhARlZgY8Aixz93tiyoe4e2748VLgwGpCK2tLNajmPuRbncTW5hXVuf6FWtN87CwqY1thKd07p3FY38aTSnllFRNfWgQE17GDgYXtkNWJv4PtezarssqpcqdjWko/Gy4izZCMGtTpwNXAIjObH5bdDFxlZuMJek2vB66LdyBtqQbVFFua8VxUUdn+zXqn/980isOyumpTVVXOiJsn07NLOotuO49Rt7xRs27kzZM5/5jBPHj1CcC+3oWxzw5/5W8fsiCn4KBqaiKSmhKeoNz9A6hz/vO4dyuvraKyfSWo8+6dftD7FpfVfR9qY35wH6m0Irh/Vbi37t6Cby7ZwoKNuxg3rE+dNagFOQV17iciUp+UHkmiLQx11BwFJa3fffyMu94F4JQR/Rrd9o43lvHMhFNrmk5Noy+JSAuk9A2BRA8Wm2x7Sut/VirWvW+vZOKLC6mI6So+a21+zXJhPXNUVU/GOHtdsG2aMpSItIBqUCnkZ88vaNJ29769CoBn5m6sc31JPd3Sa+ejyYtyuWLSLGbffE7TgxQRCaV4DSq1ElR2+HxUS3211oPA1T5as4O8wn29Dat7Ep78+3da5bwiklpSOkG1pW7mUbIxv6TedWfcNa1mWZdXRFoitRNUijXxJcLe8qbf2Nu8q4SSenoPioikdIJKtSa+KMiY+DqlFZXM+2Qnp905jbG/eYtNu0q47bUlTFmyhU27SprcmUNE2reU7iSR6PmgJHD768vYvCtoJiyvdL7z2FxWbC3k8Y/WA9A5vQMrfndBEiMUkShI6QTV3kaSaCv+MXP/sQRXbC3c73P1Q8EtNWNVHu5w5uiWDSosIsmR0k186iTRfmzeVcK/F2zer+zqR+bwrUeDebPKK6u4f9qqVp/VWETiJ6VrUEpQ0bUmbw8jB/YAYPbaHRx1aC96denIqFsmc/G4Q7nn8vH7bX/anUHvwZLySm56YSHdOqXttz57w07+OGUlmwv28vtLj03MlxCRFknpGlR1E9+wfl2THInUds7d73Pv2yvZWVTGFZNm8YMn5/HGolzKK52X5m0CYFdxGTe9sICimE4VN72wEDhwbMHqZsPqsQVFJPpSvAYVvPfp2omN1P9sjyTHvW+vqhnVYsnmAr7/1Lyaddc+NoeCknI+/mQXz2Xl1HcIAO56czmH9gn+EzL/k13cM3UlH3+yk++cPpyzxxwSvy8gIi2S2gmqetTtDhozLup2Fu8//t97MVPeN+Zv762pWS4sreC+d4KkN2PV9nqn/9hTWsGu4rImzY0lIvGR2k184T2oNOWnlFVZ5cxeu+OA8iv+PpPP/N+7cT33/I27eG/FNrbvKSVj4uu8On9TXM8n0takdA2q+jmo9A4pnadT2sibg2nInvjOSQzp3YX/LNjMfdNW16x3d774lw+48ytj2b23nEWbCvjSuEO58L4ZTP7vMxjSuwsz1+7g1BH9a2YUdneKyipJM2PZlt0cf3jfOs/95b9+COy7B/rjZ+ZzyfihVFU5P39xId885VN075zOyIHda44tkkpSOkFV16CUn+SasDt6bRff/wFLNu/m4vs/qCm7843lQNBz8O7LxvE/zy/g3ivGc9SQXowe1IOHZ6zj9snLOHZobxZtKuCDn5+9X1PhR6u3M2ZIr5rPsWMbvpidw1FDevF8dg7PZwf31n5/6bF8/eTDa7aZvXYHeXtKOWVEfwb06Nw6F0AkglI6Qd0zdSUA44b12W++I4Dp/3s2Z/4hvk08En2LN+1ucP3/hFOY3PjsfAB+e8kxvLogaKpbtCmYRfjtpVvp270TxWWVLN28u2aU94aOF2v2uh0U7i1nUK8ujBnSkysmzQJgzOCeTLo6k53FZYw9rDe7Syro0SWdtA5GSVklNz77MT8/fwyH9ulKl45pBxy3tuqa3+6S8ppOJSLJZN6GR1PIzMz0rKysg94/Y+LrACz77fm8v3Ib1z8Z9BKb8pMzGT2oJ+fc/R5r8or22+fM0QOZvrLpN+hFWtOFxw5m8qItB5T36pLO7r0VnDayP7+95NN8/p7391t/7WkZ7C4p5wdnH8ERh/TgFy8t5Lhhfbn8xGE12/zgqeyaYz933amcNLzxWZRFWoOZZbt75gHlSlCw+vYLSE/rwOpte8jo3430tKDNz92ZtTafU0b0Y8OOYs7643s8+d2T+eYjs1slfpFk+/jWLzA/ZxePfbj+gP94fXn8oVx50uGcMqI/+UVlfPaudyksrWDKT84kt2Avf357JVeeeDg3vRg8e5bewbjjK8dy5OCejD2sT5POf9WkWSzbspv5vzq3pqysooqKqiq6dUrpBp6U0mYSlJmdD/wZSAMedvc769u2tRJUfV2N6/Pg+2tq7kM05KghvViW23ATkUh79cuLjmLa8m2s2raHvMJSvnLcUF76eBMXHjuYIb278sgH6/bbfv2dF7FuexFXTprJ1t37hqS6+cIx9OrSkU8P7c2nh/YGgvvHDlQ/IbJq2x6G9e3GD57KZtOuEo4d2od5n+zk5guPolunNE4/YsAB8VVVec0jJuWVVeQXlVFcVsmn+nU76EdPikorKK2ool/3Tge1f6pqEwnKzNKAlcAXgBxgLnCVuy+ta/uWJqhjfvUmRWWVzU5QlVXOjc/O56vHD+Xax+bWu926Oy5kTd4ePn/P9IOOsTE9O6dTqOkpROJqxIDu/Oy8Izn7yEN4IXsjt766ZN+6gd0Z2qcrK7YUsq2w5WM9Zn6qLydk9OXv76+lU3oHuqR34JrTMhg/rA95haX8ZdpqNu06cGCBr51wGGMG96Syyvkkv5jzPz2YzxwxYL8eoNUdwyrd6ZgWnd5hbSVBnQrc5u7nhZ9/AeDud9S1fUsT1Mb8YtZuL+KzLRjtuqKyirnrd3LVQ7MY2qdrzQ/OazecXtPMcextb1G4N0giD37zBK5/MhuAV354ek1X49oy+ndj/Y66h+X542Xj+NnzC/jlRUdx0dghZK3fyY+e/hiAvt06HvBQa1Pc+ZVjmfjSov3KvnfGcB6asa6ePUSkrRvQozPbaw2g3K1TGj06p1NZ5ZRVVpHewaiscvp170QHMwb37kJ12jCDL48fut+9zIPRVhLU14Dz3f2/ws9XAye7+w0x20wAJgAcfvjhJ2zYUH+PqER6df4mPjfmEEorqujROf2AXlP5RWU11f7Sikryi8oY0rsr767YxuKcAi4aO4TySmdt3h4uOHYIENTUZq3dwYiB3emSnsZv/7OUS48bWuf0EflFZWwr3EtG/+5szC+mY1oHMgZ0Z8aqPA7t05XdJeU8/tF6fvOlY+jTrRPZG3by9JxPuPa0DCqrnHHD+lBV5fz13dWMG9an5hwVlVW8tmAzl4wfSgeDtduL6Jzegf7dO/N89kaOGNiDJZt3079H8N2OOKQHk6av5eJxhzLusD4UlJQzfEB3OqV3oKrKmR7G8/LHmzgpox/ffnwu5x0ziO6d0/n8UYM4MaMfvbt25M/vrORzYw6hR+eOTF6Uy6pthZw2cgDD+nXjpXk5XHHiMLYU7OWnzy3gp18YzZGDe3Lu0YNYllvIyx/n0Dk9jZNH9GPFlkJ6dA7uZXTtlMaPn5nP2z/9LB3TjPunreaM0QP527urKa2o4vQj+vPSvE0Ul1Uy46az+c2/lzDhzJFk9O/GdU9m06tLRz5/9CCmLNlC/+6deGV+MHr6iRl9ef760/jz26v409tBz9Axg3uyfEshJw/vR1llFYN7dWHHnjJ2FJXSKT2Ni8cN4ZpTM/jWo3PI3rCTM0YNYMaq7aR3MC4aO4QLPj2Y8z89pObf9sfPfMzmXSW8eeOZTFu+jQ07isgrLOWWi45mV3EZZZVVrN9ezBWTZnLU4F6MGtSDs44cyC9fXszz15/G7ZOXkrV+J6UVVfTsnM43TvkU+UWlNcNEVZ9//LA+XDzuUP7ff/Y1Wtz11bE195mOHdqboX268uaSLYwb1ocFG3cBwf2qu742joqqKkrKKunWKZ2jfvUmAKMH9aBTeof9ekT+7RvHs6VgL3+csoKzjzyE1xfl7vfzPLhXF2794tH07d6Rxz9cz5SlW+v8vTttZNDV/u1lWykuq+TCYwezvbCMOevz6dE5nT2lFQ3+Zw/gpIx+lFZWsWdv+X6dosYP68P88PvVVn3spjj7yIGMHtST1dv2cMyhvZi2YhuLN+3m+2eNDK5NWhrLcnfzxMz1HH94X95vQies75w+nK+fPIzBvbsyd30+f522mqwNOxk+oDufHT2Qpbm76Zwe1JCWbt4d/P6507dbJ3J27psU9IxRA1iYU0BBSTlm+/5995ZXMrh3FwDMjPKKKgpKymtqiB1jRje49LjD9nsM4mC0lQR1GXBerQR1krv/qK7tW1qDEhGR5KsvQUWnETKQA8TWFQ8DNtezrYiItGNRS1BzgVFmNtzMOgFXAq8lOSYREUmCSD1o4O4VZnYD8BZBN/NH3X1JI7uJiEg7FKkEBeDuk4HJyY5DRESSK2pNfCIiIoASlIiIRJQSlIiIRJISlIiIRJwADSoAAAewSURBVJISlIiIRFKkRpJoLjPLA1o61tEAYHsrhJMqdL2aT9eseXS9mqc9XK9PufsBY7i16QTVGswsq64hNqRuul7Np2vWPLpezdOer5ea+EREJJKUoEREJJKUoGBSsgNoY3S9mk/XrHl0vZqn3V6vlL8HJSIi0aQalIiIRJISlIiIRFJKJygzO9/MVpjZajObmOx4ksnM1pvZIjObb2ZZYVk/M5tqZqvC975huZnZfeF1W2hmx8cc55pw+1Vmdk2yvk9rM7NHzWybmS2OKWu162NmJ4TXf3W4r9HG1XPNbjOzTeHP2XwzuzBm3S/C77/CzM6LKa/z9zScN252eC2fDeeQa7PMbJiZvWtmy8xsiZn9OCxP3Z8zd0/JF8F8U2uAEUAnYAFwdLLjSuL1WA8MqFV2FzAxXJ4I/F+4fCHwBmDAKcDssLwfsDZ87xsu9032d2ul63MmcDywOB7XB5gDnBru8wZwQbK/c5yu2W3Az+rY9ujwd7AzMDz83Uxr6PcUeA64Mlx+EPh+sr9zC6/XEOD4cLknsDK8Lin7c5bKNaiTgNXuvtbdy4BngEuSHFPUXAI8ES4/AXw5pvwfHpgF9DGzIcB5wFR3z3f3ncBU4PxEBx0P7j4dyK9V3CrXJ1zXy91nevBX5B8xx2qz6rlm9bkEeMbdS919HbCa4He0zt/T8H/+nwNeCPePvf5tkrvnuvu8cLkQWAYMJYV/zlI5QQ0FNsZ8zgnLUpUDU8ws28wmhGWD3D0Xgl8e4JCwvL5rl2rXtLWuz9BwuXZ5e3VD2CT1aHVzFc2/Zv2BXe5eUau8XTCzDOA4YDYp/HOWygmqrrbXVO5zf7q7Hw9cAPzQzM5sYNv6rp2uaaC51yeVrtsDwEhgPJAL3B2W65qFzKwH8CJwo7vvbmjTOsra1TVL5QSVAwyL+XwYsDlJsSSdu28O37cBLxM0rWwNmwUI37eFm9d37VLtmrbW9ckJl2uXtzvuvtXdK929CniI4OcMmn/NthM0aaXXKm/TzKwjQXJ6yt1fCotT9ucslRPUXGBU2BOoE3Al8FqSY0oKM+tuZj2rl4FzgcUE16O6B9A1wKvh8mvAt8JeRKcABWHTw1vAuWbWN2y6OTcsa69a5fqE6wrN7JTw3sq3Yo7VrlT/oQ1dSvBzBsE1u9LMOpvZcGAUwQ39On9Pw3so7wJfC/ePvf5tUvhv/wiwzN3viVmVuj9nye6lkcwXQS+YlQS9hG5JdjxJvA4jCHpHLQCWVF8Lgnb+d4BV4Xu/sNyAv4bXbRGQGXOs7xDc4F4NfDvZ360Vr9HTBE1S5QT/E/1ua14fIJPgj/Ua4H7CUV7a8quea/bP8JosJPgDOyRm+1vC77+CmN5l9f2ehj+3c8Jr+TzQOdnfuYXX6zMETW4Lgfnh68JU/jnTUEciIhJJqdzEJyIiEaYEJSIikaQEJSIikaQEJSIikaQEJSIikaQEJRIys8qYUbbnh8PNtBtmdpyZPRwuX2tm99da/56ZZTaw/zNmNirecYpUS298E5GUUeLu4+tbaWbpvm/st7boZuB3Ldj/AeAm4HutE45Iw1SDEmlAWNN43sz+DUwJy/7XzOaGA57+JmbbW8J5i942s6fN7GdheU3NxMwGmNn6cDnNzP4Qc6zrwvKzwn1eMLPlZvZU9bw9ZnaimX1kZgvMbI6Z9TSzGWY2PiaOD81sbK3v0RMY6+4LmvCdvxRTi1xhZuvCVTOAz8cMLyQSV/pBE9mnq5nND5fXuful4fKpBH/c883sXIJheE4ieJL/tXBg3SKCYXiOI/i9mgdkN3K+7xIMT3OimXUGPjSzKeG644BjCMZK+xA43czmAM8CV7j7XDPrBZQADwPXAjea2WiCERUW1jpX9QgCsa4ws8/EfD4CwN1fIxz2y8yeA94Py6vMbDUwrgnfTaTFlKBE9qmviW+qu1fPa3Ru+Po4/NyDIGH1BF5292IAM2vKuI7nAmPNrHo8ud7hscqAOe6eEx5rPpABFAC57j4XwMORrs3seeBWM/tfgiFuHq/jXEOAvFplz7r7DdUfzOy92JVmdhPBNflrTPE24FCUoCQBlKBEGlcUs2zAHe7+99gNzOxG6p+6oIJ9zeldah3rR+6+34C6ZnYWUBpTVEnwu2p1ncPdi81sKsEEdpcT1JZqK6l17gaZ2TnAZQSz4sbqEh5LJO50D0qked4CvmPBnD2Y2VAzOwSYDlxqZl3D+z0Xx+yzHjghXP5arWN934IpFjCz0eFo8vVZDhxqZieG2/eMuR/0MHAfMDemthdrGWETXmPM7FPA34DL3b12MhpNMKCwSNypBiXSDO4+xcyOAmaG/Rb2AN9093lm9izBCNQbCDoUVPsj8JyZXQ1Miyl/mKDpbl7YCSKPBqbgdvcyM7sC+IuZdSWoyXwe2OPu2Wa2G3isnn2Xm1lvM+vpwXTiDbmWYATtl8PvuNndLzSzQQRNfrmN7C/SKjSauUgcmNltBInjjwk636HAe8AYDyYDrGubnwCF7v7wQZ7jJ8Bud3/koAMVaQY18Ym0cWb2LWA2wVxJdSan0APsf2+ruXYBT7Rgf5FmUQ1KREQiSTUoERGJJCUoERGJJCUoERGJJCUoERGJJCUoERGJpP8Ps1/MWFHWl60AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "transfer = response.make_spectrum()\n", "transfer.plot()\n", "decorate(xlabel='Frequency (Hz)', ylabel='Amplitude')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the signal:" ] }, { "cell_type": "code", "execution_count": 6, "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": 7, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "violin = read_wave('92002__jcveliz__violin-origional.wav')\n", "\n", "start = 0.11\n", "violin = violin.segment(start=start)\n", "violin.shift(-start)\n", "\n", "violin.truncate(2**16)\n", "violin.zero_pad(2**17)\n", "\n", "violin.normalize()\n", "violin.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And its spectrum:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "spectrum = violin.make_spectrum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can multiply the DFT of the signal by the transfer function, and convert back to a wave:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "output = (spectrum * transfer).make_wave()\n", "output.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result doesn't look like it wraps around:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "output.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we don't hear the extra note at the beginning:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We should get the same results from `np.convolve` and `scipy.signal.fftconvolve`.\n", "\n", "First I'll get rid of the zero padding:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "response.truncate(2**16)\n", "response.plot()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "violin.truncate(2**16)\n", "violin.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can compare to `np.convolve`:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "output2 = violin.convolve(response)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are similar:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "output2.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And sound the same:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output2.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But the results are not exactly the same length:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "(131072, 131071)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(output), len(output2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`scipy.signal.fftconvolve` does the same thing, but as the name suggests, it uses the FFT, so it is substantially faster:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "from thinkdsp import Wave\n", "\n", "import scipy.signal\n", "ys = scipy.signal.fftconvolve(violin.ys, response.ys)\n", "output3 = Wave(ys, framerate=violin.framerate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results look the same." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "output3.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And sound the same:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output3.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And within floating point error, they are the same:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "1.7763568394002505e-14" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output2.max_diff(output3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 2 \n", "\n", "The Open AIR library provides a \"centralized... on-line resource for\n", "anyone interested in auralization and acoustical impulse response\n", "data\" (http://www.openairlib.net). Browse their collection\n", "of impulse response data and download one that sounds interesting.\n", "Find a short recording that has the same sample rate as the impulse\n", "response you downloaded.\n", "\n", "Simulate the sound of your recording in the space where the impulse\n", "response was measured, computed two way: by convolving the recording\n", "with the impulse response and by computing the filter that corresponds\n", "to the impulse response and multiplying by the DFT of the recording." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Solution:* I downloaded the impulse response of the Lady Chapel at St Albans Cathedral http://www.openairlib.net/auralizationdb/content/lady-chapel-st-albans-cathedral\n", "\n", "Thanks to Audiolab, University of York: Marcin Gorzel, Gavin Kearney, Aglaia Foteinou, Sorrel Hoare, Simon Shelley.\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('stalbans_a_mono.wav'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/stalbans_a_mono.wav" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "response = read_wave('stalbans_a_mono.wav')\n", "\n", "start = 0\n", "duration = 5\n", "response = response.segment(duration=duration)\n", "response.shift(-start)\n", "\n", "response.normalize()\n", "response.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it sounds like:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The DFT of the impulse response is the transfer function:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "transfer = response.make_spectrum()\n", "transfer.plot()\n", "decorate(xlabel='Frequency (Hz)', ylabel='Amplitude')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the transfer function on a log-log scale:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "transfer.plot()\n", "decorate(xlabel='Frequency (Hz)', ylabel='Amplitude',\n", " xscale='log', yscale='log')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can simulate what a recording would sound like if it were played in the same room and recorded in the same way. Here's the trumpet recording we have used before:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('170255__dublie__trumpet.wav'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/170255__dublie__trumpet.wav" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave = read_wave('170255__dublie__trumpet.wav')\n", "\n", "start = 0.0\n", "wave = wave.segment(start=start)\n", "wave.shift(-start)\n", "\n", "wave.truncate(len(response))\n", "wave.normalize()\n", "wave.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it sounds like before transformation:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we compute the DFT of the violin recording." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "spectrum = wave.make_spectrum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I trimmed the violin recording to the same length as the impulse response:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "(110251, 110251)" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(spectrum.hs), len(transfer.hs)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "array([0.00000e+00, 2.00000e-01, 4.00000e-01, ..., 2.20496e+04,\n", " 2.20498e+04, 2.20500e+04])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spectrum.fs" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "array([0.00000e+00, 2.00000e-01, 4.00000e-01, ..., 2.20496e+04,\n", " 2.20498e+04, 2.20500e+04])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transfer.fs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can multiply in the frequency domain and the transform back to the time domain." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "output = (spectrum * transfer).make_wave()\n", "output.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a comparison of the original and transformed recordings:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave.plot()" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "output.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it sounds like:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we recognize this operation as convolution, we can compute it using the convolve method:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "convolved2 = wave.convolve(response)\n", "convolved2.normalize()\n", "convolved2.make_audio()" ] } ], "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 }