{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## ThinkDSP\n", "\n", "This notebook contains solutions to exercises in Chapter 11: Modulation and sampling\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": 5, "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": 6, "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", "As we have seen, if you sample a signal at too low a\n", "framerate, frequencies above the folding frequency get aliased.\n", "Once that happens, it is no longer possible to filter out\n", "these components, because they are indistinguishable from\n", "lower frequencies.\n", "\n", "It is a good idea to filter out these frequencies *before*\n", "sampling; a low-pass filter used for this purpose is called\n", "an ``anti-aliasing filter''.\n", "\n", "Returning to the drum solo example, apply a low-pass filter\n", "before sampling, then apply the low-pass filter again to remove\n", "the spectral copies introduced by sampling. The result should\n", "be identical to the filtered signal.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Solution:* I'll load the drum solo again." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('263868__kevcio__amen-break-a-160-bpm.wav'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/263868__kevcio__amen-break-a-160-bpm.wav" ] }, { "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": [ "from thinkdsp import read_wave\n", "\n", "wave = read_wave('263868__kevcio__amen-break-a-160-bpm.wav')\n", "wave.normalize()\n", "wave.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This signal is sampled at 44100 Hz. Here's what it sounds like." ] }, { "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": [ "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's the spectrum:" ] }, { "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": [ "spectrum = wave.make_spectrum(full=True)\n", "spectrum.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'll reduce the sampling rate by a factor of 3 (but you can change this to try other values):" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "factor = 3\n", "framerate = wave.framerate / factor\n", "cutoff = framerate / 2 - 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before sampling we apply an anti-aliasing filter to remove frequencies above the new folding frequency, which is `framerate/2`:" ] }, { "cell_type": "code", "execution_count": 14, "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": [ "spectrum.low_pass(cutoff)\n", "spectrum.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it sounds like after filtering (still pretty good)." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filtered = spectrum.make_wave()\n", "filtered.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the function that simulates the sampling process:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "from thinkdsp import Wave\n", "\n", "def sample(wave, factor):\n", " \"\"\"Simulates sampling of a wave.\n", " \n", " wave: Wave object\n", " factor: ratio of the new framerate to the original\n", " \"\"\"\n", " ys = np.zeros(len(wave))\n", " ys[::factor] = np.real(wave.ys[::factor])\n", " return Wave(ys, framerate=wave.framerate) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result contains copies of the spectrum near 20 kHz; they are not very noticeable:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sampled = sample(filtered, factor)\n", "sampled.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But they show up when we plot the spectrum:" ] }, { "cell_type": "code", "execution_count": 22, "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": [ "sampled_spectrum = sampled.make_spectrum(full=True)\n", "sampled_spectrum.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can get rid of the spectral copies by applying the anti-aliasing filter again:" ] }, { "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": [ "sampled_spectrum.low_pass(cutoff)\n", "sampled_spectrum.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We just lost half the energy in the spectrum, but we can scale the result to get it back:" ] }, { "cell_type": "code", "execution_count": 24, "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": [ "sampled_spectrum.scale(factor)\n", "spectrum.plot()\n", "sampled_spectrum.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the difference between the spectrum before and after sampling should be small." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "1.8189894035458565e-12" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spectrum.max_diff(sampled_spectrum)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After filtering and scaling, we can convert back to a wave:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interpolated = sampled_spectrum.make_wave()\n", "interpolated.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the difference between the interpolated wave and the filtered wave should be small." ] }, { "cell_type": "code", "execution_count": 27, "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": [ "filtered.plot()\n", "interpolated.plot()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "5.56290642113787e-16" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filtered.max_diff(interpolated)" ] }, { "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 }