{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## ThinkDSP\n", "\n", "This notebook contains code examples from Chapter 11: Modulation and sampling\n", "\n", "Copyright 2015 Allen Downey\n", "\n", "Special thanks to my colleague Siddhartan Govindasamy; the sequence of topics in this notebook is based on material he developed for Signals and Systems at Olin College, which he and Oscar Mur-Miranda and I co-taught in Spring 2015.\n", "\n", "License: [Creative Commons Attribution 4.0 International](http://creativecommons.org/licenses/by/4.0/)" ] }, { "cell_type": "code", "execution_count": 1, "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": [ "## Convolution with impulses\n", "\n", "To demonstrate the effect of convolution with impulses, I'll load a short beep sound." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('253887__themusicalnomad__positive-beeps.wav'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/253887__themusicalnomad__positive-beeps.wav" ] }, { "cell_type": "code", "execution_count": 4, "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('253887__themusicalnomad__positive-beeps.wav')\n", "wave.normalize()\n", "wave.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it sounds like." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's a sequence of 4 impulses with diminishing amplitudes:" ] }, { "cell_type": "code", "execution_count": 6, "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 Impulses\n", "\n", "imp_sig = Impulses([0.005, 0.3, 0.6, 0.9], amps=[1, 0.5, 0.25, 0.1])\n", "impulses = imp_sig.make_wave(start=0, duration=1.0, framerate=wave.framerate)\n", "impulses.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we convolve the wave with the impulses, we get 4 shifted, scaled copies of the original sound." ] }, { "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": [ "convolved = wave.convolve(impulses)\n", "convolved.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it sounds like." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "convolved.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Amplitude modulation (AM)\n", "\n", "The previous example gives some insight into how AM works.\n", "\n", "First I'll load a recording that sounds like AM radio." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('105977__wcfl10__favorite-station.wav'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/105977__wcfl10__favorite-station.wav" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave = read_wave('105977__wcfl10__favorite-station.wav')\n", "wave.unbias()\n", "wave.normalize()\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the spectrum looks like:" ] }, { "cell_type": "code", "execution_count": 11, "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()\n", "spectrum.plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the following examples, it will be more useful to look at the full spectrum, which includes the negative frequencies. Since we are starting with a real signal, the spectrum is always symmetric." ] }, { "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()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Amplitude modulation works my multiplying the input signal by a \"carrier wave\", which is a cosine, 10 kHz in this example." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "from thinkdsp import CosSignal\n", "\n", "carrier_sig = CosSignal(freq=10000)\n", "carrier_wave = carrier_sig.make_wave(duration=wave.duration, framerate=wave.framerate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `*` operator performs elementwise multiplication." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "modulated = wave * carrier_wave" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result sounds pretty horrible." ] }, { "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": [ "modulated.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Why? Because multiplication in the time domain corresponds to convolution in the frequency domain. The DFT of the carrier wave is two impulses; convolution with those impulses makes shifted, scaled copies of the spectrum.\n", "\n", "Specifically, AM modulation has the effect of splitting the spectrum in two halves and shifting the frequencies by 10 kHz (notice that the amplitudes are half what they were in the previous plot)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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