{ "cells": [ { "cell_type": "code", "execution_count": 10, "id": "b5d8a856-d466-4102-8bfc-2a9014ab0767", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import importlib.util\n", "from ipywidgets import interactive\n", "\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "id": "c4fc1c81-3f08-4cd8-bb38-3566b033318a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 11, "id": "39d0f384-6533-41e0-8093-b1b2a9d59608", "metadata": {}, "outputs": [], "source": [ "def load_test(path):\n", " spec = importlib.util.spec_from_file_location(\"test\", path)\n", " module = importlib.util.module_from_spec(spec)\n", " spec.loader.exec_module(module)\n", " for sym in ['r', 'g', 'b', 'h', 's', 'v']:\n", " a = np.array(getattr(module, sym))\n", " setattr(module, sym, a)\n", " return module\n", "\n", "path = \"/home/martin/code/musicmouse/espmusicmouse/.pio/build/native/swipe.py\"\n", "path = \"/home/martin/code/musicmouse/espmusicmouse/.pio/build/native/reverse_swipe.py\"\n", "res = load_test(path)" ] }, { "cell_type": "code", "execution_count": 12, "id": "bb3bc44d-2523-43d5-87eb-2cded8d0d8c2", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "09617018b02c449d912ef07757fcc8c6", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=99, description='t', max=199), Output(layout=Layout(height='350px'))), _…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_v(t):\n", " plt.figure(2)\n", " plt.ylim(-0.1, 1.1) \n", " plt.plot(res.v[t], label=f\"v at {t}\")\n", " plt.legend()\n", " plt.show()\n", "\n", "interactive_plot = interactive(plot_v, t=(0, len(res.v)-1))\n", "output = interactive_plot.children[-1]\n", "output.layout.height = '350px'\n", "interactive_plot" ] }, { "cell_type": "code", "execution_count": 9, "id": "2ef27efb-b021-42b7-8cb5-c84add88ab17", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2,\n", " 2, 1, 1, 1, 1, 1, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 1])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.r[70]" ] }, { "cell_type": "markdown", "id": "817d4771-f210-48e9-a342-0b0d238d0e11", "metadata": {}, "source": [ "## Bell Curve" ] }, { "cell_type": "code", "execution_count": 14, "id": "763b5ffe-4224-4dec-a147-40be2aaa0d41", "metadata": {}, "outputs": [], "source": [ "def bell_curve_approximation_old(x, inverse_width):\n", " if x < 0:\n", " x = -x\n", " \n", " nx = x * inverse_width * 4\n", " if nx > 2:\n", " return 0\n", " \n", " x2 = nx * nx\n", " x3 = x2 * nx\n", " res = 1 + 0.2760695894 * x3 - 0.8021391 * x2\n", " \n", " return res if res > 0 else 0\n", "\n", "\n", "def bell_curve_approximation(x, inverse_width): \n", " nx = x * inverse_width * 4\n", " x2 = nx * nx\n", " x3 = x2 * nx\n", " res = 1 + 0.2760695894 * x3 - 0.8021391 * x2\n", " \n", " return res if res > 0 else 0\n", "\n", "# // Function start at 0 (x=0) and goes smoothly up to 1 and arrives 1 at x=width\n", "# // inverse width has to be 1 / width (should be cached outside)\n", "def step_function(x, width, inverse_width):\n", " if x < 0:\n", " return 0\n", " if x >= width:\n", " return 1\n", " bell_inv_width = inverse_width * 0.5\n", " nx = (-x + width) * bell_inv_width * 4\n", " x2 = nx * nx\n", " x3 = x2 * nx\n", " res = 1 + 0.2760695894 * x3 - 0.8021391 * x2\n", " return res" ] }, { "cell_type": "code", "execution_count": null, "id": "be193428-3fec-4a2f-9903-4dbfa4ad19e3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 15, "id": "de8b9ee1-6232-4cab-8a1a-b62ec723b4f4", "metadata": {}, "outputs": [], "source": [ "x = np.linspace(-1, 10, 20)\n", "y = np.array([step_function(x_i, 8, 1 / 8) for x_i in x])" ] }, { "cell_type": "code", "execution_count": 16, "id": "db9bddcc-ae89-462c-b8f4-56384a36a1df", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(x, y)" ] }, { "cell_type": "code", "execution_count": null, "id": "ad451aa5-8645-4432-a0e8-821eb4826f19", "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.10" } }, "nbformat": 4, "nbformat_minor": 5 }