{"id":3032,"date":"2021-02-15T10:45:28","date_gmt":"2021-02-15T15:45:28","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=3032"},"modified":"2026-08-04T11:42:57","modified_gmt":"2026-08-04T16:42:57","slug":"rssi-vs-distancia-linealiza-sectores","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/rssi-vs-distancia-linealiza-sectores\/","title":{"rendered":"4.4 Rssi vs Distancia - Linealiza Sectores"},"content":{"rendered":"\n<p>Para la baliza de Rectorado, hacia el \u00e1rea de estudio se encuentra el edificio Biblioteca que es suficientemente grande para bloquear parcialmente la se\u00f1al y genera un efecto \"sombra\".<\/p>\n\n\n\n<figure class=\"wp-block-image alignleft\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"137\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector02-300x137.png\" alt=\"\" class=\"wp-image-3034\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector02-300x137.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector02-768x350.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector02.png 910w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption class=\"wp-element-caption\">Biblioteca ESPOL<\/figcaption><\/figure>\n\n\n\n<p>En la vista superior del \u00e1rea de mediciones, a la derecha se ubica el rectorado en la cima del cerro, la Biblioteca en una parte intermedia, y el \u00e1rea de vegetacion FIEC se ubica en la parte baja del cerro hacia la izquierda de la imagen.<\/p>\n\n\n\n<p>La \"sombra\" en la parte de vegetaci\u00f3n se delimita en el sector formado por el \u00e1ngulo formado entre las l\u00edneas de baliza y punto de referencia.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"602\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector01.png\" alt=\"\" class=\"wp-image-3035\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector01.png 1280w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector01-300x141.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector01-768x361.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/LoRa_localizaSector01-1024x482.png 1024w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><\/figure>\n\n\n\n<p>En la imagen se identifica como sector 's0' al c\u00edrculo completo, como si no hubiese sectorizaci\u00f3n, para luego realizar cortes para el sector 's1' de la \"sombra\".<\/p>\n\n\n\n<p>El sector 's1', del ejemplo, usa los puntos de referencia de inicio y fin en el sentido de las manecillas del reloj:<\/p>\n\n\n\n<p>- <code>'FIEC112'<\/code>&nbsp; usado como inicio, pues la l\u00ednea entre Rectorado y el punto FIEC112 pasa por el borde del edificio de Biblioteca.<br>- <code>'FCNM110'<\/code> es usado punto final del sector al delimitar el \u00e1rea de vegetaci\u00f3n bajo estudio entre FIEC y FCNM desde RECTorado.<\/p>\n\n\n\n<p>En cada sector, se usan tambi\u00e9n intervalos por distancia desde la baliza descrita en la secci\u00f3n anterior.<\/p>\n\n\n\n<p>El asunto con sectores se presenta principalmente con la baliza&nbsp; 'gtwRECT', siendo el caso referencia para el desarrollo del algoritmo. El sector a\u00f1ade una variable y nivel al diccionario de la ecuaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">baliza: \u2018gtwRECT\u2019 , Sector: 's0'<\/h2>\n\n\n\n<p>Para el primer sector 's0' sin \"somlbra\" del edificion biblioteca, tambi\u00e9n se aplica un subintervalo con frontera buscada desde los 300 m y determinada con las f\u00f3rmulas en un radio de 359 m.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S0_01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1125\" height=\"618\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S0_01.png\" alt=\"\" class=\"wp-image-3160\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S0_01.png 1125w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S0_01-300x165.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S0_01-768x422.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S0_01-1024x563.png 1024w\" sizes=\"auto, (max-width: 1125px) 100vw, 1125px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">baliza: \u2018gtwFIEC\u2019 , Sector: 's1'<\/h2>\n\n\n\n<p>Para el siguiente sector 's1' se observa el efecto de \"sombra\" del edificio Biblioteca, se presenta una recuperaci\u00f3n de se\u00f1al al alejar de la baliza de RECTorado y el edificio Biblioteca.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S1_02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1092\" height=\"612\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S1_02.png\" alt=\"\" class=\"wp-image-3161\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S1_02.png 1092w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S1_02-300x168.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S1_02-768x430.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwRECT_S1_02-1024x574.png 1024w\" sizes=\"auto, (max-width: 1092px) 100vw, 1092px\" \/><\/a><\/figure>\n\n\n\n<p>En la gr\u00e1fica, la baliza de RECTorado se encuentra a la izquierda, pues el eje distancia aumenta de valor hacia la derecha.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Par\u00e1metros de sector<\/h2>\n\n\n\n<p>La variable <code>'sector_ref'<\/code> contiene los puntos de referencia para un nuevo sector 's1'. Si 'sector_ref' no contiene valores <code>[]<\/code> se asume que una formula aplica todo el c\u00edrculo predeterminada como sector 's0'.<\/p>\n\n\n\n<p>Los puntos de referencia se convierten&nbsp; a su equivalente en radianes usando las coordenadas utm este y norte, valores en radianes que pasan a formar parte de diccionario de ecuaciones como&nbsp;<code>'sector_rad'<\/code> usados luego para evaluar la ecuaci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><span style=\"color: #ff0000\"># Analizar por segmentos<\/span>\nanaliza = {<span style=\"color: #008000\">'gtwRECT'<\/span>:{<span style=\"color: #008000\">'analizar'<\/span>   : 1,\n                      <span style=\"color: #008000\">'sector_ref'<\/span> : &#091;<span style=\"color: #008000\">'FIEC112'<\/span>,<span style=\"color: #008000\">'FCNM110'<\/span>], \n                      <span style=\"color: #008000\">'s0'<\/span>:{<span style=\"color: #008000\">'atipico_std'<\/span> : 1,\n                            <span style=\"color: #008000\">'frontera'<\/span>    :   &#091;300],\n                            <span style=\"color: #008000\">'atipInterv_std'<\/span>: &#091;2,2],\n                            <span style=\"color: #008000\">'p_amplia'<\/span>: 2, \n                            <span style=\"color: #008000\">'grp'<\/span> : &#091;<span style=\"color: #008000\">'RECT'<\/span>,<span style=\"color: #008000\">'FIEC'<\/span>],\n                            <span style=\"color: #008000\">'tip'<\/span> : &#091;<span style=\"color: #008000\">'punto'<\/span>],\n                            <span style=\"color: #008000\">'LOS'<\/span> : &#091;1] },\n                      <span style=\"color: #008000\">'s1'<\/span>:{<span style=\"color: #008000\">'atipico_std'<\/span> : 1,\n                            <span style=\"color: #008000\">'frontera'<\/span>    :   &#091;],\n                            <span style=\"color: #008000\">'atipInterv_std'<\/span>: &#091;2],\n                            <span style=\"color: #008000\">'p_amplia'<\/span>: 2,\n                            <span style=\"color: #008000\">'grp'<\/span> : &#091;<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>],\n                            <span style=\"color: #008000\">'tip'<\/span> : &#091;<span style=\"color: #008000\">'punto'<\/span>],\n                            <span style=\"color: #008000\">'LOS'<\/span> : &#091;1,0] }\n                      },\n           <span style=\"color: #008000\">'gtwFIEC'<\/span>:{<span style=\"color: #008000\">'analizar'<\/span>   : 1,\n                      <span style=\"color: #008000\">'sector_ref'<\/span> : &#091;],\n                      <span style=\"color: #008000\">'s0'<\/span>:{<span style=\"color: #008000\">'atipico_std'<\/span> : 1,\n                            <span style=\"color: #008000\">'frontera'<\/span>    : &#091;190],\n                            <span style=\"color: #008000\">'atipInterv_std'<\/span>: &#091;1,1],\n                            <span style=\"color: #008000\">'p_amplia'<\/span>: 4,\n                            <span style=\"color: #008000\">'grp'<\/span> : &#091;<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>],\n                            <span style=\"color: #008000\">'tip'<\/span> : &#091;<span style=\"color: #008000\">'punto'<\/span>],\n                            <span style=\"color: #008000\">'LOS'<\/span> : &#091;0,1] }\n                      },\n           <span style=\"color: #008000\">'gtwFCNM'<\/span>:{<span style=\"color: #008000\">'analizar'<\/span>   : 1,\n                      <span style=\"color: #008000\">'sector_ref'<\/span> : &#091;],\n                      <span style=\"color: #008000\">'s0'<\/span>:{<span style=\"color: #008000\">'atipico_std'<\/span> : 1,\n                            <span style=\"color: #008000\">'frontera'<\/span>    : &#091;235.0],\n                            <span style=\"color: #008000\">'atipInterv_std'<\/span>: &#091;2,2],\n                            <span style=\"color: #008000\">'p_amplia'<\/span>: 4,\n                            <span style=\"color: #008000\">'grp'<\/span> : &#091;<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>],\n                            <span style=\"color: #008000\">'tip'<\/span> : &#091;<span style=\"color: #008000\">'punto'<\/span>],\n                            <span style=\"color: #008000\">'LOS'<\/span> : &#091;1,0] }\n                      }\n           }<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Resultados en otras balizas<\/h2>\n\n\n\n<p>El caso de la baliza 'gtwFIEC' no tiene observaciones de \"sombra\" para el \u00e1rea de vegetaci\u00f3n&nbsp; que sean de tama\u00f1o considerable, por lo que se mantiene solo la divisi\u00f3n por segmentos.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFIEC_S0_01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1106\" height=\"612\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFIEC_S0_01.png\" alt=\"\" class=\"wp-image-3162\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFIEC_S0_01.png 1106w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFIEC_S0_01-300x166.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFIEC_S0_01-768x425.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFIEC_S0_01-1024x567.png 1024w\" sizes=\"auto, (max-width: 1106px) 100vw, 1106px\" \/><\/a><\/figure>\n\n\n\n<p>Los resultados no var\u00edan gtwFCNM, pues no se ha aplicado este concepto de \"sombra\" para estas balizas, tan solo la divisi\u00f3n por subintevalos causadas por cambios de entorno.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFCNM_S0_01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1100\" height=\"619\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFCNM_S0_01.png\" alt=\"\" class=\"wp-image-3163\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFCNM_S0_01.png 1100w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFCNM_S0_01-300x169.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFCNM_S0_01-768x432.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/Rssi_dist_GtwFCNM_S0_01-1024x576.png 1024w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><\/a><\/figure>\n\n\n\n<p>Los resultados del algoritmo para usar en localizaci\u00f3n :<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>baliza:  gtwRECT\n sectores radianes:  &#091;2.6552133371486635, 2.7999991438538827]\n  &#091;sector]&#091;intervalo]:  s0 , r0\n    $ rssi = -10(5.148)log_{10}(d)+(15.043) $\n    intervalox:  &#091;138.15 482.74]\n    intervaloy:  &#091;-123.1   -93.18]\n    correlaci\u00f3n:  -0.93\n    |error_rssi| promedio:  2.88  , std: 3.55\n    |error_dist| promedio:  39.64  , std: 44.91\n  &#091;sector]&#091;intervalo]:  s0 , r1\n    $ rssi = -10(5.001)log_{10}(d)+(11.842) $\n    intervalox:  &#091;138.15 359.35]\n    intervaloy:  &#091;-115.97  -95.2 ]\n    correlaci\u00f3n:  -0.9\n    |error_rssi| promedio:  4.18  , std: 4.75\n    |error_dist| promedio:  42.76  , std: 44.83\n  &#091;sector]&#091;intervalo]:  s0 , r2\n    $ rssi = -10(7.191)log_{10}(d)+(67.794) $\n    intervalox:  &#091;359.35 482.74]\n    intervaloy:  &#091;-125.18 -115.97]\n    correlaci\u00f3n:  -0.94\n    |error_rssi| promedio:  2.11  , std: 2.3\n    |error_dist| promedio:  25.23  , std: 28.25\n  &#091;sector]&#091;intervalo]:  s1 , r0\n    $ rssi = -10(-8.383)log_{10}(d)+(-337.543) $\n    intervalox:  &#091;374.66 443.48]\n    intervaloy:  &#091;-124.2  -113.71]\n    correlaci\u00f3n:  0.66\n    |error_rssi| promedio:  1.79  , std: 2.2\n    |error_dist| promedio:  20.48  , std: 25.57\n  &#091;sector]&#091;intervalo]:  s1 , r1\n    $ rssi = -10(-8.383)log_{10}(d)+(-337.543) $\n    intervalox:  &#091;374.66 443.48]\n    intervaloy:  &#091;-121.79 -115.65]\n    correlaci\u00f3n:  0.66\n    |error_rssi| promedio:  1.79  , std: 2.2\n    |error_dist| promedio:  20.48  , std: 25.57\n\nbaliza:  gtwFIEC\n sectores radianes:  &#091;]\n  &#091;sector]&#091;intervalo]:  s0 , r0\n    $ rssi = -10(4.908)log_{10}(d)+(1.406) $\n    intervalox:  &#091; 52.54 397.15]\n    intervaloy:  &#091;-129.13  -86.99]\n    correlaci\u00f3n:  -0.9\n    |error_rssi| promedio:  4.84  , std: 5.56\n    |error_dist| promedio:  41.43  , std: 54.09\n  &#091;sector]&#091;intervalo]:  s0 , r1\n    $ rssi = -10(4.263)log_{10}(d)+(-11.269) $\n    intervalox:  &#091; 52.54 166.14]\n    intervaloy:  &#091;-105.93  -84.62]\n    correlaci\u00f3n:  -0.9\n    |error_rssi| promedio:  2.92  , std: 3.33\n    |error_dist| promedio:  20.19  , std: 24.67\n  &#091;sector]&#091;intervalo]:  s0 , r2\n    $ rssi = -10(6.09)log_{10}(d)+(29.295) $\n    intervalox:  &#091;166.14 397.15]\n    intervaloy:  &#091;-128.98 -105.93]\n    correlaci\u00f3n:  -0.92\n    |error_rssi| promedio:  2.71  , std: 3.17\n    |error_dist| promedio:  25.03  , std: 29.93\n\nbaliza:  gtwFCNM\n sectores radianes:  &#091;]\n  &#091;sector]&#091;intervalo]:  s0 , r0\n    $ rssi = -10(5.403)log_{10}(d)+(8.423) $\n    intervalox:  &#091; 27.74 364.71]\n    intervaloy:  &#091;-132.09  -81.62]\n    correlaci\u00f3n:  -0.93\n    |error_rssi| promedio:  4.59  , std: 5.48\n    |error_dist| promedio:  41.33  , std: 48.24\n  &#091;sector]&#091;intervalo]:  s0 , r1\n    $ rssi = -10(4.795)log_{10}(d)+(-3.65) $\n    intervalox:  &#091; 27.74 238.81]\n    intervaloy:  &#091;-117.68  -72.85]\n    correlaci\u00f3n:  -0.91\n    |error_rssi| promedio:  5.96  , std: 6.51\n    |error_dist| promedio:  52.15  , std: 64.38\n  &#091;sector]&#091;intervalo]:  s0 , r2\n    $ rssi = -10(9.027)log_{10}(d)+(96.989) $\n    intervalox:  &#091;238.81 364.71]\n    intervaloy:  &#091;-134.28 -117.68]\n    correlaci\u00f3n:  -0.87\n    |error_rssi| promedio:  2.81  , std: 3.43\n    |error_dist| promedio:  20.26  , std: 25.06\n&gt;&gt;&gt; \n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Rssi vs Distancia. Linealiza Sectores - Algoritmo Python<\/h2>\n\n\n\n<p>El efecto \"sombra\" a\u00f1ade el par\u00e1metro sector a la ecuaci\u00f3n que se incorpora al resultado de la linealizaci\u00f3n en cada baliza.<\/p>\n\n\n\n<figure class=\"wp-block-image alignright\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/BalizasDispositivoSector03.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"255\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/BalizasDispositivoSector03-300x255.png\" alt=\"\" class=\"wp-image-3043\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/BalizasDispositivoSector03-300x255.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/02\/BalizasDispositivoSector03.png 490w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<p>La ecuaci\u00f3n de una baliza&nbsp; se compone entonces de dos par\u00e1metros de selecci\u00f3n: <code>sector<\/code> e <code>intervalo<\/code>.<\/p>\n\n\n\n<p>Como ilustraci\u00f3n se muestra la&nbsp; figura que tiene tres partes o ecuaciones:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>ecuacion&#091;'s0']&#091;'r1']<br>ecuacion&#091;'s0']&#091;'r2']<br>ecuacion&#091;'s1']&#091;'r0']<\/code><\/pre>\n\n\n\n<p>El primer par\u00e1metro para seleccionar la ecuaci\u00f3n es el sector, 's0' y 's1', que en caso que sea un solo c\u00edrculo se identifica como 's0'.<\/p>\n\n\n\n<p>Dentro de cada sector, se mantiene el concepto de&nbsp; intervalos de distancia o radio. Se mantiene el concepto de la secci\u00f3n anterior, donde 'r0' corresponde a la linealizaci\u00f3n de <strong><em>todos<\/em><\/strong> los puntos en el sector.&nbsp; Cuando exiten sub-intervalos se usa 'r1', 'r2', etc para cada intervalo.<\/p>\n\n\n\n<p>El n\u00famero de ecuaciones corresponde al n\u00famero de balizas y sectores establecidos para el an\u00e1lisis.<\/p>\n\n\n\n<p>Se realizan cambios menores a la funci\u00f3n pares_usar() de la librer\u00eda girni para incorporar el par\u00e1metro sector, que al ser vac\u00edo <code>''<\/code> funciona como fu\u00e9 descrito en las secciones anteriores.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><em><strong>pares_usar<\/strong><\/em>(tabla,baliza, analiza,unabaliza, unsector ='', medida = 'rssi', modo = 'rx')<\/code><\/pre>\n\n\n\n<p>Tambi\u00e9n se actualizaron los nombres de los archivos de entrada y salida para diferenciar de los resultados anteriores y disponer de los archivos para comparar con los resultados del m\u00e9todo que solo usa intervalos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo en Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# LoRa-Multipunto, Rssi vs distancia con m\u00ednimos cuadrados\n# linealizaci\u00f3n Rssi vs log10(distancia) \n# por Sectores e intervalos , Graficas '2D'\n# Girni 2020-10-07 propuesta: edelros@espol.edu.ec\n\nimport numpy as np\nimport pandas as pd\nimport json\nimport matplotlib.pyplot as plt\nimport girni_lora_libreria as girni\n\n# INGRESO\n# archivos de entrada\nmodo   = 'rx'\nmedida = 'rssi'\narch_medidaubica = 'rsmP06_'+medida+'Ubica01sector1.txt'\n\n# archivos de salida\narch_ecuaciones  = 'rsmP07_ecuacionSector01.json'\narch_medUbAtrib  = 'rsmP07_'+medida+'UbicaUsarSector01.txt'\n\n# Analizar por segmentos\nanaliza = {'gtwRECT':{'analizar'   : 1,\n                      'sector_ref' : &#x5B;'FIEC112','FCNM110'], \n                      's0':{'atipico_std' : 1,\n                            'frontera'    :   &#x5B;300],\n                            'atipInterv_std': &#x5B;2,2],\n                            'p_amplia': 2, \n                            'grp' : &#x5B;'RECT','FIEC'],\n                            'tip' : &#x5B;'punto'],\n                            'LOS' : &#x5B;1] },\n                      's1':{'atipico_std' : 1,\n                            'frontera'    :   &#x5B;],\n                            'atipInterv_std': &#x5B;2],\n                            'p_amplia': 2,\n                            'grp' : &#x5B;'FIEC','FCNM'],\n                            'tip' : &#x5B;'punto'],\n                            'LOS' : &#x5B;1,0] }\n                      },\n           'gtwFIEC':{'analizar'   : 1,\n                      'sector_ref' : &#x5B;],\n                      's0':{'atipico_std' : 1,\n                            'frontera'    : &#x5B;190],\n                            'atipInterv_std': &#x5B;1,1],\n                            'p_amplia': 4,\n                            'grp' : &#x5B;'FIEC','FCNM'],\n                            'tip' : &#x5B;'punto'],\n                            'LOS' : &#x5B;0,1] }\n                      },\n           'gtwFCNM':{'analizar'   : 1,\n                      'sector_ref' : &#x5B;],\n                      's0':{'atipico_std' : 1,\n                            'frontera'    : &#x5B;235.0],\n                            'atipInterv_std': &#x5B;2,2],\n                            'p_amplia': 4,\n                            'grp' : &#x5B;'FIEC','FCNM'],\n                            'tip' : &#x5B;'punto'],\n                            'LOS' : &#x5B;1,0] }\n                      }\n           }\n\nbaliza = {'d1':'gtwRECT',\n          'd2':'gtwFIEC',\n          'd3':'gtwFCNM'}\n\n# Par\u00e1metros de grafica\ntipograf   = '2D'  # '2D','' sin grafica\nescala     = 'log' # 'normal','log'\nescalabase = 10    # 10\ncasicero   = 1e-4\nprecision  = 2\nintersectar = 1 # 0:Falso, 1: Verdadero\n\n# PROCEDIMIENTO\n# leer datos\ntabla = pd.read_csv(arch_medidaubica, index_col='etiqueta')\ntabla = pd.DataFrame(tabla)\n\nbaliza_key = list(baliza.keys())\nbaliza_val = list(baliza.values())\n\n# Resultados de an\u00e1lisis\necuacion = {}\neq_graf  = {}\n\n# analiza datos hacia una baliza\nfor unabaliza in analiza:\n    donde = baliza_val.index(unabaliza)\n    cualbaliza = baliza_key&#x5B;donde]\n\n    # Par\u00e1metros\n    analizar = analiza&#x5B;unabaliza]&#x5B;'analizar']\n    if analizar:\n        # Crea ecuacion por baliza\n        ecuacion&#x5B;unabaliza] = {'sector_rad':&#x5B;]}\n        eq_graf&#x5B;unabaliza]  = {}\n\n        # sectores\n        sectores   = &#x5B;]\n        sector_ref = analiza&#x5B;unabaliza]&#x5B;'sector_ref']\n        tabla&#x5B;'sector_'+cualbaliza] = 0  # 'todos' predeterminado\n\n        # coordenadas baliza para identificar \u00e1ngulo\n        b_este  = tabla&#x5B;'c_este']&#x5B;unabaliza]\n        b_norte = tabla&#x5B;'c_norte']&#x5B;unabaliza]\n\n        # sectores por puntos de referencia\n        if len(sector_ref)&gt;0:\n            for cadapunto in sector_ref:\n                p_este  = tabla&#x5B;'c_este']&#x5B;cadapunto]\n                p_norte = tabla&#x5B;'c_norte']&#x5B;cadapunto]\n                dx = p_este  - b_este\n                dy = p_norte - b_norte\n                theta = np.arctan2(dy,dx)\n                if theta&lt;0 and dx&lt;0:\n                    theta = theta + 2*np.pi\n                sectores.append(theta)\n            sectores  = np.array(sectores)\n            ordenar   = np.argsort(sectores)\n            sectores  = list(sectores&#x5B;ordenar])\n            nsectores = len(sectores)\n\n            # clasifica puntos por sector particular\n            for cadapunto in tabla.index:\n                dentrosector = 0\n                p_este  = tabla&#x5B;'c_este']&#x5B;cadapunto]\n                p_norte = tabla&#x5B;'c_norte']&#x5B;cadapunto]\n                dx = p_este-b_este\n                dy = p_norte-b_norte\n                theta = np.arctan2(dy,dx)\n                if theta&lt;0 and dx&lt;0:\n                    theta = theta + 2*np.pi\n                for j in range(0,nsectores-1,1):\n                    if theta&gt;sectores&#x5B;j] and theta&lt;sectores&#x5B;j+1]:\n                        dentrosector = j+1\n                tabla.loc&#x5B;cadapunto,'sector_'+cualbaliza] = dentrosector\n\n        # ecuacion por baliza y sector\n        ecuacion&#x5B;unabaliza]&#x5B;'sector_rad'] = sectores\n        nsectores = len(sectores)\n        if nsectores == 0:\n            nsectores = 1\n        for cadasector in range(0,nsectores,1):\n            unsector = 's'+str(cadasector)\n            ecuacion&#x5B;unabaliza]&#x5B;unsector] = {}\n            eq_graf&#x5B;unabaliza]&#x5B;unsector]  = {}\n\n            # ecuaci\u00f3n con todos los puntos como referencia\n            &#x5B;pares,par_etiqueta] = girni.pares_usar(tabla,baliza,analiza,\n                                                    unabaliza,unsector,\n                                                    medida,modo)\n            xi = pares&#x5B;:,0]\n            yi = pares&#x5B;:,1]\n            n_xi = len(xi)\n            # coeficiente de correlaci\u00f3n\n            correlacion = np.corrcoef(xi,yi)&#x5B;0,1]\n\n            # minimos cuadrados\n            ecuacion0 = girni.linealiza_lstsq(xi,yi)\n\n            # selecciona atipicos de todos los puntos\n            atipico_std = analiza&#x5B;unabaliza]&#x5B;unsector]&#x5B;'atipico_std']\n            alpha    = ecuacion0&#x5B;'alpha']\n            beta     = ecuacion0&#x5B;'beta']\n            fdist0   = lambda d: -10*alpha*(np.log10(d))+beta\n            yi0      = fdist0(xi)\n            dyi0std  = ecuacion0&#x5B;'error_std']\n            dyi0     = yi - yi0\n            atipicos = np.abs(dyi0) &gt;= dyi0std*atipico_std\n            xi0_e    = xi&#x5B;atipicos]\n            yi0_e    = yi&#x5B;atipicos]\n            etiq0_e  = par_etiqueta&#x5B;atipicos]\n\n            unintervalo = 'r0' # todos\n            # para exportar hacia archivo o gr\u00e1fica\n            ecuacion&#x5B;unabaliza]&#x5B;unsector] = {unintervalo: ecuacion0 }\n            ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;unintervalo]&#x5B;'correlacion'] = correlacion\n\n            eq_graf&#x5B;unabaliza]&#x5B;unsector]  = {unintervalo: {'xi_graf'  : xi,\n                                                           'yi_graf'  : yi,\n                                                           'etiqueta' : par_etiqueta,\n                                                           'linea'    : yi0,\n                                                           'atipicos' : &#x5B;xi0_e,yi0_e],\n                                                           'atip_etiq': etiq0_e}\n                                             }\n\n            # Intervalos radiales en sector\n            intervalo = &#x5B;np.min(xi),np.max(xi)]\n            frontera  = analiza&#x5B;unabaliza]&#x5B;unsector]&#x5B;'frontera']                \n            if len(frontera)&gt;0:\n                # revisar si frontera esta dentro intervalo\n                frontera = np.array(frontera, dtype=float)\n                revisar  = (frontera&gt;=np.min(xi)) &amp; (frontera&lt;=np.max(xi))\n                enintervalo = list(frontera&#x5B;revisar])\n                intervalo.extend(enintervalo)\n                intervalo = np.array(intervalo)\n                ordenar   = np.argsort(intervalo)\n                intervalo = intervalo&#x5B;ordenar]\n            n_intervalo = len(intervalo)\n\n            # analizar cada subintervalo\n            p_inicio = 0\n            p_desde  = 0\n            p_amplia = analiza&#x5B;unabaliza]&#x5B;unsector]&#x5B;'p_amplia']\n            atipIntv_std = analiza&#x5B;unabaliza]&#x5B;unsector]&#x5B;'atipInterv_std']\n            for i in range(0,n_intervalo-1,1):\n                i_eq = 'r' + str(i+1)\n\n                # puntos en subintervalo &#x5B;a,b]\n                a = intervalo&#x5B;i]\n                b = intervalo&#x5B;i+1]\n                subintervalo = (xi &gt;= a) &amp; (xi &lt;= b)  \n                xi_sub = xi&#x5B;subintervalo]\n                yi_sub = yi&#x5B;subintervalo]\n                n_sub  = len(xi_sub)\n                etiq_sub = par_etiqueta&#x5B;p_inicio:p_inicio + n_sub]\n\n                # amplia sub-intervalo, mejora intersecta rectas\n                detras    = p_inicio\n                retrocede = detras\n                if detras &gt; p_amplia:\n                    retrocede = p_amplia\n                delante = n_xi - (p_inicio+n_sub)# -1)\n                avanza  = delante\n                if delante &gt;= p_amplia:\n                    avanza = p_amplia\n                p_desde  = p_inicio - retrocede\n                p_hasta  = p_inicio + (n_sub) + avanza\n                p_inicio = p_inicio + (n_sub-1)\n\n                # subintervalo, amplia puntos\n                xi_a = xi&#x5B;p_desde:p_hasta]\n                yi_a = yi&#x5B;p_desde:p_hasta]\n                etiq_a = par_etiqueta&#x5B;p_desde:p_hasta]\n\n                # coeficiente de correlaci\u00f3n\n                correlacion1 = np.corrcoef(xi_a,yi_a)&#x5B;0,1]\n\n                # analiza subintervalo\n                ecuacion1 = girni.linealiza_lstsq(xi_a,yi_a)\n                ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq] = ecuacion1\n                ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'correlacion'] = correlacion1 \n\n                # atipicos del subintervalo extendido\n                alpha  = ecuacion1&#x5B;'alpha']\n                beta   = ecuacion1&#x5B;'beta']\n                fdist1 = lambda d: -10*alpha*(np.log10(d))+beta\n                yi1    = fdist1(xi_a)\n                dyi1std  = ecuacion1&#x5B;'error_std']\n                atipicos = np.zeros(len(xi_a),dtype=bool)\n                atipico_std = analiza&#x5B;unabaliza]&#x5B;unsector]&#x5B;'atipInterv_std']&#x5B;i]\n                dyi1 = yi_a - yi1\n                if np.abs(dyi1std) &gt; casicero:\n                    atipicos = np.abs(dyi1) &gt;= dyi1std*atipico_std\n                xi1_e = xi_a&#x5B;atipicos]\n                yi1_e = yi_a&#x5B;atipicos]\n                etiq1_e = etiq_a&#x5B;atipicos]\n                # para gr\u00e1fica, atipicos sin extender puntos \n                atipicos_sub = (xi1_e &gt;= a) &amp; (xi1_e&lt;=b)\n                xi_sub1_e = xi1_e&#x5B;atipicos_sub]\n                yi_sub1_e = yi1_e&#x5B;atipicos_sub]\n                etiq_sub1e = etiq1_e&#x5B;atipicos_sub]\n                eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq] = {'atipicos': &#x5B;xi_sub1_e,yi_sub1_e],\n                                                      'atip_etiq':etiq_sub1e}\n\n                # subintervalo sin atipicos\n                if len(xi1_e)&gt;0:\n                    atipicoNo = np.abs(dyi1) &lt;= dyi1std*atipico_std\n                    xi2 = xi_a&#x5B;atipicoNo]\n                    yi2 = yi_a&#x5B;atipicoNo]\n                    etiq2 = etiq_a&#x5B;atipicoNo]\n                    # coeficiente de correlaci\u00f3n\n                    correlacion2 = np.corrcoef(xi2,yi2)&#x5B;0,1]\n\n                    ecuacion2 = girni.linealiza_lstsq(xi2,yi2)\n\n                    # actualiza ecuaci\u00f3n sin atipicos intervaloy\n                    intervalox = ecuacion1&#x5B;'intervalox']\n                    ecuacion2&#x5B;'intervalox'] = intervalox.copy()\n                    alpha = ecuacion2&#x5B;'alpha']\n                    beta  = ecuacion2&#x5B;'beta']\n                    fdist = lambda d: -10*alpha*(np.log10(d))+beta\n                    intervaloy = fdist(intervalox)\n                    ordenar   = np.argsort(intervaloy)\n                    intervaloy = list(intervaloy&#x5B;ordenar])\n                    ecuacion2&#x5B;'intervaloy'] = intervaloy\n                    ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq] = ecuacion2\n                    ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'correlacion'] = correlacion2\n\n            # Revisar frontera entre subintervalos,\n            # calcula intersecci\u00f3n de rectas como nueva frontera\n            interv_calc = np.copy(intervalo)\n            if len(intervalo) &gt;2 and intersectar==1 : \n                for i in range(0,n_intervalo-2,1):\n                    ai = 'r' + str(i+1)\n                    bi = 'r' + str(i+2)\n                    ma = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;ai]&#x5B;'alpha']\n                    ba = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;ai]&#x5B;'beta']\n                    mb = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;bi]&#x5B;'alpha']\n                    bb = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;bi]&#x5B;'beta']\n\n                    # punto de intersecci\u00f3n o cruce\n                    cruzanx = 10**((bb-ba)\/(10*(mb-ma)))\n                    dfrontera = frontera - cruzanx\n                    # cruce dentro de intervalo de ecuacion\n                    if cruzanx &gt; intervalo&#x5B;-1]:\n                        cruzanx = intervalo&#x5B;-1]\n                    if cruzanx &lt; intervalo&#x5B;0]:\n                        cruzanx = intervalo&#x5B;0]\n                    interv_calc&#x5B;i+1] = cruzanx\n\n            # para grafica evalua cada subintervalo sin atipicos\n            n_interv_calc = len(interv_calc)\n            for i in range(0,n_interv_calc-1,1):\n                i_eq = 'r'+str(i+1)\n                a = interv_calc&#x5B;i]\n                b = interv_calc&#x5B;i+1]\n                subintervalo = (xi &gt;= a) &amp; (xi &lt;= b)\n                xi_sub = xi&#x5B;subintervalo]\n                yi_sub = yi&#x5B;subintervalo]\n                xi_graf = np.copy(xi&#x5B;subintervalo])\n                if not(a in xi_graf):\n                    xi_graf = np.concatenate((&#x5B;a],xi_graf),axis=0)\n                if not(b in xi_graf):\n                    xi_graf = np.concatenate((xi_graf,&#x5B;b]),axis=0)\n\n                # Evalua subintervalo con la ecuacion sin atipicos\n                alpha = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'alpha']\n                beta  = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'beta']\n                fdist = lambda d: -10*alpha*(np.log10(d))+beta\n                yi1_sub = fdist(xi_sub)\n                yi_graf = fdist(xi_graf)\n                eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'xi_graf'] = xi_graf\n                eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'yi_graf'] = yi_graf\n                a = np.round(np.min(&#x5B;xi_graf]),precision)\n                b = np.round(np.max(&#x5B;xi_graf]),precision)\n                ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'intervalox'] = &#x5B;a,b]\n                ay = np.round(np.min(&#x5B;yi_graf]),precision)\n                by = np.round(np.max(&#x5B;yi_graf]),precision)\n                ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'intervaloy'] = &#x5B;ay,by]\n\n# SALIDA\nfor unabaliza in ecuacion:\n    for unsector in ecuacion&#x5B;unabaliza]:\n        if unsector == 'sector_rad':\n            print('baliza: ',unabaliza)\n            print(' sectores radianes: ',ecuacion&#x5B;unabaliza]&#x5B;'sector_rad'])\n        if unsector != 'sector_rad':\n            for i_eq in ecuacion&#x5B;unabaliza]&#x5B;unsector]:\n                unintervalo  = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'intervalox']\n                unintervaloy = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'intervaloy']\n                error_medio  = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'error_medio']\n                error_std    = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'error_std']\n                eq_latex     = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'eq_latex']\n                errorx_medio = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'errorx_medio']\n                errorx_std   = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'errorx_std']\n                correlacion  = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'correlacion']\n\n                print('  &#x5B;sector]&#x5B;intervalo]: ',unsector,',',i_eq)\n                print('    ' + eq_latex)\n                print('   ','intervalox: ',np.round(unintervalo,precision))\n                print('   ','intervaloy: ',np.round(unintervaloy,precision))\n                print('    correlaci\u00f3n: ',np.round(correlacion,precision))\n                print('    |error_rssi| promedio: ',np.round(error_medio,precision),\n                      ' , std:',np.round(error_std,precision))\n                print('    |error_dist| promedio: ',np.round(errorx_medio,precision),\n                      ' , std:',np.round(errorx_std,precision))\n    print()\n\n# salida hacia archivo\nwith open(arch_ecuaciones, 'w') as outfile:\n    json.dump(ecuacion, outfile) \ntabla.to_csv(arch_medUbAtrib)\n\n# GRAFICA\n# Referencias para gr\u00e1fica\ngrupo   = &#x5B;'FIEC' ,'FCNM'  ,'RECT','CIRC']\ncolores = &#x5B;'green','orange','grey','magenta']\ntipo    = &#x5B;'punto','1m' ,'gtw','dispositivo']\nmarcas  = &#x5B;    'o','D'  ,'D'  ,'*' ]\n\nif tipograf=='2D':\n    for unabaliza in ecuacion:\n        for unsector in ecuacion&#x5B;unabaliza]:\n            if not(unsector=='sector_rad'):\n                figura,grafica = plt.subplots()\n                if escala == 'log':\n                    grafica.set_xscale(escala,base=escalabase)\n\n                # todos los puntos\n                unintervalo = 'r0'\n                xi = eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;unintervalo]&#x5B;'xi_graf']\n                yi = eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;unintervalo]&#x5B;'yi_graf']\n                etiqueta = eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;unintervalo]&#x5B;'etiqueta']\n                grafica.scatter(xi,yi,marker='.')\n                m = len(xi)\n                for i in range(0,m,1):\n                    grafica.annotate(etiqueta&#x5B;i],(xi&#x5B;i],yi&#x5B;i]))\n\n                # linealizado con todos los puntos\n                fdtxt = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;unintervalo]&#x5B;'eq_latex']\n                yi0 = eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;unintervalo]&#x5B;'linea']\n                a   = np.round(np.min(&#x5B;xi]),precision)\n                b   = np.round(np.max(&#x5B;xi]),precision)\n                eq_texto = fdtxt +' ; &#x5B;'+ str(a) +','+ str(b)+']'\n                grafica.plot(xi,yi0,label=eq_texto,linestyle='dotted')\n\n                # linealizado por subintervalo\n                eq_interv = list(ecuacion&#x5B;unabaliza]&#x5B;unsector].keys())\n                eq_interv.pop(0)\n                n_intervalo = len(eq_interv)\n\n                for i_eq in eq_interv:\n                    fdtxt   = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'eq_latex']\n                    grtxt   = ecuacion&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'eqg_latex']\n                    xi_graf = eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'xi_graf']\n                    yi_graf = eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'yi_graf']\n                    a = np.round(np.min(&#x5B;xi_graf]),precision)\n                    b = np.round(np.max(&#x5B;xi_graf]),precision)\n                    eq_texto = fdtxt+' ; &#x5B;'+str(a)+','+str(b)+']'\n                    grafica.plot(xi_graf,yi_graf, label=eq_texto)\n\n                    # atipicos marcados en subintervalo\n                    &#x5B;xi1_e,yi1_e] = eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'atipicos']\n                    etiq1_e = eq_graf&#x5B;unabaliza]&#x5B;unsector]&#x5B;i_eq]&#x5B;'atip_etiq']\n                    grafica.scatter(xi1_e,yi1_e, color='red')\n                    m = len(etiq1_e)\n                    for i in range(0,m,1):\n                        grafica.annotate(etiq1_e&#x5B;i],\n                                        (xi1_e&#x5B;i],yi1_e&#x5B;i]),\n                                         color='red')\n\n                # lineas de frontera\n                grafica.axvline(a, color='lightblue')\n                valor_frontera = str(np.round(a,precision))\n                grafica.annotate(valor_frontera,\n                                 (a,np.max(&#x5B;yi,yi0])),\n                                 color='lightblue')\n                grafica.axvline(b, color='lightblue')\n                valor_frontera = str(np.round(b,precision))\n                grafica.annotate(valor_frontera,\n                                 (b,np.max(&#x5B;yi,yi0])),\n                                 color='lightblue') \n\n                # etiquetas y t\u00edtulos\n                grafica.legend()\n                grafica.set_ylabel(medida+'_'+modo)\n                grafica.set_xlabel('distancia')\n                grafica.grid(True,linestyle='dotted',\n                             axis='x', which='both')\n\n                untitulo = unabaliza+'_'+unsector+': '\n                untitulo = untitulo+medida+'_'+modo+' vs distancia'\n                grafica.set_title(untitulo)\n\n                plt.show()\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Para la baliza de Rectorado, hacia el \u00e1rea de estudio se encuentra el edificio Biblioteca que es suficientemente grande para bloquear parcialmente la se\u00f1al y genera un efecto \"sombra\". En la vista superior del \u00e1rea de mediciones, a la derecha se ubica el rectorado en la cima del cerro, la Biblioteca en una parte intermedia, [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1463489],"tags":[],"class_list":["post-3032","post","type-post","status-publish","format-standard","hentry","category-lorawan-localizacion-rssi"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/comments?post=3032"}],"version-history":[{"count":9,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3032\/revisions"}],"predecessor-version":[{"id":4826,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3032\/revisions\/4826"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=3032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=3032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=3032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}