{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## ThinkDSP\n", "\n", "This notebook contains code examples from Chapter 2: Harmonics\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": "markdown", "metadata": {}, "source": [ "## Waveforms and harmonics\n", "\n", "Create a triangle signal and plot a 3 period segment." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from thinkdsp import TriangleSignal\n", "from thinkdsp import decorate\n", "\n", "signal = TriangleSignal(200)\n", "duration = signal.period*3\n", "segment = signal.make_wave(duration, framerate=10000)\n", "segment.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make a wave and play it." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave = signal.make_wave(duration=0.5, framerate=10000)\n", "wave.apodize()\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute its spectrum and plot it." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "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": [ "Make a square signal and plot a 3 period segment." ] }, { "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 SquareSignal\n", "\n", "signal = SquareSignal(200)\n", "duration = signal.period*3\n", "segment = signal.make_wave(duration, framerate=10000)\n", "segment.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make a wave and play it." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave = signal.make_wave(duration=0.5, framerate=10000)\n", "wave.apodize()\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute its spectrum and plot it." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "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": [ "Create a sawtooth signal and plot a 3 period segment." ] }, { "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": [ "from thinkdsp import SawtoothSignal\n", "\n", "signal = SawtoothSignal(200)\n", "duration = signal.period*3\n", "segment = signal.make_wave(duration, framerate=10000)\n", "segment.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make a wave and play 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 = signal.make_wave(duration=0.5, framerate=10000)\n", "wave.apodize()\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute its spectrum and plot it." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "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": [ "### Aliasing\n", "\n", "Make a cosine signal at 4500 Hz, make a wave at framerate 10 kHz, and plot 5 periods." ] }, { "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": [ "from thinkdsp import CosSignal\n", "\n", "signal = CosSignal(4500)\n", "duration = signal.period*5\n", "segment = signal.make_wave(duration, framerate=10000)\n", "segment.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make a cosine signal at 5500 Hz, make a wave at framerate 10 kHz, and plot the same duration.\n", "\n", "With framerate 10 kHz, the folding frequency is 5 kHz, so a 4500 Hz signal and a 5500 Hz signal look exactly the same." ] }, { "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": [ "signal = CosSignal(5500)\n", "segment = signal.make_wave(duration, framerate=10000)\n", "segment.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make a triangle signal and plot the spectrum. See how the harmonics get folded." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "signal = TriangleSignal(1100)\n", "segment = signal.make_wave(duration=0.5, framerate=10000)\n", "spectrum = segment.make_spectrum()\n", "spectrum.plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Amplitude and phase\n", "\n", "Make a sawtooth wave." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "signal = SawtoothSignal(500)\n", "wave = signal.make_wave(duration=1, framerate=10000)\n", "segment = wave.segment(duration=0.005)\n", "segment.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Play it." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extract the wave array and compute the real FFT (which is just an FFT optimized for real inputs)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 5.11590770e-13+0.00000000e+00j, 2.19700679e-13-1.34559298e-13j,\n", " -2.09548671e-13-6.74603523e-14j, ...,\n", " 4.19606174e-13+3.46000979e-14j, -5.63280756e-13+5.74915022e-14j,\n", " -5.26315789e+02+0.00000000e+00j])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "\n", "hs = np.fft.rfft(wave.ys)\n", "hs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the frequencies that match up with the elements of the FFT." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.000e+00, 1.000e+00, 2.000e+00, ..., 4.998e+03, 4.999e+03,\n", " 5.000e+03])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n = len(wave.ys) # number of samples\n", "d = 1 / wave.framerate # time between samples\n", "fs = np.fft.rfftfreq(n, d)\n", "fs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the magnitudes vs the frequencies." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAcXklEQVR4nO3df5Rc5X3f8fcHSQgaFCTMwpElEcmJSCz32IKsBT2kORQcIeQ2wudALNoamZDKTaE1bmoX7MYYO7SkdUwPDZDIRkbkEIQM5qBSEVD4EWLH6BcIISGIFhCwSEZrC8QPYQlJ3/5xn2FHu7M/tD/mPjPzeZ0zZ2a+c2fuc5/dmc/ce5+5VxGBmZlZbo4quwFmZma1OKDMzCxLDigzM8uSA8rMzLLkgDIzsyw5oMzMLEsDBpSkYyStlfS0pC2Srk312yS9JGljusxOdUm6UVKHpE2STq96rUWStqXLotFbLDMza3RjBzHNPuCciHhH0jjgR5IeSI99OSLu7jH9+cDMdDkDuAU4Q9IJwDVAOxDABkkrI+KNvmZ84oknxvTp049ogczMrLFs2LDhZxHR1rM+YEBF8Uved9LdcenS3697FwC3p+c9IWmipMnA2cDqiNgNIGk1MA+4s68Xmj59OuvXrx+oiWZm1sAkvVyrPqh9UJLGSNoI7KIImTXpoevSZrwbJI1PtSnAq1VP70y1vupmZma9DCqgIuJgRMwGpgJzJP1T4GrgN4BPAicA/zVNrlov0U/9MJIWS1ovaX1XV9dgmmdmZk3oiEbxRcSbwGPAvIjYGYV9wPeBOWmyTmBa1dOmAjv6qfecx5KIaI+I9ra2XpskzcysRQxmFF+bpInp9rHAp4Dn0n4lJAm4ANicnrISuCSN5jsT2BMRO4EHgbmSJkmaBMxNNTMzs14GM4pvMrBM0hiKQFsREfdLekRSG8Wmu43Av0/TrwLmAx3AXuBSgIjYLelbwLo03TcrAybMzMx6Us6n22hvbw+P4jMza26SNkREe8+6jyRhZmZZckCZmVmWHFB18vDW13lwy0/LboaZWcMYzCAJGwGXLSv2pW2//tMlt8TMrDF4DcrMzLLkgDIzsyw5oMzMLEsOKDMzy5IDyszMsuSAMjOzLDmgzMwsSw4oMzPLkgPKzMyy5IAyM7MsOaDMzCxLDigzM8uSA8rMzLLkgDIzsyw5oMzMLEsOKDMzy5IDyszMsuSAMjOzLDmgzMwsSwMGlKRjJK2V9LSkLZKuTfUZktZI2ibpLklHp/r4dL8jPT696rWuTvXnJZ03WgtlZmaNbzBrUPuAcyLiE8BsYJ6kM4E/BW6IiJnAG8BlafrLgDci4teAG9J0SJoFLAQ+BswDbpY0ZiQXxszMmseAARWFd9LdcekSwDnA3am+DLgg3V6Q7pMeP1eSUn15ROyLiJeADmDOiCyFmZk1nUHtg5I0RtJGYBewGngBeDMiDqRJOoEp6fYU4FWA9Pge4EPV9RrPqZ7XYknrJa3v6uo68iUyM7OmMKiAioiDETEbmEqx1vPRWpOla/XxWF/1nvNaEhHtEdHe1tY2mOaZmVkTOqJRfBHxJvAYcCYwUdLY9NBUYEe63QlMA0iPHw/srq7XeI6ZmdlhBjOKr03SxHT7WOBTwFbgUeDCNNki4L50e2W6T3r8kYiIVF+YRvnNAGYCa0dqQczMrLmMHXgSJgPL0oi7o4AVEXG/pGeB5ZL+BHgKuDVNfyvwV5I6KNacFgJExBZJK4BngQPA5RFxcGQXx8zMmsWAARURm4DTatRfpMYovIj4BXBRH691HXDdkTfTzMxajY8kYWZmWXJAmZlZlhxQZmaWJQeUmZllyQFlZmZZckCZmVmWHFBmZpYlB5SZmWXJAWVmZllyQJmZWZYcUGZmliUHlJmZZckBZWZmWXJAmZlZlhxQZmaWJQeUmZllyQFlZmZZckCZmVmWHFBmZpYlB5SZmWXJAWVmZllyQJmZWZYGDChJ0yQ9KmmrpC2Svpjq35D0mqSN6TK/6jlXS+qQ9Lyk86rq81KtQ9JVo7NIZmbWDMYOYpoDwB9FxJOSJgAbJK1Oj90QEd+unljSLGAh8DHgw8DfSjo1PXwT8DtAJ7BO0sqIeHYkFsTMzJrLgAEVETuBnen225K2AlP6ecoCYHlE7ANektQBzEmPdUTEiwCSlqdpHVBmZtbLEe2DkjQdOA1Yk0pXSNokaamkSak2BXi16mmdqdZX3czMrJdBB5Sk44B7gCsj4i3gFuBXgdkUa1h/Vpm0xtOjn3rP+SyWtF7S+q6ursE2z8zMmsygAkrSOIpwuiMifggQEa9HxMGIOAR8l+7NeJ3AtKqnTwV29FM/TEQsiYj2iGhva2s70uUxM7MmMZhRfAJuBbZGxHeq6pOrJvsMsDndXgkslDRe0gxgJrAWWAfMlDRD0tEUAylWjsximJlZsxnMKL6zgM8Bz0jamGpfBS6WNJtiM9124AsAEbFF0gqKwQ8HgMsj4iCApCuAB4ExwNKI2DKCy2JmZk1kMKP4fkTt/Uer+nnOdcB1Neqr+nuemZlZhY8kYWZmWXJAmZlZlhxQZmaWJQeUmZllyQFlZmZZckCZmVmWHFBmZpYlB5SZmWXJAWVmZllyQJmZWZYcUGZmliUHlJmZZckBZWZmWXJAmZlZlhxQZmaWJQeUmZllyQFlZmZZckCZmVmWHFBmZpYlB5SZmWXJAWVmZllyQJmZWZYcUGZmlqUBA0rSNEmPStoqaYukL6b6CZJWS9qWrieluiTdKKlD0iZJp1e91qI0/TZJi0ZvsczMrNENZg3qAPBHEfFR4EzgckmzgKuAhyNiJvBwug9wPjAzXRYDt0ARaMA1wBnAHOCaSqiZmZn1NGBARcTOiHgy3X4b2ApMARYAy9Jky4AL0u0FwO1ReAKYKGkycB6wOiJ2R8QbwGpg3ogujZmZNY0j2gclaTpwGrAGODkidkIRYsBJabIpwKtVT+tMtb7qPeexWNJ6Seu7urqOpHlmZtZEBh1Qko4D7gGujIi3+pu0Ri36qR9eiFgSEe0R0d7W1jbY5pmZWZMZVEBJGkcRTndExA9T+fW06Y50vSvVO4FpVU+fCuzop25mZtbLYEbxCbgV2BoR36l6aCVQGYm3CLivqn5JGs13JrAnbQJ8EJgraVIaHDE31czMzHoZO4hpzgI+BzwjaWOqfRW4Hlgh6TLgFeCi9NgqYD7QAewFLgWIiN2SvgWsS9N9MyJ2j8hSmJlZ0xkwoCLiR9TefwRwbo3pA7i8j9daCiw9kgaamVlr8pEkzMwsSw4oMzPLkgPKzMyy5IAyM7MsOaDMzCxLDigzM8uSA8rMzLLkgDIzsyw5oMzMLEsOKDMzy5IDyszMsuSAMjOzLDmgWsyaF3/Oqf/tAd7cu7/sppiZ9csB1WJufuwF9h84xFOvvll2U8zM+uWAMjOzLDmgWlWU3QAzs/45oFqM+jr1pJlZZhxQZmaWJQeUmZllyQFlZmZZckCZmVmWHFAtKjyMz8wyN2BASVoqaZekzVW1b0h6TdLGdJlf9djVkjokPS/pvKr6vFTrkHTVyC+KmZk1k8GsQd0GzKtRvyEiZqfLKgBJs4CFwMfSc26WNEbSGOAm4HxgFnBxmtbqzKPMzaxRjB1ogoh4XNL0Qb7eAmB5ROwDXpLUAcxJj3VExIsAkpanaZ894hbbsHjDnpk1iuHsg7pC0qa0CXBSqk0BXq2apjPV+qqbmZnVNNSAugX4VWA2sBP4s1SvtQUp+qn3ImmxpPWS1nd1dQ2xedYXb+Izs0YxpICKiNcj4mBEHAK+S/dmvE5gWtWkU4Ed/dRrvfaSiGiPiPa2trahNM/MzJrAkAJK0uSqu58BKiP8VgILJY2XNAOYCawF1gEzJc2QdDTFQIqVQ2+2DVd4Z5SZZW7AQRKS7gTOBk6U1AlcA5wtaTbFZrrtwBcAImKLpBUUgx8OAJdHxMH0OlcADwJjgKURsWXEl8YGJB8t1swaxGBG8V1co3xrP9NfB1xXo74KWHVErbMRF151MrMG4SNJmJlZlhxQLcab+MysUTigzMwsSw6oFuVdUWaWOwdUi/EGPjNrFA6oFuMVJzNrFA4oMzPLkgOqxXgTn5k1CgeUmZllyQHVorwvysxy54BqMf6drpk1CgdUi/Hvn8ysUTigzMwsSw6oFuNNfGbWKBxQZmaWJQdUi8rhvFC3/2Q7215/u+xmmFmmBjxhoTWbfLbxff2+LYw9SnT89/llN8XMMuQ1qJZT/ppTtQOH8mqPmeXDAWVmZllyQLWcfDbxmZn1xwFlZmZZckC1KO/5MbPcOaBajH+oa2aNYsCAkrRU0i5Jm6tqJ0haLWlbup6U6pJ0o6QOSZsknV71nEVp+m2SFo3O4thAMvj5k5nZoAxmDeo2YF6P2lXAwxExE3g43Qc4H5iZLouBW6AINOAa4AxgDnBNJdTMzMxqGTCgIuJxYHeP8gJgWbq9DLigqn57FJ4AJkqaDJwHrI6I3RHxBrCa3qFndeBNfGbWKIa6D+rkiNgJkK5PSvUpwKtV03WmWl/1XiQtlrRe0vqurq4hNs/MzBrdSA+SqPX9PPqp9y5GLImI9ohob2trG9HGWTfvizKz3A01oF5Pm+5I17tSvROYVjXdVGBHP3WrM2/hM7NGMdSAWglURuItAu6rql+SRvOdCexJmwAfBOZKmpQGR8xNNaszrziZWaMY8Gjmku4EzgZOlNRJMRrvemCFpMuAV4CL0uSrgPlAB7AXuBQgInZL+hawLk33zYjoOfDCzMzsAwMGVERc3MdD59aYNoDL+3idpcDSI2qdjThv4jOzRuEjSVjL+/p9mzntmw+V3Qwz68EnLGxZ3htVcftPXi67CWZWg9egWox/qGtmjcIB1WL8+yczaxQOKDMzy5IDykoRXpUzswE4oFqM90GZWaNwQLUor8CYWe4cUGZmliUHlJXCa3C9HToU3LfxNQ4cPFR2U8yy4IAyy8Q9T3byxeUbWfrjl8puilkWHFBmmdj97n4Aut7eV3JLzPLggGox8uFis1UZYenNn2YFB1SLKvszsOz5m1n+HFBmZpYlB5RZJnLa/Proc7vY/NqespthLc6n2zDLTA6bPy+9rTj59fbrP11yS6yVeQ3KLBM+DJXZ4RxQLSaXD0EfLNbMBuKAalHOh3z5b9Ntw8u7+dJdG/2FpkU5oMwyE1nshcrD55eu496nXuPtfQfKboqVwAFlZtnLYQXq0ed38a6Dsq6GFVCStkt6RtJGSetT7QRJqyVtS9eTUl2SbpTUIWmTpNNHYgGsMWXweWM2aNt/9i6Xfn8dX7lnU9lN4f2Dh9h/oDUOKDwSa1D/IiJmR0R7un8V8HBEzAQeTvcBzgdmpsti4JYRmLdZ01AawZLD2kI2KoN6Su6Td9Ka04td75bbEOCs6x/h1//4gbKbwU9e+Dn/+rtP0PnG3lGbx2hs4lsALEu3lwEXVNVvj8ITwERJk0dh/taPXEbxmQ1GLv+uOb1vdr29L4svMT97Zx//8MLP+cX7B0dtHsMNqAAekrRB0uJUOzkidgKk65NSfQrwatVzO1PNSuAd8fnJ6DMwO7n8v3o0Ybd69MRwjyRxVkTskHQSsFrSc/1MW+v912sZU9AtBjjllFOG2TzLld/nNhjKZNUlp8NQ5aI7rEevb4a1BhURO9L1LuBeYA7wemXTXbrelSbvBKZVPX0qsKPGay6JiPaIaG9raxtO88ysSfgLTWsackBJ+iVJEyq3gbnAZmAlsChNtgi4L91eCVySRvOdCeypbAq0+vM3wvx0nw/Kn8YVmaxAZdOOHI1m3wxnE9/JwL1pFXws8NcR8TeS1gErJF0GvAJclKZfBcwHOoC9wKXDmLcNUy7b9K2bPwP7lst/q7879Daa/7dDDqiIeBH4RI36z4Fza9QDuHyo87ORkcuakwPSBiOP/1avQdVSj7D2kSTMMuPo7i2XzZ7+YtXbaA5kcUC1qEze72b98ii+fNUjrB1QZpnI5cM4R7l8n/IXu95G87/WAdWi/FmYL38Idsvl3/SDEZblNiMr3gdlo6bsD8Gy5282FLnsC8vJaH7ZdUC1mly+klov3d/S/SFY0f3bsJLbUe7ss+Q1KLMW4g/BvuUS2nm0Ii+jOYDEAdWi/EazhlL2GpS/PfRSjz+JA8osFz4fVJ+y6ZJsGlK+yv4474OyEecvhNYYcgltv2PK4IBqUaW/361P/tv05n1Q+fEmPhtx/h6YL/9testmFJ//OKVwQFkpyv7AqcW/cclXLn8Z/49USV3hfVA24vxGy5f/NN0qn31l/796BaocDiizpOxg6P4m6oTqqey/TUUmzchCZb+gj2ZuI84HJu3NHz75yeXf1O+XvvlgsTbiyt5kksuorJz4lA59y2YNKpN25MCHOrIR52+CfSs7tK23SmiX/YXG/xt98yAJsxbiz8J8lR2UOfHvoGzE+Ztg38ruGa/c9pbL76Aqsy+7HTmp9IUPFmtWB2V/+Dif+uZcaE0OqBaTyz6ossMgZ+6bbrn8Dqoye/9tunUPMx+9eTigzJJc9i/k0o6cuEdaU90DStI8Sc9L6pB0Vb3nb9YXfzvOV/l/m9IbkJ3ufVCjp64BJWkMcBNwPjALuFjSrHq2odXlsYHPaslk62umHBCtaGyd5zcH6IiIFwEkLQcWAM+Oxsz27H2fGx/ZNhovPWTfun9UFnXQ/mbLTwG4Y80rbOrcU1o73j946IPbZfdJxfUPPMeYo8pLiSdfeQOAVc/8lAnHjCutHdXK/tvs2PMLAG5+7AUm/ZOjS2vHG3v3A/Dam++V3icVZbdj6863ihuj+JZRPXc+SroQmBcRf5Dufw44IyKuqJpmMbAY4JRTTvnNl19+ecjz27nnPX7nO48Pr9Ej5J19BwA4bny9vxPUbsfRY4/i6DHl7oLMrU/Kbsf+A4fYn4K77Lbk0ie5tAPyaUsu7QA4+ZfH8//+0z/nmHFjhvU6kjZERHvPer2XsFbWHpaQEbEEWALQ3t4+rPScfPyxbL72vOG8hJmZlaTeX6E7gWlV96cCO+rcBjMzawD1Dqh1wExJMyQdDSwEVta5DWZm1gDquokvIg5IugJ4EBgDLI2ILfVsg5mZNYa672WLiFXAqnrP18zMGouPJGFmZllyQJmZWZYcUGZmliUHlJmZZckBZWZmWarroY6OlKQuYOjHOup2IvCzEXidZuH+6M190pv7pDf3yeFGqj9+JSLaehazDqiRIml9reM8tSr3R2/uk97cJ725Tw432v3hTXxmZpYlB5SZmWWpVQJqSdkNyIz7ozf3SW/uk97cJ4cb1f5oiX1QZmbWeFplDcrMzBpMUweUpHmSnpfUIemqstszmiQtlbRL0uaq2gmSVkvalq4npbok3Zj6ZZOk06uesyhNv03SojKWZSRImibpUUlbJW2R9MVUb+U+OUbSWklPpz65NtVnSFqTlu+udCocJI1P9zvS49OrXuvqVH9eUsOfFVTSGElPSbo/3W/pPpG0XdIzkjZKWp9q9X/vRERTXihO5/EC8BHgaOBpYFbZ7RrF5f1t4HRgc1XtfwJXpdtXAX+abs8HHqA4w/GZwJpUPwF4MV1PSrcnlb1sQ+yPycDp6fYE4B+BWS3eJwKOS7fHAWvSsq4AFqb6XwB/mG7/B+Av0u2FwF3p9qz0fhoPzEjvszFlL98w++Y/A38N3J/ut3SfANuBE3vU6v7eaeY1qDlAR0S8GBH7geXAgpLbNGoi4nFgd4/yAmBZur0MuKCqfnsUngAmSpoMnAesjojdEfEGsBqYN/qtH3kRsTMinky33wa2AlNo7T6JiHgn3R2XLgGcA9yd6j37pNJXdwPnSlKqL4+IfRHxEtBB8X5rSJKmAp8Gvpfuixbvkz7U/b3TzAE1BXi16n5nqrWSkyNiJxQf2MBJqd5X3zRln6XNMKdRrDG0dJ+kTVkbgV0UHxgvAG9GxIE0SfXyfbDs6fE9wIdosj4B/jfwFeBQuv8h3CcBPCRpg6TFqVb3907dT1hYR6pR85DFQl9903R9Juk44B7gyoh4q/iyW3vSGrWm65OIOAjMljQRuBf4aK3J0nXT94mkfwnsiogNks6ulGtM2jJ9kpwVETsknQSslvRcP9OOWp808xpUJzCt6v5UYEdJbSnL62lVm3S9K9X76pum6jNJ4yjC6Y6I+GEqt3SfVETEm8BjFPsMJkqqfFmtXr4Plj09fjzFZuRm6pOzgN+VtJ1iN8A5FGtUrdwnRMSOdL2L4ovMHEp47zRzQK0DZqbROEdT7NBcWXKb6m0lUBk5swi4r6p+SRp9cyawJ62yPwjMlTQpjdCZm2oNJ+0XuBXYGhHfqXqolfukLa05IelY4FMU++YeBS5Mk/Xsk0pfXQg8EsXe75XAwjSibQYwE1hbn6UYWRFxdURMjYjpFJ8Rj0TEv6GF+0TSL0maULlN8T+/mTLeO2WPFhnNC8Xokn+k2M7+tbLbM8rLeiewE3if4pvLZRTbxh8GtqXrE9K0Am5K/fIM0F71Or9PsYO3A7i07OUaRn/8FsXmhE3AxnSZ3+J98nHgqdQnm4Gvp/pHKD5MO4AfAONT/Zh0vyM9/pGq1/pa6qvngfPLXrYR6p+z6R7F17J9kpb96XTZUvnsLOO94yNJmJlZlpp5E5+ZmTUwB5SZmWXJAWVmZllyQJmZWZYcUGZmliUHlLUsSQfT0Zorl+llt2kkSTpNUuX4cp+X9Oc9Hn9MUns/z18uaeZot9OsL818qCOzgbwXEbP7elDS2Og+Hlsj+irwJ8N4/i0Ux6j7dyPTHLMj4zUosyppTeMHkv4v8FCqfVnSunSum2urpv1aOvfP30q6U9J/SfUP1kwknZgOo1M5UOv/qnqtL6T62ek5d0t6TtId6UgYSPqkpH9QcQ6ntZImSPp7SbOr2vFjSR/vsRwTgI9HxNODWObfrVqLfF7SS+mhvwc+VXXIH7O68j+etbJj05G9AV6KiM+k2/+M4sN9t6S5FIetmUPxi/mVkn4beJfi0DinUbyPngQ2DDC/yygOA/NJSeOBH0t6KD12GvAximOV/Rg4S9Ja4C7gsxGxTtIvA+9RnBbi88CVkk6lOMrBph7zaqc4WkS1z0r6rar7vwYQEStJhwGTtAL4u1Q/JKkD+MQgls1sxDmgrJX1tYlvdURUzq01N12eSvePowisCcC9EbEXQNJgjvM4F/i4pMox3o5Pr7UfWBsRnem1NgLTKU7lsDMi1gFExFvp8R8AfyzpyxSHkrmtxrwmA109andFxBWVO5Ieq35Q0lco+uSmqvIu4MM4oKwEDiiz3t6tui3gf0TEX1ZPIOlK+j51wAG6N58f0+O1/mNEHHbAzHSah31VpYMU703VmkdE7JW0muJEcb9HsbbU03s95t0vSecCF1GcmbnaMem1zOrO+6DM+vcg8PsqziuFpCkqzpHzOPAZScem/T3/quo524HfTLcv7PFaf6jiNCBIOjUdLbovzwEflvTJNP2Eqv1B3wNuBNZVre1V20rahDcQSb8C3Az8XkT0DKNTKQ4YalZ3XoMy60dEPCTpo8BP0riFd4B/GxFPSrqL4ijpL1MMKKj4NrBC0ueAR6rq36PYdPdkGgTRRfdps2vNe7+kzwL/J50e4z2KU2S8E8UJ9t4Cvt/Hc5+TdLykCVGc8r4/n6c4UvW9aRl3RMR8SSdTbPLbOcDzzUaFj2ZuNgIkfYMiOL5dp/l9mOKEg78REYf6mOZLwNsR8b0hzuNLwFsRceuQG2o2DN7EZ9ZgJF0CrKE4T0/NcEpu4fB9W0fqTWDZMJ5vNixegzIzsyx5DcrMzLLkgDIzsyw5oMzMLEsOKDMzy5IDyszMsuSAMjOzLP1/4vCnZjuo+ZUAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "magnitude = np.absolute(hs)\n", "plt.plot(fs, magnitude)\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the phases vs the frequencies." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3dd3wUZf4H8M83IUBoQSAgvUgRRGpEOURpIgiKDcv5U896ttNrKlbUkwPrnfU8Tk/x7Hd2kN47hF5DDTVAaCGQnjy/P3Z22TKzO7s7uzu7+3m/XrxIZiczzz67M9+njyilQEREZDcpsU4AERGRHgYoIiKyJQYoIiKyJQYoIiKyJQYoIiKypWqxOGmjRo1UmzZtYnFqIiKymVWrVh1VSmV6b49JgGrTpg2ys7NjcWoiIrIZEdmjt51NfEREZEsMUEREZEsMUEREZEsMUEREZEsMUEREZEsMUEREZEsMUEREZEsMUEREZEtxH6BKKyoNX5u0JBd7jp3x2Z5fWIof1hxASXklDp8qsSQdBcXlqKyK3rO1snOPY8LUrT7bF27P93lPGw8UIK+g2GPbkVMlOHa6NKJpNGPjgQKs23cSALAr/zRyj/p+XgCglMLYHzdi2sZDIZ3nyKkSzM05Ynr/LXmnsOPIaczechhlFVUhndOf3KNnMHVDnt99DpwsRlWVQl5BMaaszwvp+1VRWYU3Z25DYUm5qf235J3Csl3HgjrHoYISFJcZX4d6lFKYtCQXRWUVhvs4r+2qKuXx3pVS8Pccu6oqhYXb8w33KS6rxPvzdqCi0v/nunTnMd37hzMN36zc5/f+Eyl7jxX5ff/RcOx0Ke6dtBIfLtwV0fPEdYCaufkwOj07DRsPFPi8VlxWibE/bcLoD5b6vHbvp9n4/ddrcf5z03DxX2eHnY6ConJ0f3EGnv1hQ9jHAoD/LNuj+552Hz2DKu1CvfGDpfhg/k6UlHteILd/tMLjPW08UICR7yxC3/FzsDP/NNbsPYF9x4vQ56+z0fvlWdh00PM8q/eewMeLd7uOu+PIabw7ZzvajJmCYX9f4LHvsdOlOFTgGQwrKqvQd/xsDH9rIdqMmYKjp0vR+blpyM49DgDYdrgQp9xuliPfWYRR7y0GAAx6Yz4GvD4Pt05c5vPeV+aewKSle/DAZ6v8Z56B695fgrs+XgmlFCZM3epKj57iskoMf2shhrw5H/dMysar03wLAkVlFVirBdZQDHlzPh78fLXP9tKKShw9XYq7Pl6BfhPm4K3Z29F3/Bw8/MVqVzrKKqow/pctKCwpx2fL9mDg6/MAAGv3ncRF42ahoOhs/k5en4e3Z2/HKzrvQc/wtxbiFp38P+UnwF0yfjZu/2g5lFL4fs1+/HvRbt0b6Pdr9mP8L1sAALO2HMHYnzZh/C/66dp66BQ6PTsNUzfkYeAb89Dl+WkorajEytzjuOrtRWj39C+G6fl0aS5u/2gFftngW5hRSmHsTxvx6rQcfL/mgMdr/1qwC0P/Nt/1+63/WobLX5une44Zmw/jiW/X480Z2wzTEaoXf96Elydv1n3tm5X7cNlrc/HRot1+j1FcVulzb7DSkDfnY9aWI1jp5zqyQtwGqLyCYkxakgsAWLff90ah4LhACkt8S2iHvGoT4Rr3i+PL9OWKfVi15wQAR43K6EL155cNeXjuh40Y+c4ij+2bD57CwNfn4Z8LPEssVQbHv3XiMgx4bS5u+3C5a9vgN+bjuveXoP+rc13bRrzteZ7r31+CF3/ejJenON7TTf9cite1i3DroUKPfXu/PAuXjJ+Nd2ZvR7lWGi0sqUBeQQm25J0CACzZeQzF5ZX4x7ydAIChf1ugG4DmudVuluqU4MsDlHYd6TuF0R8s0S3NHzhZ7ErPB/N34ka3gsubM3Lw8uTNWK6dt/Pz0zz+ds/xIp/jPfbVWlz73mJsPXQK367a7/O6UgpvztyGHUccefbZsj3YlX8a32TvQ3FZJSoMakP3TspG1suzMDcnHwDw1uztrtecn/23q/fjnwt24W8zt+PZHzZit1brfGf2duQXlmLprmMYP3ULjp0uxcwthwEAJeWe+bdo+1GM/XGjbhoAYMr6PFdhaPL6g+j2wgys17nOZmxyBIHsPScwfdNh/OHrdXhp8mZMWpLrynOnP3y9zvUenDWnk8XlGD91C/74zVqPfdfvdxScZm89gj3HilBaUYUHP1uN0R8sxZa8U3B+7Y+dLsXJojKs3nsCu/JPAwD2Hnecd8OBAox4e6FHOj5dugffZDs+rxKvmvG4X7Zg2+HThnniNH3TIfz2P46C0sGC0FpgLhw7HYNen4eth06hz7hZOKq1Zhw8WYyPF+fiQ50AVFml8MS36wEA2bkn/B6/8/PTcP5z0/zuE44TReZq5OEKey0+EakJYAGAGtrx/qeUGhvucQPpO36Oqf2Kyytx18cr8MZNPdCgdvWA+yul8NXKfbimezMoAHVqBM6iOVvP3lxv+McSrHnuCvT8y0wAQOem9dD3vIam0vrj2gN47Ku1uq/tP+G4SToDoJNAdPfXu8kH4t7kkXfSceGVepXCpm7Iw/ALm3pse2PmNtSvXR23X9La55iPfrnGZ9umg6dMbTNyprQCtXU+l5d+3oyVuSeweMdRDO7cGNl7TiCr9TkQOZtH7gEbAOZsPYy35+wAAHy4aDf+fnMPn+O6f75Ozpv1sL8vBABccUET1KuZ5nq9oLgcb8/eji+W70X2s0Pw7A8bff5Wz8LtRw1fc3I24RaXny18HSkswWwtnVM25OHndQex73iRbi0CAP7vI0c+vDiqq+7rD3+xGhOuvxC39GmFRVqaNh08hW4t6nvsd/9/ztZoTxSVuX7+69SteOHnzfjvA32RWacGzrg15bk3Qa/ddwI/r3MEkDdvOpv3S3c6vr/uTdN6n0Pvl2d5/J47YYTr5+9W78eRwlJMWpKLp6/qDMCzIORUUl6J1BT960jPk1qQAHyvD7MKSytQWFqBiQt24UhhKebl5OPG3i381nqMCqPezpQaN5ta7WSEA5UVNahSAIOUUt0B9AAwTEQuseC4YXH/LOfm5OPTpbmoqlIB253n5eTjqe824IKx09F17HRX/8PqvSdctQJ3ZRVVOHq6zGObMzgBQJmJkn9pRSXaPTXFMDhFWmWVwqGCElNBTa9ZCnD0Hy3ZaXxz9b60isoq8P2aszWPFPG8Qazdd9LwYj3k1cd24kwZlu06hiXaTe3eT7Pxv1X7MfqDpfh5vf9+nrs/8Vy0WK+fqrJKYXOAADpxvmfN1vn9q6iq8mke+2zZXp+/P1lUZro/4++zHLWq8sqzudpn3Nlm3Z/XHQQAV2Dxx1//2lGvPsqnvtvg08wb6LjbDhdiwOvzPGrq78/d4fp533H91gxn89viHcEXtIJ1/nPT0Hf82fxTShn2PZnxyBer8eUK38/YDO/rAAD2HS9CUVmF6QBVFGR/YDiW745sE1/YNSjlaMNy1ovTtH+x7cEzMPqfS7Fqzwk0qVfDcJ/TXqWPvIJilFZU4fr3lwDwLKEB5ks1/hw7XYYojq/w8ebMHLw3dydeu7Gbx/ZthwtxRufL/unSXNzap5XHto8X5+LjxblY89wVuudYvfcE2oyZ4vq9y/PTPV73LsBe+95ijLiwKR4ccB4CZbF7gcApV7vB7D12JqiBFUbnKiwpx8YDBVi77yQKin1Lje/O3YE/X9lJ93jXaX1s/vR4aSb6tTdX03YKVNhy/+yM+ty25J1C95b1dV/T493M687Z3BeId4EuVIH6P5wf5cGTxk36V/5tgU+aNh44havfXWT0JwFNXp+HyevzfK4RM3TiE/q/Ohd92jTA4M6NTR3DinuSXVjyuA0RSQWwCkB7AO8ppZbr7HM/gPsBoFWr4D84f/T6mfR4N4+ZsXzXcd0+LrP8NRwopQz7IsxSFpQF5m9z9HccP3P2Ip2bc8TVZOTt+R834UxpcKW0QE0BuTol1ikb8jBFG+n2xb0Xe7w24LW5yEhPw4+PXBrw3M7+NG96I9uMcvOHtQc9SsXn1qvps8/WQ6dw/rn1AHjeaHbm+y+N/05rBjVTW3Bvvgn0ybuPfMs95tuPFkhZpf4ZPlq0G7/u0wofLfKsNTr7zQKZsiEPQy9oEnR6vOkNgHKXX+ioAU5en4d3f62zg1LIOewbcL2DU0l5JcZN2YI/X9kJGelpHq+ZvfoqqxRSBB7NzXr0alAAsCL3uKkadnFZJd6YkeP6/ce1B9A0Ix192jYwmVJ7sWSQhFKqUinVA0ALAH1ExKdhWyk1USmVpZTKysz0eS5VWCZM3eq6ybrO52d/o36bUIRTWHl9Rg46PDMVxWGMtrGysOR+cQSKm1YNz3das9d8IUDguOGu2+870tHJPV+M8ujCF2aYPud2rxuZdzMjAFcTcEVllatp10xp1tkkZ8alr5zte410QTnnkPZ+vL4Mf5m8GW/MyHENnrHKP+btDHqIu7c5Ww/j34v9j3AL1uA35uM/y/bgTbcbf7DOe/oX/OmbdT7bv1t9QGdvfe4DMvQKpkdPl6Lz89Ncg0AAx2Cem/65FDl+ar52ZukoPqXUSQDzAAyz8rhmPBTE8GOjWscvG/Jcpdlo+HLFPgBAUZC1EXdW3KO2ayOXxmlDgM34RBtB6S1AAdFQpG62IuIzmiwUZpL35Yp92He8CCPfWeTqEzJbuzfL6tFTeSZGoek1JX6dvc/SdADAK9O26g5xD4Z3n6IVnN+f06WVePr7DTjt9pn6+94WlpR7FJy/W2McjCqrHHmc4mewRqBLy3vKh7tR74XeZBlLYQcoEckUkfraz+kAhgAwN+nCZj5dmhuT8741O3BJdNLSXADA5oMFHhNsrZiwVxqBiajB0mtqMZIdRFOtVRMad+YHHn68YvdxXPPuIr/9NFYK9Z25N22GOq/M6sAbacFM0jby7er9+GL5Xr/N8hMX7HT9/OiXa3Dnv1eYam145nvHKE+/XQJuPwsE932ajQdNfn6hXuMXjZuFWyb6b0qNJCv6oJoCmKT1Q6UA+EYpNdmC41rqxBlrOmYjYdaWwBePs3/iYEGJx9DaxOkO9c+9//CJ/633s2d4jAKa2eG0wdZwwhktFkzTIODoSykqq8TT35mbUD5902Hc/clK1KtpSVd1TP1v1X4M7OQ1yCDU6r6BnEOF+KvbxGPn1AkzE2adQc+oD0rPzM2HTe8bajktv7AU+YWlWL7rGC5uF9wgHiuEXYNSSq1XSvVUSnVTSnVVSr1kRcKsNmmp7iPvATgmzQW7VAvgWKXB7CCFQMuzhMpuA3ZCXYookO/X6jePBBr2rDcK0U7CWY0iFK9N34ppJkfbAfpzj+isWVsOu+4d3oHIqKJltGSVUsrqmBk0vUnTAHBzmE2voYrblSS8BXMj8h4kUVhagT3HgyvJLtiWj5HvLMJny4wDH3C2kHbRuNnoN8FzcrElActmAWqMydJ5sCoMRpQFak5zrmBhVrSzs9zgfUWKXQo0gUazWU55/AcAmG9y1GEg+7RJ9EZZ6z35evQHS3T323HktN+l15yjEo2YHebvzz/n7wpq4EakJUyAcjdxwU50HTs98I5mGFxHzuVvtuaZ6284eroUBwtK0OsvMy2tZVgxzDweBJrzY5koZ6eZJZysFOsSup3M2mK+iSw0ji+T+yoiALDaYMSqXj/sNoO+Wb3r3rkiipHTpRVYvfcEDpwsjvlis2YlZID61E9zHqA/RNjw87L4czx+psxwXk4o4uR7FrZw54uZNSXACuNWi+akyr3Hi1wjR2PN3w1yeZhDzf2JZHwO96Y/5lvP1ofJ6w9i6N/MrdxhxkOfr8b17y9Bvwlz8PVKe3wPAknIABUqK+dHRUuSxCeyQDCd6pH2/lzjptfPloe2TJA/haUVuOPfK3DwpLXz9wDjQmKwZSrvVWwe+cLaKS/ua0CuDLDYrJ4jFs99NCP+h+dYRMSguczmMStequoUe9F8Xlkg/qYVBDs60YwF26zpbwrG8QiOHI50YfrAyWI0r5/use3wqVI01llBJZISqgZVEMYkxpxDhVi2S2dtL4NrWvy/7LZfZL9I9rnl2Eu85Es0yxcckRcZwcyfjGWB0v1OFKjv2ntAV6wkVIAKpz0/2JXEnWeaEmC1bL0vgpXf0T7jZgXeKQEcCTCCKV75exCg1WJRg3JOQE1kn2tNkmZy1/t5bqHS60cPiltir31vMV6fHvoyTpGUUAHKOdzTUgEqQGYepxFJNmq1oRC8Os2eNwYK3iadp2B7mzDVmkV2wp0/537bWLvvJN6d638EYKwkVICyevFKK8TjwAtKTBxiHlnP/bgpZufWe1adt3DnnpVXRb8wnlABKhIicU3zRkGx4O9rt/9EEQfcxLHhby0Man+zD8d0Z1XtLxgMUAEYXbJmY4y/YMTbAUWT0eNJth8uxKWvzLWsf4Si666PV5jaz/1W9MuG4BcLWB/Gc/FCxQAViFcUCeW5KuO9HmPhLKiaXYCUgsfKgHnOhXgjOUGWIsfsgyLj8ZJggArSlQEWJ9XDkinZmfuTgvXE442NEkNCBaijkRiKzP6iuMR+PvO2xOnTVik4wV4SVV5DhEvKOUgiLJtNjGQhIk9lAR5mx1ifnN6fF/uh5wkVoCJBEF5pXO9PI1W65yiss0LpKyRKJqv26Kyc4/F68Ov1WS0hA5TV92m7H498cVkfiiYzT82NNe+C8e8sXow2EhIyQFmJsYSIArHysRjRcrCgBPNy7F2QS8gAlawd5KyZUSTwaxXY3uMRWGbNcr43xt98vDIG6TAvIQOUlZI01hG5cL1HihUGKBOStUZGBETm+Uxkf3YolyRkgLLVoAaD4BZoaG8wpm10LFtihy8UEZFVEjJAxYO/ei1/FI79kXjMCBElNTs0HCVkgLKySc5wsdgwz8FJxUQUTVbcF61s+TEj4QJUPMxHiBRO1CUiq+gtQhvOU8tDEXaAEpGWIjJXRLaIyCYRecyKhIVq5ubDlh7PaCWJsD8nE3//1HfrGXSIKGlZUYOqAPAnpVRnAJcAeFhEulhw3JBZeU8P9ymUf/5mXch/++WKfXwkBxFZwg59SsGqFu4BlFJ5APK0nwtFZAuA5gA2h3tsO1BKhRXwDhaU+Gw7cLIYB04Wh5EqfaxrEVEisbQPSkTaAOgJYLnOa/eLSLaIZOfnm3vAVihOFpdHZd4S50YRUTwpKI6/1hjLApSI1AHwLYDfK6V8hqgppSYqpbKUUlmZmZlWndbHcz9sjNixiYjiVWmUR+BZwZIAJSJpcASnz5VS31lxTDuJZW0pmGY7jqcgokRixSg+AfARgC1KqTfDT1L4In2jHvXuIlutT7b/hPX9WUREsWZFDaofgNsBDBKRtdq/qyw4rm2t21+AwhL7tOd+siQ31kkgoji37XDgh3ze9M+lUUjJWVaM4lsEm41gtLpJLl6azhTH8RFRiG74x5KA+6zfX4CvVuyNQmocEm4lCSIiCl5hSYWp/cZ8tyHCKTkrIQOU1X0yejWyV6flWHoOIiLylJABykrx1GgWL02RRERmMEAFwps+EVFMMEAFIqyZEBHFAgOUzXE1cyJKVgxQJnDdPSKi6GOAIiIiWwp7om7Ci3ELW0FxOT5fbm5iHFsDiSiRMEDZ3KA35pvar8pOiwMSEVmATXyBxMkovvfm7oh1EoiILMUAFUgcBCcAWL33BNfiI6KEwgBlAkfxERFFHwNUgpibk4+DJ0tinQwiIsswQAUQT81mc7ceiXUSiIgswwBFRACAvALWwMleGKACEHs9i5EoYkorqmKdBCIPDFBEBIDrPpL9MEAlkHjqLyP7yT1WFOskEHlggAognm76K3NPxDoJRESWYYAK4MOFu1FSHh9t8zM3H451EoiILMO1+ALYfuQ0th85HetkEBElHdagiIjIlhigiIjIlhigiIjIliwJUCLybxE5IiIbrTgeERGRVTWoTwAMs+hYRERE1gQopdQCAMetOBYREREQxT4oEblfRLJFJDs/Pz9apyUiojgVtQCllJqolMpSSmVlZmZG67RERBSnOIqPiIhsiQGKiIhsyaph5l8CWAqgk4jsF5F7rDguERElL0vW4lNK3WrFcYiIiJzYxEdERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLbEAEVERLZkSYASkWEikiMiO0RkjBXHJCKi5BZ2gBKRVADvARgOoAuAW0WkS7jHJSKi5GZFDaoPgB1KqV1KqTIAXwEYZcFxDeUXlkby8EREZANWBKjmAPa5/b5f2+ZBRO4XkWwRyc7Pzw/rhEVlFWH9PRER2Z8VAUp0timfDUpNVEplKaWyMjMzwzyh3imJiCiRWBGg9gNo6fZ7CwAHLTiuIWF8IiJKeFYEqJUAOohIWxGpDuAWAD9ZcFwiIkpi1cI9gFKqQkQeATAdQCqAfyulNoWdMj9YgyIiSnxhBygAUEr9AuAXK45lhjBCERElvLhcSYLhiYgo8cVngGKEIiJKePEZoFiHIiJKePEZoBifiIgSXnwGqFgnwKZu7N0i1kkgIrJMXAYoRih959RKi3USiIgsE5cBin1QRESJLz4DFOOTLs4PI6JEEp8BKtYJICKiiIvPAMWaAhFRwovPABXrBBARUcTFZ4BihNJ1Tq3qsU4CEZFl4jNAsQ7l49FB7XFv/7axTgYRkWXiMkAxPvm66aKWSEuNz4+TiEgP72hERGRLDFAJgiMbiSjRMEAREZEtMUAlCGf96dkRnWOaDiIiq8RlgGJrlrF66VwwlogSQ1wGKCIiSnwMUAmCtUoiSjQMUEREZEtxGaBYWSCiaLuzb+tYJyHpxGWAIl/O5Z+GdG4S45QQJaZrejSPdRKSDgNUgmlQmwvGElFiCCtAichoEdkkIlUikmVVooiIiMKtQW0EcD2ABRakxTQu6+OLWUJEiaZaOH+slNoCMGAQEZH1otYHJSL3i0i2iGTn5+dH67RERJZgOTz6AtagRGQWgHN1XnpGKfWj2RMppSYCmAgAWVlZynQKyRReO0SUaAIGKKXUkGgkhIiIyF1cDjNnbUEHM4WIEky4w8yvE5H9APoCmCIi061JFhGRvbAMGH3hjuL7HsD3FqWFiIjIJS6b+MiXsHxHRAkmLgMUh3sSESW+uAxQRESU+BigEgRrlUSRxRVzoo8BioiIbCkuAxQHBPg3sFNmrJNAlHB414m+uAxQ5Mv94hnShQ8tJKL4xwBFRES2xACVINw7cPu3ZxMfEcU/BqgE1KphrVgngYgobHEZoDjak4iijfed6IvLAEW+eO0QUaJhgCIiijNf3X9JrJMQFQxQceamrBaxTgIlgY5N6sQ6CeRHsrSYMEDFmXaZ+jcOto+TlVo1qB3rJNiOnRYIULFOQJQwQBGRjwFcjYRsgAGKiHzc2qdVrJNAxACVKOzU/EDxT+/b1KhOjaing5JbXAaoZO5vUcnS+Ey20zSjZqyTQEkmLgNUsuvfoZHvxiQO2kTRkMwF41hhgIpDPVrWj3USKAmppBk7Fhs3Z7U0vW+ytKQwQCWo6qn8aCl0rC1EX52a1WKdBNuJy7sYBwT48r6h/PpijsIia/G6s49oFCDeubVn5E8SQFwGqGRmtpmFJWAie+vZyrOp3spLNi01/KNlpKdZkJLwMEAREcXA9w/1i8hxx13XFU8OOz/s49ihkBtWgBKR10Rkq4isF5HvRSSpeu8/ujPL8LVbLjLf4RkMo2YW762N63JIMFGi8jdI4raLWyO9emr0EhNB4dagZgLoqpTqBmAbgKfCTxJZYXjXc2OdBEowyT6KL9I1imBz99kRnSOSDic79DmGFaCUUjOUUhXar8sARGWpbTtUPQH7pAPwfOS74/cYJYSIQhLsJVu9WmR7aOxwD7HyHd4NYKrRiyJyv4hki0h2fn6+haeNHX/VbDt8uERWskOJOpEFe8+I9Kdhh7lWAQOUiMwSkY06/0a57fMMgAoAnxsdRyk1USmVpZTKysyMzkrJz43sEpXz6DmnVvWIHDfZm1mI4l2jOtXxn3v6xDoZAaXYoDwScGaYUmqIv9dF5E4AIwEMVsoOMdceGtSOTIAy4v1dqsaJuhQG7yZjCq0Gueypwbhk/GyPbU8N74z+HSwopEf4M0qxQYQKa+qyiAwD8CSAy5VSRdYkycR5o3WiONa8fnqsk0CU9M7VWWA3XmJ/qg0CVLjF7HcB1AUwU0TWisgHFqSJiMh24iWwANb0F9ohQIVVg1JKtbcqIRSeeLp4iOJRsnVgpNrgppLQHRXBZm+k5xVYIdkuEqJEY9V9399hrBhMlcIAFZpIdeDe279dkOmISDLIQKM60R14QuQuma73G3u3sMX7jcsAlcyMvjTJMEflH//XO9ZJIIqYYAreCiqiAeT10d0jd/AgJHWA+uK+i2OdBCKKExFf6ijI9nt/hdJEKbAmfIC6pnsz3e3Vq6WgfeM6UU5N5NihOk5EZKWEDlAiwN9u7hGx43PAQnQxvykRWFG7CeUYteNwhfO4DFDBfDR2GMtvpWBu0s10JgnGMy5UQpRc4jJAERFFm536dSI9SAKwR7dBWBN1410kv3Bcash6rD9RIgu3geCOvq3xyCDjtROCPbwdGiwSpgY17rquWPv8FbqvGc2fieTK4MNs8MDAPm0bxDoJRBQh3sXr9LTUoJ+k3cHmA8XiMkDpVT3TUlNQ3+sRF87dzsuMzIfgrwpsdk5D64a1AAB1aoRXmdU73UMDE2slqmBLdP07NIpMQojCYDiXMcwGnVCK21ltzgnvpBEWlwEqWLofvA2qrwBQr2YaAOCDCExCTbDxIUH7zz3G89yq83EkZJGHB54Xk/NGu49owvUXRveESJIAZcROnZ710sOsQem8l6YZidUPxoc1BmdUD/05gBQao4BwecfG0U2IpmvzDAuOYv4eeEufVhacLzjJG6BE/4ZXv1ZaDBITHLP9W7XDbDa0HQvjUzIEO5VR6sYAABclSURBVNYSI+dX5zV0/Rzt6Q91a1ZD1+YZuKCZFQHK3uLyG2zJYrEG36loX9Sh3CgvaJaBYRfEfhBGtCV+SLGWHYYJJxL37Ly2Z3PLj282zm144UpX14Dn3589QKJ89nEZoMxyBjKjprxwm/isLDiFm5ZE+UJGi52ad+NFMtQ6QxGNXBl8fuBmxED3I/3X7f2ZJnSAcgrmworVx6WXxgua1YtBShLL5R0zY50ESnBVVfp3jdG9W5g+xo8P9zN8bfrvLws6TeYLz+EV1GpFePmkpAhQVVX626tXi/3b91eSt8NEOTuxMj9YGwieQPDMVfZ/qGe0VRgEqFdu6Gb6GM0MJvY/c1VndDq3rqljhPKNDrflJdJP3Y39HToKKnXubN880BcZ6Wl41M/M60Cs6Qqz5kaZDA1W8RpUPv7NRVE7V582Zydn16pu/SCZ+y4L7qGeyaBCpwSclipIMZjnYdSHrrf53v5tDV8LltH1E8qDQNe/MFQ7ZmQlR4DSKeH0aFkfAHBJu4Ye22N1o2efSGCx6POb8Yfgm1fsokaQLQTpafG32nU0GQUJq6Zz6H2/zwazwN9X9783G9BCvetE626V0AHK+SHpBahIiOXK6ZaMbDRpzPDzo3auSPnuoV+Z2q9jE3PNK37FSdnD7Pd3zp8ux+NXdopwauwns25NXK09X65F/XT8644sfPfQr9C5qW9f8Zf3XWJ4nEQoBEerLSOhA5RTs/rm16cKJ+P9fSmNZKQ7hovG02NB+p1nvIRQtxbxMTcjmEmO8fKegLNNQpHULrMOrrqwacTPE231avpvEs1IT8NbN/fAjw/3w6/aN8IVXZqgVyvHUkGdvAoyWW2sXgcz8iGhQe3gm/oifddK6AB1pTZX6LXR3T0m1nkIIofvi8DF/9YtPfHcyC7o3NS3pB7NoeNmhrE6Xejnhv3byyK37Eswl6jzScqxGH6fkZ7mWmPx2wf7RvXc7dzWnQz2lja4c2xWRLCLr+7v6+pbMZKSIuiudQ+4uyaIVTuMBkT4M7RL+PMe9fqgmro9My7c9UAjIW4D1IpnBgfcp0k9R+bXq5mG4RaU+O7o2ybsY3hrVKcG7rm0rW4TnV6btNGsdaP78JDOTUylY0S3pkEFqVgIZsa+M0C5G2Ty/V2t87fBaJdZ26M0amWMDLRmYzgB+b7+0R0AMbJb5GthX91vvlUjJQVIsaBEs/SpQR6/10w7e5v95dH+6N3ad4FWZ0uKkYvbBa6RhTKIKD0CA2msFLcBymhZ+baNautuH2AwH6ZDY+M+hldv7IYBnTz/bv7jA/DZPRf7fAn1OEvRVgq2r6mLTs0sUrr7qVn96YqOpo8z9uouGBJGaf6D/+ulWxvw/iyN1KiWgjv6trboBiq4tH0j3Nm3NZY/HbhQpeetW3q4fr6kXQMseHygBemylvtN2KxIz6EBfAdBGamWIujUpG7ogwbc/tB70IT7UOwuXnMbt48bjh3jhvtMeWnTsFZYA3QuCmGV8mpBdDM4B9T8bnBkn5gQVoASkb+IyHoRWSsiM0Qk5qtT/vCQ/oS3lg1qIXfCCIy//kKPm19m3RqGx6qemoKnveZ9tG5YG5d2aGRq5E7TCDxy3fklahDC0FB/rOhTaFC7uiVDwfsaNMeaPfKwrk3dVhEx551be+LmrJauv3lpVFe8++teQR3DnXtlr1pqCl4c1dVVow+W92NkWjaw3yLAC54YGPSEUitHZU59rH9Yf//o4A4Qkag3CaelpqCatrza7X1bo3n9dNzXvy1+fOTSoAfouOdn+8Z1kTthhOHrTgLg1xe3BgBcFsSk9rTUFOROGIH7I9ikD4Rfg3pNKdVNKdUDwGQAz1uQprBkBFjs9dY+rfDhnebnpXRsUtfVf+XdRtujpflSyiMWPZvJOZji2RGdMe66rq7t4V5YNdNSwx6dd99l7Sy76egNvGzdwFEj7dXKsw/AiqcX92xV39X0EspbeHRwB4/fnceIxA1PRDD3zwMicFzz+3qXthvXrWl6Qmm4Lm3vOUinTcNauiPpQhFuE98Dl/vesM1+n1o3rI3FYwbhmRFdAjb5WekPQzpg51+vwoWWrI5urbAClFLqlNuvtWH3hZ0MuM8X+eQu3+A16e4+WPTkQJzjNcqlQe3qPqWUcLx2YzeMvboLXr2xGybert/X4AxQtapXw21aycefYEpFHcIcUv2r8xoZfgHqBXnBeU8NaNkgHe0y62DlM0Pw3MguHq/pDTBxuvmiluZPGsa9yXuy47hru6Jf+4aWLFdV0+376SwAGDVlh6PzuY603tlX/3uV7tYk17KBfvP1e1qtM5Ba1VNN9wl6c2/yHNWjmaumazQKL5zHjow3+QykeFn15XytEPHQgPMwoFMmbujdAiKC1BTB9b2sXwA3XGH3QYnIOBHZB+A2+KlBicj9IpItItn5+fnhntZSS8YMwvzHBwBwrBTu/YVOS01Bi3OC7096avjZ5kEzBbPRWS1xV7+2uCmrJYYarFaeZrDaulHflHebt1lXdDE3uMKb0UCG4QEeEbLwCc9+lSqv43yvNd1m1q2Bnq3OcT0krlOTun5vDsO6mmu6DLbk7K9/sbJKoWvzDHx+7yWoUc2zn+XG3i2QkZ7mulG4W/nMEN3j9Wmr30EeKPi1aRhcEEtJEeROGIEXR3XVfb2+VyGjsU7z+AivfjujbN380jA0DrHJs2Gds+d965aerikDPVt5tmjsHn9V0Mf2fpqB3qrh/ui9XysGXphhZhDRDw/3w7qxQ/HEsPPxyV19PGpqZvq3Aw3Ft1rAACUis0Rko86/UQCglHpGKdUSwOcAHjE6jlJqolIqSymVlZlp7QKeQzo3xogw+lAa1qmB1m4X86+1B3MZ3RiMNKjt+WXu3rI+/qgzOCCcp+eOzjK/AGU4BnZqrLtWYUOtFrlu7FD85ldtTB8v0M3IO/C6B6i7+7VFozqeN0PnsNsaQXTOd2vhOzz48o6ZeHZEZzSrn47u2us+Ix91Ltw2DWtj51/1b4DllcY3itdHd8e6sfpDmY36Q41uHFMe7e+3Bn9rn5aoqzVLu9c65kWgeVBP7oQRunlu5J1be/ps69uuIWpXT8VTJpqf37+tF3565GwftDPfugbx3CTv5Yms6FO1cjBIK4Oaqxl/GtoRNdNSTTcf6hWGZ/7xctOT3K0QMBwqpfSLdb6+ADAFwNiwUhSExWMGoXb1VJ9O5HBd3K5hSE137XVGBI7o1hRvztyGq7s3wztzdgBwPHCwa/N6KCqt9Hu8317eDo99tdZjm3eJvFer+li992TQaQ2kYZ3q2PbycKzbdxKj3lvs2j5Hu7llpKehZoClcZ4d0RkvT9mC2iYv0E5N6iLncCGAswv83pTVAk8M8121wHkz79e+EQ6fKjF1/B4t62PJmEHILywFAOS8PAxpKSmum1Knc+ti+7jhhrVUAHjlhgvx5LcbAHhOrnZfJqi80mB1YgMTb++N9o3rBN7RBPfPRERwWadMTFmfhxQRrBs7FNm5x9EmAs2D7t6/rVdIA0K8BwVseGEo6mo1mJLySoyfutX12tKnBuH4mTKP/WvXqKYbEO+5tC0W7zyKeTmxabmxovXPWVj019/qXYhzF8r9rGOTOnhuZBdc1OYc17qOTerVDHmwTyjCqq+JSAel1Hbt12sAbPW3v9Ws6By3wis3XOiqgaWmiMc8h/My6+h+OSb/LvCoo1E9muPzZXuxIve44T6f3N0He48VhZBq/2prX8juLesjPS0VxeWVGNWjmUcVX6906d7KcEWXJnh5yhaPJhmnV2/shif+t971e730anh6RGc8/t91aN2gNh4f1gmPfbUGz199gW4gbFY/HYueHIimGekoKqvABc0y8JfJmwO+r2b1010TJb2DPWDchAo4PmfnDdB7SP31vVrgSGEpPly4K+gVv42acwHfFUYC9eV5XxOPDuqALXmncFmHTGSkp2GwV+3w7Vt74tEv1+gea96fByAjPQ09/zITgG9zcasGtXBEC/buAo0I/V4rgbfP9AzKaamO99q5aT1MuP5CV3ByvOb4XJ6+ylGTapqRbjiSdsYfLsPGAwWu31NSBJ2b1sO8nHw8fmUnvDY9x+dv2mXqB22j6SzR1jQjHe/9upfhggNvjO4e1GRhM0QE91wa+ZVJ/Am3QXGCiHQCUAVgD4AHwk9S+F4adQEKSyqidr6bL2rl+tmo2SdUL117AYb9fSEA6A6cqFczze+yPe43uMVjBqHfhDk+++hNeu7X/uyF4FwN/pUbuhk2N71wtWPgwvnagIVz69V0tb17z5FpllETN2W1xK78M8hIT8P9l7VDaorg8o6ZWKH1w/RqdQ4WPuF/rpmzX7BuzTTcc2lb1ExLwVuztvvs17FJHWw7fNrvsfx5bHB73P1JNoZf2BT1aqZh6mP9XaX9+rXSIHDk88MD2+Nhk6M1uzbPwNZDhT6jz7o2r4eNB07hii5N8MxVnVFHKxD4KwEvenIg/vzfda7HO8z4w2Wu2kWnc+tizp8GGP7tNd2bYfqmQ66mQHfOmtZ5mbWxM/8MfjfIc6Tidb2aI3vPCdx+ifFgnRevuQBjf9qEf93eGwdOFqOorNLVV5RRKw25E0Yg6+VZ6NmqPtpl1sHzI7tgZLemPk3CqVr/mBkdm9T1qY3V1AojziAIACueHoythxw1dr3BRP+6I8vVzK83udbdb37VBnuOncGDA3xH8X10ZxaueXexzl8Fx7t/DwA+v/diFJZUYJhBH69IcAM4hnRuots/GjNKqaj/6927t0pGK3YfU6v2HA/67/afKFKVlVUhn/fFnzap2/61zPX7J4t3q8f/u1ZtP3xK7T12xmPf1k9OVrd/tNxj27ycI+qOj5arqirPNJw8U6b+8NUaVVhS7rHd+XtVVZV6e9Y21zlW7D6mpm3MC/l9hKqwpFztP1EUkWOXV1Sq8orKoP+uuKxCrdb5LlRVVanJ6w6qshCOGYyNB06qJTuOhnWMqqoqVVxWYVGKIqu4rEK9Nm2rKi6rUHuOnlHzco4Y7pude1wt2xle3nibvjFPTd0Q/e9+oPdqFwCylU6sEBWD8ZFZWVkqOzs76uclIiL7EZFVSqks7+1xu9QRERElNgYoIiKyJQYoIiKyJQYoIiKyJQYoIiKyJQYoIiKyJQYoIiKyJQYoIiKyJQYoIiKypZisJCEi+XCs3ReuRgCOWnCcRMN8Mca8Mca80cd8MWZV3rRWSvksiBiTAGUVEcnWWx4j2TFfjDFvjDFv9DFfjEU6b9jER0REtsQARUREthTvAWpirBNgU8wXY8wbY8wbfcwXYxHNm7jugyIiosQV7zUoIiJKUAxQRERkS3EZoERkmIjkiMgOERkT6/REg4j8W0SOiMhGt20NRGSmiGzX/j9H2y4i8raWP+tFpJfb39yp7b9dRO6MxXuxkoi0FJG5IrJFRDaJyGPaduaNSE0RWSEi67S8eVHb3lZElmvv82sRqa5tr6H9vkN7vY3bsZ7StueIyJWxeUfWEpFUEVkjIpO135kvAEQkV0Q2iMhaEcnWtsXmetJ7Dryd/wFIBbATQDsA1QGsA9Al1umKwvu+DEAvABvdtr0KYIz28xgAr2g/XwVgKgABcAmA5dr2BgB2af+fo/18TqzfW5j50hRAL+3nugC2AejCvFHQ3mMd7ec0AMu19/wNgFu07R8AeFD7+SEAH2g/3wLga+3nLtp1VgNAW+36S431+7Mgf/4I4AsAk7XfmS+O95ULoJHXtphcT/FYg+oDYIdSapdSqgzAVwBGxThNEaeUWgDguNfmUQAmaT9PAnCt2/ZPlcMyAPVFpCmAKwHMVEodV0qdADATwLDIpz5ylFJ5SqnV2s+FALYAaA7mDbT3eFr7NU37pwAMAvA/bbt33jjz7H8ABouIaNu/UkqVKqV2A9gBx3UYt0SkBYARAD7UfhcwX/yJyfUUjwGqOYB9br/v17YloyZKqTzAcaMG0FjbbpRHCZ13WtNLTzhqCswbuJqx1gI4AsdNYieAk0qpCm0X9/fpygPt9QIADZGYefN3AE8AqNJ+bwjmi5MCMENEVonI/dq2mFxP1YL9AxsQnW0cK+/JKI8SNu9EpA6AbwH8Xil1ylHA1d9VZ1vC5o1SqhJADxGpD+B7AJ31dtP+T4q8EZGRAI4opVaJyADnZp1dkypf3PRTSh0UkcYAZorIVj/7RjRv4rEGtR9AS7ffWwA4GKO0xNphrToN7f8j2najPErIvBORNDiC0+dKqe+0zcwbN0qpkwDmwdFPUF9EnIVT9/fpygPt9Qw4mpUTLW/6AbhGRHLh6CIYBEeNKtnzBQCglDqo/X8EjkJNH8ToeorHALUSQAdtxE11ODotf4pxmmLlJwDO0TF3AvjRbfsd2gibSwAUaNXy6QCGisg52iicodq2uKX1BXwEYItS6k23l5g3IplazQkikg5gCBx9dHMB3Kjt5p03zjy7EcAc5ejx/gnALdpotrYAOgBYEZ13YT2l1FNKqRZKqTZw3D/mKKVuQ5LnCwCISG0Rqev8GY7rYCNidT3FesRIKP/gGDmyDY729GdinZ4ovecvAeQBKIejdHIPHO3gswFs1/5voO0rAN7T8mcDgCy349wNR2fuDgB3xfp9WZAvl8LRdLAewFrt31XMGwUA3QCs0fJmI4Dnte3t4LiR7gDwXwA1tO01td93aK+3czvWM1qe5QAYHuv3ZmEeDcDZUXxJny9aHqzT/m1y3l9jdT1xqSMiIrKleGziIyKiJMAARUREtsQARUREtsQARUREtsQARUREtsQARUlFRCq1VZo3ish/RaSWiLQRt1Xio5CGdBGZLyKpYRzjNyLyrvbzAyJyR4jHyRSRaaGmgyiSGKAo2RQrpXoopboCKAPwQAzScDeA75RjGSKXUAOWUuoDpdSnIf5tPoA8EekXyt8TRRIDFCWzhQDaaz+nisi/xPHcpBnaygsQkftEZKU4nqn0rYjU0raP1mph60RkgbYtVURe0/ZfLyK/NTjvbdBm4ovIAHE8z+oLOCY6QkR+0Bbq3OS2WCdE5C4R2SYi8+FYrse5/QUR+XOA9H4ijuf2LBGRXSJyo1t6ftDSRGQrDFCUlLQ11YZDCwpwLFPznlLqAgAnAdygbf9OKXWRUqo7HMsE3aNtfx7Aldr2a7Rt98Cx1MtFAC4CcJ+2BI77eavDsRJBrtvmPnDM2O+i/X63Uqo3gCwAj4pIQ239sxfhCExXwPEsIj1G6QUcz866FMBIABPctmcD6G9wPKKYicfVzInCka49fgJw1KA+AtAMwG6llHP7KgBttJ+7isjLAOoDqIOz64ktBvCJiHwDwLlA7VAA3dxqJxlwBL7dbudvBEcAdLdCOZ4n5PSoiFyn/dxSO8a5AOZpTXIQka8BdNR5f0bpBYAflFJVADaLSBO37Ue0PCCyFQYoSjbFSqke7hu0R3OUum2qBJCu/fwJgGuVUutE5DdwrN0GpdQDInIxHA+9WysiPeBYl+x3Sil/i2IWw7G2m7szbmkZAMeirn2VUkUiMs9tfzPrkummV+P+Ht0fh1BTSxeRrbCJj8i/unAMIkiDWz+NiJynlFqulHoewFE4ajrTATyo7QsR6aitCO2iHE8XTRUR7yDllAHghBaczofj8RiA4yGMA7TmvjQAo4NJbwAd4VhMlshWWIMi8u85OILDHjj6q+pq218TkQ5w1ERmw7H683o4mgZXa48BycfZR2O7mwFHX9AsndemAXhARNbDsUL2MsDxFFMReQHAUjhWtV8NQG/Un1F6/RkIYIqJ/YiiiquZE0WZiPQE8Eel1O2xTgsAaKMQR2m1OyLbYBMfUZQppdYAmBvORF2riEgmgDcZnMiOWIMiIiJbYg2KiIhsiQGKiIhsiQGKiIhsiQGKiIhsiQGKiIhs6f8BXmCkvSH82EkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "angle = np.angle(hs)\n", "plt.plot(fs, angle)\n", "decorate(xlabel='Phase (radian)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What does phase sound like?\n", "\n", "Shuffle the phases." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import random\n", "random.shuffle(angle)\n", "plt.plot(fs, angle)\n", "decorate(xlabel='Phase (radian)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Put the shuffled phases back into the spectrum. Each element in `hs` is a complex number with magitude $A$ and phase $\\phi$, with which we can compute $A e^{i \\phi}$" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "i = complex(0, 1)\n", "spectrum = wave.make_spectrum()\n", "spectrum.hs = magnitude * np.exp(i * angle)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Convert the spectrum back to a wave (which uses irfft)." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAacAAAEYCAYAAAD4czk4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOy9eXxjZ33o/f1Jsmx5lbcZb5k9ZGaykITJQlheAgQCoQm0tJBCG7ikuaXQ9XJ7oe0LvbS8L733vYUutJCyhULZaUkpayCQpFknkEkyM0lmcWaxx4u8yZZtyZKe9w/pyLJHsiXrHOlI/n0/H39GOudI5/GZx8/v9/xWMcagKIqiKG7CU+kBKIqiKMpqVDgpiqIorkOFk6IoiuI6VDgpiqIorkOFk6IoiuI6fJUewEbo6uoyO3bsqPQwFEVRlCJ4/PHHQ8aY7kKurUrhtGPHDg4ePFjpYSiKoihFICKnCr1WzXqKoiiK61DhpCiKorgOFU6KoiiK61DhpCiKorgOFU6KoiiK61DhpCiKorgOW4STiHxWRMZE5Ok850VE/lZEjovIkyJyZda520TkWPrnNjvGoyiKolQ3du2cPg/cuMb51wEXpn/uAP4RQEQ6gA8B1wBXAx8SkXabxqQoiqJUKbYIJ2PMfcDkGpfcAnzBpHgYCIpIL/Ba4EfGmEljzBTwI9YWcoqygrNT8/zFd44wH4tXeiiKC0kmDZ/82QkePBGq9FCUIimXz6kfOJP1/mz6WL7j5yEid4jIQRE5OD4+7thAlerh1ESEt3zqYT7zwCCPDq6lGymbkWTS8IFvPcVHv/cMdz34fKWHoxRJuYST5Dhm1jh+/kFj7jTGHDDGHOjuLqg0k1LDnByf4y2fepjp+RgAQ9MLFR6R4iYSScP7vnGIrx48Q5Pfq/OjCimXcDoLXJD1fgAYXuO4ouTl+Ngsb7nzYZYSSb722y/G5xGGpnTxUVLEE0n+8KtP8K2fD/FHN7yAW67o1/lRhZRLON0N/GY6au9aYMYYcw74AfAaEWlPB0K8Jn1MUXLy7Mgsb/nUwxgDX7njWi7ua6M32KCasQLAUiLJ733lF9x9aJg/vvEifu9VFzLQHmBqfolIVP2S1YQtVclF5MvAK4AuETlLKgKvDsAY80ngu8DrgePAPPDO9LlJEfkL4LH0V33YGKPOAyUnh4dnePunH8Hv8/Avv3Utu7ubAegPBjirmvGmJxZP8t5/+Tk/PDLKn920j9tftgtIzQ9ImX5fsLWlkkNUisAW4WSMuXWd8wZ4T55znwU+a8c4lNrlqbMzvP0zj9Dk9/Ivv3UtO7qaMuf6g43853GNxtrMLC4l+J0v/ZyfPDPG/7z5Ym67bkfm3EB7WjhNqXCqJqqyn5OyuZhZWOLtn3mElgYfX/6ta7mgo3HF+YH2AKOzi8TiSfw+LXqyGfnwd47wk2fG+MibLuFt12xfcW6gPTVfzqrpt6rQv2TF9Tx4PMTMwhL/51dfeJ5gAuhvD2AMnJvRxWczkkwavv/0CG+8vO88wQTQ3VyP3+vh7NR8BUanbBQVTorruf94iOZ6H1duz108ZCC4bLZRNh9HzoWZjMR4+Qtyp5h4PJIKmtH5UVWocFJczwPHQly7q4M6b+7pqmabzc39x1L+xpfu6cp7zUB7QCM6qwwVToqrOT0xz+nJ+TUXnp62BkTQiL1NygPHx7loawtbWhvyXqMRndWHCifF1dx/PFWq6qUX5q8K4vd52NqiZpvNyOJSgseen+KlF+ZXXiAV0Tk+G2VxKVGmkSmlosJJcTUPHAvR29bA7u6mNa8baA+ow3sT8ujgJLF4cl3hZIWTD6tpr2pQ4aS4lkTS8OCJCV66pwuRXGUYl+lXn8Km5IHjIfxeD9fs7Fjzuv725URcpTpQ4aS4lqeGZphZWFpXK4aUZjwys0g8kSzDyBS3cP+xEFduD9LoXztlMzsRV6kOVDgpruWBYyl/00vWCIaw6A82Ek8aRmejTg9LcQnjs1GOngvzsjX8kRY9rQ14PaJBEVWECifFtdx/LMT+3la6muvXvbZfNeNNh9VAcK1ITguf10NPqxYIriZUOCmuJBKN8/PTU7ysAJMeZJltpjUoYrNw/7EQbYE6LulvK+j6/vaAKi9VhAonxZU8OjjJUsIU5G+C5crTZyd18dkMGGN44FiIl+zpxOtZO1jGYiCoEZ3VhAonxZXcfyyE3+fhqh1rR2FZNNR56Wr2q9lmk3BifI6R8CIv3VN4V+z+9gAj4UWWNGimKlDhpLiSB46Pc/WODhrqvAV/pr+9UYXTJsEqWVSo2RdSpt+kgZGZRaeGpdiICifFdYyGF3ludK5gk57FgJao2TQ8cCzE9s7GnFXq89EfTNdg1DlSFahwUlzHAwUU8syFlYibTBonhqW4hKVEkodPTmxofoAm4lYLKpwU1/HA8RCdTX7297YW9bmB9gCxeJJQRHOdaplfnJ4mEksUZdID6AumCsNqxF51oMJJcRXGGB44HuK6PV14CozCsshE7OniU9M8cGwcj8CLdxcnnOp9Xra01GvEXpVgi3ASkRtF5FkROS4i789x/mMi8kT65zkRmc46l8g6d7cd41Gql2dHZxmfjfKyIk02oIm4m4X7j4e4bCBIW6Cu6M9qDcbqYe2CVAUgIl7gE8ANwFngMRG52xhzxLrGGPOHWdf/LnBF1lcsGGMuL3UcSm2Q8TcVabIB3TltBmYWljh0Zpr3XL9nQ58faG/k0Jnp9S9UKo4dO6ergePGmJPGmBjwFeCWNa6/FfiyDfdVapD7j4XY1d1EX1rQFENLQx1tgTqtElHDPHRigqQpPljGoj8Y4NyMBs1UA3YIp37gTNb7s+lj5yEi24GdwE+yDjeIyEEReVhE3mjDeJQqJRpP8MjgxIZMehb9QS1RU8s8cHycRr+XK7a1b+jz/e0BlhKGMS0Q7HpKNusBubzW+dSStwLfMMZkt6PcZowZFpFdwE9E5CljzInzbiJyB3AHwLZt20ods+JCHj81xeJScs2ut+sx0B5gMBSxcVSKm3jgWIhrd3Xi921Mr7ZqMJ6dmqenLX9bd6Xy2LFzOgtckPV+ABjOc+1bWWXSM8YMp/89CfyUlf6o7OvuNMYcMMYc6O7e+OKluJcHjoXweoRrdxVWsigXlsPbGDXb1BpnJud5fmJ+wyY9SCVqg+Y6VQN2CKfHgAtFZKeI+EkJoPOi7kTkIqAdeCjrWLuI1KdfdwEvAY6s/qyyOXjgeIgrLgjS0lB8FJZFfzDAfCzB9PySjSNT3MADx4svWbSa/nYNmqkWShZOxpg48F7gB8BR4GvGmMMi8mERuTnr0luBr5iVKu0+4KCIHALuBT6aHeWnbB6MMTwzMsvlFwRL+p6Bdi1RU6s8OzJLc72PPVuaN/wdjX4fHU1+nR9VgB0+J4wx3wW+u+rYB1e9//Mcn3sQuNSOMSjVzczCErF4smQ/QHZfp0sHCuvzo1QHo+FFtrbWI1JccvZq+oOa61QNaIUIxRWMhFOVoksVTprrVLuMhBdtCWJIRXRquoHbUeGkuILRcCq0d2traYtPsLGOJr9XhVMNMhaOsrWldOE0oEEzVYEKJ8UVjKZ3TqUuPiKiJWpqkGTSMDa7yJYSlRdIBUUsLiWZiMRsGJniFCqcFFcwlhZOW1rrS/4uTcStPabmYywlDD02zQ/QGoxuR4WT4gpGwosEG+uK6nybj4H2Rq08XWNYPslSzb6gEZ3VggonxRWM2uRPgJTZJrwYJ7youU61wljaJ2mXWQ/QGowuR4WT4grGwou2mPRAzTa1SMYnacMcaQvU0VLv052Ty1HhpLiC0XCUHhu0YsjKddLFp2awojm32Li71vnhblQ4KRUnkTSMz0Vt8SdAttlGF59aYSS8SGeTf8MFX1czoBGdrkeFk1JxJuaiJJLGFpMNQHdzPfU+jwZF1BAps699VcRTQTOa6+RmVDgpFWfURmc3pHOdtERNTTE6u2ib8gIpv+RcNE54IW7bdyr2osJJqTiWs9sunxOoT6HWsNMnCVnVyTViz7WocFIqjp05LBYD7QGNxqoRlhJJQnNRm816WoPR7ahwUirOWHgREehq9tv2nf3BABORGAuxxPoXK64mNBfFGHvCyC003cD9qHBSKs5oOEpXcz0+r33TUSP2aodMUWCbwsgBOpr8NNR5dH64GBVOSsUZnV201Z8A2SVq1KdQ7Yza1E4lGxHRMlcuR4WTUnFGZuyNxIIss41qxlXPqI1FgbPRiE53o8JJqThjs/Y6uyEVXOHziPoUaoDR8CJej9DZZLNw0ohOV6PCSako0XiCyUjMdrOe1yP0Bhs0GqsGGA1H2dJSj9dTWnv21Qy0B5iaXyIS1VwnN6LCSako47NWB1x7tWJQs02tMGpzdQgLNf26G1uEk4jcKCLPishxEXl/jvPvEJFxEXki/XN71rnbRORY+uc2O8ajVA/L/gQnFh91eNcCo+FFtrbYr7ws5zrpHHEjJQsnEfECnwBeB+wHbhWR/Tku/aox5vL0z6fTn+0APgRcA1wNfEhE2ksdk1I9OBEmbDHQHmBsNqp9naqc0bB9RYGzsSI6T4xFbP9upXTs2DldDRw3xpw0xsSArwC3FPjZ1wI/MsZMGmOmgB8BN9owJqVKcCJM2OKG/VsxBv75oVO2f7dSHhaXEswsLDkyP7a01HPZQBv//PAp4omk7d+vlIYdwqkfOJP1/mz62Gp+RUSeFJFviMgFRX4WEblDRA6KyMHx8XEbhq24gdFwlDqv0N5YZ/t3X9Lfxisu6uYzDwwyH1OndzWS6YDrgFlPRHjP9Xs4PTnPd548Z/v3K6Vhh3DKFUKzug79vwM7jDGXAfcAdxXx2dRBY+40xhwwxhzo7u7e8GAVdzEaXmRLSwMi9kZiWfzuK/cwGYnxL4+cduT7FWdxou5iNjfs28pFW1v4+3uPk0xq+ww3YYdwOgtckPV+ABjOvsAYM2GMiabf/hPwokI/q9Q2o2H7E3CzedH2Dl68q5M77zvJ4pLW2as2Rh0WTh6P8J5X7uH42Bw/ODziyD2UjWGHcHoMuFBEdoqIH3grcHf2BSLSm/X2ZuBo+vUPgNeISHs6EOI16WPKJmE0vOiIPyGb333lHsZmo3z98bOO3kexHyfaqazmpkt72dnVxN/95Lg2H3QRJQsnY0wceC8poXIU+Jox5rCIfFhEbk5f9nsiclhEDgG/B7wj/dlJ4C9ICbjHgA+njymbhLFwlC0OROpl8+LdnVyxLcgnf3qCJXV8VxVjs1HqfR5aAz7H7uH1CO9+xW6OnAtz77Njjt1HKQ5b8pyMMd81xrzAGLPbGPOR9LEPGmPuTr/+gDHmYmPMC40x1xtjnsn67GeNMXvSP5+zYzxKdRCJxpmNxh0z2ViICL/7yj0MTS/wb78YcvReir2k6i4655O0eNMV/fQHA7p7chFaIUKpGMv+BOd8ThbXX7SF/b2t/MNPT5BQx3fV4LRP0qLO6+G3X7GbX5ye5qETE47fT1kfFU5KxbAScJ30J1hYu6fBUIT/eErDhquFsVlnEnBz8asvGmBLSz1/95PjZbmfsjYqnJSKMTbrXOmiXLz24h72bGnmEz/RsOFqwBiT3jmVZ3401Hm54+W7eOjkBI+fUtd3pVHhpFSMkZnymfUgHTZ8/W6eHZ3lnqOjZbmnsnFmo3HmY4myzQ+AX79mG+2Ndfy97p4qjgonpWKMhqM0+b20NNhfHSIfv3RZH9s6Gvn7e9Xx7XbGHM5xykWj38ftL9vFvc+O8/TQTNnuq5yPCielYozOls9kY+HzevidV+zmybMz3HcsVNZ7K8WRKQpc5jnyGy/eTkuDT3dPFUaFk1IxxsKLtrfeLoRfvnKA3rYGPvnTE2W/t1I4TleHyEdrQx3vuG4H3z88wsnxubLeW1lGhZNSMUbK6OzOxu/z8LpLevnFmSkNjHAxI2VMNVjNLZf3AfDEmemy31tJocJJqQipSKxoWcLIc7Gru4nFpSTn0gug4j7GwlFaGnw0+p2rDpGPbR1NeD3CyXHt9VQpVDgpFWFmYYlYPFm2MPLV7OpuAlCzjYspZxj5avw+Dxe0BzgZ0vlRKVQ4bXKMMXz8nud4ZiRc1vsuO7vLb7IB2N3dDKCacQE8eCLEPz/0fNnvW67qEPnY1d2s86OCqHDa5EzNL/Hxe47xrz8vb805p/v0rMeWlnqa/F7dORXAXQ8+z//6wbNlv+9oOMpWh4sCr8WuriYGQxH1S1YIFU6bnOHpBQDOpv8tF+VohbAWIpLSjEOqGa/H8PQis4txwotLZbtnMmkYm11kq8PtVNZiV3cz0XiS4Zny/m0oKVQ4bXLOTqX+8IamyvsHaCVYdjvQfrtQdnY1qdmmAIamyz9HpuZjLCUMWys8P0BNv5VChdMmx1p4hsu+c4oSbKyjoc5b1vtms6u7ieGZBe2QuwbzsTiTkRhQ3jlSqQTcbHZr0ExFUeG0ybEWnLHZKNF4+RbpkfBixUx6Fru6mzEGBtW0l5fh6eVQ+6GyCqe0T7KCZr3ulnqa631q+q0QKpw2OdmmmnPT5cv5SVWHqLBwUrPNumQLpHKa9SpVHSKblF9STb+VQoXTJmdoeoFGvzfzulykIrEq508AzXUqBGtn3ej3ljVoxjLrdTdXeI50Nen8qBAqnDY5w9MLvGh7O1A+zTiRNIzPla+JXD4a/T562xrUrLcGQ1MLeD3CZQNt5d05zS7S2eTH76vsErWru5nhmUUWYuqXLDe2/M+LyI0i8qyIHBeR9+c4/0cickREnhSRH4vI9qxzCRF5Iv1ztx3jUQpjIZZgIhLjym3tiJRv5zQxFyWRNBX1J1js6m7ihAqnvAxNL9DT2sC2jsbyBkTMVK46RDbW7loVmPJTsnASES/wCeB1wH7gVhHZv+qyXwAHjDGXAd8A/lfWuQVjzOXpn5tLHY9SOFb+xo6uRra2NJRNOGUisSps1gMrnHxOezvlYWh6gf5ggP5gY1mDZlLtVNwxPwAtY1QB7Ng5XQ0cN8acNMbEgK8At2RfYIy51xgzn377MDBgw32VErHMNP3BRvrbA2Uz27jB2W2xq6uZ2cU4oblYpYfiSoamFuhvD9DfHgDKFzQzGq682Rc016mS2CGc+oEzWe/Ppo/l413A97LeN4jIQRF5WETemO9DInJH+rqD4+PjpY1YAZbNeH3BBvqCgfLtnGZdJJw0KCIv8USSkfBien6k/q/KMUfiiSShuWjFozkh5Zfsa2vQ+VEB7BBOkuNYThuJiLwdOAD876zD24wxB4BfBz4uIrtzfdYYc6cx5oAx5kB3d3epY1ZIBUN4PUJPawP9wQDnZhbKUkdsdGYRj0BXs9/xe62HVQBWfQrnMzab8g32BxsZCDYC5QmaGZ+LYkzlSlutZld3s86PCmCHcDoLXJD1fgAYXn2RiLwa+FPgZmNM1DpujBlO/3sS+ClwhQ1jUgpgaCrl7PZ5PfS3B1hKpKLonGY0HKWruR6ft/LBon3BAH6fRxMtc2DtkvrbA/S0NZQtaKbSFetXY+U6qV+yvNixOjwGXCgiO0XED7wVWBF1JyJXAJ8iJZjGso63i0h9+nUX8BLgiA1jUgrg7PRCxlwzEEz5FM6WQTNOObvdoRV7PcLOTs1lyYUVndcfbMDv85QtaMZNPklI5TrNRuNlUdyUZUoWTsaYOPBe4AfAUeBrxpjDIvJhEbGi7/430Ax8fVXI+D7goIgcAu4FPmqMUeFUJobTkVhAxuFdLs3YLVoxaAHYfFiKSl/WHCmHWc8qCrzFJXNkp/b+qgi29D82xnwX+O6qYx/Mev3qPJ97ELjUjjEoxZFIGkZmFjNCyVqAyrH4jIYXuXJb0PH7FMqu7ibuOTrKUiJJnQtMjW5haHqBjiZ/pk16XzDAoTPTjt93JLyI1yN0NblDOGWXubp2V2eFR7N50L/ETcrY7CLxpMkIpeZ6H22BOoam59f5ZGlE4wkmIzHXmGwg5fCOJw2nJ5393auN4SyzL1C2oJnRcJQtLfV4PLlircpPfzBAvc+jpt8yo8Jpk7Kc4xTIHOsPBlZUoXaC8Vl3ObshqwqAmm1WMDS1sHJ+lCloZtQFRYGz8XiEnemuuEr5UOG0SclEYq1afJw267mhT89qdnelfQpaBSCDMSa9c1qeH+UKmhkLR+lxkfIC6Yg9FU5lRYXTJiU7TNiiP52I62TIrNsisQDaGuvobPKrwzuLmYUlIrHEecoLOB80MxJ2TzSnxa6uZk5PzhOLJys9lE2DCqdNytDUAu2NdRlnN6SE01w0Tngh7th93SicQCP2VmPtjgaylJdyBM0sLiWYWVhy5fxIqF+yrKhw2qQMrTLZwLJmfNbBoIjRcBS/10N7Y51j99gIKbONmvUshqdXhpFDeYJmxtJm3y0uKAqcjZa5Kj8qnDYp2TlOFtZ7J4MiUs7uekTcEYllsau7mdBcjJmFpUoPxRXk8kla752cHyPpnXWPC9qpZLPLynVSv1PZUOG0CTHGMDSVf+c0NOWcZjzikj49q7FyWTQiK8Xw9AINdR46mlbWP3Q6aGbEpWbftkAdXc1+jegsIyqcqownz07z53cfLiloIbwQJxJLrPAnAHQ2+an3eRx1eJ+enOeCVfd1AxnNuMrNNomk4QPfeornRmdL+h7L7Lt6h+t00MyZtE9n9dx0A7u6mmvC9Pvvh4b57AODlR7GuqhwqjK+9/QIn3/w+ZLMT5ZPabXJRkQyi48TxOJJzs0ssK2zyZHvL4VtHY14PVL1QRHD0wt8+dHT3HN0tKTvWZ3jZOF00MzpiXm6W+pXBOq4BasAbLXz1cfO8LkHVTgpNjORToAMlZAIOTR1vrPbwkmzzfD0AkmTEgRuw+/zsK2jseo1Y2tehGZLa544NL2YWzg5HDRzenLelfMDUsJpIhJjZr66/ZKhuWjJ86McqHCqMibSHVvHS5hcwzlynCxSOydnHN6n0iYbty4+tRBObs2PUpSXxaUEoblo3p0TOBc042bhtDOdrH2iyhWYiUiMhaUEkahzKSN2oMKpyrAWnYlICTun6QXqfR46m85v9tcfDBCai7K4lNjw9+fDyhHZ3unOxWdXukRNORouOoUd8+PcTErw5FReHAyaicWTDM8suFY4LYeTV68Ck0waJiMpBcZSZNyKCqcqI2RpxrOlCaf+HM5uWF58hh3wO52eiFDv89Dd7K4cFotd3c1E0wtktTIRsebHxheetcy+nU1+GuqcCZo5OzWPcanZF1Lj8nmEwSreOU0vLJFIK19u70+lwqmKMMZkNOJQCVrP0PRiTq0Yls02Tiw+lsnGLdWmV1MLmnHIDp9knoAZSAXN9DkUNOP2nXWdN+2XrOL5MZE1L0qZI+VAhVMVEYklWFxK1fYqNSCiry23cHKyRM2pCff6E6A2qgBYSsvkfIx4YmN14IamF/FI/kTY/qAzQTNnXO6ThOqP2BtX4VSd3HNklHd87lFH/C12sFLr2djOKePszrNz6mlrwCP2m/WMMZyZnOcCFy883c31tNT78lYBmIrEuP2ug/zsufEyj6xwrDliDExtMKpsaGqBra0NeRsvOhU0c2pinoY6D90uK12Uza7uZgYnIhnT2Gr+6b6T/Mm/PlXmURVOtp9JfU5Vwj1HRnn3lx7np8+Oc+RcuNLDyYklkLwe2bDWk3F25zDZQMp00dPawFmbhdNkJEYklnCtyQZSJqudeTTj6fkYb/v0I9xzdJR/PzRcgdEVxsRcDG/abLrROZKrtFU2TgXNWGZft5W2ymZnV1MqcCPH38cn7j3OR757lK88etr1Cm4pa0i5UOEE3PvMGL/zpZ9nzAnPnCstu94prMm0q6tpwxNrLWe3hRO5Tm4PI7fYlaOp3Mz8Em//zCMcH5tjoD3AMyPuVF4gNUesUkwbniM5igJn41TQjJvDyC0yLdtXzZF//OkJ/vcPnmV3dxNJA8dG3WkaDs3F8Ahs72hU4eR2fvbcOP/1i4/zgp5mvvnu62ip93HUpTsnaxt+UU8LobnohkrIWAvKWuVhnKgSUQ3+BEiZbYamF1iIpTTfmYUlfvOzj/DsyCyf+o0X8fpLe3ludG7D/hwnSSQNk/MxLuppATYmnJJJw7mZhbxmX3AmaMaYVDsKN5t9IXeZq3+67yR/9f1nuPmFfXzqNw4AuHcNiUTpaKqnu6Xe9Ym4tggnEblRRJ4VkeMi8v4c5+tF5Kvp84+IyI6scx9IH39WRF5rx3gK5YFjIe74wkH2dDfzxXddQ7DRz97eFtdqxtaW/KKtLSwuJZmPFW86ODu9gMjahTX7ggFGZhbz2tU3wqmJlHBy/+KzXAB2dnGJ2z77KEfOhfnHt72I6/duYW9PC7F40pUFYqfmYxgDe9PCaSM+hfG5KEsJs+bOyYmgmYlIjPlYgu0unx9dzX5aGnwZ0+9nHhjkI989yk2X9fLXv/ZCdnY1EajzctSla0hoLkZXs5+u5npCJeTClYOShZOIeIFPAK8D9gO3isj+VZe9C5gyxuwBPgb8Vfqz+4G3AhcDNwL/kP4+x3nweIh33fUYO7ua+OLtKcEEsK+3lWfOzTraDXajhOaitDb46E0vDhvRjIemFtja0oDfl/+/vr89QDxpGJu1z+l9enKera31NNSV5b93w+xKVwF4emiGd3zuMZ4emuHvf/1KXr1/K5CaHwBHR9xn+rXmw46uJvxez4byWDJNBtcQTk4EzVjKyzYX+yQh5Zfc1Z0qAHvXg8/zF985wusu6eHjb7kcn9eD1yNc1NPiatdAV3M9Xc3+knIly4EdO6ergePGmJPGmBjwFeCWVdfcAtyVfv0N4FWS8nreAnzFGBM1xgwCx9Pf5ygPn5zgv9z1GNs7G/nS7desaAuwt6eV2Wg880fqJkKRWGZiwcaE0/D02iYbyDLb2PgMTk/Os73DfQVfV7Mz7VP4s28/zRNnpvm7W6/gtRf3ZM7v7m7G5xFXmm2sndLy4lP8zmlojdJWFk4EzSybfd0/R3Z3NfHY4BQfuvswr9m/lb+99YoVkY37els4OhJ2pYI7MRejM71zCi/GicbdGbgB9ginfuBM1vuz6WM5rzHGxIEZoLPAzwIgIneIyEEROTg+vvFQ3v9Zai0AACAASURBVCfOTPNfPv8YA+2NfOn2a+lcVa1gb2/KJPKMCzXjiYzWkxrzRurrrefshmV/lJ0+hdMT7vcnAAT8XvqDARJJw9+89XJed2nvivN+n4c9W5p5xoXCyVJWuprr6Wqp37DyAmsHzID9QTPWzsmNrTJWs6u7iVgiyav3beHvf/3K80Lu9/a0Mj2/xGjYfTuTzBqSDtd3czi5HXXpc8V9rlYZ8l1TyGdTB425E7gT4MCBAxtWSXZ0NvLqfVv5szfsy5lPcdHWFkRSDs0b0qYctxCai3HhluaMcCq2fprl7H79qgV3NdbCZNfucXEpwUh40fXBEBZ/etM+An4v11+0Jef5fb2tPHRiosyjWp9QZufkp7PJvyGz3tDUAm2BOprr114a+oMBDp6a2tA4c3F6cp6e1gbXm30B3nTlACLC7S/bmdM8njH9ngu7qqPvQixBJJagMz0/ICWc1lNEKoUdO6ezwAVZ7weA1YkgmWtExAe0AZMFftZWgo1+/vbWK9jSknvSNNX72N7R6MqgiIm5aGpiWWa9IndOlrN7PbNeo99He2OdbTuns1PuLkuzmtdf2ptXMEEq4GAkvMhUxF1a58RcFJ9HaG2oSzm8N7CzXi/HycLuoJkzk/Ou9zdZ9AcDvOf6PdT7cgtSK1rSbUERmZ110/LOyc3h5HYIp8eAC0Vkp4j4SQU43L3qmruB29Kv3wz8xKQMsncDb01H8+0ELgQetWFMJbGvt5WjLnNoxhNJpuaX6Gqup87rIdhYV/TEsnZC/cH1tbn+9oBtDm+rZlo1mPUKwdKM3Wb6tfwJHo/Q1VLPRKT4dINCzL5gf9DMqclI1eys16MtUEd/MOC6oAirKHBXiz9TfNnNxV9LFk5pH9J7gR8AR4GvGWMOi8iHReTm9GWfATpF5DjwR8D70589DHwNOAJ8H3iPMabiHrq9Pa08PxFhPuaefidWmXvLR9bVXLxPIdPHKbj+ImBn/TTLn1AtO6f1sPySbguKCM1F6Wxanh9LCVN0x+ShqYWC/D52Bs0sLiUYDUddH0ZeDPt6W9w3P9LReZ1Ny35rN++cbOmFbIz5LvDdVcc+mPV6EfjVPJ/9CPARO8ZhF3t7WzAGnhud4/ILgpUeDpDlT0jbirua/UU7M4cyzu4Cdk7BRu4/FsIYU3I5mdOT8zT6vTn7R1Uj3c31dDb5XWf6DUViGZPvckRnLJMmsR7hxSVmo/GC5kd20MyBDY7XIhOpVyPKC6QU3HufHWdxKeEaP5rlo+5s9hPwe2nye10dELHpK0TkYn+WQ9MtWBPLshV3bmDnNDS1QGuDj5aGunWv7W8PMB9LMG1DS+ozVVAzrRhExJWm34m5aMZcsxHNeGiq8J21nUEztWb2hZTpN5E0HB9zTxmjUFaqAWxsDSknKpxy0B8M0Fzvc1W4sDWJrN1Hd3N90fbiVI5TYQuA5ZeyIyjC7a0yNsLenhaeG511TRkjY0zKrJfZORUvnIYLyHGysDNoJtPHqYbmiBtNv6G5KM31vsxOrqvZr8Kp2vB4hL09La7SjK3t97LPyc/sYryo6sepDriFhbZa2nOpi49VM63WhNO+3lai8STPT9jfrnwjzKd7fWXPDyiuY3IxZl+wL2jm1MQ8TX7vimT4amdHZxMNdR5XBc1YATMWG43oLBcqnPKw12VZ3qG5GH6vh9aGlJvQ0owniwhnHiowTBiWtedSHd5js1Gi8WTNBENYuE0znlhlsmlv9OOR5QitQhiaWsDv89DVVFg/JbuCZlJh5E01Y/aFVEuKi7a6KyhiIhLNzA8gE9HpVlQ45WFfbyuzi3FH2lFvBMtkY/0BdxZptgkvLjG7GC844a69sY5Anbfk378W/QkAe7akyhi5JSjCMvFamrHHI3Q0FedTGJpeoK+tAY+nMCHRH2xkaHqhZAXu1OQ82zrcmQhaCim/pIsU3NnYiqCkriY/k5GYrQWe7USFUx729qRzWVxi2pvI8icARdfXyzi7CywPIyK2lKjJFPSsMeFU7/Oyu7vZNabfiawES4uuZn9RJa6GCqi7mI0dQTPJpMkEzNQae3tamJpfYswlBVYnItEV5dq6WupJmuKsL+VEhVMerCxvt2jGE+mirxbLDu/CJtZyjlMRi48NfZ1OT84jAgMFBmJUE3t7W1wTNJOdYGnRXaTZptDqEBZ29HUan0uZfbd1ur/ga7HsdVHUbyJpmIzE6F7lc4Liy6CVCxVOeWiu97G9s9E1mnFodjnBEoqPxhragHDqC5bu8D4zOU9fW2DNFh3Vyr7eVoZnFpmxIdy+VKzAh+yggmIStWPxJGOz0aLqrNkhnGp1Zw2wr8c9lUSm5mMkDSt3TtYa4tKgCFuScGuVvT0trqiPZYxJt8tYXnisJLpCJ9bQ1AJ+r2fF7ms9BtoDTERiLMQSBPyp8NNYPMlTQzM8OjjJZCTKH9+497yqzNmcmqidsjSr2ZtVQ+3aXZ0VHctEJEZLg29FvbfOpsLbZpybWcCYInfWOYJmjDGcnVrgkcFJDp2Z5lcPDHDZQP5E9loMI7doa6yjr63BFTun5Wjf5TWks4TWO+VAhdMa7Ott5UdHRlcszpVgLhonFk+eJ1iKaYuQqplWuLMblheqf39ymOHpBR4dnOTnp6dYXFrO7bl2Vyev2pe/evvpyQVetTd/EdVqxkrWfuZc5YVTKCsB16KrpZ6FpQSRaJymdaqMF9LHaTVW0MwTZ6b50iOneHRwkkcHJzk3s1xv79zMAp++7aq833F6IoJH1m/RUa1YzUsrTcYnmdM1oMKp6tjb00rSwHOjs7ywgmWMQjm0HkhNrkLtxYUW9MzmgnQE1R9/40lEUovxrVdv45qdHVx+QTuv/fh9fOfJc3mFUyQaJzQXramyNNl0t9TT0eR3hek3tCpgBrJ8CnOx9YXTVPFmXxHhgo4Adx8a5u5Dw3S31HP1zg6u2dnB1Ts7+PrBs3zhoeeZWViiLZC7KsnpyXl6a9TsCym/5M+eGycaT+StYl4OxjPCaXmOtDb48Hs9Bfmtk0nDb3/xcd78ogFek9V800lUOK3BvqxclkoKp1xaT+q9n+dDhSWBnpmc51V7i+tPdcUF7fzlGy+hPxjgyu3t5y0wN17cw388dS5v/bAzU7XrT4DU4ry3p8UVQTMTczH2bGleccxaiMYLUBDOTM7j9Qi9bcUpMB9506WcHJ/j6p2d7OhcWaLql17Yx2ceGORHR0Z584sGcn7+9OR8zeXAZbO3p5V4uozRxX1tFRvH6jw4SM3fQqtEjIQX+eGRUV7+gm7Hxria2lRXbOKC9kaa/N6KOzTz7ZwKrY01s7BEaC7Gru7iIqI8HuHt127n+r1bcmq+N13Wy1w0zn3P5e5MfLqGnd0W+3pbeXZ0tuK5IhORWN6dUyFz5GQowgXtxe9grtrRwVuu2sbOrvOTaF840MZAe4DvPJm/RVstVg/JJtNepcK764nIcq+vbApdQwZDEYCi15BSUOG0Bh6PcFFPC0cq7NAM5d051TM5H1u3vps1sXZ22TuxrtvdSXtjHd958lzO8xlnd01rxi0sLiV5fiJSsTGken3FVkRzQpHCaTxi+/wQEW66rJcHjoWYnj/fdJQy+8Zq1uwLqc7b9T5PxYMiQrMxOpr85/mcC905nbSEU1fzOlfahwqndUg5NCub5W1tyVfXHutu9mMMTK0TyjwYSlVGtlvr8Xk93HhJL/ccHc1Z4+/05DwtDb68/oZawA2a8eR8DGOWK9ZbWDup9doiGGMYDEXY6cDC84ZL+4gnDT84PHLeOUt5qeWdk8/r4aKelopbX1aXLrLoaq4vqG3GyfE5AnVetrYWHu1bKiqc1mFvbyvhxfiKCKRyE5qLEmysOy9ku1DNeHA8FRHlRAmhX7qsl/lYgnufGTvvnFWNvJZqpq1mz5ZmvB6pqGZshYt3rVJeCu2YPBqOsrCUYKcDJptL+lvZ3tmYc3e9GYQTpFNSKqzgjs+db/aFdH29udi6Y0spL+Wtf6jCaR329VS+wOdEJJqzUV+h9fVOhiJc0NHoSLTQ1Ts76Gr2852nzl98ztS4sxugoc7Lrq6migZFLDeRO1+r7Wxa32xzcjy1s95ts1kP0qa9S3t58MREJrDH4kwmx6n2qkNks7enlYlIrKIt0Sfmcu+cOpv8xBJJwgtrd/0eDEXK6m8CFU7rslzGqHLb8tBcLM+WvLAkOif8CRYp014PPzk6tqKtfSJpODM1X3MFX3NR6caDy5FYOTTjAtoiWP4EJ3ZOAG+4rI9E0vCDw6Mrjp+amKe1wUdbY+2afcEdpt+JuVjO+dGdNgWvJThj8SRnJufZ5dAakg8VTuvQ0lDHBR2BigZFhPJoPZaPYS2b8bI/wbmJ9YbL+lhYSvCTLNPeSHiRpYSpea0YUrksQ9MLzCxUpoxRphFlnjkSWicXbjAUSfkTWgrr41Qs+3pb2NXVdF7UXiqMvPbnx74Kt1eJROMsLCVyz49MLlz+OXJ6MkLSOKe85KMk4SQiHSLyIxE5lv63Pcc1l4vIQyJyWESeFJG3ZJ37vIgMisgT6Z/LSxmPU+zraa1ogc/VTcIsWup9+H2eNbUey5/gpNZz1Y4Oulvq+c6hZdPeZggjt7A042crtLte3esrm+7m+nUbDg6GIuzoaiqqekgxiAhvuKyXh09OMJ41lloPI7cINvrpbWuomPUlU7ooh2ugkALSJ8etaN/yRepB6Tun9wM/NsZcCPw4/X4188BvGmMuBm4EPi4i2Rmt/90Yc3n654kSx+MIe3tbGQxFiuo6axexeJKZhaWcOycRoWud+mknM5F6zk0sryflV7j32THmoinT3unJ1ITeDIuPVeCzUpqx1U4ll7O6s8lPeDFONJ5/7p4cn3Pcn3DTZX0kDXz/6ZQCk0gazm4Ssy8sB0VUAmvnvDqaEwqrr+dUKsp6lCqcbgHuSr++C3jj6guMMc8ZY46lXw8DY0D50oxtYF9PS6aMUbmxeq3k2jnB+vX1lrUepxefXqLxJD8+mvIrnE5XHCi05Xc1s7W1nmBjXcWCInKVLrJYz/Qbiyc5M7XguD/hop4WLtzSnInay5h9azxgxmJvbyvHx+aIxdfOSXQCa+ecq8Ox1TF5PeHU1ewve0pIqcJpqzHmHED63zUrfIrI1YAfOJF1+CNpc9/HRCRvEL2I3CEiB0Xk4Ph47ooETlFJh2bGn5CndfZ69fUGQxEa6jz0tDorJF60rZ2e1obM4nNqYp7+YADfGhXLawURYV9P5YIiJiLnJ+BaZNfXy8WZqXkSSVMWrfimy3p59PlJRsOLnJrYPDtrSK0h8aThRDoyspxMrKHgejMdk9c265V71wQFCCcRuUdEns7xc0sxNxKRXuCfgXcaYyz14QPAXuAqoAP4H/k+b4y50xhzwBhzoLu7vBuvbR2NNPq9FQmKsCZWd0sezbh5bbPeYCjCjk7n/AkWHo/w+kt7+dmz48wuLm2KMPJs9va28OxIZcoYTeSJ5oT1IzrLtbMGeMNlvRgD33vqXCaMfNMIpwqmpExkAmbWWEPWsr44HFCVj3WFkzHm1caYS3L8fBsYTQsdS/icn4mZOtcK/AfwZ8aYh7O++5xJEQU+B1xtxy9lN1YZo0qYbawteT7NuDO9c8qXRDcYirDbQX9TNjdd1ksskeRHR0Y5Nbl5/AmQ0owXlhKZxNJyYYxhfC6aM0wYlndO+YJmMtVDyuDs3rOlhb09LXznyXOcmpjH5xF622rf7Asp4e/3eSoSFBGaO7/XVzZrNaUMLy4RmouWPRgCSjfr3Q3cln59G/Dt1ReIiB/4V+ALxpivrzpnCTYh5a96usTxOMal/W38/NR0zkoITrKcYJl/8VlKmJxhzLF4ktOT82XTeq7cFqQ/GODLj55men5p02jFkJofAH9zz3MsrVPr0E6sXl9rzQ/Iv3MaDEXobPKXLdfopkt7OXhqikcHJ+lv3xxmX0jlA+7vbeXbTwxxfKy8AipfKorFWjunwfHyF3y1KHVmfBS4QUSOATek3yMiB0Tk0+lrfg14OfCOHCHjXxKRp4CngC7gL0scj2P83qsu5MKtzdz+hYN88/GzZbvvxFyMep+H5jz9eJbNNueb9srpT4CU7+X1l/bw2PNTQG12N83Hvt5W/vDVL+Dfnhjmji8cXJGQ7CS5WiFkY3VMzudzKrc/4abLegE4eGpqUykvAB950yUkkvDmTz7Ez09Ple2++RJwLdaqr5epRu5Gs95aGGMmjDGvMsZcmP53Mn38oDHm9vTrLxpj6rLCxTMh48aYVxpjLk2bCd9ujCm/t7BAuprr+cod13LNzg7+29cPced9J9b/kA2Mp7WefDWtutfQjC2tp5zJczdd1pd5vZnMegC//+oL+cibLuFnz43ztk8/wlSksBbppbBWAq7FWhGd5fYn7OpuznQQ3mzC6eK+Nr757hfTFqjj1//p4bJZYUJz0bxuAUjNj/lYIqdCdTIUQYSKVI7fHHtqm2hpqONz77yKmy7t5f/57jN85D+OkHTYAb6e1rNWfb1KaD1WDx+ozISuNG+7Zjv/8LYrOTwU5lc/9RDD6fbnThFao3SRRb76erOLS4zPRh3NgcvFG16Y2j1tpoAZi+2dTXzjt69jd3f5rDATkRhdeQKqYDk5N1dg1WAowkB7oCJdfFU4FUm9z8vf3noFv/ni7fzT/YO87+uHHPUxTESia2vFllkvRxWAk6E5Opr8BBvzT0y7ERHeds129ve2ntfYbLNw4yW9fOFdVzM6s8iv/OODHHMwP87ySa7tU8hdX8/qolzuSKybX9hHe2MdV247r6DMpqC7JWWFuXaX81aYfL2+sulao77eyfG5svZwykaF0wbweoT/efPFvO81L+Bbvxjitxz0MYRmYznLjli0N/rxeiQTcp5NpfIT3v2K3Xz3919W9vu6iWt3dfLV//pi4knDmz/5EI+fcsbHYAmd1b2+sulqyZ0Ld9KhPl/rMdDeyC8++BoO7Ogo633dREtDHZ99x1XcdJmzVphMr681dtbdeerrlaMu51qocNogIsJ7X3kh/+8vX8p9z43zZ/9mf6ChMSbVJCxH2RELj0foyGO2qeTEUmB/Xyvfevd1tDfW8XaHfFATkdy9vrLpaq5nMhI7Lwfr5Hjan7DJfD9uod7n5e/eegW3pa0wX3joedvvsV7ATPa51UFVY7NR5mOJikTqgQqnkrn16m3csH8rh85M2/7d4cU4Swmz5s4JUjbj8VVmm7lonLHZqAqnCnNBRyN/fvPFLCwlODZmf7zPxNzaO2tIac1Js1wKy2IwFKE/GKChrvz+BCWFxyP8+c0X09fWwKGzM7Z/f6bo6xrCydp1r1Zwy5mgnQsVTjYw0N7I8PSi7Z0urcmyltYDKRv26ollRertrpDWoywz0J7amTgRHDE+t7ZPEvLnOqUayFXGn6AsIyIMtDcy5MD8CK1THQLA7/PQFji/Y3I5ikavhQonG+gLBlhYSjA9b28/n0K25Nb51T4Fa2JVIrNbWYlV/NaJxWdiLprxGeQjV309Y0za2a3KixvoCzY4orwUquB2NfvPy3UaHI9Q7/PQ63BdznyocLKB/mAqdNruxWe9mlgWuerrDabzEzZjuK7baPT76GjyOyOcIrl7fWWTq77e+GyUSCyhZl+X0N8eYGRm0fbajBORGHVeydnrK5uu5vrzovUsn7XTdTnzocLJBpwSToVsyVPn61lYShCJLkcMDoYi9LWpP8EtOKEZLyWSTM8vrRkmDLlz4U5WqEePkpu+YIB40jA2u2jr94ZmUwm4+ZL4LXLV16t0QJUKJxuwzDZ2Lz6huRgi0LFOnlIun8LJ8UjFomyU8+lrC9g+P6wAh7USLAFaG3z4vSs7JmcStHWOuIK+tIJr9xxZLwHXImV9WZ4fS4lUXc5Kzg8VTjbQ0eSnoc7D0JTdEytKe6N/3eKYq+vrWfkJ6k9wD/3tAYamFmwNmlmv15eFiJznUzg5Poff56GvLWDbeJSNM5AWTmftXkPWKV1k0dVcT3gxnmmGeGZynnjSVNRnrcLJBkSEvmCA4Rmbd07rJOBarN45jc9FmYvG1WTjIvqDASKxBOEF+5K1CyldZLG6vt5gKMLOMvT5UgqjN7NzstmsN7e+TxKyOianA6sq1Zo9GxVONtEfDDBk88SaiKxd6t5itXBaLviqkXpuoc8Bv+REgZFYcH59vUo1kFNy01zvoy1QZ6tZzxhDqIBoTji/vl4lq5FbqHCyCSd8ChMFaj2dzSsn1kkXTCxlJU74FJYTLAvbXVvzI55Icnqisv4E5Xz6gvauIZFYgugavb6ysXZOlgJzYjxCe2Md7QVYbpxChZNN9LcHGJ+NsriUsO07rXYZ61Hn9RBsrFuxJff7PJkFUak8TkR0huai+Nfo9ZWNVV/PGMOZqYW0P0GFk5tIWV9snB/rdNHOZnXrncHQXMXnhwonm7AEwciMPaa9aDzB7GK8IH8CrAwFPTkeYUdnI171J7iGziY/fp/HVs04NBeje41eX9lYHZPDC/Hl1uy6c3IV/cEGe82+VsX6NWpzWnSuCqpKhZFX1i2gwskm7A4nt8KE1ytNY9HZ5M+yF1de61FW4vEIfW32Lz6FmGxgOWhifC6aVTNNfZJuoi8YYHYxTnjRnkozlqApJKiq0e+j0e8lNBclEo0zGo5WXHlR4WQTA8FUJYazNi0+lqApZGLBcjRWPJOfoAuP2+hvt9lsMxctfH5kmW1OhiIEG+vWbLOhlJ/+dnv9koWWLrKwrC9uCIYAFU62sbWtHhEbJ1YRW3JI2YxDc1HOTi2wlFB/ghuxO2gm1SW58IXH+sxghfp8KWtjd9CMFTBTqBJi5cJlqodU885JRDpE5Eciciz9b87WliKSEJEn0j93Zx3fKSKPpD//VRGpWlWu3uelu7ne9onVVYAzE1ITK7wY55mRVNfVSms9yvn0BQOMzUYziY6lYIxJR3MWPj+AjGaswsl9LAfN2OO3npiL0haow+8rbJnP7JzSZt8dnVUsnID3Az82xlwI/Dj9PhcLxpjL0z83Zx3/K+Bj6c9PAe8qcTwVxU6zTWZLXkDpEVj2TR18fhLQmmlupL89gDH2BM2EF+PEEsmCA2aCjX48Aqcn5xkJL6ry4kK6m+up84ptlWZCc7GC5wek1pCU8jLnij5fpQqnW4C70q/vAt5Y6AclFWL0SuAbG/m8G0nlKdin9QTqvDT61w8ThmWzzWPPT9IWUH+CG7EznLyYBFwAr0foaKrPKC/qk3QfHo/Qa6PpN1RAr69supv9TEZiHBubq3gwBJQunLYaY84BpP/dkue6BhE5KCIPi4glgDqBaWOMVc/lLNBf4ngqipWnYEf9tEITcC0sDenp4TA7u5oKCi9WyoudPoWJSOEJuBZdzX6eHg4DurN2K3ZWr5+IFLdz6mqpJ2ngmZFZV8yPddVyEbkH6Mlx6k+LuM82Y8ywiOwCfiIiTwHhHNflXdVF5A7gDoBt27YVcevy0R8MEIsnU/knBQYy5KPQBFwL69pE0qjJxqX0ttnXdNBKsCxmjnS31Gd8kpX2Jyi56Q828uCJkC3fFZqLct3uzoKvz15DqkI4GWNene+ciIyKSK8x5pyI9AJjeb5jOP3vSRH5KXAF8E0gKCK+9O5pABheYxx3AncCHDhwwN6OXDaRrRmXKpwm5mKZ3KlCyF6k3DCxlPNpqPPSZVPQTGgDOycr7LyvrYGAX/t8uZH+YAOj4UWWEknq1ulGsBaF9vrKJjstwQ1rSKlmvbuB29KvbwO+vfoCEWkXkfr06y7gJcARk7J93Qu8ea3PVxN2JuJORAordW8R8HtpSi846k9wL3ZVAZiYixbU6ysbS4HR+eFe+oIBkgZGw6X5rqc2YvbNUqh3u2COlCqcPgrcICLHgBvS7xGRAyLy6fQ1+4CDInKIlDD6qDHmSPrc/wD+SESOk/JBfabE8VQUKxG31MUnmUyFCRcaqWdhTS43aD1KbuyK6AzNFdbrKxudH+7HSsQtNWJvvMiAmexr/V531OUsLBQsD8aYCeBVOY4fBG5Pv34QuDTP508CV5cyBjfRGvDR5PeWvPiEF5eIJ01ROydITa5TE/Ps6Gos6f6Kc/S1BfjJM2MYY0oKWpmYK6zXVzbW4qPCyb1kXAMl9oabKKLXl4XVMXm7S+pyaoUIG8k0HSxROIWKaIWQzZaWevraGgoOP1fKT18wwOJSkqn50uqnFRvNCan5AVrw1c1YnYlLTUmxir4WE0ouInS31LtmfugqZjN2mG2sBNxCmoRl899ecxHT87H1L1QqRrbZppRctNBclP19rUV95rrdnfz1r72Ql13YveH7Ks4S8HvpbPKX3K7dqs1ZzM4J4ONvvbzoHblT6M7JZuxIxD09MQ8st24ulD1bmjmwo6OkeyvOYkci7lIiydnphaL9Aj6vh1++csAVJhslP3ZYX05NRmip9xXU6yubq3Z0uCZgRoWTzfQHA0xGYizENt508Mi5MI1+L9s71HdUa9iRiHtyPEIsnmR/b3E7J6U6sCMR98hwmH19rVWdjK/CyWbs0IwPD8+wr7cVj2q4NUd7Yx2ButKCZg4PzwAUbdZTqoP+YGNJlWYSScPRc7NVr7yocLKZUjXjZHpiXawLT02SCpopTTM+Mhym3ufRSiA1Sl+wgflYgpmFjQXNPD8RYWEpUfVriAonmyk1Eff05Dxz0XjVaz1Kfkr1KRweDrO3p6WoHCeleijV+nI4XT+x2nfWOrttpqe1AY9sfGIdOZeaWBf3tdk5LMVFDJQQ0WmM4ci5MPt1ftQspSbiHhkOU+cVLtzSYuewyo4KJ5vxeT30tG68RM3h4Rl8HuHCre6ImFHsp68tQGguxuJS8UEzQ9MLzCwsVb3JRslPqa6Bw8MzvGBrS8FNBt1KdY/epZRitjkyHGbPluaKN/pSnMNafM5toOngkRoxEjkFTAAADkNJREFU2Sj56WzyU+/zMLyB+WGM4chwuCbcAiqcHKCURNzDw2FdeGqcUsw2h4fDeAT29egcqVVEJNUbbgPzY2w2ykQkVhM7axVODtAXDDAys0giWVwo6PhslLHZaE1oPUp++ksw2xw5l2omqS0vapu+4MYU3OWddfX7JFU4OUBfMMBSwmTKEBWKBkNsDra2NiAbDJo5MhzW+bEJ2Gi6gZUDt6+3uoMhQIWTIwxsMBQ0k1ypO6eaxu/zsLWl+MVnKhJjaHpBzb6bgP5gI2OzUaLx4oJmDg+H2d7ZSEtDnUMjKx8qnBzAcngXazM+MhxmoD1AW2P1Tyxlbfo20HTwaGZnrcKp1rHyJUeKDIo4ci5cM/NDhZMDbDQRt1aibJT12UhEZya5UudIzbORRNzw4hKnJuZrZn6ocHKAloY6Wht8RS0+kWicwYmI+hM2Cf3tAYZnFkkWETRz5FyYntaGonr0KNWJFdFZTIeDZ87NArXjs1bh5BDFRts8MxLGGM1f2Sz0BwPE4klCkcKDZg4Pz+j82CT0tKWsL8W4BmqtILAKJ4foDwYYKkLrsUJAa8VerKxNsR1PF5cSnBiP6PzYJNT7vHS31BdlfTkyHKar2Z/peFztqHByiP724nwKh4fDtDfW0ZvWmJTaZtlsU9gceXZklkTSqHDaRPQHAwzPFLeG7O9rq+oeTtmUJJxEpENEfiQix9L/tue45noReSLrZ1FE3pg+93kRGcw6d3kp43ETfcEAMwtLzEXjBV2fKuZZ3c3BlMIpNqLTyoHb31sb/gRlfYqpEhGLJzk2Vv09nLIpdef0fuDHxpgLgR+n36/AGHOvMeZyY8zlwCuBeeCHWZf8d+u8MeaJEsfjGoop3riUSPLMyGzNODKV9WltSLXQLtQveXh4hpZ6Hxd0FNeaXalerHSDQpoOHhubZSlRWzvrUoXTLcBd6dd3AW9c5/o3A98zxsyXeF/XU0wo6InxOW27vcmw6qcVatY7XANtt5Xi6A8GiMaTTEZi615bKz2csilVOG01xpwDSP+7ZZ3r3wp8edWxj4jIkyLyMRHJ68kTkTtE5KCIHBwfHy9t1GWgvwizjQZDbE4KTcRNJA3PaHfkTUdfEQrukeEwjX4vOzprpzvyusJJRO4Rkadz/NxSzI1EpBe4FPhB1uEPAHuBq4AO4H/k+7wx5k5jzAFjzIHu7u5ibl0Rulvq8XmkIM34cLrt9k5tu72pKDQRdzCUarutO+vNRTGugSPp7sheT+3srH3rXWCMeXW+cyIyKiK9xphzaeEztsZX/Rrwr8aYpazvPpd+GRWRzwHvK3DcrsfrEXoLLN54ZDjM3t5Wbbu9yehvDzA1v8R8LE6jP/+fohYE3pwMWK1V1kk3SCZT3ZHfdEV/OYZVNkpdDe8Gbku/vg349hrX3soqk15aoCEpQ/obgadLHI+r6GtbPxHXGJNKrlSteNNRaOuMw8Mz1HmFPVu0O/Jmoi1QR6Pfu65r4MzUPHPReE35m6B04fRR4AYROQbckH6PiBwQkU9bF4nIDuAC4GerPv8lEXkKeAroAv6yxPG4ipTDe22tZ2h6gfBiXP0Jm5Bln8Lac+TIcLgm2m4rxSEiBZl+a9Vnva5Zby2MMRPAq3IcPwjcnvX+eeC8Pacx5pWl3N/t9LcHGDm0SDyRzGuyq8UoG6UwCtk5WW23X7l3vVgjpRYpJBH38HAYr0d4wdbq7+GUjapiDtIXDJBIGkZn89dPO6JttzctW1rq8XpkTbNNLbXdVoqnr4BE3CPnwuzpbqahrra6I6twcpBCom0OD4fZ1d2sbbc3IT6vh57WtYNmrGKeF/drMMRmpD/YwEQkxuJS/qaDh4dnalJ5UeHkIIWYbY6e0x5Om5n+darXW/6EvT21ZbJRCmO9GoyhuSij4WhNugVUODmI1XTwzGTughhW2+1a1HqUwugLNnB2Kn+JmsPDYXbUSNttpXis6vVn8pj2jtSwz1qFk4M0+n3s2dLM3997nC889Px5C1CmmGcNTiylMC4dCDI0vcBvfeEgobnzfZOpStM6PzYre7Y001Dn4X1fP8TPnju/Mk4td0dW4eQw/3L7NVyzs5MPfvsw7/z8Y4zNLocNH6nhiaUUxjuv28H//Yb93HcsxI0fv48fHx3NnAsvLnF6cl6Tbzcxnc31fPPd19HeWMdtn32UD3376RX+pyPnwvQHAwQb/RUcpTOocHKYLa0NfP6dV/HhWy7moRMTvPZj9/H9p0eAlCNT225vbjwe4V0v3cm/v/eldDXX8667DvIn//oU87E4R1V5UUhVBrn7vS/lnS/ZwV0PneINf/cATw+lAmVquTtySXlOSmGICL/54h1ct7uTP/jqE/z2Fx/n1w4McOhsbUbZKMVzUU8L337vS/g/P3yOf7r/JA+dmOCqHan2aDpHlIY6Lx/6pYt55d4tvO/rh3jTP/wn77l+D4OhCDe/sK/Sw3ME3TmVkT1bWvjWu1/C77xiN19//CyDoUjNaj1K8dT7vPzJ6/fxpduvIbqU4GsHz9LV7Ke7RtpuK6Xzsgu7+cEfvJwb9m/l4/ccw5ja3VnrzqnM+H0e/vjGvVy/dwt/c88xXn9pb6WHpLiM63Z38b0/eDkf/d4z9LU1aA8nZQXBRj+f+PUr+dbPh/j2oWGu2dVZ6SE5ghTSZdFtHDhwwBw8eLDSw1AURVGKQEQeN8YcKORaNespiqIorkOFk6IoiuI6VDgpiqIorkOFk6IoiuI6VDgpiqIorkOFk6IoiuI6VDgpiqIorkOFk6IoiuI6VDgpiqIorqMqK0SIyDhwqsSv6QJCNgynVtDnsRJ9HivR57ESfR7nU8gz2W6M6S7ky6pSONmBiBwstIzGZkCfx0r0eaxEn8dK9Hmcj93PRM16iqIoiutQ4aQoiqK4js0snO6s9ABchj6PlejzWIk+j5Xo8zgfW5/JpvU5KYqiKO5lM++cFEVRFJeiwklRFEVxHTUhnETkRhF5VkSOi8j7c5yvF5Gvps8/IiI7ss59IH38WRF5baHf6WYceh6fFZExEXm6PL+Ffdj9PETkAhG5V0SOishhEfn98v029uDAM2kQkUdF5FD6mfzP8v02pePE30z6nFdEfiEi33H+t7APh9aQ50XkKRF5QkTWb2VujKnqH8ALnAB2AX7gELB/1TW/A3wy/fqtwFfTr/enr68Hdqa/x1vId7r1x4nnkT73cuBK4OlK/46Vfh5AL3Bl+poW4LlqmR8OPhMBmtPX1AGPANdW+net1PPI+twfAf8CfKfSv2elnwfwPNBV6DhqYed0NXDcGHPSGBMDvgLcsuqaW4C70q+/AbxKRCR9/CvGmKgxZhA4nv6+Qr7TrTjxPDDG3AdMluMXsBnbn4cx5pwx5ucAxphZ4CjQX4bfxS6ceCbGGDOXvr4u/VMt0VaO/M2IyABwE/DpMvwOduLI8yiWWhBO/cCZrPdnOX+hyFxjjIkDM0DnGp8t5DvdihPPo5px9HmkzRlXkNopVAuOPJO0CesJYAz4kTGmWp6JU3Pk48AfA0n7h+woTj0PA/xQRB4XkTvWG0QtCCfJcWy1xpbvmmKPVwNOPI9qxrHnISLNwDeBPzDGhDc8wvLjyDMxxiSMMZcDA8DVInJJSaMsH7Y/DxF5AzBmjHm81MFVAKf+Zl5ijLkSeB3wHhF5+VqDqAXhdBa4IOv9ADCc7xoR8QFtpExU+T5byHe6FSeeRzXjyPMQkTpSgulLxphvOTJy53B0jhhjpoGfAjfaOWgHceJ5vAS4WUSeJ2UWe6WIfNGJwTuAI/PDGGP9Owb8K+uZ+yrtfLPBeecDTpJyvlnOu4tXXfMeVjrvvpZ+fTErnXcnSTkD1/1Ot/448TyyPreD6guIcGJ+CPAF4OOV/v1c9Ey6gWD6mgBwP/CGSv+ulXoeqz77CqorIMKJ+dEEtKSvaQIeBG5ccxyVfhA2PczXk4qYOgH8afrYh4Gb068bgK+Tcs49CuzK+uyfpj/3LPC6tb6zWn4ceh5fBs4BS6S0o3dV+ves1PMAXkrKVPEk8ET65/WV/j0r/EwuA36RfiZPAx+s9O9Yyeex6rtfQRUJJ4fmxy5SQusQcLiQNVXLFymKoiiuoxZ8ToqiKEqNocJJURRFcR0qnBRFURTXocJJURRFcR0qnBRFURTXocJJUUpARDrTVZafEJERERnKev+gQ/e8QkTy1msTkW4R+b4T91aUcuGr9AAUpZoxxkwAlwOIyJ8Dc8aY/8/h2/4J8JdrjGlcRM6JyEuMMf/p8FgUxRF056QoDiEic+l/XyEiPxORr4nIcyLyURF5W7r/0VMisjt9XbeIfFNEHkv/vCTHd7YAlxljDqXf/19ZO7VfpM8D/BvwtjL9qopiOyqcFKU8vBD4feBS4DeAFxhjribVTuF309f8DfAxY8xVwK+Qu9XCAVIVGCzeB7zHpAquvgxYSB8/mH6vKFWJmvUUpTw8Zow5ByAiJ4Afpo8/BVyffv1qYH+qLQ4ArSLSYlI9oyx6gfGs9/8J/LWIfAn4ljHmbPr4GNBn/6+hKOVBhZOilIdo1utk1vsky3+HHuDFxpgF8rNAqq4ZAMaYj4rIf5CqhfawiLzaGPNM+pq1vkdRXI2a9RTFPfwQeK/1RkQuz3HNUWBP1jW7jTFPGWP+ipQpb2/61AtYaf5TlKpChZOiuIffAw6IyJMicgT47dUXpHdFbVmBD38gIk+LyCFSO6XvpY9fD/xHOQatKE6gVckVpcoQkT8EZo0xa+U63QfcYoyZKt/IFMU+dOekKNXHP7LSh7UCEekG/loFk1LN6M5JURRFcR26c1IURVFchwonRVEUxXWocFKU/7+9OhYAAAAAGORvPY0dJRGwIycAduQEwE7NEDk7YA7WfgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave2 = spectrum.make_wave()\n", "wave2.normalize()\n", "segment = wave2.segment(duration=0.005)\n", "segment.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Play the wave with the shuffled phases." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave2.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For comparison, here's the original wave again." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although the two signals have different waveforms, they have the same frequency components with the same amplitudes. They differ only in phase." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aliasing interaction\n", "\n", "The following interaction explores the effect of aliasing on the harmonics of a sawtooth signal." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "def view_harmonics(freq, framerate):\n", " \"\"\"Plot the spectrum of a sawtooth signal.\n", " \n", " freq: frequency in Hz\n", " framerate: in frames/second\n", " \"\"\"\n", " signal = SawtoothSignal(freq)\n", " wave = signal.make_wave(duration=0.5, framerate=framerate)\n", " spectrum = wave.make_spectrum()\n", " spectrum.plot(color='C0')\n", " decorate(xlabel='Frequency (Hz)', ylabel='Amplitude')\n", " display(wave.make_audio())" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from ipywidgets import interact, interactive, fixed\n", "import ipywidgets as widgets\n", "\n", "slider1 = widgets.FloatSlider(min=100, max=10000, value=100, step=100)\n", "slider2 = widgets.FloatSlider(min=5000, max=40000, value=10000, step=1000)\n", "interact(view_harmonics, freq=slider1, framerate=slider2);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "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 }