From 8ee0b0024ef4f0896425e8918f623bf62d89c6e8 Mon Sep 17 00:00:00 2001 From: David Huss <dh@atoav.com> Date: Tue, 20 Feb 2024 13:48:14 +0100 Subject: [PATCH] Move software sim stuff over to looper repo --- circuitsim/envelope.ipynb | 322 ----------- circuitsim/lookup-tables.ipynb | 971 --------------------------------- 2 files changed, 1293 deletions(-) delete mode 100644 circuitsim/envelope.ipynb delete mode 100644 circuitsim/lookup-tables.ipynb diff --git a/circuitsim/envelope.ipynb b/circuitsim/envelope.ipynb deleted file mode 100644 index 7bec7a5..0000000 --- a/circuitsim/envelope.ipynb +++ /dev/null @@ -1,322 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 31, - "id": "6ad68c73-abea-4199-a610-f9c06edd405b", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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WVmyWCyaN29eyPF93rx5Ouuss2S32/0/kY7vEydO1P333x9U99lnn9UNN9yg7OxsZWdna/z48Ro5cmTY92SgwP5z1llnhW2nM844w/9aRtLH09PTde655+rSSy8N205ZWVk699xztXjx4pA1d+3aFbZf5+XldWun1NRUZWZm9vo59LWvfU3Dhg1TamqqCgsLdd555+miiy4K2U5Tp05VamqqcnJyVFJSErbvRPLcq6urg9rpyiuv1KxZs8LWlLqPx2eccYZmz57dbV0D26incT7SPhrYTpF8dmzfvl2f/vSnVVhYqKysLF100UWaMWNGyP6UmpqqiooKTZkypcfP4t76aNd2SklJUUpKilJTUyPetgn13APbKTMzU8OGDVNJSUnYsbhrHy0tLdXw4cNDbi8FttNtt90W8WfcyJEjZbFYlJqaGlSzr+Ne1zGq63bd66+/HtROAwYM0LBhw8Jui/TUR//2t78FLRvYnwoKCnT11VeHfL7xlhQB5/nnn9e3vvUt/fjHP9aqVav0iU98QrNmzeo2wIRTXV2tc889Vw6HQ6+88oo2bNighx9+WDk5Od2WffHFF7VkyRKVlpYG3d7Y2KgJEyboscce63afpqYmrVy5Uj/5yU+0cuVKvfDCC9qyZYuuvPLKoOVuuOEGbd68WS+//LLWrVuns88+WytWrNB3vvOdbjWNMfrUpz6lHTt26KWXXtKqVatUXl6u6dOnq7GxUZK0f/9+7d+/X7/+9a+1bt06/elPf9KaNWtktVr14YcfauHChWpra9OMGTP89/GZOXOmDhw44P+ZP39+0N8/+OADzZw5UzNmzNCjjz6qP/zhD3rkkUf0/vvv6+KLL9ZVV12ljz76KOLn/q1vfUv//Oc/NXfuXL377ruSvAPIkiVLtHz58qCakvTtb39br776qp599llt3LhR3/72t3XnnXfqpZde6vZa/eY3v5HFYgm6bdmyZXriiSc0fvz4bstL4du5azvdfvvtKioqksVi0WuvvaYDBw5o3bp1/mUbGxt17rnn6he/+EXIxwnVRtu2bVNWVlbQ6x9YM/D2AwcO6Omnn5bFYtFnPvOZkO2zdOlSLVu2TDfffLMuueSSE3qfS8FttWjRIk2bNk1jx47Vvn37tHDhQknS5z73OUnSQw89pEceeUSPPfaYli1bpgEDBujSSy9VfX19t7qB7fT000/7n1/Xmtu3b9d5552n0aNH680339SaNWv0k5/8RCkpKSHbaN26dcrPz9cLL7ygb3/729q4caMeeugh/epXv9Jvf/tb/31Gjhypxx57TOvWrdO7776rIUOGaMaMGTp8+HDItpoxY4ZWrlypsrKykDUj6aOh2urcc8+VxWLR008/7X+c6dOnq7KyMuLn/+ijj+ro0aP6yU9+IklqaWnRJz/5SbW3t0fULqHelx9++KF2794dcoz7/ve/r5aWFknSD37wg7BtHckYd/nll6utrU1vvPGG7r//fo0YMcJfO5yvfvWr/vfLs88+q+uuu86/nvv27VNHR4cef/xxLVmyREOGDFFLS4s+//nPhx2PmpqaNHPmTP3oRz/y/7/r+P6Pf/xDN9xwg6677jpNnTpVv/71r/Xwww9HPL5fffXVuu+++1RcXOyv+8gjj2j16tV69dVX9eqrr6q6ulp5eXlh35OBAvvPkCFDwraTr08vXrw4oj7+7rvvqqGhQWvXrtX//M//hGynFStW6IwzztDMmTP13nvvdas5aNCgbuPW9ddfL4fD4e8vge300UcfacqUKXI6nbrtttvCfg5NmjRJc+bM0caNG7VgwQJ5PB6tXLkyaD197fSlL31J//rXvyRJU6ZMCdt3Innu1113nb+d/vjHP2r+/PnasmVL2JqhxuPLL79c48eP79ZOgW20cOHCsON8pH00sJ3ee+893XzzzUpNTdWaNWu61WxsbNSMGTNksVj8y7e0tGj9+vX+59+1nUaMGKGVK1fq3HPP7fGzuKc+GthON998s8aMGaPTTz9d9957b8TbNqGeu6+dXnnlFZWXl+vgwYMaPnx42LG4ax9NT0/Xjh07NGfOnG7bS4Ht9Oyzz0b8GVddXS1J+uUvfxlUc9asWX0a97qOUV/5yleCtuuuu+46tba2+tvp2muv1aFDhzRx4sSQ9UL10Z/+9KdKT0/XrFmzurXTl770Ja1Zs0bvvfeerrvuurDrGVcmCUyZMsXcdtttQbeNHj3a/OAHP4jo/nfffbc577zzel1u3759ZuDAgWb9+vWmvLzcPProoyGXk2T++c9/9lhr6dKlRpLZvXu3/7b09HTz5z//OWi5vLw888c//rFbzc2bNxtJZv369f7b2traTF5ennnyySfDPu5f//pX43Q6jcfjMcYYU1VVZSSZt956y7/MTTfd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My0tLcaYj79VzMvLM08//bRZuXKluf76640kY7PZTHZ2tpk3b17Ez/25554zTqez27Jnn322sdvtIWu2traaG2+80f9aOZ3Obt+83HrrreaWW27x/1+S+c53vmNOO+0009zcbIzp/s1SJO0c2E5Wq9Wkpqaaxx9/3L9HqLi42Bw5ciToPpHuwTly5IgpLCw0n/nMZ8zatWt7rGmMMb/85S9Nbm6u//kYE7p9vvWtbxlJxul0ntD7PFxbXXrppeaSSy4xNpvNVFZWGmOMee+994wk//99vvrVrwa9R0O1k++9/vzzzwfV9H37lZaWZh555BGzatUq8+CDDxqLxWLefPNNf42ufSkzM9N8/vOfNxaLxdjtdmOxWMzPf/7zbs/jX//6l0lPTzcWi8WUlpaapUuXdm+kTocPHzZZWVn+x+haM5I+GqqtSkpKjMViMe+8845pa2szzzzzjLFYLGbkyJERPf+ubeR7PS+99FJz6623RtwugbqOHZLMCy+8YGbOnGn+67/+y1+z63u8a81Ixrh9+/aZSZMmGYvFYmw2myktLTXz5s0L23+eeOIJs3DhQrNu3Trzl7/8xQwZMsRMnz49qGagbdu2maysLPPkk0+GHYt9wu3B+c53vmMkmcGDB5u///3vZvny5ebaa681+fn5prKyss/ju69uSUlJt3UoKSkxTqcz7Huyp/7TtZ2MMeauu+4ykszKlSuNMX3r47feemvIdrJYLMblcoWt2dXXv/51M2bMmJDr7PPf//3fJjU11dx3330hP4d8/t//+38mPT3dSDKjR48227Zt89cMbKcnn3zS/xmVlpZm3nzzzV77Tqjn/sUvftGMGDHCGBM8HhUUFJg77rijW81w47HT6TRbtmzxr+uZZ57pb6OunxehxvmuQvXRcP1p1apVIWtWVVWZrKws881vftM0NjaahoYG841vfMNICmr7QBs2bDAOh6PHz+Le+mhgO82dO9eUlJSYQYMGmdzcXHPgwIE+b9t0bafAsXjo0KHm/vvvD1mzpz7q217Kzc31t9Pf//53I8ksWLAgaH0i/YwL3Abr67jn03WMCrdd5xv3fM+7t22Rrn3UGGP+8pe/hB33jh492mO9eEiagPP+++8H3f6zn/3MjBo1KqIaDofDnHPOOUG33Xnnnebss882xhizfPlyU1xcHLRBcLwBx+12m6uuusqc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Zh544AEjfXw2kMCaxnjPGrJ48WKzfft28+KLL5ry8nJz9dVX+9eprq7OTJ061Zx++ulm27Zt5sCBA+amm24yWVlZ5vXXXw9aj6amJv/z+O53v2vef/99s3PnTrN48WJzzjnnmIEDB5q6ujp/7UcffdRkZWWZv/3tb+a2224zN954o3E6nWbevHnmRz/6kbFarea1116L6LkbY8xtt91mysrKzKJFi8zKlStNeXm5GTZsmNm2bZtZu3ZtUE1jvIeWjRs3zixevNjs2LHDzJkzx6SkpJjf/e53YdtMIfaC9XR2l1Dt3LWdbrnlFv+u+4cffth88pOfNJmZmf733tGjR82qVav8x9LOnTvXrFq1yhw4cCBsG912223mH//4h9m6dav58MMPu9U0xrtbPi0tzfz+978Pud6B7bN161Zzzz33GKfTecLvc2O6t9VFF11kHA6Hueuuu7rd/xe/+IXJzs42L7zwglm3bp259tprTUlJSdB7qStJ5h//+IcZPHiwufvuu7v9/YUXXjAOh8M88cQTZuvWrea3v/2tsdls/m+VQvWlyZMnG0nm3nvvNTt37jQvvPCCKSgoMN///veNMd5D0374wx+aDz74wOzatcusWLHC3HLLLcblcvm/0evaVtdcc40pKSkxzzzzjNm2bVu3msb03kdDtdW1115rHA6HWbx4sXnttdfMhAkTzJQpU/yHX/T2/I3xfoNaVFRk/vCHPxhJZvjw4WbkyJH+b/Z6a5dQ78tt27aZhQsX+g8v6Toe3X333f5+EKpmJGOc75vwmTNnmtWrV5slS5aYG2+80f+tZ9f+s23bNvPTn/7ULFu2zOzcudPMmzfPjBw50owaNcq/nvfee68ZNGiQmTZtmtm1a5e57LLLTGlpqVm0aFHY8ejAgQNm1apV/nkbr776qpk7d6558803/c/9uuuuM8XFxWb+/Pnm4osvNunp6SY3N9ds3LgxovH917/+tf+5+z43Ro8ebUaMGGH++c9/mjfeeMMUFhaac889N+x7Mlz/8bVNqHbq+g1uJH38/PPPNyNHjvS/pl3bafPmzeZ73/uecTgcZvXq1WEPUdu6dauxWCzmlVde6faZGdhOmzdvNrfddpv517/+ZZYuXRryc2j79u3m5z//uVm+fLnZvXu3ef/9983ll1/u/3zr2k4LFiwwv/3tb43VajWZmZlm+fLlIftOb8/9kUceMdOmTTOjR482H3zwgX/Ozemnnx62P4Yaj10ul3n55ZdDtpOvjd55552w43wkfTRUO915551Gkn++SldPP/20+eCDD8y2bdvMM888Y3Jzc831118fsp327dtnzjnnHDNq1Cjzj3/8I+RncSR9tGs7/eY3vzGzZ882+fn55tlnn41o2ybU+BTYTj/72c9MRUWFueiii0KOxaH66DnnnGMkmV/84hcht5d87ZSRkRHxZ5xve+G//uu//PXWr19v8vLyzNVXXx3RuGdM9zEqIyPDPPnkk2bDhg3+vw0dOtRcfPHFZt++fWbDhg1m4cKF5tlnnw1bs2sfDeWb3/ymGThwoFmwYIHZtGmT/7Om617PRJAUAccY70TD8vJy43Q6zcSJE7udHq83//rXv8xpp51mXC6XGT16tHniiSd6XL7rAO7bTdj156abbvJ3glA/ixcv9tfYsmWLufrqq01RUZFJS0szQ4cODVvTGO8kzLKyMuNwOMzgwYPNPffcE/QhHW6dQv3MmTPHGOM99nLGjBmmsLDQX/emm24ye/bs6fYaPPjgg6asrMzYbDbjcrmMw+EwhYWF5pJLLvEHkUife3Nzs7njjjtMXl6eSU1NNYMGDTJlZWXG6XR2q2mMt3PffPPNprS01KSkpJhRo0aZhx9+2D85PpRoBJyu7WSz2fwnQigtLTVXX3110NyjOXPmhHzu9957b69t5HA4QtY0xpjHH3/cpKammpqamrDr7muftLQ0c84555h33nnnhN/nxnRvq6lTpxpJZvPmzd3u39HRYe69914zYMAA43K5zPnnn2/WrVvX42P6Xp9wNY0x5qmnnvLPgZkwYULQYWzGdO9LvlOZDh482KSkpJihQ4eaH//4x/7+0tzcbD796U+b0tJS43Q6TUlJibnyyiuDJnT31FYul6tbTWN676M+gW01YsQI/3oMGDDAfOMb3+jWzr09/wULFvQ4dvTWLn0ZO3w1fYfiFBQUhG3rSMe40tJSk5eXZ1JSUnrsP3v27DHnn3++ycvLM06n0wwbNsxcffXVEa97uPHI9/7r7WfcuHEmPz//uMb38ePHmx/+8Ich72e3201GRoYZNGiQ/yQDod6TofTWTpEEnK59/Oyzz+6xnTIzM83ZZ59t5s+fH7amMcb88Ic/NGVlZaa9vb1P77FQn0OVlZVm1qxZpqioyDgcDlNWVmYuueSSsO1UVFRkMjMzzZgxY/zjQKi+E+lzHzp0qMnMzPQ/96FDh4ataUz38dgX6kO1k6+N7rnnnrDjfF9ev8B2qqioMC6XK+xnx913322Ki4uNw+EwI0aM8G+QR/IT6rO4L33U106+Ez/Z7fYT3rbxtZPL5TJpaWk9jsVd+2i4mr7tJV87fe1rX4v4My5czf/8z/80M2bMiGjcMybyMaq3n8CaxgT30VDcbrf57ne/6+9P06dP7/ELl3iyGGOMAAAAACAJnPJzcAAAAADAh4ADAAAAIGkQcAAAAAAkDQIOAAAAgKRBwAEAAACQNAg4AAAAAJIGAQcAAABA0iDgAAAAAEgaBBwAAAAASYOAAwAAACBpEHAAAAAAJI3/DzsJgAk5iA49AAAAAElFTkSuQmCC\n", - "text/plain": [ - "<Figure size 800x400 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot as plt\n", - "%matplotlib inline\n", - "import math\n", - "\n", - "def draw(r, data):\n", - " l = len(r)\n", - " x = [x for x in range(l)]\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " ax.axhline(y=0.5, color='black', linestyle='--')\n", - " ax.set_xticks(range(0, l, 64))\n", - " ax.set_yticks(range(-l*2, l*2+1, 128))\n", - " ax.grid()\n", - " ax.plot(x, r)\n", - " ax.plot(x, data)\n", - "\n", - "pulse_delay = 100\n", - "pulse_duration = 100\n", - "total_duration = 2000\n", - "data = [0.0]*pulse_delay\n", - "data += [-1.0]*pulse_duration\n", - "data += [0.0]*pulse_delay\n", - "data += [1.0]*pulse_duration\n", - "data += [0.0]*(total_duration-pulse_delay-pulse_duration)\n", - "\n", - "\n", - "\n", - "def process(data):\n", - " attack = pow(0.01, 1.0 / (20.1 * 48000 * 0.001))\n", - " decay = pow(0.01, 1.0 / (100.0 * 48000 * 0.001))\n", - " value = 0.0\n", - " output = []\n", - " for in_ in data:\n", - " abs_value = abs(in_)\n", - " if abs_value > value:\n", - " value = attack * (value - abs_value) + abs_value\n", - " else:\n", - " value = decay * (value - abs_value) + abs_value\n", - " output.append(value)\n", - " return output\n", - "\n", - "env = process(data)\n", - "draw(env, data)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "50316437-021e-49b4-bda9-7663854444da", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Min: 0.0\n", - "Max: 1.0\n" - ] - }, - { - "data": { - "image/png": "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cWQfHepjRG9tu+v37XUHg8GjOp4c6zGiIys+R3T1fbfMUaqpqTGSur3NnTs3pr3P5+u27cyZM2Pa5ubmdtv2tNNOi2lbUlLSbdsTTzwxpu2JJ57YbduSkpKYtqeddpqRZJJHTzUld79sRn3rOeP0+o0kk5ubG9N25syZ3T6vz+eLaTt37twef28dfe5zn+uxbX19fbTtjTfe2GPb8vLyaNtbb721x7Y7duyItv3Od77TY9v/+q//MsFg0BhjzP33399j2xUrVkSf9+GHH+6x7dKlS6Nt58+f32Pbl19+Odp2wYIFPbZ99tlnjTHGBINB893vfrfHtgsWLIg+78svv9xj2/nz50fbLl26tMe2Dz/8cLTtihUremx7//33R9tu2LChx7bf+c53om137NjRY9tbb7012ra8vLzHtjfeeGO0bX19fY9tP/e5z8Xswz21jbdjRF5eXnRfN+bwMaKr23A5RlRVVZnnn3/eBINBy44RGzZsiLbtzzHiwQcf7LHtYB8jjDHm2Wef7bEtx4jIbTgcI84///zovm7M8Poc0dWt/RgRDAbN888/b84///xu29r9c8TRHiOs/hxhjHXHiAcffDDaNlGPETU1NaYnTFHrRdppV0mSGja8oXCgj6kRAAAAgCUcbemo32pra5WRkaGysjKlp6d3ut+KKWqvv/665syZM2BT1HZWNGjufy+XkfTyv87Q2NzD9w/0FLX22uNtitrSpUt1xRVXyO12x9UUtVAopJdeekkXXXRRXE5RO3Jf765td6yaotax7niborZ48WJ95jOfif7O42WK2quvvqq5c+cqHA7H1RS1hoYGvfzyy532867aDscpakf20XiZotZedzxOUVu6dKnmzp0rt9sdN1PUQqGQFi1apAsvvLDL6f4d27YbTlPUunovkuJjilrH2uNpitrrr7+uK664Ivr/nGhT1Gpra1VUVKSampou80f0Z3Z7Tx/5/f6YztRTu/48Z1+1H0xCoZCSk5Pl9/u7/cDa8cDTm5SUFP1t7Q4ZSTMn5GlKSV6Pbfuq439au46199a2O16vN7rzDGRbj8cT3dmPFAqFogel3tr253mP5Ha7u/0/PZa2Lperx/2lo6SkpOgBra/PO9BtnU5n9A2xt329vW1fOByOQWkrxfbl3uoe7GPEsbQNhUKd+kx/+v2xHiOOtm3HN38rjhHH2ra3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AAAA2AYBBwAAAIBtEHAAAAAA2AYBBwAAAIBt2Cbg/PrXv9bYsWOVnJys6dOn6+2337a6pE5KS0t1/fXXKycnRz6fTyeffLI+/PDDLtt+/etfl8Ph0C9/+cuhLVLSW2+9pSuvvFJFRUVyOBx6/vnno/eFQiHdfffdOumkk+T3+1VUVKSvfOUrKisri3mO/fv364YbblBhYaH8fr9OPfVUPffcc5bVLUkHDhzQTTfdpKKiIvl8Pl166aXasmVL9P7Kykrdcccdmjhxonw+n0aPHq1vfvObqqmpGdS6H3zwQZ1++ulKS0tTfn6+rr76am3atCmmzU033SSHwxFzO/PMMzs91/vvv6+LLrpIfr9fmZmZuuCCC9TU1DRotf/mN7/R1KlTo1dVPuuss/Tqq69K6vu+EggEdMcddyg3N1d+v19XXXWV9u7dO2g196V2Saqvr9ftt9+u4uJipaSk6IQTTtBvfvObLp/LGKPLLrusy/1usD344INyOBy66667ury/u2OJFX30gQce6LQfFxYWRu9fuHCh5syZo9zcXDkcDq1duzbm8Vb10d7qPvK+9tvPfvazmOcZ6v7ZbiDee6zop2PGjOny93rbbbdJivS7Bx54QEVFRUpJSdEFF1ygjz/+uMvnGso+2lvdkrRx40ZdddVVysjIUFpams4880zt3r07er8V/VOSWlpadN9992ns2LFKSUnRuHHj9MMf/lDhcDja5oEHHtCkSZPk9/uVlZWlWbNmafny5dH7reinfam7t88A7azop3V1dbrrrrtUUlKilJQUnX322Vq5cmVMm972GaveS4crWwScZ555RnfddZe+//3va82aNTrvvPN02WWXxfzHW62qqkrnnHOO3G63Xn31VX3yySd65JFHlJmZ2ant888/r+XLl6uoqGjoC5XU0NCgadOmaf78+Z3ua2xs1OrVq/WDH/xAq1ev1sKFC7V582ZdddVVMe1uuOEGbdq0SS+++KLWr1+va665Rl/4whe0Zs0aS+o2xujqq6/W9u3b9cILL2jNmjUqKSnRrFmz1NDQIEkqKytTWVmZfv7zn2v9+vX605/+pNdee0233HLLoNUsSW+++aZuu+02ffDBB1qyZIlaWlo0e/bsaF3tLr30Uu3bty96W7RoUcz977//vi699FLNnj1bK1as0MqVK3X77bfL6Ry8bl5cXKyHHnpI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k07tXnrpJeP3+43D4TBFRUVmxYoV3T7nUPTT3uruy2cAK/vpWWedZWbOnGlKS0tNS0uLeeKJJ4zD4TATJkzo0z4zHProcGObgPPee+/FbP+P//gPM3HiRIuq6sztdpuzzjorZtsdd9xhzjzzTGOMMatWrTIFBQUxB+vhHnCCwaCZN2+eOeWUU0xNTU3MfbfffruZMWOGeeONN8zatWvNAw88YDIyMsy6deuGoOqu6161apWZNm2akWRcLpeZM2eOueyyy8xll13W6fE1NTXmjDPOMJdeeqkJBoNDUrMxxtx6662mpKTE7Nmzp8d2ZWVlxu12m//93/81xhx+s7/33ntj2p100kmDPlUzEAiYLVu2mJUrV5p77rnH5Obmmo8//jimTXf7SncH5VmzZpmvf/3rg1p3b7X/7Gc/MxMmTDAvvvii+eijj8yvfvUrk5qaapYsWWKMMeaFF14w48ePN3V1ddHnG4oPT7t37zb5+flm7dq10W0dA05fjyVW91FjjKmvrzcFBQXmkUceidnel4BjVR81pvu6jTFm4sSJ5vbbb4/ZZmX/HIj3Hqv7qTHGzJ4921xxxRXR79t/p2VlZTHtvvrVr5o5c+YYY6zrox0dWXf7Z5brrrsupt2VV15pvvjFL0a/t6p/PvXUU6a4uNg89dRTZt26debPf/6zyc7ONn/6059i2tXX15stW7aY999/39x8881mzJgx5sCBA52eb6j6aV/q7u0zgJX9dOvWreb888+P1nb66aebL3/5y+aEE07o0z4zHProcBP3AScQCBiXy2UWLlwYs/2b3/ymOf/88y2qqrPRo0fH/BXJGGN+/etfm6KiImOMMY8++qhxOBzG5XJFb5KM0+k0JSUlFlQc0d2bQTAYNFdffbWZOnVqp79ibt26tdNcV2OMufjii4eso/X0JlZdXW3Ky8uNMZHzt2699daY+2tra81ZZ51lLr744pi/wg6222+/3RQXF5vt27f3qf348eOj88+3b99uJJknnngips21115rvvSlLw14rT25+OKLY/5i1NO+8o9//MNIMpWVlTHbp06dav793/99SOrtqL32xsZG43a7O82JvuWWW6Ifnu68885u++zMmTMHrca///3v0TfBjj+3vZaf//znvR5LhkMfbTdr1qxO51D2FnCs6qMddVX3W2+9ZSTFhE9jrO2fA/HeY3U/3blzp3E6neb555+Pbtu2bZuRZFavXh3T9qqrrjJf+cpXjDHW9dGe6g4EAiYpKcn86Ec/imn7ve99z5x99tnGGGv7Z3FxsZk/f37Mth/96Ee9/sF4/PjxnUZ6hrKf9qfu7j4DDIf30fr6+mhov/baa83cuXP7tM9Y3UeHo7g/B8fj8Wj69OnRVUraLVmyRGeffbZFVXV2zjnndFr6d/PmzSopKZEUWTFl3bp1Wrt2bfRWVFSk7373u3r99detKLlboVBI1157rbZs2aI33nhDOTk5Mfc3NjZKUqdVR1wuV8ySjVbJyMhQXl6etmzZolWrVmnevHnR+2prazV79mx5PB69+OKLnebEDgZjjG6//XYtXLhQ//znPzV27NheH3Po0CHt2bNHI0aMkBRZlrSoqKjHfWyoGGOi851721emT58ut9sd03/37dunDRs2WNJ/22sPhUIKhUI97sP33HNPpz4rSY8++qgWLFgwaDVefPHFWr9+fczPPe200/TlL39Za9eu1U033dTrsWS49NFAIKCNGzdG9+O+sKKPHqm7uv/whz9o+vTpnc5FsLJ/DsR7j9X9dMGCBcrPz9fll18e3TZ27FgVFhbG1BQMBvXmm29Ga7Kqj/ZUt8fj0emnn97j/4mV/bOxsfGofm7H47409P20P3V39xlgOLyP+v1+jRgxQlVVVXr99dc1b968Pu0zVvfRYcnafDUwnn76aeN2u80f/vAH88knn5i77rrL+P1+s3PnTqtLi1qxYoVJSkoyP/7xj82WLVvMX/7yF+Pz+cyTTz7Z7WOsmqJWV1dn1qxZY9asWWMkRed87tq1y4RCIXPVVVeZ4uJis3btWrNv377oLRAIGGMif7EfP368Oe+888zy5cvN1q1bo39V7u78jMGu25jIKi5Lly4127ZtM88//7wpKSkx11xzTfTxtbW15owzzjAnnXSS2bp1a8xra2lpGbS6//Vf/9VkZGSYZcuWxfzMxsbG6Ov69re/bd577z2zY8cOs3TpUnPWWWeZkSNHmtra2ujzPProoyY9Pd387W9/M1u2bDH33XefSU5ONlu3bh202u+9917z1ltvmR07dph169aZf/u3fzNOp9MsXry4T/uKMcZ84xvfMMXFxeaNN94wq1evNhdddJGZNm3aoP7Oe6vdmMi0r8mTJ5ulS5ea7du3mwULFpjk5GTz61//utvnlAUrNBnT+RycIx15LLGqj3772982y5YtM9u3bzcffPCBueKKK0xaWlr0WH3o0CGzZs0a88orrxhJ5umnnzZr1qwx+/btM8ZY10d7q9uYyFQcn89nfvOb33T5HFb0T2MG7r3Hqn7a2tpqRo8ebe6+++5O9z300EMmIyPDLFy40Kxfv95cd911ZsSIETHHxSMNVR/tqe6FCxcat9ttHn/8cbNlyxbzq1/9yrhcLvP2228bY6zrn8ZEVuwcOXKkefnll82OHTvMwoULTW5urvne975njImMMNx7773m/fffNzt37jQffvihueWWW4zX642OOFnRT3ur25jePwMYY10/fe2118yrr75qtm/fbhYvXmymTZtmZsyYEZ3W19s+Y4x1fXS4skXAMcaY//7v/zYlJSXG4/GYU089NWaJ3eHipZdeMlOmTDFer9dMmjTJPP744z22tyrgLF261EjqdLvxxhujU0e6ui1dujT6HJs3bzbXXHONyc/PNz6fz0ydOrXTCdpDWbcxxvznf/6nKS4uNm6324wePdrcd999MR+0u3u8JLNjx45Bq7u7n7lgwQJjTGQJydmzZ5u8vLxo7TfeeKPZvXt3p+d68MEHTXFxsfH5fOass86KOfgNhptvvjna7/Ly8szFF18cDQh93VeamprM7bffbrKzs01KSoq54oorunxtQ1m7MZGTgW+66SZTVFRkkpOTzcSJE80jjzwSPRG7K/EScIyxpo9+4QtfMCNGjDBut9sUFRWZa665JuZ8rQULFnS5v9x///3GGOv6aG91G2PMb3/7W5OSkmKqq6u7fZ6h7p/tBuK9x6p++vrrrxtJZtOmTZ3uC4fD5v777zeFhYXG6/Wa888/36xfv77H5xuqPtpT3cYY84c//MGMHz/eJCcnm2nTpsVMYzPGmv5pTCSc3HnnnWb06NEmOTnZjBs3znz/+9+Pvlc2NTWZz3zmM6aoqMh4PB4zYsQIc9VVV8UsMmBFP+2tbmN6/wzQzop++swzz5hx48YZj8djCgsLzW233dbpWNLbPmNVHx2uHMYYMzBjQQAAAABgrbg/BwcAAAAA2hFwAAAAANgGAQcAAACAbRBwAAAAANgGAQcAAACAbRBwAAAAANgGAQcAAACAbRBwAAAAANgGAQcAAACAbRBwAAAAANgGAQcAAACAbfx/yETS1oDs3Z0AAAAASUVORK5CYII=\n", - "text/plain": [ - "<Figure size 800x400 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot as plt\n", - "%matplotlib inline\n", - "import math\n", - "\n", - "def draw(r):\n", - " l = len(r)\n", - " x = [x for x in range(l)]\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " ax.axhline(y=0.5, color='black', linestyle='--')\n", - " ax.set_xticks(range(0, l, 64))\n", - " ax.set_yticks(range(-l*2, l*2+1, 128))\n", - " ax.grid()\n", - " ax.plot(x, r)\n", - " \n", - "\n", - "data = [(3.0 + math.log10(x/1000))/3.0 for x in range(1,1001)]\n", - "\n", - "draw(data)\n", - "print(f'Min: {min(data)}')\n", - "print(f'Max: {max(data)}')" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "d3bbb0dd-b8c3-4563-aec0-f39f1d0766b1", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.0 direct access 0: 0.0\n", - "0.03125 interpolating [0.0] -> [1.0] with f 0.125: 0.125\n", - "0.0625 interpolating [0.0] -> [1.0] with f 0.25: 0.25\n", - "0.09375 interpolating [0.0] -> [1.0] with f 0.375: 0.375\n", - "0.125 interpolating [0.0] -> [1.0] with f 0.5: 0.5\n", - "0.15625 interpolating [0.0] -> [1.0] with f 0.625: 0.625\n", - "0.1875 interpolating [0.0] -> [1.0] with f 0.75: 0.75\n", - "0.21875 interpolating [0.0] -> [1.0] with f 0.875: 0.875\n", - "0.25 direct access 1: 1.0\n", - "0.28125 interpolating [1.0] -> [2.0] with f 0.125: 1.125\n", - "0.3125 interpolating [1.0] -> [2.0] with f 0.25: 1.25\n", - "0.34375 interpolating [1.0] -> [2.0] with f 0.375: 1.375\n", - "0.375 interpolating [1.0] -> [2.0] with f 0.5: 1.5\n", - "0.40625 interpolating [1.0] -> [2.0] with f 0.625: 1.625\n", - "0.4375 interpolating [1.0] -> [2.0] with f 0.75: 1.75\n", - "0.46875 interpolating [1.0] -> [2.0] with f 0.875: 1.875\n", - "0.5 direct access 2: 2.0\n", - "0.53125 interpolating [2.0] -> [3.0] with f 0.125: 2.125\n", - "0.5625 interpolating [2.0] -> [3.0] with f 0.25: 2.25\n", - "0.59375 interpolating [2.0] -> [3.0] with f 0.375: 2.375\n", - "0.625 interpolating [2.0] -> [3.0] with f 0.5: 2.5\n", - "0.65625 interpolating [2.0] -> [3.0] with f 0.625: 2.625\n", - "0.6875 interpolating [2.0] -> [3.0] with f 0.75: 2.75\n", - "0.71875 interpolating [2.0] -> [3.0] with f 0.875: 2.875\n", - "0.75 direct access 3: 3.0\n", - "0.78125 interpolating [3.0] -> [4.0] with f 0.125: 3.125\n", - "0.8125 interpolating [3.0] -> [4.0] with f 0.25: 3.25\n", - "0.84375 interpolating [3.0] -> [4.0] with f 0.375: 3.375\n", - "0.875 interpolating [3.0] -> [4.0] with f 0.5: 3.5\n", - "0.90625 interpolating [3.0] -> [4.0] with f 0.625: 3.625\n", - "0.9375 interpolating [3.0] -> [4.0] with f 0.75: 3.75\n", - "0.96875 interpolating [3.0] -> [4.0] with f 0.875: 3.875\n", - "1.0 direct access 4: 4.0\n" - ] - } - ], - "source": [ - "import math\n", - "import numpy as np\n", - "\n", - "table = np.array([0.0, 1.0, 2.0, 3.0, 4.0])\n", - "\n", - "def lerp(a, b, f=0.5) -> float:\n", - " f = min(1.0, max(0.0, f))\n", - " if f == 0.0:\n", - " return a\n", - " elif f == 1.0:\n", - " return b\n", - " else:\n", - " return a * (1.0-f) + b * f\n", - "\n", - "def get(table, f):\n", - " f = min(1.0, max(0.0, f))\n", - " pos = (len(table)-1) * f\n", - " pos_frac = pos%1.0\n", - " if pos_frac == 0.0:\n", - " val = table[int(round(pos))]\n", - " print(f\"{f} direct access {int(pos)}: {val}\")\n", - " return val\n", - " a = table[int(math.floor(pos))]\n", - " b = table[int(math.ceil(pos))]\n", - " val = lerp(a, b, pos_frac) \n", - " print(f\"{f} interpolating [{a}] -> [{b}] with f {pos_frac}: {val}\")\n", - " return val\n", - " \n", - " \n", - "for i in range(0, 33):\n", - " get(table, i/32.0)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "cc0b4852-eccb-4bae-859a-bbbf92458ab2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Min: 0.0\n", - "Max: 4094.0\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 800x400 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot as plt\n", - "%matplotlib inline\n", - "import math\n", - "\n", - "def draw(r):\n", - " l = len(r)\n", - " x = [x for x in range(l)]\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " ax.axhline(y=0.5, color='black', linestyle='--')\n", - " ax.set_xticks(range(0, l, 64))\n", - " ax.set_yticks(range(-l*2, l*2+1, 128))\n", - " ax.grid()\n", - " ax.plot(x, r)\n", - " \n", - "def deadband(x, deadband = 200):\n", - " span = 4096\n", - " half = span/2\n", - " half_span = half-deadband\n", - " scaler = half/half_span\n", - " \n", - " if x < half:\n", - " x += deadband\n", - " x = (min(half, x)-half) * -scaler\n", - " x = int(x * -1) + half\n", - " else:\n", - " x -= deadband\n", - " x = (max(half, x)-half)*scaler\n", - " x = int(x)+half\n", - " return x\n", - "\n", - "data = [deadband(x) for x in range(0,4096)]\n", - "\n", - "draw(data)\n", - "print(f'Min: {min(data)}')\n", - "print(f'Max: {max(data)}')" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "2e2c2c7f-4bc6-4a1f-b6bd-bf5558b8f03f", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "947364e8d6aa4d1ba675e14ddf866148", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "interactive(children=(FloatSlider(value=0.2, description='f', max=1.0, step=0.001), Output()), _dom_classes=('…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "<function __main__.draw(f)>" - ] - }, - "execution_count": 121, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6112aebb-dc20-45e3-9ca6-280c76523469", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.8.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/circuitsim/lookup-tables.ipynb b/circuitsim/lookup-tables.ipynb deleted file mode 100644 index 8d29c76..0000000 --- a/circuitsim/lookup-tables.ipynb +++ /dev/null @@ -1,971 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "52c8bec3-db2d-4522-b692-b035a71410de", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "zsh:1: parse error near `-m'\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ffe8405ccce2405c84171b7c83e66e65", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 800x400 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot as plt\n", - "%matplotlib inline\n", - "import math\n", - "!{sys.executable} -m pip install clipboard\n", - "%matplotlib inline\n", - "import clipboard\n", - "\n", - "\n", - "def draw(r, g, b):\n", - " x = [x for x in range(256)]\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " ax.axhline(y=0.5, color='black', linestyle='--')\n", - " ax.set_xticks(range(0, 256, 64))\n", - " ax.set_yticks(range(-256*2, 256*2+1, 128))\n", - " ax.grid()\n", - " ax.plot(x, r, 'r')\n", - " ax.plot(x, g, 'g')\n", - " ax.plot(x, b, 'b')\n", - "\n", - "def r():\n", - " start = 100\n", - " start2 = 220\n", - " last_a = 0\n", - " for i in range(256):\n", - " if i < start:\n", - " yield 0\n", - " elif i < start2:\n", - " span = 255-start\n", - " d = (i-start)/span\n", - " last_a = int(d*30.0)\n", - " yield min(255, last_a)\n", - " else:\n", - " span = 255-start2\n", - " d = (i-start2)/span\n", - " d = d*d*d\n", - " yield min(255, last_a + int(d*350.0))\n", - "\n", - "def g():\n", - " start = 0\n", - " end = 180-80\n", - " scale = 0.25\n", - " for i in range(256):\n", - " if i < start:\n", - " yield 0\n", - " elif i > end:\n", - " d = 1.0 - ((i-end)/(295-end))\n", - " # d = (d*d)/4 + d/2\n", - " yield max(0, min(255, int(d*175*scale)))\n", - " else:\n", - " d = ((i-start)/(255-start))\n", - " d = (d*d*d)\n", - " yield min(255, int(d*2800*scale))\n", - " \n", - "def b():\n", - " start = 4\n", - " end = 40\n", - " scale = 0.2\n", - " for i in range(256):\n", - " if i < start:\n", - " yield 0\n", - " elif i > end:\n", - " d = (i-end)/(60)\n", - " d = d*d\n", - " d = 1.0 - d\n", - " # d = math.sqrt(d)\n", - " yield max(0, min(255, int(d*32*scale)))\n", - " else:\n", - " d = (i-start)/(255-start)\n", - " d = math.sqrt(d)/2 + d/2\n", - " yield max(0, min(255, int(d*107*scale)))\n", - "r, g, b = list(r()), list(g()), list(b())\n", - "draw(r, g, b)\n", - "\n", - "text = \"\"\n", - "text += \"// Lookup Table for Red LED Channel\\n\"\n", - "text += f\"int red_lookup[] = {{{', '.join(str(v) for v in r)}}};\\n\\n\"\n", - "text += \"// Lookup Table for Green LED Channel\\n\"\n", - "text += f\"int green_lookup[] = {{{', '.join(str(v) for v in g)}}};\\n\\n\"\n", - "text += \"// Lookup Table for Blue LED Channel\\n\"\n", - "text += f\"int blue_lookup[] = {{{', '.join(str(v) for v in b)}}};\\n\\n\"\n", - "\n", - "import ipywidgets as widgets\n", - "from IPython.display import display, HTML, Javascript\n", - "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", - "\n", - "def mybtn_event_handler(b):\n", - " print(\"copied\")\n", - " clipboard.copy(text)\n", - "\n", - "mybtn.on_click(mybtn_event_handler)\n", - "\n", - "display(mybtn)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "41562cc6-9911-4fb1-87ec-f2b3c8bfb3c2", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "eddca77aa50c47da8c24ed47bc863c0c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "16" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAG7CAYAAAAPNzDdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDFElEQVR4nO3de5RVhX33//c5c5/DDOAwzAjIVWAumMWSYAwJIRpEHRDyrJI+yWpt9GnyPNWY2NoQW82PYWg0S02aNNWYJnmiba416WpALlGM4oXUYoI+hbnh2MERuYzDZe63c87+/YFOYiIoCLNnznm/1mK5ha/4WTrsOZ9zvnvvSBAEAZIkSZKUAqJhB5AkSZKks8WCI0mSJCllWHAkSZIkpQwLjiRJkqSUYcGRJEmSlDIsOJIkSZJShgVHkiRJUsrIPNN/MJlMcuDAAQoKCohEImczkyRJkiS9SRAEdHZ2MmnSJKLRk39Oc8YF58CBA1xwwQVn+o9LkiRJ0ml75ZVXmDJlykl//YwLTkFBwdC/oLCw8Ex/m7NmcHCQRx99lGXLlpGVlRV2HElSCLq7u5k0aRJw4o24WCwWciJJ0tnS0dHBBRdcMNRDTuaMC84ba2mFhYUjpuDk5+dTWFhowZGkNJWbm0t1dTUARUVFZGdnh5xIknS2vd3lMWdccCRJGmmys7NZt25d2DEkSSHyLmqSJEmSUoaf4EiSUkYymaS+vh6A8vLyU95lR5KUmiw4kqSU0dvby7x58wDo6uryJgOSlIZ8a0uSJElSyrDgSJIkSUoZFhxJkiRJKcOCI0mSJCllWHAkSZIkpQwLjiRJkqSU4W2iJUkpIysri89//vNDx5Kk9GPBkSSljOzsbO65556wY0iSQuSKmiRJkqSU4Sc4kqSUkUwmaWlpAWDq1KlEo76PJ0npxjO/JCll9Pb2MmPGDGbMmEFvb2/YcSRp1Ko/2MGffPdZmlo7w45y2iw4kiRJkgBo7x1k3cZaVvzjM+xoOsKXtzSEHem0uaImSZIkpblkMuBnu/Zz19YGjnQPAFB1USm3L68IOdnps+BIkiRJaWz3/nbWbtzD8y3HAZhVHKNm5Tw+OHtCuMHOkAVHkiRJSkPHugf4yqON/GhnC0EAsewMbl46m+sWzSA7c/ReyWLBkSRJktJIIhnwk+dauOeRRo73DAKwav4kbqsqp6QwN+R0754FR5IkSUoTu1qOUb2hlt2vtgNQVlpAzcpK3jezKORkZ48FR5KUMjIzM7nxxhuHjiVJJ7R19XP3Lxp46Nf7ASjIyeSWZXO49tJpZGaM3nW0t+LZX5KUMnJycrjvvvvCjiFJI0Y8keSH/9nCVx9tpKMvDsDqBVO49aoyigtyQk53blhwJEmSpBS0s/koazfsoeHQiYd1zptcSM3KeSyYNj7kZOeWBUeSlDKCIKCtrQ2ACRMmEIlEQk4kScOvtaOPO7fU8/MXDgAwNi+LNVfO5ROXTCUjmvrnRQuOJCll9PT0MHHiRAC6urqIxWIhJ5Kk4TOYSPLgjn18/bG9dA8kiETg4wunsubKuZwXyw473rCx4EiSJEmj3I6mNqo31tLU2gXA/AvGsX5VJe+ZMi7cYCGw4EiSJEmj1IHjvdyxuZ7Nuw8CcF4sm7+5qozVC6YQTYN1tLdiwZEkSZJGmf54gu8+3cy9jzfRO5ggGoFrL53GLVfMZWx+VtjxQmXBkSRJkkaR7Y2t1DxcR3NbNwALp4+nZuU8KiYVhpxsZLDgSJIkSaPAK0d7WL+pjm11hwEoLsjhtqoyPjp/sneN/B0WHEmSJGkE6xtM8K0nX+L+7S/RH0+SGY1w/Qem87mPzKYgN73X0d6KBUeSlDIyMzP55Cc/OXQsSaNZEAQ8Vt/K+k21vHK0F4BFs4qoWVnJ7JKCkNONXJ79JUkpIycnhwcffDDsGJL0rjW3dVPzcC3bG18D4PyxuXxxeQVVF5W6jvY2LDiSJEnSCNEzEOe+J5r4zlPNDCSSZGVE+PTimXzmsguJ5fjS/Z3wv5IkKWUEQUBPTw8A+fn5vsspadQIgoCtew7xpU11HGjvA+BDc4pZd00FM4vHhJxudLHgSJJSRk9PD2PGnHgh0NXVRSwWCzmRJL29ptZO1m2s45mmNgCmjM9j7YoKrqgo8Y2aM2DBkSRJkkLQ1R/nG798ke8900w8GZCdGeWGJbO44cOzyM3KCDveqGXBkSRJkoZREARs/H8HuGNzPa2d/QAsLS9h7YoKphblh5xu9LPgSJIkScOk4VAHazfUsrP5KADTivJZd00ll5VNDDlZ6rDgSJIkSedYe+8gX9u2l+8/+zKJZEBuVpTPXj6bP//gDNfRzjILjiRJknSOJJMB/7ZrP3f9ooG2rgEAqi4q5fblFUwelxdyutRkwZEkSZLOgT2vtrN2wx52tRwHYFZxjHUrK1k8uzjcYCnOgiNJShkZGRmsXr166FiSwnC8Z4B7HmnkRztbCAKIZWdw89LZXLdoBtmZ0bDjpTwLjiQpZeTm5vLTn/407BiS0lQiGfCvz73CPY80cKxnEIBV8yfxt1eXUzo2N+R06cOCI0mSJL1Lu1qOUb2hlt2vtgMwt6SAmlWVXDqzKORk6ceCI0mSJJ2htq5+7v5FAw/9ej8ABTmZ3LJsDtdeOo3MDNfRwmDBkSSljO7ubsaMGQNAV1cXsVgs5ESSUlU8keSH/9nCVx9tpKMvDsDqBVO49aoyigtyQk6X3iw4kiRJ0mnY2XyUtRv20HCoE4DKSYWsX1XJgmnnhZxMYMGRJEmS3pHWjj6+vLWBf3/+VQDG5mWx5sq5fOKSqWREIyGn0xssOJIkSdIpDCaS/POv9vH1x16kqz9OJAIfXziVNVfO5bxYdtjx9HssOJIkSdJJ/KqpjbUba2lq7QJg/gXjWL+qkvdMGRduMJ2UBUeSJEn6PQeO93LHlno2/9dBAM6LZfM3V5WxesEUoq6jjWgWHEmSJOl1/fEE//eZZv7xl030DiaIRuDaS6dxyxVzGZufFXY8vQMWHElSysjIyKCqqmroWJJOx/bGVmoerqO5rRuAhdPHU7NyHhWTCkNOptNhwZEkpYzc3Fw2b94cdgxJo8wrR3v4u011PFp3GIDighxuqyrjo/MnE4m4jjbaWHAkSZKUlvoGE/zTk//NN7c30R9PkhGNcP2i6dy8dDYFua6jjVYWHEmSJKWVIAh4rL6V9ZtqeeVoLwDvn1lEzapK5pQUhJxO75YFR5KUMrq7u5k4cSIAra2txGKxkBNJGmma27qpebiW7Y2vAVBamMsXV5Sz/KLzXUdLERYcSVJK6enpCTuCpBGoZyDOfU808Z2nmhlIJMnKiPCpxTO56bILieX4kjiV+H9TkiRJKSsIArbuOcSXNtVxoL0PgA/NKWbdNRXMLB4TcjqdCxYcSZIkpaSm1k7WbazjmaY2ACaPy2PtNRUsqyhxHS2FWXAkSZKUUrr643zjly/yvWeaiScDsjOj3LBkFjd8eBa5WT4jK9VZcCRJkpQSgiBg4/87wB2b62nt7AdgaXkJa1dUMLUoP+R0Gi4WHEmSJI16DYc6WLuhlp3NRwGYVpTPumsquaxsYsjJNNwsOJKklBGNRlmyZMnQsaTU1947yNe27eX7z75MIhmQmxXls5fP5s8/OMN1tDRlwZEkpYy8vDy2b98edgxJwyCZDPi3Xfu56xcNtHUNAFB1USm3L69g8ri8kNMpTBYcSZIkjSp7Xm1n7YY97Go5DsCs4hjrVlayeHZxuME0IlhwJEmSNCoc6x7gK4828qOdLQQBxLIzuHnpbK5bNIPsTNdSdYIFR5KUMrq7u5k+fToA+/btIxaLhRtI0lmRSAb85LkW7nmkkeM9gwCsmj+Jv726nNKxuSGn00hjwZEkpZS2trawI0g6i3a1HKN6Qy27X20HYG5JATWrKrl0ZlHIyTRSWXAkSZI04rR19XP3Lxp46Nf7ASjIyeSWZXO49tJpZGa4jqaTs+BIkiRpxIgnkvzwP1v46qONdPTFAVi9YAq3XlVGcUFOyOk0GlhwJEmSNCLsbD7K2g17aDjUCcC8yYXUrJzHgmnjQ06m0cSCI0mSpFC1dvTx5a0N/PvzrwIwNi+LNVfO5ROXTCUjGgk5nUYbC44kSZJCMZhI8s+/2sfXH3uRrv44kQh8fOFU1lw5l/Ni2WHH0yhlwZEkpYxoNMp73/veoWNJI9evmtpYu7GWptYuAOZfMI71qyp5z5Rx4QbTqGfBkSSljLy8PJ577rmwY0g6hQPHe7ljSz2b/+sgAOfFsvmbq8pYvWAKUdfRdBZYcCRJknTO9ccT/N9nmvnHXzbRO5ggGoFrL53GLVfMZWx+VtjxlEIsOJIkSTqntje2UvNwHc1t3QAsnD6empXzqJhUGHIypSILjiQpZfT09FBRUQFAXV0d+fn5ISeS0tsrR3tYv6mObXWHASguyOG2qjI+On8ykYjraDo3LDiSpJQRBAEvv/zy0LGkcPQNJvjWky9x//aX6I8nyYxGuP4D0/ncR2ZTkOs6ms4tC44kSZLOiiAIeKy+lfWbannlaC8Ai2YVUbOyktklBSGnU7qw4EiSJOlda27rpubhWrY3vgbA+WNz+eLyCqouKnUdTcPKgiNJkqQz1jMQ574nmvjOU80MJJJkZUT49OKZfOayC4nl+FJTw8+vOkmSJJ22IAjYuucQX9pUx4H2PgA+NKeYdddUMLN4TMjplM4sOJIkSTotTa2drNtYxzNNbQBMGZ/H2hUVXFFR4jqaQmfBkSSljEgkMnSbaF9kSWdfV3+cb/zyRb73TDPxZEB2ZpQblszihg/PIjcrI+x4EmDBkSSlkPz8fGpra8OOIaWcIAjY+P8OcMfmelo7+wFYWl7C2hUVTC3yeVMaWSw4kiRJOqmGQx2s3VDLzuajAEwvyqf6mkouK5sYcjLprVlwJEmS9Afaewf52ra9fP/Zl0kkA3Kzonz28tl8avEMcjJdR9PIZcGRJKWMnp4eFi5cCMBzzz1Hfr6rM9LpSiYD/m3Xfu76RQNtXQMAVF1Uyu3LK5g8Li/kdNLbs+BIklJGEATU1dUNHUs6Pbv3t7N24x6ebzkOwKziGDUr5/HB2RPCDSadBguOJElSmjvWPcBXHm3kRztbCAKIZWdw89LZXLdoBtmZ0bDjSafFgiNJkpSmEsmAnzzXwj2PNHK8ZxCAVfMncVtVOSWFuSGnk86MBUeSJCkN7Wo5RvWGWna/2g5AWWkBNSsred/MopCTSe+OBUeSJCmNtHX1c/cvGnjo1/sBKMjJ5JZlc7j20mlkZriOptHPgiNJkpQG4okkP/zPFr76aCMdfXEAVi+Ywq1XlVFckBNyOunsseBIklJGJBJh2rRpQ8eSTtjZfJS1G/bQcKgTgHmTC6lZOY8F08aHnEw6+yw4kqSUkZ+fz759+8KOIY0YrR19fHlrA//+/KsAjMvPYs2Vc/n4wqlkRH0TQKnJgiNJkpRiBhNJ/vlX+/j6Yy/S1R8nEoFPXDKVNcvmMj6WHXY86Zyy4EiSJKWQXzW1Ub2xlhdbuwCYf8E41q+q5D1TxoUbTBomFhxJUsro7e3lQx/6EABPPfUUeXl5ISeShs+B473csaWezf91EICiWDa3XlXG6gVTiLqOpjRiwZEkpYxkMsmvf/3roWMpHfTHE3z36WbufbyJ3sEE0Qj82fun81dL5zA2PyvseNKws+BIkiSNUtsbW6l5uI7mtm4AFk4fT83KeVRMKgw5mRQeC44kSdIo88rRHtZvqmNb3WEAigtyuL2qnFXzJ3mLdKU9C44kSdIo0TeY4FtPvsT921+iP54kMxrh+g9M53MfmU1BrutoElhwJEmSRrwgCHisvpX1m2p55WgvAItmFVGzspLZJQUhp5NGFguOJEnSCNbc1k3Nw7Vsb3wNgPPH5vLF5RVUXVTqOpr0Fiw4kqSUMmHChLAjSGdFz0Cc+55o4jtPNTOQSJKVEeHTi2dy0+UXkp/tSzjpZPzTIUlKGbFYjNdeey3sGNK7EgQBW/cc4kub6jjQ3gfAkjnFVF9TwcziMSGnk0Y+C44kSdII0dTaSfXGWnY0HQFgyvg81q6o4IqKEtfRpHfIgiNJkhSyrv443/jli3zvmWbiyYDszCg3LJnFDR+eRW5WRtjxpFHFgiNJShm9vb1cffXVAGzdupW8vLyQE0mnFgQBG144wJ1b6mnt7AdgaXkJa1dUMLUoP+R00uhkwZEkpYxkMsmTTz45dCyNZPUHO6jeUMvOfUcBmF6UT/U1lVxWNjHkZNLoZsGRJEkaRu29g3xt216+/+zLJJIBuVlRPnv5bD61eAY5ma6jSe+WBUeSJGkYJJMBP9u1n7u2NnCkewCAqotKuX15BZPHuU4pnS0WHEmSpHNs9/521m7cw/MtxwGYVRyjZuU8Pjjb5zZJZ5sFR5Ik6Rw51j3AVx5t5Ec7WwgCiGVncPPS2Vy3aAbZmdGw40kpyYIjSZJ0liWSAT95roV7HmnkeM8gAB+dP4m/rSqnpDA35HRSarPgSJJSSn6+t9ZVuHa1HKN6Qy27X20HoKy0gJqVlbxvZlHIyaT0YMGRJKWMWCxGd3d32DGUptq6+rlrawM//c1+AApyM/nrK+bwp5dOIzPDdTRpuFhwJEmS3oV4IskPnn2Zr27bS2dfHICPLZjCF64qo7ggJ+R0Uvqx4EiSJJ2hnc1HWbthDw2HOgGYN7mQ9avmcfHU8SEnk9KXBUeSlDL6+vr4oz/6IwD+7d/+jdxcL+bWudHa0cedW+r5+QsHABiXn8WaK+fy8YVTyYhGQk4npTcLjiQpZSQSCbZs2TJ0LJ1tg4kkD+7Yx9cf20v3QIJIBD5xyVTWLJvL+Fh22PEkYcGRJEl6R3Y0tVG9sZam1i4A5l8wjvWrKnnPlHHhBpP0JhYcSZKkUzhwvJc7NtezefdBAIpi2dx6dRmrL55C1HU0acSx4EiSJL2F/niC7z7dzL2PN9E7mCAagT97/3T+aukcxuZnhR1P0klYcCRJkn7PE42t1GysZd+RHgAWTh9Pzcp5VEwqDDmZpLdjwZEkSXrdK0d7WL+pjm11hwEoLsjh9qpyVs2fRCTiOpo0GlhwJElS2usbTHD/9pf41pMv0R9PkhmNcN2i6dy8dDYFua6jSaOJBUeSlDJisRhBEIQdQ6NIEARsqzvM+k117D/WC8CiWUXUrKxkdklByOkknQkLjiRJSkvNbd3UPFzL9sbXADh/bC5fXF5B1UWlrqNJo5gFR5IkpZWegTj3PdHEd55qZiCRJCsjwqcXz+Smyy8kP9uXRtJo559iSVLK6Ovr49prrwXg+9//Prm5uSEn0kgSBAFbdh/iS5vrONjeB8CSOcVUX1PBzOIxIaeTdLZYcCRJKSORSPCzn/0MgAcffDDcMBpRmlo7qd5Yy46mIwBMGZ/H2hUVXFFR4jqalGIsOJIkKWV19g3yjV++yAM79hFPBmRnRrlhySxu+PAscrMywo4n6Ryw4EiSpJQTBAEbXjjAnVvqae3sB2BpeQlrV1QwtSg/5HSSziULjiRJSin1Bzuo3lDLzn1HAZhelE/1NZVcVjYx5GSShoMFR5IkpYT23kG+tm0v//If+0gGkJsV5bOXz+ZTi2eQk+k6mpQuLDiSJGlUSyYDfrZrP3dtbeBI9wAAVReVcvvyCiaPyws5naThZsGRJEmj1u797azduIfnW44DMKs4Rs3KeXxw9oRwg0kKjQVHkpQy8vPz6erqGjpW6jrWPcA9jzby450tBAHEsjO4eelsrls0g+zMaNjxJIXIgiNJShmRSIRYLBZ2DJ1DiWTAT55r4Z5HGjneMwjAqvmTuK2qnJJCH+wqyYIjSZJGiV0tx6jeUMvuV9sBKCstoGZlJe+bWRRyMkkjiQVHkpQy+vv7+T//5/8A8E//9E/k5OSEnEhnQ1tXP3dtbeCnv9kPQEFOJrcsm8O1l04jM8N1NElvZsGRJKWMeDzOP//zPwNw3333WXBGuXgiyQ+efZmvbttLZ18cgNULpnDrVWUUF/j/VtJbs+BIkqQRZ2fzUdZu2EPDoU4A5k0upGblPBZMGx9yMkkjnQVHkiSNGIc7+vjylnp+/sIBAMbmZbHmyrl84pKpZEQjIaeTNBpYcCRJUugGE0ke2NHMPzz2It0DCSIR+PjCqay5ci7nxbLDjidpFLHgSJKkUO1oaqN6Yy1NrSeeYTT/gnGsX1XJe6aMCzeYpFHJgiNJkkJx4Hgvd2yuZ/PugwCcF8vmb64qY/WCKURdR5N0hiw4kiRpWPXHE3z36WbufbyJ3sEE0Qhce+k0brliLmPzs8KOJ2mUs+BIklJGfn4+ra2tQ8caeZ5obKVmYy37jvQAsHD6eGpWzqNiUmHIySSlCguOJCllRCIRiouLw46ht/DK0R7Wb6pjW91hAIoLcritqoyPzp9MJOI6mqSzx4IjSZLOmb7BBPdvf4lvPfkS/fEkGdEI1y+azs1LZ1OQ6zqapLPPgiNJShn9/f3ccsstAPz93/89OTk+7T4sQRCwre4w6zfVsf9YLwDvn1lEzapK5pQUhJxOUiqz4EiSUkY8Hueb3/wmAHfffbcFJyTNbd3UPFzL9sbXACgtzOWLK8pZftH5rqNJOucsOJIk6azoGYhz3xNNfOepZgYSSbIyInxq8UxuuuxCYjm+5JA0PDzbSJKkdyUIArbsPsSXNtdxsL0PgA/NKWbdNRXMLB4TcjpJ6caCI0mSzlhTayfVG2vZ0XQEgMnj8lh7TQXLKkpcR5MUCguOJEk6bV39cb7xyxf53jPNxJMB2ZlRblgyi79YMou87Iyw40lKYxYcSZL0jgVBwIYXDnDnlnpaO/sBWFpewtoVFUwt8uGqksJnwZEkSe9I/cEOqjfUsnPfUQCmFeWz7ppKLiubGHIySfotC44kKWXk5eXR3Nw8dKyzo713kK9t28v3n32ZRDIgNyvKZy+fzZ9/cAa5Wa6jSRpZLDiSpJQRjUaZPn162DFSRjIZ8LNd+7lrawNHugcAqLqolNuXVzB5nAVS0shkwZEkSX9g9/521m7cw/MtxwGYVRxj3cpKFs8uDjeYJL0NC44kKWUMDAxw++23A3DHHXeQnZ0dcqLR51j3APc82siPd7YQBBDLzuDmpbO5btEMsjOjYceTpLdlwZEkpYzBwUG+8pWvALBu3ToLzmlIJAN+8lwL9zzSyPGeQQBWzZ/E315dTunY3JDTSdI7Z8GRJCnN7Wo5RvWGWna/2g7A3JICalZVcunMopCTSdLps+BIkpSm2rr6uWtrAz/9zX4ACnIyuWXZHK69dBqZGa6jSRqdLDiSJKWZeCLJD559ma9u20tnXxyA1QumcOtVZRQX5IScTpLeHQuOJElpZGfzUdZu2EPDoU4AKicVsn5VJQumnRdyMkk6Oyw4kiSlgdaOPu7cUs/PXzgAwNi8LNZcOZdPXDKVjGgk5HSSdPZYcCRJSmGDiSQP7tjH1x/bS/dAgkgEPr5wKmuunMt5Me8yJyn1WHAkSSkjLy+PPXv2DB2nux1NbVRvrKWptQuA+ReMY/2qSt4zZVy4wSTpHLLgSJJSRjQapbKyMuwYoTtwvJc7NtezefdBAM6LZfM3V5WxesEUoq6jSUpxFhxJklJEfzzBd59u5t7Hm+gdTBCNwLWXTuOWK+YyNj8r7HiSNCwsOJKklDEwMMCdd94JwG233UZ2dvpcY7K9sZWah+tobusGYOH08dSsnEfFpMKQk0nS8LLgSJJSxuDgIDU1NQCsWbMmLQrOK0d7WL+pjm11hwEoLsjhtqoyPjp/MpGI62iS0o8FR5KkUahvMMG3nnyJ+7e/RH88SUY0wvWLpnPz0tkU5LqOJil9WXAkSRpFgiDgsfpW1m+q5ZWjvQC8f2YRNasqmVNSEHI6SQqfBUeSpFGiua2bmodr2d74GgClhbl8cUU5yy8633U0SXqdBUeSpBGuZyDOfU808Z2nmhlIJMnKiPCpxTO56bILieX4rVySfpdnRUmSRqggCNi65xBf2lTHgfY+AD40p5h111Qws3hMyOkkaWSy4EiSNAI1tXaybmMdzzS1ATB5XB5rr6lgWUWJ62iSdAoWHElSysjNzWXnzp1Dx6PN8Z4BGg518ljdYR781T7iyYDszCg3LJnFDR+eRW5WRtgRJWnEs+BIklJGRkYGCxcuDDvG2xqIJ/nvti4aD3VSf7CThkMdNBzs5FBH35vmlpaXsHZFBVOL8kNKKkmjjwVHkqRzJAgCDnf0nygwhzppOHjiry+91sVgInjLf2bK+DzKSgv5k/dN5bKyicOcWJJGPwuOJCllDAwM8A//8A8A3HzzzWRnZw/bv7tnIM7ew11DJeaNUnO8Z/At5wtyMik7v4C5pQWUlRZSfn4Bc0oKfEinJL1LFhxJUsoYHBzkC1/4AgA33njjOSk4yWRAy9Ge3/lU5kSZefloD8FbfCiTEY0wY0KMstICys8vZG5JAWXnFzB5XJ43C5Ckc8CCI0nSSbxx0f9vP5XpZO/hTnoGEm85P2FMDuXnF7xeYgopKy3gwoljvDmAJA0jC44kKe29cdF/w8FO6g910Pj6JzO/f9H/G7Izo8wpGUNZ6YkSU1ZayNzSAooLcoY5uSTp91lwJElp442L/n9bYt75Rf9lpSdWy8pKC5lelE9mRnSY00uS3ol3XXC6u7vJyPjDj94zMjLe9AyC7u7uk/4e0WiUvLy8M5rt6ekhCAIGBwfp6+uju7ubrKwTF2hGIhHy8/P/YPat/P5sb28vyWTypDlisdgZzfb19ZFIvPVqw+nO5ufnD+1v9/f3E4/Hz8psXl4e0eiJb9wDAwMMDr71BbKnO5ubmzv0tXI6s4ODgwwMDJx0Nicnh8zMzNOejcfj9Pf3n3Q2Ozt76GvpdGYTiQR9fW/9ri9AVlbW0HUBpzObTCbp7e09K7OZmZnk5Jx4pzkIAnp6es7K7On8uR/uc8Rb8RxxZrMj+Rzxu18bbcc7+K9XO/jvo/282No9dCvm471v/fuOyclgbkkB5ZMKKSstZM7EfKaNy2ZMzh9+q+zv6yXwHHHas54jfstzxOnP+jrihHQ+R5zqz/abBGeovb09AE76o6qq6k3z+fn5J51dsmTJm2YnTJhw0tn3vve9b5qdNm3aSWcrKireNFtRUXHS2WnTpr1p9r3vfe9JZydMmPCm2SVLlpx0Nj8//02zVVVVp/zv9rtWr159ytmurq6h2U9+8pOnnG1tbR2avfHGG08529zcPDT7+c9//pSze/bsGZqtrq4+5ezOnTuHZu++++5Tzj7xxBNDs/fee+8pZzdt2jQ0+8ADD5xy9qGHHhqafeihh045+8ADDwzNbtq06ZSz995779DsE088ccrZu+++e2h2586dp5ytrq4emt2zZ88pZz//+c8PzTY3N59y9sYbbxyabW1tPeXsJz/5yaHZrq6uU86uXr36TV/Dp5r1HHHix0g4R0Sy84LHXngp+MGz+4Iv/vvu4OK/fjAo+ZO7Tvpj+dceD/7omzuCP/rmjuDiL/zwlLNXf2Xb0OzCv/nxKWeX3f3I0Oyltz90ytmlX94yNLvo//vZH/z6pE9/O5j6hY3BtFs3/cGPqWs2BOf/+TeDCSu/EBS+/4+DvFmXBBmFxZ4jPEd4jjjFrK8jTvzwHHHiR9jniPb29uBUXFGTpHQRiZI5/nyyi6eTNXEG2ROmkTVxBlnjSvnzH9f/di5zArlTJpz0t9lzqAd4/R24yFhyp4w96Wzda/3AG+9aFpA7pfKks41HBuHIsdf/Lv+Usy8eT8LxN2ZzTzqb6DpG5ZTxfHDeDMrOL+TF57Zz203/CxInf+dXkjS6RV5vR6eto6ODsWPHcuDAAQoLC//g18NYUXvkkUe48sorXVF7l7N+tHyCHy2f/qzrJ78V9jniaPcAL7fHaXz9uSx1B9tpau2mP/7WOUoLc088j+X8Amael0tOxslvX5ydnU00euLXB+NxEvGT5z292ayh88npzMbjiaFzWjKZpKGhgbxM+OiHL2Hi2DzPEWcw6znihFQ+R4CvI97gOeL0Z8M6R3R0dDBp0iTa29vfsn+84V0XnLf7FwyXwcFBtmzZQlVV1dAXiCSluv54gqbWrqFnsbxxK+PXOt/6G2leVgZzSgsoL/3tAybLSgsYHxu+B2JKknQm3mn/cEVNkkaBIAg40N73puexNBzs4L/bukkk//B9qkgEpp2XP1Riyl+/+9fU8/KHPlGRJCkVWXAkaYTp7Btk7+E3SsxvP5np7HvrlZCxeVmUlRZQ/vqDJeeWFjCnpIDYW9z9K9UNDg7y7W9/G4D//b//t5/oS1IaSr/vfpI0QiSSAc1t3Seex3Kog/qDnTQe7uCVo2+995wZjXDhxDGvl5hCys4voLy0kJLCnKHd+HQ3MDDATTfdBMB1111nwZGkNGTBkaRhcKSrn4ZDndQffP0Bk4c62Xu48x1d9F9eWsjc0gJmFY8hO9OHS0qSdCoWHEk6iwYTyaEC0/j6aln9wU7aurzoX5Kk4WDBkaSzIAgCttUdZv2mOvYf+8MVs7e66H/u6xf9Z3jRvyRJZ40FR5Lepea2btZtrOXJva8BUJCTScWkQsrPL3y90KTvRf+SJA03v9tK0hnqGYhz7+NNfPfpZgYSSbIyInx68Uw+c9mFlhlJkkLid2BJOk1BELBl9yG+tLmOg+0nniD9oTnFrLumgpnFY0JOJ0lSerPgSNJpePFwJ+sermVH0xEApozPY+2KCq6oKPFWzSNATk4OmzZtGjqWJKUfC44kvQOdfYN845cv8sCOfcSTAdmZUW5YMosbPjyL3KyMsOPpdZmZmSxfvjzsGJKkEFlwJOkUgiBgwwsHuHNLPa2dJ271vLS8hLUrKphalB9yOkmS9PssOJJ0EvUHO6jeUMvOfUcBmFaUz7prKrmsbGLIyXQyg4OD/PCHPwTgT/7kT8jKygo5kSRpuFlwJOn3tPcO8rVte/mX/9hHMoDcrCifvXw2f/7BGa6jjXADAwNcf/31AHzsYx+z4EhSGrLgSNLrksmAn+3az11bGzjSPQBA1UWl3L68gsnj8kJOJ0mS3gkLjiQBu/e3s3bjHp5vOQ7ArOIYNSvn8cHZE8INJkmSTosFR1JaO9Y9wD2PNvLjnS0EAcSyM7h56WyuWzSD7Mxo2PEkSdJpsuBISkuJZMBPnmvhnkcaOd4zCMCq+ZO4raqcksLckNNJkqQzZcGRlHZ2tRyjekMtu19tB6CstICalZW8b2ZRyMkkSdK7ZcGRlDbauvq5a2sDP/3NfgAKcjK5Zdkcrr10GpkZrqNJkpQKLDiSUl48keQHz77MV7ftpbMvDsDqBVO49aoyigtyQk6nsyknJ4eHHnpo6FiSlH4sOJJS2s7mo6zdsIeGQ50AzJtcSM3KeSyYNj7kZDoXMjMz+djHPhZ2DElSiCw4klJSa0cfd26p5+cvHABgbF4Wa66cyycumUpGNBJyOkmSdK5YcCSllMFEkgd37OPrj+2leyBBJAIfXziVNVfO5bxYdtjxdI7F43H+/d//HYD/8T/+B5mZfpuTpHTjmV9SytjR1Eb1xlqaWrsAmH/BONavquQ9U8aFG0zDpr+/nz/+4z8GoKury4IjSWnIM7+kUe/A8V7u2FzP5t0HATgvls3fXFXG6gVTiLqOJklSWrHgSBq1+uMJvvt0M/c+3kTvYIJoBK69dBq3XDGXsflZYceTJEkhsOBIGpW2N7ZS83AdzW3dACycPp6alfOomFQYcjJJkhQmC46kUeWVoz2s31THtrrDABQX5HB7VTmr5k8iEnEdTZKkdGfBkTQq9A0m+NaTL3H/9pfojyfJjEa4/gPT+dxHZlOQ6zqaJEk6wYIjaUQLgoDH6ltZv6mWV472ArBoVhE1KyuZXVIQcjpJkjTSWHAkjVjNbd3UPFzL9sbXADh/bC5fXF5B1UWlrqPpLWVnZ/PAAw8MHUuS0o8FR9KI0zMQ574nmvjOU80MJJJkZUT49OKZfOayC4nleNrSyWVlZXHdddeFHUOSFCJfKUgaMYIgYOueQ3xpUx0H2vsA+NCcYtZdU8HM4jEhp5MkSaOBBUfSiNDU2kn1xlp2NB0BYMr4PNauqOCKihLX0fSOxeNxHnnkEQCuvPJKMjP9NidJ6cYzv6RQdfXH+cYvX+R7zzQTTwZkZ0b5iyWzuPHDs8jNygg7nkaZ/v5+VqxYAUBXV5cFR5LSkGd+SaEIgoANLxzgzi31tHb2A7C0vIS1KyqYWpQfcjpJkjRaWXAkDbv6gx1Ub6hl576jAEwrymfdNZVcVjYx5GSSJGm0s+BIGjbtvYN8bdtevv/syySSAblZUT57+Wz+/IMzXEeTJElnhQVH0jmXTAb8bNd+7trawJHuAQCqLirl9uUVTB6XF3I6SZKUSiw4ks6p3fvbWbtxD8+3HAdgVnGMmpXz+ODsCeEGkyRJKcmCI+mcONY9wFcebeRHO1sIAohlZ3Dz0tlct2gG2ZnRsONJkqQUZcGRdFYlkgE/ea6Fex5p5HjPIACr5k/itqpySgpzQ06nVJednc299947dCxJSj8WHElnza6WY1RvqGX3q+0AlJUWULOykvfNLAo5mdJFVlYWn/nMZ8KOIUkKkQVH0rvW1tXP3b9o4KFf7wegICeTW5bN4dpLp5GZ4TqaJEkaPhYcSWcsnkjyg2df5qvb9tLZFwdg9YIp3HpVGcUFOSGnUzpKJBI8/fTTACxevJiMDG8/LknpxoIj6YzsbD7K2g17aDjUCcC8yYXUrJzHgmnjQ06mdNbX18dll10GQFdXF7FYLOREkqThZsGRdFpaO/q4c0s9P3/hAADj8rNYc+VcPr5wKhnRSMjpJElSurPgSHpHBhNJHtyxj68/tpfugQSRCHzikqmsWTaX8THvViVJkkYGC46kt7WjqY3qjbU0tXYBMP+CcaxfVcl7powLN5gkSdLvseBIOqkDx3u5Y3M9m3cfBKAols2tV5ex+uIpRF1HkyRJI5AFR9If6I8n+O7Tzdz7eBO9gwmiEfiz90/nr5bOYWx+VtjxJEmSTsqCI+lNtje2UvNwHc1t3QAsnD6empXzqJhUGHIySZKkt2fBkQTAK0d7WL+pjm11hwEoLsjh9qpyVs2fRCTiOppGh6ysLO6+++6hY0lS+rHgSGmubzDBt558ifu3v0R/PElmNML1H5jO5z4ym4JcXyBqdMnOzmbNmjVhx5AkhciCI6WpIAh4rL6V9ZtqeeVoLwCLZhVRs7KS2SUFIaeTJEk6MxYcKQ01t3VT83At2xtfA+D8sbl8cXkFVReVuo6mUS2RSLBr1y4ALr74YjIyMkJOJEkabhYcKY30DMS574kmvvNUMwOJJFkZET69eCY3XX4h+dmeDjT69fX1cckllwDQ1dVFLBYLOZEkabj5ikZKA0EQsGX3Ib60uY6D7X0ALJlTTPU1FcwsHhNyOkmSpLPHgiOluKbWTqo31rKj6QgAU8bnsXZFBVdUlLiOJkmSUo4FR0pRXf1xvvHLF/neM83EkwHZmVFuWDKLGz48i9wsr0uQJEmpyYIjpZggCNjwwgHu3FJPa2c/AEvLS1i7ooKpRfkhp5MkSTq3LDhSCqk/2EH1hlp27jsKwPSifKqvqeSysokhJ5MkSRoeFhwpBbT3DvK1bXv5/rMvk0gG5GVlcNPlF/KpxTPIyXQdTZIkpQ8LjjSKJZMBP9u1n7u2NnCkewCAqotKuX15BZPH5YWcThp+WVlZVFdXDx1LktKPBUcapXbvb2ftxj0833IcgAsnjqFmZSUfuHBCuMGkEGVnZ7Nu3bqwY0iSQmTBkUaZY90DfOXRRn60s4UggFh2Bn+5dA6fXDSd7Mxo2PEkSZJCZcGRRolEMuAnz7VwzyONHO8ZBOCj8yfxt1XllBTmhpxOGhmSyST19fUAlJeXE41a+iUp3VhwpFFgV8sxqjfUsvvVdgDKSguoWVnJ+2YWhZxMGll6e3uZN28eAF1dXcRisZATSZKGmwVHGsHauvq5+xcNPPTr/QAU5Gby11fM4U8vnUZmhu9MS5Ik/T4LjjQCxRNJfvDsy3x12146++IAfGzBFL5wVRnFBTkhp5MkSRq5LDjSCLOz+ShrN+yh4VAnAPMmF7J+1Twunjo+5GSSJEkjnwVHGiFaO/q4c0s9P3/hAADj8rNYc+VcPr5wKhnRSMjpJEmSRgcLjhSywUSSB3fs4+uP7aV7IEEkAp+4ZCprls1lfCw77HiSJEmjigVHCtGOpjaqN9bS1NoFwPwLxvF3q+Zx0ZSxISeTJEkanSw4UggOHO/ljs31bN59EICiWDa3Xl3G6ounEHUdTTpjWVlZfP7znx86liSlHwuONIz64wm++3Qz9z7eRO9ggmgE/uz90/mrK+YwNs8XY9K7lZ2dzT333BN2DElSiCw40jDZ3thKzcN1NLd1A3DJ9POoWVVJ+fmFISeTJElKHRYc6Rx75WgP6zfVsa3uMADFBTncXlXOqvmTiERcR5POpmQySUtLCwBTp04lGvWBuJKUbiw40jnSN5jgW0++xP3bX6I/niQzGuH6D0zncx+ZTUGu62jSudDb28uMGTMA6OrqIhaLhZxIkjTcLDjSWRYEAY/Vt7J+Uy2vHO0FYNGsImpWVjK7pCDkdJIkSanNgiOdRc1t3dQ8XMv2xtcAOH9sLl9cXkHVRaWuo0mSJA0DC450FvQMxLnviSa+81QzA4kkWRkRPr14JjddfiH52f4xkyRJGi6+8pLehSAI2LL7EF/aXMfB9j4AlswppvqaCmYWjwk5nSRJUvqx4EhnqKm1k+qNtexoOgLAlPF5rF1RwRUVJa6jSZIkhcSCI52mrv443/jli3zvmWbiyYDszCg3LJnFDR+eRW5WRtjxJEmS0poFR3qHgiBgwwsHuHNLPa2d/QBcUVHC/7e8gqlF+SGnkwSQmZnJjTfeOHQsSUo/nv2ld6D+YAfVG2rZue8oANOL8qleWcllcyeGnEzS78rJyeG+++4LO4YkKUQWHOkU2nsH+dq2vXz/2ZdJJAPysjK46fIL+dTiGeRkuo4mSZI00lhwpLeQTAb8bNd+7trawJHuAQCWX3Q+ty0vZ/K4vJDTSTqZIAhoa2sDYMKECd7wQ5LSkAVH+j2797ezduMenm85DsCFE8dQs7KSD1w4Idxgkt5WT08PEyeeWB3t6uoiFouFnEiSNNwsONLrjnUP8JVHG/nRzhaCAGLZGfzl0jl8ctF0sjOjYceTJEnSO2DBUdpLJAN+8lwL9zzSyPGeQQA+On8Sf1tVTklhbsjpJEmSdDosOEpru1qOUb2hlt2vtgNQVlpAzcpK3jezKORkkiRJOhMWHKWltq5+7trawE9/sx+AgtxM/vqKOfzppdPIzHAdTZIkabSy4CitxBNJfvDsy3x12146++IAfGzBFL5wVRnFBTkhp5MkSdK7ZcFR2tjZfJS1G/bQcKgTgHmTC1m/ah4XTx0fcjJJkiSdLRYcpbzWjj7u3FLPz184AMC4/CzWXDmXjy+cSkbUZ2RIqSQzM5NPfvKTQ8eSpPTj2V8pazCR5MEd+/j6Y3vpHkgQicAnLpnKmmVzGR/LDjuepHMgJyeHBx98MOwYkqQQWXCUknY0tVG9sZam1i4A5l8wjr9bNY+LpowNOZkkSZLOJQuOUsqB473csbmezbsPAlAUy+bWq8tYffEUoq6jSSkvCAJ6enoAyM/PJxLxz70kpRsLjlJCfzzBd59u5t7Hm+gdTBCNwJ+9fzp/dcUcxuZlhR1P0jDp6elhzJgxAHR1dRGLxUJOJEkabhYcjXpPNLZSs7GWfUdOvGt7yfTzqFlVSfn5hSEnkyRJ0nCz4GjUeuVoD+s31bGt7jAAxQU53F5Vzqr5k1xLkSRJSlMWHI06fYMJ7t/+Et968iX640kyoxGu/8B0PveR2RTkuo4mSZKUziw4GjWCIGBb3WHWb6pj/7FeABbNKqJmZSWzSwpCTidJkqSRwIKjUaG5rZuah2vZ3vgaAOePzeWLyyuouqjUdTRJkiQNseBoROsZiHPfE01856lmBhJJsjIifHrxTG66/ELys/3ylSRJ0pv5ClEjUhAEbNl9iC9truNgex8AS+YUU31NBTOLx4ScTtJIlZGRwerVq4eOJUnpx4KjEefFw52se7iWHU1HAJgyPo+1Kyq4oqLEdTRJp5Sbm8tPf/rTsGNIkkJkwdGI0dk3yDd++SIP7NhHPBmQkxnlhg/P4i+WzCI3y3diJUmS9PYsOApdEARseOEAd26pp7WzH4ArKkpYu6KCC87LDzmdJEmSRhMLjkJVf7CD6g217Nx3FIDpRflUr6zksrkTQ04maTTq7u5mzJgT1+l1dXURi8VCTiRJGm4WHIWivXeQr23by7/8xz6SAeRlZXDT5RfyqcUzyMl0HU2SJElnxoKjYZVMBvxs137u2trAke4BAJZfdD63LS9n8ri8kNNJkiRptLPgaNjs3t/O2o17eL7lOAAXThxDzcpKPnDhhHCDSZIkKWVYcHTOHese4J5HG/nxzhaCAGLZGfzl0jl8ctF0sjOjYceTJElSCrHg6JxJJAN+8lwL9zzSyPGeQQA+On8Sf1tVTklhbsjpJEmSlIosODonfvPyMao37mHPqx0AlJUWULOykvfNLAo5mSRJklKZBUdnVVtXP3dtbeCnv9kPQEFuJn99xRz+9NJpZGa4jibp3MrIyKCqqmroWJKUfiw4OiviiSQ/ePZlvrptL519cQA+tmAKX7iqjOKCnJDTSUoXubm5bN68OewYkqQQWXD0rv3nfx+hemMtDYc6AZg3uZD1q+Zx8dTxISeTJElSurHg6Iwd7ujjy1vq+fkLBwAYl5/F55fN5ROXTCUjGgk5nSRJktKRBUenbTCR5IEdzfzDYy/SPZAgEoFPXDKVNcvmMj6WHXY8SWmsu7ubiRMnAtDa2kosFgs5kSRpuFlwdFp2NLVRvbGWptYuAOZfMI6/WzWPi6aMDTmZJJ3Q09MTdgRJUogsOHpHDhzv5Y7N9WzefRCAolg2t15dxuqLpxB1HU2SJEkjhAVHp9QfT/Ddp5u59/EmegcTRCPwZ++fzl9dMYexeVlhx5MkSZLexIKjk3qisZWajbXsO3Ji3eOS6edRs6qS8vMLQ04mSZIkvTULjv5Ay5Ee1m+q47H6wwAUF+Rwe1U5q+ZPIhJxHU2SJEkjlwVHQ/oGE9y//SXuf/IlBuJJMqMRrv/AdD73kdkU5LqOJkmSpJHPgiOCIGBb3WHWb6pj/7FeABbNKqJmZSWzSwpCTidJ71w0GmXJkiVDx5Kk9GPBSXPNbd2s21jLk3tfA+D8sbl8cXkFVReVuo4madTJy8tj+/btYceQJIXIgpOmegbi3Pt4E999upmBRJKsjAifXjyTmy6/kPxsvywkSZI0OvlKNs0EQcCW3Yf40uY6Drb3AbBkTjHV11Qws3hMyOkkSZKkd8eCk0ZePNzJuodr2dF0BIAp4/NYu6KCKypKXEeTlBK6u7uZPn06APv27SMWi4UbSJI07Cw4aaCzb5Bv/PJFHtixj3gyIDszyg1LZnHDh2eRm5URdjxJOqva2trCjiBJCpEFJ4UFQcCGFw5w55Z6Wjv7AVhaXsLaFRVMLcoPOZ0kSZJ09llwUlT9wQ6qN9Syc99RAKYX5VN9TSWXlU0MOZkkSZJ07lhwUkx77yBf27aXf/mPfSQDyM2K8tnLZ/OpxTPIyXQdTZIkSanNgpMiksmAn+3az11bGzjSPQBA1UWl3L68gsnj8kJOJ0mSJA0PC04K+K/9x1m7oZYXXjkOwKziGDUr5/HB2RPCDSZJkiQNMwvOKHase4C7H2nkJ8+1EAQQy87g5qWzuW7RDLIzo2HHk6RhF41Gee973zt0LElKPxacUSiRDPjxzha+8mgjx3sGAVg1fxK3VZVTUpgbcjpJCk9eXh7PPfdc2DEkSSGy4Iwyv3n5GNUb97Dn1Q4AykoLqFlZyftmFoWcTJIkSQqfBWeUaOvq566tDfz0N/sBKMjJ5JZlc7j20mlkZriGIUmSJIEFZ8SLJ5J8/9mX+ftte+nsiwOwesEUbr2qjOKCnJDTSdLI0tPTQ0VFBQB1dXXk5/tQY0lKNxacEew///sI1RtraTjUCcC8yYXUrJzHgmnjQ04mSSNTEAS8/PLLQ8eSpPRjwRmBDnf08eUt9fz8hQMAjM3LYs2Vc/nEJVPJiEZCTidJkiSNXBacEWQwkeSBHc38w2Mv0j2QIBKBjy+cypor53JeLDvseJIkSdKIZ8EZIXY0tVG9sZam1i4A5l8wjvWrKnnPlHHhBpMkSZJGEQtOyA4c7+WOzfVs3n0QgPNi2fzNVWWsXjCFqOtokiRJ0mmx4ISkP57gu083c+/jTfQOJohG4NpLp3HLFXMZm58VdjxJkiRpVLLghOCJxlZqNtay70gPAAunj6dm5TwqJhWGnEySRrdIJDJ0m+hIxE/BJSkdWXCGUcuRHtZvquOx+sMAFBfkcHtVOavmT/IbsSSdBfn5+dTW1oYdQ5IUIgvOMOgbTHD/9pe4/8mXGIgnyYxGuP4D0/ncR2ZTkOs6miRJknS2WHDOoSAI2FZ3mPWb6th/rBeARbOKqFlZyeySgpDTSZIkSanHgnOONLd1s25jLU/ufQ2A88fm8sXlFVRdVOo6miSdIz09PSxcuBCA5557jvz8/JATSZKGmwXnLOsZiHPv40189+lmBhJJsjIifHrxTD5z2YXEcvzPLUnnUhAE1NXVDR1LktKPr7jPkiAI2LL7EF/aXMfB9j4APjSnmHXXVDCzeEzI6SRJkqT0YME5C1483Mm6h2vZ0XQEgCnj81i7ooIrKkpcR5MkSZKGkQXnXejsG+Qbv3yRB3bsI54MyM6McsOSWdzw4VnkZmWEHU+SJElKOxacMxAEARteOMCdW+pp7ewHYGl5CWtXVDC1yAtaJUmSpLBYcE5T/cEOqjfUsnPfUQCmF+VTfU0ll5VNDDmZJEmSJAvOO9TeO8jXtu3lX/5jH8kAcrOifPby2Xxq8QxyMl1Hk6SRIBKJMG3atKFjSVL6seC8jWQy4Ge79nPX1gaOdA8AUHVRKbcvr2DyuLyQ00mSfld+fj779u0LO4YkKUQWnFPYvb+dtRv38HzLcQBmFceoWTmPD86eEG4wSZIkSW/JgvMWjnUPcM+jjfx4ZwtBALHsDG5eOpvrFs0gOzMadjxJkiRJJ2HB+R2JZMBPnmvhnkcaOd4zCMCq+ZO4raqcksLckNNJkt5Ob28vH/rQhwB46qmnyMtzlViS0o0F53W7Wo5RvaGW3a+2A1BWWkDNykreN7Mo5GSSpHcqmUzy61//euhYkpR+0r7gtHX1c9fWBn76m/0AFORkcsuyOVx76TQyM1xHkyRJkkaTtC048USSHzz7Ml/dtpfOvjgAqxdM4daryiguyAk5nSRJkqQzkZYFZ2fzUdZu2EPDoU4A5k0upGblPBZMGx9yMkmSJEnvRloVnNaOPu7cUs/PXzgAwLj8LNZcOZePL5xKRtQHwkmSJEmjXVoUnMFEkgd37OPrj+2leyBBJAKfuGQqa5bNZXwsO+x4kiRJks6SlC84O5raqN5YS1NrFwDzLxjH+lWVvGfKuHCDSZLOiQkTfBizJKWzlC04B473csfmejbvPghAUSybW68uY/XFU4i6jiZJKSkWi/Haa6+FHUOSFKKUKzj98STffqaJex9voncwQTQCf/b+6fzV0jmMzc8KO54kSZKkcyilCk7dsQh//4+/4uWjPQAsnD6empXzqJhUGHIySZIkScMhJQpOd3+cm3/8PI81ZAA9FBfkcHtVOavmTyIScR1NktJFb28vV199NQBbt24lLy8v5ESSpOGWEgUnPzuDjr440UjA9Yum85dXzKUg13U0SUo3yWSSJ598cuhYkpR+UqLgRCIRvrSqgie2P8n/umouWVmWG0mSJCkdRcMOcLbMmBCjND/sFJIkSZLClDIFR5IkSZIsOJIkSZJShgVHkiRJUspIiZsMSJL0hvx8L8iUpHRmwZEkpYxYLEZ3d3fYMSRJIXJFTZIkSVLKsOBIkiRJShkWHElSyujr62P58uUsX76cvr6+sONIkkLgNTiSpJSRSCTYsmXL0LEkKf34CY4kSZKklGHBkSRJkpQyLDiSJEmSUoYFR5IkSVLKsOBIkiRJShlnfBe1IAgA6OjoOGth3o3BwUF6enro6OggKysr7DiSpBB0d3cPHXd0dHgnNUlKIW/0jjd6yMmcccHp7OwE4IILLjjT30KSpHNm0qRJYUeQJJ0DnZ2djB079qS/HgnergKdRDKZ5MCBAxQUFBCJRM444NnS0dHBBRdcwCuvvEJhYWHYcSRJkiSdRUEQ0NnZyaRJk4hGT36lzRkXnJGmo6ODsWPH0t7ebsGRJEmS0pQ3GZAkSZKUMiw4kiRJklJGyhScnJwcqqurycnJCTuKJEmSpJCkzDU4kiRJkpQyn+BIkiRJkgVHkiRJUsqw4EiSJElKGRYcSZIkSSnDgiNJkiQpZaRMwfnmN7/JjBkzyM3NZcGCBTz99NNhR5IkSZI0zFKi4Pzrv/4rf/mXf8ntt9/O888/z+LFi7n66qtpaWkJO5okSZKkYZQSz8F53/vex8UXX8z9998/9HPl5eV89KMf5ctf/nKIySRJkiQNp1H/Cc7AwAC/+c1vWLZs2Zt+ftmyZfzqV78KKZUkSZKkMIz6gtPW1kYikaCkpORNP19SUsKhQ4dCSiVJkiQpDKO+4LwhEom86e+DIPiDn5MkSZKU2kZ9wZkwYQIZGRl/8GlNa2vrH3yqI0mSJCm1jfqCk52dzYIFC9i2bdubfn7btm0sWrQopFSSJEmSwpAZdoCz4ZZbbuHaa6/lve99L+9///v59re/TUtLC3/xF38RdjRJkiRJwyglCs7//J//kyNHjrB+/XoOHjzIvHnz2LJlC9OmTQs7miRJkqRhlBLPwZEkSZIkSIFrcCRJkiTpDRYcSZIkSSnDgiNJkiQpZVhwJEmSJKUMC44kSZKklGHBkSRJkpQyLDiSJEmSUoYFR5IkSVLKsOBIkiRJShkWHEmSJEkpw4IjSZIkKWX8/8wTWTKqT7N+AAAAAElFTkSuQmCC\n", - "text/plain": [ - "<Figure size 800x400 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot as plt\n", - "%matplotlib inline\n", - "import math\n", - "\n", - "\n", - "def draw(r):\n", - " l = len(r)\n", - " x = [x for x in range(l)]\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " ax.axhline(y=0.5, color='black', linestyle='--')\n", - " ax.axvline(x=l/2, color='black', linestyle='--')\n", - " ax.set_xticks(range(0, l, 64))\n", - " ax.set_yticks(range(-l*2, l*2+1, 128))\n", - " ax.grid()\n", - " ax.plot(x, r)\n", - "\n", - " \n", - " \n", - "def deadband(length, deadband=0.04):\n", - " readings = []\n", - "\n", - " for i in range(length):\n", - " current_reading = i/(length-1)\n", - " scaler = (1.0) / (1.0 - deadband)\n", - " scaler += 0.1\n", - "\n", - " if current_reading < 0.5:\n", - " current_reading += deadband\n", - " current_reading = min(0.5, current_reading)\n", - " current_reading = 0.5 - current_reading\n", - " current_reading *= scaler\n", - " current_reading = 0.5 - current_reading\n", - " # current_reading =\n", - " else:\n", - " current_reading -= deadband\n", - " current_reading = max(0.5, current_reading)\n", - " current_reading = 0.5 - current_reading\n", - " current_reading *= scaler\n", - " current_reading = 0.5 - current_reading\n", - " \n", - " val = min(length, max(0, current_reading))\n", - " readings.append(val)\n", - " return readings\n", - "\n", - "\n", - "\n", - "\n", - "bip = deadband(16, deadband = 0.08)\n", - "draw(bip)\n", - "text = \"\"\n", - "text += \"// Lookup Table for Bipolar Curve with deadband\\n\"\n", - "text += f\"float bip_lookup[] = {{{', '.join(str(v) for v in bip)}}};\\n\\n\"\n", - "\n", - "import ipywidgets as widgets\n", - "from IPython.display import display, HTML, Javascript\n", - "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", - "\n", - "def mybtn_event_handler(b):\n", - " print(\"copied\")\n", - " clipboard.copy(text)\n", - "\n", - "mybtn.on_click(mybtn_event_handler)\n", - "\n", - "display(mybtn)\n", - "len(bip)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ecc666b0-8195-4276-a576-39d41753b540", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e17619a0890a4ab081293b27925c743d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "0.0" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 800x400 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot as plt\n", - "%matplotlib inline\n", - "import math\n", - "import sys\n", - "\n", - "\n", - "\n", - "def draw(r):\n", - " l = len(r)\n", - " x = [x for x in range(l)]\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " ax.axhline(y=0.5, color='black', linestyle='--')\n", - " ax.set_xticks(range(0, l, 64))\n", - " ax.set_yticks(range(-l*2, l*2+1, 128))\n", - " ax.grid()\n", - " ax.plot(x, r)\n", - "\n", - " \n", - " \n", - "def lin_to_log(length, strength=1.0):\n", - " # Limit to range 0.0 and 1.0\n", - " strength = min(1.0, max(0.0, strength))\n", - " readings = []\n", - " linear_readings = []\n", - " for i in range(length):\n", - " current_reading = i/length\n", - " linear_readings.append(current_reading)\n", - " # Log of 0 is error, so handle it explicitly\n", - " if i == 0:\n", - " current_reading = 0.0\n", - " else:\n", - " current_reading = math.log10(i)\n", - " readings.append(current_reading)\n", - " \n", - " # Normalize to scale 0.1 to one\n", - " maxima = max(readings)\n", - " scaler = 1.0 / maxima\n", - " readings = [r*scaler for r in readings]\n", - " \n", - " output = []\n", - " for i, r in enumerate(readings):\n", - " val = r*strength + linear_readings[i] * (1.0 - strength)\n", - " output.append(val)\n", - " \n", - " # Convert to integer value range\n", - " output = [o for o in output]\n", - " return output\n", - "\n", - "\n", - "\n", - "\n", - "# lilo = lin_to_log(4096, strength=1.0)\n", - "lilo = lin_to_log(32, strength=1.0)\n", - "# lilo = [l/256.0 for l in lilo]\n", - "draw(lilo)\n", - "text = \"\"\n", - "text += \"// Lookup Table for Logarithmic Curve\\n\"\n", - "text += f\"float log_lookup[] = {{{', '.join(str(v) for v in lilo)}}};\\n\\n\"\n", - "# print(text)\n", - "\n", - "import ipywidgets as widgets\n", - "from IPython.display import display, HTML, Javascript\n", - "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", - "\n", - "def mybtn_event_handler(b):\n", - " print(\"copied\")\n", - " clipboard.copy(text)\n", - "\n", - "mybtn.on_click(mybtn_event_handler)\n", - "\n", - "display(mybtn)\n", - "min(lilo)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "2ecfda42-4a3c-489a-bc90-8576648c339c", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "56f51bfc443847a0adda4da0ff439e8a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "0.9999999999999999" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 800x400 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot as plt\n", - "%matplotlib inline\n", - "import math\n", - "import sys\n", - "\n", - "\n", - "\n", - "def draw(r):\n", - " l = len(r)\n", - " x = [x for x in range(l)]\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " ax.axhline(y=0.5, color='black', linestyle='--')\n", - " ax.set_xticks(range(0, l, 64))\n", - " ax.set_yticks(range(-l*2, l*2+1, 128))\n", - " ax.grid()\n", - " ax.plot(x, r)\n", - "\n", - " \n", - " \n", - "def exp_lookup(length, strength=1.0):\n", - " # Limit to range 0.0 and 1.0\n", - " strength = min(1.0, max(0.0, strength))\n", - " readings = []\n", - " linear_readings = []\n", - " for i in range(length):\n", - " current_reading = i/length\n", - " linear_readings.append(current_reading)\n", - " # Log of 0 is error, so handle it explicitly\n", - " if i == 0:\n", - " current_reading = 0.0\n", - " else:\n", - " current_reading = i*i\n", - " readings.append(current_reading)\n", - " \n", - " # Normalize to scale 0.1 to one\n", - " maxima = max(readings)\n", - " scaler = 1.0 / maxima\n", - " readings = [r*scaler for r in readings]\n", - " \n", - " output = []\n", - " for i, r in enumerate(readings):\n", - " val = r*strength + linear_readings[i] * (1.0 - strength)\n", - " output.append(val)\n", - " \n", - " # Convert to integer value range\n", - " output = [o for o in output]\n", - " return output\n", - "\n", - "\n", - "\n", - "\n", - "# lilo = lin_to_log(4096, strength=1.0)\n", - "lilo = exp_lookup(8, strength=1.0)\n", - "draw(lilo)\n", - "text = \"\"\n", - "text += \"// Lookup Table for Exponential Curve\\n\"\n", - "text += f\"float exp_lookup[] = {{{', '.join(str(v) for v in lilo)}}};\\n\\n\"\n", - "# print(text)\n", - "\n", - "import ipywidgets as widgets\n", - "from IPython.display import display, HTML, Javascript\n", - "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", - "\n", - "def mybtn_event_handler(b):\n", - " print(\"copied\")\n", - " clipboard.copy(text)\n", - "\n", - "mybtn.on_click(mybtn_event_handler)\n", - "\n", - "display(mybtn)\n", - "\n", - "max(lilo)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "e51416f3-f34d-4513-9f0c-fa52c468274e", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "74318935b12f4752aec3807327bea0fe", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "interactive(children=(FloatSlider(value=0.2, description='f', max=1.0, step=0.001), Output()), _dom_classes=('…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "51bcd6adaa2a492d9f61fdd4dcca7232", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import pyplot as plt\n", - "%matplotlib inline\n", - "from ipywidgets import interact, FloatSlider\n", - "import matplotlib.transforms as transforms\n", - "import math\n", - "import clipboard\n", - "\n", - "def draw(f):\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " b = scan2d(x, y, f)\n", - " ax.axhline(y=b, color='red', linestyle='--')\n", - " ax.axvline(x=f, color='red', linestyle='--')\n", - " trans = transforms.blended_transform_factory(\n", - " ax.get_yticklabels()[0].get_transform(), ax.transData)\n", - " ax.text(0.95, b, \"{:.02f}\".format(b), color=\"red\", transform=trans, ha=\"right\", va=\"bottom\")\n", - " ax.grid()\n", - " ax.plot(x, y)\n", - "\n", - "def lerp(a, b, f=0.5) -> float:\n", - " f = min(1.0, max(0.0, f))\n", - " if f == 0.0:\n", - " return a\n", - " elif f == 1.0:\n", - " return b\n", - " else:\n", - " return a * (1.0-f) + b * f\n", - "\n", - "def lerp2d(x1, y1, x2, y2, f=0.5):\n", - " if f == 0.0:\n", - " return [x1, x2]\n", - " elif f == 1.0:\n", - " return [x1, x2]\n", - " else:\n", - " x = lerp(x1, x2, f)\n", - " y = lerp(y1, y2, f)\n", - " return [x, y]\n", - "\n", - "\n", - "# A function that scans through two lists representing x/y values using a\n", - "# third value called f and returns the linear interpolation between those points\n", - "def scan2d(x, y, f):\n", - " # f = min(1.0, max(0.0, f))\n", - " assert len(x) == len(y)\n", - " # Find ax and bx for given factor\n", - " xa = None\n", - " last_value = None\n", - " idx = None\n", - " for i, v in enumerate(x):\n", - " # this = abs(f-v)\n", - " this = f-v\n", - " if xa is None or this > 0:\n", - " xa = this\n", - " idx = i\n", - " idx2 = min(idx+1, len(x)-1)\n", - " if idx == idx2:\n", - " return y[idx]\n", - " xa = x[idx]\n", - " xb = x[idx2]\n", - " ya = y[idx]\n", - " yb = y[idx2]\n", - " xspan = xb-xa\n", - " xscaler = 1/xspan\n", - " new_f = (f-xa)*xscaler\n", - " return lerp(ya, yb, new_f)\n", - " \n", - " \n", - "# lines_orig = [\n", - "# [0.0, 0.0, -0.5],\n", - "# [0.45, 0.5, 0.0],\n", - "# [0.55, 0.5, 1.0],\n", - "# [1.0, 1.0, 0.0],\n", - "# ]\n", - "\n", - "# half_deadband = 0.005\n", - "\n", - "# lines_orig = [\n", - "# [0.0, -1.0, 0.0],\n", - "# [0.0+half_deadband, -1.0, 0.0],\n", - "# ] \n", - "\n", - "# steps = list(range(-9, 11))\n", - "# for i in steps:\n", - "# f = float(i)\n", - "# print(f/10)\n", - "# lines_orig.append([0.5+f/20-half_deadband, f/10, 0.0])\n", - "# lines_orig.append([0.5+f/20+half_deadband, f/10, 0.0])\n", - "\n", - "db = 0.005\n", - "hb = db/2.0\n", - "\n", - "lines_orig = [\n", - " [0.0, -1.0, 0.0], # -1000%\n", - " [0.0+hb, -1.0, 0.0], # -1000%\n", - " [0.02-hb, -0.9, 0.0], # -900%\n", - " [0.02+hb, -0.9, 0.0], # -900%\n", - " [0.04-hb, -0.8, 0.0], # -800%\n", - " [0.04+hb, -0.8, 0.0], # -800%\n", - " [0.06-hb, -0.7, 0.0], # -700%\n", - " [0.06+hb, -0.7, 0.0], # -700%\n", - " [0.08-hb, -0.6, 0.0], # -600%\n", - " [0.08+hb, -0.6, 0.0], # -600%\n", - " [0.1-hb, -0.5, 0.0], # -500%\n", - " [0.1+hb, -0.5, 0.0], # -500%\n", - " [0.12-hb, -0.4, 0.0], # -400%\n", - " [0.12+hb, -0.4, 0.0], # -400%\n", - " [0.14-hb, -0.3, 0.0], # -300%\n", - " [0.14+hb, -0.3, 0.0], # -300%\n", - " [0.16-hb, -0.2, 0.0], # -200%\n", - " [0.16+hb, -0.2, 0.0], # -200%\n", - " [0.2-hb, -0.1, 0.0], # -100%\n", - " [0.2+hb, -0.1, 0.0], # -100%\n", - " [0.25-hb, -0.05, 0.0], # -50%\n", - " [0.25+hb, -0.05, 0.0], # -50%\n", - " [0.3-hb, -0.025, 0.0], # -25%\n", - " [0.3+hb, -0.025, 0.0], # -25%\n", - " [0.38-hb, -0.0125, 0.0], # -12.5%\n", - " [0.38+hb, -0.0125, 0.0], # -12.5%\n", - " [0.42-hb, -0.00625, 0.0], # -6.25%\n", - " [0.42+hb, -0.00625, 0.0], # -6.25%\n", - " [0.46-hb, -0.003125, 0.0], # -3.125%\n", - " [0.46+hb, -0.003125, 0.0], # -3.125%\n", - " [0.5-hb, 0.0, 0.0], # 0%\n", - " [0.5+hb, 0.0, 0.0], # 0%\n", - " [1.0-0.46-hb, 0.003125, 0.0], # 3.125%\n", - " [1.0-0.46+hb, 0.003125, 0.0], # 3.125%\n", - " [1.0-0.42-hb, 0.00625, 0.0], # 6.25%\n", - " [1.0-0.42+hb, 0.00625, 0.0], # 6.25%\n", - " [1.0-0.38-hb, 0.0125, 0.0], # 12.5%\n", - " [1.0-0.38+hb, 0.0125, 0.0], # 12.5%\n", - " [1.0-0.3-hb, 0.025, 0.0], # 25%\n", - " [1.0-0.3+hb, 0.025, 0.0], # 25%\n", - " [1.0-0.25-hb, 0.05, 0.0], # 50%\n", - " [1.0-0.25+hb, 0.05, 0.0], # 50%\n", - " [1.0-0.2-hb, 0.1, 0.0], # 100%\n", - " [1.0-0.2+hb, 0.1, 0.0], # 100%\n", - " [1.0-0.16-hb, 0.2, 0.0], # 200%\n", - " [1.0-0.16+hb, 0.2, 0.0], # 200%\n", - " [1.0-0.14-hb, 0.3, 0.0], # 300%\n", - " [1.0-0.14+hb, 0.3, 0.0], # 300%\n", - " [1.0-0.12-hb, 0.4, 0.0], # 400%\n", - " [1.0-0.12+hb, 0.4, 0.0], # 400%\n", - " [1.0-0.1-hb, 0.5, 0.0], # 500%\n", - " [1.0-0.1+hb, 0.5, 0.0], # 500%\n", - " [1.0-0.08-hb, 0.6, 0.0], # 600%\n", - " [1.0-0.08+hb, 0.6, 0.0], # 600%\n", - " [1.0-0.06-hb, 0.7, 0.0], # 700%\n", - " [1.0-0.06+hb, 0.7, 0.0], # 700%\n", - " [1.0-0.04-hb, 0.8, 0.0], # 800%\n", - " [1.0-0.04+hb, 0.8, 0.0], # 800%\n", - " [1.0-0.02-hb, 0.9, 0.0], # 900%\n", - " [1.0-0.02+hb, 0.9, 0.0], # 900%\n", - " [1.0-0.0-hb, 1.0, 0.0], # 1000%\n", - " [1.0-0.0, 1.0, 0.0], # 1000%\n", - "]\n", - "\n", - "# Calculate curves for points of curvature\n", - "def make_lines(lines_orig, resolution=20):\n", - " lines = []\n", - " for i, l in enumerate(lines_orig):\n", - " i2 = min(len(lines_orig)-1, i+1)\n", - " if l[2] == 0.0:\n", - " lines.append(l)\n", - " else:\n", - " xa = lines_orig[i][0]\n", - " xb = lines_orig[i2][0]\n", - " ya = lines_orig[i][1]\n", - " yb = lines_orig[i2][1]\n", - " x_span = xb-xa\n", - " y_span = yb-ya\n", - " x_step = 1/20\n", - " y_step = 1/20\n", - " for j in range(resolution):\n", - " x = x_step * j\n", - " y = y_step * j\n", - " y_curve = 0\n", - " if l[2] > 0.0:\n", - " y_curve = y*y*y\n", - " else:\n", - " y_curve = y*y\n", - " y = (1.0-l[2]) * y + l[2] * y_curve\n", - " lines.append([xa+x*x_span, ya+y*y_span, 0.0])\n", - " return lines\n", - "\n", - "lines = make_lines(lines_orig, 20)\n", - "\n", - "x = [a[0] for a in lines]\n", - "y = [a[1] for a in lines]\n", - "c = [a[2] for a in lines]\n", - "# draw(x, y, 0.45/2)\n", - "\n", - "interact(draw, f=FloatSlider(min=min(x), max=max(x), step=0.001, value=0.2))\n", - "\n", - "length = len(x)\n", - "text = \"\"\n", - "text += \"// Lookup Table for Pitch Knob\\n\"\n", - "text += f\"float pitch_knob_lookup_x[] = {{{', '.join(str(xv) for xv in x)}}};\\n\"\n", - "text += f\"float pitch_knob_lookup_y[] = {{{', '.join(str(yv) for yv in y)}}};\\n\"\n", - "text += f\"size_t pitch_knob_lookup_length = {length};\\n\"\n", - "\n", - "import ipywidgets as widgets\n", - "from IPython.display import display, HTML, Javascript\n", - "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", - "\n", - "def mybtn_event_handler(b):\n", - " print(\"copied\")\n", - " clipboard.copy(text)\n", - "\n", - "mybtn.on_click(mybtn_event_handler)\n", - "\n", - "display(mybtn)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "f35f1609-3a10-4dce-b7dd-201d79f2c39c", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b0e2832a8efa405790ad1cfd4529aa3b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "interactive(children=(FloatSlider(value=0.2, description='f', max=1.5, min=-1.5, step=0.001), Output()), _dom_…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1dcfe3c0ccad4e4a92ea2d43a92ad01f", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "19\n" - ] - } - ], - "source": [ - "# Saturation curve\n", - "\n", - "# X / Y / Curvature\n", - "lines_orig = [\n", - " [-1.5, -1.0, 1.0],\n", - " [-0.9, -0.8, 0.0],\n", - " [0.0, 0.0, 0.0],\n", - " [0.9, 0.8, -1.1],\n", - " [1.5, 1.0, 0.0],\n", - "]\n", - "\n", - "lines = make_lines(lines_orig, 8)\n", - "\n", - "\n", - "x = [a[0] for a in lines]\n", - "y = [min(1.0, a[1]) for a in lines]\n", - "c = [a[2] for a in lines]\n", - "# draw(x, y, 0.45/2)\n", - "\n", - "interact(draw, f=FloatSlider(min=min(x), max=max(x), step=0.001, value=0.2))\n", - "\n", - "length = len(x)\n", - "text = \"\"\n", - "text += \"// Lookup Curves for Saturation b\\n\"\n", - "text += f\"float saturation_lookup_x[] = {{{', '.join(str(xv) for xv in x)}}};\\n\"\n", - "text += f\"float saturation_lookup_y[] = {{{', '.join(str(yv) for yv in y)}}};\\n\"\n", - "text += f\"size_t saturation_lookup_length = {length};\\n\"\n", - "\n", - "import ipywidgets as widgets\n", - "from IPython.display import display, HTML, Javascript\n", - "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", - "\n", - "def mybtn_event_handler(b):\n", - " print(\"copied\")\n", - " clipboard.copy(text)\n", - "\n", - "mybtn.on_click(mybtn_event_handler)\n", - "\n", - "display(mybtn)\n", - "print(len(x))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "f0cd9d06-a15a-46b4-a3ef-4aee3d4f7cd0", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1293ab84dac04ddca5b2891a5ab9793c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "<Figure size 800x400 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# X / Y / Curvature\n", - "\n", - "def draw_rgb(xr, yr, xg, yg, xb, yb):\n", - " fig = plt.figure(figsize=(8, 4))\n", - " ax = fig.add_axes([0, 0, 1, 1])\n", - " ax.grid()\n", - " ax.plot(xr, yr, 'r')\n", - " ax.plot(xg, yg, 'g')\n", - " ax.plot(xb, yb, 'b')\n", - "\n", - "\n", - "# BLUE\n", - "lines_b = [\n", - " [0, 0, 0.8],\n", - " [40, 10, -1.0],\n", - " [170, 0, 1.0],\n", - "]\n", - "lines_b = make_lines(lines_b, 16)\n", - "xb = [a[0] for a in lines_b]\n", - "yb = [a[1] for a in lines_b]\n", - "\n", - "# Green\n", - "lines_g = [\n", - " [10, 0, 1.0],\n", - " [180, 60, -0.2],\n", - " [250, 0, 0.0],\n", - "]\n", - "lines_g = make_lines(lines_g, 16)\n", - "xg = [a[0] for a in lines_g]\n", - "yg = [a[1] for a in lines_g]\n", - "\n", - "# RED\n", - "lines_r = [\n", - " [170, 0, 1.0],\n", - " [240, 30, 0.9],\n", - " [255, 255, 0.0],\n", - "]\n", - "lines_r = make_lines(lines_r, 16)\n", - "xr = [a[0] for a in lines_r]\n", - "yr = [a[1] for a in lines_r]\n", - "\n", - "draw_rgb(xr, yr, xg, yg, xb, yb)\n", - "\n", - "length = len(xr)\n", - "text = \"\"\n", - "text += \"// Lookup Curves LED Red b\\n\"\n", - "text += f\"float red_lut_x[] = {{{', '.join(str(xv) for xv in xr)}}};\\n\"\n", - "text += f\"float red_lut_y[] = {{{', '.join(str(yv) for yv in yr)}}};\\n\"\n", - "text += f\"size_t red_lut_len = {length};\\n\\n\"\n", - "length = len(xg)\n", - "text += \"// Lookup Curves LED Green b\\n\"\n", - "text += f\"float green_lut_x[] = {{{', '.join(str(xv) for xv in xg)}}};\\n\"\n", - "text += f\"float green_lut_y[] = {{{', '.join(str(yv) for yv in yg)}}};\\n\"\n", - "text += f\"size_t green_lut_len = {length};\\n\\n\"\n", - "length = len(xb)\n", - "text += \"// Lookup Curves LED Blue b\\n\"\n", - "text += f\"float blue_lut_x[] = {{{', '.join(str(xv) for xv in xb)}}};\\n\"\n", - "text += f\"float blue_lut_y[] = {{{', '.join(str(yv) for yv in yb)}}};\\n\"\n", - "text += f\"size_t blue_lut_len = {length};\\n\\n\"\n", - "\n", - "import ipywidgets as widgets\n", - "from IPython.display import display, HTML, Javascript\n", - "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", - "\n", - "def mybtn_event_handler(b):\n", - " print(\"copied\")\n", - " clipboard.copy(text)\n", - "\n", - "mybtn.on_click(mybtn_event_handler)\n", - "\n", - "display(mybtn)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "59b56dbc-6852-4989-bc19-3525ee7caf8b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.0" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5a511d24-cc91-450f-83e4-8295647d9391", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.8.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} -- GitLab