From 134d9f56ab700dc8fb5d33623d2e7cfc7fda6003 Mon Sep 17 00:00:00 2001 From: jaseg Date: Mon, 17 Feb 2020 11:05:43 +0000 Subject: Add MLE decoder, yields good performance even for very low signal levels --- lab-windows/dsss_experiments.ipynb | 750 ++++++++++++++++++++++++++++++++++--- 1 file changed, 693 insertions(+), 57 deletions(-) diff --git a/lab-windows/dsss_experiments.ipynb b/lab-windows/dsss_experiments.ipynb index 9566edf..d11e02e 100644 --- a/lab-windows/dsss_experiments.ipynb +++ b/lab-windows/dsss_experiments.ipynb @@ -10,6 +10,9 @@ "import numpy as np\n", "from scipy import signal as sig\n", "import struct\n", + "import random\n", + "import ipywidgets\n", + "import itertools\n", "\n", "import colorednoise\n", "\n", @@ -63,13 +66,13 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2450440508db4069b3df05fa08346b39", + "model_id": "a4f8421f05544016854b22a49dbc3698", "version_major": 2, "version_minor": 0 }, @@ -90,10 +93,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 16, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -105,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -120,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -134,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -147,7 +150,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "750255b26cc74aa0974d288fda4c7142", + "model_id": "c99513c0fb7f4b138367186127e379cf", "version_major": 2, "version_minor": 0 }, @@ -168,10 +171,10 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 19, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -184,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -197,7 +200,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "996e7034b52d47409ad4548c354b72bd", + "model_id": "93658d824ced42e5b1107501398234b4", "version_major": 2, "version_minor": 0 }, @@ -219,10 +222,10 @@ { "data": { "text/plain": [ - "(2.0, 1.0490216904842018)" + "(2.0, 0.944245383185962)" ] }, - "execution_count": 20, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -266,7 +269,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -286,23 +289,23 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "(63,) (63,)\n", - "(63,) (63,)\n", - "(63,) (63,)\n", - "(63,) (63,)\n" + "(31,) (31,)\n", + "(31,) (31,)\n", + "(31,) (31,)\n", + "(31,) (31,)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "abdce9c2d307402f8578eb83d9ce9b79", + "model_id": "97fba8da8bd74c1aa46c4fabb9e68088", "version_major": 2, "version_minor": 0 }, @@ -316,20 +319,23 @@ { "data": { "text/plain": [ - "(0.002, 0.012591236)" + "(0.001, 0.010294564)" ] }, - "execution_count": 22, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "decimation = 10\n", - "signal_amplitude = 2.0e-3\n", - "nbits = 6\n", + "signal_amplitude = 1.0e-3\n", + "nbits = 5\n", "\n", - "foo = np.repeat(modulate(np.array([0, 1, 0, 0, 1, 1, 1, 0]), nbits) * 2.0 - 1, decimation) * signal_amplitude\n", + "#test_data = np.random.randint(0, 2, 100)\n", + "test_data = np.array([0, 1, 0, 0, 1, 1, 1, 0])\n", + "\n", + "foo = np.repeat(modulate(test_data, nbits) * 2.0 - 1, decimation) * signal_amplitude\n", "noise = np.resize(mains_noise, len(foo))\n", "\n", "sosh = sig.butter(3, 0.01, btype='highpass', output='sos', fs=decimation)\n", @@ -385,13 +391,13 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8feea8e305004d33a39f2541a59a0ffa", + "model_id": "1c8e27744cd0482782fa0d65ed550ba6", "version_major": 2, "version_minor": 0 }, @@ -412,10 +418,10 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 23, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -435,13 +441,13 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "01df90b27d57470d9216ae9c549413c8", + "model_id": "483d7acbb9604c9c93533d342d6068ad", "version_major": 2, "version_minor": 0 }, @@ -462,10 +468,10 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 24, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -492,21 +498,13 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 24, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":5: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`).\n", - " fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(12, 12))\n" - ] - }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "183f086844054252bc8ec77f7b99abfc", + "model_id": "61142286f07245fea6b3d080bd6d963b", "version_major": 2, "version_minor": 0 }, @@ -520,7 +518,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "30db7a9c75834d64a31bf8e0fb5f5911", + "model_id": "591cc5914cfd4812bad96502207bc01f", "version_major": 2, "version_minor": 0 }, @@ -531,21 +529,605 @@ "metadata": {}, "output_type": "display_data" }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " candidates for 32.5, -0.30796614799228145:\n", + " 7.6945 309.50 -0.51\n", + " 4.9788 419.50 -0.41\n", + " 2.4515 211.00 0.38\n", + " 1.8240 158.50 0.35\n", + " candidates for 158.5, 0.34903632894813835:\n", + " 5.6264 419.50 -0.41\n", + " 2.5562 618.50 0.54\n", + " 2.1462 309.50 -0.51\n", + " 1.3863 211.00 0.38\n", + " candidates for 211.0, 0.3800947813243649:\n", + " 3.9276 618.50 0.54\n", + " 3.0726 419.50 -0.41\n", + " 1.6974 309.50 -0.51\n", + " candidates for 309.5, -0.5053314278026041:\n", + " 29.3614 618.50 0.54\n", + " 1.7265 419.50 -0.41\n", + " candidates for 419.5, -0.40531218065962255:\n", + " 4.0528 823.00 -0.44\n", + " 2.9151 618.50 0.54\n", + "chain candidates:\n", + " [(29.36136019270347, [('309.50', '-0.51'), ('618.50', '0.54')])]\n", + " [(7.69452617901758, [('32.50', '-0.31'), ('309.50', '-0.51')])]\n", + " [(5.626384903889135, [('158.50', '0.35'), ('419.50', '-0.41')])]\n", + " [(4.978775493314884, [('32.50', '-0.31'), ('419.50', '-0.41')])]\n", + " [(4.052840585124125, [('419.50', '-0.41'), ('823.00', '-0.44')])]\n", + " [(3.92759395893727, [('211.00', '0.38'), ('618.50', '0.54')])]\n", + " [(3.0726112472804843, [('211.00', '0.38'), ('419.50', '-0.41')])]\n", + " [(2.9150792009679662, [('419.50', '-0.41'), ('618.50', '0.54')])]\n", + " [(2.5561653875086985, [('158.50', '0.35'), ('618.50', '0.54')])]\n", + " [(2.451531489602112, [('32.50', '-0.31'), ('211.00', '0.38')])]\n", + " [(2.1461568381616574, [('158.50', '0.35'), ('309.50', '-0.51')])]\n", + " [(1.726465614139335, [('309.50', '-0.51'), ('419.50', '-0.41')])]\n", + " [(1.6973609734949815, [('211.00', '0.38'), ('309.50', '-0.51')])]\n", + " candidates for 618.5, 0.540902203588826:\n", + " 35.8652 929.50 -0.62\n", + " 4.0145 1022.50 0.41\n", + " 3.0106 1055.00 0.53\n", + " 2.9911 823.00 -0.44\n", + " candidates for 309.5, -0.5053314278026041:\n", + " 29.3614 618.50 0.54\n", + " 1.7265 419.50 -0.41\n", + " candidates for 419.5, -0.40531218065962255:\n", + " 4.0528 823.00 -0.44\n", + " 2.9151 618.50 0.54\n", + " candidates for 419.5, -0.40531218065962255:\n", + " 4.0528 823.00 -0.44\n", + " 2.9151 618.50 0.54\n", + " candidates for 823.0, -0.4410105115656168:\n", + " 30.6933 1153.50 -0.43\n", + " 3.9002 1055.00 0.53\n", + " 3.5615 1240.50 -0.56\n", + " 2.8605 1022.50 0.41\n", + " 1.8085 929.50 -0.62\n", + " candidates for 618.5, 0.540902203588826:\n", + " 35.8652 929.50 -0.62\n", + " 4.0145 1022.50 0.41\n", + " 3.0106 1055.00 0.53\n", + " 2.9911 823.00 -0.44\n", + " candidates for 419.5, -0.40531218065962255:\n", + " 4.0528 823.00 -0.44\n", + " 2.9151 618.50 0.54\n", + " candidates for 618.5, 0.540902203588826:\n", + " 35.8652 929.50 -0.62\n", + " 4.0145 1022.50 0.41\n", + " 3.0106 1055.00 0.53\n", + " 2.9911 823.00 -0.44\n", + " candidates for 618.5, 0.540902203588826:\n", + " 35.8652 929.50 -0.62\n", + " 4.0145 1022.50 0.41\n", + " 3.0106 1055.00 0.53\n", + " 2.9911 823.00 -0.44\n", + " candidates for 211.0, 0.3800947813243649:\n", + " 3.9276 618.50 0.54\n", + " 3.0726 419.50 -0.41\n", + " 1.6974 309.50 -0.51\n", + "chain candidates:\n", + " [(35.86521493289496, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62')])]\n", + " [(35.86521493289496, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62')])]\n", + " [(35.86521493289496, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62')])]\n", + " [(35.86521493289496, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62')])]\n", + " [(30.693332126158438, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43')])]\n", + " [(29.36136019270347, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54')])]\n", + " [(4.052840585124125, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44')])]\n", + " [(4.052840585124125, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44')])]\n", + " [(4.052840585124125, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44')])]\n", + " [(4.014470627816998, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41')])]\n", + " [(4.014470627816998, [('309.50', '-0.51'), ('618.50', '0.54'), ('1022.50', '0.41')])]\n", + " [(4.014470627816998, [('211.00', '0.38'), ('618.50', '0.54'), ('1022.50', '0.41')])]\n", + " [(4.014470627816998, [('158.50', '0.35'), ('618.50', '0.54'), ('1022.50', '0.41')])]\n", + " [(3.92759395893727, [('32.50', '-0.31'), ('211.00', '0.38'), ('618.50', '0.54')])]\n", + " [(3.900204331202999, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1055.00', '0.53')])]\n", + " [(3.5614986168976417, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1240.50', '-0.56')])]\n", + " [(3.0726112472804843, [('32.50', '-0.31'), ('211.00', '0.38'), ('419.50', '-0.41')])]\n", + " [(3.0106218107191913, [('419.50', '-0.41'), ('618.50', '0.54'), ('1055.00', '0.53')])]\n", + " [(3.0106218107191913, [('309.50', '-0.51'), ('618.50', '0.54'), ('1055.00', '0.53')])]\n", + " [(3.0106218107191913, [('211.00', '0.38'), ('618.50', '0.54'), ('1055.00', '0.53')])]\n", + " [(3.0106218107191913, [('158.50', '0.35'), ('618.50', '0.54'), ('1055.00', '0.53')])]\n", + " [(2.9150792009679662, [('211.00', '0.38'), ('419.50', '-0.41'), ('618.50', '0.54')])]\n", + " [(2.9150792009679662, [('158.50', '0.35'), ('419.50', '-0.41'), ('618.50', '0.54')])]\n", + " [(2.9150792009679662, [('32.50', '-0.31'), ('419.50', '-0.41'), ('618.50', '0.54')])]\n", + " [(1.726465614139335, [('32.50', '-0.31'), ('309.50', '-0.51'), ('419.50', '-0.41')])]\n", + " [(1.6973609734949815, [('32.50', '-0.31'), ('211.00', '0.38'), ('309.50', '-0.51')])]\n", + " candidates for 929.5, -0.6193187546786915:\n", + " 35.8350 1240.50 -0.56\n", + " 3.5505 1153.50 -0.43\n", + " 3.0349 1366.00 0.58\n", + " 1.9091 1055.00 0.53\n", + " 1.6146 1022.50 0.41\n", + " candidates for 929.5, -0.6193187546786915:\n", + " 35.8350 1240.50 -0.56\n", + " 3.5505 1153.50 -0.43\n", + " 3.0349 1366.00 0.58\n", + " 1.9091 1055.00 0.53\n", + " 1.6146 1022.50 0.41\n", + " candidates for 929.5, -0.6193187546786915:\n", + " 35.8350 1240.50 -0.56\n", + " 3.5505 1153.50 -0.43\n", + " 3.0349 1366.00 0.58\n", + " 1.9091 1055.00 0.53\n", + " 1.6146 1022.50 0.41\n", + " candidates for 929.5, -0.6193187546786915:\n", + " 35.8350 1240.50 -0.56\n", + " 3.5505 1153.50 -0.43\n", + " 3.0349 1366.00 0.58\n", + " 1.9091 1055.00 0.53\n", + " 1.6146 1022.50 0.41\n", + " candidates for 1153.5, -0.4342832999357559:\n", + " 6.9736 1426.00 -0.47\n", + " 4.5113 1549.50 0.60\n", + " 3.2649 1366.00 0.58\n", + " 1.6528 1240.50 -0.56\n", + " candidates for 618.5, 0.540902203588826:\n", + " 35.8652 929.50 -0.62\n", + " 4.0145 1022.50 0.41\n", + " 3.0106 1055.00 0.53\n", + " 2.9911 823.00 -0.44\n", + " candidates for 823.0, -0.4410105115656168:\n", + " 30.6933 1153.50 -0.43\n", + " 3.9002 1055.00 0.53\n", + " 3.5615 1240.50 -0.56\n", + " 2.8605 1022.50 0.41\n", + " 1.8085 929.50 -0.62\n", + " candidates for 823.0, -0.4410105115656168:\n", + " 30.6933 1153.50 -0.43\n", + " 3.9002 1055.00 0.53\n", + " 3.5615 1240.50 -0.56\n", + " 2.8605 1022.50 0.41\n", + " 1.8085 929.50 -0.62\n", + " candidates for 823.0, -0.4410105115656168:\n", + " 30.6933 1153.50 -0.43\n", + " 3.9002 1055.00 0.53\n", + " 3.5615 1240.50 -0.56\n", + " 2.8605 1022.50 0.41\n", + " 1.8085 929.50 -0.62\n", + " candidates for 1022.5, 0.4098936365863757:\n", + " 13.9051 1366.00 0.58\n", + " 4.0691 1426.00 -0.47\n", + " 3.4167 1240.50 -0.56\n", + " 1.9103 1153.50 -0.43\n", + " 1.3769 1055.00 0.53\n", + "chain candidates:\n", + " [(35.86521493289496, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62')])]\n", + " [(35.835002890401974, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56')])]\n", + " [(35.835002890401974, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56')])]\n", + " [(35.835002890401974, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56')])]\n", + " [(35.835002890401974, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56')])]\n", + " [(30.693332126158438, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43')])]\n", + " [(30.693332126158438, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43')])]\n", + " [(30.693332126158438, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43')])]\n", + " [(13.905133395544146, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58')])]\n", + " [(6.9736079278832195, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47')])]\n", + " [(4.511327725367169, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1549.50', '0.60')])]\n", + " [(4.069101151961379, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1426.00', '-0.47')])]\n", + " [(4.014470627816998, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('1022.50', '0.41')])]\n", + " [(3.900204331202999, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1055.00', '0.53')])]\n", + " [(3.900204331202999, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1055.00', '0.53')])]\n", + " [(3.900204331202999, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1055.00', '0.53')])]\n", + " [(3.5614986168976417, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1240.50', '-0.56')])]\n", + " [(3.5614986168976417, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1240.50', '-0.56')])]\n", + " [(3.5614986168976417, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1240.50', '-0.56')])]\n", + " [(3.550474983301211, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1153.50', '-0.43')])]\n", + " [(3.550474983301211, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1153.50', '-0.43')])]\n", + " [(3.550474983301211, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1153.50', '-0.43')])]\n", + " [(3.550474983301211, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1153.50', '-0.43')])]\n", + " [(3.4167022368071445, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1240.50', '-0.56')])]\n", + " [(3.2648563049949213, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1366.00', '0.58')])]\n", + " [(3.0348932348282385, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1366.00', '0.58')])]\n", + " [(3.0348932348282385, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1366.00', '0.58')])]\n", + " [(3.0348932348282385, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1366.00', '0.58')])]\n", + " [(3.0348932348282385, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1366.00', '0.58')])]\n", + " [(3.0106218107191913, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('1055.00', '0.53')])]\n", + " candidates for 929.5, -0.6193187546786915:\n", + " 35.8350 1240.50 -0.56\n", + " 3.5505 1153.50 -0.43\n", + " 3.0349 1366.00 0.58\n", + " 1.9091 1055.00 0.53\n", + " 1.6146 1022.50 0.41\n", + " candidates for 1240.5, -0.5588946696927191:\n", + " 29.3917 1549.50 0.60\n", + " 2.6159 1426.00 -0.47\n", + " 2.2893 1716.00 0.46\n", + " 1.9334 1366.00 0.58\n", + " candidates for 1240.5, -0.5588946696927191:\n", + " 29.3917 1549.50 0.60\n", + " 2.6159 1426.00 -0.47\n", + " 2.2893 1716.00 0.46\n", + " 1.9334 1366.00 0.58\n", + " candidates for 1240.5, -0.5588946696927191:\n", + " 29.3917 1549.50 0.60\n", + " 2.6159 1426.00 -0.47\n", + " 2.2893 1716.00 0.46\n", + " 1.9334 1366.00 0.58\n", + " candidates for 1240.5, -0.5588946696927191:\n", + " 29.3917 1549.50 0.60\n", + " 2.6159 1426.00 -0.47\n", + " 2.2893 1716.00 0.46\n", + " 1.9334 1366.00 0.58\n", + " candidates for 1153.5, -0.4342832999357559:\n", + " 6.9736 1426.00 -0.47\n", + " 4.5113 1549.50 0.60\n", + " 3.2649 1366.00 0.58\n", + " 1.6528 1240.50 -0.56\n", + " candidates for 1153.5, -0.4342832999357559:\n", + " 6.9736 1426.00 -0.47\n", + " 4.5113 1549.50 0.60\n", + " 3.2649 1366.00 0.58\n", + " 1.6528 1240.50 -0.56\n", + " candidates for 1153.5, -0.4342832999357559:\n", + " 6.9736 1426.00 -0.47\n", + " 4.5113 1549.50 0.60\n", + " 3.2649 1366.00 0.58\n", + " 1.6528 1240.50 -0.56\n", + " candidates for 1366.0, 0.5762242378968192:\n", + " 10.8981 1716.00 0.46\n", + " 2.6451 1549.50 0.60\n", + " 1.4675 1426.00 -0.47\n", + " candidates for 1426.0, -0.47353164524012403:\n", + " 10.8981 1716.00 0.46\n", + " 3.0884 1860.50 0.59\n", + " 1.9293 1549.50 0.60\n", + "chain candidates:\n", + " [(35.835002890401974, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56')])]\n", + " [(29.391710500486752, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60')])]\n", + " [(29.391710500486752, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60')])]\n", + " [(29.391710500486752, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60')])]\n", + " [(29.391710500486752, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60')])]\n", + " [(10.8980671118677, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46')])]\n", + " [(10.8980671118677, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1716.00', '0.46')])]\n", + " [(6.9736079278832195, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47')])]\n", + " [(6.9736079278832195, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47')])]\n", + " [(6.9736079278832195, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47')])]\n", + " [(4.511327725367169, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1549.50', '0.60')])]\n", + " [(4.511327725367169, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1549.50', '0.60')])]\n", + " [(4.511327725367169, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1549.50', '0.60')])]\n", + " [(3.550474983301211, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1153.50', '-0.43')])]\n", + " [(3.2648563049949213, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1366.00', '0.58')])]\n", + " [(3.2648563049949213, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1366.00', '0.58')])]\n", + " [(3.2648563049949213, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1366.00', '0.58')])]\n", + " [(3.088380538661272, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1860.50', '0.59')])]\n", + " [(3.0348932348282385, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1366.00', '0.58')])]\n", + " [(2.645123753900041, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1549.50', '0.60')])]\n", + " [(2.615947978753891, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1426.00', '-0.47')])]\n", + " [(2.615947978753891, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1426.00', '-0.47')])]\n", + " [(2.615947978753891, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1426.00', '-0.47')])]\n", + " [(2.615947978753891, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1426.00', '-0.47')])]\n", + " [(2.289278258705857, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1716.00', '0.46')])]\n", + " [(2.289278258705857, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1716.00', '0.46')])]\n", + " [(2.289278258705857, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1716.00', '0.46')])]\n", + " [(2.289278258705857, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1716.00', '0.46')])]\n", + " [(1.9293001373130654, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1549.50', '0.60')])]\n", + " [(1.4675350533892928, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1426.00', '-0.47')])]\n", + " candidates for 1240.5, -0.5588946696927191:\n", + " 29.3917 1549.50 0.60\n", + " 2.6159 1426.00 -0.47\n", + " 2.2893 1716.00 0.46\n", + " 1.9334 1366.00 0.58\n", + " candidates for 1549.5, 0.6016028191553928:\n", + " 35.8492 1860.50 0.59\n", + " 3.3339 1972.50 0.45\n", + " 2.3161 1716.00 0.46\n", + " candidates for 1549.5, 0.6016028191553928:\n", + " 35.8492 1860.50 0.59\n", + " 3.3339 1972.50 0.45\n", + " 2.3161 1716.00 0.46\n", + " candidates for 1549.5, 0.6016028191553928:\n", + " 35.8492 1860.50 0.59\n", + " 3.3339 1972.50 0.45\n", + " 2.3161 1716.00 0.46\n", + " candidates for 1549.5, 0.6016028191553928:\n", + " 35.8492 1860.50 0.59\n", + " 3.3339 1972.50 0.45\n", + " 2.3161 1716.00 0.46\n", + " candidates for 1716.0, 0.462800890402067:\n", + " 6.1740 2089.50 0.39\n", + " 5.2664 1972.50 0.45\n", + " 2.8998 2156.50 -0.49\n", + " 2.1170 1860.50 0.59\n", + " candidates for 1716.0, 0.462800890402067:\n", + " 6.1740 2089.50 0.39\n", + " 5.2664 1972.50 0.45\n", + " 2.8998 2156.50 -0.49\n", + " 2.1170 1860.50 0.59\n", + " candidates for 1426.0, -0.47353164524012403:\n", + " 10.8981 1716.00 0.46\n", + " 3.0884 1860.50 0.59\n", + " 1.9293 1549.50 0.60\n", + " candidates for 1426.0, -0.47353164524012403:\n", + " 10.8981 1716.00 0.46\n", + " 3.0884 1860.50 0.59\n", + " 1.9293 1549.50 0.60\n", + " candidates for 1426.0, -0.47353164524012403:\n", + " 10.8981 1716.00 0.46\n", + " 3.0884 1860.50 0.59\n", + " 1.9293 1549.50 0.60\n", + "chain candidates:\n", + " [(35.84917626888937, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59')])]\n", + " [(35.84917626888937, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59')])]\n", + " [(35.84917626888937, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59')])]\n", + " [(35.84917626888937, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59')])]\n", + " [(29.391710500486752, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60')])]\n", + " [(10.8980671118677, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46')])]\n", + " [(10.8980671118677, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46')])]\n", + " [(10.8980671118677, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46')])]\n", + " [(6.173953539976651, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39')])]\n", + " [(6.173953539976651, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1716.00', '0.46'), ('2089.50', '0.39')])]\n", + " [(5.266444098570901, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('1972.50', '0.45')])]\n", + " [(5.266444098570901, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1716.00', '0.46'), ('1972.50', '0.45')])]\n", + " [(3.333870136335599, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1972.50', '0.45')])]\n", + " [(3.333870136335599, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1972.50', '0.45')])]\n", + " [(3.333870136335599, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1972.50', '0.45')])]\n", + " [(3.333870136335599, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1972.50', '0.45')])]\n", + " [(3.088380538661272, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1860.50', '0.59')])]\n", + " [(3.088380538661272, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1860.50', '0.59')])]\n", + " [(3.088380538661272, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1860.50', '0.59')])]\n", + " [(2.8998303227280857, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2156.50', '-0.49')])]\n", + " [(2.8998303227280857, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1716.00', '0.46'), ('2156.50', '-0.49')])]\n", + " [(2.615947978753891, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1426.00', '-0.47')])]\n", + " [(2.3160909989469616, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1716.00', '0.46')])]\n", + " [(2.3160909989469616, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1716.00', '0.46')])]\n", + " [(2.3160909989469616, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1716.00', '0.46')])]\n", + " [(2.3160909989469616, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1716.00', '0.46')])]\n", + " [(2.289278258705857, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1716.00', '0.46')])]\n", + " [(1.9293001373130654, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1549.50', '0.60')])]\n", + " [(1.9293001373130654, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1549.50', '0.60')])]\n", + " [(1.9293001373130654, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1549.50', '0.60')])]\n", + " candidates for 1860.5, 0.587241426667523:\n", + " 13.5776 2156.50 -0.49\n", + " 4.6432 2252.00 0.34\n", + " 3.7091 2089.50 0.39\n", + " 1.7655 1972.50 0.45\n", + " candidates for 1860.5, 0.587241426667523:\n", + " 13.5776 2156.50 -0.49\n", + " 4.6432 2252.00 0.34\n", + " 3.7091 2089.50 0.39\n", + " 1.7655 1972.50 0.45\n", + " candidates for 1860.5, 0.587241426667523:\n", + " 13.5776 2156.50 -0.49\n", + " 4.6432 2252.00 0.34\n", + " 3.7091 2089.50 0.39\n", + " 1.7655 1972.50 0.45\n", + " candidates for 1860.5, 0.587241426667523:\n", + " 13.5776 2156.50 -0.49\n", + " 4.6432 2252.00 0.34\n", + " 3.7091 2089.50 0.39\n", + " 1.7655 1972.50 0.45\n", + " candidates for 1549.5, 0.6016028191553928:\n", + " 35.8492 1860.50 0.59\n", + " 3.3339 1972.50 0.45\n", + " 2.3161 1716.00 0.46\n", + " candidates for 1716.0, 0.462800890402067:\n", + " 6.1740 2089.50 0.39\n", + " 5.2664 1972.50 0.45\n", + " 2.8998 2156.50 -0.49\n", + " 2.1170 1860.50 0.59\n", + " candidates for 1716.0, 0.462800890402067:\n", + " 6.1740 2089.50 0.39\n", + " 5.2664 1972.50 0.45\n", + " 2.8998 2156.50 -0.49\n", + " 2.1170 1860.50 0.59\n", + " candidates for 1716.0, 0.462800890402067:\n", + " 6.1740 2089.50 0.39\n", + " 5.2664 1972.50 0.45\n", + " 2.8998 2156.50 -0.49\n", + " 2.1170 1860.50 0.59\n", + " candidates for 2089.5, 0.3852902575233996:\n", + " 8.3442 2370.50 -0.28\n", + " 4.7167 2480.50 -0.42\n", + " 2.1995 2252.00 0.34\n", + " 1.5091 2156.50 -0.49\n", + " candidates for 2089.5, 0.3852902575233996:\n", + " 8.3442 2370.50 -0.28\n", + " 4.7167 2480.50 -0.42\n", + " 2.1995 2252.00 0.34\n", + " 1.5091 2156.50 -0.49\n", + "chain candidates:\n", + " [(35.84917626888937, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59')])]\n", + " [(13.577561996310388, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49')])]\n", + " [(13.577561996310388, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49')])]\n", + " [(13.577561996310388, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49')])]\n", + " [(13.577561996310388, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49')])]\n", + " [(8.34422970205904, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2370.50', '-0.28')])]\n", + " [(8.34422970205904, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2370.50', '-0.28')])]\n", + " [(6.173953539976651, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39')])]\n", + " [(6.173953539976651, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39')])]\n", + " [(6.173953539976651, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39')])]\n", + " [(5.266444098570901, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('1972.50', '0.45')])]\n", + " [(5.266444098570901, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('1972.50', '0.45')])]\n", + " [(5.266444098570901, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('1972.50', '0.45')])]\n", + " [(4.716677612654047, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2480.50', '-0.42')])]\n", + " [(4.716677612654047, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2480.50', '-0.42')])]\n", + " [(4.643240934821138, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2252.00', '0.34')])]\n", + " [(4.643240934821138, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2252.00', '0.34')])]\n", + " [(4.643240934821138, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2252.00', '0.34')])]\n", + " [(4.643240934821138, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2252.00', '0.34')])]\n", + " [(3.7091286452452157, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2089.50', '0.39')])]\n", + " [(3.7091286452452157, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2089.50', '0.39')])]\n", + " [(3.7091286452452157, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2089.50', '0.39')])]\n", + " [(3.7091286452452157, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2089.50', '0.39')])]\n", + " [(3.333870136335599, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1972.50', '0.45')])]\n", + " [(2.8998303227280857, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2156.50', '-0.49')])]\n", + " [(2.8998303227280857, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2156.50', '-0.49')])]\n", + " [(2.8998303227280857, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2156.50', '-0.49')])]\n", + " [(2.3160909989469616, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1716.00', '0.46')])]\n", + " [(2.1994624910426936, [('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2252.00', '0.34')])]\n", + " [(2.1994624910426936, [('419.50', '-0.41'), ('618.50', '0.54'), ('1022.50', '0.41'), ('1366.00', '0.58'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2252.00', '0.34')])]\n", + " candidates for 1860.5, 0.587241426667523:\n", + " 13.5776 2156.50 -0.49\n", + " 4.6432 2252.00 0.34\n", + " 3.7091 2089.50 0.39\n", + " 1.7655 1972.50 0.45\n", + " candidates for 2156.5, -0.4884573259540951:\n", + " 80.2096 2480.50 -0.42\n", + " 3.1580 2370.50 -0.28\n", + " 2.6215 2605.50 0.28\n", + " 1.5931 2252.00 0.34\n", + " candidates for 2156.5, -0.4884573259540951:\n", + " 80.2096 2480.50 -0.42\n", + " 3.1580 2370.50 -0.28\n", + " 2.6215 2605.50 0.28\n", + " 1.5931 2252.00 0.34\n", + " candidates for 2156.5, -0.4884573259540951:\n", + " 80.2096 2480.50 -0.42\n", + " 3.1580 2370.50 -0.28\n", + " 2.6215 2605.50 0.28\n", + " 1.5931 2252.00 0.34\n", + " candidates for 2156.5, -0.4884573259540951:\n", + " 80.2096 2480.50 -0.42\n", + " 3.1580 2370.50 -0.28\n", + " 2.6215 2605.50 0.28\n", + " 1.5931 2252.00 0.34\n", + " candidates for 2370.5, -0.2782029938616636:\n", + " 8.4892 2728.50 -0.14\n", + " 8.1897 2651.00 -0.18\n", + " 4.5779 2761.50 0.14\n", + " 3.9056 2605.50 0.28\n", + " 1.7334 2480.50 -0.42\n", + " candidates for 2370.5, -0.2782029938616636:\n", + " 8.4892 2728.50 -0.14\n", + " 8.1897 2651.00 -0.18\n", + " 4.5779 2761.50 0.14\n", + " 3.9056 2605.50 0.28\n", + " 1.7334 2480.50 -0.42\n", + " candidates for 2089.5, 0.3852902575233996:\n", + " 8.3442 2370.50 -0.28\n", + " 4.7167 2480.50 -0.42\n", + " 2.1995 2252.00 0.34\n", + " 1.5091 2156.50 -0.49\n", + " candidates for 2089.5, 0.3852902575233996:\n", + " 8.3442 2370.50 -0.28\n", + " 4.7167 2480.50 -0.42\n", + " 2.1995 2252.00 0.34\n", + " 1.5091 2156.50 -0.49\n", + " candidates for 2089.5, 0.3852902575233996:\n", + " 8.3442 2370.50 -0.28\n", + " 4.7167 2480.50 -0.42\n", + " 2.1995 2252.00 0.34\n", + " 1.5091 2156.50 -0.49\n", + "chain candidates:\n", + " [(80.2096353591332, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2480.50', '-0.42')])]\n", + " [(80.2096353591332, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2480.50', '-0.42')])]\n", + " [(80.2096353591332, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2480.50', '-0.42')])]\n", + " [(80.2096353591332, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2480.50', '-0.42')])]\n", + " [(13.577561996310388, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49')])]\n", + " [(8.34422970205904, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2370.50', '-0.28')])]\n", + " [(8.34422970205904, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2370.50', '-0.28')])]\n", + " [(8.34422970205904, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2370.50', '-0.28')])]\n", + " [(4.716677612654047, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2480.50', '-0.42')])]\n", + " [(4.716677612654047, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2480.50', '-0.42')])]\n", + " [(4.716677612654047, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2480.50', '-0.42')])]\n", + " [(4.643240934821138, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2252.00', '0.34')])]\n", + " [(3.7091286452452157, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2089.50', '0.39')])]\n", + " [(3.1579694214591334, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2370.50', '-0.28')])]\n", + " [(3.1579694214591334, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2370.50', '-0.28')])]\n", + " [(3.1579694214591334, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2370.50', '-0.28')])]\n", + " [(3.1579694214591334, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2370.50', '-0.28')])]\n", + " [(2.6214860493499117, [('419.50', '-0.41'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2605.50', '0.28')])]\n", + " [(2.6214860493499117, [('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2605.50', '0.28')])]\n", + " [(2.6214860493499117, [('211.00', '0.38'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2605.50', '0.28')])]\n", + " [(2.6214860493499117, [('158.50', '0.35'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2605.50', '0.28')])]\n", + " [(2.1994624910426936, [('211.00', '0.38'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2252.00', '0.34')])]\n", + " [(2.1994624910426936, [('158.50', '0.35'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2252.00', '0.34')])]\n", + " [(2.1994624910426936, [('32.50', '-0.31'), ('419.50', '-0.41'), ('823.00', '-0.44'), ('1153.50', '-0.43'), ('1426.00', '-0.47'), ('1716.00', '0.46'), ('2089.50', '0.39'), ('2252.00', '0.34')])]\n", + " candidates for 2480.5, -0.41927071826584167:\n", + " 8.2759 2761.50 0.14\n", + " 4.5126 2728.50 -0.14\n", + " 2.2289 2651.00 -0.18\n", + " 1.7819 2605.50 0.28\n", + " candidates for 2480.5, -0.41927071826584167:\n", + " 8.2759 2761.50 0.14\n", + " 4.5126 2728.50 -0.14\n", + " 2.2289 2651.00 -0.18\n", + " 1.7819 2605.50 0.28\n", + " candidates for 2480.5, -0.41927071826584167:\n", + " 8.2759 2761.50 0.14\n", + " 4.5126 2728.50 -0.14\n", + " 2.2289 2651.00 -0.18\n", + " 1.7819 2605.50 0.28\n", + " candidates for 2480.5, -0.41927071826584167:\n", + " 8.2759 2761.50 0.14\n", + " 4.5126 2728.50 -0.14\n", + " 2.2289 2651.00 -0.18\n", + " 1.7819 2605.50 0.28\n", + " candidates for 2156.5, -0.4884573259540951:\n", + " 80.2096 2480.50 -0.42\n", + " 3.1580 2370.50 -0.28\n", + " 2.6215 2605.50 0.28\n", + " 1.5931 2252.00 0.34\n", + " candidates for 2370.5, -0.2782029938616636:\n", + " 8.4892 2728.50 -0.14\n", + " 8.1897 2651.00 -0.18\n", + " 4.5779 2761.50 0.14\n", + " 3.9056 2605.50 0.28\n", + " 1.7334 2480.50 -0.42\n", + " candidates for 2370.5, -0.2782029938616636:\n", + " 8.4892 2728.50 -0.14\n", + " 8.1897 2651.00 -0.18\n", + " 4.5779 2761.50 0.14\n", + " 3.9056 2605.50 0.28\n", + " 1.7334 2480.50 -0.42\n", + " candidates for 2370.5, -0.2782029938616636:\n", + " 8.4892 2728.50 -0.14\n", + " 8.1897 2651.00 -0.18\n", + " 4.5779 2761.50 0.14\n", + " 3.9056 2605.50 0.28\n", + " 1.7334 2480.50 -0.42\n", + " candidates for 2480.5, -0.41927071826584167:\n", + " 8.2759 2761.50 0.14\n", + " 4.5126 2728.50 -0.14\n", + " 2.2289 2651.00 -0.18\n", + " 1.7819 2605.50 0.28\n", + " candidates for 2480.5, -0.41927071826584167:\n", + " 8.2759 2761.50 0.14\n", + " 4.5126 2728.50 -0.14\n", + " 2.2289 2651.00 -0.18\n", + " 1.7819 2605.50 0.28\n", + "chain candidates:\n", + " [(80.2096353591332, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2480.50', '-0.42')])]\n", + " [(3.1579694214591334, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2370.50', '-0.28')])]\n", + " [(2.6214860493499117, [('32.50', '-0.31'), ('309.50', '-0.51'), ('618.50', '0.54'), ('929.50', '-0.62'), ('1240.50', '-0.56'), ('1549.50', '0.60'), ('1860.50', '0.59'), ('2156.50', '-0.49'), ('2605.50', '0.28')])]\n", + " candidates for 2480.5, -0.41927071826584167:\n", + " 8.2759 2761.50 0.14\n", + " 4.5126 2728.50 -0.14\n", + " 2.2289 2651.00 -0.18\n", + " 1.7819 2605.50 0.28\n", + " candidates for 2370.5, -0.2782029938616636:\n", + " 8.4892 2728.50 -0.14\n", + " 8.1897 2651.00 -0.18\n", + " 4.5779 2761.50 0.14\n", + " 3.9056 2605.50 0.28\n", + " 1.7334 2480.50 -0.42\n", + " candidates for 2605.5, 0.2817317886223028:\n", + " 2.0220 2761.50 0.14\n", + " 1.6925 2728.50 -0.14\n", + " 1.2542 2651.00 -0.18\n", + "chain candidates:\n" + ] + }, { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 49, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "threshold_factor = 5.0\n", + "threshold_factor = 2.0\n", + "power_avg_width = 1024\n", "\n", - "import ipywidgets\n", + "bit_period = (2**nbits) * decimation\n", + "peak_group_threshold = 0.1 * bit_period\n", "\n", "cor_an = cor1\n", "\n", @@ -573,27 +1155,81 @@ " fig.canvas.draw_idle()\n", "ipywidgets.interact(update)\n", "\n", - "import itertools\n", - "th = np.convolve(np.abs(cwt_res), np.ones((500,))/500, mode='same')\n", + "\n", + "th = np.convolve(np.abs(cwt_res), np.ones((power_avg_width,))/power_avg_width, mode='same')\n", "peaks = [ list(group) for val, group in itertools.groupby(enumerate(zip(th, cwt_res)), lambda elem: abs(elem[1][1]) > elem[1][0]*threshold_factor) if val ]\n", + "peak_group = []\n", "for group in peaks:\n", " pos = np.mean([idx for idx, _val in group])\n", " pol = np.mean([val for _idx, (_th, val) in group])\n", - " ax3.axvline(pos, color='red', alpha=0.5)\n", - " ax3.text(pos-20, 2.0, f'{0 if pol < 0 else 1}', horizontalalignment='right', verticalalignment='center', color='black')\n", " \n", + " if not peak_group or pos - peak_group[-1][1] > peak_group_threshold:\n", + " if peak_group:\n", + " peak_pos = peak_group[-1][3]\n", + " ax3.axvline(peak_pos, color='red', alpha=0.3)\n", + " #ax3.text(peak_pos-20, 2.0, f'{0 if pol < 0 else 1}', horizontalalignment='right', verticalalignment='center', color='black')\n", + " \n", + " peak_group.append((pos, pos, pol, pos))\n", + " #ax3.axvline(pos, color='cyan', alpha=0.5)\n", + " \n", + " else:\n", + " group_start, last_pos, last_pol, peak_pos = peak_group[-1]\n", + " \n", + " if abs(pol) > abs(last_pol):\n", + " #ax3.axvline(pos, color='magenta', alpha=0.5)\n", + " peak_group[-1] = (group_start, pos, pol, pos)\n", + " else:\n", + " #ax3.axvline(pos, color='blue', alpha=0.5)\n", + " peak_group[-1] = (group_start, pos, last_pol, peak_pos)\n", + "\n", + "def mle_decode(peak_groups, print=print):\n", + " peak_groups = [ (pos, pol) for _1, _2, pol, pos in peak_groups ]\n", + " candidates = [ [(pos, pol)] for pos, pol in peak_groups if pos < bit_period*1.5 ]\n", + " \n", + " while candidates:\n", + " chain_candidates = []\n", + " for chain in candidates:\n", + " pos, ampl = chain[-1]\n", + " score_fun = lambda pos, npos, npol: abs(npol)/2 + 1/(abs((npos-pos)/bit_period - 1))\n", + " next_candidates = sorted([ (score_fun(pos, npos, npol), npos, npol) for npos, npol in peak_groups if pos < npos < pos + bit_period*1.5 ], reverse=True)\n", + " \n", + " print(f' candidates for {pos}, {ampl}:')\n", + " for score, npos, npol in next_candidates:\n", + " print(f' {score:.4f} {npos:.2f} {npol:.2f}')\n", + " \n", + " if len(cor_an) - pos < 1.5*bit_period or not next_candidates:\n", + " score = sum(score_fun(opos, npos, npol) for (opos, _opol), (npos, npol) in zip(chain[:-1], chain[1:])) / (len(chain)-1)\n", + " yield score, chain\n", + " \n", + " else:\n", + " for score, npos, npol in next_candidates[:3]:\n", + " if score > 0.5:\n", + " chain_candidates.append((score, chain + [(npos, npol)]))\n", + " print('chain candidates:')\n", + " for score, chain in sorted(chain_candidates, reverse=True):\n", + " print(' ', [(score, [(f'{pos:.2f}', f'{pol:.2f}') for pos, pol in chain])])\n", + " candidates = [ chain for _score, chain in sorted(chain_candidates, reverse=True)[:10] ]\n", + "\n", + "res = sorted(mle_decode(peak_group), reverse=True)\n", + "#for i, (score, chain) in enumerate(res):\n", + "# print(f'Chain {i}@{score:.4f}: {chain}')\n", + "(_score, chain), *_ = res\n", + "for pos, pol in chain:\n", + " ax3.axvline(pos, color='blue', alpha=0.5)\n", + " ax3.text(pos-20, 0.0, f'{0 if pol < 0 else 1}', horizontalalignment='right', verticalalignment='center', color='black')\n", + "\n", "ax3.plot(th)" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "43b48925433b4464928805812cfebc24", + "model_id": "987be038c1b34e6e9509f7f224bbb620", "version_major": 2, "version_minor": 0 }, @@ -607,10 +1243,10 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 27, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } -- cgit