m-thesis-introduction/simulations/04_recover_timing_errors.ipynb

244 lines
20 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Recover timing errors from a list of antennas\n",
"\n",
"timing t_i, initial time y, \\\n",
"distance d(i) to receiver i from emit, \\\n",
"error s_i\n",
"\n",
"\n",
"t_a = y + d(a)/v + s_a \\\n",
"t_b = y + d(b)/v + s_b\n",
"\n",
"-----\n",
"\n",
"y = t_a - d(a)/v + s_a\n",
"\n",
"t_b = t_a - d(a)/v + s_a + d(b)/v + s_b \\\n",
" = t_a - d(a)/v + d(b)/v + s_b + s_a\n",
"\n",
"s_b - s_a = t_b - t_a + (d(b) - d(a))/v"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"rng = np.random.default_rng(12345)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"N = 50\n",
"D = 2\n",
"emit_location = rng.random((1, D))\n",
"velocity = 1\n",
"\n",
"\n",
"def distance(x, y = emit_location):\n",
" return np.sqrt( np.sum((x - y)**2, axis=-1) )\n",
"\n",
"actual_err_timings = 2 * rng.random(N) - 1\n",
"if not True:\n",
" # undo timing errors\n",
" actual_err_timings = np.zeros_like(actual_err_timings)\n",
"\n",
"actual_locations = rng.random((N, D))\n",
"\n",
"actual_timings = distance(actual_locations)/velocity"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# Create data to work with\n",
"timings = actual_timings + actual_err_timings\n",
"\n",
"## use the first number as reference\n",
"ref_timing = timings[0]\n",
"timings = timings\n",
"\n",
"ref_err_timing = actual_err_timings[0]\n",
"err_timings = actual_err_timings\n",
"\n",
"ref_location = actual_locations[0]\n",
"locations = actual_locations"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" \t Timing \t Error \t Location\n",
"0 \t 1.2114015836686018 \t 0.7973654573327341 \t [0.61682898 0.17632632]\n",
"1 \t 0.8223537613300713 \t 0.6762546707509746 \t [0.30438839 0.44088681]\n",
"2 \t 0.5164764930422616 \t 0.391109550601909 \t [0.15020234 0.21792886]\n",
"3 \t 0.626893985846481 \t 0.33281392786638453 \t [0.47433312 0.47636886]\n",
"4 \t 0.632169930455275 \t 0.5983087535871898 \t [0.25523235 0.29756527]\n",
"5 \t 0.2631030324439694 \t 0.18673418560371335 \t [0.27906712 0.26057921]\n",
"6 \t 0.9488374167867456 \t 0.6727560440146213 \t [0.48276159 0.21197904]\n",
"7 \t 1.2192047533568204 \t 0.9418028652699372 \t [0.4956306 0.24626133]\n",
"8 \t 0.8744783753275451 \t 0.248245714629571 \t [0.83848265 0.18013059]\n",
"9 \t 1.5986254396525794 \t 0.9488811518333182 \t [0.86215629 0.17829944]\n",
"10 \t 1.267555999078216 \t 0.6672374531003724 \t [0.75053133 0.6111204 ]\n",
"---\n",
"Ref: \t 1.2114015836686018 \t 0.7973654573327341 \t [0.61682898 0.17632632]\n"
]
},
{
"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": [
"# show data\n",
"N_clip = min(N, 10)\n",
"print(\" \", \"\\t\", \"Timing \", \"\\t\", \"Error \", \"\\t\", \"Location\")\n",
"for i, _ in enumerate(timings):\n",
" print(i, \"\\t\", timings[i], \"\\t\", err_timings[i], \"\\t\", locations[i])\n",
" if i > N_clip - 1:\n",
" break\n",
"print('---')\n",
"print(\"Ref:\", \"\\t\", ref_timing, \"\\t\", ref_err_timing, \"\\t\", ref_location)\n",
"\n",
"# plot\n",
"if True:\n",
" fig, ax = plt.subplots()\n",
" ax.plot(distance(locations, 0), actual_timings, 'o', label='actual')\n",
" ax.plot(distance(locations, 0), timings, 'o', label='with errors' )\n",
" ax.set_xlabel(\"Distance\")\n",
" ax.set_ylabel(\"Timing\")\n",
" ax.legend()\n",
" plt.show();"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Clipped to [:10]:\n",
"[ 0. -0.26793704 -0.28866918 -0.11995607 -0.38017495 -0.33766728\n",
" -0.13795475 -0.13663424 0.21219653 0.23570816]\n",
"[ 0. -0.38904782 -0.69492509 -0.5845076 -0.57923165 -0.94829855\n",
" -0.26256417 0.00780317 -0.33692321 0.38722386]\n",
"---- + \n",
"Calc [ 0. -0.12111079 -0.40625591 -0.46455153 -0.1990567 -0.61063127\n",
" -0.12460941 0.14443741 -0.54911974 0.15151569]\n",
"---------------\n",
"Correct result: True\n"
]
}
],
"source": [
"# s_b - s_a = t_b - t_a - (d(b) - d(a))/v\n",
"\n",
"calc_err_timings = timings - ref_timing - (distance(locations) - distance(ref_location))/velocity\n",
"\n",
"N_clip = min(N, 10)\n",
"\n",
"print(\"Clipped to [:{}]:\".format(N_clip))\n",
"print((distance(locations) - distance(ref_location))[:N_clip])\n",
"print((timings - ref_timing)[:N_clip])\n",
"print('---- + ')\n",
"\n",
"print(\"Calc\", calc_err_timings[:N_clip])\n",
"\n",
"print('---'*5)\n",
"print(\"Correct result:\", np.allclose(calc_err_timings + ref_err_timing, actual_err_timings))\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"---------------\n",
"Actual error: [0.79736546 0.67625467 0.39110955 0.33281393 0.59830875 0.18673419\n",
" 0.67275604 0.94180287 0.24824571 0.94888115 0.66723745 0.09589794\n",
" 0.44183967 0.88647992 0.6974535 0.32647286 0.73392816 0.22013496\n",
" 0.08159457 0.1598956 0.34010018 0.46519315 0.26642103 0.8157764\n",
" 0.19329439 0.12946908 0.09166475 0.59856801 0.8547419 0.60162124\n",
" 0.93198836 0.72478136 0.86055132 0.9293378 0.54618601 0.93767296\n",
" 0.49498794 0.27377318 0.45177871 0.66503892 0.33089093 0.90345401\n",
" 0.25707418 0.33982834 0.2588534 0.35544648 0.00502233 0.62860454\n",
" 0.28238271 0.06808769]\n",
"Calc+ref error: [0.79736546 0.67625467 0.39110955 0.33281393 0.59830875 0.18673419\n",
" 0.67275604 0.94180287 0.24824571 0.94888115 0.66723745 0.09589794\n",
" 0.44183967 0.88647992 0.6974535 0.32647286 0.73392816 0.22013496\n",
" 0.08159457 0.1598956 0.34010018 0.46519315 0.26642103 0.8157764\n",
" 0.19329439 0.12946908 0.09166475 0.59856801 0.8547419 0.60162124\n",
" 0.93198836 0.72478136 0.86055132 0.9293378 0.54618601 0.93767296\n",
" 0.49498794 0.27377318 0.45177871 0.66503892 0.33089093 0.90345401\n",
" 0.25707418 0.33982834 0.2588534 0.35544648 0.00502233 0.62860454\n",
" 0.28238271 0.06808769]\n"
]
}
],
"source": [
"if True:\n",
" print('---'*5)\n",
" print(\"Actual error:\", actual_err_timings)\n",
" print(\"Calc+ref error:\", calc_err_timings + ref_err_timing)"
]
}
],
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}