Skip to content

Instantly share code, notes, and snippets.

@LukeGary462
Last active May 17, 2022 05:03
Show Gist options
  • Select an option

  • Save LukeGary462/9f1c1a7f85f620396ccf8ba9d6e96f3e to your computer and use it in GitHub Desktop.

Select an option

Save LukeGary462/9f1c1a7f85f620396ccf8ba9d6e96f3e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 142,
"id": "annoying-retention",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1521c6b0>]"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from typing import List\n",
"import numpy as np\n",
"import pprint as pp\n",
"import matplotlib.pyplot as plt\n",
"\n",
"LENGTH = 22\n",
"\n",
"# Generate a wave table of a sine wave\n",
"def make_wavetable(func, **kwargs) -> List:\n",
" '''make a wavetable from 0 to 2*pi'''\n",
" length = kwargs.get('length', 100)\n",
" phase_offset = kwargs.get('phase_offset', 0)\n",
" wavetable = np.zeros((length,), dtype=np.float32)\n",
" for i in range(length):\n",
" wavetable[i] = func(2*np.pi*(i/length)+phase_offset)\n",
" return wavetable\n",
"\n",
"x = [(2*np.pi *(i/LENGTH)) for i in range(LENGTH)]\n",
"wt_sin = make_wavetable(np.sin, length=LENGTH)\n",
"wt_sin_inv = make_wavetable(np.sin, length=LENGTH, phase_offset=np.pi)\n",
"wt_cos = make_wavetable(np.cos, length=LENGTH)\n",
"wt_cos_inv = make_wavetable(np.cos, length=LENGTH, phase_offset=np.pi)\n",
"\n",
"plt.plot(x, wt_sin)\n",
"plt.plot(x, wt_sin_inv)\n",
"plt.plot(x, wt_cos)\n",
"plt.plot(x, wt_cos_inv)"
]
},
{
"cell_type": "code",
"execution_count": 117,
"id": "organizational-florence",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ff6250>]"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"SAMPLE_RATE = 50e3\n",
"FREQ=1e3\n",
"\n",
"# make a wave based on an output frequency, and a sampling frequency\n",
"def make_wavetable_alt(func, **kwargs) -> List:\n",
" phase_offset = kwargs.get('phase_offset', 0)\n",
" freq = kwargs.get('freq', 1e3)\n",
" sample_rate = kwargs.get('sample_rate_hz', 100e3)\n",
" dt = 1/sample_rate\n",
" T = 1/freq\n",
" wavetable = [\n",
" func(\n",
" (2*np.pi+phase_offset)*x*freq\n",
" ) \n",
" for x in np.arange(0, T, step=dt)\n",
" ]\n",
" return wavetable\n",
"\n",
"x = np.arange(0, (1/FREQ), step=(1/SAMPLE_RATE))\n",
"wt_sin_alt = make_wavetable_alt(\n",
" freq=FREQ,\n",
" sample_rate_hz=SAMPLE_RATE,\n",
" func=np.sin\n",
")\n",
"plt.plot(x, wt_sin_alt)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "diverse-great",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2047, 2176, 2304, 2431, 2556, 2680, 2801, 2919, 3033, 3144, 3250, 3352, 3449, 3540, 3625, 3703, 3776, 3841, 3900, 3951, 3994, 4030, 4058, 4078, 4090, 4095, 4090, 4078, 4058, 4030, 3994, 3951, 3900, 3841, 3776, 3703, 3625, 3540, 3449, 3352, 3250, 3144, 3033, 2919, 2801, 2680, 2556, 2431, 2304, 2176, 2047, 1918, 1790, 1663, 1538, 1414, 1293, 1175, 1061, 950, 844, 742, 645, 554, 469, 391, 318, 253, 194, 143, 100, 64, 36, 16, 4, 0, 4, 16, 36, 64, 100, 143, 194, 253, 318, 391, 469, 554, 645, 742, 844, 950, 1061, 1175, 1293, 1414, 1538, 1663, 1790, 1918]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD4CAYAAAAAczaOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3dd3jUVfr38fedyaRCgEBCDSkQuhQJCAKCAoLd/ekKFkBwBVlde9d13XX3UddVFNvKsirWFRsgNqqdFgRCCKTQk0ASCCGV1PP8kcHNYiAJZOY75X5dV67MnMw3cx+Dn5ycOXOOGGNQSinlG/ysLkAppZTraOgrpZQP0dBXSikfoqGvlFI+RENfKaV8iL/VBTSkXbt2JiYmxuoylFLKo2zcuPGQMSbixHa3D/2YmBgSExOtLkMppTyKiOytr12nd5RSyodo6CullA/R0FdKKR+ioa+UUj5EQ18ppXyIhr5SSvkQDX2llPIhbr9OXzlP4bFKUg8WkVtYTn5pBQUlFQTa/WgTEkB4aADRbUOIbdcCm59YXapSqplo6PuQIyUVrNyRy+oduSRlFbA/v6zBa4LsfvTqEMbQ2HAu7NOeQV3b6C8BpTyYhr6Xq6quYVlKDu+s3cu63flU1xg6hAUxOKYNk4d0pU/HMDq1DqZNqJ3WwQFUVNdwpKSCQ8Xl7MwrISW7kOTso7zx427mfbeLdi0CuLR/J248N4aYdqFWd08p1UTS2JOzRMQGJAJZxphLRSQc+ACIAfYA1xhjjjge+xBwE1AN3G6M+drRPhh4EwgGvgDuMA0UkJCQYHQbhqYrraji3bX7ePOnPWQVlBEVHszlAzoxoW8HzurcCpGmjdYLj1XyTWoeXycfZFnKQapqDGN7tWfW6DiGxIQ7qRdKqdMlIhuNMQm/am9C6N8NJABhjtD/O5BvjHlKRB4E2hhjHhCRPsD7wFCgE7AC6GGMqRaR9cAdwFpqQ3+uMebLUz2vhn7T1NQYPt2UxTNfp3Kw8BjnxIZz08hYxvZu32zTMrmFx3hn7V7eWbeP/JIKJvRtz8MX9ya6rY78lXIXZxT6ItIFWAD8DbjbEfqpwBhjzAER6Qh8Y4zp6RjlY4x50nHt18Dj1P41sNoY08vRfq3j+lmnem4N/cZLzjrKw59uJSnzKP27tOKPl/Zx6ii8rKKaf/+wi1e+2UlldQ0zRsZy17geBNltTntOpVTjnCz0Gzun/zxwP9CyTlt7Y8wBAEfwRzraO1M7kj8u09FW6bh9Ynt9xc4EZgJ07dq1kSX6roqqGl5ancHLqzNoGxrAnEkDuGJAZ/yc/IJrcICN2y6I55qEKJ75OpXXvt3F8pQcnv3tAAZ1bePU51ZKnZ4G1+mLyKVArjFmYyO/Z31JY07R/utGY+YZYxKMMQkREb/aDlrVkZFbxJUv/8jclelcPqATy+8azW8GdXF64NcVGRbEM78dwNs3DeVYRTVXvfoTz3y9g6rqGpfVoJRqnMaM9EcAl4vIxUAQECYi7wA5ItKxzvROruPxmUBUneu7ANmO9i71tKvTtGzbQe5euIVAfz9emzKYCX07WFrPqPgIvrrrPJ74LIWXV+9k8/4CXrr2bNqEBlhal1Lqvxoc6RtjHjLGdDHGxACTgVXGmBuAJcA0x8OmAYsdt5cAk0UkUERigXhgvWMqqEhEhknt0pGpda5RTVBTY3hueRoz395IXEQon/1hpOWBf1xYkJ1nfjuAv1/Vnw27j3DZSz+Qkl1odVlKKYcz2YbhKWC8iKQD4x33McZsAxYCKcBXwK3GmGrHNbOB+UAGsBM45cod9WsVVTXc/p9NzF2ZztWDu7Bw1nA6tQ62uqxfuWZIFAtvGU5VteGqV3/i27Q8q0tSStGEJZtW0dU7/1VaUcWstzfyffohHrqoFzPPi2vyentXyy06xo2vbyA9t4jnrhnIZQM6WV2SUj7hZKt3dMM1D3G0tJIb5q/jx4xDPH3VWcwa3c3tAx8gsmUQ788cxsCo1tz+n028s7beYzuVUi6ioe8BjpZWct38tSRnFfLK9WczaYhnLWNtFWznrRnncH7PSB5dlMyCn/ZYXZJSPktD380VHqtk6uvrSM8p5rUpg5nYr6PVJZ2W4AAbr00ZzIV92vOnJdt4d52O+JWygoa+Gysur2La6+vZll07wj+/V2TDF7kxu82PF68bxAW9Innk02QWbthvdUlK+RwNfTdVUVXDzQsSSco8ykvXDWJcn/ZWl9QsAv1tvHL92ZzXI4IHPkniy60HrC5JKZ+ioe+GjDE88HESa3Yd5pmr+3vslM7JBNltzJsymEFRrbnzg81s3JtvdUlK+QwNfTf03PI0Pt2Uxb0X9uD/zu7S8AUeKMhuY/60IXRsFcTvFiSy+1CJ1SUp5RM09N3Mwg37eXFVBpOHRHHr+d2tLsepwkMDeHP6UESE6W+sJ7+kwuqSlPJ6GvpuZMOefB5ZtJVR8e144sp+HrEO/0zFtAvlX1MTyD56jN+/u5FK3aRNKafS0HcTWQVl3PL2RqLahPDSdWdjt/nOj2ZwdBuevuos1u7K54mlKVaXo5RX0zNy3UBZRTUz30qkoqqGeVMTaBVst7okl/vNoC5sP1DEvO920btjGNcO9aw3oCnlKXxnOOmmjDHc/3ESKQcKmXvtILpHtrC6JMs8MLEX5/WI4LHFybqiRykn0dC32Lvr9vHZlmzuvbCnx7/56kzZ/IQXrx1Ex1bB3PbeJo7oC7tKNTsNfQslZx3lL0tTGN0jgtmju1ldjltoFWzn5evO5nBxBfd8uIWaGvfeBVYpT6Ohb5GiY5Xc9t7PhIcE8Nw1A1x6vKG7O6tLKx69tDerduTyr+93WV2OUl5FQ98Cxhge/jSZ/UfKePG6QbRtEWh1SW5nyrBoLj6rA3//OpWNe49YXY5SXkND3wKLNmfx2ZZs7hoXz5CYcKvLcUsiwlNX9adjqyDu+mAzxeVVVpeklFfQ0HexzCOlPLZoG0Ni2jB7jHe/4/ZMhQXZmTNpIJlHSvnLZ9usLkcpr6Ch70LVNYZ7Fm7BAM9dMxCbzuM3aEhMOLeM7sbCxEy+3nbQ6nKU8nga+i40//tdrNudz+OX9yUqPMTqcjzGneN60K9zGA99spXcomNWl6OUR9PQd5H0nCKeXZbGRf06cNXZna0ux6ME+Pvx/KSBlJRX8fAnyRijyziVOl0a+i5QXWO476MkWgT581cf2UituXWPbMm9F/ZkxfYcPkvSg1eUOl0a+i7w+g+72by/gMcv76vLM8/AjJGxDIhqzeNLtnG4uNzqcpTySBr6Trb7UAn/WJbK+D7tuay/d52A5Wo2P+GZq/tTfKyKPy3R1TxKnQ4NfSeqqTE88FESgf5+Oq3TTHq0b8ntY7uzNOkAXyXrah6lmkpD34k+SNzP+j35PHpJH9qHBVldjteYNbobvTuG8aclyRQdq7S6HKU8ioa+k+QVlfPkF9s5Jzac3yZ45zm3VrHb/Hjy/84it6icZ5elWV2OUh5FQ99J/vp5Cscqa/jbb87SaR0nGBjVmqnDolmwZg9b9hdYXY5SHkND3wm+T89j8eZsZo/p5tOHojjbPRN6EtkykIc/3UqVnq2rVKNo6DezY5XVPLoomdh2ocweo3vkO1NYkJ0/XdaXbdmFvPnTHqvLUcojaOg3s39+u5O9h0v565X9CLLbrC7H613UrwPn94xgzvI0cgp1iwalGqKh34z2HS7llW92ctmATozo3s7qcnyCiPD45X2prDH87fPtVpejlNvT0G9Gf1m6Dbuf8MjFva0uxadEtw3lltHdWLIlmzU7D1tdjlJuTUO/maxIyWHF9lzuGBdPh1a6Jt/Vfj+mG13aBPPY4mQq9UVdpU5KQ78ZHKus5s9LtxEf2YLpI2KtLscnBdltPH5ZX9Jzi3njx91Wl6OU29LQbwbzv9/F/vwy/nx5X+w2/U9qlXF92nNBr0jmrswgr0g3ZFOqPppQZyin8BivfLOTCX3bc66+eGu5Ry7pzbHKap5dlmp1KUq5JQ39M/T0VzuoqjY8cnEfq0tRQLeIFkw7N4YPEveTnHXU6nKUcjsa+mdg8/4CPvk5ixkjY+naVo8/dBe3j42nTUgAf1maoqdsKXWCBkNfRIJEZL2IbBGRbSLyZ0d7uIgsF5F0x+c2da55SEQyRCRVRCbUaR8sIlsdX5srHrwpjTGGv3y2jXYtArntgu5Wl6PqaBVs5+7xPVi/O58vdftlpf5HY0b65cAFxpgBwEBgoogMAx4EVhpj4oGVjvuISB9gMtAXmAi8IiLH35r6KjATiHd8TGzGvrjUZ0kH+HlfAfdP6EmLQH+ry1EnuHZoV3p1aMn/+2I75VXVVpejlNtoMPRNrWLHXbvjwwBXAAsc7QuAKx23rwD+Y4wpN8bsBjKAoSLSEQgzxqwxtX9zv1XnGo9yrLKap7/cQZ+OYVw9WLdNdkc2P+HRS/qQeaSMBbovj1K/aNScvojYRGQzkAssN8asA9obYw4AOD5HOh7eGdhf5/JMR1tnx+0T2+t7vpkikigiiXl5eU3pj0u88eMesgrKePSS3vj5eewMldcbGd+O83tG8OKqDPJLKqwuRym30KjQN8ZUG2MGAl2oHbX3O8XD60tBc4r2+p5vnjEmwRiTEBER0ZgSXeZwcTmvrM5gbK9IXaLpAR6+uDelFdW8sEIPW1EKmrh6xxhTAHxD7Vx8jmPKBsfnXMfDMoGoOpd1AbId7V3qafcoz69Ip7Symod0fx2PEN++JZOHRPHuun3szCtu+AKlvFxjVu9EiEhrx+1gYBywA1gCTHM8bBqw2HF7CTBZRAJFJJbaF2zXO6aAikRkmGPVztQ613iEjNxi3lu/j+uGdtXDUTzIXeN7EGS38eQXO6wuRSnLNWak3xFYLSJJwAZq5/SXAk8B40UkHRjvuI8xZhuwEEgBvgJuNcYcXz4xG5hP7Yu7O4Evm7EvTvfM1zsI8vfjjnHxVpeimqBdi0Bmj+nGiu05bNiTb3U5SllK3P3NKwkJCSYxMdHqMti49whXvfoTd4/vwe1jNfQ9TVlFNaOfWU1UeAgf3TJczy1WXk9ENhpjEk5s13fkNoIxhqe/3EG7FoH8bpTuoumJggNs3DW+Bxv3HmF5So7V5ShlGQ39Rli1I5f1e/K5c1w8IQH6RixP9dvBXYiLCOXvX6fqQerKZ2noN6C6xvD0VzuIbRfKpCFRDV+g3Ja/zY/7J/QiI7eYj3/ObPgCpbyQhn4DPvk5k7ScYu6b0FP3yvcCE/q2Z1DX1jy3PI1jlbo9g/I9mmKnUF5VzfMr0unfpRUX9etgdTmqGYgID07sRU5hOW+t2WN1OUq5nIb+Kby3bh9ZBWXcN6GnrvbwIufEteW8HhG88s1OCo9VWl2OUi6loX8SJeVVvLQqg+FxbRmp2y14nfsn9KSgtJL53+2yuhSlXEpD/yTe+HE3h0squG+ijvK9Ub/OrbjkrI7M/2E3h4r1PF3lOzT061FQWsFr3+1iXO/2nN21TcMXKI9094U9KK+q4ZXVO60uRSmX0dCvxz+/3UVxeRX3TuhhdSnKibpFtODqs7vwztq9ZBeUWV2OUi6hoX+CvKJyFvy0h8sHdKJXhzCry1FOdrtjH6WXVmdYXIlSrqGhf4JXv9lJRXUNd+j+Oj6hc+tgJg+NYuGG/ew7XGp1OUo5nYZ+HQeOlvHOur3836DOxEXo1sm+4tbzu2PzE15YmW51KUo5nYZ+HS+vzsAYo7to+pj2YUFMGRbNp5sy9aAV5fU09B3255fywYb9XJMQRVR4iNXlKBe7ZUw3guw2nl+ho33l3TT0HV5clY6IcNsF3a0uRVmgXYtAbjw3hqVJ2ew4WGh1OUo5jYY+sOdQCR//nMX153SlY6tgq8tRFpl5XhyhAf68oKN95cU09IG5K9Ox24TZY7pZXYqyUOuQAGaMjOXL5INsyz5qdTlKOYXPh35GbjGLNmcxZVg0kS2DrC5HWeymkbGEBfkzZ7mO9pV38vnQn7synSC7jVtG6yhfQatgOzePimPF9hySMgusLkepZufToZ+WU8RnSdlMOzeGti0CrS5HuYnpI2NpHWJnzvI0q0tRqtn5dOi/sCKd0AB/Zo6Ks7oU5UZaBPoz67xurE7N4+d9R6wuR6lm5bOhv+NgIZ9vPcD0ETG0CQ2wuhzlZqadG014aICu21dex2dDf+7KdFoE+nPTyFirS1FuKCTAn1nnxfFdWh4b9+poX3kPnwz97QcK+WLrQaaPiKF1iI7yVf2mDD8+2te5feU9fDL0565Mp6WO8lUDjo/2v08/xMa9+VaXo1Sz8LnQT8ku5MtkHeWrxpkyPJq2OrevvIjPhf5/R/m6Ykc1LCTAn1mja0f7iXt0tK88n0+F/vYDhXy1rXaU3yrEbnU5ykPcMKx2tK/77Stv4FOhf3yUP0Pn8lUThAT4M/OXuX1dyaM8m8+E/o6DtXP5N+pcvjoNx1fy6GhfeTqfCX1dl6/OxPHR/ndp+i5d5dl8IvRTDxbxxdaD3HiujvLV6ZsyzDHa15U8yoP5ROjPXaWjfHXmQgP9uXlUHN+m5bFJR/vKQ3l96KfnFPHF1gNMHR6te+yoMzZ1eDRtQuzM1bl95aG8PvRfXJVBsN3G73QnTdUMQgP9+d2oOFan5ul++8ojeXXoZ+QW81lSNlOHxxCuo3zVTKYOj6ZVsJ25KzOsLkWpJvPq0H95dQZB/jZ+N0rn8lXzaRlk56aRsazYnkNylp6lqzyL14b+7kMlLN6cxQ3DutJOT8VSzWzauTG0DPLnxVU6t688S4OhLyJRIrJaRLaLyDYRucPRHi4iy0Uk3fG5TZ1rHhKRDBFJFZEJddoHi8hWx9fmiog4p1u1o3y7zY+Z5+nZt6r5tQq2M2NELF9vy2H7gUKry1Gq0Roz0q8C7jHG9AaGAbeKSB/gQWClMSYeWOm4j+Nrk4G+wETgFRGxOb7Xq8BMIN7xMbEZ+/KL6hpDXlE5158TTURLHeUr55gxIpaWgTraV56lwdA3xhwwxvzsuF0EbAc6A1cACxwPWwBc6bh9BfAfY0y5MWY3kAEMFZGOQJgxZo0xxgBv1bmmWdn8hAUzhvLwxb2c8e2VAqBViJ0bR8TwxdaDpB4ssrocpRqlSXP6IhIDDALWAe2NMQeg9hcDEOl4WGdgf53LMh1tnR23T2yv73lmikiiiCTm5eU1pcT/4W/z2pcslJuYMSKW0AAbL63WlTzKMzQ6FUWkBfAxcKcx5lSTmPXN05tTtP+60Zh5xpgEY0xCREREY0tUyuXahAYw9dwYliZlk5Gro33l/hoV+iJipzbw3zXGfOJoznFM2eD4nOtozwSi6lzeBch2tHepp10pj3bzqDiC7TZeWqWjfeX+GrN6R4B/A9uNMc/V+dISYJrj9jRgcZ32ySISKCKx1L5gu94xBVQkIsMc33NqnWuU8ljhoQFMGRbNki3Z7Mortroc5QV25hXz7rq9VFTVNPv3bsxIfwQwBbhARDY7Pi4GngLGi0g6MN5xH2PMNmAhkAJ8BdxqjKl2fK/ZwHxqX9zdCXzZnJ1Ryio3nxdHgL+fjvZVs5i7Mp2/Lt1O0bHKZv/e/g09wBjzA/XPxwOMPck1fwP+Vk97ItCvKQUq5QnatQhkyrBo/v3Dbv4wNp7YdqFWl6Q81M68Yj7bks3No+Jo64Q3luryFqWayczzuuloX52xl1ZlEOhv4+bznLNJpIa+Us0komUg158TzaLNWew5VGJ1OcoD7corZvHmLKYMj3ba9jEa+ko1o1mj4/D3E123r07LS6syCPD3Y6aTRvmgoa9Us4psGcT150Tz6aYs9h7W0b5qvF15xSzanMWUYc4b5YOGvlLN7hbHaP9FndtXTfDS6uOjfOduEqmhr1Qziwz772hf5/ZVY+zKK2bRptpRvrM3idTQV8oJbtG5fdUE/53Ld/5W8Br6SjmBjvZVY9Wdy3fFVvAa+ko5yS1jdG5fNexFxyh/1mjXHPikoa+Uk0S2DOKGYdF8uimT3TraV/XY6ViXP3V4jMuOddXQV8qJZo2u3ZPnxZV6upb6tRdXphPob3PquvwTaegr5USRLYOYMqz2XboZuboDp/qvjNwiFm/JZuq5zl2XfyINfaWcbNbobgTZbczV0b6qY86KdELsNma5YMVOXRr6SjlZuxaBTDs3hs+SsvUsXQXAjoOFfJ50gOkjYgkPDXDpc2voK+UCM0fFERrgzwsr06wuRbmBOcvTaBnoz+9Gxbr8uTX0lXKBNqEBzBgRwxdbD5KSfaojppW3S846ytfbcrhpVCytQ1w7ygcNfaVc5qaRcbQM8mfOCh3t+7I5y9MIC/JnxkjXj/JBQ18pl2kVYufmUXEsT8khKbPA6nKUBTbtO8LKHbnMPC+OsCC7JTVo6CvlQtNHxNA6xM6zy3S074ueW55GeGgA00dYM8oHDX2lXKplkJ1bRnfj27Q8EvfkW12OcqF1uw7zffohZo/uRmhgg8eTO42GvlIuNnV4NO1aBOho34cYY3h2eRoRLQO5YVi0pbVo6CvlYiEB/vx+THfW7DrMTxmHrC5HucCPGYdZvzuf287vTnCAzdJaNPSVssB153SlQ1gQ/1iWijHG6nKUExlj+MeyVDq1CmLy0Ciry9HQV8oKQXYbfxjbnZ/3FbBye67V5SgnWp6Sw+b9Bdw+Np5Af2tH+aChr5RlrkmIIqZtCP9YlkpNjY72vVF1jeHZZWnEtQvl6sFdrC4H0NBXyjJ2mx93je/BjoNFfJaUbXU5ygmWbMkiNaeIuy/sgb/NPeLWPapQykdd1r8TvTq05LnlaVRW11hdjmpGFVU1PLc8jb6dwri4X0ery/mFhr5SFvLzE+6b0JO9h0v5YMN+q8tRzeiDDfvYn1/GvRN64ucnVpfzCw19pSx2Qa9IEqLbMHdlOmUV1VaXo5pBaUUVc1dlMDQmnDE9Iqwu539o6CtlMRHhgYt6kVtUzus/7ra6HNUMXv9hN3lF5TxwUU9E3GeUDxr6SrmFITHhjOvdnn9+s5P8kgqry1Fn4HBxOf/8dhcT+rZncHS41eX8ioa+Um7i/ok9Kamo4uXVGVaXos7AS6szKK2o4r4JvawupV4a+kq5iR7tW3L14C68vWYv+/NLrS5HnYb9+aW8s3Yvk4ZE0T2yhdXl1EtDXyk3cue4HojUbsGrPM+zy1Kx+Ql3jO1hdSknpaGvlBvp1DqY6SNi+XRTFslZR60uRzVBUmYBizZnM2NELB1aBVldzklp6CvlZn5/fjfCQwP46+cpuhmbhzDG8NfPt9OuRQCzx3SzupxT0tBXys2EBdm5c1w8a3fls0I3Y/MIy1JyWL87nzvH9aClRccgNpaGvlJu6NqhXYmLCOXJL7br9gxurqKqhqe+3EF8ZAsmD7F+6+SGaOgr5YbsNj8evqg3uw6V8N66fVaXo07h3XV72X2ohIcv7u02m6qdSoMVisjrIpIrIsl12sJFZLmIpDs+t6nztYdEJENEUkVkQp32wSKy1fG1ueJub1NTys2M7R3JsLhwnl+RxtHSSqvLUfUoKK3ghZXpjOjeljE93Wu7hZNpzK+lN4GJJ7Q9CKw0xsQDKx33EZE+wGSgr+OaV0Tk+KkBrwIzgXjHx4nfUylVh4jwx0v7UFBWydxV6VaXo+rx/Ip0CssqefSSPm633cLJNBj6xpjvgPwTmq8AFjhuLwCurNP+H2NMuTFmN5ABDBWRjkCYMWaNqV2O8Fada5RSJ9G3UysmJUSx4Kc97MwrtrocVUdGbhFvr93L5KFd6d0xzOpyGu10J6DaG2MOADg+RzraOwN194fNdLR1dtw+sV0p1YB7LuxJkN3G3z7fbnUpqo4nlm4nJMDGPePd941Y9WnuVx3q+/vGnKK9/m8iMlNEEkUkMS8vr9mKU8oTRbQM5A8XdGfVjly+TdP/H9zBasfP4o6x8bRtEWh1OU1yuqGf45iywfH5+GLiTKDumqUuQLajvUs97fUyxswzxiQYYxIiIjzjxRGlnOnGETFEtw3hiaUpuoTTYhVVNTzxeQpx7UKZOjzG6nKa7HRDfwkwzXF7GrC4TvtkEQkUkVhqX7Bd75gCKhKRYY5VO1PrXKOUakCgv41HL+lDRm4xC37aY3U5Pu2NH3ezK6+ERy/tTYC/+y/RPFFjlmy+D6wBeopIpojcBDwFjBeRdGC84z7GmG3AQiAF+Aq41Rhz/Cig2cB8al/c3Ql82cx9UcqrjesdyQW9IpmzPI2cwmNWl+OTDhwt44WV6Yzr3Z4LerW3upzTIu6+t0dCQoJJTEy0ugyl3MLewyWMn/MdF/XrwAuTB1ldjs+57b2fWZ6Sw4q7RxMVHmJ1OackIhuNMQkntnve3yZK+bDotqHMHt2NxZuzWbPzsNXl+JQfMw6xNOkAvx/T3e0D/1Q09JXyMLPHdCMqPJjHFifri7ouUlFVw2OLk+kaHsKs0XFWl3NGNPSV8jBBdhuPX9aX9Nxi5n+vB6m7wr++38XOvBIev7wPQXZbwxe4MQ19pTzQ2N7tmdi3Ay+sTGPfYT1a0Zn2HCph7sp0Lj6rg8e+eFuXhr5SHupPl/fBJsIfFyfrYStOYozhj4uTsdv8+NNlfa0up1lo6CvloTq2CubeCT35Ni2Pz7cesLocr7RkSzbfpx/i/ok9aR/mvkcgNoWGvlIebOrwGM7q3Io/f5bC0TLdfrk5FZRW8MTSFAZEteb6c6KtLqfZaOgr5cFsfsKT/3cW+SUV/O3zFKvL8SpPLN3OkdJK/t9v+mHz84xtkxtDQ18pD9evcytmnRfHwsRMvtMN2ZrF6tRcPv45k9+P6UbfTq2sLqdZaegr5QVuHxtPt4hQHvpkK8XlVVaX49GKjlXy8CdbiY9swW0XdLe6nGanoa+UFwiy2/j71QPIPlrGU1/qvvtn4skvd5BTeIy/X92fQH/PXpNfHw19pbzE4Og2zBgRyztr9/FTxiGry/FIP6Qf4r11+7hpZCyDurZp+AIPpKGvlBe598KexLUL5Z4Pt+hh6k1UUFrBvR9uIS4ilLvH97S6HKfR0FfKiwQH2JgzaSB5ReX8cXGy1eV4DGMMjyxK5lBxOS9MGkRwgPdN6xynoZZhqlsAAApnSURBVK+UlxkQ1Zo7xsazZEs2izdnWV2OR1i0OYvPkw5w1/genNXFu1brnEhDXykvNHtMN87u2ppHFyWTVVBmdTluLfNIKY8t2kZCdBtuGd3N6nKcTkNfKS/kb/NjzqSB1NQYbn9/k27BfBKV1TX84f1NGGDOpIFe9Sask9HQV8pLRbcN5cmr+rNx7xGeXZZmdTlu6ZmvU9m0r4Cnr+rv0QejNIWGvlJe7PIBnbjunK7889udrN6Ra3U5bmVFSg7zvtvFlGHRXNK/o9XluIyGvlJe7rFL+9C7Yxh3L9xMts7vA5BVUMY9H26hb6cwHrmkt9XluJSGvlJeLshu4+XrBlFZbZj19kaOVVZbXZKlyiqqmflWIjU1hpevO9vjT8JqKg19pXxAXEQL5kwaSHL2UR74OMlnD10xxnDfR1tIOVDIC9cOJKZdqNUluZyGvlI+Ynyf9twzvgeLN2fz2ne7rC7HEq98s5OlSQe4b0JPrzj68HRo6CvlQ249vzuX9O/I01/tYNWOHKvLcakVKTn8Y1kqlw/oxGwfWI9/Mhr6SvkQEeGZq/vTt1MYt723ieSso1aX5BJJmQX84f1NnNW5FU9f1R8R71+PfzIa+kr5mJAAf16fNoQ2IQFMf3MDmUdKrS7JqfbnlzLjzQ2EhwYwf1qCV++r0xga+kr5oMiwIN6YPoRjldVMf2OD156ve7S0khvfWE9FVQ0LZgwhsqV3HG5+JjT0lfJRPdq35LUpg9lzuIQZb27wuhO3isuruPHN9ezPL2Pe1AS6R7a0uiS3oKGvlA87t1s75k4exOb9Bcx4cwOlFd4R/CXlVUx/Yz1JmUeZe+1AhsW1tbokt6Ghr5SPu+isjsyZNJDEPfn8bkEiZRWe/eatsopqblqwgY17j/DC5IFM7Oc7Wyw0hoa+UorLB3Ti2WsGsGbXYY+e6ik6Vsn0N9ezfnc+cyYN5NL+nawuye1o6CulAPjNoC48d80A1u/J5/p/rSW/pMLqkprkcHE51/1rHYl7jjBn0kCuGNjZ6pLckoa+UuoXvxnUhdduGMz2g0Vc89oaDhz1jA3asgvK+O1ra0jLKWLe1MEa+Kegoa+U+h/j+rTnrRlDOXj0GFe+/COb9h2xuqRT2rj3CFe+/CN5heW8fdM5Pru9QmNp6CulfmVYXFs+vGU4Af5+THptLR9s2Gd1SfV6b90+Js9bQ3CAjY9mn8vQ2HCrS3J7GvpKqXr17hjGZ7eN5Jy4cB74eCsPfpxEiZu8wFtcXsX9H23h4U+3MrxbO5bcOpKeHXQdfmNo6CulTqp1SABvTh/K78d044PE/Ux84TvW7jpsaU0/7TzExOe/48ONmdx6fjfeuHEIrULsltbkSTT0lVKnZPMT7p/Yi4WzhuMnwuR5a3lscTIFpa5d3XOkpIJHF23lun+tw27z46NbhnPfhF4+cZh5cxJ3P0whISHBJCYmWl2GUgooraji71+l8taaPbQMsnPH2HimDI/GbnPe+LGiqoa31uxh7sp0isurmHZuDPdP6OXzG6c1REQ2GmMSftWuoa+UaqodBwv569Lt/JBxiOi2IcwYEcvVg7sQGujfbM9RUl7Fh4n7ef3HPezLL2VUfDsevaSPzt03ktuEvohMBF4AbMB8Y8xTp3q8hr5S7skYw+rUXF5clcGmfQW0DPLnmoQoLj6rI4OiWuN3GtMuNTWGTfuP8HnSQT7cuJ+iY1Wc3bU1f7ggnjE9I3x6H/ymcovQFxEbkAaMBzKBDcC1xpiUk12joa+U+/t53xFe/2E3X287SGW1oV2LQC7oFUH/Lq3p0ymMXh1aEhLw678CSsqrSM0pIiW7kKTMAlbtyONQcTl2mzCxX0dmjIhhUNc2FvTI850s9Jvvb7HGGQpkGGN2OYr6D3AFcNLQV0q5v7O7tuHs69pwtKySb1JzWZaSw1fJB1mYmPnLYwL9/QgLthMaYKOkoprCskrKq2p++XpYkD+jekRwYZ/2nN8rkrAgXZHjDK4O/c7A/jr3M4FzTnyQiMwEZgJ07drVNZUppc5Yq2A7VwzszBUDO2OMIfNIGSkHCsnILaawrJLCY5UUl1fTItBGWJCdsGA73SNb0LdTGJ1bB+v0jQu4OvTr+4n+an7JGDMPmAe10zvOLkop1fxEhKjwEKLCQ5jQ1+pq1HGuXqefCUTVud8FyHZxDUop5bNcHfobgHgRiRWRAGAysMTFNSillM9y6fSOMaZKRG4DvqZ2yebrxphtrqxBKaV8mavn9DHGfAF84ernVUoppXvvKKWUT9HQV0opH6Khr5RSPkRDXymlfIjb77IpInnA3tO8vB1wqBnL8QS+2GfwzX77Yp/BN/t9On2ONsZEnNjo9qF/JkQksb4Nh7yZL/YZfLPfvthn8M1+N2efdXpHKaV8iIa+Ukr5EG8P/XlWF2ABX+wz+Ga/fbHP4Jv9brY+e/WcvlJKqf/l7SN9pZRSdWjoK6WUD/HK0BeRiSKSKiIZIvKg1fU4i4hEichqEdkuIttE5A5He7iILBeRdMdnrztkVERsIrJJRJY67vtCn1uLyEcissPxMx/u7f0Wkbsc/7aTReR9EQnyxj6LyOsikisiyXXaTtpPEXnIkW+pIjKhKc/ldaHvOHz9ZeAioA9wrYj0sbYqp6kC7jHG9AaGAbc6+vogsNIYEw+sdNz3NncA2+vc94U+vwB8ZYzpBQygtv9e228R6QzcDiQYY/pRux37ZLyzz28CE09oq7efjv/HJwN9Hde84si9RvG60KfO4evGmArg+OHrXscYc8AY87PjdhG1IdCZ2v4ucDxsAXClNRU6h4h0AS4B5tdp9vY+hwHnAf8GMMZUGGMK8PJ+U7v9e7CI+AMh1J6053V9NsZ8B+Sf0Hyyfl4B/McYU26M2Q1kUJt7jeKNoV/f4eudLarFZUQkBhgErAPaG2MOQO0vBiDSusqc4nngfqCmTpu39zkOyAPecExrzReRULy438aYLOAfwD7gAHDUGLMML+7zCU7WzzPKOG8M/UYdvu5NRKQF8DFwpzGm0Op6nElELgVyjTEbra7FxfyBs4FXjTGDgBK8Y1rjpBxz2FcAsUAnIFREbrC2KrdwRhnnjaHvU4evi4id2sB/1xjziaM5R0Q6Or7eEci1qj4nGAFcLiJ7qJ26u0BE3sG7+wy1/64zjTHrHPc/ovaXgDf3exyw2xiTZ4ypBD4BzsW7+1zXyfp5RhnnjaHvM4evi4hQO8e73RjzXJ0vLQGmOW5PAxa7ujZnMcY8ZIzpYoyJofZnu8oYcwNe3GcAY8xBYL+I9HQ0jQVS8O5+7wOGiUiI49/6WGpft/LmPtd1sn4uASaLSKCIxALxwPpGf1djjNd9ABcDacBO4BGr63FiP0dS+2ddErDZ8XEx0JbaV/vTHZ/Dra7VSf0fAyx13Pb6PgMDgUTHz3sR0Mbb+w38GdgBJANvA4He2GfgfWpft6ikdiR/06n6CTziyLdU4KKmPJduw6CUUj7EG6d3lFJKnYSGvlJK+RANfaWU8iEa+kop5UM09JVSyodo6CullA/R0FdKKR/y/wFfiu7fl0x1GgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# make a wave based on an output frequency, and a sampling frequency, integer output\n",
"def make_wavetable_alt(func, **kwargs) -> List:\n",
" '''func must return [-1, 1] and accept in radians'''\n",
" phase_offset = kwargs.get('phase_offset', 0)\n",
" freq = kwargs.get('freq', 1e3)\n",
" sample_rate = kwargs.get('sample_rate_hz', 100e3)\n",
" max_output = kwargs.get('max_output', 4095)\n",
" dt = 1/sample_rate\n",
" T = 1/freq\n",
" wavetable = [\n",
" func(\n",
" (2*np.pi+phase_offset)*x*freq\n",
" ) \n",
" for x in np.arange(0, T, step=dt)\n",
" ]\n",
" wavetable = [int((wavetable[i] + 1) / 2 * max_output) for i in range(len(wavetable))]\n",
" return wavetable\n",
"\n",
"wt_sin_disc = make_wavetable_alt(np.sin)\n",
"plt.plot(wt_sin_disc)\n",
"print(wt_sin_disc)\n"
]
},
{
"cell_type": "code",
"execution_count": 148,
"id": "dental-oxford",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/** function: sine\n",
"* size: 252 Bytes\n",
"* frequency: 2000.0 Hz\n",
"* sample rate: 250000.0 Hz\n",
"* range: 0 - 1023\n",
"*/\n",
"uint16_t sin_2000_hz = {\n",
"\t0x01FF, 0x0219, 0x0232, 0x024C, 0x0265, 0x027E, 0x0297, 0x02AF, \n",
"\t0x02C7, 0x02DF, 0x02F5, 0x030C, 0x0321, 0x0336, 0x034A, 0x035D, \n",
"\t0x036F, 0x0381, 0x0391, 0x03A1, 0x03AF, 0x03BC, 0x03C8, 0x03D3, \n",
"\t0x03DD, 0x03E5, 0x03ED, 0x03F3, 0x03F8, 0x03FB, 0x03FD, 0x03FE, \n",
"\t0x03FE, 0x03FD, 0x03FA, 0x03F5, 0x03F0, 0x03E9, 0x03E1, 0x03D8, \n",
"\t0x03CE, 0x03C2, 0x03B6, 0x03A8, 0x0399, 0x0389, 0x0378, 0x0366, \n",
"\t0x0354, 0x0340, 0x032C, 0x0316, 0x0301, 0x02EA, 0x02D3, 0x02BB, \n",
"\t0x02A3, 0x028B, 0x0272, 0x0259, 0x023F, 0x0226, 0x020C, 0x01F2, \n",
"\t0x01D8, 0x01BF, 0x01A5, 0x018C, 0x0173, 0x015B, 0x0143, 0x012B, \n",
"\t0x0114, 0x00FD, 0x00E8, 0x00D2, 0x00BE, 0x00AA, 0x0098, 0x0086, \n",
"\t0x0075, 0x0065, 0x0056, 0x0048, 0x003C, 0x0030, 0x0026, 0x001D, \n",
"\t0x0015, 0x000E, 0x0009, 0x0004, 0x0001, 0x0000, 0x0000, 0x0001, \n",
"\t0x0003, 0x0006, 0x000B, 0x0011, 0x0019, 0x0021, 0x002B, 0x0036, \n",
"\t0x0042, 0x004F, 0x005D, 0x006D, 0x007D, 0x008F, 0x00A1, 0x00B4, \n",
"\t0x00C8, 0x00DD, 0x00F2, 0x0109, 0x011F, 0x0137, 0x014F, 0x0167, \n",
"\t0x0180, 0x0199, 0x01B2, 0x01CC, 0x01E5, 0x01FF, \n",
"};\n",
"#define SIN_2000_HZ_LEN (126u);\n",
"\n",
"#define SIN_2000_HZ_BYTES (252u);\n",
" \n",
"\n",
"/** function: sine\n",
"* size: 224 Bytes\n",
"* frequency: 2250.0 Hz\n",
"* sample rate: 250000.0 Hz\n",
"* range: 0 - 1023\n",
"*/\n",
"uint16_t sin_2250_hz = {\n",
"\t0x01FF, 0x021C, 0x0239, 0x0255, 0x0272, 0x028E, 0x02A9, 0x02C4, \n",
"\t0x02DF, 0x02F8, 0x0311, 0x0329, 0x0340, 0x0356, 0x036B, 0x037F, \n",
"\t0x0391, 0x03A2, 0x03B2, 0x03C1, 0x03CE, 0x03D9, 0x03E3, 0x03EC, \n",
"\t0x03F3, 0x03F8, 0x03FC, 0x03FE, 0x03FE, 0x03FD, 0x03FA, 0x03F6, \n",
"\t0x03F0, 0x03E8, 0x03DF, 0x03D4, 0x03C8, 0x03BB, 0x03AB, 0x039B, \n",
"\t0x0389, 0x0376, 0x0362, 0x034C, 0x0336, 0x031F, 0x0306, 0x02ED, \n",
"\t0x02D3, 0x02B8, 0x029D, 0x0281, 0x0265, 0x0249, 0x022C, 0x020F, \n",
"\t0x01F2, 0x01D5, 0x01B9, 0x019C, 0x0180, 0x0164, 0x0149, 0x012E, \n",
"\t0x0114, 0x00FB, 0x00E2, 0x00CB, 0x00B4, 0x009F, 0x008A, 0x0077, \n",
"\t0x0065, 0x0054, 0x0045, 0x0037, 0x002B, 0x0020, 0x0017, 0x000F, \n",
"\t0x0009, 0x0004, 0x0001, 0x0000, 0x0000, 0x0002, 0x0005, 0x000A, \n",
"\t0x0011, 0x001A, 0x0023, 0x002F, 0x003C, 0x004A, 0x005A, 0x006B, \n",
"\t0x007D, 0x0091, 0x00A6, 0x00BB, 0x00D2, 0x00EA, 0x0103, 0x011D, \n",
"\t0x0137, 0x0152, 0x016D, 0x0189, 0x01A5, 0x01C2, 0x01DF, 0x01FC, \n",
"\t\n",
"};\n",
"#define SIN_2250_HZ_LEN (112u);\n",
"\n",
"#define SIN_2250_HZ_BYTES (224u);\n",
" \n",
"\n",
"/** function: sine\n",
"* size: 202 Bytes\n",
"* frequency: 2500.0 Hz\n",
"* sample rate: 250000.0 Hz\n",
"* range: 0 - 1023\n",
"*/\n",
"uint16_t sin_2500_hz = {\n",
"\t0x01FF, 0x021F, 0x023F, 0x025F, 0x027E, 0x029D, 0x02BB, 0x02D9, \n",
"\t0x02F5, 0x0311, 0x032C, 0x0345, 0x035D, 0x0374, 0x0389, 0x039D, \n",
"\t0x03AF, 0x03BF, 0x03CE, 0x03DB, 0x03E5, 0x03EE, 0x03F5, 0x03FA, \n",
"\t0x03FD, 0x03FF, 0x03FD, 0x03FA, 0x03F5, 0x03EE, 0x03E5, 0x03DB, \n",
"\t0x03CE, 0x03BF, 0x03AF, 0x039D, 0x0389, 0x0374, 0x035D, 0x0345, \n",
"\t0x032C, 0x0311, 0x02F5, 0x02D9, 0x02BB, 0x029D, 0x027E, 0x025F, \n",
"\t0x023F, 0x021F, 0x01FF, 0x01DF, 0x01BF, 0x019F, 0x0180, 0x0161, \n",
"\t0x0143, 0x0125, 0x0109, 0x00ED, 0x00D2, 0x00B9, 0x00A1, 0x008A, \n",
"\t0x0075, 0x0061, 0x004F, 0x003F, 0x0030, 0x0023, 0x0019, 0x0010, \n",
"\t0x0009, 0x0004, 0x0001, 0x0000, 0x0001, 0x0004, 0x0009, 0x0010, \n",
"\t0x0019, 0x0023, 0x0030, 0x003F, 0x004F, 0x0061, 0x0075, 0x008A, \n",
"\t0x00A1, 0x00B9, 0x00D2, 0x00ED, 0x0109, 0x0125, 0x0143, 0x0161, \n",
"\t0x0180, 0x019F, 0x01BF, 0x01DF, 0x01FF, \n",
"};\n",
"#define SIN_2500_HZ_LEN (101u);\n",
"\n",
"#define SIN_2500_HZ_BYTES (202u);\n",
" \n",
"\n",
"/** function: sine\n",
"* size: 182 Bytes\n",
"* frequency: 2750.0 Hz\n",
"* sample rate: 250000.0 Hz\n",
"* range: 0 - 1023\n",
"*/\n",
"uint16_t sin_2750_hz = {\n",
"\t0x01FF, 0x0222, 0x0245, 0x0268, 0x028B, 0x02AC, 0x02CD, 0x02ED, \n",
"\t0x030C, 0x0329, 0x0345, 0x035F, 0x0378, 0x038F, 0x03A4, 0x03B7, \n",
"\t0x03C8, 0x03D7, 0x03E3, 0x03EE, 0x03F5, 0x03FB, 0x03FE, 0x03FE, \n",
"\t0x03FD, 0x03F8, 0x03F1, 0x03E8, 0x03DD, 0x03CF, 0x03BF, 0x03AD, \n",
"\t0x0399, 0x0383, 0x036B, 0x0351, 0x0336, 0x0319, 0x02FB, 0x02DC, \n",
"\t0x02BB, 0x029A, 0x0278, 0x0255, 0x0232, 0x020F, 0x01EC, 0x01C8, \n",
"\t0x01A5, 0x0183, 0x0161, 0x0140, 0x011F, 0x0100, 0x00E2, 0x00C5, \n",
"\t0x00AA, 0x0091, 0x0079, 0x0063, 0x004F, 0x003D, 0x002D, 0x0020, \n",
"\t0x0015, 0x000C, 0x0005, 0x0001, 0x0000, 0x0000, 0x0004, 0x0009, \n",
"\t0x0011, 0x001C, 0x0028, 0x0037, 0x0048, 0x005C, 0x0071, 0x0088, \n",
"\t0x00A1, 0x00BB, 0x00D8, 0x00F5, 0x0114, 0x0134, 0x0155, 0x0176, \n",
"\t0x0199, 0x01BC, 0x01DF, \n",
"};\n",
"#define SIN_2750_HZ_LEN (91u);\n",
"\n",
"#define SIN_2750_HZ_BYTES (182u);\n",
" \n",
"\n",
"/** function: sine\n",
"* size: 168 Bytes\n",
"* frequency: 3000.0 Hz\n",
"* sample rate: 250000.0 Hz\n",
"* range: 0 - 1023\n",
"*/\n",
"uint16_t sin_3000_hz = {\n",
"\t0x01FF, 0x0226, 0x024C, 0x0272, 0x0297, 0x02BB, 0x02DF, 0x0301, \n",
"\t0x0321, 0x0340, 0x035D, 0x0378, 0x0391, 0x03A8, 0x03BC, 0x03CE, \n",
"\t0x03DD, 0x03E9, 0x03F3, 0x03FA, 0x03FD, 0x03FE, 0x03FD, 0x03F8, \n",
"\t0x03F0, 0x03E5, 0x03D8, 0x03C8, 0x03B6, 0x03A1, 0x0389, 0x036F, \n",
"\t0x0354, 0x0336, 0x0316, 0x02F5, 0x02D3, 0x02AF, 0x028B, 0x0265, \n",
"\t0x023F, 0x0219, 0x01F2, 0x01CC, 0x01A5, 0x0180, 0x015B, 0x0137, \n",
"\t0x0114, 0x00F2, 0x00D2, 0x00B4, 0x0098, 0x007D, 0x0065, 0x004F, \n",
"\t0x003C, 0x002B, 0x001D, 0x0011, 0x0009, 0x0003, 0x0000, 0x0000, \n",
"\t0x0003, 0x0009, 0x0011, 0x001D, 0x002B, 0x003C, 0x004F, 0x0065, \n",
"\t0x007D, 0x0098, 0x00B4, 0x00D2, 0x00F2, 0x0114, 0x0137, 0x015B, \n",
"\t0x0180, 0x01A5, 0x01CC, 0x01F2, \n",
"};\n",
"#define SIN_3000_HZ_LEN (84u);\n",
"\n",
"#define SIN_3000_HZ_BYTES (168u);\n",
" \n",
"\n",
"/* Total Memory Usage for 5 wavetables: 1028 bytes */\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD4CAYAAAAAczaOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdd3SUVfrA8e+dlt57COkNCNI7AgpI0dARrNjBXtbfqlt03XUtu7p2xbIqFkRWpK4C0nsPLSEhvTfS62Qy8/7+mOiCmfSEQHI/53iSzMx77zPx8OTOfe99rlAUBUmSJKl3UHV3AJIkSdLlI5O+JElSLyKTviRJUi8ik74kSVIvIpO+JElSL6Lp7gBa4u7urgQGBnZ3GJIkSVeV48ePX1AUxeO3j1/xST8wMJBjx451dxiSJElXFSFEuqXH5fSOJElSLyKTviRJUi8ik74kSVIvIpO+JElSLyKTviRJUi8ik74kSVIvIpO+JElSL3LFr9PvzarK9FSX1VFTUYcCaPUVqHNTsLUyASBsbFA5O5NnZyBVVUR6eTr2WnuCnIIIcwrGuboUilOgXm9uUGMFtq5g5wlOfpTr68krq6W4qo7yGgO/FNm202lwtdPh7WSNq52uW967JEldQyb9K0xmXDHxh3LJSSqlslhv8TWOZWn45h7Aq+AYapMBE1AYKDgwRHAsTGBUCwCC6gwMrdUzraqKUbX6Sz7WFeHEEWM4+01RbDEOpxAXi30FudsxItCFGQN9mBDmgVolOvkdS5J0OYkr/RCV4cOHK71hR25RdiUH1iSREVeMjYMW777WOKTHoBzbjbauHNvBg6kM9OdYfQW1ed7YG7wxaMqw8T1B/5J43HbHI8rrUTnUUz7RllOjw4lRGThWlU21qRatwRGn4kiCy/sy1EnPKE0y4bWncdTnoiCo9hpG8cB7KQucQVWdiZLqOtKKqjmWVsLRtGLKagz0cbZh0Yi+3Dy8L95O1t39K5MkqRlCiOOKogxv9HhLSV8I8RlwE1CgKEpUw2OuwHdAIJAG3KwoSknDc88B9wJG4DFFUbY0PD4M+AKwAX4EHlda8Renpyd9RVGI3ZPN3tWJaK3UDJvii3fCj5St+ByMRpwWzEdz+wI+KlzL9+e/x0ptxazgWVyviSZ13QVKiiDMei8Tvb+nTjeGgi2p1KVnUX/NED4ecxsbCwxYO8Xh4XuCUiUBb1sfnhj2ODODZiIACuPh3CY4tdI8FeQWBpP/DP1mgTCP6uvqTfwcl8+3RzLYl3QBlYDrIz159PowBvV17tbfnyRJlnUk6U8AKoEvL0r6/wCKFUV5VQjxLOCiKMozQoj+wLfASMAX2AaEK4piFEIcAR4HDmFO+u8oivJTS4H35KRfbzCy+9vzxB/IJSDKjYkz3Sh84mH058/jeOONeDz5BIdI4c/7/0yZvoyF4QtZNmgZbkYjbHwcY/xWThjv4mjRTNz87Lnp4cEUG/T88LcPGLfjO4SA1DsfYcrDd+Bsq+NQ7iHeOPYG8cXxTPSbyItjX8TNxs0cjMkIcethzz+hIA4iZsLM18GpzyUxpxdV8d3RTL47mklRVR2zBvny++kR+LnYdsNvUJKkprQ76TdcHAhsuijpJwCTFEXJFUL4ALsURYloGOWjKMorDa/bAvwF86eBnYqiRDY8fkvD9Utb6runJv262np+/PA02QmlDJ8ZyDVherKWLsNUXU2ft95CN2YErx97nW/jvyXcJZxXr32VMJcwOL8V1j8EteVw3R9g9IOkx1ey5ZOzGNTwjVUNpVp4drAj41e/i/7kSVxuvRWvP/4BoVZjUkysPLeSN4+/iYPOgZfHv8zYPmP/F5ixHg59ADtfBrUWbnwDrrm5UfyV+nqW70rmk70pqITgqanh3D0uEI1aLgiTpCtBU0m/vf9CvRRFyQVo+OrZ8HgfIPOi12U1PNan4fvfPt5UsA8IIY4JIY4VFha2M8Qrl77awMZ3TpJzvpQpd/VjoG8xGbffASoVAd98Q+WQEO7efDffxn/L7f1uZ+WNKwlzCoZtL8LKhWDnAQ/sgvFPgMaKSlcNu/oIKmvqubnCijW3jeDOeWMJ+vorXO++m5KVK8l69DFM1dWohIrb+9/Otzd9i4u1C8u2LeOT05/w6x9/tQbGPQYPHQSvAfDD/bDmPvMfmYvYW2l4eloEO56exNgQN/7+4znmfLCfxPyKy/77lCSp9Tp7WGZpaYfSzOMWKYrysaIowxVFGe7h0agc9FXNoDey4e2TFKRXMO2BKPrUp5Bx3/1ovLwIXPUtCa41LNq0iKTSJN6c9CbPjHwGK30VfLMA9v0Lhi6B+3eCV38UReHDXcnMem8/5+v0hC0KxtFGw+HPzlFaUI3QaPB65vd4/flPVO7aRcY992KqrgYg3CWcb2Z+w/TA6bwT8w5P7XqK2vra/wXqGgRLNsF1f4SzP8Bn06Esu9H76eNsw6dLhvPBbUPJLa3lpnf38dXBNFrzCVKSpMuvvUk/v2Fah4avBQ2PZwF9L3qdH5DT8Lifhcd7FcWksO2LOAozKpj+QBRelefJevBBdIGBBHz1JefUBSz9eSl2WjtW3riSKQFToCgZPp0Mafsg+m2Y9Q5oranU1/PQNyd4bXM806O82fbUROZNCmL2E0Mw1itseOskNRV1ALjedht93nyTmtOnyXrySRSDAQBbrS2vTXiNp4c/zfaM7Ty560nqjHX/C1itgYm/h9vXQGmGOY68M43elxCCmQN92PzEBMaEuPHn9bEs/eo4FbWGy/J7lSSp9dqb9DcASxq+XwKsv+jxxUIIKyFEEBAGHGmYAqoQQowWQgjgzouu6TUObUghJaaQsfND8bEpIfuJJ9CFhhKw4gvOk8+yn5fhYuXC59M+J8Q5BDKPwKdToKbUPOoedhcA2aU1zP/gAFti8/jjzH68d8sQnG3Nm6jc+tgT/dggqsvr2PrvWExG80Yux2k34P3CC1Tt3kPu8y/8OhIXQrBkwBKeH/M8+7L38fTupzGYfpOsQ66De7eAUMHnMyHjkMX35+Fgxed3jeBPN/Zje3wBc97fT1JBZdf8MiVJapcWk74Q4lvgIBAhhMgSQtwLvApMFUIkAlMbfkZRlFhgNRAHbAYeVhTF2NDUg8CnQBKQDLS4cqcnST5RwInN6fQf78uAwbZkPfgQKltb+n74AdmijKU/L8VeZ8+/p/0bLzsvSNkFK6LBxhnu2wb+owA4m13G3Pf3k1NWw5f3jOL+CcEIcensmWeAIxNvDScrvoRD61N+fdxl0c24P/IIZWvXUvTxJ5dcsyB8Ac+NfI6dmTt5Yf8LjadnvAbAvT+DvSd8NReSd1p8n0II7rs2mK/vHUVptYG57+/nSGpxx3+BkiR1DkVRruj/hg0bplztKoprlU+e2q2sfvmIYqipVVJvu005d80gpfr0aaVMX6ZEr41Wxn07TkkrSzNfkLZfUf7mpSjvj1GUysJf29mXWKj0+/NPypiXtykJeeUt9rvzm3jlvaXbleSYgl8fM5lMStaTTypx/forFfv2Nbrmw5MfKlFfRCkfn/q4iTeTrygfjFWUv7oryvmtzfafVVKtXP/6TiXiTz8quxMKmn2tJEmdCzimWMipcn1dF1NMCju+jMNoMDH1ngEUf/ABNceO4/PSS2gH9OP/dv8fmRWZvDnpTQIcAyDrOHyzEJz7wp3rwM4dgG1x+dz9xVH6utiy9uFxhHs5tNj3tQvD8PB3YOdX8VSVmUs6CCHweeklrEJCyPnd0xiyL705u/SapcwMmsk7Me/wc/rPjRu194QlG8GzH6y6zfyJpAl9nG34bukYgtztuW/FMbbE5rX+FydJUpeQSb+LndmdRea5EsYtCENz/gRFH3+M88KFOEXfxBvH3uBAzgGeH/08I7xHQEk6fLvInOjv3GBOsMB/T+ey7OvjRHo7sOqB0Xg5tq4EglqrYuo9/amvM7Ljy3O/TtmobG3xe/cdFKORrCef+vXGLpj/KPx13F8Z5DGIP+z9AwnFCY0btnWFO9aBWyisXAxp+5uMwd3eilX3j6a/ryMPfXOC9ScbrwCSJOnykUm/C5VfqOHg2mT8B7gREakl55lnsAoLw+sPz/Fjyo98fe5rbut3G3PD5prXwX+7GIx1cOt/wNEHgM1n83hsVQxD/J355r5RuLSx6qWLtx1j54eSEVvM2d3/S7i6wEB8/vZXak+f5sLyjy65xkptxVvXvYWjzpEndj5Bmb6sccO2rnDnevMnklW3QklakzE42Wr5+r5RDA9w4YnvTrLqSEab3oMkSZ1HJv0uoigKe1adByGYeGs4eX95EVNVFX3e/BeJNRm8cOAFhnoO5XfDf2cugbDmPihMgIUrwCMcgB3x+Tz67Qmu8XPi87tH4mCtbVcsURP74N/flQNrk6ks+d9afMfp03GaPZsLy5dTc/LkJde427jzxqQ3yKvO47m9z2FSTI0btveAW78DFPjudqirbjIGeysNX9w9kglhHjy39gwbT/W6FbuSdEWQSb+LJB0vIP1sEaNnBaMc2E7ljh14PPEExgBfntr1FA46B96Y9AZalRZ2vQqJW2DGa+blkcChlCKWfX2CSG9Hvrh7JPZW7a+CLYRg4q0RKCaF/d8nXfKc15/+iNbLi+zfP/Prxq1fDPYczLMjnmVv9l4+PfOp5cZdg2Hep5B3FjY9Cc1syrLRqfnojmGMCHDld6tPcSDpQrvfkyRJ7SOTfhfQ19Szd3UingEO9IuyIv+ll7AZPBjXO+/gH0f/QWZFJq9NeA13G3eI/xH2/AOG3A4j7gPgXG459684hr+rLV/eMxInm/aN8C/m6G7DsOkBJB0vIDP+f0so1Q4O+L72KoaMDArfe7/RdTdH3Mz0wOl8ePJDYi/EWm48/AaY9BycXgVHm/jj0MBaq+aTO4cT6G7LA18d51xuebOvlySpc8mk3wVObE6npqKOibdGUPD3v2OqqcHn5b+zK3sPaxLXcHfU3eYbt0XJsHYp+A6BmW+AEGSVVHPX50ews9Kw4p6RbZ7Db86QG/xxdLdm76rzGOv/N11jO2IEzjffTPGKFdTGxV1yjRCCP43+E242bjy791lq6mssNz7h/yB8Omx+tsnNW79wstWy4h7zp5d7vzhKQUVts6+XJKnzyKTfySqKazm1I5OIkd7YZpymYutW3B96kEofJ/5y8C9EukbyyOBHwFAL/1kCKjXc/CVorampM3L/l8eprjOy4p6R9HG26dTYNFo11y4KpySvmti9l66i8fzdU6hdXMy7dY3GS55zsnLipfEvkVaexr+O/cty4yoVzP0InP1h9RKoaH55po+TuWZPSbWBB748Tq3B2OzrJUnqHDLpd7IjG1JAgREz/Mh/6SV0AQG43nMPrx19jYq6Cl4Z/wpatRa2/slcx6YhUSqKwnM/nCY+r5x3bxlChHfL6/DbIyDKjT7hzhz7MQ2D/n+JVu3khPcfnqP27FlKvlnZ6LrRPqO5vd/trEpYxYn8E5Ybt3GGRV+Dvtx8Y9pk4ebvRaL6OPHmosGczCzlmTWnZZE2SboMZNLvRBeyKog/nMc11/lhWPctdenpeP3pTxwoPMJPqT9x/8D7CXUJNR9WcvQTGPMIhE8DYMWBNNadzOGpKeFMivBsoaf2E0Iwek4INRUGTu3IvOQ5hxkzsBs3jsL33qO+pKTRtY8OeRRfO19ePPjipYXZLuY1wHxDOm0vHGp8j+C3pkd583/TIlh/MofP9qe15y1JktQGMul3okPrUrCy0XDNUBsuLF+Ow9SpqEYP5aVDLxHkFMS9A+81lyfe8Cj4DoXJLwBwNK2Yl/57jin9PHn4utAuj9M72InAa9yJ2ZpBbdWlG7O8nnsWU1UVhe+80+g6W60tfxz9R1LKUvjs7GdNdzDkDoi8Cbb/1byqpwUPTQph2gAvXv7xHIdSitr1niRJah2Z9DtJXmoZ6WeLGHKDP+Ufvw8mE57PPMPyU8vJrszmhTEvoBMaWLfMfDrVgn+DRkdBeS0PfXOCvq62/GvRYFQqS0cPdL5Rs4Kpq60nZuulG6WsQkNxWbyY0u9WU5twvtF1E/wmMD1wOh+f/pi0sjTLjQthLgNt7Qw/PAD1+mZjEULw+sJBBLjZ8sjKE+SVyRu7ktRVZNLvJEc3pWJtpyXMt5qydetwueN2Mu1r+SruK+aFzWOY1zA4/CGk7oHpr4BrMHX1Jh765gSVtfUsv30Yju3cfNUe7n72hA3z5MyuLGorLy2l7P7Iw6gcHMh/9RWL8+zPjHwGa7U1rxyx/DxgLiUx+z0oiIXd/2gxHgdrLR/fMYzqOiOPr4rBaJLz+5LUFWTS7wR5KWVkxBYz5AZ/St95E5WjI27338/Lh1/GVmvLE0OfgIJzsO0v5gPHh94JwBtbEziWXsI/FlzTZTdumzNsRiAGvZFTOy+d29e4uODx8ENUHzxE1f4Dja5zt3Hn4SEPcyDnANsztjfdQfg0GHwb7HsTcmJajCfU04G/zY7icGox72xPbPP7kSSpZTLpd4Ijm1KxttcSZJVJ1b59uC9bxs8lBzmSd4THhz6Oi84JNj4OOnuIfgeE4EDyBT7em8Kto/yJHuTbLXG79bEneLAHZ3Zmoa+pv+Q558WL0fr6UvjmmxZH84siFhHuEs5rR1+j2tB0+QWm/d18pu+6h6G+iZu/F5k/zI/5Q/14Z0ciB5Lljl1J6mwy6XdQfmo5mXHFDJnal9L33kbr64v1zXN4/ejr9HPtx/yw+XD8c8g8DNNeBnsPymoMPL36FIFudvzpxn7dGv+wGQHoq+s5uzvrksdVOh3ujzxCbWwsFT83LrGsUWn446g/kleV13SJBgAbF4h+yzzNs/eNVsX019kDCHK346nvTlFa3fIfCkmSWk8m/Q46sTUdK1sNgSKF2rNncX/oQb5I/IaCmgL+MOoPqCsLzNM6QRNh0GIAnl9/lvwKPW8uGoytrv01dTqDZ4Aj/gPcOLkt85J1+wBOs2ehCwmh8O13Gm3YAhjqNZSbgm9iRewKcitzm+4kYgYMXGg+2L2w8c3h37Kz0vDO4iFcqNTzx3Vn5fp9SepEMul3QEleFSknC4ma0Ieyjz5A27cvdVPHsSJ2BdMCpzHYc7C5LIGxDm56E4Rg/cls1p/M4bHrwxjc17m73wIAw2cEUFtpIG7/pZUvhVqNx2OPUZecTNnGjRavfWzIYwC8d/K95juZ9gpobc3TXC1s2gLzxq0np4bz39O5rJM1+CWp08ik3wExP2eg1qgI1qVTGxuL+7JlfBj3MQaTgceHPA7JOyBuHVz7O3ALIae0hj+tO8sQf2cevi6ku8P/lU+oMz6hTpzcloHReGlCdrhhKlb9+lG0/COLo30fex9u638bG5M3El8c33Qn9h5ww98g4wDEfNWquJZNDGF4gAvPr4slq6SZ+waSJLWaTPrtVFmiJ+FQHv3G+FD56Xto/f25MDGKHxJ/YHHEYvraesGPvzeXHh77GCaTwu9Wn8JoUnjz5sFo1FfWr37oDQFUFutJOpp/yeNCCNyXLqUuLY2KLVssXnvfwPtwtHJsui7PL4bcAQHj4efnobrlw9LVKsGbiwajwK+/O0mSOubKyjxXkdM7M1FMCmEO2ejjzuG+bBnvnH4PW40tD1zzgLkEQVEizPgHaK1ZcTCNgylFPH9TfwLd7bo7/EYCotxw9bXjxNaMRnPoDjdMRRcSwoUPl6NYmJpx1Dmy9JqlHMw9yIGcxks8fyUEzPynuTbPrldaFVdfV1teiO7P4dRiPt2b0qb3JElSYzLpt4NBbyRuXw7BQzzQf/0RWj8/0sf4szNzJ3dH3Y2Lvtq8ISnyJgibSnpRFa9tjue6CA8Wjejb3eFbJFSCoTf4U5xTRfqZot88p8J96QPoExOp3LnT4vWLIhbhY+fDuyfebf7Gq1d/GH4PHP23ee9CKywY5sf0Ad68vjWB2BwLRzdKktRqMum3Q8LhPPTV9YR5lFJ76jRu99/Pu6c/xNXaldv73Q7bXzQfgTjtZUwmhd9/fxqtSsXL8wYixOUps9AeoSO8sHex4uT2zEbPOc6cibZvX/No30JS16l1PDjoQc4WnWVHxo7mO5r0B7Cyhy1/aPakrV8IIXhl3kCcbXU8s+Y09caWbwRLkmSZTPptpCgKp3dk4uHvgHrNx2i8vIgf5c3hvMM8cM0D2ObFwunvYOwj4BLA14fTOZxazJ9v6o+PU+fWx+9sarWKqIl9yE4ooTi36pLnhEaD2/33UXv2LNWHLB+SEh0STaBjIO/GvIvR1Ex9fDs3mPis+UZ34tZWxeZip+Mv0QM4m13OFwfSWvuWJEn6DZn02yjzXDEledVEBhmoOXYM13vv4Z2zH+Jj58PCsAXmJZr2XjD+KXJKa3jtp3iuDXNn4XC/7g69VfqP80WlEZzdldXoOafZs1F7uFP0yScWr9WoNDwy5BGSy5LZlLKp+Y5G3g9uYebRfit26gLMHOjN9ZGevLH1vFzNI0ntJJN+G53ekYWNow7HXV+jdnXlzBhvzhadZdmgZeji1kP2MZj8AorOjufXx2JUFF6ee2VP61zMxkFH2DAv4g/lUfeb0gwqKyvcliyh6sBBas5aPi93asBU+rn2Y/mp5RhMBouvAUCtNe9QLkpq8VzdXwgh+OvsAQgBf5abtiSpXWTSb4OywhrSY4uIHGBDze6duNx6Cx/Ef4qfvR/R/jfAthfBZxAMuoUtsXlsO5fPk1PC6etq292ht8nASX4Y9EYSDjc+8tB50SJU9vYUfWo5UauEiocGP0RWZRabklsY7YdNhZDJsPtVqGpdHX0/F1uemhrOzoRC/nummV3AkiRZJJN+G8Tty0EIgXfCTwgrK2In9OVc8TmWDlqK9ti/oTwLbniJijojL2yIpb+PI/eOD+rusNvMK8gRzwAHzuzKajSaVjs44HLLLVRs3UpderrF6yf6TWSA2wA+Ov1R86N9IcyjfX0l7Px7q+O7a2wgUX0ceXFjHGU1zbQvSVIjMum3krHexLkDOQREOFC36T84zZ7F++lf4+/gz03eY2HPGxA2DYIm8Na2RAoq9Lw8b+AVtwmrtaIm+lGSV01uUuMlkq533gFqNcVfWt5ZK4TgocEPkV2ZzYakDc135BlpXsJ5/ItW1eUB0KhVvDrvGooq9by2uZldwJIkNdKhjCSEeFIIESuEOCuE+FYIYS2EcBVC/CyESGz46nLR658TQiQJIRKEENM6Hv7lkxJTSE2FAf+q0yh1dZy/IYL44niWDlqKZt9bUFcBU/5CfJ55dcniEf5XTG2d9ggd5onOWk3cvpxGz2k8PHCaOZOytWsxVlRYvP7aPtcy0H0gH5/+uPnRPsDEZ8x1eba/2Or4ovo4cc+4IFYezuB4esu7eyVJMmt30hdC9AEeA4YrihIFqIHFwLPAdkVRwoDtDT8jhOjf8PwAYDrwgRBC3bHwL5+ze7JxcLNCt/Hf2E2axPLSTfR16MtM5yg48jEMvg3Fsx/Pr4vFwVrD76dFdHfIHaK1UhM20pukEwWXnKP7C5c778BUXU3pmjUWrxdCsGzQMnKqcvgp9afmO7P3gPGPQ/wmSD/Y6hifnBqOj5M1f9kQh0mWaJCkVuno3IMGsBFCaABbIAeYDaxoeH4FMKfh+9nAKkVR9IqipAJJwMgO9n9ZFOdWkZNYSohLCaaSYgqjR3G26Cx3DbgLzd7XQahg0nOsO5nNkbRinpkeiYudrrvD7rAB430xGkycP5Lf6DmbAQOwGTaMkq++tliIDcyj/TCXMD4/+zkmpYUNVaMfBgcf+PnPrdqwBeYSzM9Mj+RMdhnfn2i8xFSSpMbanfQVRckGXgcygFygTFGUrYCXoii5Da/JBTwbLukDXLzVM6vhsUaEEA8IIY4JIY4VFha2N8ROE7cvB5Va4Lr/G6zCwvhYewA3azdmO0bCqW9h5P2UW3ny8o/xDPJzYtHwK7PUQlt5+Dvg4e9A3L4ci8sjXe+4A0N2dpOlGYQQ3BN1D0mlSezJ2tN8ZzpbuO6PkHUU4v/b6hhnD/ZliL8z/9ySQKW+vuULJKmX68j0jgvm0XsQ4AvYCSFub+4SC49ZHNIpivKxoijDFUUZ7uHh0d4QO4XRYCLhUB59+6rg3En086dyIPcgt/e/Has9/wStHYx/ird+TuRCpZ6/zo5Cpbo61uS3Rv/xvhRlV1KQ1nju3mHKZDS+Pk3e0AWYHjgdXztfPjv7WcudDboFXENg16utqrkP5j8sL0QPoLBCzwc7k1p1jST1Zh2Z3pkCpCqKUqgoigH4ARgL5AshfAAavhY0vD4LuHgI7Id5OuiKlnKykNoqAz4Zu1E7O7OiTyr2WnsWOUbCuQ0w9hHiK7SsOJjGLSP9GXQV37y1JHyEFxqtirgDjf9XCY0Gl1tuofrIEfSJlg8y16g0LBmwhJiCGE7kn2i+M7XGfFM3/wzEWz60xZLBfZ2ZN6QPn+5NJfVCVcsXSFIv1pGknwGMFkLYCvN208nAOWADsKThNUuA9Q3fbwAWCyGshBBBQBhwpAP9XxZx+3Owd9Jgs/M71HNn8FPudhaGL8Rh71tg44oy+kGeXx+Lo7WG/7vh6r55a4nORkPIME8Sj+ZjqGs8d++8YAFCp6N45com25gbNhdnK2c+j/285Q4HLjCXZ2jDaB/g2ZmRWGlU/GVDrNypK0nN6Mic/mHge+AEcKahrY+BV4GpQohEYGrDzyiKEgusBuKAzcDDiqI0U5Wr+5UVVpMVX0KAOgOhEmwaVI8KFbc6DYCkn2Hso2xJquZIajH/N61n3Ly1pN9YHwy1RlJiGt9f0bi44DhzJmXrNzS5fNNGY8OiiEXsztxNWlla852p1ObRfkEcnFvf/Gsv4ulgzRNTw9l9vpCtcY1vPEuSZNah1TuKorygKEqkoihRiqLc0bAyp0hRlMmKooQ1fC2+6PV/VxQlRFGUCEVRWljH1/3i9uciBLju+xrrSdeysmgLM4Jm4H3oI7B1wzD8Pl7bnEC4lz03XyUF1drDN8wZR3drzlmY4gFwue1WlOpqytY1naQXRy5Gq9LyVVwrjkqMmgfuEbDrtTaN9peMCSDS24G/boyjxsKnEkmS5I7cJplMCkQX6UQAACAASURBVAkHc/H1MKItSOfEWA+q66tZ4jYMkrfD2Mf49mQxqReqeHZG5FW787Y1hBD0G+tDdkIpZYU1jZ63GTgQ62uuoWTlyianVtxt3IkOiWZ98nqKa1vYTKVSw8TfQ+E5iFvb6jg1ahUvzhpAdmmNPGVLkprQczNVB2WdK6aqrA6v9N1o+/blQ/U+RvmMIuLYV2DrTsU1d/H2tkRGB7tyXYRnyw1e5SJG+4CA+IOWi5y53HoLdampTdbaB7iz/53ojXq+S/iu5Q4HzAWPyIbRfutH7aOC3Zg2wIvlu5O5UKlv9XWS1FvIpN+E+EN5WFmrcDyyntypA8nXF7LEYxSk7IRxj7P8YB5FVXU8N6PfVVM2uSMcXK3x7+dK/MFcFAu7Xx1nzEDt5ETJd6ubbCPYOZhr+1zLqvhV6I0tJORf5vYvJEBs60f7AM9Mj6S23sQ72y2vKJKk3kwmfQv0NfWknCykjzoHtUbwiV8yIU4hjD+9Aew8yAq9lU/2pjJnsG+PW6LZnIgx3lSW6Mk+X9LoOZWVFU7z5lGxbRv1zWyoWzJgCcW1xS2XXQboPwc8+zes5Gn9aD/Yw55bR/qz8nAGKYWVrb5OknoDmfQtSD5egNFgwu3YGvTXDiXGkMwS73GI1D0w7gle2ZaBWgiemRHZ3aFeVsGDPNBZq4k/1LjOPoDzzQuhvr7JejwAI71H0s+1H1/GfdlyaQaVyjzaL0ps82j/sclhWGlUsgqnJP2GTPoWxB/KxdHOiH1+HBujanCzduPG+F1g58lR9zn890wuyyaGXPFn3nY2jU5N6DBPkmMKqattXPLAKigI2zGjKVm9usl6PEII7hxwJyllKezL3tdyp/1mmVfy7H2jTSt5PBysWDoxhC2x+bIKpyRdRCb93ygrrCE3qQyf4hiEnw/f2cZyq/c4dGn7MI17ghe3pOLrZM0DE4K7O9RuETHGh3q95TX7AC6LFlOfk0vl3r1NtjEtcBpetl6siF3R5Gt+pVLBhKfN6/YTfmxTrPddG4SngxUv/xgvN2xJUgOZ9H8j8ah56sLtxDpiRrlhrbHh5oxYsPNgs80MzmaX8/S0CGx0V01V6E7lE+KEo4cN8Ycsr+JxmHw9ag93Spu5oatVabmt320cyTtCXFFcy50OmAcuQbDnn62uwAlgq9Pw1NRwjqeXsCVWbtiSJJBJ/xKKonD+SD5u1hVYG8v5xC+ZWT7jcE7eiXHkUl7fnkGElwOzB1ssDtorCCGIHO1NdkIp5UWN1+wLrRbnOXOo3LOn2Ru688PnY6OxYeW5pss3/EqtgWufgtyTkLStTfEuGOZHmKc9r22Ox2Bs/fSQJPVUMulfpCi7kpK8ajySdlI0LJgLtgZuKcoHnQMbtDNJuVDF724IR92Dqmi2R8QobwASj1oePTvNnQdGI2Ubmj4q0VHnSHRwND+l/kRpbWnLnV6zGBz9YO+/2hSrRq3imemRpF6o4j/HZM19SZJJ/yKJR/MRQsE9fR/fR5Qywm0goec2Uz90Cf/cncegvs5M7e/V3WF2O0d3G7yDnZpM+lbBQdgMGULpD2ubnUtfHLmYOlMdPyT90HKnGh2MeRgyDkDG4TbFO7mfJ8MCXHh7+3lqDbI8g9S7yaTfQDEpnD+aj4cpF7WTlh0+xdyiF6DS8B/tLHLKavn9tIhesRGrNcJGeFGUXUVRtuV18M7z51GXnEztqVNNt+ESxnCv4axOWI2xNevwh94JNi6w/602xSqE4P+mRZBfruerg+ltulaSehqZ9BvkpZRRWazHPeFnjg1zwMPOg+vObcMQdTOvHyhnXKgb40LduzvMK0boME+ESjQ52neYPgNhY0PpmuZH8bdE3kJ2ZTZ7s5te7fMrK3sY+YB5FU9B29bfjw5249owdz7YlURFbQsHtUtSDyaTfoPzR/NRCxPuhaf4OjCHhVovNPV6vtXMpaiqjqd7YK38jrB11OEX6ULisXyLUzhqezscp02j/McfMVVXN9nOdf7X4Wnjybfx37au45FLQWMD+99uc8y/nxZJSbWBT/emtvlaSeopZNIHjEYTyccL8KhIoDTUmSJ3LQsSD1IXfiP/PGbkhv5eDPF36e4wrzjhI7wov1BLfmq5xeed58/DVFVFxc8/N9mGVqVlYcRCDuQcaLnWPoCdm3ma58xqKGvbjdmBfk7MiPLm070pFMlibFIvJZM+kBVfQk2lAY/UPayLrGCqbQDu1aWs1Myjsq6ep6fJUb4lwYM9UGtUnD9ieYrHZvhwtP7+LU7xLAhfgEalaV31TTDf0FUUOPh+W0PmdzeEU2Mw8uGu5DZfK0k9gUz6QOKRfLTCgHN1IrtD9dyalUBd33G8ctqWuYP7EO7l0N0hXpF0NhoCB7qRdDwfk4U18EIInOfNpfrIEeoyMppsx93GnakBU1mftJ5qQ9NTQb9yCTAfq3h8BVS3rcRCqKcD84b68eWhdHJKG+8zkKSertcn/fo6IyknC/DIP8HJKB3Bjl4MKsnhG808TIrCk1PDuzvEK1rYCC9qKgxkJ1hea+80Zw4IQena5gum3Rp5KxWGCjaltKL6JsC4x8FQBUc/bWvIPDElDEVRZOllqVfq9Uk/7UwRBr0Jz5xDrIusZHFJMXUeUfw9wYfFI/zp62rb3SFe0QKi3NBZqzl/1HLlTa23N3bjx1O2dl2TRdgABnkMItI1klUJq1pXJ8drAIRNg8PLoa4Vnw4u4udiy22jAvjP8SxSL1S16VpJutr1+qSfeDQfK1MVwiqHfH8bZuSnsko7D41axaPXh3Z3eFc8jU5N8BAPUmIKqW9i45PzvLnU5+VRdeBgk+0IIbgl8hYSSxI5nn+8dZ2PfwKqi+DkN22O++HrQtGpVfzr5/NtvlaSrma9Ounrqw2knSnEM/swP/WvZbZBoHbw52+pYSwZG4ino3V3h3hVCBvhRV2tkfSzRRaft588GbWTE2UtTPFMD5yOg9aB/5z/T+s69h8DfYabb+i24ZAVMJdevmd8IBtP5RCXY3n1kST1RL066aecvIDJCB4XjrMrSmFhbjJrrOZipdWxbEJId4d31fCLcMHGQUtiE6t4VDodjjfOpGL7dowVFU22Y6u1JTokmp/Tf2758HQAIWDso1CS2uayywAPTAjB0VrD61sT2nytJF2tenXSTzqWh3VdCZk++UTY29FX48xfMgdzz/ggXOx03R3eVUOlVhE63Iu0M0XoaxofrgLmG7qKXk/5Tz8129bC8IUYTAbWJ61vXef9osE5AA6829awcbLRsmxSCDviCziWJg9akXqHXpv0aysNZJ4rwTPvKFv661mYn85/baLRWdly3/jeeUBKR4QN98JYbyLt9AWLz1sPHIguOJiydc0n81CXUIZ6DuU/5//T8nGKYD5AffRDkHkYMo+2Oe67xgbibm8l5/alXqPXJv3kmAIUBZzLTpIeqmOSXuGFnNHcPT4IJ1ttd4d31fEOcsTO2Yqk4wUWnxdC4DRnDjUnTlCX3nzRs5sjbiazIpNDOYda1/mQ28HaCQ62fbRvq9OwbGIwB5KLOJxi+Z6EJPUkvTbpJx7OxaamkJN9M4muLOWg3Q0YrV24d3xQd4d2VRIqQchQDzLjiqlraopnVjQIQdn6puvsA0wNmIqLlUvrb+ha2cPwe+DcRihue12d20cH4OFgxZvb5Ghf6vl6ZdKvLq8jJ6kMr/xj7I0SzC8v5y+FE7l3fBBONnKU316hQz0x1ptIbWKKR+vtjd2Y0ZStX4/SzCHnOrWOOaFz2Jm5k4Jqy58cGhm5FIQaDn3Y5rittWoenBjCoZRiDibL0b7Us/XKpJ98ogAFga42Bnd3IwW6URRb9eUeOcrvEO9gJ+ycrUg+0XSidpo9G0N2NjUxMc22tSB8AUbFyA+JrThgBcDRx1yaIeZrqClpS9gA3DrKH8+G0b48RF3qyXpl0k88lI1tVS5HgnO4uayEV0omc9+1wThay1F+RwiVIGSIBxmxxdTVWp7icZgyBWFjQ9mGjc225e/oz1jfsXx//nvqTZbbamTMw+bSDMc+b2voWGvVPDQphCOpcrQv9Wy9LulXlenJTavEs/AE5/qp8Tf6ct4qirvHBXZ3aD1CyDDzFE/aGctTPCo7OxymTKF882ZMdXXNtnVz+M3kV+ezL3tf6zr3HgjBk+DwR1DffNuWLB7pj7ejtRztSz1ah5K+EMJZCPG9ECJeCHFOCDFGCOEqhPhZCJHY8NXlotc/J4RIEkIkCCGmdTz8tkuJKQQEdaYYxmlLeb9yKvdPCMZBjvI7hU+wE3ZOOpKPFzb5GqdZ0ZjKyqjas6fZtib0nYCnjSerE1a3PoCxj0JlHpz9vvXXNLDWqnnouhCOppWwP0mO9qWeqaMj/beBzYqiRAKDgHPAs8B2RVHCgO0NPyOE6A8sBgYA04EPhBDqDvbfZon7081TO2H5TK1Ss8dqAkvGBl7uMHosoRIED/UkPbaoySkeuzFjULu5tTjFo1VpmRc+j33Z+8iuzG5dACGTwbM/HHjPXHO/jRaN6IuPkxztSz1Xu5O+EMIRmAD8G0BRlDpFUUqB2cCKhpetAOY0fD8bWKUoil5RlFQgCRjZ3v7bo7q8jtzMWjwuxGAKrGVTzXXcNSFCjvI7WehQT4wGE+lnLI+WhUaD440zqdy5E2N583Vv5oXOA2BtYvN1e/7XuDDP7RfEQsrONsUNYKVR89B1oRxPL2FfkuUpKkm6mnVkpB8MFAKfCyFihBCfCiHsAC9FUXIBGr56Nry+D5B50fVZDY81IoR4QAhxTAhxrLCw6WmCtko+kQ8ISrQnmW6qYZN2uhzldwHvECdsHXUkNbeKZ9ZsFIOB8s2bm23Lx96HcX3GsTZpbetv6A5cCPZe5tF+O9w83A8fJ2ve3ZHUrusl6UrWkaSvAYYCHyqKMgSoomEqpwnCwmMWPz8rivKxoijDFUUZ7uHh0YEQL3V+dwq21XnEhmRTUDGU+ROHY2+l6bT2JTNVwyqe9LNNT/FYD+iPLjiY8hameAAWhC2goLqA/dn7WxeAxgpGPgDJ2yE/ri2hA+bR/tIJwRxJLZa7dKUepyNJPwvIUhTlcMPP32P+I5AvhPABaPhacNHr+150vR+Q04H+26S6vI683Hpci2II8K1ijW4Od44JuFzd9zohwxqmeJootyyEwGlWNNXHjmHIbn6+fkLfCbhZu/F9Yhtuzg6/B7S27TpHF8wredztdby3U472pZ6l3UlfUZQ8IFMI8cup4ZOBOGADsKThsSXALxW2NgCLhRBWQoggIAw40t7+2yr5WC4gyLOLwbvaj4nXTsJOjvK7jE+oMzaOOpKbqMUD4HjTTQCUbWz+iEStSsvs0Nnszdrb+h26tq4w+FY4sxoq2z5FaK1Vc/+1wexNvMDJTMtHQUrS1aijq3ceBb4RQpwGBgMvA68CU4UQicDUhp9RFCUWWI35D8Nm4GFFUdp28kUHJOxMxLY6n6KgdH5S5spRfhe7eIrHoLf8v1nn54fNsGGUbdjQ4kqZ+WHzMSpG1iWta30Qo5aBsQ6Ot32zFsBtowNwttXyrjxLV+pBOpT0FUU52TD3fo2iKHMURSlRFKVIUZTJiqKENXwtvuj1f1cUJURRlAhFUZovrN6JqsvryC8Ax9IT+DpbETl2llyxcxmEDvWkvpkpHgCn6GjqUlKojWt+7t3f0Z+R3iP5IfGH1pVcBnAPg9Ap5sPT27FZy95Kw33jg9geX8DpLDnal3qGXrEjN/lQBggVuU4xJNTM5O5xssbO5eAT5oyNg7bJcssAjtOnIbTaVt3QnR82n+zKbA7nHm7xtb8a9SBU5kNsK5d8/saSsYE422p5a5sc7Us9Q69I+nE7ErCpLkD4p+My6lZ5KtZlolIJgod4kn72AoY6y1M8amdn7CdNpOy//0Wpb35J5uSAyThZObEmcU3rgwi5HtzD4dAH7dqs5WCt5f5rg9kRXyDn9qUeoccn/ZrKOi6UWGFTGUOZ1XDundivu0PqVUKHelBf1/RGLQDH6GiMFy5QdbD5Q1Os1FZEB0ezPWM7JbWtrKSpUsGopZB70ny6VjssGRuIi62WN+XpWlIP0OOT/vmd50GoKHU5hsOgR3Czt+rukHoV34YpnubKLdtPnIjK0ZGyjc0frgLmKZ56Uz0bklt+7a8G3WI+WasdtfbBPLd//4Rgdp8vJCaj7WWbJelK0uOT/tkdsVjXFFLlU8dtU0Z0dzi9jkqtIniwB2lnmp7iUVlZ4ThtGhU/b8NUVdVse6EuoQzyGMSaxDWtr42js4Ohd5pP1irLautbAODOMea5/fflun3pKtejk35tVR1lVS5oak/iMuhRXOVcfrcIGeZJfZ2JjOZW8cyKRqmpoWLHjhbbmx82n9SyVGIKmj+I5RIjHwAUOPJJ66+5iL2VhnvGBbHtXAGxOWXtakOSrgQ9Oumf2XgIRaWhxvkM82bOafkCqUv0CXPG2l5LckzTm6Rshg1D6+vbYuVNgGmB07DT2rXthq6zP0TeBMe/gLrmP000ZcnYQBysNHywM7ld10vSlaBHJ/3YnefQ6UtQDx0iV+x0I5VaRdAgd9LOXMBosLzGXqhUOEZHU7V/P/UtFNmz1doyM2gmW9O2Ul7XfJXOS4x+EGpL4fR3bQn/V042Wu4cG8CPZ3NJKqhoVxuS1N16bNLXV9ZSrQSgqTvF3FuaqwMnXQ4hQzwx1BrJPFfc5GucZkWDyUT5Ty3v25sfPp9aYy3/Tflv64PwHwM+g8wna7WzVv6944Ox1qjlaF+6avXYpL91+WcoKh1G73zcHe26O5xezy/SBZ2NhuSTTY/irUJCsO7fv1VTPP1d+xPpGsma8224oSuEebNWYXy7au0DuNrpuH20P+tP5ZBe1L5pIknqTj026RecrUFjqOC6h57s7lAkQK1REXiNG6mnCjEamy6j4DR7FrVnz6JPSWm2PSEE88Pmk1CSQFxRG8onR80DO084tLz11/zG/dcGo1YJlu+Wo/3LIaM8gxcPvkheVV7Xd6avgHp91/fTguPpJfxtUxxlNYZOb7tHJn19nR5FcUZrjCUkJLK7w5EahAzxRF9VT875pne2Os6cCSoVZRtbHu3fGHwj1mrrtpVc1liZyy4nboEL7Vt+6elozeIRffn+eBbZpTXtakNqvR8Sf+CHxB8QFo/k6GT73oK3B4G+suv7asa7OxJZG5ONVt3577lHJn0rnRV3/3sJ0a/c0d2hSBfp298VjU7V7CoejYcHdmPHUr5hY4vTNg46B24IvIEfU36k2lDd+kCG3wNqHRz5qPXX/MbSiSEoCnx0lY/2q8r0zX7y6m4Gk4F1SeuY0GcCXnZeXdxZjbkiq+9QsLLv2r6acSarjF0Jhdw7PghbXeeXf++RSR9ArdHg4dO35RdKl41WpyYgyo2Uk4WYTE0ndKdZ0Riys6mJaXkd/oLwBVTXV7M5rfljFy/h4AVR8+HkSqht35r7Ps42zB/qx6qjmRRU1LarjSvBji/P8cM/jnd3GE3ak7mHotoi5ofP7/rOzvwHqotg9LKu76sZ7+1MxNFa02Xl33ts0peuTCFDPakpryMvuekpHofJkxE2NpStb7nUwmCPwQQ7BbdtzT6Yl2/WVULM12277iIPTgqh3mji072p7W6jO9VWGcg6V0KfCJfuDqVJaxLX4Gnjyfg+47u2I0Ux3+fxioLAa7u2r2Yk5FWwJTafu8YFdVn5d5n0pcsqIMoNtVZF0vGmp3hUdnY4TJ5MxebNKHXN18H/5Ybu6cLTJJa0ofyxzyDwHwuHl4OpfWf5BLrbMWuQL18fSqe4qu31+rtb6inzJ66QoZ7dHYpFeVV57M/Zz5ywOWhUXXzKXdpeKIg1H7wjLsO9gya8vzMJO52ae8YFdlkfMulLl5XOWkNAlBvJMQUozUzxON50I8ayMioPHGixzeiQaLQqbTtG+8ugNAMS2n+ez8PXhVJdZ+Tz/VffaD/peCEObtZ4Bjh0qJ3Kffup3Lu39UtnW2lt4loURWFe2LxObdeiQ8vB1g0GLuz6vpqQVFDBxtM53DEmEGfbrttMKpO+dNmFDvWkuqyO3OSm59Ptx45F7eRE+aaWN1+5WLswxX8KG5M3oje2YbldxI3g1Nc82m+nMC8HZkR588X+tC5ZXtdVaqsMZMUXEzLUE9HBkW3h229T8OabHW7nYkaTkbVJaxntM5o+9n06rV2LilMh4UcYdjdorbu2r2a8vT0JG62aByYEd2k/MulLl13AQDfUGhVJzZRbFjodDtOnU7F9O6bqllfmzAufR3ldOdvSt7U+ELUGRt5v/mife7r11/3Gw9eFUqGvZ8WBtHa3cbmlnrqAyagQ2sGpHX1KKrVnzuAUPauTIjM7kHOA3Krcy3MD98jHoFLDiHu7vq8mnM+vYNPpHJaMDezywpAy6UuXnc5ag/8AV1JOND/F43TTjebKmztb3j070nskfvZ+bZ/iGXonaG3bXWsfIKqPE1P6efLp3pSrZrSffKIAB1drPAM7NrVTtnEDqFTm/RWdaE3iGlytXbm+7/Wd2m4j+grzzfwBc8HRt2v7asbb2xOx1ap54NquHeWDTPpSNwkd5klVWR25KU1P8dgMG4bG27tVUzwqoWJ++HyO5h0lvTy99YHYuMCQ283L9cpzW3/dbzwxJZzy2nq+2J/W7jYuF321gcxzxYQM9ejQlIyiKJRv2Ijd6NFovTrvZvCFmgvsztzNrJBZaNVds4LlVydXgr7cXJ6jmyTkVfDjmVzuGhd4WQpDyqQvdYvAa9xRaQQpJ5pexSMaRpCVe/dSX9LyiVWzQ2ajFur2Ld801Zs/5rdTVB8npvb34tN9V/5oP+20eWqno6t2amJiMGRn4zgrupMiM1uftJ56pb7rb+CaTOb7OX4jwG9Y1/bVjPd2JmGrVXPf+K4f5YNM+lI30Vlr8O/nSvLJgmZXfTjddCPU11OxZUuLbXrYejDBbwLrk9ZjMLUh8boGQ7+b4Nhn7a61D/DElDAqauv5bN+VvZInOaYQO2crvAIdO9RO2foNCGtrHKZM7aTIzJ8efkj8gaGeQwlyCuq0di1K3ArFKeZlmt0kubCSTQ0rdi5X+XeZ9KVuEzzEk8piPYUZTdemt+rXD6uw0FZV3gTzDt3i2mJ2Z+5uWzBjHzPX2o/5pm3XXWSArxPTB3jz2b7UK3a0X1dbT0ZcMcFDPBCq9k/tmOrqKN+8GYfJk1Hbd14V26N5R8moyGBB+IJOa7NJhz8EB1/oP7vr+2rCh7uSsdKouO/aLv4DdxGZ9KVuEzTIHZVKkNzcFI8QOEbPoubECeoyM1tsc5zvOLxsvdpWhA2g70jwGwmH3m/3Zi2ARyebV/J8dTCt3W10pYzYYowGEyGDPTrUTtWePZjKysxnIHSi7xO/x0HnwNSAzvv0YFHBOUjZBSPvg66+b9CEzOJq1sZkc8tIf9ztrS5bvzLpS93G2k5Lnwhn80atlqZ4oFWVN9UqNXPD5nIg+wA5lTltC2jMQ1CSBudbnkpqygBfJyZHevLvfalU6evb3U5XSY4pwMZBi0+Yc4faKduwEbWrK3bjxnVSZFBaW8q29G3cFHwT1pouXi9/eDlorM1r87vJ8t3JqIXo8nX5vyWTvtStgod4UlZQQ3FO03PpWl9fbEeMaFXlTYC5oXMBWJu0tm3BREaDox8c+qBt1/3Gw9eHUlJtYOXhjA6109nqDUbSzxQRNMgDVQemdozl5VTu3InjjTciNJ1XHmFjykYMJgPzw7p4bX51MZxaBdfcDLauXdtXE7JLa1h9LJOFw/3wcbK5rH3LpC91q6BB7iBottwygOOsaOrS0qg9e7bFNn3tfRnbZyxrE9dibMtUjVpj/rifthfyWu6nKUP9XRgf6s7He1OoNbR/qqizZZ4rwaA3EjykY1M75Vu2oBgMnTq188sN3IHuA4lwjei0di06/gXU13brMs33dyYhEDx8Xehl71smfalb2TlZ4RPiRHIzu3MBHKdNQ+h0raq8CTA/bD751fnsz9nftoCGLgGNTYdKMwA8cn0ohRV6Vh25ckb7yScK0Nlo8OtgVc3yDRvRBQVhHRXVSZHBqcJTJJUmdf0yTaMBjn4KQRPBq3/X9tWEzOJqVh/NZNGIvvg6X95RPnRC0hdCqIUQMUKITQ0/uwohfhZCJDZ8dbnotc8JIZKEEAlCiGkd7VvqGUKHeVGcU9XsFI/a0RH766+nfNOmFitvAkzym4SrtSvfn2/jDV1bVxi0GE6vhqoLbbv2IqOD3RgV5MoHu5KviNF+vcFI6slCgge7o9a0/5+9ISeH6qNHcZoV3am1dtYkrsFGY8OMoBmd1qZFsWuhPBvGPNK1/TTj/Z1JqITgoetCuqX/zhjpPw6cu+jnZ4HtiqKEAdsbfkYI0R9YDAwApgMfCCHUndC/dJUz7wyFxOP5zb7Oac5sjKWlVO7Z02KbWrWWuaFz2ZO1p+1nq45aBka9ed1+Bzw5NZyCCj3fXAFz+xmxxdTVGgkd3rHTp8oadkc7Rnfe1E6ZvozNqZuZGTQTO23nLf9sRFHgwDvgHgGhU7qun2ZkFlfz/fEsbhnZ97LP5f+iQ0lfCOEH3Ah8etHDs4EVDd+vAOZc9PgqRVH0iqKkAknAyI70L/UMdk5W+IY7k3Ss+VU89uPHo3Z3p3Tdula1Oz98PibFxNrENt7Q9YyE0KnmHbqG9p+KNTrYjTHBbvx/e+cdHmWV/fHPnUnvlSSkh4TQQwm9SqiKIKgggmXtiiv6s+yy6urquuqurr2uulRBkCoqVQGVHiDUhIQASSC990xm7u+PCW6AJFPT38/z5JnMzHvvPRcy571z7rnf88muc1TWtO5qPyU+BwdnW4J6mB/akVJSvGkjjgMHYhcUZDXbNqdupkpbxZzoOVbrs0HO74GsEzB8AahaJ7L9wU/JqFSCR8e1fCz/CpbO/F3gK+XuFwAAIABJREFUOaB+kU0/KWUmQN3jlbPegUD9ROuMutcUFIgc5EdRdgX5lxovSC1sbHCfNo2y3XuMkmUIdg1mROAIvk3+llqdiemTIx6H8lw4sdq0dtfw1MTu5JVVs+KACXpAVkZTo+X88TwiBvqiVpv/ka8+c4aalHO4T7eeoqaUktVJq+nr05ee3j2t1m+D7P0AnH2hXzPfXBrhYn45a49c4s4hIfi7t56Es9l/AUKIaUCOlNLYApsNBQAbXNYJIR4SQhwWQhzOzW06q0OhY9BtoP6EaPKhpjd03WfeAhoNJd//YFS/s7vPJqcihz0ZhkNCVxE+Fvz7wt4P9RotZjIk3IuRkd58uvscFTWtk7d/8UQ+tdVaogZZprVTvOk7sLXFbYr1tuPis+NJLU7l9u7NXLwkJxFStsPgB1tNM/+Dn1KwUQkeG9c6sfwrWLLSHwlMF0JcAFYB44UQy4FsIUQAQN3jlU9xBlC/UnkQ0ODpGSnl51LKWCllrK+vZellCu0DRxc7gnp4khKf3WSIxyE6GvuePSk2MsQzJmgMXZy6sPqsiSt2IWD4HyEvCVJM0OhvgKcmdCevrIbl+1tntZ9yOBtHNzu6drcgtKPVUvz9ZlzGjkHtYdnBrvqsObsGV1tXpoRPsVqfDbLvQ/1hrMEPNO84jXAhr5z1Ry8xb2goXdxab5UPFjh9KeUiKWWQlDIM/QbtT1LK+cAm4J66y+4BNtb9vgm4QwhhL4QIB6KAg2ZbrtDhiBzUhZK8KnIuNq7FA+BxywyqTp6kOiXFYJ82Khtui7qNvZf2kl5qWMbhKvrM0muz7PvAtHbXEBvmxegoHz7bndriq/2aqlounMwncoBlB7LK9+1Hm5tn1WIpBVUFbL+4nemR03G0acZNzbIcOP4N9L8TnL2bb5wmeP+nZGxUgkfGtezp24Zojt2MN4CJQohkYGLdc6SUp4DVwGlgC7BAStn6uWwKbYaI/r6o1IKUw01n8bhNmwZqtdGr/VlRs1AJFWvPmii5rLbV19E9v8eiylqg19vPL69h6b6WXe1fOJ6HVqOzOGun5LtNqFxdcRk31kqW8bsaarOHdg7+R5+fP2xB847TCKm5ZWw4eon5w0Lp4tq6q3ywktOXUu6SUk6r+z1fShknpYyqeyyod91rUspuUspoKaX51agVOiQOzraE9PIiJb7pilo23t64jB5N8abvkFrD6wY/Zz/GBo1lfcp6arSGc/yvYuA9YOeiDw9YwKBQT8Z09+XzPaktqsmTfDgHZw/9AThz0ZWXU7J9B25TJqOyt44wmE7qWHN2DbF+sXTzaMYYd02F/jBW9FTwaZ2MmQ9+SsHORsUjY1s3ln8F5USuQpsiMtaPssJqspqoqAXgfsst1ObkUL53n1H9zo6eTUFVATvTdppmkKOHvqTiybVQfMm0ttfw1IQoCspr+O9vLaO3X12hIe1UPpGDulgko1yydRuyogL3mTOtZtv+y/tJL01ndvRsq/XZIAlfQ2UBjPhj847TCOdyy9h47BJ3Dw/D17XllDSbQnH6Cm2K8H76E6PJ8U1n8biMvwGVu7vRIZ7hXYcT6BLI6iQzUjCHPgJSBwc/M71tPQaEeDKhpx+f7UmlqMLEbxxmkHqsrvh5rGVZO0Xr1mIXFobjgAFWsgxWn12Nl4MXcSFxVuvzOnRa2PcRdB0IIcObb5wmeH9nMvY26hZX0mwKxekrtCnsHG0I7ePNufgcdE2EeFR2drjdOJXSHTvQlja98Qv6Grq3d7+dw9mHSS1KNc0oz1B9oY3Di/WFtC3gmcndKauu5dPdJtpgBinx2bh6O1hUIavmwgUqD8fjfussq8kuZJdnsyt9F7dE3oKduhmrRZ3ZpK+MNepJfTZWC3M2u5RNCZe5e0Roi+rlG0Jx+gptjsjYLlSU1JCZXNTkdR4zZiCrqynZssWofm+JvAUblY3p6ZugDw9UF0P8EsPXNkEPfzdmxHRl8d7z5JSYf9rXEFVlGjLOFBIV28UiZ120fgOoVLhPt151qXXJ69BKbfNWx5ISfn0HvLpBj2nNN04TvL0tCWc7Gx4e0zZi+VdQnL5CmyOsrw82diqSDWTxOMTEYBcRQfE642QWvB29mRQ6iY0pG6nQVJhmVOAgCButDxfUWhaaeWpid2q1kg9+Mpxyai7njuq/KUUOMj9rR2q1FG/YgMvo0dj6WRYiuoJGp2HN2TWMChxFsGuw4QbmkroLMhNg5EJQtbzEV0J6EVtPZfPg6Ai8Wqj2rbEoTl+hzWFrrya8nw/njuSi1TZ+GlYIgcets6g8epTqVOPCJXN7zKVMU8bm1M2mGzbqKSi9bLE0Q6i3M3MGB7PyYBpp+SbefIwk+XA2Hn5O+AS7mN1H+W+/UZudjfut1pM7/intJ3Irc5nbY67V+myQ394FF3+9Ymor8Na2JLyc7bi/BWvfGovi9BXaJFFD/Kkq15B+uqDJ69ynT9fn7K9bZ1S/Mb4x9PTqycrElUZV4bqKbuPBvx/8+q5F0gwAfxwfhVoleHfHWYv6aYiywmounS0iarCfZaGddetRe3riOm6c1WxbmbiSIJcgRna1XpnF67h8VL/SH/4Y2LR8LH3vuTx+Sc7jsXHdcLG3XmUxa6E4fYU2SUgvL+ydbEg+1HSIx8bXF5cxYyjauBFZazj/XQjBHT3uIKUohfhsY2Wjfm+s3xTMT4Yk47R/GsPf3YF7R4Sx/tglzmZbtjl8LSnx2SCh+2DzQzu1hYWU7tyJ283TEHbWCU+cLTxLfHY8c6LnoG7OkMuv74K9e6vUv5VS8q+tSfi7OTB/WGiLj28MitNXaJOobVR0G9iF1IQ8NAZkiT1unYU2N4+yX34xqu+p4VNxs3NjZeJK0w3rOQM8w/SbhKZ+U7iGR8Z2w8XOhre3JVnUz7UkH8rGN8QVDz8ns/so+W4zaDR43Gq9zdZViauwV9szM8p6+f7XkX8OTm+EwfeBg/lZS+ay40wOR9OKWDghCgfbtlkuRHH6Cm2W7oP9qK3WcuF40xWsXMaORe3tbXSIx9HGkZmRM9mZtpPs8qa/SVyH2gZGPAGXDsOFX01rew2eznY8OCaCraeyOZbedKaSsRRlV5BzsZTuQyyTXShatw6HPn1wiO5uFbtKakrYnLqZqeFTcbc3/3SwQfa+D2q7Vql/q9NJ3tqaRLiPM7cNsl69AWujOH2FNktAlAfO7nacPdi0Yxa2trhPn07pz7uoLWh6D+AKc6LnoJM6vk02sZwi1Al3+eo3Cy3kvlHheDvb8dZW66z2zx7KBoFFWTtVp09TnZiI+yzrrcg3pWyisrayeTdwS7Pg2Nf6/x9Xy2565rAp4TJJ2aU8NbE7thbULWhu2q5lCp0elUoQOdiPtFP5VJVrmrzWY9ZMqK2leJNxhdOD3YIZFTiKNUlr0Gib7vs6bB1h2KN6yWULhdhc7G147IZIfk3JY2+K+TV5QR9PTj6UTWCUBy6e5m9gFq1dh7Czw/2mmyyy5wo6qWNV0ipifGPo5d2Mxcj3fwK62laRXNBodfx7+1l6BrgxrW9Ai49vCorTV2jTRA/xR6eVnDvStCyDfVQUDv36Ubx2rdFZOXN7zCW/Kp8daWbo5cfeD3au8Nt7pre9hnlDQwhwd+CfW5NMzyiqR25aKUXZFURZsIGrq66mePNmXCdMQO1unTDM/sv7uVhysXlX+RUFemG13jPBu+UPQ31zKJ20ggqendzdIgnrlkBx+gptGp9gFzz9nUg6YLi4ucesWVQnp1B18qRRfY8MHEmwa7B5G7qOHhD7Bzi1Tr95aAEOtmoWxkVxLL2I7adN3GOoR9KBLFQ2gkgLKmSVbtuGrrgYj9nWkztembgSLwcvJoZOtFqf13HgM6gpg9HPNN8YjVCl0fL+zmRiQz25Ido6h9iaE8XpK7RphBB0H+pPZkoxJXmVTV7rdtONCHt7iozc0FUJFXOi53A05yiJBYmmGzd8AahsrRLbv21QEBE+zvxzaxK1TRxIawydVkfyoWzC+/pg72Rrth1Fq9dgGxyM05AhZvdRn4zSDHZn7Oa27rc1n85OVQkc+EQvt+DXjOGjRli67wI5pdU8OznaavpEzYni9BXaPFfyzQ1t6KpdXXGdPImSzd+jqzJO1+aWyFtwtHFk+enlphvm6q+XXT62EopMrMp1DTZqFc9N6UFKThlr4jNMbp+eWEhlqYbuQ/3NtqH6/HkqDh3C47bbECrruIaViSt/F7trNg59AVXFMPrp5hujEUqrNHy86xxju/syNKJ1qnKZiuL0Fdo8bj6OBES6c/ZglsGYt8esW9GVllK6bZtRfbvbuzOj2wy+P/89uRW5phs3ciEg9amCFjK5tx+DQj359/azJpdVPHsgC3snG0J7m+94ir79FtRqffF5K1BaU8ra5LVMDpuMv7P5N6MmqSnX6yFFToDAgc0zRhN8suscRRUanpkU3eJjm4vi9BXaBdFD/SnMqiA3renTq05DBmMXGkrhN8br49zV6y60Oq15sX2PYIiZq1ffLDU/Hg/6UNZfbuxBbmk1/9ljfKGVmqpaUo/lEhnrh9rWvI+0rKmheMNGXG4Yh20X68Sl155dS7mmnHt632P4YnOJXwIVea0Sy08vqOCLX88za0AgfYOa8eyBlVGcvkK7oNvALqhsBEn7m97QFSoVHnPmUBkfT9VZ43RtQtxCGB8ynm+SvjFdfRP0Qmw6jVVW+4NCvZjax5/P95wjt7TaqDbnj+VSW6Oz6EBW6U8/o83Px+M265zA1eg0LD+znMH+g5svTVNTpf83DxsNoS1fJOX1H8+gFoLnpvRo8bEtQXH6Cu0CB2dbwvv6kHw4u0nlTQD3mbcg7OwoMmG1f2/veympKWFDinGVuK7Cuxv0nQ2HvrR4tQ/w7ORoqmt1vLfTuJtW4v4s3HwcLKqDW/jNKmy6BuAyerTZfdRn24VtZFdkc0+vZlzlH1sBpZkwpuVX+ftT8/nhRBaPjuuGv3vrFzs3BcXpK7QboocHUFmqIe1kfpPX2Xh64jplMsUbN6KrMG7l3r9Lf/r59mPZ6WVodYaLrV/H2OdAW2OVTJ4IXxfuHBrCyoPpnMsta/La0oIqMpIKiR4WYHbmSPX581Ts24/n7NkIteV6MVJKlpxaQphbGKODrHMTuQ6tRi+sFjQYwsc2zxiNoNNJXt18mq7uDjw4uu2UQTQWxekrtBtCenvh6GpLooEQD4DnHXegKyuj5Afj1TDv6XUPGWUZ/Jz+s+nGeXeDfnPg8Fd6OQALeSIuCkdbNf/c0nQqadKBLJDQY5j5G6VFq9eAjQ3us6yjm38o6xBnCs5wd++7UYlmcjEJq6A4DcY82+KlEDcmXOLU5RKem9IDR7u2KarWFIrTV2g3qNUqug/258LxPKrKmpZOcBwwAPuoKAq/Nl43Py4kjkCXQJacMrMk4thn/7cCtRAfF3seGasXYzt4vmE9ISklSfuz6BrlgZuPo1nj6KqrKV63Dte4OKtt4C45vQRPe09ujrjZKv1dh1YDe/4FATEQNal5xmiEKo2Wt7aepU+gG9Njurbo2NZCcfoK7Yro4XpZBkOlFIUQeM67k6rTp6lKSDCqb7VKzV297uJY7jESco1rcxVeEfpMnsNfQUmm6e2v4f5REQS4O/DyplMNHtjKPl9CUXYF0Ras8ku3bkVbXIznHXMsMfV3UotS2ZOxh7k95uJg00yx7oSVUHQRxv2lxVf5S/dd4FJRJX+Z2rPNyy00huL0FdoVvsGueAe6GBXicb/5ZlQuLhSs+Nro/mdGzsTVztX81f6YZ0Bq9Xr7FuJop+bFab04nVnCigNp172fuD8LG1sVkQPNX6EXfr0Su9BQnIYOtcTU31l6ein2anvm9LDOTeQ6amv0q/yuA6H75OYZoxGKKmr48KcUxkX7MiLSp0XHtiaK01dod/QY7k/OhRLyLzW9yalydsZ95kxKtmyhNs84BUsnWydmd5/NzrSdpJeaccrWK7wub38xFF8yvf01TO3jz+goH97alnRVCqemRkvyoWwiBvhi52heSb7KEyeoPHYMz3nzrHICN78yn+/OfcfN3W7Gy8HL4v4aJOFrKEqDcYtafJX/1rYkymu0LJras0XHtTaK01dod0QP80dlIzj962WD13rOnQsajf60qZHc2fNOVELF0lNLzTNwzLN1q/1/m9e+HkIIXp7emyqNljd+/N+m7rn4HGoqa+k1yvy4csHSZfobo5V0879O/BqNTsPdve62Sn/XUVsNe96CwFiIakbxtgY4kVHMigNp3D08lGh/1xYd29ooTl+h3eHoYkdEf1+SDmRRq2k6vdI+IhznESMoXLnKqBq6AF2cujC923TWp6wnv7Lp9NAG8QyF/vPgyFIoNl1H51q6+bpw/6gI1h7J+L3C1unfLuPexZGuUR5m9anJzqFkyxbcb52F2sXFYhvLNeWsTFxJXEgc4e7hFvfXIPGLoTgdbmjZWL5OJ3lx40m8ne15aqJ1Kom1JorTV2iX9BrZleqKWlKPGtbL8Zw/j9rsbEp3GK+bf2/ve6nR1vB1ovH7AVdx5cDQrtfNa38Nj4+PxMfFnle+O0X+5TIyU4rpNbKr2bn5hatWQm0tXvPnW8W+b89+S2lNKff1uc8q/V1HTbk+lh82GrqNb54xGmFNfDrH0ov4y409cHMwX8G0raA4fYV2SVC0J24+DkaFeFzGjsU2OJiCpcuM7j/cPZy4kDhWJq6kXFNuuoEeITDkIX35vuxTpre/Bhd7G56bHM2RtCI2b0hGpRL0GG5ehSZddTVF36zGZdw47EJCLLZNo9Ww9PRShvgPoa9vX4v7a5ADn0J5LsT9tUVX+UUVNbzxYyKDwzyZOSCwxcZtTsx2+kKIYCHEz0KIM0KIU0KIhXWvewkhtgshkusePeu1WSSESBFCJAkhWnbrXaFDIVSCniO7culsEUXZTZ+6FWo1XvPnUXnkCJUnjCuwAnBfn/sorSnl27Nm1NEFvdSvvStsf8m89tdw66Ag+vq7kneygJC+3ji5madPX7L5e7QFBXjdfZdV7NqcupmcipzmW+VXFuorlHWfCsHW0fk3lre2JVFSVcsrM/q0C618Y7BkpV8LPC2l7AkMAxYIIXoBfwZ2SimjgJ11z6l77w6gNzAF+FgI0f6Osym0GXqOCECoBKd+MZwl4z5rFionJwqWGb8529e3L0P9h7L41GKqao3T578KJy+9+mPKdkjdZXr7a1CrBI9FBeKgEyQ6mV5oBfQHugqWLcM+KgqnYcMstqlWV8uXJ7+kh1cPRnQdYXF/DfLrO/pCKeNfaJ7+G6H+5m3PALcWHbs5MdvpSykzpZRH6n4vBc4AgcAM4EqS8xLgijj3DGCVlLJaSnkeSAFa9rat0KFwdrcnor8vZ/ZmoqlpekNX7eqK+6xZlPy4BU1O0/V26/NIzCPkVeax5uwa84wc8hC4B8P2v4LOPEddn4pTRWgcVXySeJnErBLT2x88RHViIp5332WVlesP53/gYslFHol5pHlWwkXpsP9TfRqsfx/r998IHW3ztj5WiekLIcKAAcABwE9KmQn6GwNw5eRIIFA/8Tmj7rWG+ntICHFYCHE4N9eMwhYKnYa+4wKprqgl+ZBhdUuv+fOgtpaiVauM7j/WP5ah/kP58sSXVNY2Xa6xQWwdYPyLkJkAJ80ME9WRm1ZKVmoxQyeG4uZky6J1J9DpTCukXrBsKWoPD9xvtlwioVZXy6cJn9LTqyfjg5tpc/Wnv+sfxz/fPP03wtcH0zrU5m19LHb6QggXYC3wpJSyqaVHQ8uABv9ipZSfSyljpZSxvr6+lpqo0IHpGuWBV1dnTuzKMKixYxcWhsv48RSu+BpdufGbs4/1f4z8qnxWJxkv1XwVfW8H/36w81W9BryZnNidgY2digFjg3jhpp4cTStixYGLRrevycigbOdPeMyejcrBcomE7859R3ppOo/GPNo8q/zMBDj+DQx7FNyDrN9/I2SXVPHmj4mMjPTuMJu39bHI6QshbNE7/BVSyivVqLOFEAF17wcAV75LZwDB9ZoHAYZTLxQUmkAIQd9xQeSll5F93nC4w/uB+9EWF5t0WGug30CGBQzjq5NfmVdkRaWCSa/qVSEPfm56e6CqXEPywWy6D/HHwdmWmQMCGRXpwz+3JJFVbNyNpHDZMlCr8bxzrlk21Eej0/D58c/p5d2LccHjLO7vOqSEbS+Ao6e+SE0L8rfvTlGt1fH3W/p2mM3b+liSvSOAL4EzUsr6Rw83AVcqJ9wDbKz3+h1CCHshRDgQBRw0d3wFhSt0H+KHnYOa4z8bPgjlNGAATrGx5C9egqypMXqMBf0XUFBVYF5JRYCIcfo6rr+8BRUNq2Y2xZm9mdRqdPQdp195CiF4bWYfarQ6Xt5kOCW0tqCAwtVrcL/pRmz9La9XuyFlAxllGTwW81jzOMbTG+D8Hv1BLEfzDqCZw47T2fxwIosnxkcS7uPcYuO2JJas9EcCdwHjhRDH6n5uBN4AJgohkoGJdc+RUp4CVgOngS3AAimlGdUqFBSuxs7Bhp4junIuPoeyQsOrXu8HH6A2M5Pi743X2u/fpT9jgsbw1cmvKKkxfQMVgImvQHXp/+LURqLT6jjxcwYBke74BP1PAiDU25kn4qLYciqL7aeb3tMoWLwEWVWF98MPm2V6fapqq/j02KfE+MYwJmiMxf1dR3UZbPmLPiQW20xpoA1QXKnh+Q0n6O7nwkNjurXYuC2NJdk7v0ophZSyn5Syf93PD1LKfCllnJQyqu6xoF6b16SU3aSU0VLKH60zBQUF6Dc+CCmlUat95zFjsO/enfwvv0CakFHzxIAnKKkpYfHJxeYZ6ddbn81z+Cu4fNToZueO5lJaUEX/CdcfpHpoTATRfq78deNJSqsarjGgLS6mcMUKXKdMxj7C8kpP3yR9Q05lDgsHLmyeVf6ef0LpZbjpbVC1XFb33zefJq+shrduj8HOpuOeW+24M1PoVLj5OBIxoAunfrlMTVXTGjtCCLwfeoialHOUbttm9BjRXtFMDZvK8jPLyas0TrXzOsYtAmdf+P4Zo1I4pZQc256GexdHwvtdL+drq1bx+q19yS6p4uVNpxvso2D5cnTl5fg88oh5NtejrKaML058wYiuIxjsP9ji/q4jNwn2fQT957foQayfk3JYE5/Bw2Mi6BfUcuGk1kBx+godhv4Tg6mprOXMb4YLmLhNnYJdt27kffSRSav9BQMWUKOt4T/H/2OekY4e+k3dS4fh2HKDl2emFJNzsZT+ccGIRop2DAzxZMENkaw9ksGPJ66eu7asjIKly3AZPx6H6GjzbK7HktNLKKou4omBT1jc13VICT88C7bOMOFl6/ffCMUVGv6y7gSRXVx4Ii6qxcZtLRSnr9Bh8A93JyDSnYSf0tE1UGmqPkKtxuexR6lOTqF0yxajxwh1C2VW1CxWJ60mreT6wiZG0W8OhAyHHS8b3NQ9tiMNB2dbog3o7DwRF0W/IHcWrT9Bdsn/9jUKly9HV1yMz6OWr/JzK3JZcmoJE0Mn0tu7t8X9Xcep9XB+N8S9CC4tl6r94saT5JRW8/btMTjYdnyRAMXpK3Qo+k8IoTS/inNGqG+6TZmCXWQ3cj/6GKk1Pqfgsf6PYau25b0j75lnpBBw41tQWdTkpm5hVjnnj+fRZ2wgtgYKcNuqVbwzpz9VGi3PrElAp5NoS0vJ/+9iXMaNw7Gv5UJonyR8gkar4cmBT1rc13VUl8HW51t883bjsUtsSrjMwrgoYoI7dljnCorTV+hQhPfzwcPPiSNbLxo8rCXUanwXLKDm3DlKfjA+r8DH0Yd7e9/LtovbOJ573DxD/fvAkAeb3NQ9uj0NtY2KvuOMO5jUzdeF52/qxS/JeSzdd4GCZcv0q/zHHzfPxnqkFqWyLnkds6NnE+JmuTLndex+s8U3by8XVfLChpMMCPHgsXEdN1vnWhSnr9ChECrBgEkh5KWXkX7GcD686+TJ2EdHk/vhB0hNw9kvDXFv73vxdvDm7cNvG7y5NMq4ReDs0+CmbllhNUn7s+g5IsAkNc35Q0O4IdqX9zceJe+rxbiMH49jH8tDMe8ceQdHG0cejrE85fM6Mo/rN28H3NVim7c6neTp1QlodZJ35/THRt15XGHnmalCpyF6iD/O7nYc2Wo45i5UKnwXLkRzMY2i9euNHsPJ1okFAxZwJOcIWy9sNc9QRw+Y9Hf9pu6hqzeGE35KR0oYMNG0VbUQgjdv68etqXugrBT3Rx81z7Z67L20l13pu7i/7/3Wr32r08J3C/WKpBNfsW7fTfDlr+fZl5rPSzf3ItS7Yx7CagzF6St0ONS2KmLiQriUVEj2BcMHqVxuGIdj//7kffQxuupqg9dfYVbkLHp69eRfh/5lXqEV0G/qRk7Ub+oWpAJ6yYVTey4ROagLbj6OJnfpWVHCLcm72R0Yw7sXLPuI12hreP3g64S4hjRP7dtDX8DlIzD5db3jbwHOZJbwr61JTOrlx+zYYMMNOhiK01fokPQe3RV7Jxvif7xg8FohBL5PPUVtdjaFXxsvs6BWqXl+2PPkVObwWcJn5hkqBNz8LqhsYOMfQafj5O4MNNVaBk42L3ae9+GHqHRaSuc/yFe/nWfbqSzzbAOWnl7KhZILLBq6CDu1eUVbGqXwIux8BbrFQd/brNt3I1TU1PLkqmO4Odry+qyOqa1jCMXpK3RI7BxtiIkL5nxCnlGrfeehQ3AeMYL8Tz9FW1xs9DgxvjHMiprFstPLOFd0zjxj3YNg8mtw8Veqfv2Ko9vTCevnc5XkgrFUp6RQtHYtnnPv4Im7xtEn0I1n1iSQUWi6UFxmWSafJXxGXEgcowJHmdy+SXRaWP8IIGDaOy1SAlFKyZ/XnuBsTin/nh2Dt4t9s4/ZFlGcvkKHJSYuGAcXWw5sNM4Zd3n2GbQlJeRPxSF7AAAVl0lEQVR9/LFJ4ywcuBAnWyde2fcKOmlmoZQBd0HkBI5+d4KaqlqGzTBPLiHnrbdROTnh8+ij2Nuo+XDuQHQSFqw4QpXG+LRUKSX/OPgPAJ4b/JxZtjTJb+9B2l648V/gGWr9/hvgq98usCnhMs9MimZM984r2a44fYUOi52DDYOmhJJ+ppCMpEKD1zv07InHbbdRsOJrqlNTjR7Hy8GLp2Of5kjOEdYnG78ZfBVCUH7Duxwvm0J3j+N4+5keSinbvZuyXbvweeRhbDz1panDfJx56/YYEjKKjVLjvMLOtJ3sSt/FY/0fo6tLV5NtaZLMBPj5H9BrBsTcYd2+G+FAaj7/+OEMk3r58ejYzpOe2RCK01fo0PQZG4iLpz37N5wzKrXS98mFqBwcyH7zTZPGmRk5k0F+g3g7/m2zdXni91SgE3YMUX8Cu98wqa2uupqs1/6BXXg4XndfveE6pY8/j43rxqpD6aw8aDijqbSmlNcPvE60ZzTze803yQ6DVJfCt/fpU1WnvdsiYZ2s4ioWfH2EUC8n3podg6oROYvOguL0FTo0NrZqYm8MI/t8CeeOGD6la+Ptjc+jj1K+ew+lu3YZPY4Qgr8O/ytVtVX88+A/TbazKLuCU79cpueoINxjJ8Av/9bryRtJ/pdfoklLw//FFxB2139LeHpSNKOjfPjrxpMcPN/0+YX3jrxHbmUuLw1/CVuVFUsFSgmb/0+fpXTrFy2SrVNdq+XRFfFU1Gj57K5BHa70oTkoTl+hw9NzRABeXZ3Zuy6FWiPi2p53zccuIoLsV15FV2H8BmiEewQP9nuQHy/8aHLu/m/fJqO2UzFkWjhMfRO8I2Htg1Bm+EZVk5FB/mef4zplCs4jRjR4jVol+HDuQII9nXh42WHS8hue197Le/km6Rvm9ZxHX1/LpRuu4tgKOLEaxv4Zwqy8MdwAUkpe2niKo2lFvHV7DFF+pm+Md0QUp6/Q4VGpVYyaHUVpfhUJO9MNX29nR8Arf0Nz+TK5H3xo0lgP9H2APt59eGXfK2SXGy7WDpB2Op8LJ/KJvTFMf/rW3gVuXwyVhbDhkSYlmKWUZP3tFVCr8ftT0xuu7k62fHnvYHQS7ltyiOLKq08gF1cX8+KvLxLuHm59Fc2sk/qTx2GjYcwz1u27Ed7fmcKqQ+ksuKEbN/ZtWrCuM6E4fYVOQXAPL8JjfIj/8SLlxYYPYDnFxuJx++0ULF1K1emGdeobwlZly+ujX0ej0/Diby8azObRaXX8uiYFN19HYm6od1DIvw9MeR1SduiLijRCyQ8/UP7LL3R5ciG2AYYdW7iPM5/MH8iFvHIeXnb494weKSWv7HuFgqoC3hj9Bo42ph8Ka5TKQvhmnv4E8q1ftoi2zsqDabyz4yyzBgbyzCTLJaU7EorTV+g0jJgVibZWx961KUZd3+WZp1F7enL5hRdMqqcb5h7GM7HPsC9zH0tOLWny2uM/Z1CYWc7IWyNR217zcYy9D2LuhF2vw8l117XVFheT/Y/XcejTB89584y2b0Q3H966PYb9qQX83+pjaHWSdcnr2HZxGwsGLKCXdy+j+zKITqcPUxVfgtlLwdXPen03wvfHM3l+/QnGRfvy5q39OuUBrKZQnL5Cp8HDz4mBU0I5ezCb88cNZ9io3d0JePklqk+fIffDj0wa6/butzMpdBLvHnmXA5kHGrymKLuC/RtTCevrTXjM9VWxfj+tGzIcNjwKGfFXvZ39r3+hLSoi4JW/IdSmrZ5vGRDI8zf25IcTWfxx3QZeO/AawwOG84fefzCpH4Ps+CukbIepb7SImNq2U1ksXHWUQaGefDxvILadSEjNWJR/EYVORezUMLwDndm1IpGqcsOqmq4TJuB+6yzyv/iCivh4g9dfQQjBqyNfJdwtnGd3P0tm2dUVraRO8tOyM9jYqhg3r0fjq1Ebe5izHFz8YOUdUHAegJItWyj+di3e992HQy/zVuYPjongntE+7C56G7V05/XRb6K2Zuhl74ew9wMY/CDE3m+9fhvh58QcFnx9hD6B7nx172Cc7Gyafcz2iOL0FToVahsVcff0orJUw69rko1q47foL9gGBnL5uT+hLS01eiwnWyfeueEdNDoNC39eSGVt5e/vHd+VQWZKMaNuj8LZw4AcgLMPzFsDOg0sn0VNYgKZL7yIY0wMvk/80Wh7rkWj1ZCu/gxb20ryU+fy0vrzaAxUHDOaE9/Ctuf1B7Cmvtns+fg/nsjkoWWHifZ3Zcl9Q3BVUjMbRXH6Cp0O3xBXBk0JJWl/FsmHDWfYqF2c6frmm2iys7n850Um1dQNdw/njdFvkFiQyPO/Po9O6sjLKGPf+nOE9vEmepi/kUZHw52r0RVmcunh+SAEgf9+G2FrnnOTUvLagdc4lH2IV0e9zJ9uiGPz8UweXR5vklxDgyR+D+sfhtBRMPPzZt+4XXckgwVfH6FfkAcrHhiGu6Pi8JtCcfoKnZLYm8Lwj3Dj5+WJFOcazsV3GjgAv+eeo2znTvI//9ykscYGj+Xp2KfZfnE7Hx78mG1fnMTe0Ybxd/c0aZNRBg0mK3sSVdm1BNxgg62Xk0l21Gfp6aWsTV7Lg30f5OZuN/Pw2G68OqM3O87kcP+SQ5RX15rXcfJ2WH0PBPSHuSvB1sFsGw0hpeTT3ef4v9UJDIvwZul9QxSHbwSK01folKjVKibe3xuVSrD1P6fQagyv3j3vmo/btGnkvvc+Zbt3mzTe3b3uZlbULFI2l1KYVc7E+3qZVBELIP+LLyj+6RA+d0zCzTUZFt9s1OGta/nx/I+8ffhtJoZO5PEB/yuleNfwMN66PYZ95/KZ8/k+05U5k3fAqnng1wvmrwUHN5NtM5ZarY4XN57kjR8TmdYvgK/uHYyzvRLDNwbF6St0Wty8HRl/d09y00rZtTLJcE1dIQh49RXse/QgY+GTVBw6ZPRYQghuqfwD0blDORy0lUNq024aJVu3kfvvd3C78UZ8XnoX5q6C/BT4avLvxVeMYefFnSz6ZRED/Qby2qjXUImrXcBtg4L4z92xXMyrYPqHv/FbipE6Qqc36TeafaPhrg36nPxmorC8hj8sPsTy/Wk8PDaC9+8YgINty9TV7QgoTl+hUxPR35fB08JJ3JvJgY2GnafK0ZGQL/6DbdeupD/8CBVHGy5qfi3Jh7PZ+20qof28sB1czEt7X2Jjykaj2pb88AOXnn4ax5gYAv7xmj4kFBkHd2/UH3z6YgKkG74B7by4k2f2PEMfnz58FPdRowew4nr6seHxkXg523HXlwf497Ykahvb4JUS4pfAmnshcCDc812zauqculzMzR/+yoHUAt68tS+Lpvbs9AJqpqI4fYVOz+Cbwug1uivxWy5y/GfDMg023t6E/Pe/qH19SH/wIcr372/y+ozEAnYsPk1AN3emPNCX9+LeZUjAEF747QX+eeif1Ooaj58XrV3HpWeexal/f4K/+A8qh3ox8pCh8MAOsHeDJdP0pQcb+Laikzo+OvYRT+56kp5ePflkwic42zZdF7abrwsbFoxk5oAg3v8phds/28eFvGtKQlYW6hUzv3sCwsfA/HXNtsKvrtXy7o6zzPxoL7VayepHhjNnsHmVxTo7whi52dYkNjZWHj58uLXNUOjg6LQ6tnx+kvMJeYy6PYqYOMO1UzWZmaQ/9BDVFy7S9e+v4j5jxnXXpJ3O58dPTuDm68jMpwfi4KzfaNToNLx9+G1WnFnBYP/BvDH6Dbo4dfm9nZSS/M8+J/fdd3EeNYqgD95H5diINEJ5Hqx7CM7thOgbYfoH+jRPoLCqkBd+e4E9GXuY0W0GLwx7AQcb0zZXv0u4zF/Wn6CmVsfCCVE8ODoC2/R9+jHLsmDcIhj1VLNl6Ry6UMCidSdIySljRv+u/HVar05b9coUhBDxUsrY615XnL6Cgh6tRse2r06RejSXoTMiiJ0aZrhNSQkZf3yCigMH8H7gfnyfeOJ3aePUY7ls/eIknv7OTH+if4Mbt9+d+45X97+Kvdqel0e8TFxIHLK2lqy/vULRmjW4TZtGwD9eQ9WAXPJV6HRw4FPY8RLYucCU19nnE8rzvz1PUXURzw1+jjnRc8yWJMguqeKljafYcSqDV9w3M7d6DcIzTK+lEzTIrD4NUVyp4c0tiXx9II1AD0f+PrMPN0R3MdxQAVCcvoKCUei0OnYuPcPZA9lEDPBlzJzuBg9PyZoasl77B0XffIND7974vvYmCSd1JOxMp0uYG9Mej/l9hd8Q54vP86c9f+JMwRnutB3JrWuz0Z5KxPuRh/FduNA0R51zhtxNC/io6jxrXV2IcArgzbj36eHVw/g+GpykhOTtlG1ehEtJCt/UjmNH2P9x3w19GBbhZVV9m8LyGv679wJL9l6gtErDfSPD+b9J3ZUTtibSZpy+EGIK8B6gBr6QUjZZIkhx+gotjdRJjmy7yKHNF1Db6jXue4/uio1d0+GLom3bOfH2N5wNmEyVgze9hvky8o6e2DkYdlYVaRfY8+6fCdySQLkDnPvDDYy5dxHBrobDTFfIKs9iddJqlp9Zjqa2mjvLq3k8NwvH4OEw7FGIngpqE/PYa2sg6Qc4+B+4+Ct4RaCZ8CpL8nvxwU8pFFdqCPdx5o7Bwdw6KAgfM8MuUkoSMopZeSCNTQmXqdRomdjLj4VxUfQJdDerz85Om3D6Qgg1cBaYCGQAh4C5UspGtWsVp6/QWhRlV7B7ZRIZiYU4utrS74YgQvv64B3o8nvGiJSS4txKMhILSdiZTlF2Ba6qMqLiP8db5OM2/WZcJ0zAaeBAhM3Vzl9bVETpz7so2byZ8r17QQjspk1i+Xgb1uVsQyd1DA0YyrigcQz0G0h3z+7YqP7Xh07qSClK4Uj2EfZk7OG3y78hpWRC6ASeHPgkIQ4+cGSpXv+mJAOcu0Df2/QFTIKHgbP39ZOurdangmYchrR9emnn8lxwC4IRf9Qrf9roQ02VNVp+OJHJqkNpHLpQiK1aMKGnH2O7+zI43IsIH+cGvwFIKSkor+Fcbjlns0uJv1jIwfMFXCqqxNFWzbR+ATwwOoJof6XoiSW0Fac/HHhZSjm57vkiACnl6421UZy+QmtzObmI+B8vkHZaX2bQztHm95BPVbmGyhK97LJPsAuDpoQRMcCX6jOnyfv4E8p/+UUvy6xSoXZ3R+3hAWoV6CQ1Fy+CVotN1wA8Zs7C49ZZ2HbVFyHPKs9iQ8oGNqZsJKMsAwCBwN3eHVc7V8o15RRVF/2u1+/v7M/NETczK2oWQa5BV09Ap9U77/jF+kdtnUy0rRM4eesfhYDaKihKgys1AJx89DeI/vP0KaJNbNQmZ5ey6lA6G49dIq9M379aJfB0ssPd0QaVEEigtEpDYbmGmnopoD4udgwO82J0lC83xwQoujlWoq04/duAKVLKB+qe3wUMlVI+fs11DwEPAYSEhAy6ePFii9mooNAYpQVVXE4uIjOl6HeFTls7NX4R7gREuuMVcP3KVltWTvmvv1CVlIS2sBBtcTHo9J85u9BQXCdOxKFP7yZj4pllmRzJOUJqcSrF1cWU1JTgauuKh4MHoW6hDOwykECXQOPi6poquHxEv5Ivy9Zn/lwRglPZgleE/oBVQIy+ZKOJsXopJedyyzl8oYD0wgoKymsoqaxFop+zi70Nns52dHF1oJuvM918XQjydFQ075uBtuL0bwcmX+P0h0gpG5UKVFb6CgoKCqbTmNNv6cNZGUD9nakg4HIL26CgoKDQaWlpp38IiBJChAsh7IA7gE0tbIOCgoJCp6VFE1+llLVCiMeBrehTNr+SUp5qSRsUFBQUOjMtftpBSvkD8ENLj6ugoKCgoAiuKSgoKHQqFKevoKCg0IlQnL6CgoJCJ0Jx+goKCgqdiDavsimEyAXMPZLrAxhZ763N0t7n0N7tB2UObYH2bj+0/BxCpZS+177Y5p2+JQghDjd0Iq090d7n0N7tB2UObYH2bj+0nTko4R0FBQWFToTi9BUUFBQ6ER3d6X/e2gZYgfY+h/ZuPyhzaAu0d/uhjcyhQ8f0FRQUFBSupqOv9BUUFBQU6qE4fQUFBYVORId0+kKIKUKIJCFEihDiz61tjzEIIYKFED8LIc4IIU4JIRbWve4lhNguhEiue/RsbVubQgihFkIcFUJsrnve3uz3EEJ8K4RIrPu/GN4O5/BU3d/QSSHESiGEQ1ufgxDiKyFEjhDiZL3XGrVZCLGo7vOdJISY3DpWX00jc/hX3d/ScSHEeiGER733WmUOHc7p1xVf/wiYCvQC5goherWuVUZRCzwtpewJDAMW1Nn9Z2CnlDIK2Fn3vC2zEDhT73l7s/89YIuUsgcQg34u7WYOQohA4AkgVkrZB72E+R20/TksBqZc81qDNtd9Lu4Aete1+bjuc9/aLOb6OWwH+kgp+wFngUXQunPocE4fGAKkSClTpZQ1wCpgRivbZBApZaaU8kjd76XonU0getuX1F22BLildSw0jBAiCLgJ+KLey+3JfjdgDPAlgJSyRkpZRDuaQx02gKMQwgZwQl+drk3PQUq5Byi45uXGbJ4BrJJSVkspzwMp6D/3rUpDc5BSbpNS1tY93Y++WiC04hw6otMPBNLrPc+oe63dIIQIAwYABwA/KWUm6G8MQJfWs8wg7wLPAbp6r7Un+yOAXOC/dSGqL4QQzrSjOUgpLwFvAWlAJlAspdxGO5pDPRqzub1+xu8Dfqz7vdXm0BGdvmjgtXaTlyqEcAHWAk9KKUta2x5jEUJMA3KklPGtbYsF2AADgU+klAOActpeGKRJ6uLeM4BwoCvgLISY37pWWZ129xkXQjyPPoS74spLDVzWInPoiE6/3RZfF0LYonf4K6SU6+pezhZCBNS9HwDktJZ9BhgJTBdCXEAfUhsvhFhO+7Ef9H87GVLKA3XPv0V/E2hPc5gAnJdS5kopNcA6YATtaw5XaMzmdvUZF0LcA0wD5sn/HYxqtTl0RKffLouvCyEE+ljyGSnlv+u9tQm4p+73e4CNLW2bMUgpF0kpg6SUYej/zX+SUs6nndgPIKXMAtKFENF1L8UBp2lHc0Af1hkmhHCq+5uKQ78/1J7mcIXGbN4E3CGEsBdChANRwMFWsM8gQogpwJ+A6VLKinpvtd4cpJQd7ge4Ef1O+Tng+da2x0ibR6H/enccOFb3cyPgjT5zIbnu0au1bTViLuOAzXW/tyv7gf7A4br/hw2AZzucw9+AROAksAywb+tzAFai34PQoF8F39+UzcDzdZ/vJGBqa9vfxBxS0Mfur3ymP23tOSgyDAoKCgqdiI4Y3lFQUFBQaATF6SsoKCh0IhSnr6CgoNCJUJy+goKCQidCcfoKCgoKnQjF6SsoKCh0IhSnr6CgoNCJ+H86bKPMaw7MbgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# format the wavetable in C/C++ array format as unsigned integers of the minimum required size\n",
"def make_wavetable(func, name, **kwargs):\n",
" phase_offset = kwargs.get('phase_offset', 0)\n",
" freq = kwargs.get('freq', 1e3)\n",
" sample_rate = kwargs.get('sample_rate_hz', 100e3)\n",
" max_output = kwargs.get('max_output', 4095)\n",
" dt = 1/sample_rate\n",
" T = 1/freq\n",
" wavetable = [\n",
" func(\n",
" (2*np.pi+phase_offset)*x*freq\n",
" ) \n",
" for x in np.arange(0, T, step=dt)\n",
" ]\n",
" wavetable = [int((wavetable[i] + 1) / 2 * max_output) for i in range(len(wavetable))]\n",
" \n",
" # find the variable size in bits\n",
" wt_word_size = 0\n",
" if (max_output < 2**8):\n",
" wt_word_size = 8\n",
" elif (max_output < 2**16):\n",
" wt_word_size = 16\n",
" else:\n",
" wt_word_size = 32\n",
" \n",
" row_length = kwargs.get('row_size', 8)\n",
" datum_bits = kwargs.get('datum_bits', wt_word_size)\n",
" hex_digits = int(datum_bits/4)\n",
" wt_text = f'uint{datum_bits}_t {name} = {{\\n\\t'\n",
" for idx, w in enumerate(wavetable):\n",
"\n",
" if hex_digits == 2:\n",
" wt_text += f'0x{w:02X}, '\n",
" elif hex_digits == 4:\n",
" wt_text += f'0x{w:04X}, '\n",
" else:\n",
" wt_text += f'0x{w:08X}, '\n",
" if (idx+1)%row_length == 0:\n",
" wt_text += '\\n\\t'\n",
" wt_text += '\\n};'\n",
" \n",
" size_bytes = int(len(wavetable)*(hex_digits/2))\n",
" \n",
" len_text = f'#define {name.upper()}_LEN ({len(wavetable)}u);\\n'\n",
" size_text = f'#define {name.upper()}_BYTES ({size_bytes}u);\\n'\n",
" \n",
" if kwargs.get('print', False):\n",
" print(len_text)\n",
" print(size_text)\n",
" print(wt_text)\n",
"\n",
" return (wavetable, wt_text, size_bytes, datum_bits, len_text, size_text)\n",
"\n",
"freqs = [2e3, 2.25e3, 2.5e3, 2.75e3, 3e3]\n",
"sample_rate = 250e3\n",
"max_code = 2**10 - 1\n",
"\n",
"tables = []\n",
"for f in freqs:\n",
" t = {}\n",
" t['name'] = f'sin_{int(f)}_hz'\n",
" w = make_wavetable(\n",
" np.sin,\n",
" t['name'],\n",
" freq=f,\n",
" sample_rate_hz=sample_rate,\n",
" max_output=max_code,\n",
" )\n",
" t['table'] = w[0]\n",
" comment = ''\n",
" comment += '/*'\n",
" comment += '* function: sine\\n'\n",
" comment += f'* size: {w[2]} Bytes\\n'\n",
" comment += f'* frequency: {f} Hz\\n'\n",
" comment += f'* sample rate: {sample_rate} Hz\\n'\n",
" comment += f'* range: 0 - {max_code}\\n*/\\n'\n",
" \n",
" t['text'] = comment + w[1]\n",
" t['size_bytes'] = w[2]\n",
" t['freq'] = f\n",
" t['sample_rate'] = sample_rate\n",
" t['length_text'] = w[4]\n",
" t['size_text'] = w[5]\n",
" \n",
" tables.append(t)\n",
" plt.plot(w[0]) \n",
" \n",
"total_ram = 0\n",
"for t in tables:\n",
" total_ram += t['size_bytes']\n",
" print(t['text'])\n",
" print(t['length_text'])\n",
" print(t['size_text'], '\\n')\n",
"print(f'/* Total Memory Usage for {len(tables)} wavetables: {total_ram} bytes */')\n"
]
},
{
"cell_type": "code",
"execution_count": 196,
"id": "adaptive-affect",
"metadata": {},
"outputs": [],
"source": [
"from datetime import datetime\n",
"\n",
"def make_wavetables(funcs, freqs, sample_rate, max_output, **kwargs):\n",
" tables = []\n",
" for i in range(len(freqs)):\n",
" func = funcs[i]\n",
" f = freqs[i]\n",
" t = {}\n",
" t['name'] = f'{func.__name__}_{int(f)}_hz'\n",
" w = make_wavetable(\n",
" func,\n",
" t['name'],\n",
" freq=f,\n",
" sample_rate_hz=sample_rate,\n",
" max_output=max_code,\n",
" )\n",
" t['table'] = w[0]\n",
" comment = ''\n",
" comment += '/*'\n",
" comment += f'* function: {func.__name__}\\n'\n",
" comment += f'* size: {w[2]} Bytes\\n'\n",
" comment += f'* frequency: {f} Hz\\n'\n",
" comment += f'* sample rate: {sample_rate} Hz\\n'\n",
" comment += f'* range: 0 - {max_code}\\n*/\\n'\n",
" \n",
" t['comment'] = comment\n",
" t['text'] = w[1]\n",
" t['size_bytes'] = w[2]\n",
" t['freq'] = f\n",
" t['sample_rate'] = sample_rate\n",
" t['length_text'] = w[4]\n",
" t['size_text'] = w[5]\n",
" tables.append(t)\n",
" \n",
" if kwargs.get('write_file', False):\n",
" file = open(\"wavetables.h\", 'w')\n",
" file.write(\n",
" \"/** Wavetables\\n\"+\n",
" f\"* generated: {datetime.now()}\\n\"+\n",
" f\"* functions: {funcs}\\n\"+\n",
" f\"* frequencies: {freqs}\\n\"+\n",
" f\"* sample rate: {sample_rate}\\n\"+\n",
" \"* L. Gary 2022\\n*/\\n\\n\"\n",
" )\n",
" file.write(f'#define WT_SAMPLE_RATE_HZ ({int(sample_rate)}u)\\n\\n')\n",
" for t in tables:\n",
" file.write(t.get('comment'))\n",
" file.write(t.get('size_text'))\n",
" file.write(t.get('length_text'))\n",
" file.write(t.get('text'))\n",
" file.write('\\n\\n')\n",
" return tables"
]
},
{
"cell_type": "code",
"execution_count": 197,
"id": "complicated-incident",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x15d0bf30>]"
]
},
"execution_count": 197,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def white(x):\n",
" return np.random.random()*2.0 - 1.0\n",
"\n",
"def square(x):\n",
" if x <= np.pi:\n",
" return 1.0\n",
" return -1.0\n",
"\n",
"def triangle(x):\n",
" return (2/np.pi)*np.arcsin(np.sin(x))\n",
"\n",
"freqs = [2e3, 2.25e3, 2.5e3, 2.75e3, 3e3]\n",
"funcs = [np.sin, np.sin, np.arctan, square, triangle]\n",
"sample_rate = 250e3\n",
"max_code = 2**10 - 1\n",
"wts = make_wavetables(funcs, freqs, sample_rate, max_code, write_file=True)\n",
"plt.plot(wts[0]['table'])\n",
"plt.plot(wts[1]['table'])\n",
"plt.plot(wts[2]['table'])\n",
"plt.plot(wts[3]['table'])\n",
"plt.plot(wts[4]['table'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dependent-writing",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "bizarre-blanket",
"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.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment