{"id":2950,"date":"2021-01-14T12:35:12","date_gmt":"2021-01-14T17:35:12","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=2950"},"modified":"2022-01-15T11:20:28","modified_gmt":"2022-01-15T16:20:28","slug":"rssi-vs-distancia-linealiza-un-intervalo","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/rssi-vs-distancia-linealiza-un-intervalo\/","title":{"rendered":"4.1 Rssi vs Distancia. Linealiza UN intervalo"},"content":{"rendered":"<p><strong>Referencia<\/strong>: Chapra 17.1 p 466. Burden 8.1 p498, <a href=\"http:\/\/blog.espol.edu.ec\/analisisnumerico\/8-1-minimos-cuadrados-concepto\/\">M\u00ednimos cuadrados en M\u00e9todos num\u00e9ricos<\/a><\/p>\n<p>La linealizaci\u00f3n de curvas con M\u00e9todo de m\u00ednimos cuadrados se realiza usando las funciones de Numpy: <a href=\"https:\/\/numpy.org\/doc\/stable\/reference\/generated\/numpy.linalg.lstsq.html\">np.linalg.lstsq()<\/a><\/p>\n<p>Para el an\u00e1lisis de una baliza, 'gtwFIEC', se obtienen los datos desde el archivo '<a href=\"https:\/\/drive.google.com\/file\/d\/1Jwks868oP4CnX-JD3_oIFDjAM0CdHrZv\/view?usp=sharing\">resumen_RssiUbica01<\/a>' obtenido en:<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/integrar-las-tablas-de-rssi-y-coordenadas-de-los-puntos\/\">Integrar las tablas de Rssi y coordenadas de los puntos<\/a><\/p>\n<p>entregando como resultado un archivo con las ecuaciones obtenidas: 'resumen_ecuacionSimple05.json'<\/p>\n<p>La selecci\u00f3n de la baliza\u00a0 se realiza con un diccionario indicando la acci\u00f3n de <strong>'analizar'<\/strong> como verdadero o falso (1,0), entre otros par\u00e1metros.<\/p>\n<pre> <span style=\"color: #008000\">'gtwFIEC'<\/span>:{<span style=\"color: #008000\">'analizar'<\/span>  : 1,\r\n            <span style=\"color: #008000\">'atipico_std'<\/span> : 1,\r\n            <span style=\"color: #008000\">'grp'<\/span> : [<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>],\r\n            <span style=\"color: #008000\">'tip'<\/span> : [<span style=\"color: #008000\">'punto'<\/span>],\r\n            <span style=\"color: #008000\">'LOS'<\/span> : [1,0]}\r\n<\/pre>\n<p>Los valores at\u00edpicos se los discrimina a partir de la <a href=\"https:\/\/es.wikipedia.org\/wiki\/Desviaci%C3%B3n_t%C3%ADpica\">desviaci\u00f3n est\u00e1ndar<\/a>, indicando el n\u00famero de veces que se la considera como medida de dispersi\u00f3n.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full aligncenter\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/8\/8c\/Standard_deviation_diagram.svg\/450px-Standard_deviation_diagram.svg.png\" width=\"450\" height=\"225\" \/><\/p>\n<p>Los puntos identificados en cada sector se seleccionan en '<strong>grp<\/strong>': FIEC, FCNM, RECT.<\/p>\n<p>El tipo de medici\u00f3n tomada, '<strong>tip<\/strong>', se identifica por: punto, 1m, gtw, dispositivo.<\/p>\n<p>Un par\u00e1metro auxiliar es 'LOS', que indica los puntos seleccionados con L\u00ednea de vista (1) y sin linea de vista (0). Para incluir todos de debe ingrear [1,0]. Este parametro se puede modificar en el archivo de entrada: arch_medidaubica.<\/p>\n<p>Los datos de cada eje se seleccionan mediante la funci\u00f3n <strong>pares_usar<\/strong>(tabla, baliza, analiza, unabaliza, medida, modo) que entrega como resultado los arreglos de <strong>pares<\/strong> ordenados y las etiquetas con los nombres, par_etiqueta).<\/p>\n<p>La linealizaci\u00f3n se realiza con el m\u00e9todo de los m\u00ednimos cuadrados, con lo que se establece el |error| promedio y desviaci\u00f3n est\u00e1ndar.<\/p>\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |error| = |yi - f(xi)| <\/span>\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |error_{medio}| = \\frac{1}{n}\\sum|yi - f(xi)| <\/span>\n<h3>Procedimiento aplicado<\/h3>\n<p>Para el an\u00e1lisis primero se consideran todos los puntos disponibles para obtener la primera ecuaci\u00f3n, mostrada en el ejemplo con la l\u00ednea azul.<\/p>\n<p>Con \u00e9sto es posible determinar un error de estimaci\u00f3n, para luego proceder a discriminar los puntos at\u00edpicos.<\/p>\n<p>Se realiza una nueva estimaci\u00f3n de linealizaci\u00f3n habiendo discriminado los puntos at\u00edpicos y se observa el resultado.<\/p>\n<h2>Resultados para baliza: gtwFIEC<\/h2>\n<p>El resultado del algoritmo se presenta como gr\u00e1fica, en pantalla y un archivo con los datos de las f\u00f3rmulas.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2960 size-full\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01.png\" alt=\"\" width=\"1083\" height=\"616\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01.png 1083w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01-300x171.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01-768x437.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01-1024x582.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>los resultados se pueden observar en lo mostrado.:<\/p>\n<pre>baliza:  gtwFIEC\r\nPuntos usados: todos\r\n$ -10(4.908).log_{10}(d)+(1.406)$\r\n|error| promedio:  4.84  , std: 5.56\r\nPuntos usados: NoAtipico\r\n$ -10(5.12).log_{10}(d)+(6.714)$\r\n|error| promedio:  2.98  , std: 3.31\r\n&gt;&gt;&gt; \r\n<\/pre>\n<p>Se observa que los valores fuera de la banda de valores con una desviaci\u00f3n est\u00e1ndar (\u03c3) se muestran distruidos en tres grupos: dos grupos a la izquierda y derecha de la gr\u00e1fica por debajo de la banda y un grupo en el centro por sobre la banda.<\/p>\n<p>Se considera explorar la divisi\u00f3n del intervalo en dos, puesto que existen dos entornos: uno principalmente conformado con vegetaci\u00f3n y otro con edificaciones.<\/p>\n<p>los resultados que se van al archivo, incluyen todos los decimales:<\/p>\n<pre> exportar resultados :\r\n{'todos': {'intervalox': [52.543, 397.148], \r\n      'intervaloy': [-129.132183908046, -86.98969072164948], \r\n      'alpha': 4.907571379870146, 'beta': 1.4062384027235748, \r\n      'error_medio': 4.840153103044936, 'error_std': 5.562835152792785, \r\n      'eq_latex': '$ -10(4.908).log_{10}(d)+(1.406)$'\r\n      }, \r\n  'NoAtipico': {'intervalox': [78.492, 397.148], \r\n      'intervaloy': [-129.132183908046, -86.98969072164948], \r\n      'alpha': 5.119532447831607, 'beta': 6.713572849706863, \r\n      'error_medio': 2.9780010745912833, 'error_std': 3.312804227070313, \r\n      'eq_latex': '$ -10(5.12).log_{10}(d)+(6.714)$'\r\n      }\r\n} \r\n<\/pre>\n<p>Para revisar la situaci\u00f3n se presentan los resultados con otra baliza.<\/p>\n<h2>Baliza: gtwFCNM<\/h2>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2962\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01.png\" alt=\"\" width=\"1086\" height=\"617\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01.png 1086w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01-300x170.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01-768x436.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01-1024x582.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Resultados del algoritmo.<\/p>\n<pre>baliza:  gtwFCNM\r\nPuntos usados: todos\r\n$ -10(5.403).log_{10}(d)+(8.423)$\r\n|error| promedio:  4.59  , std: 5.48\r\nPuntos usados: NoAtipico\r\n$ -10(5.574).log_{10}(d)+(10.758)$\r\n|error| promedio:  2.31  , std: 2.79\r\n<\/pre>\n<hr \/>\n<h2>Baliza: gtwRECT<\/h2>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2964 size-full\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01.png\" alt=\"\" width=\"1083\" height=\"616\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01.png 1083w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01-300x171.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01-768x437.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01-1024x582.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<pre>baliza:  gtwRECT\r\nPuntos usados: todos\r\n$ -10(4.89).log_{10}(d)+(8.541)$\r\n|error| promedio:  2.9  , std: 3.73\r\nPuntos usados: NoAtipico\r\n$ -10(4.587).log_{10}(d)+(0.326)$\r\n|error| promedio:  1.41  , std: 1.72\r\n<\/pre>\n<hr \/>\n<h2>Algoritmo en Python<\/h2>\n<p>El algoritmo realiza el proceso de datos para cada baliza usando los datos del archivo \"resumen_rssiUbica01.txt\", que el el resultado del proceso realizado en <a href=\"http:\/\/blog.espol.edu.ec\/girni\/integrar-las-tablas-de-rssi-y-coordenadas-de-los-puntos\/\">Integrar las tablas de Rssi y coordenadas de los puntos<\/a><\/p>\n<p>Los resultados del algoritmo se almacenan en el archivo \"arch_ecuaciones\".<\/p>\n<p>Los par\u00e1metros para el an\u00e1lisis se incorporan en el diccionario \"analiza\". Los par\u00e1metros se describen al inicio de la p\u00e1gina.<\/p>\n<p>Como el proceso de linealizaci\u00f3n se reutiliza, se lo incorpora como parte de la librer\u00eda <a href=\"http:\/\/blog.espol.edu.ec\/girni\/funciones-girni_lora_libreria\/\">girni_lora_libreria<\/a>, sin embargo la funci\u00f3n se describe en detalle en\u00a0<a href=\"http:\/\/blog.espol.edu.ec\/girni\/rssidistancia-linealizacion-funcion-python\/\">Rssi(distancia) Linealizaci\u00f3n - funci\u00f3n Python<\/a> .<\/p>\n<h2>Procedimiento<\/h2>\n<p>Los datos se leen desde el archivo y se incorporan a una estructura de datos en Pandas.<\/p>\n<p>Para cada baliza se determina si se ha indicado 'analizar', con lo que se seleccionan los pares ordenados y etiquetas a usar mediante la funci\u00f3n girni.pares_usar().<\/p>\n<p>Con los datos seleccionados, se aplica m\u00ednimos cuadrados\u00a0 y se obtienen los errores mediante la funci\u00f3n girni.linealiza_lstsq(). Mediante el criterio de desviaci\u00f3n est\u00e1ndar se discriminan los datos at\u00edpicos y se vuelve a evaluar los datos <strong><em>sin atipicos<\/em><\/strong>, entregando el resultado mediante archivos y gr\u00e1ficas.<\/p>\n<pre><span style=\"color: #ff0000\"># LoRa-Multipunto, Rssi vs distancia<\/span>\r\n<span style=\"color: #ff0000\"># linealizaci\u00f3n Rssi vs log10(distancia)<\/span>\r\n<span style=\"color: #ff0000\"># por m\u00ednimos cuadrados, Graficas 2D y 3D<\/span>\r\n<span style=\"color: #ff0000\"># Girni 2020-10-07 propuesta: edelros@espol.edu.ec<\/span>\r\n\r\n<span style=\"color: #d35400\">import<\/span> numpy <span style=\"color: #d35400\">as<\/span> np\r\n<span style=\"color: #d35400\">import<\/span> pandas <span style=\"color: #d35400\">as<\/span> pd\r\n<span style=\"color: #d35400\">import<\/span> matplotlib.pyplot <span style=\"color: #d35400\">as<\/span> plt\r\n\r\n<span style=\"color: #d35400\">import<\/span> girni_lora_libreria <span style=\"color: #d35400\">as<\/span> girni\r\n\r\n<span style=\"color: #ff0000\"># INGRESO<\/span>\r\n<span style=\"color: #ff0000\"># archivos de entrada<\/span>\r\nmodo = <span style=\"color: #008000\">'rx'<\/span>\r\nmedida = <span style=\"color: #008000\">'rssi'<\/span>\r\narch_medidaubica = <span style=\"color: #008000\">'resumen_rssiUbica01.txt'<\/span>\r\n\r\n<span style=\"color: #ff0000\"># archivos de salida<\/span>\r\narch_ecuaciones  = <span style=\"color: #008000\">'resumen_ecuacionSimple05.json'<\/span>\r\n\r\nanaliza = {<span style=\"color: #008000\">'gtwRECT'<\/span>:{<span style=\"color: #008000\">'analizar'<\/span>  : 1,\r\n                      <span style=\"color: #008000\">'atipico_std'<\/span> : 1,\r\n                      <span style=\"color: #008000\">'grp'<\/span> : [<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'RECT'<\/span>],\r\n                      <span style=\"color: #008000\">'tip'<\/span> : [<span style=\"color: #008000\">'punto'<\/span>],\r\n                      <span style=\"color: #008000\">'LOS'<\/span> : [1,0]},\r\n           <span style=\"color: #008000\">'gtwFIEC'<\/span>:{<span style=\"color: #008000\">'analizar'<\/span>  : 1,\r\n                      <span style=\"color: #008000\">'atipico_std'<\/span> : 1,\r\n                      <span style=\"color: #008000\">'grp'<\/span> : [<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>],\r\n                      <span style=\"color: #008000\">'tip'<\/span> : [<span style=\"color: #008000\">'punto'<\/span>],\r\n                      <span style=\"color: #008000\">'LOS'<\/span> : [1,0]},\r\n           <span style=\"color: #008000\">'gtwFCNM'<\/span>:{<span style=\"color: #008000\">'analizar'<\/span>   : 1,\r\n                      <span style=\"color: #008000\">'atipico_std'<\/span> : 1,\r\n                      <span style=\"color: #008000\">'grp'<\/span> : [<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>],\r\n                      <span style=\"color: #008000\">'tip'<\/span> : [<span style=\"color: #008000\">'punto'<\/span>],\r\n                      <span style=\"color: #008000\">'LOS'<\/span> : [1,0]}\r\n           }\r\n\r\nbaliza = {<span style=\"color: #008000\">'d1'<\/span>:<span style=\"color: #008000\">'gtwRECT'<\/span>,\r\n          <span style=\"color: #008000\">'d2'<\/span>:<span style=\"color: #008000\">'gtwFIEC'<\/span>,\r\n          <span style=\"color: #008000\">'d3'<\/span>:<span style=\"color: #008000\">'gtwFCNM'<\/span>}\r\n\r\n<span style=\"color: #ff0000\"># Par\u00e1metros de grafica<\/span>\r\ntipograf   = <span style=\"color: #008000\">'2D'<\/span>  <span style=\"color: #ff0000\"># '2D','3D'<\/span>\r\nescala     = <span style=\"color: #008000\">'log'<\/span> <span style=\"color: #ff0000\"># 'normal','log'<\/span>\r\nescalabase = 10    <span style=\"color: #ff0000\"># 10, np.exp()<\/span>\r\n\r\n<span style=\"color: #ff0000\"># PROCEDIMIENTO<\/span>\r\n<span style=\"color: #ff0000\"># Resultados de an\u00e1lisis<\/span>\r\necuacion  = {}\r\neq_graf = {}\r\n\r\n<span style=\"color: #ff0000\"># leer datos<\/span>\r\ntabla = pd.read_csv(arch_medidaubica, index_col=<span style=\"color: #008000\">'etiqueta'<\/span>)\r\ntabla = pd.DataFrame(tabla)\r\n\r\n<span style=\"color: #ff0000\"># Analizar datos hacia una baliza<\/span>\r\n<span style=\"color: #d35400\">for<\/span> unabaliza <span style=\"color: #d35400\">in<\/span> analiza:\r\n\r\n    <span style=\"color: #ff0000\"># Par\u00e1metros <\/span>\r\n    analizar = analiza[unabaliza][<span style=\"color: #008000\">'analizar'<\/span>]\r\n    atipico_std = analiza[unabaliza][<span style=\"color: #008000\">'atipico_std'<\/span>]\r\n\r\n    <span style=\"color: #d35400\">if<\/span> analizar:\r\n        ecuacion[unabaliza] ={}\r\n        eq_graf[unabaliza] = {}\r\n        <span style=\"color: #ff0000\"># pares a usar<\/span>\r\n        [pares,par_etiqueta] = girni.pares_usar(tabla,baliza,\r\n                                                analiza,unabaliza,\r\n                                                medida,modo)\r\n        <span style=\"color: #ff0000\"># analiza puntos para m\u00ednimos cuadrados<\/span>\r\n        xi = pares[:,0]\r\n        yi = pares[:,1]\r\n        \r\n        ecuacion0 = girni.linealiza_lstsq(xi,yi)\r\n\r\n        fdist0 = ecuacion0[<span style=\"color: #008000\">'eq_lambda'<\/span>]\r\n        yi0  = fdist0(xi)\r\n\r\n        <span style=\"color: #ff0000\"># Selecciona atipicos<\/span>\r\n        dyi0std = ecuacion0[<span style=\"color: #008000\">'error_std'<\/span>]\r\n        dyi0 = yi - yi0\r\n        atipicos = np.abs(dyi0) &gt;= dyi0std*atipico_std\r\n        xi0_e = xi[atipicos]\r\n        yi0_e = yi[atipicos]\r\n        etiq0_e = par_etiqueta[atipicos]\r\n\r\n        <span style=\"color: #ff0000\"># datos sin atipicos ----------<\/span>\r\n        atipicoNo = np.abs(dyi0) &lt;= dyi0std*atipico_std\r\n        xi1 = xi[atipicoNo]\r\n        yi1 = yi[atipicoNo]\r\n        etiq1 = par_etiqueta[atipicoNo]\r\n\r\n        ecuacion1 = girni.linealiza_lstsq(xi1,yi1)\r\n\r\n        fdist1 = ecuacion1[<span style=\"color: #008000\">'eq_lambda'<\/span>]\r\n        yi1  = fdist1(xi)\r\n\r\n        <span style=\"color: #ff0000\"># para exportar<\/span>\r\n        ecuacion[unabaliza] = {<span style=\"color: #008000\">'todos'<\/span>: ecuacion0,\r\n                               <span style=\"color: #008000\">'NoAtipico'<\/span>: ecuacion1\r\n                               }\r\n        \r\n        eq_graf[unabaliza]  = {<span style=\"color: #008000\">'puntos'<\/span>: [xi,yi],\r\n                               <span style=\"color: #008000\">'todos'<\/span> : yi0,\r\n                               <span style=\"color: #008000\">'atipicos'<\/span>:[xi0_e,yi0_e],\r\n                               <span style=\"color: #008000\">'atip_etiq'<\/span>: etiq0_e,\r\n                               <span style=\"color: #008000\">'NoAtipico'<\/span>:yi1\r\n                               }\r\n\r\n<span style=\"color: #ff0000\"># SALIDA<\/span>\r\n<span style=\"color: #d35400\">for<\/span> unabaliza <span style=\"color: #d35400\">in<\/span> ecuacion:\r\n    <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'baliza: '<\/span>,unabaliza)\r\n    <span style=\"color: #d35400\">for<\/span> unaecuacion  <span style=\"color: #d35400\">in<\/span> ecuacion[unabaliza]:\r\n        error_medio = ecuacion[unabaliza][unaecuacion][<span style=\"color: #008000\">'error_medio'<\/span>]\r\n        error_std = ecuacion[unabaliza][unaecuacion][<span style=\"color: #008000\">'error_std'<\/span>]\r\n        <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'Puntos usados:'<\/span>, unaecuacion)\r\n        <span style=\"color: #ff00ff\">print<\/span>(ecuacion[unabaliza][unaecuacion][<span style=\"color: #008000\">'eq_latex'<\/span>])\r\n        <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'|error| promedio: '<\/span>,np.round(error_medio,2),\r\n              <span style=\"color: #008000\">' , std:'<\/span>,np.round(error_std,2))\r\n\r\n    <span style=\"color: #ff00ff\">print<\/span>(<span style=\"color: #008000\">'\\n'<\/span>,ecuacion[unabaliza],<span style=\"color: #008000\">'\\n'<\/span>)\r\n    <span style=\"color: #ff00ff\">print<\/span>()\r\n\r\n<span style=\"color: #ff0000\"># salida a archivo<\/span>\r\necuacion = pd.DataFrame.from_dict(ecuacion)\r\necuacion.to_json(arch_ecuaciones)\r\n\r\n<span style=\"color: #ff0000\"># GRAFICAR<\/span>\r\n<span style=\"color: #ff0000\"># Referencias para gr\u00e1fica<\/span>\r\ngrupo   = [<span style=\"color: #008000\">'FIEC'<\/span> ,<span style=\"color: #008000\">'FCNM'<\/span>  ,<span style=\"color: #008000\">'RECT'<\/span>,<span style=\"color: #008000\">'CIRC'<\/span>]\r\ncolores = [<span style=\"color: #008000\">'green'<\/span>,<span style=\"color: #008000\">'orange'<\/span>,<span style=\"color: #008000\">'grey'<\/span>,<span style=\"color: #008000\">'magenta'<\/span>]\r\ntipo    = [<span style=\"color: #008000\">'punto'<\/span>,<span style=\"color: #008000\">'1m'<\/span> ,<span style=\"color: #008000\">'gtw'<\/span>,<span style=\"color: #008000\">'dispositivo'<\/span>]\r\nmarcas  = [    <span style=\"color: #008000\">'o'<\/span>,<span style=\"color: #008000\">'D'<\/span>  ,<span style=\"color: #008000\">'D'<\/span>  ,<span style=\"color: #008000\">'*'<\/span> ]\r\n\r\nmostrargrpeti = [<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>,<span style=\"color: #008000\">'RECT'<\/span>]\r\nmostrartipeti = [<span style=\"color: #008000\">'1m'<\/span>,<span style=\"color: #008000\">'gtw'<\/span>]\r\n\r\n<span style=\"color: #d35400\">for<\/span> unabaliza <span style=\"color: #d35400\">in<\/span> ecuacion:\r\n    figura,grafica = plt.subplots()\r\n    <span style=\"color: #d35400\">if<\/span> escala == <span style=\"color: #008000\">'log'<\/span>:\r\n        grafica.set_xscale(escala,base=escalabase)\r\n\r\n    <span style=\"color: #ff0000\"># todos los puntos<\/span>\r\n    [xi, yi] = eq_graf[unabaliza][<span style=\"color: #008000\">'puntos'<\/span>]\r\n    grafica.scatter(xi,yi,marker=<span style=\"color: #008000\">'.'<\/span>)\r\n    fdtxt = ecuacion[unabaliza][<span style=\"color: #008000\">'todos'<\/span>][<span style=\"color: #008000\">'eq_latex'<\/span>]\r\n    \r\n    <span style=\"color: #ff0000\"># linea con todos los puntos<\/span>\r\n    yi0 = eq_graf[unabaliza][<span style=\"color: #008000\">'todos'<\/span>]\r\n    grafica.plot(xi,yi0,color=<span style=\"color: #008000\">'blue'<\/span>, label = fdtxt)\r\n    \r\n    [xi0_e,yi0_e] = eq_graf[unabaliza][<span style=\"color: #008000\">'atipicos'<\/span>]\r\n    etiq0_e = eq_graf[unabaliza][<span style=\"color: #008000\">'atip_etiq'<\/span>]\r\n    \r\n    <span style=\"color: #ff0000\"># cotas de error<\/span>\r\n    atipico_std = analiza[unabaliza][<span style=\"color: #008000\">'atipico_std'<\/span>]\r\n    dyi0std = ecuacion[unabaliza][<span style=\"color: #008000\">'todos'<\/span>][<span style=\"color: #008000\">'error_std'<\/span>]\r\n    \r\n    grafica.plot(xi,yi0 + dyi0std*atipico_std,\r\n                    color=<span style=\"color: #008000\">'blue'<\/span>,linestyle=<span style=\"color: #008000\">'dotted'<\/span>)\r\n    grafica.plot(xi,yi0 - dyi0std*atipico_std,\r\n                    color=<span style=\"color: #008000\">'blue'<\/span>,linestyle=<span style=\"color: #008000\">'dotted'<\/span>)\r\n    <span style=\"color: #ff0000\"># atipicos<\/span>\r\n    grafica.scatter(xi0_e,yi0_e, color=<span style=\"color: #008000\">'red'<\/span>)\r\n    <span style=\"color: #ff0000\"># atipicos etiquetas<\/span>\r\n    m = <span style=\"color: #ff00ff\">len<\/span>(xi0_e)\r\n    <span style=\"color: #d35400\">for<\/span> i <span style=\"color: #d35400\">in<\/span> <span style=\"color: #ff00ff\">range<\/span>(0,m,1):\r\n        grafica.annotate(etiq0_e[i],\r\n                        (xi0_e[i],yi0_e[i]),)\r\n    \r\n    <span style=\"color: #ff0000\"># linea Sin Atipicos<\/span>\r\n    yi1 = eq_graf[unabaliza][<span style=\"color: #008000\">'NoAtipico'<\/span>]\r\n    fdtxt1 = ecuacion[unabaliza][<span style=\"color: #008000\">'NoAtipico'<\/span>][<span style=\"color: #008000\">'eq_latex'<\/span>]\r\n    grafica.plot(xi,yi1, color=<span style=\"color: #008000\">'orange'<\/span>, label = fdtxt1)\r\n\r\n    <span style=\"color: #ff0000\"># etiquetas y t\u00edtulos<\/span>\r\n    grafica.legend()\r\n    grafica.set_ylabel(medida+<span style=\"color: #008000\">'_'<\/span>+modo)\r\n    grafica.set_xlabel(<span style=\"color: #008000\">'distancia'<\/span>)\r\n\r\n    untitulo = unabaliza+<span style=\"color: #008000\">': '<\/span>+medida+<span style=\"color: #008000\">'_'<\/span>+modo + <span style=\"color: #008000\">' vs distancia'<\/span>\r\n    grafica.set_title(untitulo)\r\n    grafica.grid(<span style=\"color: #d35400\">True<\/span>,linestyle=<span style=\"color: #008000\">'dotted'<\/span>,\r\n                 axis=<span style=\"color: #008000\">'x'<\/span>, which=<span style=\"color: #008000\">'both'<\/span>)\r\n    \r\n    plt.show()\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Referencia: Chapra 17.1 p 466. Burden 8.1 p498, M\u00ednimos cuadrados en M\u00e9todos num\u00e9ricos La linealizaci\u00f3n de curvas con M\u00e9todo de m\u00ednimos cuadrados se realiza usando las funciones de Numpy: np.linalg.lstsq() Para el an\u00e1lisis de una baliza, 'gtwFIEC', se obtienen los datos desde el archivo 'resumen_RssiUbica01' obtenido en: Integrar las tablas de Rssi y coordenadas de &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/rssi-vs-distancia-linealiza-un-intervalo\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"4.1 Rssi vs Distancia. Linealiza UN intervalo\"<\/span><\/a><\/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":[20777],"class_list":["post-2950","post","type-post","status-publish","format-standard","hentry","category-localizacion-rssi-lora","tag-python"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2950","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=2950"}],"version-history":[{"count":16,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2950\/revisions"}],"predecessor-version":[{"id":3918,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2950\/revisions\/3918"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=2950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=2950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=2950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}