music/waves.ipynb

274 lines
130 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Show plots inline.\n",
"%matplotlib inline\n",
"\n",
"# Number of harmonics to include in subsequent plots.\n",
"Harmonics = 10\n",
"# Time in seconds.\n",
"Time = 2.0\n",
"# Plot resolution.\n",
"Steps = 200"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# Array of step values.\n",
"def time_space(sec=Time, samples=Steps):\n",
" '''An array of equally spaced samples over a period of time.'''\n",
" # One extra sample to also include the endpoint.\n",
" return np.linspace(0, sec, num=samples + 1)\n",
"\n",
"def sample_rate(sec=Time, samples=Steps):\n",
" '''Sampling rate in samples per second.'''\n",
" return float(samples + 1) / float(sec)\n",
"\n",
"def sample_spacing(sec=Time, samples=Steps):\n",
" '''Time between samples.'''\n",
" return float(sec) / float(samples + 1)\n",
"\n",
"def frequency_spectrum(data):\n",
" '''Perform an FFT on `data`.'''\n",
" # Get the signal frequencies.\n",
" fft = np.abs(np.fft.fft(data))\n",
" \n",
" # Get the frequencies for a DFT plot (this doesn't depend on the actual signal) based on the \n",
" # spacing of our samples.\n",
" freqs = np.fft.fftfreq(len(fft), d=sample_spacing())\n",
" \n",
" return freqs, fft\n",
"\n",
"def plot_signal_and_spectrum(domain, data):\n",
" '''Plot the signal and spectrum in a stacked plot.'''\n",
" plt.figure(figsize=(10,6))\n",
" plt.subplot(211)\n",
" plt.axhline(color='k', linewidth=0.75)\n",
" plt.plot(domain, data)\n",
" \n",
" freqs, mags = frequency_spectrum(data)\n",
" num_freqs = Harmonics * 2\n",
" plt.subplot(212)\n",
" plt.xticks(range(num_freqs))\n",
" plt.plot(freqs[:num_freqs], mags[:num_freqs], 'x')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Basic Waves"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sine Wave\n",
"\n",
"Sine waves are easy. 😁 The have a single frequency, and no harmonics."
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAl8AAAFpCAYAAACidE0wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzs3Xd8VFX+//HXSYUkEEISektC6IQWQUAFFBUb6Iq9ly/WtevaRexiX3dXXXXFXhApggUVK4oklJCEFmpCSyAkkN7O74+M+4ssJZDJ3JnJ+/l45JGZO3fmfg6TGd733nPONdZaRERERMQzApwuQERERKQpUfgSERER8SCFLxEREREPUvgSERER8SCFLxEREREPUvgSERER8SCFLxEREREPUvgSERER8SCFLxEREREPUvgSERER8aAgpws4kJiYGNutWzenyxARERE5pNTU1J3W2tj6rOu14atbt26kpKQ4XYaIiIjIIRljNtV3XbecdjTGvGmMyTXGpB/gcWOMeckYk2WMSTPGDHbHdkVERER8jbv6fL0FjDvI46cAia6fScC/3LRdEREREZ/ilvBlrf0RyD/IKhOAt22t34BWxpj27ti2iIiIiC/xVJ+vjkB2nfs5rmXbPLR9AQpLKlm/s4iC0kqKyqqoqqkhPCSIiGZBdGoVRseo5gQGGKfLFBE3qamxbC0sJTu/lKLyKorLqwgIMLQIDaJl82DiYsJpHR7idJkiTY5Xdbg3xkyi9rQkXbp0cbga32atZW1uET+t3cnCrJ0szylkZ1H5QZ8TEhRAYpsIjo6PZmT3aIbHx9A8JNBDFYtIQ5VXVbNofT4L1+3i1/W7WL19D2WVNQd9TlRYMP07tWJEQjTHdI+hb4eWGKOdMJHGZKy17nkhY7oBn1tr++3nsVeB7621H7jurwZGW2sPeOQrOTnZarTj4cvdW8aMJVv4bMkWVu/YC0C36DCSu7UmsU0E8bERREeE0CI0iMAAQ0lFNXvKKsnOL2FdXjErcgpJ3bybiqoawkMCGdevPWcP6cjw+Gh9IYt4IWstS7MLmJ6aw9y0bRSWVhIcaBjYuRVJnVqREBtB1+gwWjYLJjw0kBpr2VtWxe6SCtbnFZOVW0Tqpt2szS0CIC4mnDMHdmRicic6tmrucOtEfIcxJtVam1yfdT115Gs2cKMx5kNgGFB4sOAlh2/DzmJe+3Edn6ZuoaK6hkFdWvHIhL4c37tt/b5AE/7/zbLKahZvzGfO8q3MW7GdT5fk0LdDS64ZlcCp/doRFKi5eUWcVlNj+WblDl75YR1LNhfQLDiAk/u2Y8LADhwdH01YyKG/3o/v9f9v5+4pY8HqXD5buoXnv1nDS9+t5Yyk9lw7OoFe7Vo2YktEmh63HPkyxnwAjAZigB3AQ0AwgLX2FVN7yORlakdElgBXWGsPelhLR77qJ29vOc/NX81Hi7MJCgzgnCGduPKYOBJiI9zy+qUV1cxevoVXf1zP+rxiureJ4L7TejOmZxu3vL6IHL5F63fxyNxM0rfsoVNUc/7v2HjOHtKJiFD37E9n55fw1sKNfPD7ZkoqqpkwsAN3jeulI2EiB3E4R77cdtrR3RS+Dq66xvLmzxt48du1lFVWc8nwrlw/ujuxLUIbZXs1NZavMrbz1Jer2LirhFE9YnlkQj+6RIc1yvZE5H/t2FPGw3MymLdiOx0im3H7ST2ZMLBDox2NLiip4N8/ref1nzYAcO2oBG4Y052QIB39FtmXwpefW7tjL3dOT2NZdgEn9GrDfaf1Jt5NR7oOpaKqhrd/3ciL36ylqsbyt3E9uXR4NwI0SlKk0Vhr+XTJFqbMyaCiuoYbRnfn6mPjPTYgZktBKU9+sYo5y7fSq10Lpk4cQP9OkR7ZtoivUPjyU9Za3vltE49+vpLw0EAentCPM5LaO9IRfmtBKffMWMEPa/IYkRDNC+cPpE2LZh6vQ8TfFZZUcsf05czP3MFR3aJ4euIA4mLCHanlu1U7uGfGCnYWVXDr2ESuH91dO14iLgpffmhvWSV3z1jB3LRtjOkZy9MTBzTaKcb6stbycUo2D83OICI0mJcuGMiIhBhHaxLxJ8uzC7jh/SVsLyzj7lN6ceXIOMfDTmFpJffPTGfO8q2M6hHL8+cN1FxhIih8+Z1Nu4q58q3FbNxVwh0n9eSa4+Id/wKua9X2PVz/3hI27izm/tP6cMXIbpqWQqSBPk3N4Z4ZK4htEcrfLxzE4C5RTpf0X9Za3lu0mSlzMomJCOGNy4+id3uNiJSm7XDCl3pNernfN+Rz5j9+YVdxBe9eNYzrRid4VfAC6NWuJbNvPIaxvdsy5fNMHpyVQVX1wSd2FJH9q6mxPPPVam7/ZDnJ3aL4/K/HeFXwAjDGcPHRXZl+3XCqrWXivxayYFWu02WJ+AyFLy/2edpWLn59EVFhIXx2/UiGJ0Q7XdIBRYQG8crFQ7jmuHje+W0TV7+dQmlFtdNlifiUiqoabvloGS8vyOL8ozoz7cqhRHnxKb2kTq2YdcMxdIsJ56ppi3lv0SanSxLxCQpfXurD3zfz1w+WMqBzJDOuH+FYB9vDERBguOfU3jx+Vn9+WJPHpW8uYk9ZpdNlifiE0opqrnknhdnLt3LXuJ488Zf+BPvAhMbtIpvx8TXDGdUjlvs+S+eVH9Y5XZKI1/P+T3YT9PpP67l7xgqOS4zl7SuH0SrMe/d89+fCYV34+wWDWJZdwAWv/UZ+cYXTJYl4taLyKi77z+98vyaPx8/qz/Wju/tUv8nw0CBevSSZ05Pa8+QXq3jmq9V4a39iEW+g8OVlXv9pPY/OXcmp/dvx70uTffbC1qcndeC1S5PJyi3iotcXUVCiACayPyUVVVzxn99J3bSbF88fxIXDujhd0hEJCQrgxfMHccHQzry8IItnv16jACZyAApfXuTtXzfy6NyVnNKvHS+dP8jnZ5Ee07MN/740mXW5RVzyxu8UluoUpEhdpRXVXPVWiit4DWT8gA5Ol9QggQGGx87s/98A9tK3WU6XJOKVfPt/dz/y8eJsHpyVwYl92vLSBYP85uLVx/WI5dVLhrBq+x4u/8/vlFRUOV2SiFeoqKrhmndT+W3DLp47dyCnJ/l28PpDgCuATRzSiee/WcOr6gMm8j/84394Hzc/cwd3z0jj2MQYXr5wkE90sj0cY3q14e8XDGZ5dgHXv7eESk1DIU1cTY3lzunL+XFNHk/9JYkzB3V0uiS3CggwPHV2EqclteeJL1YxPTXH6ZJEvIp//S/vg1I25nPj+0vo3zGSVy4eQmiQb/bxOpRx/drx2Fn9+X51Hn+bnkZNjfqCSNNkreXRuSuZtax2VOO5R3V2uqRGERhgeO7cAYzsHs3fPk3ju1U7nC5JxGsofDlofV4RV01LoWOr5rx5+VGEhwY5XVKjumBoF24/sQczlm7h2fmrnS5HxBFv/LyBN3/ZwBUju3HdqASny2lUoUGBvHpJMn3at+T695awIqfQ6ZJEvILCl0N2F1dw5VuLCQowTLtyKNERzl6n0VNuPL47FwztzD8WrNOpCGlyvsncwWPzVjKubzseOK2PT00ncaQiQoN48/KjiA4P5appi9lWWOp0SSKOU/hyQEVVDde+m8rWwjJeu3QInVuHOV2SxxhjmDKhHyO7R3PPjDQWrd/ldEkiHpGxtZCbPlxK/46RPH/eQK+7TFhjim0RypuXH0WJa3RncbkG3kjTpvDlgMlzMli0IZ+pE5MY0rW10+V4XHBgAP+8sDZ0XvtuKjm7S5wuSaRR5RdX8H/TUohsHszrPjx/X0P0bNeCly8cxKrte7jjk+WaA0yaNIUvD/skJZv3F23mutEJTBjoXyOcDkdkWDBvXHYUVdWWG95bQnmVrgMp/qm6xnLTB0vZWVzBa5ck06ZlM6dLcszonm2455TefJG+nX//tN7pckQco/DlQRlbC7l/ZjojEqK5/cQeTpfjuLiYcJ45dwDLcwp5eE6m0+WINIrn56/h56ydPDKhL/07RTpdjuOuPjaOU/u346kvV/Obuh1IE6Xw5SGFJZVc+24qUWEhfjWJakOd3Lcd145K4P1Fm/kkJdvpckTc6pvMHby8IIvzkjtz3lG+edkgdzPG8PTEAXSNDuPG95ewvbDM6ZJEPE4JwANqaiy3fLSU7YVl/PPiwcQ0kZGN9XXHST0YHh/N/TPTydiqoejiHzbuLObWj5fRr2NLHp7Q1+lyvEpEaBCvXjyEkopqbnh/CRVVmnhZmhaFLw94eUEWC1bn8cDpfRjcJcrpcrxOUGAAf79wEFFhIVz7biqFJboGpPi20opqrn03lcAAw78uGkKz4KbXwf5QEtu24Kmzk0jdtJvH5610uhwRj1L4amQ/rsnj+W/WcObADlxydFeny/FaMRGh/PPiwWwvLOPWj5dpBnzxaffPTGf1jr28cN7AJjWVzOE6Y0AHrhjZjbcWbmT28q1OlyPiMQpfjWhnUTm3fbycxDYRPP6X/k1iQsWGGNwlivtP68N3q3KZ9utGp8sROSIzl27h0yU5/PX4REb3bON0OV7v3lN7M6RrFPfNWEF2vqadkaZB4auRWGv52/Q09pRV8tIFgwgL8e9LB7nLpcO7ckKvNjzxxSpWbd/jdDkihyU7v4QHZqaT3DWKm47v7nQ5PiE4MIAXzhsIwK0fLaOqWv2/xP+5JXwZY8YZY1YbY7KMMXfv5/HLjTF5xphlrp+r3bFdb/buos18uyqXu8f1ole7lk6X4zOMMTw1MYmWzYK5+YNllFVq/i/xDdU1lts+XgbA8+cN1Ijmw9C5dRiPnNmPlE27+ef365wuR6TRNfjbwRgTCPwDOAXoA1xgjOmzn1U/stYOdP283tDterOs3L08NjeT43rEcvmIbk6X43NiIkKZek4Sq3fs5ekvdQFu8Q3/+j6LxRt3M+XMvurndQTOHNSRCQM78OK3a1m6ebfT5Yg0Knfsmg0Fsqy16621FcCHwAQ3vK5PKq+q5qYPlhEWEsQzE5Oa1PXb3GlMzzZcPqIbb/6ygR/W5DldjshBLcsu4Plv1jJ+QAfObMJXrmioKRP60a5lM275aBlFuv6j+DF3hK+OQN3ZMXNcy/Z1tjEmzRgz3RjT2Q3b9UrPfb2GzG17eOrspCZ9GRF3uPuUXvRoG8EdnyxnV1G50+WI7FdxeRU3f7iUdi2b8ciZ/TSwpgEimwfz/HkDyc4v4eHZGU6XI9JoPNUpYQ7QzVqbBMwHpu1vJWPMJGNMijEmJS/P9452LMzayWs/refCYV04sU9bp8vxec2CA3nx/EEUllTyt09X6EK84pUenpPB5vwSnjt3AJHNg50ux+cNjWvN9aO780lqDnPTtjldjkijcEf42gLUPZLVybXsv6y1u6y1fxy6eB0Ysr8Xsta+Zq1NttYmx8bGuqE0z9lbVsmd09OIiw7n/tN6O12O3+jdviV3jevJNyt38OmSLYd+gogHfbtyBx+n5HDdqASGxUc7XY7fuHlsIgM6RXL/zBXk7dVRb/E/7ghfi4FEY0ycMSYEOB+YXXcFY0z7OnfHA343nfETX6xia2EpU88ZoGkl3OzKkXEM7daaKXMy2LFH14ET71BYWsm9n62gZ9sW3DK2h9Pl+JXgwACePXcAxRXVPDgr3elyRNyuweHLWlsF3Ah8RW2o+tham2GMmWKMGe9a7SZjTIYxZjlwE3B5Q7frTX7J2sn7izZz9TFxDOmqywe5W0BA7fQT5VU13DtDpx/FOzz6eSY7iyqYek4SIUGaVsLdurdpwS1jE/kifbtOP4rfccs3hrV2nrW2h7U2wVr7mGvZg9ba2a7b91hr+1prB1hrx1hrV7lju96guLyKv32aRnxMOLef1NPpcvxWXEw4d57ck29X5TJzmU4/irMWrM7lk9Qcrh0VT1KnVk6X47cmHRtPUqdIHpiVrkE34le0u9ZAT325ii0FpTw9MUkXz21kV4yMY3CXVkyenUnuXp1+FGfsKavk3hkrSGwTwU0nJDpdjl8LCgxg6sQB7C2r5CGNfhQ/ovDVAL+t38Xbv27iihFxJHdr7XQ5fi8wwDD1nAGUVlZz/2fpOv0ojnhi3kp27Clj6jkDCA3SDldj69muBTefkMjnadv4Ml2nH8U/KHwdoZKKKu6ankbX6DDuPFmnGz0lITaCO07qwdeZO5ijfiDiYT+tzeOD37OZdFwCAzvrdKOnXDMqgX4dW3L/zHR2F1c4XY5Igyl8HaFnvlrD5vwSnj47ieYh2vv1pKuOiWdg51Y8NCudneoHIh5SXF7F3Z+uICE2nFvG6nSjJwW7Tj8Wllby8BydfhTfp/B1BJZlF/CfhRu4dHhXze3jgMAAw9SJSRSVV/HYXL+btUS81LNfr2FrYSlPTxyg/p0O6N2+JdeP7s7MZVt1yTHxeQpfh6myuoZ7ZqygbYtmOt3ooMS2LbhudHc+W7qFn9bqi1gaV1pOAW8t3MDFw7pqOhkHXT8mgYTYcO6fuYLSimqnyxE5Ygpfh+nNnzewctseJo/vS4tmupSIk64fnUB8TDj3fZauL2JpNFXVNdz96QpiIkK5c5x2uJwUGhTI42f1Jzu/lBe+XeN0OSJHTOHrMGTnl/D8N2s4sU9bxvVr53Q5TV6z4EAeO6s/m/NLePHbtU6XI37qzV82kLltDw+P70tL7XA5blh8NOcld+b1nzaQsbXQ6XJEjojCVz1Za7lvZjqBxjBlQl+nyxGX4QnRnJvciX//tJ6V2/Y4XY74mez8Ep6fv5axvbXD5U3uObUXUWHB3DtjBdU1mnJGfI/CVz3NXr6VH9fkcefJPWkf2dzpcqSOe0/tTavmwdytL2JxI2st989MJ8DAlAl9McY4XZK4tAoL4YHT+7A8p5C3f93odDkih03hqx4KSiqYMieTAZ1bccnwbk6XI/v47xdxdgHv/rbJ6XLET8xJ28YPa/K4/aSedGilHS5vM35AB47rEcszX61ma0Gp0+WIHBaFr3p4Yt4qCkoreeKs/gQGaO/XG00Y2IFjE2OY+tVqthXqi1gaprCkkilzMkjqFMllI7o5XY7shzGGx87sR7W1uvSQ+ByFr0NI3ZTPRynZXHVMHH06tHS6HDmA2i/i/lRW1/Do55r7Sxrmma9Xk19cwePa4fJqnVuHccvYHszP3ME3mTucLkek3hS+DqKquob7Z2bQPrIZN+sCul6vS3QYN4zpztwV2/hRkzDKEVqRU8i7izZx6fBu9OsY6XQ5cghXjowjsU0Ek+dkaMoZ8RkKXwfxzm+bWLltDw+c3ofw0CCny5F6mHRcPN2iw3hodgblVfoilsNTU2O5f1Y60eGh3HpiD6fLkXoICQpgyoR+5Owu5R8LspwuR6ReFL4OIHdPGc99vYZjE2M4RUPMfUaz4ECmTOjHhp3FvPbDeqfLER/zUUo2y7MLuPfUXkQ215xevmJ4QjRnDerIaz+uZ11ekdPliBySwtcBPD5vJeVVNUyZ0E9DzH3McT1iObV/O15ekEV2fonT5YiPyC+u4KkvVzE0rjVnDerodDlymO45tRehQQE8NCsDazXljHg3ha/9+HXdLmYu28o1o+KJiwl3uhw5Ag+c3ofAAMNDs/VFLPUz9atV7C2r4hHtcPmkNi2accfJPfk5aydzV2xzuhyRg1L42kdldQ0PzkqnU1Rzrh/d3ely5Ai1j2zOLWMT+W5VLvM1CkoOYenm3Xy4OJsrRnSjZ7sWTpcjR+jio7vSt0NLHvk8k6LyKqfLETkgha99vPnzBtbmFjH5jL40Dwl0uhxpgCtGxtGjbQQPz8nUKCg5oOoaywOz0mnTIpRb1MnepwUGGB49sx+5e8t5Yb4uvC3eS+Grjm2Fpbz47VrG9m7D2D5tnS5HGig4MIBHJvRjS0EpLy/Qhbdl/95ftIn0LXu4/7Q+RGhUs88b1CWK84/qzH8WbmTVdl3vVbyTwlcdj3yeSXWN5aEzdOFsfzEsPpq/DK4dBZWVq1FQ8mc7i8qZ+tVqRiREc3pSe6fLETe56+RetGwWxAMz09XnU7ySwpfLj2vymLdiOzeO6U7n1mFOlyNudM8pvWkWHMhDs/VFLH/25BerKK2s1qhmPxMVHsLdp/Ri8cbdfLpki9PliPwPhS+gvKqah2ZnEBcTzqRR8U6XI24W2yKUu07uyS9Zu5iTplFQUitlYz7TU3O4+th4ureJcLoccbNzhnRmcJdWPDFvJYUllU6XI/InCl/Aaz+sZ8POYh4e35fQIHWy90cXDutK/46RPPp5JnvL9EXc1NVeOiydDpHN+OvxGtXsjwICDI+c2Y/dJRVM/XqV0+WI/IlbwpcxZpwxZrUxJssYc/d+Hg81xnzkenyRMaabO7brDtn5Jby8IItT+7fjuB6xTpcjjSTQ9UWcV1TOC9+o831T9/avm1i1fS8PntGHsBB1svdXfTtEcunwbry3aDNpOQVOlyPyXw0OX8aYQOAfwClAH+ACY0yffVa7Cthtre0OPA881dDtusvDczIIDDA8cPq+JYu/Gdi5Fecf1YW3NAqqScvdU8Zz89cwqkcsJ/fVpcP83W0n9SA6PJQHZqZTU6M+n+Id3HHkayiQZa1db62tAD4EJuyzzgRgmuv2dOAE4wW9W7/J3ME3K3O5+YRE2kc2d7oc8YC7Tu5Jy2ZBPDhTM983VY/NW0lFVQ0Pj++rTvZNQMtmwdx3Wi+W5xTy4eJsp8sRB+wpq6SiqsbpMv7EHeGrI1D3LzrHtWy/61hrq4BCINoN2z5iZZXVTJ6TQWKbCK48Js7JUsSDosJD+Nu4Xvy+MZ8ZGgXV5Py6bhezlm3l2lHxdNOlw5qMMwd2ZFhca57+ahX5xRVOlyMeNnlWBhP+8QtV1d4TwExD9/6NMROBcdbaq133LwGGWWtvrLNOumudHNf9da51du7zWpOASQBhYWFDjjrqqAbVdjDWBLCn3RBCi7bRbG9Oo21HvI8FtvW9iKrQSDouf4PA6nKnSxIPsCaArf0vwwYE0WH5fwiwuvxMU1LRPJqtSZcTkbuCmA1fO12OeEhZi45s73shkVt+JSr750bd1g8//JBqrU2uz7ru6Gm6Behc534n17L9rZNjjAkCIoFd+76QtfY14DWA5ORk+/3337uhPJH/lb6lkPEv/8zxNz3LwxP6OV2OeMCrP6zjiS9W8cZlyZzQ+yKnyxEHPDY3k3//FMDbD1/H4C5RTpcjjayquobT//4zAaWVfDNlcqMPrjmcbgzuOO24GEg0xsQZY0KA84HZ+6wzG7jMdXsi8J1VhxtxUL+OkVx8dFfe+W0T6VsKnS5HGlndS4ed0FuXDmuqbh7bg7YtazvfV6vzvd975zfvHdXc4PDl6sN1I/AVsBL42FqbYYyZYowZ71rtDSDaGJMF3Ab8z3QUIp52+0k9aR0ewgOzNArK3z36+UpdOkyICA3igdP7kLF1D+8t2uR0OdKIcveW8dzXazg2McYrRzW7ZZ4va+08a20Pa22CtfYx17IHrbWzXbfLrLXnWGu7W2uHWmvXu2O7Ig0R2TyYe07pzdLNBXySqlFQ/urHNXnMXbFNlw4TAE7r355juscw9avV5O1Vf09/9cS8VZRX1TDZS0c1a4Z7adL+MrgjR3WL4skvVrFbo6D8ji4dJvsyxjB5fF/KKqt54ouVTpcjjeDXdbv4bOkWJh0XT0Ksd146TOFLmjRjame+31NWxdSvVztdjriZLh0m+9O9TQRXHxvPjCVb+H1DvtPliBtVVtfw4Kx0OkU154Yx3nvpMIUvafJ6tWvJ5SO68cHvm1merUuQ+Is/Lh12Wv/2unSY/I+/Ht+djq2a8+CsdK+a/0ka5s2fN7A2t4jJZ/SleYj37nApfIkAt4xNJDYilAdmaRSUP7DW8tDsDIJ06TA5gLCQ2s73q7bvZdqv6nzvD7YWlPLCN2sZ27stY/t496hmhS8RoEWzYO47rTdpOYV88Ptmp8uRBpqfuYPvVuVyy9getIts5nQ54qVO7tuWUT1ieX7+GnbsKXO6HGmgRz7PxGJ56Azv3+FS+BJxGT+gA8Pjo5n61Wp2FWkUlK8qqaji4TmZ9GzbgstHdnO6HPFixhgeHt+XiuoaHpurzve+7PvVuXyRvp2/Hp/oE6OaFb5EXIwxTJnQl+LyKp76cpXT5cgRevm7LLYUlPLImf0IDtRXnBxct5hwrh2VwOzlW1m4buehnyBep6yydlRzfEw4Vx/rG9dq1jeTSB2JbVtw1bFxfJySQ+omjYLyNVm5Rfz7p/WcPbgTQ+NaO12O+IjrRyfQuXVzHpyVQUWVOt/7mld/WM+mXSVMmdDPZ0Y1K3yJ7OOm4xNpH9mM+2dmaBSUD6ntZJ9O8+BA7jm1l9PliA9pFhzI5DP6kpVbxJu/bHC6HDkMm3YV84/vszg9qT3HJMY4XU69KXyJ7CPcdQmSldv28O5vGgXlK+akbeOXrF3cOa4XMRGhTpcjPuaE3m0Z27stL327lq0FpU6XI/VgrWXy7AxCAgN8blSzwpfIfpzSrx3HJsbw7NdryN2rUVDebm9ZJY9+nklSp0guHNrF6XLERz10Rh+qayyPzs10uhSph68zd7BgdR63jE2kbUvfGtWs8CWyH7Wd7/tRXqVRUL7g2a/XkFdUziMT+hEY4H3XcRPf0Ll1GDeO6c68FdtZsDrX6XLkIIrLq3h4dga92rXg8hHdnC7nsCl8iRxAXEw4141OYNayrfywJs/pcuQAlmUXMO3XjVxydFcGdG7ldDni4yaNiichNpwHZqZTUlHldDlyAM9+vYZte8p47Kz+BPngqGbfq1jEg64fk0B8bDj3z1xBaUW10+XIPiqra7hnxgratmjGnSf3dLoc8QOhQYE88ZckcnbXzpYu3ictp4C3Fm7g4mFdGdI1yulyjojCl8hBhAYF8sRZ/cnOL+WFb9c4XY7s482fN7By2x4mj+9Li2bBTpcjfmJoXGvOP6ozb/y8gfQthU6XI3VUVddw96criIkI5c5xvrvDpfAlcgjD4qM5L7kzr/+0gYyt+iL2Ftn5JTz/zRpO7NOWcf3aOV2O+Jl7TulNVFgI9362Qtd79SJv/rKBzG17eHh8X1r68A6XwpdIPdxzai+iwoK5d4a+iL2BtZb7ZqYchNL6AAAgAElEQVQT6LoqgYi7RYYF8+AZfUjLKWTawo1OlyO4drjm114429d3uBS+ROqhVVgID5zeh+U5hbz960any2nyZi/fyo9r8rjz5J60j2zudDnip85Ias/onrE88/VqtmjuL0dZa7l/ZjoBBqZM6Isxvj2qWeFLpJ7GD+jAcT1ieear1ZqE0UEFJRVMmZPJgM6tuGR4N6fLET9mjOGRCf2wFh6alY61OurtlDlp2/hhTR63n9STDq18f4dL4UuknowxPHZmP6pde2D6InbGo3NXUlBayRNn9decXtLoOrcO47YTe/DNylw+T9vmdDlNUn5xBVPmZJDUKZLLfHBOr/1R+BI5DJ1bh3HHST35blUuny3d4nQ5Tc6C1blMT83h2lHx9OnQ0ulypIm4YmQ3BnSK5KHZGewqKne6nCZn8uwMCksreersJL/Z4VL4EjlMV4yMY0jXKB6ek0nuHl16yFP2lFVyz6crSGwTwU0nJDpdjjQhQYEBPD1xAEVlVTw4O8PpcpqUrzK2M3v5Vm4ck0jv9v6zw6XwJXKYAgMMT09Moqyymvt0+tFjHvt8Jbl7y3jmnAGEBgU6XY40MT3bteDmsYnMTdvGFyt0+tETCkoquO+zdPq0b8n1YxKcLsetFL5EjkBCbAS3n9SD+Zk7mL18q9Pl+L0f1+TxUUo2k45L0CWExDGTjounX8eWPDArnfziCqfL8XtT5mRSUFLB1HOSCPbBSwgdjH+1RsSDrjomnkFdWvHQ7Azy9qofSGPZW1bJ3Z+mkRAbzi1jdbpRnBMcGMDUiQMoLK3k4Tk6/diYvsncwYylW7h+THf6doh0uhy3a1D4Msa0NsbMN8asdf3e70WWjDHVxphlrp/ZDdmmiLcIDDBMnZhESUU1D+j0Y6N5fN4qtu8pY+o5A2gWrNON4qze7Vvy1+MTmbVsK19nbHe6HL9UWFLJvZ+toFe7Ftw4prvT5TSKhh75uhv41lqbCHzrur8/pdbaga6f8Q3cpojX6N6mBbeO7cGXGds1DL0R/Lx2Jx/8vpmrj41ncBffvICu+J/rRifQp31L7puZTkGJTj+62yNzM9lVXMEz5wwgJMg/T9A1tFUTgGmu29OAMxv4eiI+5/+OjWNA51bcPzOdbYWafNVdCkoquOOT5cTHhnPbiT2cLkfkv4IDA5h6ThIFJRXc+9kKHfV2oy/TtzE9NYfrRiXQr6P/nW78Q0PDV1tr7R+7+9uBtgdYr5kxJsUY85sx5oABzRgzybVeSl5eXgNLE/GMoMAAXjhvIBVVNdz+8XJqdO3HBrPWcu9nK9hZVM6L5w3S6UbxOn07RHL7ST2Zt2I701NznC7HL2wvLOPuGStI6hTp99PJHDJ8GWO+Mcak7+dnQt31bG30P9D/Ol2ttcnAhcALxpj9jhm11r5mrU221ibHxsYebltEHBMXE87k8X1YuG4Xr/+83ulyfN701BzmrdjO7Sf1pH8n/937Fd826dh4hsdHM3l2Bht3Fjtdjk+rqbHc/skyyitreOG8gX57uvEPh2ydtXastbbffn5mATuMMe0BXL9zD/AaW1y/1wPfA4Pc1gIRL3FucmdO7tuWqV+tJmNrodPl+KxNu4qZPDuDYXGtmXRcvNPliBxQQIDh2XMHEBhguOWjZVRW1zhdks9685cN/JK1iwfP6EN8bITT5TS6hkbL2cBlrtuXAbP2XcEYE2WMCXXdjgFGApkN3K6I1zHG8ORfkmgdHsLNHy6jtKLa6ZJ8TmV1DTd/uIzAAMPz5w30m0uJiP/q0Ko5T/wliWXZBfz927VOl+OTMrYW8vSXqzmpT1vOP6qz0+V4REPD15PAicaYtcBY132MMcnGmNdd6/QGUowxy4EFwJPWWoUv8UtR4SE8e85AsnKLeHzeSqfL8Tl//y6LZdkFPP6X/nRo1dzpckTq5bSk9kwc0omXF2SxeGO+0+X4lNKKam7+cBmtwoJ58uwkjGkaO1wNCl/W2l3W2hOstYmu05P5ruUp1tqrXbcXWmv7W2sHuH6/4Y7CRbzVMYkx/N+xcbzz2ya+XbnD6XJ8RsrGfF7+bi1nD+7E6UkdnC5H5LBMHt+XTlFh3PrRMvaUVTpdjs944ouVZOUW8ey5A2gdHuJ0OR7j3z3aRBxyx8k96d2+Jbd/spyc3SVOl+P1dhWV89cPltIxqjmTx/dxuhyRwxYRGsQL5w9kW2EZd32Spukn6mFu2jbe/nUTVx0Tx7GJTWuQncKXSCMIDQrknxcNprracv17SyirVP+vA6musdz84TJ2FVfwr4uG0KJZsNMliRyRwV2iuOeUXnyZsZ3XftSo54PJyt3LXdOXM7hLK/42rpfT5XicwpdII4mLCefZcweQllPIw3PUzfFAnpu/mp+zdvLohH5+PamiNA1XHRPHqf3b8dSXq/h13S6ny/FKxeVVXPvuEpoFB/KPiwb7/bQS+9P0WiziQSf1bcd1oxP44PfNfJKS7XQ5Xmd+5g7+sWAd5x/VmXObyCgn8W/GGJ6eOIC4mHD++sEStheWOV2SV7HWctenaazPK+LvFwyifWTTHFij8CXSyG4/sQcjEqK5f2a65v+qY+POYm77eBn9O0YyeXxfp8sRcZuI0CBevWQIJRXV3PD+EiqqNP/XH978ZSNz07Zx58m9GNE9xulyHKPwJdLIggIDeOmCQUSFhXDtu6kUlmgkVGlFNde+m0pggOGfFw3W5YPE73Rv04KnJyaRumm3pp1x+X1DPk/MW8lJfdpy7aimPYGywpeIB8REhPLPiwezvbCMmz9aSnUTvv6jtZZ7ZqSxesdeXjhvIJ1bhzldkkijOD2pA1eOjOOthRuZuXSL0+U4anthGTe8v4TOrcN45twBTWY+rwNR+BLxkMFdopg8vi/fr87j0blNtwP+y99lMXPZVm4b24PRPds4XY5Io7rn1F4Mi2vNXdPTSN3UNCdgLS6v4qppiymtqOaVi4fQUiOaFb5EPOmiYV25YmQ3/vPLRt75bZPT5Xjc52lbeXb+Gs4a1JEbj+/udDkijS44MIBXLh5Cx6jmTHo7lez8pjXvX02N5ZaPlrFy2x7+fsEgerZr4XRJXkHhS8TD7j+tD8f3asPk2Rl8v3q/16L3S6mbdnP7x8tJ7hrFk2f3b/KnHaTpiAoP4Y3LkqmqsVzx1mIKSiqcLsljnvhiJfMzd/DA6X0Y00tHuv+g8CXiYYEBhpcuGETPti247t0lLN282+mSGt3aHXu58q3FtI9sxquXDCE0SB3spWmJj43glYuHsHlXCVdPS6G0wv8nXn7tx3X8+6cNXDa8K5eP6OZ0OV5F4UvEARGhQbx15VHEtgjlyrcWk5Vb5HRJjWZrQSmXvvk7IUEBvHPVMKIjQp0uScQRwxOieeH8gaRu3s2N7y+hqtp/p6D4NDWHx+et4rSk9jx4Rl8d6d6HwpeIQ9q0aMbbVw4lMMBw6RuL/LIvSN7eci55YxFFZVW8dcVRGtkoTd6p/dszZUI/vl2Vy53T0/xy5PPXGdv526dpjEiI5rlzBxAYoOC1L4UvEQd1iwln2pVDKa6o5oJ//8bWglKnS3KbXUXlXPT6b2wtKOP1y5Lp20GXDhIBuOTortxxUg8+W7qFe2akUeNHAey7VTu44f0l9OsYqS4GB6HwJeKwvh0ieeeqoRSWVHLBv3/zi8uR7C6u4OI3fmfTrhLeuCyZYfHRTpck4lVuPD6Rm05I5OOUHO6fle4XAeyHNXlc+84SerVrybQrh9JCU0ockMKXiBdI6tSKaVcNZVdRBRNfWcimXcVOl3TEduwp47zXfmVdXhH/vjS5SV9CRORgbh2byHWjE3h/0WbumL7cp/uAfZm+nf+blkL3NhG8c9VQIpsreB2MwpeIlxjcJYr3rh5GUXkVE1/5ldXb9zpd0mHLzi/hnFd+JWd3KW9dfhTH9Yh1uiQRr2WM4a6Te3LbiT2YsWQL17+3hPIq3xsFOT01h+vfS6Vvx5Z88H9H0yosxOmSvJ7Cl4gXGdC5FR9fMxwDnPvqr/y6bpfTJdVbWk4Bf/nXQgpLK3nv6mE64iVSD8YYbjohkYfO6MPXmTu49I3ffWYeMGst/1iQxR2fLGd4QjTvXjWMyDAd8aoPhS8RL9OjbQs+vW4EsS1CueSNRXycku10SYf0Zfo2zn31V0ICA/jk2uEM6hLldEkiPuWKkXG8cN5Alm4u4Kx/LmTDTu/uelBRVcOd09OY+tVqxg/owBuXHUV4aJDTZfkMhS8RL9S5dRifXjeC4QnR3DU9jSlzMqmo8r7+INU1lhe/Wct17y2hd/uWzLxhJD3a6vIhIkfizEEdee//hlFYWslZ//yFBV56BYwde8q4+PVFTE/N4eYTEnnx/IE0C9aoxsNhrPXOERbJyck2JSXF6TJEHFVZXcNjc1fy1sKNDOrSipcvHEzHVs2dLguAnUXl3PrRMn5au5O/DOrI43/pry9gETfYtKuYa95JZdX2vdwwJoFbx/YgKNA7jpX8tDaPWz5cRklFNU+e3Z8JAzs6XZLXMMakWmuT67WuwpeI95ubto2/fZpGYIDh4fF9mTCwg6MzRs/P3MG9n61gT2klD4/vy3lHddYM1iJuVFZZzeTZGXy4OJshXaN4emISCbERjtbz3Pw1/Pun9XSPjeCfFw0mUUe5/0ThS8QPbdhZzG0fL2Pp5gLG9m7Lo2f2o11kM4/WkF9cwZQ5GcxctpVe7Vrw3LkD6dOhpUdrEGlKZi3bwoOzMiirrOb2k3pw5cg4jx8FS9mYz13T01i/s5gLhnbhgdN7Exai/l37UvgS8VPVNZb//LKBqV+tJsAYrh2VwKTj4mke0rin+yqqanj71428+O1aSiuquWFMd24Y052QIO84FSLiz3L3lHHvZ+l8s3IH3dtEcN9pvRnTs02jbzdndwlPfbmaOcu30rFVc546O4ljEjWK+UA8Fr6MMecAk4HewFBr7X7TkjFmHPAiEAi8bq198lCvrfAlcmCbd5Xw5JcrmbdiO+1aNuPqY+O4YGgXt482Kqus5tMlObz6w3o255cwumcs953aW6cbRDzMWsv8zB08Pm8lG3eVMDw+mutGJ3BsYozbT/ln55fw+k/r+XBxNsbApGPjuWZUgkYzHoInw1dvoAZ4Fbhjf+HLGBMIrAFOBHKAxcAF1trMg722wpfIoS3emM8zX61m0YZ8IpsHc95RnTlrUEd6t2/YqcB1eUV8tmQLHy7ezM6iCgZ0bsWtYxMZ7YG9bRE5sIqqGt79bROv/riOHXvK6dO+JRcM68IZSe0bNLlpVXUNP2ftZHpqDl+kbyfAwFmDOnLL2B508JJBPt7O46cdjTHfc+DwNRyYbK092XX/HgBr7RMHe02FL5H6W7p5N6/9uJ75mTuoqrH0ateCUT1jGZEQw+AurQ55jbWSiiqWZRewMGsXP67NIy2nkAADo3rEMum4BI6Ob60O9SJepLyqmllLt/LmLxtYtX0vwYGGY7rHMLJ7DCMSYkhsG0HwQfqGWWvZsaecRRt2sTBrF9+tziVvbzmRzYM5N7kTVx4TR/tIha7D4W3hayIwzlp7tev+JcAwa+2NB3tNhS+Rw7erqJzP07Yxd8U2lm7eTWV17ee7bctQ4mLCadU8hPDQIIyB4vIqCksr2bizmK2ui3kHBhiSOkVyar/2TBjYgTYtPduhX0QOj7WWzG17mLFkC9+tyv3v5KxBAYau0WF0igojolkQ4SGBVFTVUFReTV5ROevzithbVgVAy2ZBjOwew4SBHRnTK5bQIE0ZcyTcGr6MMd8A7fbz0H3W2lmudb7HDeHLGDMJmATQpUuXIZs2bapPG0RkP0oqqli8cTeZW/ewLq+IjTuL2VNWSXF5NTXWEhEaRItmQXSNDichNpze7VsyNK71IY+SiYj32lpQyqINu1i7o4h1eUVsLSijuLyK4ooqQoMCCQ8NonV4MAmxEcTHhDO4axR9O0QSGKAj2w11OOHrkL3nrLVjG1jPFqBznfudXMv2t63XgNeg9shXA7cr0qSFhQQxqkcso3Rxa5Emo0Or5pw1qJPTZcgheGKc+GIg0RgTZ4wJAc4HZntguyIiIiJep0HhyxhzljEmBxgOzDXGfOVa3sEYMw/AWlsF3Ah8BawEPrbWZjSsbBERERHf1KBJO6y1nwGf7Wf5VuDUOvfnAfMasi0RERERf6DpqUVEREQ8SOFLRERExIO89tqOxpg8wBNzTcQAOz2wHW/UlNsOTbv9anvT1ZTb35TbDk27/Z5oe1drbb2Gl3tt+PIUY0xKfefl8DdNue3QtNuvtjfNtkPTbn9Tbjs07fZ7W9t12lFERETEgxS+RERERDxI4cs1o34T1ZTbDk27/Wp709WU29+U2w5Nu/1e1fYm3+dLRERExJN05EtERETEg/w2fBljxhljVhtjsowxd+/n8VBjzEeuxxcZY7rVeewe1/LVxpiTPVm3u9Sj/bcZYzKNMWnGmG+NMV3rPFZtjFnm+vG563DWo+2XG2Py6rTx6jqPXWaMWev6ucyzlbtHPdr/fJ22rzHGFNR5zNff+zeNMbnGmPQDPG6MMS+5/m3SjDGD6zzm0+99Pdp+kavNK4wxC40xA+o8ttG1fJkxJsVzVbtHPdo+2hhTWOdv+8E6jx308+IL6tH+O+u0Pd31OW/teszX3/vOxpgFrv/PMowxN+9nHe/73Ftr/e4HCATWAfFACLAc6LPPOtcDr7hunw985Lrdx7V+KBDnep1Ap9vUCO0fA4S5bl/3R/td94ucbkMjt/1y4OX9PLc1sN71O8p1O8rpNrm7/fus/1fgTX947131HwcMBtIP8PipwBeAAY4GFvnRe3+oto/4o03AKX+03XV/IxDjdBsase2jgc/3s/ywPi/e+nOo9u+z7hnAd3703rcHBrtutwDW7Oc73+s+9/565GsokGWtXW+trQA+BCbss84EYJrr9nTgBGOMcS3/0Fpbbq3dAGS5Xs+XHLL91toF1toS193fgE4errGx1Oe9P5CTgfnW2nxr7W5gPjCukepsLIfb/guADzxSmQdYa38E8g+yygTgbVvrN6CVMaY9fvDeH6rt1tqFrraBf33m6/O+H0hDvi+8xmG2398+89ustUtct/cCK4GO+6zmdZ97fw1fHYHsOvdz+N8347/rWGurgEIgup7P9XaH24arqN0r+EMzY0yKMeY3Y8yZjVFgI6pv2892HX6ebozpfJjP9Wb1boPrVHMc8F2dxb783tfHgf59/OG9Pxz7fuYt8LUxJtUYM8mhmhrbcGPMcmPMF8aYvq5lTep9N8aEURsuPq2z2G/ee1PbfWgQsGifh7zucx/kiY2I9zLGXAwkA6PqLO5qrd1ijIkHvjPGrLDWrnOmwkYxB/jAWltujLmG2iOgxztckxPOB6Zba6vrLPP3977JM8aMoTZ8HVNn8TGu970NMN8Ys8p1NMVfLKH2b7vIGHMqMBNIdLgmJ5wB/GKtrXuUzC/ee2NMBLWh8hZr7R6n6zkUfz3ytQXoXOd+J9ey/a5jjAkCIoFd9Xyut6tXG4wxY4H7gPHW2vI/lltrt7h+rwe+p3ZPwlccsu3W2l112vs6MKS+z/UBh9OG89nn9IOPv/f1caB/H3947w/JGJNE7d/8BGvtrj+W13nfc4HP8L2uFgdlrd1jrS1y3Z4HBBtjYmgi73sdB/vM++x7b4wJpjZ4vWetnbGfVbzvc++JjmWe/qH2iN56ak+p/NGJsu8+69zAnzvcf+y63Zc/d7hfj+91uK9P+wdR29E0cZ/lUUCo63YMsBYf6oBaz7a3r3P7LOA31+3WwAbXv0GU63Zrp9vk7va71utFbUdb4y/vfZ12dOPAHa9P488db3/3l/e+Hm3vQm0f1hH7LA8HWtS5vRAY53Rb3Nz2dn/8rVMbLja7/gbq9XnxhZ+Dtd/1eCS1/cLC/em9d72PbwMvHGQdr/vc++VpR2ttlTHmRuArakezvGmtzTDGTAFSrLWzgTeAd4wxWdT+QZ7vem6GMeZjIBOoAm6wfz4t4/Xq2f6pQATwSe04AzZba8cDvYFXjTE11B4ZfdJam+lIQ45APdt+kzFmPLXvbz61ox+x1uYbYx4BFrtebor98+F5r1fP9kPt3/uH1vUN5OLT7z2AMeYDake2xRhjcoCHgGAAa+0rwDxqRz5lASXAFa7HfP69r0fbH6S2X+s/XZ/5Klt7oeG2wGeuZUHA+9baLz3egAaoR9snAtcZY6qAUuB819/+fj8vDjShQerRfqjd0fzaWltc56k+/94DI4FLgBXGmGWuZfdSu7PhtZ97zXAvIiIi4kH+2udLRERExCspfImIiIh4kMKXiIiIiAcpfImIiIh4kMKXiIiIiAcpfImIiIh4kMKXiIiIiAcpfImIiIh4kMKXiIiIiAcpfImIiIh4kMKXiIiIiAcpfImIiIh4kMKXiIiIiAcpfImIiIh4UJDTBRxITEyM7datm9NliIiIiBxSamrqTmttbH3W9drw1a1bN1JSUpwuQ0REROSQjDGb6ruuTjuKiIiIeNARhy9jzJvGmFxjTHqdZa2NMfONMWtdv6Ncy40x5iVjTJYxJs0YM9gdxcv/98oP61i4buefli1ct5NXfljnUEUiIiKyPw058vUWMG6fZXcD31prE4FvXfcBTgESXT+TgH81YLuyH0mdIrnx/aX/DWAL1+3kxveXktQp0uHKREREpK4jDl/W2h+B/H0WTwCmuW5PA86ss/xtW+s3oJUxpv2Rblv+14iEGF6+cBA3vr+U575ezY3vL+XlCwcxIiHG6dJERESkDnf3+Wprrd3mur0daOu63RHIrrNejmuZuNGIhBguHtaFl77L4uJhXRS8REREvFCjdbi31lrAHs5zjDGTjDEpxpiUvLy8RqrMfy1ct5N3F23mpuO78+6izf/TB0xERESc5+7wteOP04mu37mu5VuAznXW6+Ra9ifW2testcnW2uTY2HpNlSEuf/TxevnCQdx2Us//noJUABMREfEu7g5fs4HLXLcvA2bVWX6pa9Tj0UBhndOT4gZpOYV/6uP1Rx+wtJxChysTERGRukzt2cEjeKIxHwCjgRhgB/AQMBP4GOgCbALOtdbmG2MM8DK1oyNLgCustQedQTU5OdlqklURERHxBcaYVGttcn3WPeIZ7q21FxzgoRP2s64FbjjSbYmIiIj4C81wLyIiIuJBCl8iIiIiHqTwJSIiIuJBCl8iIiIiHqTwJSIiIuJBCl8iIiIiHqTwJSIiIuJBCl8iIiIiHqTwJSIiIuJBCl8iIiIiHqTwJSIiIuJBCl8iIiIiHqTwJSIiIuJBCl8iIiIiHqTwJSIiIuJBCl8iIiIiHqTwJSIiIuJBCl8iIiIiHtQo4csYc6sxJsMYk26M+cAY08wYE2eMWWSMyTLGfGSMCWmMbYuIiIh4M7eHL2NMR+AmINla2w8IBM4HngKet9Z2B3YDV7l72yIiIiLerrFOOwYBzY0xQUAYsA04HpjuenwacGYjbVtERETEa7k9fFlrtwDPAJupDV2FQCpQYK2tcq2WA3Tc97nGmEnGmBRjTEpeXp67SxMRERFxXGOcdowCJgBxQAcgHBhXn+daa1+z1iZba5NjY2PdXZqIiIiI4xrjtONYYIO1Ns9aWwnMAEYCrVynIQE6AVsaYdsiIiIiXq0xwtdm4GhjTJgxxgAnAJnAAmCia53LgFmNsG0RERERr9YYfb4WUduxfgmwwrWN14C/AbcZY7KAaOANd29bRERExNsFHXqVw2etfQh4aJ/F64GhjbE9EREREV+hGe5FREREPEjhS0RERMSDFL5EREREPEjhS0RERMSDFL5EREREPEjhS0RERMSDFL5EREREPEjhS0RERMSDFL5EREREPEjhS0RERMSDFL5EREREPEjhS0RERMSDFL5EREREPEjhS0RERMSDFL5EREREPEjhS0RERMSDFL5EREREPKhRwpcxppUxZroxZpUxZqUxZrgxprUxZr4xZq3rd1RjbFtERETEmzXWka8XgS+ttb2AAcBK4G7gW2ttIvCt676IiIhIk+L28GWMiQSOA94AsNZWWGsLgAnANNdq04Az3b1tEREREW/XGEe+4oA84D/GmKXGmNeNMeFAW2vtNtc624G2jbBtEREREa/WGOErCBgM/MtaOwgoZp9TjNZaC9h9n2iMmWSMSTHGpOTl5TVCaSIiIiLOaozwlQPkWGsXue5PpzaM7TDGtAdw/c7d94nW2testcnW2uTY2NhGKE1ERETEWW4PX9ba7UC2Maana9EJQCYwG7jMtewyYJa7ty0iIiLi7YIa6XX/CrxnjAkB1gNXUBv0PjbGXAVsAs5tpG2LiIiIeK1GCV/W2mVA8n4eOqExticiIiLiKzTDvYiIiIgHKXyJiIiIeJDCl4iIiIgHKXyJiIiIeJDCl4iIiIgHKXyJiIiIeJDCl4iIiIgHKXyJiIiIeJDCl4iIiIgHKXyJiIiIeJDCl4iIiIgHKXyJiIiIeJDCl4iIiIgHKXyJiIiIeJDCl4iIiIgHKXyJiIiIeJDCl4iIiIgHKXyJiIiIeFCjhC9jTKAxZqkx5nPX/ThjzCJjTJYx5iNjTEhjbFdERETE2zXWka+bgZV17j8FPG+t7Q7sBq5qpO2KiIiIeDW3hy9jTCfgNOB1130DHA9Md60yDTjT3dsVERER8QWNceTrBeAuoMZ1PxoosNZWue7nAB0bYbsiIiIiXs+t4csYczqQa61NPcLnTzLGpBhjUvLy8txZmoiIiIhXcPeRr5HAeGPMRuBDak83vgi0MsYEudbpBGzZ35Otta9Za5OttcmxsbFuLk1ERETEeW4NX9bae6y1nay13YDzge+stRcBC4CJrtUuA2a5c7siIiIivsJT83z9DbjNGJNFbR+wNzy0XRERERGvEnToVY6MtfZ74HvX7fXA0MbaloiIiIiv0Az3IiIiIoMuRRsAAAnrSURBVB6k8CUiIiLiQQpfIiIiIh6k8CUiIiLiQQpfIiIiIh6k8CUiIiLiQQpfIiIiIh6k8CUiIiLiQQpfIiIiIh6k8CUiIiLiQQpfIiIiIh6k8CUiIiLiQQpfIiIiIh6k8CUiIiLiQQpfIiIiIh6k8CUiIiLiQQpfIiIiIh6k8CUiIiLiQW4PX8aYzsaYBcaYTGNMhjHmZtfy1saY+caYta7fUe7e9v9r7/5D7a7rOI4/XzlFnaXhlqzNX5hIS6TpZdosCZeiJSoRoaJIBBa40gzK7I/IvwpSIhaKbNZCp5hTEhFd+KtUWt5t/t6Mu+WP2XRXKn9UMGev/jjfjeuv3Dzf8/ne87mvBxx2ft37fr/POTvndb6f7zk3IiIiYrIbxJavbcB3bc8FjgMulDQXuBS42/bhwN3N6YiIiIgppfXwZXuz7TXN8deAdcBs4AxgWXO1ZcCZbdeOiIiImOwGus+XpEOAecAq4ADbm5uLXgQOGGTtiIiIiMloYOFL0j7ACuBi269OvMy2Ab/Lz1wgaVTS6Pj4+KBai4iIiOjMQMKXpN3pBa/rbd/SnP2SpFnN5bOALW//OdvX2B6xPTJz5sxBtBYRERHRqUF82lHAUmCd7SsnXHQbcH5z/Hzgd23XjoiIiJjspg3gdx4PnAc8LumR5rzLgJ8AN0n6OvAs8NUB1I6IiIiY1FoPX7YfAPQeFy9su15ERETEMMk33EdEREQUlPAVERERUVDCV0RERERBCV8RERERBSV8RURERBSU8BURERFRUMJXREREREEJXxEREREFJXxFREREFJTwFREREVFQwldEREREQQlfEREREQUlfEVEREQUlPAVERERUVDCV0RERERBCV8RERERBSV8RURERBSU8BW77Or7N/DQhpffct5DG17m6vs3dNRRRETE8CgaviSdIulpSWOSLi1Zuys1BpWj5uzLouVrd8z10IaXWbR8LUfN2bf1WqVuvxrvp4iImJyKhS9JuwG/BE4F5gJnS5pbqv5EJV9oSwaVUhYcNoPF58xj0fK1XLnyaRYtX8vic+ax4LAZrdcqdfvVGChL1qpxppK1apyp1lo1zlSyVo0zfRAlt3zNB8Zsb7S9FbgROKNg/R1KvtCWDColLThsBuceexC/uGeMc489aGDzlLr9agyUJWvVOFPJWjXOVGutGmcqWavGmT4Q20UOwFeAJRNOnwcsfq/rH3PMMR6kB8fGPe/ylb7irvWed/lKPzg2PtB6V9y13gd//3Zfcdf6gdYppdbbr1SdkrdfqVo1zlSyVo0z1VqrxplK1qpxJtsGRr2TmWhS7XAv6QJJo5JGx8fHB1qr1JYb6KXt61Y9x7dP/ATXrXruHZtBh832dw+Lz5nHJScfsWOL0aDmKnX7lbyfSj7+Sm6lrG2mkrVqnKnWWjXOVLJWjTPtqpLh6wXgwAmn5zTn7WD7Gtsjtkdmzpw50GZKvqCXDColPLbplbcsyW1fsnts0yut1yp1+9UaKEvWqnGmkrVqnKnWWjXOVLJWjTPtsp3dRNbvAZgGbAQOBfYAHgU+9V7XH+Sy4/bNkNs3P779dJuuum/sHb/3wbFxX3XfWOu1alTq9it5P5V8/JWqVeNMJWvVOFOttWqcqWStGmfajl1YdiwWvnp98UXgL8AG4If/77qDDF8JRNGlko+/GsNrjbVqnKnWWjXOVLJWjTNttyvhS73rTz4jIyMeHR3tuo2IiIiI9yVpte2RnbnupNrhPiIiIqJ2CV8RERERBU3aZUdJ48CzBUrNACbJxx9aU+NMUOdcmWl41DhXjTNBnXNlpsnvYNs79VUNkzZ8lSJpdGfXaIdFjTNBnXNlpuFR41w1zgR1zpWZ6pJlx4iIiIiCEr4iIiIiCkr4gmu6bmAAapwJ6pwrMw2PGueqcSaoc67MVJEpv89XREREREnZ8hURERFR0JQNX5JOkfS0pDFJl3bdTxskXStpi6Qnuu6lLZIOlHSvpKckPSnpoq57aoOkPSX9WdKjzVw/7rqntkjaTdJaSbd33UsbJD0j6XFJj0iq5s9uSNpP0s2S1ktaJ+kzXffUD0lHNPfR9sOrki7uuq9+SfpO8xzxhKQbJO3ZdU9tkHRRM9OTNdxPu2pKLjtK2o3e35g8CdgEPAycbfupThvrk6QTgNeB39g+sut+2iBpFjDL9hpJHwZWA2dWcF8JmG77dUm7Aw8AF9n+U8et9U3SJcAI8BHbp3XdT78kPQOM2K7p+4iQtAz4o+0lkvYA9rb9z677akPzHP8CcKztEt8XORCSZtN7bphr+z+SbgLusP3rbjvrj6QjgRuB+cBW4E7gm7bHOm2soKm65Ws+MGZ7o+2t9B4EZ3TcU99s/wH4e9d9tMn2ZttrmuOvAeuA2d121b/m77C+3pzcvTkM/TshSXOALwFLuu4l3pukfYETgKUAtrfWErwaC4ENwxy8JpgG7CVpGrA38LeO+2nDJ4FVtv9textwP/DljnsqaqqGr9nA8xNOb6KCF/TaSToEmAes6raTdjTLc48AW4Df265hrp8D3wP+23UjLTKwUtJqSRd03UxLDgXGgV81S8RLJE3vuqkWnQXc0HUT/bL9AvAz4DlgM/CK7ZXddtWKJ4DPSdpf0t7AF4EDO+6pqKkavmLISNoHWAFcbPvVrvtpg+03bX8amAPMbzbFDy1JpwFbbK/uupeWfdb20cCpwIXN8v6wmwYcDVxlex7wL6CWfV/3AE4Hftt1L/2S9FF6qzKHAh8Hpks6t9uu+md7HfBTYCW9JcdHgDc7baqwqRq+XuCtKXtOc15MQs0+USuA623f0nU/bWuWe+4FTum6lz4dD5ze7CN1I3CipOu6bal/zdYHbG8BbqW328Kw2wRsmrC19WZ6YawGpwJrbL/UdSMt+ALwV9vjtt8AbgEWdNxTK2wvtX2M7ROAf9DbD3vKmKrh62HgcEmHNu+SzgJu67ineBfNjulLgXW2r+y6n7ZImilpv+b4XvQ+/LG+2676Y/sHtufYPoTe/6l7bA/1u3RJ05sPetAsy51Mb8lkqNl+EXhe0hHNWQuBof4QywRnU8GSY+M54DhJezfPhQvp7fc69CR9rPn3IHr7ey3vtqOypnXdQBdsb5O0CLgL2A241vaTHbfVN0k3AJ8HZkjaBPzI9tJuu+rb8cB5wOPN/lEAl9m+o8Oe2jALWNZ8KutDwE22q/hqhsocANzae91jGrDc9p3dttSabwHXN29ANwJf67ifvjUB+STgG1330gbbqyTdDKwBtgFrqedb4VdI2h94A7iwsg98vK8p+VUTEREREV2ZqsuOEREREZ1I+IqIiIgoKOErIiIioqCEr4iIiIiCEr4iIiIiCkr4ioiIiCgo4SsiIiKioISviIiIiIL+B9JOQIR4evceAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 720x432 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Sine wave.\n",
"\n",
"def sine(domain, freq=1.0):\n",
" return np.sin(2.0 * np.pi * freq * domain)\n",
"\n",
"wave = sine(time_space())\n",
"plot_signal_and_spectrum(time_space(), wave)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Saw Wave\n",
"\n",
"Saw waves consist of every integer harmonic _n_ above the fundamental frequency, where that harmonic's amplitude is n<sup>-1</sup>."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x432 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def saw(domain, freq=1):\n",
" harmonics = np.asarray([1.0 / h * sine(domain, freq=freq * h) for h in range(1, Harmonics)])\n",
" wave = np.sum(harmonics, axis=0)\n",
" return wave\n",
"\n",
"wave = saw(time_space())\n",
"plot_signal_and_spectrum(time_space(), wave)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can invert a saw wave to get what many synths call a \"blade\" wave. Instead of gradually falling and then spiking up, blade waves gradually rise and the sharply fall."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x432 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_signal_and_spectrum(time_space(), -1 * saw(time_space()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Square Wave\n",
"\n",
"Square waves are made of every other harmonic above the fundamental frequency. Again, the amplitude of each harmonic _n_ is _1 / n_."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x432 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def square(domain, freq=1):\n",
" harmonics = np.asarray([1.0 / h * sine(domain, freq=freq * h) for h in range(1, Harmonics, 2)])\n",
" wave = np.sum(harmonics, axis=0)\n",
" return wave\n",
"\n",
"wave = square(time_space())\n",
"plot_signal_and_spectrum(time_space(), wave)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Triangle Wave"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x432 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def triangle(domain, freq=1):\n",
" def label(i):\n",
" return 2. * i + 1.\n",
" harmonics = np.asarray([((-1) ** h) * (label(h) ** -2) * sine(domain, freq=freq * label(h)) for h in range(Harmonics)])\n",
" wave = np.sum(harmonics, axis=0)\n",
" return wave\n",
"\n",
"wave = triangle(time_space())\n",
"plot_signal_and_spectrum(time_space(), wave)"
]
},
{
"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.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}