music/waves.ipynb

312 lines
124 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": 23,
"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(length, 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='#666666', linewidth=0.75)\n",
" plt.plot(domain, data)\n",
" \n",
" num_freqs = Harmonics * 2\n",
" freqs, mags = (x[:num_freqs] for x in frequency_spectrum(data))\n",
" plt.subplot(212)\n",
" plt.xticks(range(num_freqs))\n",
" plt.bar(freqs[:num_freqs], mags[:num_freqs])"
]
},
{
"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": 24,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'length' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-24-e9d29215ed5e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mwave\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtime_space\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mplot_signal_and_spectrum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtime_space\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwave\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m<ipython-input-23-fdf3932b5a6a>\u001b[0m in \u001b[0;36mplot_signal_and_spectrum\u001b[0;34m(domain, data)\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0mnum_freqs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mHarmonics\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 34\u001b[0;31m \u001b[0mfreqs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmags\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mnum_freqs\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfrequency_spectrum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 35\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m212\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_freqs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-23-fdf3932b5a6a>\u001b[0m in \u001b[0;36mfrequency_spectrum\u001b[0;34m(data)\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;31m# Get the frequencies for a DFT plot (this doesn't depend on the actual signal) based on the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;31m# spacing of our samples.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mfreqs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfft\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfftfreq\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlength\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msample_spacing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfreqs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfft\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'length' is not defined"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAl8AAAC3CAYAAAAsNzvbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzt3Wd4VNX69/HvSiEhhUAKJIQUQhJKCh1pglgQRYoICvb2x97LEUFQsGA79gJHPOpBQUWqFEUBG9JbCgkpQEiA9IT0up4XGc8TOZSEJLNnJvfnunIxZWf2bzHMcO+9V1Faa4QQQgghhHnYGR1ACCGEEKI1keJLCCGEEMKMpPgSQgghhDAjKb6EEEIIIcxIii8hhBBCCDOS4ksIIYQQwoyk+BJCCCGEMCMpvoQQQgghzEiKLyGEEEIIM5LiSwghhBDCjByMDnA23t7eOjg42OgYQgghhBDntXv37hyttU9DtrXY4is4OJhdu3YZHUMIIYQQ4ryUUkcbum2zXHZUSn2qlMpSSsWe5XmllHpXKZWslDqglOrXHPsVQgghhLA2zdXn6zNgzDmevwoIM/1MBz5qpv0KIYQQQliVZim+tNa/Annn2GQC8IWusw1or5Tya459CyGEEEJYE3P1+fIHjtW7n2567ISZ9t/qVdXUcjS3hNTsEgrKqigur6a6thZXJwfcnBzo0qEt3XzcaO/SxuioQohmUlhWRWp2Mcfyyygur6akoho7O4W7kwPt2jrS1duVYG8XnBzsjY4qRKtiUR3ulVLTqbssSWBgoMFprFt1TS3bD+fxW1IOW1NyiD9+iupafd7f6+juxOAQL4aFejGqR0c6ujubIa0Qojnkl1SyKSGLrSm5bEvNJaOg7Ly/Y6egu287hnbzYniYN8O6edPGQWYhEqIlKa3P/x9yg15IqWDge6115BmeWwBs0VovMd1PBC7RWp/1zNeAAQO0jHZsvKTMIpbuPMaqfcfJKa7AwU7RN7A9A4I9CevoRoiPG16ubXB3dsDeTlFaWUNReRVpeaWkZJUQk1HI1pRccoorsFMwPMyH6/r5c3WUH4728oUshKWpqdX8dDCTZbvT2ZKYRVWNpoOLI0O6eRHdpT3dfNwI8nKhnbMjrk721NZCUUUV+SVVpOYUk5xVzO6j+ew6mk9ldS3tXRy5JtqPqQMDifT3MLp5QlgNpdRurfWABm1rpuJrLPAgcDVwEfCu1nrQuV5Piq/G2X00j4+2pPDTwSwc7RWX9ujItX39uTjMB1enxp3g1FqTmFnEmv3HWbn3OBkFZXT2cOaui0OYNigAlzYWdcJUiFapvKqG7/ak869fUzmSW4qPuxMT+3RmfG9/Ijq3w85ONfr1tqbksGLvcX6MO0lFdS3DQr24b2Qow0K9UKpxrydEa2P24ksptQS4BPAGMoE5gCOA1vpjVfepfZ+6EZGlwB1a63NWVlJ8NUxKdjGvrDvITwez6ODiyG1Dg7l1SDCers3Td6u2VvPLoWw++iWFHYfz6OjuxJNXdue6fl2wb+SXuxCi6bTWrI05wfz1CaTnlxHdxYN7R3ZjdK9OODTT2elT5VUs2Z7Got8Pk1VUwdBuXswc25OIznImTIizMeTMV3OT4uvcyipr+OfGRP79xxGcHe25f1Q3bh8a3KJnpXYeyePldQfZm1ZAROd2vDIpiugu7Vtsf0KIv0vKLGLG8hh2Hc2nh687z17dk4vDvFvsrFRFdQ1Ltqfx9s9JFJZVMXVgIDOu7kE7Z8cW2Z8Q1kyKLxu380geT327nyO5pUwdGMATo7vj4+5kln1rrVm9/zgvrT1Ibkkl944M4eHLwmS0lBAtqLqmloW/pfL2xiRcnez5x5geTBkQYLazz4WlVbzzcxKfbT1Mp3bOvDIpiku6dzTLvoWwFlJ82aiaWs3bPx3i/c3JdOnQllcnRTM01NuQLIWlVcxbG8+y3en09GvHBzf2JcTHzZAsQtiy4wVlPLRkL7uP5nNVpC9zJ0Sa7WDrdHvT8nl62QGSsoq5bUgQz47tKQdeQphI8WWDsk6V8/DSvWxLzeP6AV2YMy6i0R3pW8KmhEye+GY/VTWa+ddFcU10Z6MjCWEztiRm8djX+6isruXlSVFM6ONvdCQqqmt4bUMii34/THQXDz64sR8Bni5GxxLCcFJ82ZjYjELu+nwnhWVVvDgxisn9uxgd6W+OF5Tx4Fd72JNWwH2XdOOp0d0bPdJKCPH/aa1Z8Gsqr25IoHsndz68qZ/FnVneEHuSp5btx95O8fHN/Rkc4mV0JCEM1ZjiSyZusnA/xJ1kysd/4mBnx4r7h1lc4QXQuX1bvr5nCDdeFMhHW1J44Ks9lFXWGB1LCKtUWV3LP747wPz1CYyN8mPF/cMsrvACGBPpy/cPDcfLtQ23LNrOst3pRkcSwmpI8WXBvvjzCPcu3k24rzsrHhhKT792Rkc6K0d7O16aGMmssT3ZEHeSqf/aRkFppdGxhLAqJRXV3PnZTr7Zlc5Dl4by7tS+tG1juX2qgrxcWX7fMAYGe/Lkt/t556ckLPVqihCWRIovC6S15v1NScxeFcdlPTqx9P8GW8UyP0op7r44hI9u6s/B46e4YcE2sk6VGx1LCKtQUFrJzYu2szUlh9cmR/OElVy+93Bx5PM7BzGpnz9v/XSIF9celAJMiPOQ4svCaK2ZvyGBN348xLV9/fno5n4WfeR7JmMiffn3HQM5ll/K5I//JD2/1OhIQli0nOIKpi7cRlzGKT68qT/XDwgwOlKjONrb8cbk3tw+NJhFvx/mme9iqG3AWrJCtFZSfFkQrTWvbkhkwS+p3Dw4kDen9Lba9RSHhXrz5d0XUVBaybR/beNE4fkX+BWiNcorqeTmT7ZzJLeERbcPYEykr9GRLoidnWLOuF48dGkoX+86xrMrpAAT4mys8392G/XWxkN8/EsKNw8OZN6ESKu45HAufQM78J+7LqKgpIob/7WdTLkEKcTfFJTWFV6Hc0pYdNtALg7zMTpSkyileGJ0dx66NJSlO48xe3WsXIIU4gyk+LIQH21J4d1NyUwdGMDc8ZE2s4ht74D2fHbnILJOlXPTJ9vJL5FO+EJAXef62/69k+SsYhbeOoBhBk2Y3BIevyKce0aGsHhbGq+sTzA6jhAWR4ovC/DNrmO8uiGB8b078/K1UVZ/xut0/YM6sOj2gaTllXLn5zspraw2OpIQhqqqqeW+L/cQk17A+zf2ZWS4dZ/xOp1SimfG9ODWIUEs/DWVhb+mGB1JCIsixZfBfj6YyYzlMVwc5s0bU3rbXOH1l8EhXrw7tQ/7jxXw4Fd7qaqpNTqSEIaordU8vewAvx7K5pVJUYyOsM4+XuejlGLOuAjGRvvx8roElu+RecCE+IsUXwY6kF7AA1/tIaJzOz66uT9tHGz77RgT6ce8iZFsSshi9irpCyJapzd+TGTF3gyeurI7NwwMNDpOi7K3U/zz+t4M7ebF08sO8EdyjtGRhLAItv2/vQU7UVjG3Z/vwsvViUW3DcTNAtZpNIebLgri/ku6sWTHMRb9ftjoOEKY1bLd6Xy4JYVpgwK4/5JuRscxCycHez6+pT8hPq7ct3g3KdnFRkcSwnBSfBmgpKKauz7bRWllDZ/ePhAfdyejI5nVk6O7c3WULy+tO8jG+Eyj4whhFttTc5mx/ADDQr2YO8F2BtU0RDtnRxbdNhBHezvu/GynDLwRrZ4UX2amteapZftJOHmK92/sS3dfd6MjmZ2dneLNKX2I9vfgkaV7ScosMjqSEC0qo6CM+77cQ4CnCx/e2N9q5+9rigBPFxbeOoATheU88NUeqqXfp2jFWt83gME++e0w62JO8o8xPbike0ej4ximbRt7FtwyAJc29ty7eDfFFTICUtimiuoa7l+8m8rqWj65dQAeLo5GRzJM/6AOvDgxkq0puby58ZDRcYQwjBRfZrQ9NZf5GxIYE+HL9BEhRscxnK+HM+9N68eR3FKeXrZfOuALmzR3TTz70wt5Y0pvQnzcjI5juOsHBDBtUAAfbUnhx7iTRscRwhBSfJlJ5qlyHvhqL0GeLrw+JbpV9fc4lyHdvHj6yu6sizkpHfCFzfludzpfbk/jnpEhVrtsUEuYMy6C6C4ePPHNfg7nlBgdRwizk+LLDKpqanngyz2UVFTz8S39cXduvZcdzmT6iBDGRPjyyvoEtqfmGh1HiGYRf/wUz66IYUiIF0+N7m50HIvi7GjPhzf1w95ecd/i3TLxsmh1pPgyg1fWJbDraD6vTo4mvFPr62B/PkopXp8STZCnCw8u2UuWrAEprFxhaRX3Lt5NexdH3p3WF4dW2MH+fLp0cOHdqX1JzCxi5gqZ90+0LvKN0MK+P3CcT/84zO1Dgxnfu7PRcSyWu7MjH9/Sn+LyahkJJaya1ponvt3HicIyPrypf6ubSqYxRoT78Njl4azYm8HibUeNjiOE2Ujx1YLS80uZsTyGvoHtefbqnkbHsXjhndyZf10UO4/k8/7mZKPjCHFB/rPtKD8dzGLGVT3pH9TB6DgW78FRoYwM92He2oMckmlnRCshxVcLqanVPP71fmprNe/c0Nfmlw5qLhP6+DOprz/v/pzE7qN5RscRolEOZRbx0tqDjOruwx3Dgo2OYxXs7BRvTOmNu5MDDy/ZS3lVjdGRhGhxzVIRKKXGKKUSlVLJSqlnzvD87UqpbKXUPtPP3c2xX0v28S8p7DiSx9wJkQR6uRgdx6q8MCEC/w5tefTrfRSVVxkdR4gGqaiu4eEle3FzcuC1yb1lRHMj+Lg78fqUaBJOFvH6D4lGxxGixTW5+FJK2QMfAFcBvYBpSqleZ9j0a611H9PPJ03dryXbf6yAtzYe4ppoPyb18zc6jtVxd3bkrev7kJFfxvOr442OI0SDvPFDIgkni3htcrT087oAl/boxK1Dglj0+2F+S8o2Oo4QLao5znwNApK11qla60pgKTChGV7XKpVUVPPo1/vo6O7ESxOj5Oj3Ag0I9uTBS8P4bk86a/YfNzqOEOf0e1IO//rtMLcMDuKynp2MjmO1nr26J6Ed3Xjim/3kyfqPwoY1R/HlDxyrdz/d9NjprlNKHVBKLVNKBTTDfi3SvO/jOZJbwj9v6NOqlxFpDg9fGkrfwPbMXBFDRkGZ0XGEOKP8kkoe/2YfoR3dZGBNEzk72vPO1D4UlFbxj+8OyPQTwmaZqxf4GiBYax0NbAQ+P9NGSqnpSqldSqld2dnWd9p5Q+xJlu48xr0juzE4xMvoOFbPwd6Ot2/oYxq8sI+aWvkiFpZFa80zyw+QX1rJO1P70LaNvdGRrF5EZw+eurI7G+MzWbrz2Pl/QQgr1BzFVwZQ/0xWF9Nj/6W1ztVaV5jufgL0P9MLaa0Xaq0HaK0H+Pj4NEM088ktrmDmihgi/dvx2OXhRsexGUFerswZH8H2w3l8vvWI0XGE+JtV+47zQ1wmT47uTkRnD6Pj2Iy7hndlWKgXL34fz7G8UqPjCNHsmqP42gmEKaW6KqXaAFOB1fU3UEr51bs7HjjYDPu1KHNWx3GqvIo3p/SRaSWa2ZT+XRjV3YfXfkjgiKwDJyxEVlE5c1bH0S+wPXdfHGJ0HJtiZ6d49bpoAGYsj5HLj8LmNLlK0FpXAw8CP1BXVH2jtY5TSs1VSo03bfawUipOKbUfeBi4van7tSQbYk/w/YETPHxpGN19Zfmg5qaU4pVJ0Tja2/H0dweolcuPwmBaa2atiKWsqobXJvfG3k4G1jS3Lh1cmHF1T35PzpHLj8LmNMspGq31Oq11uNa6m9b6JdNjs7XWq023Z2itI7TWvbXWo7TWCc2xX0uQX1LJrJWxRHRux72XdDM6js3y9XDmuWt6seNwHv+RZUiEwdYcOMGP8Zk8cUU4oR3djI5js24cFMjQbl68tPagDLoRNkWujzXRC2viKCit4vXJvXGUxXNb1JT+XRgR7sOrGxJIy5V+IMIYOcUVzFkVS+8AudzY0v66/FirtVx+FDZFqoUm2Bifycp9x3nw0lB6dW5ndBybp5Ri/qQo7JTiH3L5URhk9qpYSipqeGNytFxuNIMATxeeuaoHvx7K5ttd6UbHEaJZSPF1gQpKK3l2RQw9fN25/5JQo+O0Gp3bt2XW2J78mZrLVzvSjI4jWpm1B06wLuYkj1weRlgn6d9pLjdfFMRFXT2ZtzaeE4Vy+VFYPym+LtC87w+SV1LJG1N6y+hGM7thYAAXh3nzyjrpByLMJ7+kktmrYony9+CeEXK50Zzs7BSvTY6mukYzc0WsXH4UVk+qhgvwR3IO3+1J596RIUT6y9w+5lY3+jGKWg2zV8oXsTCPl9YdpLCsitenROMg/TvNLsjLlSev7M6mhCzWxpwwOo4QTSLfII1UXlXDzBUxBHu58NClYUbHabW6dHDhidHh/JyQxfrYk0bHETZua3IOy3anM31ECD18pX+nUW4fGkyUvwfPr46nsLTK6DhCXDApvhrpvU1JHMkt5aVro3B2lKVEjHT70GAi/dsxZ3UchWXyRSxaRnlVDTNXxhLk5cLDl8kBl5Hs7erOeueVVDB/g83MWCRaISm+GiHxZBELfknlun5dGBbqbXScVs/B3o5Xro0mt7iC1+SLWLSQDzYnczinhJcmygGXJYj09+Cu4V1ZsiONnUfyjI4jxAWR4quBams1M5YfwN3ZgZljexodR5hEdfHgjmFd+XJ7Grvki1g0s0OZRXy0JYVJff0ZHiYHXJbisSvC8W/flhnLY6iorjE6jhCNJsVXA325I409aQXMGtsLT9c2RscR9Txe74u4srrW6DjCRtQdcMXIAZcFcmnjwIsTI0nOKmbBL6lGxxGi0aT4aoDMU+W8tj6BYaFeTOrnb3QccRpXJwfmToggKauYhb+mGB1H2IglO9PYfTSfZ6/uiZebk9FxxGlG9ejI2Gg/3t+UTEp2sdFxhGgUKb4a4IU1cVTW1PLSxCiUkhmtLdFlPTsxNsqPdzfV9c8RoimyisqZvz6BISFeTO7fxeg44izmjOuFk6MdM1fI0kPCukjxdR6/HMpmXcxJHhwVSrC3q9FxxDnMGdcLJ3s75qyOky9i0SSvrEugoqqWl66NlAMuC9bR3ZlnrurBttQ8Vu07bnQcIRpMiq9zKK+qYc6qWEK8XZk+Uma0tnQd2znz+Ohwfj2ULXN/iQu2LTWXFXszmD4ihBAfN6PjiPOYOjCQ3gHteXHtQZlyRlgNKb7OYeGvqRzJLeWFCRE4OcgQc2twy+Agevm1Y+6aeIorqo2OI6xMVU0ts1fF4t++LQ+MkjVbrYG9neLFCZHkllTw1sZDRscRokGk+DqLY3mlfLA5mbFRflwc5mN0HNFADvZ2zJsYyclT5bz7c5LRcYSV+eyPIxzKLOb58RG0bSMHXNYiqosHtwwO4os/jxCbUWh0HCHOS4qvs3h+dRz2dopZ18gQc2vTP6gDNwwI4NPfD5N4ssjoOMJKnCws5+2fDnFZj45c0auT0XFEIz0xujuerm2YtTKW2lrp8yksmxRfZ7AxPpOfE7J49PIw/DzaGh1HXIB/XNUDN2cHnlslC2+Lhpm3Np7qWs2ccRFGRxEXwKOtI89e3ZN9xwr4etcxo+MIcU5SfJ2mrLKG51fHEd7JjTuGdTU6jrhAnq5t+MeYHuw4nMeKvRlGxxEW7vekHNYeOMH9l4QS6OVidBxxga7t68+grp68uiGBvJJKo+MIcVZSfJ3mg83JZBSUMXdCJI728tdjzW4YEECfgPa8vE5GQYmzq6iuYfbquoWz75FRzVZNKcW8CZEUl1fz6npZ71VYLqku6knNLmbhr6lc29efwSFeRscRTWRnp3hxYiR5JZW8+WOi0XGEhfrkt8OkZpfw/PgIWTjbBnT3defO4V35etcxdh/NNzqOEGckxZeJ1po5q+NwcrBjxtU9jI4jmkmkvwe3DgnmP9uOEpMuo6DE32UUlPHepiSujOjEqO4djY4jmskjl4Xh286ZWStjqa6R9V6F5ZHiy2R97El+S8rhidHhdHR3NjqOaEaPjw7Hy9WJWStjqJFRUKKeuWviAJgtnextiquTA7PH9eLgiVP8Z9tRo+MI8T+k+AJKKqqZuyaeXn7tuHlwkNFxRDNr5+zIrLE92Z9eyNKdaUbHERZic2IWP8Rl8tClYfi3l1HNtuaqSF9GhPvw5o+HyDpVbnQcIf5Gii/g3Z+TOHmqnHkTI3GQTvY2aUKfzgwO8eS1DYnkFlcYHUcYrLyqblRziI8r/3exdLK3RUopXhgfQWV1LS+tO2h0HCH+plkqDaXUGKVUolIqWSn1zBmed1JKfW16frtSKrg59tscDmUWsej3w9wwIID+QR2MjiNayF+joEoqqnltg3S+b+0W/JLK0dxS5o6PpI2DHHDZqq7ertw7MoRV+47zZ0qu0XGE+K8mf+sopeyBD4CrgF7ANKVUr9M2uwvI11qHAm8BrzZ1v81Ba81zK2Nxc3bgH1dJJ3tbF9bJnbtkFFSrl5Zbyodbkhkb7cfwMG+j44gWdv+oULp0aMvsVbFUSed7YSGa45BvEJCstU7VWlcCS4EJp20zAfjcdHsZcJlSSjXDvptk1b7jbD+cx9NX9sDTtY3RcYQZPGwaBfWcjIJqtV5YE4eDneK5sacfIwpb5Oxoz/PjIkjKKubT3w8bHUcYIKuonKJyy5rrsTmKL3+g/loO6abHzriN1roaKAQMnUiruKKaF9cepHdAe6YODDAyijAjVycHnrumF/EnTvHldul839r8/6XDwvH1kFHNrcXlvTpxec+OvPNzEicKy4yOI8xs5opYxr33u0UdcDsYHaA+pdR0YDqAr68vb775ZovtS2voq9rhWVTBW29ta7H9CMujNQQ4BvDSmgOk/bESF7saoyMJM6jSii/zQvC0ryV/xwre3Gl0ImFOnWscqajsyi3/XMlV7Y4bHUeYyZEKVzaeCmCoaxbvvL3H6Dj/1RzFVwZQ/9RRF9NjZ9omXSnlAHgA/9P7UWu9EFgIMGDAAP3EE080Qzwh/tek7GKufPtX8gMv4bkb+hgdR5jBmz8mUrQpmaXTBzM4ZJLRcYQBvH9O4p8bDzFw3OWMCPcxOo5oYeVVNVz59q+E+Cg+e+S2Fh9c8+STTzZ42+ZIshMIU0p1VUq1AaYCq0/bZjVwm+n2ZGCT1lpmuxSGCfFxY/qIEJbvzWB7qoyCsnWHc0pY8IssHdbaTR8RQrCXC8+vjqOiWs5427qFv9aNan5hfITFjWpuchpTH64HgR+Ag8A3Wus4pdRcpdR402aLAC+lVDLwOPA/01EIYW4PjqqbXHP2qjgZBWXDZOkw8RdnR3ueHx9Bak4Jn/wmne9t2bG8Uj7YnMzYKD8uDrO8s5zNUgpqrddprcO11t201i+ZHputtV5tul2utZ6itQ7VWg/SWqc2x36FaIq2beyZM64XiZlFfL71iNFxRAtZH3uSXw9l87gsHSaAS7p3ZEyEL+9tSiI9v9ToOKKFvLAmDns7xcyxPY2OckaWdR5OCDO7olcnRnX34e2fksiUJUhsTnG9pcNukaXDhMnscb1QKOauiTc6imgBG+Mz+elgFo9cFkZnC106TIov0aoppXh+fASVNbW8uFaWILE1snSYOJPO7dvy8GVh/BifyeaELKPjiGZUVlm3dFhYRzfuHN7V6DhnJd9GotUL8nLl/ku6sWb/cbYm5xgdRzSTxJNFfPr7YaYOlKXDxP+6a3hXuvm4Mmd1HOVV0vneVnywOZmMgjLmTYzE0YIPuCw3mRBmdO/IbgR6uvDcqlgqq6XzvbXTWvPcqrqlw54eI53sxf9q42DHvAmRpOWV8vEvKUbHEc0gJbuYBb+mWMWoZim+hKBuFNQL4yNIyS5hkSxBYvVW7M1gx+E8nhkjS4eJsxsa6s243p35cEsKR3NLjI4jmkBrzZxVcTg72lvFqGYpvoQwGdWjI6N7deLdn5M4XiBLkFirwrIqXl53kL6B7bl+gCwdJs5t5tU9cbRTPL86Dpl+0nqtjTnB78k5PDm6u1WMapbiS4h6Zo/rhUYz73sZBWWt3vwxkbySSuZNiMTOThkdR1g4Xw9nHrsinM2J2WyMzzQ6jrgAxRXVzPs+nojO7bjZSkY1S/ElRD1dOrjw0KVhrI89yS+Hso2OIxopJr2Q/2w7yq1Dgon09zA6jrAStw0NJryTGy+siaesUjrfW5u3Nx4iq6iCFydGYm8lB1xSfAlxmrsv7kqItytzVsXKEiRWpKZWM2tlDF6uTjw+OtzoOMKKONrXdb7PKCjjg83JRscRjZBw8hT/3nqEqQMD6RtoPaOapfgS4jRODva8MCGCI7mlLPxFFmOwFkt3prE/vZBZY3vSztnR6DjCylwU4sWkvv4s/DWV1Oxio+OIBqit1cxaEUs7ZweevrK70XEaRYovIc7g4jAfxkb58f7mZI7lyRIkli63uILXNiQyOMSTCX06Gx1HWKlnru6Bk4Mdc6TzvVX4bk86u47mM+OqnnSwslHNUnwJcRazrumJg51i9qpY+SK2cC+tO0hJRTXzJkSilHX0+RCWp6O7M0+MDue3pBzWHDhhdBxxDvkllbyyPoF+ge2Z3L+L0XEaTYovIc7Cz6Mtj4/uzubEbNbGyBexpfojOYflezK4d2Q3wjq5Gx1HWLlbhgQT3cWDuWviKCytMjqOOIuX1h3kVFkVL0+KsspRzVJ8CXEOtw8NJsrfgxfWxFNYJl/Elqa8qoZnV8QQ7OXCg5eGGh1H2AB7O8XL10aRX1rF/A2y3qsl2pqcw7Ld6UwfEUIP33ZGx7kgUnwJcQ72dopXJkWRV1LJqxsSjI4jTvPepiSO5pby0rVRODvaGx1H2IhIfw/uGt6VJTuOseNwntFxRD3lVTXMXBlLkJcLD18WZnScCybFlxDnEenvwZ3Dgvlqexo7j8gXsaVIPFnEgl9Sua5fF4aFehsdR9iYRy8Pw799W2YsPyBTzliQDzYnczinhJcmWvcBlxRfQjTAY1eEm76IY+SL2ALU1mpmLD+Au7MDM8f2NDqOsEEubRx48dpIUrJL+HiLTDljCQ5lFvHRlhQm9fVneJh1H3BJ8SVEA7i0ceDFiZEkZxWzQOb+MtyXO9LYk1YV47OkAAAYOElEQVTArLG9ZOFs0WJGde/IuN6d+WBzMslZMveXkeoOuGJs5oBLii8hGmhUj45cE+3H+5uSSZFJGA2Teaqc19YnMCzUi0n9/I2OI2zc7Gt64exox7MrYqitlSlnjLJkZxq7j+bz7NU98XJzMjpOk0nxJUQjzB5X90U84zv5IjaC1prnVsZSUVPLixOjZE4v0eJ83J149uqe7Dicx9Kdx4yO0yqdKCxj/roEhoR4WeWcXmcixZcQjdDR3ZlZ1/Rix5E8vvjziNFxWp3V+4/zY3wmT1wRTldvV6PjiFbihoEBDO3mxcvrDpJRUGZ0nFZF67rLjdW1mvnX2c4BlxRfQjTSlP5dGBnuw6sbEknLlaWHzCW7qILnV8fRJ6A9d18cYnQc0YoopXj1umhqteaZ7w7Iihdm9N2eDLYkZvP0mO4EednOAZcUX0I0klJ1c3852Cme/m6/XH40k9mrYimprOGNKdHYW+GM1sK6BXi6MOOqHvyWlMO3u9KNjtMqZJ4qZ+6aOAYFe3LbkGCj4zQrKb6EuACd27dl5tiebEvN48sdaUbHsXlrD5xgfexJHr08jNCOsoSQMMZNFwUxOMSTed/Hc6JQLj+2JK01zy6PoaK6llcnR1vlEkLnIsWXEBfohoEBXBzmzSvrDnIsTy4/tpTc4gqeWxVLdBcPpsvlRmEgO7u6y4/VtXWFgVx+bDkr92Xwc0IWT13Z3Sb7dzap+FJKeSqlNiqlkkx/djjLdjVKqX2mn9VN2acQlkIpxfzrolHAM8ulH0hLmb06jqLyKl6f3BsHezleFMYK8nLl6THd2ZyYzXd7MoyOY5OyTpXz/Op4+gW2545hXY2O0yKa+k32DPCz1joM+Nl0/0zKtNZ9TD/jm7hPISyGf/u2PDu2J38k5/KVXH5sdutjTrD2wAkeuSyM7r5yuVFYhtuGBDMo2JO5a+I4WVhudByborVm5spYyqpqeH1Kb5vt39nU4msC8Lnp9ufAxCa+nhBW58ZBgQwP9ebF7w+SKpOvNpvMU+U8uyKGKH8P7hnZzeg4QvyXnZ3i1cnRVNVonlomg26a07e70tkYn8mTo8Pp5uNmdJwW09Tiq5PW+oTp9kmg01m2c1ZK7VJKbVNKnbVAU0pNN223Kzs7u4nRhDAPpRRvTOlNGwc7Hv16H1U1tUZHsnq1tZonv91PWVUNb0/tg6NcbhQWpqu3K7PH9eK3pBw+/eOw0XFswuGcEp5fE8fQbl7cPdy2+3ee9xtNKfWTUir2DD8T6m+n6zq8nK38D9JaDwBuBN5WSp3xMFZrvVBrPUBrPcDHx6exbRHCML4ezsyfFMWB9ELe/umQ0XGs3qd/HOa3pBxmXxNh00e/wrpNHRjA6F6deG1DIvHHTxkdx6pV1dTy6NK9ONrb8eb1vW1udOPpzlt8aa0v11pHnuFnFZCplPIDMP2ZdZbXyDD9mQpsAfo2WwuEsBBXRflx/YAufLglhe2puUbHsVoHT5zitQ2JXNGrE9MGBRgdR4iz+mvQTXsXRx5ZupfyqhqjI1mtd39OYn96Ia9MisLPo63RcVpcU8/lrwZuM92+DVh1+gZKqQ5KKSfTbW9gGBDfxP0KYZHmjIsgyNOFx7/ZT2FZldFxrE55VQ2PLN2Lh4sj8yfZzlIiwnZ5urbhjSm9Scoq5pV1B42OY5V2HM7jg83JTOnfhauj/IyOYxZNLb7mA1copZKAy033UUoNUEp9YtqmJ7BLKbUf2AzM11pL8SVskquTA29P7cvJU+XMWhkr00800vz1CRzKLOaNKb3xcnMyOo4QDTIi3Ie7hnfl8z+PsjnhjBeAxFkUllXx2Nf7CPB0Yc74CKPjmE2Tii+tda7W+jKtdZjp8mSe6fFdWuu7Tbe3aq2jtNa9TX8uao7gQliqPgHteezyMNbsP86KvTIPUENtTszis61HuHNYV0aGS59PYV2eurI7PXzdeWrZfrKLKoyOYxW01sxeFcvJU+W8fUMf3JwcjI5kNjKESIgWcN8loQwK9mTWyliSMouMjmPxMgrKePzrffTwdefpMd2NjiNEozk72vPutL4UlVfzyNK9VMuo5/NasuMYq/Yd59HLwugbeMY52m2WFF9CtAB7O8W70/ri0saeexbvpqhc+n+dTUV1Dfcv3k11jebDm/rh7GhvdCQhLkh4J3denBjJ1pRc3twoo57PZf+xAp5fHceIcB/uHxVqdByzk+JLiBbi6+HMe9P6cTS3lKeXyfJDZ/PCmnj2pxfy+pTehMi0EsLKTRkQwLRBgXy0JYUf404aHcci5ZVUct/i3fi4O/HODX1sdhb7c5HiS4gWNKSbF09f2Z31sSf55DeZiPF0y3an89X2NO4ZGcKYSF+j4wjRLOaM60V0Fw+e+GY/h3NKjI5jUWpqNY8s3UtOSSUf39yfDq5tjI5kCCm+hGhh00eEMCbCl/kbEmT+r3rijhcyc0UMQ0K8eGq09PMStsPZ0Z4Pb+qHvb3ivsW7Ka2sNjqSxXj7p0P8lpTD3PERRHXxMDqOYaT4EqKFKaV4fUo0QZ4uPPDVXjJPyUK8haVV3Ld4D+1dHHl3Wl8cZPkgYWO6dHDh3al9ScwsYuYKmXYG4OeDmby3KZnrB3Rh6qBAo+MYSr7xhDADd2dHPr6lPyUV1dy3eHerngm7plbz6Nd7OV5Qxoc39cPHXebzErZpRLgPj10ezoq9Gfz7jyNGxzFUanYxj329j4jO7Zg7IdLoOIaT4ksIMwnv5M4bU3qzJ62AGctjWu2R8Itr49mcmM3z4yPoH+RpdBwhWtSDo0IZ3asTL66NZ1NCptFxDJFfUsmdn+3E0d6Oj2/uLyOakeJLCLMaG+3HE1fUHQm/tynZ6Dhm959tR/n3H0e4Y1gwNw8OMjqOEC3Ozk7x9tQ+9PRrx0Nf7eXgida1AHdldS33Lt7N8cJyFt7anwBPF6MjWQQpvoQwswcvDWVSX3/+ufEQK1vRDPibE7J4fnUcl/boyKyxvYyOI4TZuLRxYNFtA3FzduCuz3ZyorDM6EhmUVureea7A2w/nMfrk6PlTHc9UnwJYWZKKV65LorBIZ48+e1+fjmUbXSkFrcnLZ/7vtxND1933p3Wt1XO6yNaN18PZxbdNpBT5dXc9ukOCkttf+LlVzcksHxvBo9fEc6EPv5Gx7EoUnwJYQAnB3sW3jqAsE7u3Ld4N/uPFRgdqcUkZxVx52c76dTOmc/uGNSq1m8Tor5Ifw8W3tKfIzml3P3FTpseePPJb6ks+DWVWwYH8dClrW8G+/OR4ksIg7RzduTzOwbi5daG2/+9g4STttcXJC23lFsW7cDBzo4v7hwkIxtFqzc01Jt/3tCbXUfzuXfxbiqqba8A+3pnGi+uPcjVUb48Pz4CpeRM9+mk+BLCQB3bObP4rotwcrDnpn9tt6lFuNPzS5n2r22UVdXwxZ2DCPJyNTqSEBbhmujOvHxtFFsSs3ngy71UVtvOItzf7U7nmeUxjAz34a1WunRQQ0jxJYTBgrxc+er/LsLOTnHjJ9tJzio2OlKTHS8o48Z/baeovIrFd11Er87tjI4khEWZNiiQuRMi+OlgJo8stY0CbNW+DJ5atp9h3bxZcEt/nBxkSomzkeJLCAsQ4uPGkv+7CK01Nyz4k9iMQqMjXbDU7GKmfPwn+SWVfHHXRUT6t94lRIQ4l1uHBDP7ml6sjz3JvVY++fJX29N49Ot9DOrqyb9uHSBzeZ2HFF9CWIjQju58c88QnBzsmPavbew6kmd0pEaLP36K6xf8SXlVDUumD6ZPQHujIwlh0e4c3pWXr41ic2IWt366g6Jy6xsFueCXFJ5dEcMl4T58dscg2raRwut8pPgSwoKE+Ljx7X1D8XFz4qZPtrMu5oTRkRrs10PZ3LDgTxzt7fjm3iFyxkuIBrrxokDemdqXPUfzmfLxnxwvsI55wGpqNS+sieOV9QlcE+3HglvkjFdDSfElhIXxb9+Wb03Fy/1f7uGDzckWvxTR4m1HueOznfh3aMt39w2lm4+b0ZGEsCrje3fm09sHkpFfxoQP/uBAumVPP1NcUc3/fbGLf/9xhLuGd+WdqX1p4yAlRUPJ35QQFsjLzYkv776I8b078/oPiTyydB/FFdVGx/of5VU1zFoZw6yVsYwI82bZfUPp3L6t0bGEsEojwn347v6htLG34/oFf7Jsd7rRkc4oOauYSR/+wS+Hspk3MZLnrukloxobSVnqEfWAAQP0rl27jI4hhKG01ny4JYU3f0wk2NuVD2/qRw9fyxg5eDS3hPu/3EPc8VPcMyKEp67sjoO9HM8J0VTZRRU8vGQvf6bmcv2ALrwwPtJi+lGt2pfBjOUxODva887UPlwc5mN0JIuhlNqttR7QoG2l+BLC8v2ZksvDS/dyqqyKJ0d3587hXQ070tRas2THMV5edxB7O8WbU3pzea9OhmQRwlbV1Gre/ukQ729OJsTbldcm96Z/UAfD8uSXVPLCmjhW7jvOwOAOvDetH74ezoblsURSfAlhg7KLKpixPIafDmbSN7A98ydF093X3awZjuaWMHNFLL8n5zC0mxevTY6mSwcXs2YQojX5PSmHf3x3gOOFZdw1rCuPXRGOqxmX6NJasyH2JM+tiqOgtJIHRoXy4KWhOMpZ7v8hxZcQNkprzer9x5mzOo5TZVVMGxTI41eE4+XWssv2FJZV8cHmZD774wiO9opnx/bkxkGBsmyIEGZQVF7F/PUJfLk9DR93J54a3Z3r+ndp8bPfsRmFvLg2nm2pefTya8frU6KJ6CyjmM/GbMWXUmoK8DzQExiktT5jtaSUGgO8A9gDn2it55/vtaX4EuLs8koqeeenQyzenkZbR3tuuiiQO4d3pVO75r0MkFdSyedbj/D5n0coLKticr8uPHll92bfjxDi/Pak5TPv+3j2phUQ1tGNe0d2Y3yfzs1+FupAegEf/5LC+tiTdHBpw2OXhzFtUKD06TwPcxZfPYFaYAHw5JmKL6WUPXAIuAJIB3YC07TW8ed6bSm+hDi/5Kxi3v7pEOtiTuBgZ8fYaD+u7evPsFDvCz4qrq3V7DySx/I9Gazef5yyqhou79mJRy8Pk7m7hDCY1prvD5zg/U3JJGYW0dnDmckDApjU159g7wtfP7W4opr1MSdYtjud7YfzcHd24NYhQUwf0Q2Pto7N2ALbZfbLjkqpLZy9+BoCPK+1vtJ0fwaA1vqVc72mFF9CNNzR3BIW/X6YlXszOFVejY+7ExeHejM01Ju+ge0J8nQ561FrTa0mPb+UfccK2Jqcy29J2RwvLMe1jT1jo/34v4tDCOtk3r5lQohz01qzJTGbT/84zO/JOWgNkf7tGBbqzZAQL3p1boePm9NZuwaUVlaTnFXMjsN5bE3JZWtKDuVVtQR5uXDTRYFMGxSIu7MUXY1hacXXZGCM1vpu0/1bgIu01g+e6zWl+BKi8cqratickMX3MSf4MyWXvJJKABztFQGeLrRv64irkwNKKUoqqiksqyItr/S/i/q2c3ZgSDcvror0Y3REJ1zamK9jrxDiwpwsLGfVvgx+Tshib1o+VTV1/6+3c3bAv4ML7k4OuDjZU1ldS0lFNdlFFRwvLP/v74d4u3JxmDfj+/jTL7C99OW8QI0pvs77zaqU+gnwPcNTM7XWqxob7jz7mg5MBwgMDGzOlxaiVXB2tOeqKD+uivKjtlaTmFlE3PFTpGQXczS3hFNl1RSVV6O1xs3ZAR83Ny7r0ZFuPm709GtHr87tZLJEIayMr4cz94zsxj0ju1FaWc3etAKSMotIzi7mREE5xRXV5BZX4uRgR3uXNoT4uBHi7Uq3jm70DWyPn4dMjGxu5y2+tNaXN3EfGUBAvftdTI+daV8LgYVQd+arifsVolWzs1P09GtHTz/LmJRVCNHyXNo4MCzUm2Gh3kZHEedgjqELO4EwpVRXpVQbYCqw2gz7FUIIIYSwOE0qvpRS1yql0oEhwFql1A+mxzsrpdYBaK2rgQeBH4CDwDda67imxRZCCCGEsE5N6k2rtV4BrDjD48eBq+vdXwesa8q+hBBCCCFsgcyYJoQQQghhRlJ8CSGEEEKYkcWu7aiUygaOmmFX3kCOGfZjiVpz26F1t1/a3nq15va35rZD626/OdoepLX2aciGFlt8mYtSaldDJ0WzNa257dC62y9tb51th9bd/tbcdmjd7be0tstlRyGEEEIIM5LiSwghhBDCjKT4Ms2o30q15rZD626/tL31as3tb81th9bdfotqe6vv8yWEEEIIYU5y5ksIIYQQwoxstvhSSo1RSiUqpZKVUs+c4XknpdTXpue3K6WC6z03w/R4olLqSnPmbi4NaP/jSql4pdQBpdTPSqmges/VKKX2mX6sbh3OBrT9dqVUdr023l3vuduUUkmmn9vMm7x5NKD9b9Vr+yGlVEG956z9vf9UKZWllIo9y/NKKfWu6e/mgFKqX73nrPq9b0DbbzK1OUYptVUp1bvec0dMj+9TSu0yX+rm0YC2X6KUKqz3b3t2vefO+XmxBg1o/1P12h5r+px7mp6z9vc+QCm12fT/WZxS6pEzbGN5n3uttc39APZAChACtAH2A71O2+Z+4GPT7anA16bbvUzbOwFdTa9jb3SbWqD9owAX0+37/mq/6X6x0W1o4bbfDrx/ht/1BFJNf3Yw3e5gdJuau/2nbf8Q8KktvPem/COAfkDsWZ6/GlgPKGAwsN2G3vvztX3oX20Crvqr7ab7RwBvo9vQgm2/BPj+DI836vNiqT/na/9p244DNtnQe+8H9DPddgcOneE73+I+97Z65msQkKy1TtVaVwJLgQmnbTMB+Nx0exlwmVJKmR5fqrWu0FofBpJNr2dNztt+rfVmrXWp6e42oIuZM7aUhrz3Z3MlsFFrnae1zgc2AmNaKGdLaWz7pwFLzJLMDLTWvwJ559hkAvCFrrMNaK+U8sMG3vvztV1rvdXUNrCtz3xD3vezacr3hcVoZPtt7TN/Qmu9x3S7CDgI+J+2mcV97m21+PIHjtW7n87/vhn/3UZrXQ0UAl4N/F1L19g23EXdUcFfnJVSu5RS25RSE1siYAtqaNuvM51+XqaUCmjk71qyBrfBdKm5K7Cp3sPW/N43xNn+fmzhvW+M0z/zGvhRKbVbKTXdoEwtbYhSar9Sar1SKsL0WKt635VSLtQVF9/Ve9hm3ntV132oL7D9tKcs7nPvYI6dCMullLoZGACMrPdwkNY6QykVAmxSSsVorVOMSdgi1gBLtNYVSql7qDsDeqnBmYwwFVimta6p95itv/etnlJqFHXF1/B6Dw83ve8dgY1KqQTT2RRbsYe6f9vFSqmrgZVAmMGZjDAO+ENrXf8smU2890opN+qKyke11qeMznM+tnrmKwMIqHe/i+mxM26jlHIAPIDcBv6upWtQG5RSlwMzgfFa64q/HtdaZ5j+TAW2UHckYS3O23atdW699n4C9G/o71qBxrRhKqddfrDy974hzvb3Ywvv/XkppaKp+zc/QWud+9fj9d73LGAF1tfV4py01qe01sWm2+sAR6WUN63kfa/nXJ95q33vlVKO1BVeX2qtl59hE8v73JujY5m5f6g7o5dK3SWVvzpRRpy2zQP8vcP9N6bbEfy9w30q1tfhviHt70tdR9Ow0x7vADiZbnsDSVhRB9QGtt2v3u1rgW2m257AYdPfQQfTbU+j29Tc7Tdt14O6jrbKVt77eu0I5uwdr8fy9463O2zlvW9A2wOp68M69LTHXQH3ere3AmOMbkszt933r3/r1BUXaaZ/Aw36vFjDz7nab3reg7p+Ya629N6b3scvgLfPsY3Ffe5t8rKj1rpaKfUg8AN1o1k+1VrHKaXmAru01quBRcB/lFLJ1P2DnGr63Til1DdAPFANPKD/flnG4jWw/a8DbsC3deMMSNNajwd6AguUUrXUnRmdr7WON6QhF6CBbX9YKTWeuvc3j7rRj2it85RS84Cdppebq/9+et7iNbD9UPfvfak2fQOZWPV7D6CUWkLdyDZvpVQ6MAdwBNBafwyso27kUzJQCtxhes7q3/sGtH02df1aPzR95qt13ULDnYAVpsccgK+01hvM3oAmaEDbJwP3KaWqgTJgqunf/hk/LwY0oUka0H6oO9D8UWtdUu9Xrf69B4YBtwAxSql9pseepe5gw2I/9zLDvRBCCCGEGdlqny8hhBBCCIskxZcQQgghhBlJ8SWEEEIIYUZSfAkhhBBCmJEUX0IIIYQQZiTFlxBCCCGEGUnxJYQQQghhRlJ8CSGEEEKY0f8Dk+m5kwINnTMAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 720x432 with 1 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": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/eryn/Library/Python/3.6/lib/python/site-packages/matplotlib/transforms.py:841: ComplexWarning: Casting complex values to real discards the imaginary part\n",
" points = np.array(args, dtype=float).reshape(2, 2)\n"
]
},
{
"data": {
"image/png": "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Ig5QqBIRERFxgKZUEBER8WO+PDVEsE0LoZ4qEREREQcoVImIiIg4QKFKRERExAEKVSIiIiIOUKgSERERcYBClYiIiIgDFKpEREREHKBQJSIiIuIAhSoRERERByhUiYiIiDhAoUpERETEAQpVIiIiIg5QqBIRERFxgEKViIiIiAMUqkREREQc0OpQZYzpZoyZbYxZY4xZbYy5zYnCRERERPxJqAP7qAV+Za1dZoyJA5YaYz631q5xYN8iIiIifqHVPVXW2nxr7TLv92XAWqBra/crIiIi4k8cHVNljOkBjAAWOrlfEREREV/nWKgyxsQCbwG3W2v3HOL+acaYJcaYJYWFhU49rYiIiIhPcCRUGWPCaAhUL1tr3z7UNtba6dbaTGttZkpKihNPKyIiIuIznLj6zwDPAGuttfe3viQRERER/+NET9UxwOXARGPMCu/XGQ7sV0RERMRvtHpKBWvtt4BxoBYRERERv6UZ1UVEREQcoFAlIiIi4gCFKhEREREHKFSJiIiIOEChSkRERMQBClUiIiIiDlCoEhEREXGAQpWIiIiIAxSqRERERBygUCUiIiLiAIUqEREREQcoVImIiIg4QKFKRERExAEKVSIiIiIOUKgSERERcYBClYiIiIgDFKpEREREHKBQJSIiIuIAhSoRERERByhUiYiIiDhAoUpERETEAQpVIiIiIg5QqBIRERFxgEKViIiIiAMUqkREREQcoFAlIiIi4gBHQpUxZoYxpsAYs8qJ/YmIiIj4G6d6qp4DJjm0LxERERG/40iostbOAYqc2JeIiIiIP9KYKhEREREHtFuoMsZMM8YsMcYsKSwsbK+nFREREWkX7RaqrLXTrbWZ1trMlJSU9npaERERkXah038iIiIiDnBqSoWZwHygvzEm1xhzjRP7FREREfEXoU7sxFo71Yn9iIiIiPgrnf4TERERcYBClYiIiIgDFKpEREREHKBQJSIiIuIAhSoRERERByhUiYiIiDhAoUpERETEAQpVIiIiIg5QqBIRERFxgEKViIiIiAMUqkREREQcoFAlIiIi4gCFKhEREREHKFSJiIiIOEChSkRERMQBClUiIiIiDlCoEhEREXGAQpWIiIiIAxSqRERERBygUCUiIiLiAIUqEREREQcoVImIiIg4QKFKRERExAEKVSIiIiIOUKgSERERcYBClYiIiIgDHAlV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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": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/eryn/Library/Python/3.6/lib/python/site-packages/matplotlib/transforms.py:841: ComplexWarning: Casting complex values to real discards the imaginary part\n",
" points = np.array(args, dtype=float).reshape(2, 2)\n"
]
},
{
"data": {
"image/png": "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tKSCiIiIiAO6u6TCJcaYAmAG8G9jzNvOlCUiIiLiX7p79t9CYKFDtYiIiIj4LQ3/iYiIiDhAoUpERETEAQpVIiIiIg5QqBIRERFxgEKViIiIiAMUqkREREQcoFAlIiIi4gCFKhEREREHKFSJiIiIOEChSkRERMQBClUiIiIiDlCoEhEREXGAQpWIiIiIAxSqRERERBygUCUiIiLiAIUqEREREQcoVImIiIg4QKFKRERExAEKVSIiIiIOUKgSERERcYBClYiIiIgDFKpEREREHKBQJSIiIuIAhSoRERERByhUiYiIiDigW6HKGPNHY8xmY8znxpiFxpgEpwoTERER8Sfd7al6FxhnrR0PbAV+3P2SRERERPxPt0KVtfYda22z98ulQEb3SxIRERHxP07OqboReNPB/YmIiIj4jZD2NjDGvAekHuWhe6y1r3m3uQdoBp49zn7mAnMBsrKyulSsiIiIiK9qN1RZa88+3uPGmOuBrwJnWWvtcfbzKPAoQE5OzjG3ExEREfFH7Yaq4zHGzAJ+BJxura11piQRERER/9PdOVV/A2KBd40xa4wxDztQk4iIiIjf6VZPlbV2mFOFiIiIiPgzraguIiIi4gCFKhEREREHKFSJiIiIOEChSkRERMQBClUiIiIiDlCoEhEREXGAQpWIiIiIAxSqRERERBygUCUiIiLiAIUqEREREQcoVImIiIg4QKFKRERExAEKVSIiIiIOUKgSERERcYBClYiIiIgDQtwuQERERLpu170XuF2CeKmnSkRERMQBClUiIiIiDlCoEhEREXGAQpWIiIiIAxSqRERERBygUCUiIiLiAC2pICIifZKWIhCnqadKRERExAEKVSIiIiIOUKgSERERcUC35lQZY34FzAY8QBFwvbV2rxOFiYiI79J8JJEv625P1R+tteOttROBfwE/c6AmEREREb/TrVBlra1s82U0YLtXjoiIiIh/6vaSCsaY3wDXARXAmd2uSEQkwGnoTCQwtdtTZYx5zxiz/ij/ZgNYa++x1mYCzwK3H2c/c40xucaY3OLiYudaICIiIuID2u2pstae3cF9PQu8Afz8GPt5FHgUICcnR8OEItIl6uUREV/VrTlVxpjhbb6cDWzuXjkiIiIi/qm7c6ruNcaMpHVJhd3At7pfkoj0BPXwiIj0rG6FKmvtZU4VIuLLFEhERKQ9xtre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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": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/eryn/Library/Python/3.6/lib/python/site-packages/matplotlib/transforms.py:841: ComplexWarning: Casting complex values to real discards the imaginary part\n",
" points = np.array(args, dtype=float).reshape(2, 2)\n"
]
},
{
"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": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/eryn/Library/Python/3.6/lib/python/site-packages/matplotlib/transforms.py:841: ComplexWarning: Casting complex values to real discards the imaginary part\n",
" points = np.array(args, dtype=float).reshape(2, 2)\n"
]
},
{
"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)"
]
}
],
"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
}