{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## ThinkDSP\n", "\n", "This notebook contains solutions to exercises in Chapter 5: Autocorrelation\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": 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": [ "## Exercise 1\n", "\n", "If you did the exercises in the previous chapter, you downloaded\n", "the historical price of BitCoins and estimated the power spectrum\n", "of the price changes. Using the same data, compute the autocorrelation\n", "of BitCoin prices. Does the autocorrelation function drop off quickly? Is there evidence of periodic behavior?" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('BTC_USD_2013-10-01_2020-03-26-CoinDesk.csv'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/BTC_USD_2013-10-01_2020-03-26-CoinDesk.csv" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "df = pd.read_csv('BTC_USD_2013-10-01_2020-03-26-CoinDesk.csv', \n", " parse_dates=[0])\n", "\n", "ys = df['Closing Price (USD)']\n", "ts = df.index" ] }, { "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 Wave\n", "\n", "wave = Wave(ys, ts, framerate=1)\n", "wave.plot()\n", "decorate(xlabel='Time (days)',\n", " ylabel='Price of BitCoin ($)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the autocorrelation function using the statistical definition, which unbiases, normalizes, and standardizes; that is, it shifts the mean to zero, divides through by standard deviation, and divides the sum by N." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def autocorr(wave):\n", " \"\"\"Computes and plots the autocorrelation function.\n", "\n", " wave: Wave\n", " \"\"\"\n", " lags = np.arange(len(wave.ys)//2)\n", " corrs = [serial_corr(wave, lag) for lag in lags]\n", " return lags, corrs" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def serial_corr(wave, lag=1):\n", " \"\"\"Computes serial correlation with given lag.\n", "\n", " wave: Wave\n", " lag: integer, how much to shift the wave\n", "\n", " returns: float correlation coefficient\n", " \"\"\"\n", " n = len(wave)\n", " y1 = wave.ys[lag:]\n", " y2 = wave.ys[:n-lag]\n", " corr_mat = np.corrcoef(y1, y2)\n", " return corr_mat[0, 1]" ] }, { "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": [ "lags, corrs = autocorr(wave)\n", "plt.plot(lags, corrs)\n", "decorate(xlabel='Lag',\n", " ylabel='Correlation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ACF drops off slowly as lag increases, suggesting some kind of pink noise." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compare my implementation of `autocorr` with `np.correlate`, which uses the definition of correlation used in signal processing. It doesn't unbias, normalize, or standardize the wave." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "N = len(wave)\n", "corrs2 = np.correlate(wave.ys, wave.ys, mode='same')\n", "lags = np.arange(-N//2, N//2)\n", "plt.plot(lags, corrs2)\n", "decorate(xlabel='Lag',\n", " ylabel='Dot product')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The second half of the result corresponds to positive lags:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "N = len(corrs2)\n", "half = corrs2[N//2:]\n", "plt.plot(half)\n", "decorate(xlabel='Lag',\n", " ylabel='Dot product')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can standardize the results after the fact by dividing through by `lengths`:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "lengths = range(N, N//2, -1)\n", "half /= lengths\n", "half /= half[0]\n", "plt.plot(half)\n", "decorate(xlabel='Lag',\n", " ylabel='Dot product')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can compare the two." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(corrs, label='autocorr')\n", "plt.plot(half, label='correlate')\n", "decorate(xlabel='Lag', ylabel='Correlation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Even after standardizing, the results look substantially different. \n", "\n", "For this dataset, the statistical definition of ACF is probably more appropriate." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 2\n", "\n", "The example code in `chap05.ipynb` shows how to use autocorrelation\n", "to estimate the fundamental frequency of a periodic signal.\n", "Encapsulate this code in a function called `estimate_fundamental`,\n", "and use it to track the pitch of a recorded sound.\n", "\n", "To see how well it works, try superimposing your pitch estimates on a\n", "spectrogram of the recording." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "if not os.path.exists('28042__bcjordan__voicedownbew.wav'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/28042__bcjordan__voicedownbew.wav" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from thinkdsp import read_wave\n", "\n", "wave = read_wave('28042__bcjordan__voicedownbew.wav')\n", "wave.normalize()\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'll use the same example from `chap05.ipynb`. Here's the spectrogram:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave.make_spectrogram(2048).plot(high=4200)\n", "decorate(xlabel='Time (s)', \n", " ylabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's a function that encapsulates the code from Chapter 5. In general, finding the first, highest peak in the autocorrelation function is tricky. I kept it simple by specifying the range of lags to search." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def estimate_fundamental(segment, low=70, high=150):\n", " lags, corrs = autocorr(segment)\n", " lag = np.array(corrs[low:high]).argmax() + low\n", " period = lag / segment.framerate\n", " frequency = 1 / period\n", " return frequency" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's an example of how it works." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "436.63366336633663" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "duration = 0.01\n", "segment = wave.segment(start=0.2, duration=duration)\n", "freq = estimate_fundamental(segment)\n", "freq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's a loop that tracks pitch over the sample.\n", "\n", "The `ts` are the mid-points of each segment." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "step = 0.05\n", "starts = np.arange(0.0, 1.4, step)\n", "\n", "ts = []\n", "freqs = []\n", "\n", "for start in starts:\n", " ts.append(start + step/2)\n", " segment = wave.segment(start=start, duration=duration)\n", " freq = estimate_fundamental(segment)\n", " freqs.append(freq)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the pitch-tracking curve superimposed on the spectrogram:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave.make_spectrogram(2048).plot(high=900)\n", "plt.plot(ts, freqs, color='white')\n", "decorate(xlabel='Time (s)', \n", " ylabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looks pretty good!" ] }, { "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 }