Full text
Equation Chapter 1 Section 1 Trabajo Fin de Grado en Ingeniería de las Tecnologías de Telecomunicación Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Autor: Sergio Ramírez Ricoy Tutora: Eva María Arias de Reyna Domínguez Dpto. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2025
iii Trabajo Fin de Grado en Ingeniería de las Tecnologías de Telecomunicación Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Autor: Sergio Ramírez Ricoy Tutora: Eva María Arias de Reyna Domínguez Profesora titular Dpto. de Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2025
v Trabajo Fin de Grado: Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Autor: Sergio Ramírez Ricoy Tutora: Eva María Arias de Reyna Domínguez El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2025 El Secretario del Tribunal
vii A mi familia que siempre me apoya. A mis maestros por enseñarme todo lo que sé. A mi pareja por su apoyo incondicional.
ix Agradecimientos En primer lugar, quiero expresar mi más profundo agradecimiento a mis padres. Gracias por haber estado siempre ahí, por vuestro esfuerzo constante y por hacer que nunca me faltara de nada durante toda mi etapa como estudiante. Este logro no habría sido posible sin vuestro apoyo incondicional. A mis abuelos, tanto a la que aún me acompaña como a aquellos que ya no están, quiero deciros que os llevo siempre conmigo, y estoy seguro de que estáis muy orgullosos de verme llegar hasta aquí. Vuestro cariño y enseñanzas siguen siendo una parte fundamental de mí. A mi pareja, por haber estado a mi lado en cada momento de este proceso. Gracias por tu paciencia, tus palabras de aliento y por creer en mí incluso cuando yo no lo hacía. Tu compañía ha hecho este camino mucho más llevadero. Por último, quiero agradecer a mi tutora, Eva, su paciencia, dedicación y guía durante todo el desarrollo de este trabajo. Su apoyo ha sido clave para poder llevarlo a cabo con éxito. Gracias a todos por formar parte de este camino. Sergio Ramírez Ricoy Sevilla, 2025
4.3.2 NLOS 52 5 Algoritmos de localización 59 5.1 LSQ 59 5.1.1 LSQ con todas las medidas asumidas como LOS 61 5.1.2 LSQ descartando medidas LOS 62 5.1.3 LSQ con pesos en las medidas NLOS 63 5.1.4 Análisis comparativo 65 5.1.5 Discusión adicional: Impacto de configuraciones no recomendadas 67 6 Conclusión 69 Anexo A. Códigos Matlab 71 Anexo B. Instalación del entorno python 125 Anexo C. Procedimiento para identificar el puerto COM en Windows 127 Referencias 129
xvii ÍNDICE DE TABLAS Tabla 2-1. Parámetros característicos del esquema de modulación BPM-BPSK [15]. 10 Tabla 2-2. Tipos de bandas [3]. 12 Tabla 2-3. Máscaras espectrales para el promedio de potencia establecidas por la FCC [11]. 14 Tabla 3-1. Explicación de los parámetros usados. 37 Tabla 4-1. Parámetros del LOS. 50 Tabla 4-2. Parámetros del soft-NLOS. 56 Tabla 4-3. Parámetros del hard-NLOS. 57 Tabla 5-1. Comparativa de diferentes pesos para el modo 3 de LSQ. 63 Tabla 5-2. Comparativa entre modos de LSQ. 65 Tabla 5-3. Comparativa de diferentes pesos para el modo 3 de LSQ con posicionamiento incorrecto de un ancla. 67 Tabla 5-4. Comparativa entre modos de LSQ con posicionamiento incorrecto de un ancla. 67
xix ÍNDICE DE FIGURAS Figura 2-1. Estandarización de la radiocomunicación por pulsos UWB en IEEE 802.15.4 [20]. 4 Figura 2-2. Asignación de canales de banda ultraancha basada en el estándar IEEE 802.15.4z [20]. 5 Figura 2-3. Configuraciones de trama compatibles con IEEE 801.15.4z [12]. 5 Figura 2-4. Estructura del campo STS [4]. 6 Figura 2-5. Representación de un monopulso en el dominio del tiempo y frecuencia. [10] 6 Figura 2-6. Monopulsos de la familia gaussiana de diferentes órdenes [16]. 7 Figura 2-7. Disposición de los pulsos de una señal IR-UWB. [6] 8 Figura 2-8. Representación temporal de las modulaciones PPM, BPSK Y OOK, modificación de [11]. 9 Figura 2-9. Esquema de modulación BPM-BPSK [15]. 9 Figura 2-10. Esquema final del transmisor, modificación de [11]. 10 Figura 2-11. Caracterización del Time Hopping [13]. 11 Figura 2-12. Densidad espectral de energía de una señal TH-IR-UWB [11]. 11 Figura 2-13. Ancho de banda de una señal UWB [8]. 12 Figura 2-14. Comparativa gráfica [9]. 13 Figura 2-15. Máscaras espectrales establecidas por la FCC [11]. 14 Figura 2-16. Densidad espectral de potencia de las primeras cinco derivadas del pulso gaussiano [11]. 14 Figura 2-17. Modelo del canal básico [29]. 16 Figura 2-18. Representación de los escenarios posibles [25]. 16 Figura 2-19. Efecto clustering [26]. 17 Figura 2-20. Respuesta al impulso de un canal UWB [26]. 17 Figura 2-21. Cuadro resumen del modelo SV [33]. 18 Figura 2-22. Comparativa de capacidad de canal entre diferentes estándares [27]. 19 Figura 2-23. Comparación de tecnologías y estimación de distancia [5]. 20 Figura 2-24. Esquema del protocolo SS-TWR [35]. 21 Figura 2-25. Esquema del protocolo DS-TWR [35]. 22 Figura 2-26. Determinación del AoA [41]. 23 Figura 2-27. Algoritmo de localización basado en TDoA [40]. 24 Figura 3-1. Antena ancla, componentes del kit [2]. 25 Figura 3-2. Conectores de nRF52840 DK micro-USB [2]. 26 Figura 3-3. Ventana del SEGGER J-Flash LIte. 26 Figura 3-4. Ventana de nueva conexión. 28 Figura 3-5. Ventana de configuración del puerto. 29 Figura 3-6. Ventana de difusión de comando. 29 Figura 3-7. Salida de la ventana de comandos de Calibración.m 31
Figura 3-8. Histograma de la distribución de los valores de distancia. 31 Figura 3-9. Salida de la ventana de comandos de Calibración.m 32 Figura 3-10. Histograma de la distribución de los valores de ángulo. 33 Figura 3-11. Ventana de inicio de QorvoOneTWR. 34 Figura 3-12. Ventana de opciones de QorvoOneTWR. 35 Figura 3-13. Ventana de calibración de QorvoOneTWR. 35 Figura 4-1. Plano de la planta 1, laboratorio L2. 40 Figura 4-2. Montaje de los equipos. 41 Figura 4-3. Mapa de error en el mallado del Ancla B. 42 Figura 4-4. Mapa de error en el mallado del ancla C. 43 Figura 4-5. Mapa de error en el mallado del ancla F. 43 Figura 4-6. Mapa de error en el mallado del ancla D. 44 Figura 4-7. Mapa de error en el mallado del ancla E. 44 Figura 4-8. Mapa de error en el mallado del ancla A. 45 Figura 4-9. Niveles de RSSI frente a distancia. 46 Figura 4-10. Representación de la distancia medida frente a distancia real. 47 Figura 4-11. Media y desviación típica del error en función de la distancia en LOS. 48 Figura 4-12. Histograma de error de valores crudos LOS. 48 Figura 4-13. Media y desviación típica del error en función de la distancia en LOS con normalización de distancia. 49 Figura 4-14. Histograma de error de valores crudos LOS con normalización de distancia. 50 Figura 4-15. Simulación de error en medidas LOS. 51 Figura 4-16. Histograma de simulación de error normalizado en medidas LOS. 51 Figura 4-17. Media y desviación típica del error en función de la distancia en NLOS. 52 Figura 4-18. Histograma de error de valores crudos NLOS. 52 Figura 4-19. Media y desviación típica del error en función de la distancia en NLOS con clasificación soft/hard mediante clustering. 53 Figura 4-20. Histograma de error de valores crudos NLOS con clustering. 54 Figura 4-21. Histograma de error de valores crudos soft-NLOS. 55 Figura 4-22. Histograma de error de valores crudos hard-NLOS. 56 Figura 4-23. Simulación de medidas NLOS 58 Figura 4-24. Histograma de la simulación de medidas NLOS 58 Figura 5-1. Algoritmo de localización LSQ en Modo 1. 61 Figura 5-2. Algoritmo de localización LSQ en Modo 2. 62 Figura 5-3. Algoritmo de localización LSQ en Modo 3 con peso 0.2. 64 Figura 5-4. Histograma de error del Modo 1. 66 Figura 5-5. Histograma de error del Modo 2. 66 Figura 5-6. Histograma de error del Modo 3 con peso 0.2. 66
xxi Notación UWB$ FCC$ IEEE$ NVM$ AoA$ PDoA ToA ToF LOS NLOS MP RDEV ERDEV BPM BPRF HPRF PBFSK PPM EPC BPSK DF OOK PAM UQT CIR TWR SS-TWR DS-TWR AoA ToA TDoA PDoA RSS LSQ Ultra Wide Band Federal Communications Commision Institute of Electrical and Electronics Engineers Non-Volatile Memory Angle of Arrival Phase Difference of Arrival Time of Arrival Time of Flight Line Of Sight Non-Line Of Sight Multi-Path Ranging Device Enhanced Ranging Device Burst Position Modulation Base Pulse Repetition Frequency High Pulse Repetition Frequency Pulse Binary Frequency Shift Keying Pulse Positioning Modulation Enhanced Payload Capacity Binary Phase Shift Keying Dual Frequency On-Off Keying Pulse Amplitude Modulation UWB Qorvo Tools Channel Impulse Radio Two Way Ranging Single-Sided Two-Way Ranging Double-Sided Two-Way Ranging Angle of Arrival Time of Arrival Time Difference of Arrival Phase Difference of Arrival Received Signal Strength Least Squares
1 1 INTRODUCCIÓN La tecnología Ultra Wideband (UWB) de transmisión inalámbrica se caracteriza en su versión de radio basada en impulsos (UWB-IR) por utilizar pulsos de muy corta duración para ocupar un ancho de banda extremadamente amplio. A diferencia de otras tecnologías de comunicación, UWB transmite señales de baja potencia a través de una gran porción del espectro, lo que le permite coexistir con otros sistemas sin causar interferencias significativas. Gracias a esta ventaja, UWB dispone de una alta precisión en la medición. Estas características la hacen ideal para aplicaciones como la localización en interiores, la comunicación de corto alcance y los sistemas de radar. Debido a esta serie de beneficios, UWB ha cobrado un interés creciente en sectores como la electrónica de consumo, la automoción y la industria 4.0. 1.1 Objetivos El presente trabajo se centra en el estudio y la caracterización del potencial de la tecnología Ultra Wide Band (UWB) para aplicaciones de localización en interiores de alta precisión. En particular, se emplea el kit de evaluación Qorvo QM33120WDK1, el cual implementa el estándar IEEE 802.15.4z, una evolución reciente del protocolo UWB que ha suscitado un notable interés en la industria debido a sus mejoras en seguridad, precisión temporal y robustez frente a condiciones adversas del canal. Este estándar, promovido por organismos como la UWB Alliance y el FiRa Consortium, está consolidándose como una solución clave para sistemas de posicionamiento de nueva generación, especialmente en entornos complejos donde las tecnologías tradicionales presentan limitaciones significativas. A través del uso del kit de Qorvo, este estudio busca evaluar de forma experimental las capacidades reales de la tecnología, proporcionando una visión detallada sobre su comportamiento en escenarios reales y su aplicabilidad a sistemas de localización fiables y de alta resolución. Asimismo, el trabajo complementa una beca de colaboración que he realizado en el departamento de Teoría de la Señal y Comunicaciones de la Universidad de Sevilla, centrada en llevar a cabo una campaña de medidas para su posterior publicación. L La ciencia de hoy es la tecnología del mañana. - Edward Teller -
Introducción 2 1.1 Estructura El trabajo se divide en una serie de capítulos: Capítulo 2: Revisión teórica Se presenta una revisión teórica detallada de UWB, abarcando el estándar IEEE 802.15.4z, la transmisión por pulsos, el uso del espectro, el modelo de canal de comunicación y sus principales aplicaciones. Asimismo, se analizan técnicas de localización como “Time of arrival” (ToA), “Angle of arrival” (AoA), “Time difference of arrival” (TDoA) y “Received Signal Strength” (RSS), fundamentales para el posicionamiento en entornos interiores. Capítulo 3: Detalles del equipo El capítulo técnico describe el hardware empleado, incluyendo sus componentes, el proceso de actualización del firmware y su personalización a través de interfaces como la UCI y la CLI, lo que permite adaptar el equipo a los requisitos específicos del estudio. Además, se describe de manera detallada el proceso de calibración de los equipos utilizados. Capítulo 4: Modelo estadístico del error en medidas de distancia A partir de los resultados obtenidos en la campaña de medidas, realizada en un entorno controlado, se elabora un modelo estadístico del error de localización, considerando tanto escenarios con línea de vista (LOS) como sin ella (NLOS). Este modelo no solo permite caracterizar el comportamiento del sistema y evaluar las prestaciones de los equipos empleados, sino que también se presenta como una herramienta útil para simular entornos donde no se disponga de datos reales o se requiera evaluar algoritmos de localización mediante un elevado número de realizaciones. Capítulo 5: Algoritmos de localización Una vez evaluado el rendimiento del kit a nivel de medidas individuales, se procede a analizar el error de localización resultante al aplicar algoritmos básicos que combinan las mediciones provenientes de distintas anclas para estimar la posición del objetivo. En este contexto, se estudia el método de mínimos cuadrados (LSQ), aplicado bajo distintos supuestos sobre la visibilidad de las señales, tanto en condiciones de línea de vista (LOS) como en ausencia de esta (NLOS), con el fin de valorar su precisión y robustez en escenarios reales.
3 2 REVISIÓN TEÓRICA e acuerdo con Rohde & Schwarz, [20], el desarrollo de la tecnología UWB se ha visto enriquecido con la llegada de nuevos productos al mercado que han incrementado la necesidad de prueba de este tipo de herramientas más avanzadas. Este ámbito de las comunicaciones está basado en la transmisión de pulsos muy cortos en el tiempo de muy baja energía, es decir, una señal extremadamente ancha en el dominio de la frecuencia. Dichas capacidades han supuesto un auge en el uso de esta tecnología suponiendo ciertas urgencias en la actualización de los estándares. En respuesta a dicho imperativo surge en 2020 la nueva enmienda Z, IEEE 802.15.4z, la cual ha mejorado diversos aspectos como la seguridad y, tal y como afirma Rohde & Schwarz, [20], ha impulsado su adopción en los dispositivos de última generación tales como smartphones, etiquetas inteligentes, vehículos autónomos… Sin embargo, una de sus principales características a explotar, y de las que hace uso este trabajo, es su gran capacidad y precisión en la localización en interiores. Asimismo, otras tecnologías también son capaces de lograr localizar en interiores, pero con prestaciones realmente alejadas de lo que UWB es capaz de ofrecer de forma natural. 2.1 Tecnología UWB 2.1.1 Estándar IEEE 802.15.4z Tal y como establece Stocker (2022), [4], la introducción de la norma IEEE 802.15.4z, ha introducido en el mundo comercial diversos equipos de tecnología punta basados en la banda ultraancha (UWB), como la Apple U1, la NXP Trimension y la Qorvo DW3000, equipo objeto de estudio en el presente trabajo. En línea con lo comentado en la introducción del capítulo, la tecnología UWB ofrece una resistencia al multitrayecto y una resolución temporal significativamente superior al resto de tecnologías IoT, lo que lo convierte en una de las opciones principales de cara al uso de equipos para el posicionamiento en interiores. Con una precisión del orden de centímetros, UWB es un estándar realmente versátil para multitud de aplicaciones. D Queremos hacer nuestro mundo más humano, conectando la vida de las personas. - Telefónica -
Revisión teórica 10 Tabla 2-1. Parámetros característicos del esquema de modulación BPM-BPSK [15]. Nomenclatura Explicación Tc Duración del chip Ncpb Número de chips por ráfaga Tburst Duración de la ráfaga Nburst Número de Tburst por símbolo Tdsym Duración del símbolo Hemos asumido en todo momento el uso de una secuencia temporal pseudo-aleatoria (TH), sin embargo cabe destacar el hecho de que, de acuerdo con el TFG de Daniela Ximenez [13], existen dos métodos para la explotación del espectro: el ensanchamiento del espectro mediante secuencia directa (DSSS, Direct Sequence Spread Spectrum) y el salto en el tiempo (TH, Time Hopping). Ambos enfoques permiten ensanchar el espectro y minimizar posibilidad de colisiones en el caso de TH. Se puede apreciar en la Figura 2-10 el esquema final del transmisor. Figura 2-10. Esquema final del transmisor, modificación de [11]. Time Hopping El objetivo de este inciso es ahondar un poco más en la teoría del time hopping, igualmente basándome en el TFG de Daniela Ximenez, [13]. El TH se caracteriza principalmente por: - Existen 𝑁 ! posiciones donde puede colocarse el pulso, de manera que se utilizan 𝑁 ! tramas por simbolo. - Cada trama está compuesta por 𝑁" chips TH. - Por cada trama y usuario se transmite un pulso. - Utiliza una transmisión discontinua mediante un ciclo de trabajo bajo. - La localización del pulso viene determinada por las secuencias del TH. Daniela Ximenez, [13], añade en su TFG que en este esquema los pulsos corren a través de un filtro paso banda, donde la frecuencia central de dicho filtro controla la frecuencia central del pulso. La respuesta en frecuencia del filtro es la principal responsable de controlar la forma del pulso y el espectro.
11 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Figura 2-11. Caracterización del Time Hopping [13]. Cuando añadimos un proceso aleatorio como es el TH es común la aparición de ciertos picos en la densidad espectral de potencia. Es por ello que Daniela Ximenez, [13], en su TFG cita una solución a dicho inconveniente: “Se puede utilizar un proceso de ‘aleatorizacion de polaridad’ para eliminar las líneas que ensucian el espectro y se cumple mejor la máscara” (p.35). Se pueden apreciar con claridad las líneas en la Figura 2-12. Figura 2-12. Densidad espectral de energía de una señal TH-IR-UWB [11]. 2.1.3 Ancho de banda y densidad espectral de potencia Las señales UWB son reconocidas por ocupar un ancho de banda significativamente grande en el espectro electromagnético. Puesto que la densidad de potencia espectral debe mantenerse constante, un ensanchamiento en el espectro implica una reducción en la amplitud de la señal conforme esta se ensancha. El ancho de banda de dichas señales se va a solapar con el de otras señales, siendo por ello el hecho de que no estén exentas de cumplir un marco de restricciones. El ancho de banda de una señal UWB se concreta a través de la diferencia entre frecuencia a la que la densidad espectral de potencia ha disminuido 10 dB respecto al nivel máximo central por la derecha ( 𝑓2 ) y por la izquierda ( 𝑓3 ), según se especifica en la ec. 2-9. 𝐵=𝑓2−𝑓3 (2–9)
Revisión teórica 12 Figura 2-13. Ancho de banda de una señal UWB [8]. Asimismo, siguiendo la nomenclatura del TFM de Pablo Manuel Rojas, [3], llamaremos ancho de banda relativo ( 𝐵456 ) al cociente entre el ancho de banda de 10dB y la frecuencia central ( 𝑓7 ). 𝐵456 =𝐵 𝑓7 𝑓𝑐=𝑓2+𝑓3 2 (2–10) (2–11) Se puede deducir por tanto a partir de las dos anteriores ecuaciones: 𝐵456 =2·𝑓2−𝑓3 𝑓2+𝑓3 (2–12) Según la ITU-R, se conoce como una señal UWB a toda transmisión desde una antena para la que el ancho de banda de 10 dB de la señal emitida supera el menor valor entre 500 MHz o el 20 % de la frecuencia central. Es decir, deben al menos, cumplir una de las dos siguientes expresiones: 𝐵=𝑓2−𝑓3>500$𝑀𝐻𝑧 𝐵456 =2·𝑓2−𝑓3 𝑓2+𝑓3·100>20% (2–13) (2–14) Establecidas estas definiciones, podemos plantear una tabla clasificativa (Tabla 2-2) de los distintos tipos de transmisiones en función de su ancho de banda equivalente: Tabla 2-2. Tipos de bandas [3]. Tipo de banda Condición necesaria Banda estrecha 𝐵456 < 1% Banda normal 1% < 𝐵456 < 20% Banda ultraancha 𝐵456 > 20%
13 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Las definiciones de esta tabla se pueden comparar de manera gráfica en la Figura 2-14, donde se puede apreciar con claridad la capacidad de coexistencia de las comunicaciones basadas en UWB. De la misma forma en la que María García comenta en su PFC, [10], una de las grandes ventajas de los sistemas UWB reside en la baja densidad espectral de potencia. Todas las interferencias producidas por las señales UWB tienen un nivel de potencia muy por debajo del nivel medio de ruido que los equipos de radiofrecuencia tradicionales toleran, de esta forma, UWB no necesita de licencia para funcionar en bandas donde otras tecnologías transmiten sin ocasionar interferencias. Como resultado, las transmisiones UWB pueden funcionar paralelamente con otras comunicaciones inalámbricas sin necesidad de usar bandas de frecuencia distintas. Tal y como afirma la profesora Mª José Madero, [6], las señales de banda ultraancha son indetectables para los receptores radio ordinarios. Esta conclusión se refleja con gran claridad en la Figura 2-14. Figura 2-14. Comparativa gráfica [9]. Según el TFG de Tamara Robles, [8], la extensión del ancho de banda resulta muy beneficioso para ciertas aplicaciones en comunicaciones y radar. Por un lado, para comunicaciones esta característica puede reducir los desvanecimientos a pequeña escala, y en cuanto a las aplicaciones radar, un gran ancho de banda proporciona una alta resolución y precisión para la estimación de distancia. Siguiendo el desarrollo teórico descrito en [8], concluimos que en ambos casos el hecho de tener un extenso ancho de banda brinda una mayor fiabilidad dado que al estar compuesto de una gran cantidad de diferentes componentes espectrales las probabilidades de que al menos una de ellas consiga rodear o atravesar los obstáculos son mayores. Al inicio de la sección se mencionó que esta tecnología no estaba exenta de cumplir un marco regulatorio. Según la tesis de Heberto Molina (2017), [11], con el objetivo de evitar interferencias y mantener la potencia de la señal por debajo del umbral de ruido las organizaciones internacionales como la FCC y la CEPT/ECC han establecido regulaciones sobre los niveles de potencia máximos que pueden alcanzar las señales de los sistemas UWB. En la Figura 2-15 se representan los niveles de potencia promedio máxima para entornos cerrados (izquierda) y abiertos (derecha). En la Tabla 2-3 se muestra con números los límites de potencia establecidos por la FCC.
Revisión teórica 14 Figura 2-15. Máscaras espectrales establecidas por la FCC [11]. Tabla 2-3. Máscaras espectrales para el promedio de potencia establecidas por la FCC [11]. Banda de frecuencia (GHz) Promedio máximo EIRP (dBm/MHz) Espacios cerrados Espacios abiertos 0.000009-0.96 - 41.3 - 41.3 0.96 - 1.61 - 75.3 - 75.3 1.61 - 1.99 1.99 - 3.10 3.10 - 10.60 Mayor a 10.60 - 53.3 - 63.3 - 51.3 - 61.3 - 41.3 - 41.3 - 51.3 - 61.3 De acuerdo con el TFG de Heberto Molina (2017), [11], se han desarrollado técnicas para moldear el espectro de una señal IR-UWB de manera que se pueda ajustar a las restricciones legales. El pulso utilizado determinará la forma general que adquirirá la DEP de un sistema IR-UWB [11]. Figura 2-16. Densidad espectral de potencia de las primeras cinco derivadas del pulso gaussiano [11].
15 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores En la Figura 2-16 se representa la densidad espectral de potencia de las primeras cinco derivadas del pulso gaussiano, mencionadas en la sección anterior, junto con la máscara espectral establecida por la FCC para emisiones UWB en entornos interiores. La primera derivada del pulso Gaussiano está representada de color verde, la segunda es la curva roja, la tercera la azul, la cuarta la amarilla y la quinta la morada [11]. 2.1.4 Canal 2.1.4.1 Tipos de canales Siguiendo lo expresado en el artículo de Valentín Barral (2019), [24], los sistemas UWB son ampliamente conocidos por su capacidad de localización, sin embargo, no en todos los entornos se es capaz de mantener la precisión centimétrica que caracteriza a esta tecnología. El entorno más favorable es aquel que permite una línea de visión directa (LOS) entre el transmisor y receptor, no obstante, esta situación no siempre es fácil de conseguir dado que en entornos de interiores la presencia de obstáculos puede dar lugar a situaciones sin línea de visión directa (NLOS), incrementando así el error en la medida. En el caso de NLOS, conforme a lo expresado en el PFC de Alicia Jiménez (2008), [23], la señal puede llegar a su destino por múltiples caminos sufriendo difracción, reflexión, refracción y dispersión. Por consiguiente, dado este caso es muy improbable que las señales lleguen a la vez produciendo así retrasos y atenuaciones diversas dependiendo del camino tomado. Valentín Barral en su artículo, [24], establece que en este contexto el efecto multitrayecto, comúnmente conocido por su terminología en inglés multipath, puede ocasionar que el receptor detecte como rayo principal una de las señales reflejadas en lugar de la correspondiente a la trayectoria directa, provocando así una estimación errónea de la posición. Además, atendiendo al PFC de Alicia Jiménez, [23], en modulaciones digitales podemos identificar un posible efecto a tener en cuenta, la interferencia entre símbolos o ISI, esto ocurre cuando un símbolo anterior al que se está recibiendo interfiere en nuestro símbolo recibido. Con base en [23], podemos afirmar que el efecto multicamino afecta al promedio de la potencia de la señal recibida dado que el desfase provocado por las distintas rutas implica que la señal cambie su amplitud constantemente, este efecto también es comúnmente conocido como interferencia constructiva cuando las señales están en fase, aumentando la amplitud, e interferencia destructiva si ocurre lo contrario. Dicho promedio se ve afectado en demasía por un efecto llamado shadowing, un obstáculo se sitúa en la línea de visión directa provocando que la potencia fluctúe a medida que el receptor se aleja o se acerca. Adicionalmente, otro efecto posible sería el Doppler. No obstante, en el presente trabajo todo el sistema, transmisor y receptor, están fijos por lo que no hay efecto Doppler. En la Figura 2-17 se representa la repercusión de los efectos comentados asumiendo que el modelo del canal es el de una función cuadrática decreciente con la distancia de acuerdo con la fórmula del modelo de pérdidas en el espacio libre, ec. 2-15. Al aplicar transformaciones logarítimicas, se ilustra que el modelo resultante es lineal decreciente. En secciones posteriores se comentará un modelo alternativo de canal más complejo. 𝑙𝑏𝑓=(4𝜋𝑑) 𝜆# # (2–15)
Revisión teórica 16 Figura 2-17. Modelo del canal básico [29]. En este trabajo, en consonancia con el trabajo de investigación que ha sido realizado, se identifican tres escenarios de interés siguiendo la clasificación propuesta en: • Escenario LOS: No existen obstáculos entre el emisor y el receptor • Escenario NLOS Suave (soft-NLOS): Existe un obstáculo que obstruye la línea de vista, de manera que la trayectoria principal de la señal debe atravesarlo. En este caso, a pesar de dicha atenuación, la trayectoria principal sigue teniendo un nivel de señal detectable aunque esté atenuada o incluso aunque tenga menor potencia que otros trayectos posteriores. • Escenario NLOS Severo (hard-NLOS): Existe un obstáculo que atenúa considerablemente, o incluso bloquea por completo, la trayectoria directa. El emisor y el receptor están ubicados de tal manera que que el trayecto directo no se llega a poder detectar. En la Figura 2-18, se ven claramente las posibles condiciones LOS y NLOS, de cada uno de los escenarios expuestos con anterioridad, desde el transmisor (TX) hacia varios receptores. El RX1 se encuentra en condición LOS, RX2 está en condición NLOS sin bloqueo de la trayectoria directa (soft-NLOS) y RX3 está en condición NLOS con bloqueo de la trayectoria directa (hardNLOS). Figura 2-18. Representación de los escenarios posibles [25].
17 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores 2.1.4.2 Modelo del canal según el estándar 802.15.4 En correspondencia con el proyecto final de carrera de Andrés Martínez, [14], por los años 2002, 2003, IEEE comenzó a desarrollar un modelo del canal para los sistemas UWB tomando como referencia el modelo de Saleh Valenzuela. Asimismo, atendiendo a fuentes como el TFG de Andrés Ferrando (2021), [30], el modelo de SV es el más adecuado para entornos interiores. Se trata de un modelo basado en medidas empíricas en entorno de interior donde la propagación multicamino es muy común. En dicha toma de medidas observaron un fenómeno llamado clustering [14]. Figura 2-19. Efecto clustering [26]. Este fenómeno refleja que las reflexiones llegan al receptor agrupadas, y no de manera independiente. De este modo, se pudo realizar un análisis estadístico y modelar este efecto en el canal [14]. Atendiendo al TFG de Lorenzo Rubio, [30], se puede estimar que en cada cluster las reflexiones llegan al receptor retardardadas de acuerdo a una distribución de Poisson de parámetro . 8 , y su potencia se ajusta a un modelo exponencial 𝐴9·𝑒!" #$ , donde i representa el número de cluster. Asimismo, el modelo establece que el cluster completo llega retardado siguiendo una distribución de Poisson de parámetro . : , y su potencia se ajusta a un modelo exponencial 𝐴·𝑒!" % Figura 2-20. Respuesta al impulso de un canal UWB [26].
Revisión teórica 18 Es importante definir algunos parámetros mencionados y representados en la Figura 2-20: - 𝛾: factor de decaimiento de la amplitud de los rayos de un cluster - 𝜂: factor de decaimiento de la amplitud de los clusters. - 𝜆: tasa de llegada de los rayos de un cluster. - Λ: tasa de llegada de los clusters. De acuerdo con fuentes como, [31], [32], [26], es común en la literatura utilizar el modelo SV modificado dado por una respuesta al impulso del canal: ℎ(𝑡)=∑ ∑ 𝑎),6 ·$expFj𝜙),6J·𝛿F𝑡−𝑇6−𝜏),6J ;!. )/0 3!. 6/0 (2–16) Donde: - L es el número total de clusters para las trayectorias del ambiente - K es el número de rayos por cada cluster. - 𝑎),6 representa el coeficiente de desvanecimiento (amplitud) del k-ésimo rayo en el l-ésimo cluster. - 𝜙),6 representa la fase del k-ésimo rayo en el l-ésimo cluster. Es modelada por una variable aleatoria uniforme entre [ 0,2π ). - 𝑇6 son los tiempos de llegada de cada cluster. - 𝜏),6 son los retardos de cada uno de los rayos de un cluster. Para cerrar la sección, en la Figura 2-21 se muestra un resumen del modelo de canal en UWB según el estándar 802.15.4 basado en el SV. Figura 2-21. Cuadro resumen del modelo SV [33].
19 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores 2.1.4.3 Capacidad del canal En el análisis de cualquier sistema de comunicación resulta fundamental el estudio de la capacidad de canal. Asimismo, Shannon establece un teorema para el límite teórico máximo de la tasa de transmisión de información sin error a través de un canal afectado por ruido. Dicho límite se define matemáticamente como: 𝐶=𝐵·𝑙𝑜𝑔#(1+𝑆𝑁𝑅) (2–16) donde: - C representa la capacidad del canal en bits por segundo (bps). - B es el ancho de banda del canal en hercios (Hz). - SNR es la relación señal-ruido (Signal-to-Noise Ratio), definida como el cociente entre la potencia de la señal P<$ y la potencia del ruido del canal P= . 𝑆𝑁𝑅=𝑃> 𝑃? (2–17) Este resultado implica que la capacidad de transmisión depende tanto del ancho de banda disponible como de la calidad de la señal respecto al ruido. En particular, para sistemas de comunicación de Ultra-Wideband (UWB), el gran ancho de banda asignado a esta tecnología permite alcanzar tasas de datos significativamente altas, incluso en escenarios con una relación señal-ruido moderada o baja. Este resultado se puede constatar en la Figura 2-22, donde se compara la capacidad de canal del estándar UWB con otros como WiFi o Bluetooth. Figura 2-22. Comparativa de capacidad de canal entre diferentes estándares [27]. 2.1.5 Aplicaciones Como ya se ha mencionado con anterioridad, UWB posee ciertas ventajas sobre otras tecnologías que implican su aparición en diversas aplicaciones. Tomando en cuenta lo dicho en la web de la empresa Feasycom, [19], los productos UWB abarcan diferentes tipos de artículos como chips, que permiten la comunicación entre dispositivos,
Detalles de los equipos utilizados 26 26 3.2 Actualización del firmware En la ‘nRF52840 Quick Start Guide’ encontraremos detalles de cómo proceder a actualizar el firmware, algo obligatorio tras la compra de los equipos dado que los equipos se encuentran preprogramados con la versión v.0.1.1 del firmware. Figura 3-2. Conectores de nRF52840 DK micro-USB [2]. De acuerdo con lo expresado en la guía rápida del fabricante, [2], para programar el kit de desarrollo, puedes usar la herramienta Segger J-Flash Lite, que es un componente del J-Link Software and Documentation Pack. Sigue estos pasos para descargar e instalar J-Flash Lite: 1. Accede a la página de descargas de segger. 2. Descarga y ejecuta la versión más reciente del J-Link Software and Documentation Pack compatible con tu sistema operativo. 3. Conecta un cable micro-USB al conector J2 de la placa. 4. Ubica la herramienta J-Flash Lite en el directorio de instalación y ejecuta la aplicación. 5. Al iniciar J-Flash Lite, aparecerá una ventana de inicio para la selección de dispositivo e interfaz. Haz lo siguiente: o Haz clic en el botón “...” y selecciona el dispositivo NRF52840_xxAA. o En la parte derecha de la ventana, selecciona la interfaz SWD con una velocidad de reloj de 4000 kHz. o Presiona OK para continuar. Figura 3-3. Ventana del SEGGER J-Flash LIte.
27 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores 6. Haz clic en el botón “...” para buscar el archivo de firmware que deseas programar en la placa en la ruta: DW3_QM33_SDK/Binaries/…hex (en la sección 3.3 se explicará la diferencia entre cargar los dos archivos que vienen en dicha ruta). 7. Tras seleccionar el archivo, haz clic en Program Device para iniciar el proceso de grabación del firmware. Debemos esperar unos segundos a que la instalación se complete. 8. Realiza un ciclo de encendido desconectando y volviendo a conectar la alimentación de la placa por el puerto J2. Una vez finalizado este proceso, su dispositivo estará listo para su uso. 3.3 Personalización del firmware El SDK de QM33 contiene 2 versiones diferentes: • CLI (Command Line Interface) • UCI (UWB Command Interface) Atendiendo al manual de usuario, [2], es sabido que la principal diferencia entre las versiones UCI y CLI es su método de comunicación y control. Por un lado, la versión UCI utiliza el protocolo UCI, que requiere un host externo para configurar e iniciar operaciones en el dispositivo. En cambio, la versión CLI a través de la API de ayuda interactúa directamente con el UWB-STACK permitiendo así un funcionamiento autónomo, por lo que resulta ideal para dispositivos que no disponen de una interfaz externa. Cabe destacar que ambas opciones no son compatibles entre sí, es decir, el usuario debe elegir con qué alternativa se queda. Alternativamente, no necesitas flashear el firmware UCI ni el firmware CLI para ejecutar los ejemplos de la API. Cuando trabajas con los ejemplos oficiales proporcionados en el SDK, estarás compilando y flasheando tu propio firmware directamente desde el código fuente. Este firmware reemplaza cualquier firmware UCI o CLI que ya esté en el dispositivo. Los proyectos de ejemplo contenidos en la carpeta de ‘Drivers’ son: • Proyectos en C auto-contenidos que interactúan directamente con la API de bajo nivel. • Diseñados para ser compilados y flasheados usando ST Workbench IDE (SW4STM32). • Algunos ejemplos pueden usar FreeRTOS, pero este está incluido como parte del código fuente del proyecto. Es importante mencionar que para realizar la transición del modo UCI al modo CLI, se debe iniciar el procedimiento a partir del paso 5 de la sección 3.2, correspondiente a la actualización del firmware. ¿Cuándo utilizar cada enfoque? • Firmware CLI: Ideal para aplicaciones donde se requiere un funcionamiento autónomo del dispositivo, con configuraciones y comportamientos predefinidos. No requiere desarrollo adicional ni una interfaz externa compleja. Se controla mediante comandos por consola (UART o USB), por lo que es útil para pruebas, demostraciones o integración sencilla.
Detalles de los equipos utilizados 28 28 • Firmware UCI: Adecuado para entornos donde el dispositivo se controla desde un sistema externo (por ejemplo, un script en Python o una aplicación en un PC) usando comandos por UART. Es útil para pruebas automatizadas, integración rápida con software de alto nivel o prototipado sin necesidad de compilar ni modificar firmware. • Ejemplos de la API: Recomendados cuando se desea desarrollar aplicaciones personalizadas, con control total sobre el comportamiento del dispositivo. En este enfoque, se compila y flashea un firmware específico directamente en la placa, utilizando el código fuente del SDK. Permite usar toda la funcionalidad del UWB y de la API de bajo nivel, con o sin FreeRTOS. 3.3.1 CLI Esta versión proporciona una manera fácil de enviar y recibir comandos, y puedes configurar la tarjeta como Iniciador o Respondedor en una sesión FiRa. Si optas por el archivo binario CLI deberás instalar en tu PC una app de puerto serie. Qorvo recomienda el uso de Tera Term, aunque puede usar otra. En el caso de este escrito, se ha optado por utilizar el modelo CLI, puesto que tiene configuraciones que permiten realizar medidas sin necesidad de tener ambos equipos conectados por cable al mismo PC. Este trabajo se ha desarrollado con el ancla conectada al puerto serie para ver los datos y el otro equipo alimentado por una batería externa. 3.3.1.1 Modelo CLI por línea de comandos. 3.3.1.1.1 Desarrollo+del+entorno+ Una vez descargamos la aplicación que permite comunicación por puerto serie, debemos conectar el ordenador con uno de los equipos a través del puerto J3. Al abrir la aplicación podremos seleccionar la opción de Serial, seleccionando el puerto COMXX, como se ve en la Figura 3-4. Figura 3-4. Ventana de nueva conexión. Es necesario abrir una nueva pestaña dentro de la misma aplicación y repetir el procedimiento anterior para el otro equipo. Esto permitirá establecer una comunicación independiente con cada uno e ingresar los comandos correspondientes de forma individual. En la pestaña Configuración → Puerto Serial, podemos configurar el puerto serie de acuerdo con la Figura 3-5.
29 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Figura 3-5. Ventana de configuración del puerto. Equipo Tx - INITF: Establece al equipo como iniciador en una sesión TWR de FiRa. Equipo Rx - SETAPP RESPF: Este comando permite configurar la aplicación por defecto que se inicia automáticamente tras un reinicio o ciclo de energía, configurándolo así como un respondedor en una sesión TWR de FiRa. - SAVE: Este comando guarda los parámetros de configuración de las aplicaciones CLI en la NVM (memoria no volátil). Los parámetros guardados permanecerán después de un reinicio o ciclo de alimentación, por lo que es ideal para opciones de configuración alimentadas por batería. Una vez introducidos los comandos indicados se puede desconectar el equipo respondedor del PC y alimentarlo con una batería externa. Nota: La batería externa podría no proporcionar la potencia suficiente para alimentar adecuadamente la tarjeta, lo que impediría el encendido del LED verde ubicado en la parte frontal del equipo. Como consecuencia, podrían producirse fallos recurrentes o TimeOuts en los paquetes recibidos a través de la ventana del puerto serie del iniciador. Nota: Para matar un proceso, pestaña de control, difudir el comando ‘STOP’. Figura 3-6. Ventana de difusión de comando.
Detalles de los equipos utilizados 30 30 3.3.1.1.2 Calibracio4 n+ El procedimiento de calibración consiste en la determinación de los valores de dos parámetros, el “antenna delay” y el “pdoaOffset”. Para la calibración de los dispositivos, es esencial diferenciar entre la calibración de distancias y la de ángulos, ya que cada una se realiza de forma independiente y requiere ajustes específicos en distintos parámetros del equipo. El comando LISTCAL permite visualizar todos los parámetros de calibración configurables, mientras que el comando CALKEY muestra su valor y, si se añade un número, lo modifica. Se establecerán en 0 los siguientes parámetros de calibración, considerando la comunicación en el canal 9: - CALKEY ant0.ch9.ant_delay 0 - CALKEY ant_pair0.ch9.pdoa.offset 0 Para ambas calibraciones, primero se realizarán mediciones durante varios minutos y se guardarán en el log. A continuación, se cargará el conjunto de medidas en el script Calibración.m, incluido en el Anexo A, con el fin de calcular la media de la distancia y del PDoA (Phase Difference of Arrival). A partir de estos valores y mediante una serie de operaciones matemáticas, se obtiene una primera estimación de los parámetros de calibración. El fundamento matemático de este proceso de corrección se detalla a continuación. Calibración de distancia Con la media de la distancia obtenida haremos un pequeño cálculo para hallar el valor de ant_delay correspondiente a nuestro entorno, para ello, colocaremos los equipos enfrentados a una distancia de 2 metros. El valor de retardo de la antena es un tiempo que se expresa en unidades de chip de 15,65 ps. En el espacio libre, el pulso UWB recorre 4,7 mm por cada unidad de chip (c × 15,65 ps). Si configuramos el retardo de la antena en 0 y medimos, por ejemplo, 162.16 m mientras que la distancia real es de 2m, debemos compensar el exceso de 160.16 m en ambos dispositivos, lo que equivale a 80.08 m en cada uno. Haciendo uso de la ecuación velocidad igual a espacio partido por tiempo, podemos averiguar el tiempo que tarda la onda correspondiente a la diferencia de espacio entre la medida para una antena delay 0 y la real, sabiendo la velocidad del pulso UWB: 𝐴D56EF =162,16$𝑚−2$𝑚 2 𝑐·15,65$𝑝𝑠 =17$056.44 (3–1) Por lo tanto, podemos establecer un retardo de 17056.44 unidades de chip en cada dispositivo para obtener una medición más cercana a la distancia real. - CALKEY ant0.ch9.ant_delay 17056.44 En este ejemplo, la diferencia se distribuye equitativamente entre los dos dispositivos, asumiendo que ambos contribuyen en igual medida. Esta suposición es válida para dos equipos; sin embargo, cuando se trabaja con más de dos dispositivos, es necesario aplicar métodos matemáticos que determinen con precisión el porcentaje de contribución de cada uno, como el algoritmo EDM.
31 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Este es un proceso iterativo en el que se ajusta progresivamente el valor hasta alcanzar la precisión óptima. En cada iteración, se repite el procedimiento calculando la diferencia entre el valor medio de la distancia y 2 metros. Esta diferencia se suma o resta al valor obtenido en la iteración anterior, repitiendo el proceso hasta lograr la precisión de sesgo deseada. Al ejecutar el código del Anexo A Calibración.m, se obtendrá una salida similar a la mostrada en las Figuras 3-7 y 3-8. En la primera, se puede observar el número de muestras encontradas, la media de dichos valores y una recomendación para el nuevo valor de configuración, mientras que en la segunda se muestra el histograma de las muestras de distancias obtenidas en la medición. Figura 3-7. Salida de la ventana de comandos de Calibración.m Figura 3-8. Histograma de la distribución de los valores de distancia. Calibración de ángulo El offset de PDoA se calibra en función de los valores de PDoA (la diferencia de fase de la señal recibida a través de las dos antenas del ancla), no de AoA. A 0 grados, se deben realizar varias centenas de mediciones y calcular la media del PDoA a partir de ellas. Este valor medio se utilizará como 𝑜𝑓𝑓𝑠𝑒𝑡D5G en la ec. 3-2. La configuración del offset se expresa en radianes en un formato de punto fijo Q11. Por ejemplo, 21.6 grados equivalen a 0.376991 radianes. Multiplicado por 2^11=2048, da como
Detalles de los equipos utilizados 32 32 resultado 772. La multiplicación por 2^11=2048 se debe a que el valor de desplazamiento (offset) está representado en un formato de punto fijo Q11. - CALKEY ant_pair0.ch9.pdoa.offset 772 La siguiente ecuación convertirá el ángulo medio de PDoA en grados, ofrecido por el log, al valor de configuración correcto incluyendo ángulos negativos y ajustes dentro del rango (0º-360º). 𝑃𝐷𝑜𝐴B%%>5" =$𝑟𝑜𝑢𝑛𝑑{q𝜋 180×~F𝑜𝑓𝑓𝑠𝑒𝑡D5G +360J$𝑚𝑜𝑑$360€r 2!.. •=772 (3–2) Siendo: (x)mod$360=x−360ׄx 360… (3–3) Este proceso es de naturaleza iterativa, en el cual se ajusta progresivamente el valor hasta alcanzar la precisión óptima. En cada iteración, se repite el procedimiento, y el nuevo valor obtenido se suma al valor determinado en la iteración previa. No obstante, si dicha suma excede los 12832 (equivalente a 359º), se deberá restar este mismo valor, garantizando así que el ángulo resultante permanezca dentro del rango adecuado. Por ejemplo, si el ángulo de compensación obtenido es de 362º, se restará una vuelta completa, ajustándolo a 2º. Este proceso se repite hasta alcanzar la precisión de sesgo establecida. En lo que respecta al ángulo, al ejecutar el código del Anexo A Calibración.m, se genarará una salida similar a la mostrada en las Figuras 3-9 y 3-10. En la primera, se puede observar el número de muestras encontradas, la media de dichos valores y una recomendación para el nuevo valor de configuración del PDoA offset, mientras que en la segunda se muestra el histograma de las muestras de diferencia de ángulos obtenidos en la medición. Figura 3-9. Salida de la ventana de comandos de Calibración.m
33 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Figura 3-10. Histograma de la distribución de los valores de ángulo. 3.3.2 Modelo mediante APIS Alternativamente, se pueden usar funciones avanzadas con el entorno de c++. Dichas tools ofrecidas por Qorvo son las funciones de ejemplo descritas en ‘QM33XXX_DW3XXX_Software_API_Guide_4p7’ ubicado en la carpeta ‘Devices’. Este modelo no fue desarrollado dentro del alcance de mi investigación. 3.3.3 UCI El modelo UCI viene programado para ser usado a través de una app «QorvoOneTWR», así como también es compatible con el entorno de Python. Hasta el momento, UCI obliga a tener los equipos conectados por cable al mismo PC. El entorno de Python viene con un conjunto de scripts denominados Tools para usos más avanzados como la obtención de la CIR (channel impulse response) o el monitoreo y evaluación de parámetros del equipo, son ofrecidos por Qorvo en la carpeta UWB-Qorvo-Tools. Para el presente estudio sólo se ha evaluado y documentado un script que permite lanzar una sesión FiRa como controlador/iniciador y controlado/respondedor. 3.3.3.1 Modelo UCI con «QorvoOneTWR» 3.3.3.1.1 Desarrollo+del+entorno+ De todas las opciones, esta es la más cómoda para el usuario, ya que a través de la interfaz de la aplicación se pueden poner en funcionamiento los dispositivos de una manera sencilla. Al abrir la app, se ofrece un panel inicial de control para mostrar las funcionalidades de configuración y calibración.
Detalles de los equipos utilizados 34 34 Al acceder a la pantalla de configuración, la aplicación escanea los puertos serie en busca de nuevos dispositivos. Los dispositivos detectados se muestran en la lista de la pantalla, mientras que aquellos desconectados se eliminan automáticamente. Además, los dispositivos pueden deseleccionarse para excluirlos de la sesión de TWR. En cada sesión, puede haber un único iniciador (controller), mientras que los demás dispositivos se configuran automáticamente como respondedores (controlees). Una vez tengamos los equipos andando, la aplicación permite la funcionalidad RTL (Real-Time Location) junto con características adicionales como geofencing, integración con planos de planta y registro de datos (logging). 3.3.3.1.2 Calibracio4 n+ El procedimiento de calibración consiste en la determinación de los valores de dos parámetros, el “antenna delay” y el “pdoaOffset”. Antes de comenzar a calibrar, en esta modalidad de la app QorvoOneTWR es necesaria la configuración previa de los dispositivos vía app, cuyo proceso se detalla seguidamente. 1. En la pantalla de inicio de la app, donde se pueden ver los equipos detectados por el PC vía USB conectados en el extremo del equipo al puerto J3, hacemos click en el botón ‘Configure’ correspondiente a uno de los nodos. Figura 3-11. Ventana de inicio de QorvoOneTWR. 2. Llegado este punto veremos un botón azul ‘Import Calibration’ y cargaremos el archivo que proporciona Qorvo, DW3_QM33_SDK_1.0.0/Tools/uwb-qorvotools/scripts/device/load_cal/calib_files/QM33120WDK1/jolie_aoa.json, para el nodo ancla, es decir, el que tiene el tick azul en la columna AoA. 3. Pulse el botón Guardar en la ventana de configuración del dispositivo para aplicar la configuración y la calibración. Si la calibración ha cambiado, el guardado puede tardar hasta 10 segundos.
35 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores 4. Siguiendo el mismo procedimiento de los apartados 2 y 3, cargaremos el fichero jolie_omni_non_aoa.json al otro equipo. Una vez realizados los pasos anteriores manualmente, el software QorvoOneTWR GUI proporciona una función de calibración automática, cargada en el fichero que hemos importado, que simplifica el resto del proceso de calibración cuando se trata de la app Qorvo One TWR GUI. Esta función ajusta automáticamente el retardo de antena y el offset PDoA en la NVM de la MCU [2]. Nota: Al estar guardado todo el proceso de calibración en la memoria no volátil (Non Volatile Memory, NVM) no es necesario repetirlo cada vez que se utilicen los equipos. No obstante, sí que será necesario en el caso de que se cambie de modo (UCI, CLI) ya que en dicho supuesto se elimina esta memoria [2]. 1. Una vez que la aplicación comienza a funcionar, debemos seleccionar el apartado de calibración. Ahí le daremos al botón ‘Calibrate’. Figura 3-12. Ventana de opciones de QorvoOneTWR. 2. Posteriormente, una nueva ventana se abrirá con instrucciones detalladas del proceso de autocalibración. Para iniciar la calibración automática, haga clic en el botón ‘Calibrate’. Figura 3-13. Ventana de calibración de QorvoOneTWR. Una vez completado el proceso, el software mostrará un mensaje confirmando la calibración exitosa. Posteriormente, el dispositivo quedará registrado como calibrado en la pestaña Calibración automática. Este proceso deberá ser realizado en ambos equipos.
42 4.2 Análisis de los resultados En esta sección se van a analizar los resultados obtenidos durante la campaña de recolección de datos, de manera que se mostrarán los mapas de alcance y error en cada punto del mallado, y posteriormente se hará un análisis de los niveles de RSSI y valores de distancias proporcionados por el equipo frente a la distancia real. Para concluir, se hará un modelado estadístico del error separando los casos de LOS y NLOS. En el caso NLOS, se distinguirán dos tipos: soft-NLOS y hard-NLOS. Para ello, se utilizará un modelo de mezcla gaussiana (GMM, por sus siglas en inglés) implementado en MATLAB. Este algoritmo, dado un conjunto de puntos, los clasificará en dos subconjuntos según la probabilidad de pertenencia a cada clase, en función de sus características. 4.2.1 Mapas de alcance y error Debido a la asimetría de las coberturas de cada una de las seis anclas, representar los mapas de cobertura en una sola imagen puede dificultar su interpretación. Por ello, se ha optado por separarlos por habitación y por ancla, aprovechando la división física del escenario. Para facilitar la interpretación visual del error en las gráficas, los valores han sido normalizados en el rango de 0 a 1 metro. Los errores mayores o iguales a 1 metro se han truncado y representado con un color rojo intenso. Esta estrategia permite identificar de forma aproximada el nivel de error en cada punto mediante la escala de colores, destacando claramente aquellos con errores significativos (≥ 1 m) sin diferenciarlos entre sí. Laboratorio izquierdo En este laboratorio permanecerán las anclas B, C y F, las cuales cubren la totalidad de la zona con condición de LOS y el resto de las zonas con soft-NLOS/hard-NLOS de acuerdo con las Figuras 4-3, 4-4, 4-5. Figura 4-3. Mapa de error en el mallado del Ancla B.
43 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Figura 4-4. Mapa de error en el mallado del ancla C. Figura 4-5. Mapa de error en el mallado del ancla F.
Modelo estadístico del error en medidas de distancia 44 44 Laboratorio derecho En este laboratorio permanecerán las anclas D, E, las cuales cubren la totalidad de la zona con condición de LOS y el resto de las zonas con soft-NLOS/hard-NLOS de acuerdo con las Figuras 4-6, 4-7. Figura 4-6. Mapa de error en el mallado del ancla D. Figura 4-7. Mapa de error en el mallado del ancla E.
45 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Pasillo Esta zona cubierta por el ancla A, y mostrada en la Figura 4-8, permite caracterizar largas distancias en situación de LOS y parte del laboratorio izquierdo en condiciones de hard-NLOS debido a un armario de puertas metálicas que separan ambas ubicaciones. Figura 4-8. Mapa de error en el mallado del ancla A. 4.2.2 Niveles de RSSI Tal y como se plantea en diversos estudios, como el de Valentín Barral [24], resulta especialmente útil representar el nivel de RSSI en función de la distancia entre transmisor y receptor, diferenciando entre las distintas condiciones de propagación (LOS, soft-NLOS, hard-NLOS). Esta representación permite analizar de forma más precisa el impacto de la visibilidad directa sobre el nivel de potencia recibido y por tanto, del rendimiento del enlace. En la Figura 4-9 se observa una clara tendencia decreciente del nivel de señal recibido conforme aumenta la distancia, reflejando el efecto esperado de la pérdida por trayectoria. En aquellos casos en los que se observa un incremento en el nivel de señal recibido con respecto a una distancia anterior, es importante señalar que dicho parámetro puede estar influenciado, en parte, por la orientación de la antena. Asimismo, esta atenuación no se comporta de manera uniforme para todos los escenarios. Las condiciones LoS muestran los niveles de RSSI más elevados, gracias a la existencia de una trayectoria directa entre los nodos de comunicación. En contraste, en situaciones soft-NLOS, donde la línea de visión directa se ve parcialmente obstruida por elementos del entorno, o materiales de pocas pérdidas, se produce una reducción significativa del nivel de señal, aunque la degradación aún permite mantener cierto grado de calidad en la comunicación. Por otro lado, en los escenarios hard-NLOS, la señal directa está completamente bloqueada, y el receptor depende exclusivamente de señales reflejadas, difractadas o dispersadas. Como consecuencia, el nivel de RSSI cae de forma más abrupta, evidenciando un desvanecimiento mucho más severo. Esta pérdida de potencia, además de implicar una mayor atenuación, introduce
Modelo estadístico del error en medidas de distancia 46 46 una variabilidad más acusada en la señal, lo cual puede comprometer seriamente la estabilidad del enlace. Figura 4-9. Niveles de RSSI frente a distancia. 4.2.3 Dispersión de las medidas en cada condición de vista En la Figura 4-10, se presenta una gráfica de dispersión que relaciona la distancia medida por el sistema de localización con la distancia real para distintos entornos de propagación. Los datos se han clasificado en tres categorías: entornos LOS, soft-NLOS y hard-NLOS, siendo estas últimas dos identificadas mediante un algoritmo de clustering basado en el error medio para cada par de posiciones ancla-tag (diferencia entre distancia medida y real). Los puntos en color azul corresponden a mediciones en condiciones LOS, es decir, con línea de vista directa entre emisor y receptor. En este caso, se observa una alta concentración de puntos en torno a la diagonal, lo que indica una baja desviación entre la distancia real y la estimada. Este comportamiento confirma que el sistema de localización proporciona resultados precisos y estables cuando no existen obstrucciones. Los puntos en color naranja representan entornos soft-NLOS, donde la señal experimenta ciertas obstrucciones menores como paredes delgadas, mobiliario u otros elementos. Aunque los errores de estimación aumentan respecto a LOS, la mayoría de las mediciones siguen una tendencia aproximadamente lineal, manteniendo una aceptable precisión en la estimación de distancias. Por último, los puntos en color morado corresponden a entornos hard-NLOS, caracterizados por obstrucciones severas que impiden la propagación directa de la señal como paredes gruesas o estructuras metálicas. En estos casos se observa una sobreestimación significativa de la distancia dado que el trayecto directo no puede ser detectado. En consecuencia, el algoritmo de estimación del TOA interpreta como trayecto directo el primer componente de la señal que logra detectar. Dicho componente corresponde en realidad a un trayecto secundario, que incluye al menos una
47 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores reflexión, y cuya longitud es considerablemente mayor que la del trayecto directo. El sesgo sistemático hacia valores mayores demuestra que el sistema presenta limitaciones notables bajo estas condiciones, derivadas de los errores introducidos por la propagación no directa. Figura 4-10. Representación de la distancia medida frente a distancia real. 4.3 Modelo estadístico del error En esta sección se llevará a cabo un análisis del error según la condición de vista con el objetivo de modelar el error para los casos de LOS, soft-NLOS y hard-NLOS. Cabe mencionar que para tanto para el modelo estadístico como el algoritmo de localización del capítulo 5, se ha considerado no tomar las medidas del mallado correspondientes a la espalda del ancla F ya que no es lo recomendado por el fabricante, por no estar en el perímetro de la zona considerada. Para determinar un modelo estadístico adecuado, es necesario verificar dos aspectos fundamentales: por un lado, la tendencia de la media y desviación típica del error en cada punto en función de la distancia, con el fin de establecer si esta es constante, lineal o logarítmica, entre otras; y por otro lado, se realiza el análisis del histograma de los datos crudos, ya sea normalizados o no, según la nube a la que pertenezcan. 4.3.1 LOS La Figura 4-11 muestra la media y la desviación típica de los valores de error correspondientes a cada distancia junto con su respectiva recta de regresión, y tal como se observa en dicha figura, la media del error presenta claramente una tendencia lineal con respecto a la distancia y la desviación se puede aproximar como constante ya que la leve pendiente se debe a algunos valores atípicos en la misma que se pueden considerar ‘outliers’. Dichos outliers proporcionan un error alto y se
Modelo estadístico del error en medidas de distancia 48 48 pueden dar con una probabilidad del 2% aproximadamente. En consecuencia a la tangible tendencia lineal, es posible aplicar una normalización, siguiendo el enfoque propuesto en el artículo de Alsindi [43]. Figura 4-11. Media y desviación típica del error en función de la distancia en LOS. Asimismo, representando el histograma en la Figura 4-12, se puede constatar que la distribución que mejor se ajusta es logística. Nota: no debe confundirse la normalización del eje y, la cual implica que el área bajo el histograma es igual a 1, al igual que una función de densidad de probabilidad (f.d.p.), con la normalización que se aplicará posteriormente en función de la distancia. Figura 4-12. Histograma de error de valores crudos LOS.
49 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Tal y como se menciona con anterioridad, en vista de los resultados obtenidos se puede aplicar una normalización con la distancia para obtener un modelado del error adimensional, de acuerdo con la ec. 4-1. 𝜀=𝜓𝑑=𝑑ˆ−𝑑 𝑑 (4–1) Siendo: - 𝜀: error en la medida de distancia normalizado. - 𝜓: error en la medida de distancia sin normalizar. - 𝑑 ; : distancia estimada por el equipo. - 𝑑 : distancia real Esta normalización del error con la distancia, da lugar a las Figuras 4-13, 4-14. Figura 4-13. Media y desviación típica del error en función de la distancia en LOS con normalización de distancia.
Modelo estadístico del error en medidas de distancia 50 50 Figura 4-14. Histograma de error de valores crudos LOS con normalización de distancia. Como conclusión, podemos afirmar que según nuestros resultados experimentales el modelo de error adimensional para una condición de vista LOS es la distribución logística, descrita en la ec. 4-3, de parámetros mostrados en la Tabla 4-1. Tabla 4-1. Parámetros del LOS. Parámetro Valor 𝜇 0.01023 𝑠 0.00807 𝑀𝑒𝑑𝑖𝑎 𝜇 𝐷𝑒𝑠𝑣𝑖𝑎𝑐𝑖ó𝑛$𝑡í𝑝𝑖𝑐𝑎$ 0.01464 La relación entre el parámetro de escala ‘s’ y la desviación típica está representada en la ec. 4-2. 𝐷𝑒𝑠𝑣𝑖𝑎𝑐𝑖ó𝑛$𝑡í𝑝𝑖𝑐𝑎=𝜋 √3·𝑠 (4-2) 𝑓(𝜀)=𝑒!H!I > 𝑠·(1+𝑒!H!I >)#$ (4–3) Para corroborar dicha deducción, se ha simulado un conjunto de medidas de error ficticias siguiendo el modelo establecido, dando como resultado las Figuras 4-15, 4-16. Nota: En la Figura 4-15 se ha representado las medidas crudas sin normalizar, mientras que el histograma de la Figura 4-16 lo debemos asemejar al de la Figura 4-14 ya que es normalizado.
51 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Figura 4-15. Simulación de error en medidas LOS. Figura 4-16. Histograma de simulación de error normalizado en medidas LOS.
Modelo estadístico del error en medidas de distancia 58 58 Figura 4-23. Simulación de medidas NLOS Figura 4-24. Histograma de la simulación de medidas NLOS
59 5 ALGORITMOS DE LOCALIZACIÓN ste capítulo ofrece un estudio comparativo de algoritmos para la localización en interiores, utilizando medidas experimentales adquiridas durante un periodo de investigación. La comparativa se enfoca en examinar tres versiones del algoritmo de estimación por mínimos cuadrados (LSQ): una que presupone que todas las medidas se originan en condiciones de línea de vista (LOS), otra que elimina de manera explícita las medidas detectadas como no línea de vista (NLOS), y una tercera que aplica pesos basándose en la confiabilidad estimada de cada medida. El propósito de esta comparación es valorar la precisión de los algoritmos de localización, además de establecer los beneficios y restricciones de cada método en un entorno controlado y realista. En el presente análisis se asume que el algoritmo de detección de condiciones LOS/NLOS clasifica correctamente todas las medidas. Esta hipótesis ideal permite centrar el estudio en el comportamiento de los algoritmos de localización, aunque se reconoce que la robustez frente a errores de clasificación es un aspecto relevante a abordar en trabajos futuros. 5.1 LSQ En esta sección se detallan y examinan tres ejemplos del algoritmo de estimación por mínimos cuadrados (Least Squares, LSQ) que se aplican al problema de localización en interiores. Todas las alternativas se fundamentan en la reducción de la raíz del error cuadrático medio (RMSE) entre las distancias calculadas y las mediciones realizadas entre un nodo móvil y un grupo de anclajes de posición determinada. La principal distinción entre ellas se encuentra en el manejo de las medidas: considerando todas como línea de vista (LOS), eliminando las que se identificaron como no línea de vista (NLOS), o valorando cada medida en base a su confiabilidad estimada. Sea 𝑧=[𝑥,𝑦]Q (5–1) la posición desconocida del nodo móvil, y E Toda ciencia comienza como filosofía y termina como arte. - Will Durant -
Algoritmos de localización 60 60 𝑧9=[𝑥9,𝑦9]Q (5–2) la posición del anclaje 𝑖 , para 𝑖=1,2,…,𝑁 . Se dispone de medidas de distancia 𝑑9 entre el nodo y los anclajes, obtenidas mediante un sistema de localización. La formulación básica del problema LSQ es: 𝑧 š =𝑎𝑟𝑔min R SE 𝑤9$( • 𝑧−𝑧9 • −𝑑9)# - 9/. (5–3) donde 𝑤9 representa el peso asignado a la medida del anclaje 𝑖 , que puede valer 1 (medida considerada) o 0 (medida descartada), o tomar un valor intermedio en el caso de ponderación. Para evaluar el rendimiento de cada variante, se calculó la raíz del error cuadrático medio (RMSE) a lo largo de un mallado completo del área de interés. El RMSE mide la diferencia promedio entre los valores predichos y los observados en todas las iteraciones del mallado, penalizando más fuertemente los errores grandes debido al cuadrado. Es muy usado para evaluar modelos de regresión. La fórmula convencional es: 𝑅𝑀𝑆𝐸=Ÿ1𝑛E(𝑎 9−𝑎9)# ? 9/. (5–4) Donde: - 𝑎𝑖) = valor real (observado) - 𝑎 𝑖) = valor predicho - 𝑛) = número total de puntos del mallado En cada punto del mallado se obtuvieron experimentalmente K=200 medidas distintas para cada ancla, es decir, han sido realizadas 200 estimaciones de posición por el algoritmo de localización en cada punto. Adaptando la fórmula del RMSE convencional a dicha situación, obtendríamos la fórmula: 𝑅𝑀𝑆𝐸= Ÿ 1 𝑀𝐾 EE• 𝑧 š ' ()) −𝑧'$ • # ; )/. T '/. (5–5) Denotando por 𝑧'$$ la posición real en el punto 𝑚 , y por 𝑧 š ' ()) la estimación de posición obtenida en la posición m correspondiente al k-ésimo conjunto de medidas de las distintas anclas para dicha posición. M es el número total de posiciones del mallado y K es el número de medidas por punto.
61 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Esta métrica permite comparar cuantitativamente la precisión de las distintas variantes del algoritmo. 5.1.1 LSQ con todas las medidas asumidas como LOS Esta primera variante parte del supuesto ideal de que todas las medidas son fiables y provienen de condiciones donde la línea de visión directa entre antenas está despejada. Por tanto, se le asigna el mismo peso 𝑤9=1$ a todos los anclajes. Este método revela la presencia significativa de medidas NLOS no tratadas, que introducen un sesgo en las distancias estimadas y afectan negativamente a la precisión de la localización. En general, las ejecuciones del algoritmo han mostrado un buen desempeño. No obstante, para justificar las variaciones observadas en los valores del RMSE, es necesario analizar los casos más desfavorables, es decir, aquellos que presentan mayores discrepancias. La Figura 5-1 ilustra un ejemplo de ejecución en este contexto, en el cual todas las anclas participantes poseen el mismo peso. Figura 5-1. Algoritmo de localización LSQ en Modo 1. En esta situación, se observa que la mayoría de las anclas presentan una actuación adecuada. Sin embargo, la medición correspondiente al ancla del pasillo introduce un error significativo, probablemente un hard-NLOS. Por esta razón, al asignar el mismo peso a todas las mediciones, la estimación de la posición no alcanza la precisión esperada. Para este primer modelo se obtiene un RMSE de 0.189 m.
Algoritmos de localización 62 62 5.1.2 LSQ descartando medidas LOS En esta segunda variante, se introduce un mecanismo de detección de condiciones NLOS que asumiremos que siempre acierta (por ejemplo, se podría plantear mediante IA a través de la CIR). Las medidas identificadas como NLOS se eliminan del proceso de estimación, asignando 𝑤9=0 . La eliminación de medidas contaminadas por propagación NLOS ayuda a reducir errores sistemáticos. Sin embargo, esta aproximación depende críticamente de la precisión del detector NLOS y reduce el número de observaciones, lo cual puede perjudicar la solución en áreas con poca cobertura. La Figura 5-2 muestra un ejemplo de la ejecución del algoritmo en este modo. Al compararla con la figura anterior, correspondiente al mismo punto, se evidencia que las señales NLOS deterioran significativamente la precisión de la estimación. En el caso representado por la Figura 5-1, el error obtenido fue relativamente aceptable. No obstante, en la Figura 5-2, al considerar únicamente las señales LOS, se observa una mejora mucho más notable en la precisión, con un margen de error significativamente reducido. Figura 5-2. Algoritmo de localización LSQ en Modo 2. Si bien es evidente que esta situación representa el escenario ideal, su implementación no resulta óptima desde el punto de vista económico. Garantizar al menos tres trayectorias LOS requiere la instalación de un número significativo de anclas, lo cual incrementa considerablemente los costos. Cabe recordar que, para lograr una estimación de posición en dos dimensiones, se necesitan al menos tres anclas, de lo contrario, no es posible obtener una localización válida. Asimismo, no existe cabida a la comparación entre este y los Modos 1 y 3, dado que el conjunto de situaciones en los que se estima la posición es diferente para el Modo 2. Para este segundo modelo se obtiene un RMSE de 0.087 m.
63 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores 5.1.3 LSQ con pesos en las medidas NLOS Este último modo aplica un enfoque más flexible: en lugar de descartar directamente las medidas NLOS, se les asigna un peso reducido en función de su fiabilidad estimada. El peso 𝑤9 se puede derivar de una función basada en características físicas (como el valor absoluto del error esperado, varianza estimada, etc.). Esta variante se debe a que, aunque las medidas NLOS introducen error, siguen conteniendo información útil que puede ser aprovechada si se ponderan adecuadamente. Como se explicó anteriormente, el Modelo 2 es muy restrictivo. Esta exigencia evita la ambigüedad geométrica que surge al usar solo dos anclas, donde las circunferencias asociadas a sus mediciones generan dos puntos de intersección. En este contexto, incluir una tercera ancla, aunque tenga un error considerable pero un peso bajo, puede ser determinante para resolver la ambigüedad y mejorar la precisión de la estimación. Al asignarle un peso reducido pero conservando su información direccional, el sistema puede descartar una de las soluciones posibles y converger hacia una estimación más precisa. El Modo 3 permite ajustar el peso asignado a las mediciones según su calidad, diferenciando entre condiciones LOS y NLOS. Esta flexibilidad abre distintas posibilidades operativas, pero también plantea el desafío de elegir un peso adecuado. A continuación, se presenta un análisis comparativo que muestra cómo varían los errores de localización en función del peso, identificando el valor que ofrece la mejor precisión. Tabla 5-1. Comparativa de diferentes pesos para el modo 3 de LSQ. Peso RMSE (m) 0.001 0.211 0.005 0.103 0.1 0.1 0.2 0.096 0.3 0.096 0.4 0.103 0.5 0.116 0.6 0.131 0.7 0.147 0.8 0.162 0.9 0.176 El análisis comparativo de los distintos pesos aplicados en el Modo 3 revela cómo la elección de este parámetro influye directamente en la capacidad del sistema para distinguir entre condiciones de propagación LOS y NLOS, y por tanto en la precisión de localización. Además, la Tabla 5-1 muestra que el RMSEse mantiene en el mismo orden de magnitud a lo largo del rango de valores del parámetro de peso evaluado.
Algoritmos de localización 64 64 Los pesos demasiado altos (0.8 - 0.9) tienden a igualar el comportamiento al del Modo 1, en el que no se hace distinción alguna entre LOS y NLOS. Aunque los errores son bajos en esta región, se observa que no se aprovecha completamente la capacidad del sistema para discriminar entre los distintos tipos de señal, perdiendo así una oportunidad para optimizar la precisión. Asimismo, para los pesos demasiado bajos ( ≤ 0.001) el comportamiento se va acercando al modo 2. Sin embargo, si el número de anclas LOS es menor que 3 puede suponer un empeoramiento del error si las anclas NLOS tienen un peso tan pequeño que no sean capaces de conseguir, por ejemplo, que se resuelva correctamente la ambigüedad geométrica debido a las dos intersecciones de dos circunferencias LOS. El valor óptimo según los datos experimentales utilizados se encuentra en el peso 0.2/0.3, donde se logra el menor RMSE (0.097 m). Este valor representa el mejor compromiso entre la ambigüedad geométrica (Modo 2 o pesos muy bajos) y la no discriminación entre condiciones de propagación (Modo 1 o pesos muy altos), permitiendo aprovechar al máximo las ventajas del Modo 3. De igual forma que se ha hecho para los Modos 1 y 2, se muestra en la Figura 5-3 el desempeño del algoritmo en ese punto de ejemplo para el peso óptimo 𝑤9=0 .2. Figura 5-3. Algoritmo de localización LSQ en Modo 3 con peso 0.2. En este caso, la influencia de las anclas NLOS, indicadas en morado, se ve atenuada gracias a la asignación de pesos, lo que conlleva una mejora en la precisión en comparación con el caso 1. Además, podemos constatar la pequeña diferencia que existe con respecto a los resultados obtenidos en el Modo 2.
65 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores 5.1.4 Análisis comparativo Los tres modos de LSQ (sin ponderar, eliminando NLOS y ponderando) abordan de forma distinta la presencia de errores en las mediciones. A continuación, en la Tabla 5.2, se comparan sus resultados. Tabla 5-2. Comparativa entre modos de LSQ. Modo RMSE (m) 1 0.189 2 0.087 3 0.096 Los resultados presentados en la Tabla 5.2 permiten extraer conclusiones relevantes sobre el comportamiento de los tres modos de LSQ. En primer lugar, el Modo 1 (sin distinción entre LOS y NLOS) presenta un rendimiento sorprendentemente cercano, con una diferencia de 10 cm aproximadamente, al mejor caso del Modo 3 (ponderado), con un RMSE de 0.189 m. Esto demuestra que el algoritmo base es suficientemente robusto incluso sin clasificación de condiciones de propagación, un RMSE de 18.9 cm es un excelente dato. Por otro lado, como es de esperar, el Modo 3, que aplica un peso según la confiabilidad de las mediciones, mejora los resultados con respecto al Modo 1. Esto confirma que ponderar siempre ofrece beneficios (salvo si es un peso excesivamente bajo) al permitir un equilibrio más fino entre precisión y robustez frente a señales degradadas. Finalmente, el Modo 2 (eliminación de NLOS) muestra los mejores resultados numéricos con un RMSE de 0.087 m. Sin embargo, estos valores deben interpretarse con cautela: en los casos en los que se eliminan las anclas NLOS, en la mayoría de las zonas del mallado no se dispone de un número suficiente de anclas (3) para realizar una estimación de posición fiable. Por este motivo, el modo 2 realiza el cálculo exclusivamente a partir de las estimaciones proporcionadas por las tres anclas en condición LOS del laboratorio 1. En consecuencia, las estimaciones se limitan únicamente al mallado correspondiente a dicho laboratorio, lo que implica que las estimaciones se realizan en un entorno favorable y no representan una situación generalizable. Por tanto, aunque los resultados son excelentes, no reflejan el comportamiento del sistema en todas las situaciones posibles y no pueden ser comparados con los otros dos modos. Además, el RMSE puede no ser siempre una métrica adecuada para caracterizar el error, dado que es altamente sensible a valores atípicos. Por esta razón, se procederá a corroborar las conclusiones mediante el análisis de las distribuciones de error correspondientes a cada modo en las Figuras 54, 5-5 y 5-6. Se observa que, aunque la diferencia en términos de RMSE entre los modos 1 y 3 es numéricamente mínima, dicha mejora resulta más evidente al analizar los histogramas de error, donde se aprecia una distribución más favorable en el modo 3.
Algoritmos de localización 66 66 Figura 5-4. Histograma de error del Modo 1. Figura 5-5. Histograma de error del Modo 2. Figura 5-6. Histograma de error del Modo 3 con peso 0.2.
67 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores 5.1.5 Discusión adicional: Impacto de configuraciones no recomendadas Aunque inicialmente se descartaron mediciones con el ancla en posiciones no recomendadas, concretamente el caso del tag a la espalda del ancla F, su inclusión reveló las prestaciones del algoritmo en Modo 3 incluso en el caso de posicionamiento incorrecto de un ancla. Si bien en la Tabla 5-1 (Sección 5.1.3) se observaba que no existían diferencias significativas al ponderar las medidas NLOS con pesos de 0.1 frente a 0.005, en entornos desfavorables, como el caso de las medidas añadidas (con solo un ancla LOS y el resto NLOS, donde una de estas últimas presenta un error excesivo), sí se aprecia una clara mejora al reducir el peso, tal y como se muestra en la Tabla 5-3. Esto a priori y en base a los resultados obtenidos demuestra que, en condiciones adversas, una ponderación más agresiva de las NLOS (asignando pesos menores) puede conducir a mejores estimaciones de posición, ya que mitiga el impacto de mediciones extremadamente malas. No obstante, es crucial evitar una reducción excesiva del peso en este tipo de escenarios, ya que, como se analizó en la sección anterior, pesos demasiado pequeños pueden introducir ambigüedad geométrica, lo que se traduce en un incremento del RMSE. Tabla 5-3. Comparativa de diferentes pesos para el modo 3 de LSQ con posicionamiento incorrecto de un ancla. Peso RMSE (m) 0.0001 0.381 0.001 0.271 0.003 0.158 0.004 0.145 0.005 0.149 0.05 0.181 0.1 0.191 0.2 0.197 0.5 0.208 0.7 0.223 Dado que el Modo 2 no mide más allá del perímetro del laboratorio 1, esta modalidad no tiene cabida en este estudio. En la tabla 5-4 se representa la diferencia entre pesar y no pesar en el caso de que la situación incorrecta de un ancla provoque una medida muy mala en un entorno extremo (solo un ancla LOS de las 3 exigidas). Se puede observar que con el Modo 3 se llega a conseguir un RMSE parecido al que se obtuvo con todas las anclas colocadas correctamente. Tabla 5-4. Comparativa entre modos de LSQ con posicionamiento incorrecto de un ancla. Modo RMSE (m) 1 0.248 3 0.145
Anexo A. Códigos Matlab 74 74 angulos = angulos(angulos~=0); fprintf('\nHay %d números encontrados de ángulos.\n', ... length(angulos)); % Calcular la media y la desviación estándar media = mean(angulos); desviacion = std(angulos); % Límites para valores no atípicos limite_inferior = media - 3 * desviacion; limite_superior = media + 3 * desviacion; % Filtrar valores dentro de los límites angulos_filtrados = angulos(angulos >= limite_inferior & angulos... <= limite_superior); % Mostrar resultados fprintf('Se eliminaron %d outliers.\n', length(angulos)... - length(angulos_filtrados)); anguloMedio = sum(angulos_filtrados)/length(angulos_filtrados); fprintf('El ángulo medio es %.3f º.\n',anguloMedio); Grafica(angulos_filtrados,valor,2); disp('Graficando...'); else disp('No se encontraron números después de la palabra clave.'); end %% Encontrar diferencia de fases valor = 0; % Especificar la palabra clave palabraClave = 'loc_az_pdoa'; % Expresión regular para encontrar el número después de la palabra clave pattern = strcat(palabraClave, '=(-?\d+(\.\d+)?)'); % Buscar coincidencias matches = regexp(fileContent, pattern, 'tokens'); % Extraer los números encontrados if ~isempty(matches) angulos = cellfun(@(x) str2double(x{1}), matches); %Eliminamos los ceros angulos = angulos(angulos~=0); fprintf('\nHay %d números encontrados de PDoA.\n',length(angulos)); % Calcular la media y la desviación estándar media = mean(angulos); desviacion = std(angulos); % Límites para valores no atípicos limite_inferior = media - 3 * desviacion; limite_superior = media + 3 * desviacion; % Filtrar valores dentro de los límites angulos_filtrados = angulos(angulos >= limite_inferior & angulos...
75 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores <= limite_superior); % Mostrar resultados fprintf('Se eliminaron %d outliers.\n', length(angulos)... - length(angulos_filtrados)); PDoAMedio = sum(angulos_filtrados)/length(angulos_filtrados); fprintf('El desfase medio es %.3f º.\n',PDoAMedio); % Corregimos el valor del PDoA offset PI = 3.141592653589793; degToRad = PI / 180.0; offset_deg = round((degToRad * mod((PDoAMedio + 360), 360)) /... (2 ^ -11)); Ajuste2 = PDoA_offset + offset_deg; if Ajuste2 > 12832 Ajuste2 = Ajuste2-12832; end fprintf(['El nuevo parámetro de PDoA offset a introducir...' ... ' es: %.2f\n'], Ajuste2); else disp('No se encontraron números después de la palabra clave.'); end end LSQ.m % ESTIMACIÓN DE POSICIÓN POR MÍNIMOS CUADRADOS (LSQ) % % Descripción: % Este script estima la posición de un dispositivo (tag) en un entorno % indoor utilizando medidas de distancia desde varias anclas fijas, a % través de un algoritmo de mínimos cuadrados. % % El usuario puede seleccionar entre tres modos de operación: % 1 - Modo básico (sin distinguir LOS y NLOS) % 2 - Modo filtrado (descarta medidas NLOS) % 3 - Modo ponderado (reduce el peso de NLOS) % % Entradas: % - Archivos de distancia (formato y nombres definidos externamente) % - Coordenadas de anclas % - Coordenadas reales del tag % % Salidas: % - Estimaciones de posición por cada terminación % - Cálculo de error (RMSE y MAE) % - Visualizaciones de resultados para cada punto estimado % - Histograma del vector de error % % Requiere: % - Funciones auxiliares ubicadas en '../Utilidades': % * get_all_filenames_LOS / NLOS
Anexo A. Códigos Matlab 76 76 % * get_all_distances_LOS / NLOS % * vTerminaciones % * vPosiciones % * VectorDistLSQ % * is_LOS % * boton_cerrar_plots % % Salidas mostradas en consola: % - Archivos procesados por terminación % - Distancias asociadas % - Errores de estimación por posición % - RMSE y MAE final % % Observaciones: % - Si hay menos de 3 anclas válidas (según el modo), se omite la estimación. % - La optimización se realiza con lsqnonlin, restringida al área [0,38] x [0,23]. % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 clear, clc, close all addpath('../Utilidades'); Modo = input(['Ingrese el modo (1,2,3):\n' ... '"1" Para obtener una estimación por\n mínimos cuadrados sin separar LOS y NLOS.\n' ... '"2" Para obtener una estimación por\n mínimos cuadrados descartando NLOS.\n' ... '"3" Para obtener una estimación por\n mínimos cuadrados con pesos bajos en NLOS.\n\n']); while ~ismember(Modo, [1 2 3]) Modo = input('Modo inválido. Ingrese 1, 2 o 3:\n'); end modo_titles = { 'Modo 1: Mínimos Cuadrados (sin filtrar)'; 'Modo 2: MC descartando NLOS'; 'Modo 3: MC ponderando NLOS'; }; %% ENTRADAS AllFilenames_LOS = get_all_filenames_LOS(); AllDistances_LOS = get_all_distances_LOS(); AllFilenames_NLOS = get_all_filenames_NLOS(); AllDistances_NLOS = get_all_distances_NLOS(); AllFilenames = [AllFilenames_LOS; AllFilenames_NLOS]; AllDistances = [AllDistances_LOS, AllDistances_NLOS]; Terminaciones = vTerminaciones(1); % Anclas: A, B, C, D, E, F respectivamente % Coordenadas de las anclas por losetas (x, y) anchors_all = [2 3; 2 21; 16 21; 36 21; 36 9.5; 15.95 9];
77 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores % Posición real del tag p_real = vPosiciones(Terminaciones); TamLoseta = 0.41; % metros Ej = []; Error = []; anchors_weights = []; numGraficNotShown = 0; % Crear la barra de espera hWaitbar = waitbar(0, 'Procesando archivos...', 'Name', 'Barra de Progreso'); figs = gobjects(1, length(Terminaciones)); for i = 1:length(Terminaciones) fprintf('Terminación %s\n', Terminaciones{i}); % Actualizar la barra de progreso waitbar(i / length(Terminaciones), hWaitbar,... sprintf('Procesando archivo %d de %d...', i, length(Terminaciones))); % Crear expresión regular para coincidencia exacta terminacion_regex = strcat('-', Terminaciones{i}, '$'); % solo un guión antes % Buscar coincidencias con regexp coincidencias = ~cellfun('isempty', regexp(AllFilenames, ... terminacion_regex)); % Extrae los nombres filtrados archivos_filtrados = AllFilenames(coincidencias); % Índices dentro del array original indices = find(coincidencias); % Asociar con su distancia real correspondiente distancias_asociadas = AllDistances(indices); % Mostrar resultados disp('Archivos que coinciden:'); disp(archivos_filtrados); disp('Distancias asociadas:'); disp(distancias_asociadas); d_meas_all = VectorDistLSQ(archivos_filtrados)*10^-2/TamLoseta; % Indicador de NLOS (1 = LOS, 0 = NLOS) Vis_LOS = is_LOS(archivos_filtrados); if length(archivos_filtrados(:,1)) < 3 && (Modo == 1 || Modo == 3) disp(['En los modos 1 y 3 se necesitan al menos 3 anclas para' ... ' estimar posición correctamente']); numGraficNotShown = numGraficNotShown +1; elseif sum(Vis_LOS) < 3 && Modo == 2 disp(['En el modo 2 se necesitan al menos 3 anclas LOS para' ... ' estimar posición correctamente']); numGraficNotShown = numGraficNotShown +1; else
Anexo A. Códigos Matlab 78 78 for j = 1:length(d_meas_all(:,1)) d_meas = d_meas_all(j,:)'; %Filtramos las anclas y nos quedamos con las que proporcionan medidas exist = (d_meas~=0)*1; if Modo == 2 mask = exist & Vis_LOS; anchors = anchors_all(mask, :); anchors_removed = anchors_all(~mask, :); d_meas = d_meas(mask); else anchors = anchors_all(exist == 1, :); anchors_removed = anchors_all(exist == 0, :); d_meas = d_meas(exist == 1); end if Modo == 3 mask = exist & Vis_LOS; % Pesos weights = 0 * ones(size(mask)); weights(mask) = 1; weights(exist ~= Vis_LOS) = 0.2; anchors_weights = anchors_all(weights == 0.2, :); weights = weights(weights ~= 0); end %% MÍNIMOS CUADRADOS if Modo == 3 % Función de error fun = @(p) (sqrt((p(1) - anchors(:,1)).^2 + (p(2)... - anchors(:,2)).^2) - d_meas) .* weights; else fun = @(p) sqrt((p(1) - anchors(:,1)).^2 + (p(2) ... - anchors(:,2)).^2) - d_meas; end % Estimación inicial (centroide ponderado usando las inversas % de las distancias medidas) w0 = 1 ./ (d_meas.^2); p0 = sum(anchors .* w0, 1) / sum(w0); % Ejecutar optimización options = optimoptions('lsqnonlin', 'Display', 'off'); lb = [0, 0]; ub = [38, 23]; [p_est,~,~,~,~] = lsqnonlin(fun, p0, lb, ub, options); %% CÁLCULO DE ERROR error = norm(p_est - p_real(i,:)); % Distancia euclídea entre real y estimado errorM = error*TamLoseta; %% ALMACENAMOS ERROR
79 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Ej = [Ej errorM]; %% GRAFICAR if isempty(figs(i)) || ~isgraphics(figs(i)) figs(i) = GraficaMapa(errorM, anchors, anchors_removed, ... anchors_weights, d_meas, p_real, i, p_est, ... modo_titles, Modo); end end Error = [Error Ej]; rmse = sqrt(mean((Error).^2)); mae = mean(abs(Error)); end end close(hWaitbar); fprintf('\nRMSE: %.3f m\n\n', rmse); fprintf('\nMAE: %.3f m\n\n', mae); fprintf(['Para el cálculo del RMSE no se han tenido en cuenta %d de' ... ' %d terminaciones.\n\n'], numGraficNotShown, length(Terminaciones)); % Al final del script hacer visibles todas las figuras for k = 1:length(figs) if isgraphics(figs(k)) set(figs(k), 'Visible', 'on'); end end boton_cerrar_plots(); Grafica(Error*10^2,0,3) function fig = GraficaMapa(errorM, anchors, anchors_removed, ... anchors_weights, d_meas, p_real, i, p_est, modo_titles, Modo) %figure; fig = figure('Visible', 'off'); % Crear figura oculta hold on; axis([0 38 0 23]); % Ajustar los ticks del eje X y Y a la unidad deseada xticks(0:1:38); % desde 0 hasta 38 cada 1 yticks(0:1:23); % desde 0 hasta 23 cada 1 % Activar la grilla grid on; % Opcional: hacer la grilla más visible ax = gca; ax.GridAlpha = 0.2; % transparencia del grid ax.GridLineStyle = '--'; % estilo del grid xlabel('X (losetas)', 'FontName', 'Times New Roman', 'FontSize', 18); ylabel('Y (losetas)', 'FontName', 'Times New Roman', 'FontSize', 18); title({modo_titles{Modo}, sprintf('Error: %.2f m', errorM)}, ... 'FontName', 'Times New Roman', ... 'FontSize', 20, 'FontWeight', 'bold');
Anexo A. Códigos Matlab 80 80 % Anclas plot(anchors(:,1), anchors(:,2), 'bs', 'MarkerSize', 10, ... 'LineWidth', 1, 'DisplayName', 'Anclas'); % Anclas eliminadas plot(anchors_removed(:,1), anchors_removed(:,2), 'ks', ... 'MarkerSize', 10, 'LineWidth', 1, 'DisplayName', ... 'Anclas que no participan'); if Modo == 3 % Anclas con pesos plot(anchors_weights(:,1), anchors_weights(:,2), ... 's', 'Color', [0.4, 0, 0.6], 'MarkerSize', 10, ... 'LineWidth', 1, 'DisplayName', 'Anclas con menos peso'); end % Círculos de distancia medida theta = linspace(0, 2*pi, 100); for ii = 1:size(anchors,1) x_circle = anchors(ii,1) + d_meas(ii)*cos(theta); y_circle = anchors(ii,2) + d_meas(ii)*sin(theta); if Modo == 3 && ismember(anchors(ii,:), anchors_weights, 'rows') plot(x_circle, y_circle, '--', 'Color', [0.7, 0.5, 0.9], ... 'LineWidth', 0.75, 'HandleVisibility','off'); % Morado else plot(x_circle, y_circle, '--', 'Color', 'b', ... 'LineWidth', 0.75, 'HandleVisibility','off'); % Gris end end % Posición real plot(p_real(i, 1), p_real(i, 2), 'go', 'MarkerSize', 10, ... 'LineWidth', 2, 'DisplayName', 'Localización real'); % Posición estimada plot(p_est(1), p_est(2), 'rx', 'MarkerSize', 10, ... 'LineWidth', 2, 'DisplayName', 'Localización estimada'); % Línea entre posición real y estimada plot([p_real(i, 1) p_est(1)], [p_real(i, 2) p_est(2)], ... 'r--', 'LineWidth', 1, 'DisplayName', 'Error'); % Habitación izquierda plot([0 0], [6 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([0 19], [23 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([19 19], [6 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); % Habitación derecha plot([19 38], [23 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([38 38], [6 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); % Parte inferior de las habitaciones plot([0 38], [6 6], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); % Pasillo plot([0 0], [0 6], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([38 38], [0 6], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([0 38], [0 0], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); % Etiquetas
81 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores text(9.5, 16, 'Laboratorio 1', 'HorizontalAlignment', ... 'center', 'FontName', 'Times New Roman', 'FontSize', 18); text(28.5, 16, 'Laboratorio 2', 'HorizontalAlignment', ... 'center', 'FontName', 'Times New Roman', 'FontSize', 18); text(19, 2, 'Pasillo', 'HorizontalAlignment','center', ... 'FontName', 'Times New Roman', 'FontSize', 18); legend show; legend('Location','bestoutside'); set(legend, 'FontName', 'Times New Roman', 'FontSize', 20) end Distancia_cruda_vs_distancia.m % REPRESENTACIÓN DE DISTANCIA MEDIDA VS. DISTANCIA REAL (LOS/NLOS) % % Descripción: % Este script genera una gráfica comparativa entre las distancias reales % y las distancias medidas por el sistema, tanto en condiciones LOS % (línea de vista) como NLOS (sin línea de vista). Se utiliza clustering % para clasificar errores NLOS en dos tipos: Soft y Hard. % % Funcionalidad: % - Extrae y parsea datos de múltiples archivos LOS y NLOS. % - Agrupa errores NLOS mediante mezcla de gaussianas (GMM). % - Clasifica los errores en dos grupos: Soft NLOS (errores bajos) % y Hard NLOS (errores altos). % - Representa visualmente los tres conjuntos: LOS, Soft NLOS, Hard NLOS. % % Entradas: % - Archivos de distancia LOS y NLOS en formato de texto. % % Salidas: % - Figura con: % * Distancias reales vs. medidas. % * Colores y figuras distintivas: azul y 'Δ' (LOS), naranja y 'x' (Soft NLOS), % violeta y 'o' (Hard NLOS). % % Autor: Sergio % Fecha: 17-06-2025 clear, clc, close all addpath('../Utilidades'); fig = figure('Visible', 'off'); t = title(['Distancia medida en función de la distancia para entornos' ... ' LOS y NLOS'], ... 'FontName', 'Times New Roman', 'FontSize', 45, 'FontWeight', 'bold'); t.Units = 'normalized'; t.Position(2) = t.Position(2) + 0.015; xlabel('Distancia real (m)', 'FontName', 'Times New Roman', 'FontSize', 26) ylabel('Distancia medida (m)', 'FontName', 'Times New Roman', 'FontSize', 26) hold on grid on ax = gca;
Anexo A. Códigos Matlab 82 82 ax.GridColor = [0.8 0.8 0.8]; ax.GridAlpha = 0.3; ax.Box = 'off'; ax.LineWidth = 1.2; ax.FontSize = 14; ax.FontName = 'Times New Roman'; axis tight; %% Datos LOS [filenameLOS, ~, ~, ~, ~, ~] = get_all_filenames_LOS(); [vDistanciasLOS, ~, ~, ~, ~, ~] = get_all_distances_LOS(); hWaitbar = waitbar(0, 'Procesando archivos LOS...', 'Name', ... 'Barra de Progreso LOS'); for ii = 1:size(filenameLOS, 1) waitbar(ii / size(filenameLOS, 1), hWaitbar, ... sprintf('Procesando archivo %d de %d...', ii, ... size(filenameLOS, 1))); fileContent = fileread(filenameLOS{ii}); pattern = 'distance\[cm\]=(\d+(\.\d+)?)'; matches = regexp(fileContent, pattern, 'tokens'); if ~isempty(matches) distancias = cellfun(@(x) str2double(x{1}) / 100, matches); numDist = min(length(distancias), 25); scatter(vDistanciasLOS(ii), distancias(1:numDist), ... '^', 'b', 'LineWidth', 2) end end close(hWaitbar); hLOS = scatter(nan, nan, '^', 'b', 'LineWidth', 2, 'DisplayName', 'LOS'); %% Datos NLOS y clustering por error [filenameNLOS, ~, ~, ~, ~, ~] = get_all_filenames_NLOS(); [vDistanciasNLOS, ~, ~, ~, ~, ~] = get_all_distances_NLOS(); distMeasured_all = []; dist_real_all = []; hWaitbar = waitbar(0, 'Procesando archivos NLOS...', 'Name', ... 'Barra de Progreso NLOS'); for jj = 1:size(filenameNLOS, 1) waitbar(jj / size(filenameNLOS, 1), hWaitbar, ... sprintf('Procesando archivo %d de %d...', jj, ... size(filenameNLOS, 1))); waitbar(jj / size(filenameNLOS, 1), hWaitbar); fileContent = fileread(filenameNLOS{jj}); pattern = 'distance\[cm\]=(\d+(\.\d+)?)'; matches = regexp(fileContent, pattern, 'tokens'); if ~isempty(matches) dist_medidas = cellfun(@(x) str2double(x{1}) / 100, matches); numDist = min(length(dist_medidas), 25); distMeasured_all = [distMeasured_all; dist_medidas(1:numDist)']; dist_real_all = [dist_real_all; repmat(vDistanciasNLOS(jj), ... numDist, 1)]; end end
83 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores close(hWaitbar); % Calcular errores y clasificar errores = distMeasured_all - dist_real_all; GMModel = fitgmdist(errores, 2, 'RegularizationValue', 0.01); cluster_idx = cluster(GMModel, errores); % Determinar cuál es Soft y cuál Hard media_errores = GMModel.mu; [~, idx_soft] = min(abs(media_errores)); % menor error absoluto, Soft [~, idx_hard] = max(abs(media_errores)); % mayor error absoluto, Hard % Separar puntos soft_mask = cluster_idx == idx_soft; hard_mask = cluster_idx == idx_hard; dist_soft = dist_real_all(soft_mask); distMeasured_soft = distMeasured_all(soft_mask); dist_hard = dist_real_all(hard_mask); distMeasured_hard = distMeasured_all(hard_mask); % Graficar Soft NLOS hSoft = scatter(dist_soft, distMeasured_soft, 'x', ... 'MarkerEdgeColor', [1, 0.5, 0], 'LineWidth', 2, 'DisplayName', ... 'Soft NLOS'); % Graficar Hard NLOS hHard = scatter(dist_hard, distMeasured_hard, 'o', ... 'MarkerEdgeColor', [0.5, 0, 0.5], 'LineWidth', 2, 'DisplayName', ... 'Hard NLOS'); %% Leyenda y mostrar legend([hLOS, hSoft, hHard], 'Location', 'best', ... 'FontName', 'Times New Roman', 'FontSize', 20); if isgraphics(fig) set(fig, 'Visible', 'on'); end heatmap_error_malla.m % Mapa del Mallado con Cálculo de Errores por Ancla % % Este script agrupa datos de distancias y errores asociados a múltiples % anclas (A-F), tanto en condiciones LOS como NLOS, y los representa en % un mapa mallado. El error medio por posición se visualiza en color % mediante una escala de colores normalizada. % % Requiere las funciones auxiliares: % - get_all_filenames_LOS() % - get_all_distances_LOS() % - get_all_filenames_NLOS() % - get_all_distances_NLOS() % % Autor: Sergio Ramirez Ricoy % Escuela Técnica Superior de Ingeniería US % Fecha: 17-06-2025 clear, clc, close all
Anexo A. Códigos Matlab 90 90 vError_hard = vError(cluster_idx == idx_hard); % Histograma figure; hold on; edges = linspace(min(vError), max(vError), 250); % Mismos bordes para ambos grupos histogram(vError_soft, edges, ... 'FaceAlpha', 0.6, 'FaceColor', [0.2 0.6 1], 'EdgeColor', 'k'); histogram(vError_hard, edges, ... 'FaceAlpha', 0.6, 'FaceColor', [1 0.4 0.4], 'EdgeColor', 'k'); l1 = xline(GMModel.mu(idx_soft), '--b', 'Media soft-NLOS', ... 'LineWidth', 2, 'FontName', 'Times New Roman', 'FontSize', 15); l2 = xline(GMModel.mu(idx_hard), '--r', 'Media hard-NLOS', ... 'LineWidth', 2, 'FontName', 'Times New Roman', 'FontSize', 15); % Ajuste estético como en la función Grafica ax = gca; ax.GridColor = [0.8 0.8 0.8]; ax.GridAlpha = 0.3; ax.Box = 'off'; ax.LineWidth = 1.2; ax.FontSize = 14; ax.FontName = 'Times New Roman'; xlabel('Error (cm)', 'FontName', 'Times New Roman', 'FontSize', 18); ylabel('Frecuencia', 'FontName', 'Times New Roman', 'FontSize', 18); t = title('Separación de errores por GMM', 'FontName', ... 'Times New Roman', 'FontSize', 24, 'FontWeight', 'bold'); t.Units = 'normalized'; t.Position(2) = t.Position(2) + 0.015; legend('Soft-NLOS', 'Hard-NLOS', 'Location', 'best', ... 'FontName', 'Times New Roman', 'FontSize', 20); % Ticks espaciados como en modo 3 min_tick = floor(min(vError) / 50) * 50; max_tick = ceil(max(vError) / 50) * 50; xticks(min_tick:50:max_tick); axis tight; grid on; % Buscamos la distribución que mejor se ajuste al histograma del error de soft-NLOS. Distribucion(vError_soft,1); % Buscamos la distribución que mejor se ajuste al histograma del error de hard-NLOS. idx_valid = (cluster_idx == idx_hard) & (vError > 0)'; Distribucion(vError(idx_valid),1); % Simulamos el modelo de error que hemos conformado. Simulacion_Modelo_NLOS(vError_soft,vError(idx_valid)) end
91 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores Nube_errorMedio_distancia_LOS.m % Error_vs_Distance_LOS.m % % Representa la media y la desviación estándar del error medio de distancia % en entornos LOS (línea de vista), en función de la distancia real entre nodos. % % El usuario debe seleccionar un modo: % 1 - Representa la media y desviación del error absoluto (cm). % 2 - Representa la media y desviación del error normalizado (error relativo). % % El script lee los datos de archivos LOS y extrae la información % de distancias medidas y calculadas para obtener el error. % Luego grafica dos subplots: % - Media del error frente a la distancia. % - Desviación estándar del error frente a la distancia. % % Además, ajusta una recta de regresión lineal para cada gráfica. % % Requiere funciones auxiliares: % - get_all_filenames_LOS() % - get_all_distances_LOS() % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 clear,clc,close all addpath('../Utilidades'); Modo = input(['Ingrese el modo (1,2):\n' ... '"1" para obtener una representación media\n y la desviación típica' ... ' del error en cada punto frente a la distancia.\n' ... '"2" para obtener una representación media\n y la desviación típica' ... ' del error en cada punto frente a la distancia, con normalización' ... ' de distancia.\n\n']); while ~ismember(Modo, [1 2 3]) Modo = input('Modo inválido. Ingrese 1, 2:\n'); end %% Representar media del error en funcion de la distancia % Leemos los ficheros de datos filename = get_all_filenames_LOS(); vDistancias = [get_all_distances_LOS()]*10^2; mError = []; vError = []; dError = []; for ii=1:size(filename,1) % Leer el archivo de texto fileContent = fileread(filename{ii}); % Especificar la palabra clave palabraClave = 'distance\[cm\]';
Anexo A. Códigos Matlab 92 92 % Expresión regular para encontrar el número después de la palabra clave pattern = strcat(palabraClave, '=(\d+(\.\d+)?)'); % Buscar coincidencias matches = regexp(fileContent, pattern, 'tokens'); % Extraer los números encontrados if ~isempty(matches) distancias = [cellfun(@(x) str2double(x{1}), matches)]; % Calculamos el error normalizado en la medida de la distancia Error=(distancias-vDistancias(ii)); ErrorNorm = Error./vDistancias(ii); if (Modo == 1) mError = [mError mean(Error)]; dError = [dError std(Error)]; else mError = [mError mean(ErrorNorm)]; dError = [dError std(ErrorNorm)]; end end end %Ordenamos los vectores de distancias y de error [vDistOrdenada,indice]=sort(vDistancias); % Ordenamos las distancias de menor a mayor. vErrorOrdenado=[]; vDesvOrdenado=[]; % Recorremos el nº de columnas de mError y recolocamos el vector mError de % acuerdo con el orden de vDistancias for ii=1:size(mError,2) vErrorOrdenado=[vErrorOrdenado mError(indice(ii))]; vDesvOrdenado=[vDesvOrdenado dError(indice(ii))]; end figure; tiledlayout(1,2); % 2 subplots horizontales % Subplot 1 nexttile; plot(vDistOrdenada, vErrorOrdenado, 'x', 'Color', [1 0 0], 'LineWidth', 1.5); hold on; grid on; xlim([min(vDistOrdenada)-10, max(vDistOrdenada)+10]) ylim([min(vErrorOrdenado)-2, max(vErrorOrdenado)+2]) title('Media del error frente a distancia', 'FontName', ... 'Times New Roman', 'FontSize', 20, 'FontWeight', 'bold'); if Modo == 1 xlabel('Distancia entre nodos (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) ylabel('Media del error (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) else xlabel('Distancia entre nodos', 'FontName', 'Times New Roman', ... 'FontSize', 18) ylabel('Media del error', 'FontName', 'Times New Roman', ... 'FontSize', 18) end
93 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores % Ajustar una recta de regresión lineal p = polyfit(vDistOrdenada, vErrorOrdenado, 1); % Calcular los valores ajustados vErrorOrdenado_fit = polyval(p, vDistOrdenada); % Graficar la recta de regresión en azul claro plot(vDistOrdenada, vErrorOrdenado_fit, '-', 'Color', [0.4 0.7 1], ... 'LineWidth', 2.5); legend('Puntos', 'Recta de regresión'); set(legend, 'FontName', 'Times New Roman', 'FontSize', 20) % Subplot 2 nexttile; plot(vDistOrdenada, vDesvOrdenado, 'x', 'Color', [1 0 0], 'LineWidth', 1.5); hold on; grid on; xlim([min(vDistOrdenada)-10, max(vDistOrdenada)+10]) ylim([min(vErrorOrdenado)-2, max(vErrorOrdenado)+2]) title('Desviación del error frente a distancia', 'FontName', ... 'Times New Roman', 'FontSize', 20, 'FontWeight', 'bold'); if Modo == 1 xlabel('Distancia entre nodos (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) ylabel('Desviación del error (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) else xlabel('Distancia entre nodos', 'FontName', 'Times New Roman', ... 'FontSize', 18) ylabel('Desviación del error', 'FontName', 'Times New Roman', ... 'FontSize', 18) end grid on hold on % Ajustar una recta de regresión lineal p = polyfit(vDistOrdenada, vDesvOrdenado, 1); % Calcular los valores ajustados vDesvOrdenado_fit = polyval(p, vDistOrdenada); % Graficar la recta de regresión en azul claro plot(vDistOrdenada, vDesvOrdenado_fit, '-', 'Color', [0.4 0.7 1], ... 'LineWidth', 2.5); legend('Puntos', 'Recta de regresión'); set(legend, 'FontName', 'Times New Roman', 'FontSize', 20) Nube_errorMedio_distancia_NLOS.m % Error_vs_Distance_NLOS.m % % Representa la media y la desviación estándar del error medio de distancia % en entornos NLOS (sin línea de vista), en función de la distancia real entre nodos. % % El usuario debe seleccionar un modo: % 1 - Representación sin clustering: media y desviación del error frente a distancia.
Anexo A. Códigos Matlab 94 94 % 2 - Representación con clustering: segmenta los errores en dos grupos % (Soft-NLOS y Hard-NLOS) usando un modelo de mezcla gaussiana (GMM). % % El script lee los datos de archivos NLOS, calcula el error y % posteriormente grafica los resultados en dos subplots: % - Media del error frente a la distancia. % - Desviación estándar del error frente a la distancia. % % En el modo 2, además: % - Ajusta un modelo GMM para clasificar errores en Soft-NLOS y Hard-NLOS. % - Grafica cada grupo por separado con diferentes colores. % - Calcula y muestra rectas de regresión para cada grupo. % % Requiere funciones auxiliares: % - get_all_filenames_NLOS() % - get_all_distances_NLOS() % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 clear,clc,close all addpath('../Utilidades'); Modo = input(['Ingrese el modo (1,2):\n' ... '"1" para obtener una representación media\n y la desviación típica' ... ' del error en cada punto frente a la distancia.\n' ... '"2" para obtener una representación media\n y la desviación típica' ... ' del error en cada punto frente a la distancia haciendo' ... ' clustering.\n\n']); while ~ismember(Modo, [1 2]) Modo = input('Modo inválido. Ingrese 1 o 2:\n'); end %% Representar media del error en funcion de la distancia % Leemos los ficheros de datos filename = get_all_filenames_NLOS(); vDistancias = [get_all_distances_NLOS()]*10^2; mError = []; vError = []; dError = []; for ii=1:size(filename,1) % Leer el archivo de texto fileContent = fileread(filename{ii}); % Especificar la palabra clave palabraClave = 'distance\[cm\]'; % Expresión regular para encontrar el número después de la palabra clave pattern = strcat(palabraClave, '=(\d+(\.\d+)?)'); % Buscar coincidencias matches = regexp(fileContent, pattern, 'tokens'); % Extraer los números encontrados
95 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores if ~isempty(matches) distancias = [cellfun(@(x) str2double(x{1}), matches)]; % Calculamos el error normalizado en la medida de la distancia Error=(distancias-vDistancias(ii)); mError = [mError mean(Error)]; dError = [dError std(Error)]; else disp(filename(ii)) end end %Ordenamos los vectores de distancias y de error [vDistOrdenada,indice]=sort(vDistancias); % Ordenamos las distancias de menor a mayor. vErrorOrdenado=[]; vDesvOrdenado=[]; % Recorremos el nº de columnas de mError y recolocamos el vector mError de % acuerdo con el orden de vDistancias for ii=1:size(mError,2) vErrorOrdenado=[vErrorOrdenado mError(indice(ii))]; vDesvOrdenado=[vDesvOrdenado dError(indice(ii))]; end figure; tiledlayout(1,2); % 2 subplots horizontales if (Modo == 1) % Subplot 1 nexttile; scatter(vDistOrdenada, vErrorOrdenado, 'x', 'r', 'LineWidth', 1.5); hold on; grid on; xlim([min(vDistOrdenada)-10, max(vDistOrdenada)+10]) ylim([min(vErrorOrdenado)-5, max(vErrorOrdenado)+5]) title('Media del error frente a distancia', 'FontName', ... 'Times New Roman', 'FontSize', 20, 'FontWeight', 'bold'); xlabel('Distancia entre nodos (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) ylabel('Media del error (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) % Ajustar una recta de regresión lineal p = polyfit(vDistOrdenada, vErrorOrdenado, 1); % Calcular los valores ajustados vErrorOrdenado_fit = polyval(p, vDistOrdenada); % Graficar la recta de regresión en azul claro plot(vDistOrdenada, vErrorOrdenado_fit, '-', 'Color', [0.4 0.7 1], ... 'LineWidth', 2.5); legend('Puntos', 'Recta de regresión'); set(legend, 'FontName', 'Times New Roman', 'FontSize', 20) % Subplot 2 nexttile;
Anexo A. Códigos Matlab 96 96 scatter(vDistOrdenada, vDesvOrdenado, 'x', 'r', 'LineWidth', 1.5); hold on; grid on; xlim([min(vDistOrdenada)-10, max(vDistOrdenada)+10]) ylim([min(vErrorOrdenado)-5, max(vErrorOrdenado)+5]) title('Desviación del error frente a distancia', 'FontName', ... 'Times New Roman', 'FontSize', 20, 'FontWeight', 'bold'); xlabel('Distancia entre nodos (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) ylabel('Desviación del error (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) % Ajustar una recta de regresión lineal p = polyfit(vDistOrdenada, vDesvOrdenado, 1); % Calcular los valores ajustados vDesvOrdenado_fit = polyval(p, vDistOrdenada); % Graficar la recta de regresión en azul claro plot(vDistOrdenada, vDesvOrdenado_fit, '-', 'Color', [0.4 0.7 1], ... 'LineWidth', 2.5); legend('Puntos', 'Recta de regresión'); set(legend, 'FontName', 'Times New Roman', 'FontSize', 20) else % Ajustar un modelo GMM con 2 componentes GMModel = fitgmdist(vErrorOrdenado', 2, 'RegularizationValue', 0.01); % Clasificar cada punto al componente más probable cluster_idx = cluster(GMModel, vErrorOrdenado'); posteriores = posterior(GMModel, vErrorOrdenado'); % Probabilidades por componente % Medias de los componentes (útiles para saber cuál es soft y cuál es hard) medias = GMModel.mu; [~, idx_soft] = min(medias); [~, idx_hard] = max(medias); % Separar por grupos dist_soft = vDistOrdenada(cluster_idx == idx_soft); err_soft = vErrorOrdenado(cluster_idx == idx_soft); var_soft = vDesvOrdenado(cluster_idx == idx_soft); dist_hard = vDistOrdenada(cluster_idx == idx_hard); err_hard = vErrorOrdenado(cluster_idx == idx_hard); var_hard = vDesvOrdenado(cluster_idx == idx_hard); % Ajustar recta: error = a * distancia + b p_err_soft = polyfit(dist_soft, err_soft, 1); % [pendiente, ordenada] p_err_hard = polyfit(dist_hard, err_hard, 1); p_var_soft = polyfit(dist_soft, var_soft, 1); % [pendiente, ordenada] p_var_hard = polyfit(dist_hard, var_hard, 1); % Subplot 1: Media del error por tipo de NLOS nexttile; scatter(dist_soft, err_soft, 20, 'b', 'filled'); hold on; scatter(dist_hard, err_hard, 20, 'r', 'filled'); x_vals = linspace(min(vDistOrdenada), max(vDistOrdenada), 100);
97 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores plot(x_vals, polyval(p_err_soft, x_vals), '--b', 'LineWidth', 2); plot(x_vals, polyval(p_err_hard, x_vals), '--r', 'LineWidth', 2); hold on; grid on; xlim([min(vDistOrdenada)-5, max(vDistOrdenada)+5]) ylim([min(vErrorOrdenado)-5, max(vErrorOrdenado)+5]) title('Media del error frente a distancia', 'FontName', ... 'Times New Roman', 'FontSize', 20, 'FontWeight', 'bold'); xlabel('Distancia entre nodos (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) ylabel('Media del error (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) legend('Soft-NLOS', 'Hard-NLOS', 'Regresión Soft', 'Regresión Hard'); grid on; % Subplot 2: Desviación típica frente a distancia nexttile; scatter(dist_soft, var_soft, 20, 'b', 'filled'); hold on; scatter(dist_hard, var_hard, 20, 'r', 'filled'); x_vals = linspace(min(vDistOrdenada), max(vDistOrdenada), 100); plot(x_vals, polyval(p_var_soft, x_vals), '--b', 'LineWidth', 2); plot(x_vals, polyval(p_var_hard, x_vals), '--r', 'LineWidth', 2); hold on; grid on; xlim([min(vDistOrdenada)-10, max(vDistOrdenada)+10]) ylim([min(vErrorOrdenado)-5, max(vErrorOrdenado)+5]) title('Desviación del error frente a distancia', 'FontName', ... 'Times New Roman', 'FontSize', 20, 'FontWeight', 'bold'); xlabel('Distancia entre nodos (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) ylabel('Desviación del error (cm)', 'FontName', 'Times New Roman', ... 'FontSize', 18) legend('Soft-NLOS', 'Hard-NLOS', 'Regresión Soft', 'Regresión Hard'); grid on; end RSSI_vs_distancia.m % RSSI_vs_Distance_LOS_NLOS.m % % Representa gráficamente el nivel de RSSI frente a la distancia para % entornos LOS (línea de visión directa) y NLOS (sin línea de visión directa). % % El script carga datos de archivos LOS y NLOS, extrae valores de RSSI, % y los grafica frente a la distancia medida en metros. % % Para los datos NLOS, se realiza una clasificación con un modelo % de mezcla gaussiana (GMM) para separar entre Soft-NLOS y Hard-NLOS % según el nivel de RSSI. % % El resultado es una gráfica con los tres tipos de señal diferenciados % mediante colores, símbolos y leyendas. % % Requiere las funciones auxiliares: % - get_all_filenames_LOS() % - get_all_distances_LOS() % - get_all_filenames_NLOS()
Anexo A. Códigos Matlab 98 98 % - get_all_distances_NLOS() % % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 clear, clc, close all addpath('../Utilidades'); fig = figure('Visible', 'off'); % Crear figura oculta t = title('RSSI en función de la distancia para entornos LOS y NLOS', ... 'FontName', 'Times New Roman', 'FontSize', 24, 'FontWeight', 'bold'); % Ajustar título t.Units = 'normalized'; t.Position(2) = t.Position(2) + 0.015; xlabel('Distancia (m)', 'FontName', 'Times New Roman', 'FontSize', 18) ylabel('RSSI (dBm)', 'FontName', 'Times New Roman', 'FontSize', 18) hold on grid on ax = gca; ax.GridColor = [0.8 0.8 0.8]; ax.GridAlpha = 0.3; ax.Box = 'off'; ax.LineWidth = 1.2; ax.FontSize = 14; ax.FontName = 'Times New Roman'; axis tight; %% Cargar y graficar datos LOS [filenameLOS, ~, ~, ~, ~, ~] = get_all_filenames_LOS(); [vDistanciasLOS, ~, ~, ~, ~, ~] = get_all_distances_LOS(); hWaitbar = waitbar(0, 'Procesando archivos LOS...', 'Name', ... 'Barra de Progreso LOS'); for ii = 1:size(filenameLOS, 1) waitbar(ii / size(filenameLOS, 1), hWaitbar, ... sprintf('Procesando archivo %d de %d...', ii, size(filenameLOS, 1))); fileContent = fileread(filenameLOS{ii}); pattern = 'RSSI\[dBm\]=(-?\d+(\.\d+)?)'; matches = regexp(fileContent, pattern, 'tokens'); if ~isempty(matches) RSSI = cellfun(@(x) str2double(x{1}), matches); numRSSI = min(length(RSSI), 25); % Graficar puntos LOS scatter(vDistanciasLOS(ii), RSSI(1:numRSSI), ... '^', 'b', 'LineWidth', 2) end end close(hWaitbar); % Crear marcador invisible para leyenda LOS hLOS = scatter(nan, nan, '^', 'b', 'LineWidth', 2, 'DisplayName', 'LOS'); %% Cargar datos NLOS para clasificar con GMM [filenameNLOS, ~, ~, ~, ~, ~] = get_all_filenames_NLOS();
99 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores [vDistanciasNLOS, ~, ~, ~, ~, ~] = get_all_distances_NLOS(); RSSI_all = []; dist_all = []; hWaitbar = waitbar(0, 'Procesando archivos NLOS...', 'Name', ... 'Barra de Progreso NLOS'); for jj = 1:size(filenameNLOS, 1) waitbar(jj / size(filenameNLOS, 1), hWaitbar, ... sprintf('Procesando archivo %d de %d...', jj, ... size(filenameNLOS, 1))); fileContent = fileread(filenameNLOS{jj}); pattern = 'RSSI\[dBm\]=(-?\d+(\.\d+)?)'; matches = regexp(fileContent, pattern, 'tokens'); if ~isempty(matches) RSSI = cellfun(@(x) str2double(x{1}), matches); numRSSI = min(length(RSSI), 25); RSSI_all = [RSSI_all; RSSI(1:numRSSI)']; dist_all = [dist_all; repmat(vDistanciasNLOS(jj), numRSSI, 1)]; end end close(hWaitbar); %% Clasificar con GMM (Soft vs Hard NLOS) GMModel = fitgmdist(RSSI_all, 2, 'RegularizationValue', 0.01); cluster_idx = cluster(GMModel, RSSI_all); medias = GMModel.mu; [~, idx_soft] = max(medias); % Soft: mayor RSSI [~, idx_hard] = min(medias); % Hard: menor RSSI % Separar puntos dist_soft = dist_all(cluster_idx == idx_soft); RSSI_soft = RSSI_all(cluster_idx == idx_soft); dist_hard = dist_all(cluster_idx == idx_hard); RSSI_hard = RSSI_all(cluster_idx == idx_hard); % Graficar Soft NLOS hSoft = scatter(dist_soft, RSSI_soft, 'x', ... 'MarkerEdgeColor', [1, 0.5, 0], 'LineWidth', 2, 'DisplayName', ... 'Soft NLOS'); % Graficar Hard NLOS hHard = scatter(dist_hard, RSSI_hard, 'o', ... 'MarkerEdgeColor', [0.5, 0, 0.5], 'LineWidth', 2, 'DisplayName', ... 'Hard NLOS'); %% Leyenda y mostrar figura legend([hLOS, hSoft, hHard], 'Location', 'best', ... 'FontName', 'Times New Roman', 'FontSize', 20); if isgraphics(fig) set(fig, 'Visible', 'on'); end
Anexo A. Códigos Matlab 106 106 DistanciaEntreNodos(2, 32),DistanciaEntreNodos(4, 32)... DistanciaEntreNodos(6, 32), DistanciaEntreNodos(8, 32)... DistanciaEntreNodos(10, 32),DistanciaEntreNodos(12, 32)... DistanciaEntreNodos(17, 4),DistanciaEntreNodos(17, 6)... DistanciaEntreNodos(17, 10), DistanciaEntreNodos(17, 12)... DistanciaEntreNodos(17, 14),DistanciaEntreNodos(17, 16)... DistanciaEntreNodos(17, 20) ]; distancesC_NLOS = [DistanciaEntreNodos(1.8, 6),DistanciaEntreNodos(3.8, 6)... DistanciaEntreNodos(5.8, 6), DistanciaEntreNodos(7.8, 6)... DistanciaEntreNodos(9.8, 6),DistanciaEntreNodos(11.8, 6)... DistanciaEntreNodos(1.8, 8),DistanciaEntreNodos(3.8, 8)... DistanciaEntreNodos(5.8, 8), DistanciaEntreNodos(8, 8)... DistanciaEntreNodos(9.8, 8),DistanciaEntreNodos(11.8, 8)... DistanciaEntreNodos(1.8, 10),DistanciaEntreNodos(3.8,10)... DistanciaEntreNodos(5.8, 10), DistanciaEntreNodos(8, 10)... DistanciaEntreNodos(9.8, 10),DistanciaEntreNodos(11.8, 10)... DistanciaEntreNodos(1.8, 16),DistanciaEntreNodos(3.8, 16)... DistanciaEntreNodos(5.8, 16), DistanciaEntreNodos(8, 16)... DistanciaEntreNodos(9.8, 16),DistanciaEntreNodos(11.8, 16)... DistanciaEntreNodos(1.8, 18),DistanciaEntreNodos(3.8, 18)... DistanciaEntreNodos(5.8, 18), DistanciaEntreNodos(8, 18)... DistanciaEntreNodos(3.8, 18),DistanciaEntreNodos(11.8, 18)... DistanciaEntreNodos(16.8, 12),DistanciaEntreNodos(16.8, 10)... DistanciaEntreNodos(16.8, 6), DistanciaEntreNodos(16.8, 4)... DistanciaEntreNodos(16.8, 2),DistanciaEntreNodos(16.8, 0)... DistanciaEntreNodos(16.8, 2),DistanciaEntreNodos(16.8, 4) ]; distancesD_NLOS = [DistanciaEntreNodos(17, 10),DistanciaEntreNodos(17, 7)... DistanciaEntreNodos(17, 6), DistanciaEntreNodos(17, 5)... DistanciaEntreNodos(17, 4), DistanciaEntreNodos(2, 34)... DistanciaEntreNodos(4, 34),DistanciaEntreNodos(10, 34)... DistanciaEntreNodos(12, 34),DistanciaEntreNodos(2, 32)... DistanciaEntreNodos(4, 32), DistanciaEntreNodos(8, 32)... DistanciaEntreNodos(12, 32), DistanciaEntreNodos(4, 30)... DistanciaEntreNodos(6, 30),DistanciaEntreNodos(12, 30)... DistanciaEntreNodos(2, 24), DistanciaEntreNodos(4, 24)... DistanciaEntreNodos(6, 24),DistanciaEntreNodos(8, 24)... DistanciaEntreNodos(10, 24),DistanciaEntreNodos(12, 24)... DistanciaEntreNodos(2, 22), DistanciaEntreNodos(6, 22)... DistanciaEntreNodos(8, 22),DistanciaEntreNodos(12, 22)... DistanciaEntreNodos(2, 20),DistanciaEntreNodos(4, 20)... DistanciaEntreNodos(10, 20), DistanciaEntreNodos(12, 20) ]; distancesE_NLOS = [DistanciaEntreNodos(7, 5.5),DistanciaEntreNodos(6, 5.5)... DistanciaEntreNodos(5, 5.5), DistanciaEntreNodos(4, 5.5)... DistanciaEntreNodos(3, 5.5), DistanciaEntreNodos(9.5, 34)... DistanciaEntreNodos(7.5, 34),DistanciaEntreNodos(5.5, 34)... DistanciaEntreNodos(3.5, 34),DistanciaEntreNodos(1.5, 34)... DistanciaEntreNodos(0.5, 34), DistanciaEntreNodos(9.5, 32)... DistanciaEntreNodos(7.5, 32),DistanciaEntreNodos(5.5, 32)... DistanciaEntreNodos(3.5, 32), DistanciaEntreNodos(1.5, 32)... DistanciaEntreNodos(0.5, 32), DistanciaEntreNodos(9.5, 30)... DistanciaEntreNodos(7.5, 30),DistanciaEntreNodos(5.5, 30)... DistanciaEntreNodos(3.5, 30), DistanciaEntreNodos(1.5, 30)... DistanciaEntreNodos(0.5, 30), DistanciaEntreNodos(9.5, 24)... DistanciaEntreNodos(7.5, 24),DistanciaEntreNodos(5.5, 24)... DistanciaEntreNodos(3.5, 24),DistanciaEntreNodos(1.5, 24)...
107 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores DistanciaEntreNodos(0.5, 24), DistanciaEntreNodos(9.5, 22)... DistanciaEntreNodos(7.5, 22),DistanciaEntreNodos(5.5, 22)... DistanciaEntreNodos(3.5, 22),DistanciaEntreNodos(1.5, 22)... DistanciaEntreNodos(0.5, 22), DistanciaEntreNodos(9.5, 20)... DistanciaEntreNodos(5.5, 20),DistanciaEntreNodos(3.5, 20)... DistanciaEntreNodos(1.5, 20),DistanciaEntreNodos(0.5, 20)... ]; distancesF_NLOS = [DistanciaEntreNodos(10, 6),DistanciaEntreNodos(8, 6)... DistanciaEntreNodos(6, 6), DistanciaEntreNodos(4, 6)... DistanciaEntreNodos(2, 6),DistanciaEntreNodos(0, 6)... DistanciaEntreNodos(10, 8),DistanciaEntreNodos(8, 8)... DistanciaEntreNodos(6, 8), DistanciaEntreNodos(4, 8)... DistanciaEntreNodos(2, 8),DistanciaEntreNodos(0, 8)... DistanciaEntreNodos(10, 10),DistanciaEntreNodos(8,10)... DistanciaEntreNodos(6, 10), DistanciaEntreNodos(4, 10)... DistanciaEntreNodos(2, 10), DistanciaEntreNodos(10, 16)... DistanciaEntreNodos(6, 16), DistanciaEntreNodos(4, 16)... DistanciaEntreNodos(2, 16), DistanciaEntreNodos(10, 18) DistanciaEntreNodos(8, 18),DistanciaEntreNodos(6, 18)... DistanciaEntreNodos(4, 18),DistanciaEntreNodos(0, 18)... % ... % DistanciaEntreNodos(5, 10),DistanciaEntreNodos(5, 6)... % DistanciaEntreNodos(5, 4), DistanciaEntreNodos(5, 2)... % DistanciaEntreNodos(5, 0),DistanciaEntreNodos(5, 2)... % DistanciaEntreNodos(5, 6) ]; distances = [distancesA_NLOS, distancesB_NLOS, distancesC_NLOS,... distancesD_NLOS, distancesE_NLOS, distancesF_NLOS]; end get_all_filenames_LOS.m %GET_ALL_FILENAMES_LOS Devuelve las listas de nombres de archivos LOS para varias campañas % % [filename, filenameA_LOS, filenameB_LOS, filenameC_LOS, filenameD_LOS, filenameE_LOS, filenameF_LOS] = get_all_filenames_LOS() % % Esta función retorna las rutas de archivos de datos correspondientes a % diferentes campañas etiquetadas de la A a la F, con archivos organizados % bajo la categoría LOS. % % Salidas: % filename - Lista completa de todos los nombres de archivos concatenados verticalmente % filenameA_LOS - Celda con nombres de archivos de la campaña A % filenameB_LOS - Celda con nombres de archivos de la campaña B % filenameC_LOS - Celda con nombres de archivos de la campaña C % filenameD_LOS - Celda con nombres de archivos de la campaña D % filenameE_LOS - Celda con nombres de archivos de la campaña E % filenameF_LOS - Celda con nombres de archivos de la campaña F % % Cada variable de salida es un cell array de strings con las rutas relativas % a archivos de texto que contienen datos LOS para cada campaña específica.
Anexo A. Códigos Matlab 108 108 % % Notas: % - Las rutas están relativas a la ubicación del script. % - Estos archivos contienen datos específicos de mediciones NLOS de % cada campaña y se usan para análisis posteriores. % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 function [filename, filenameA_LOS, filenameB_LOS, filenameC_LOS,... filenameD_LOS, filenameE_LOS, filenameF_LOS] = get_all_filenames_LOS() filenameA_LOS = { '../../Campaña/A/LOS/A-7-1.txt'; '../../Campaña/A/LOS/A-7-2.txt'; '../../Campaña/A/LOS/A-7-3.txt'; '../../Campaña/A/LOS/A-7-4.txt'; '../../Campaña/A/LOS/A-7-5.txt'; '../../Campaña/A/LOS/A-7-6.txt'; '../../Campaña/A/LOS/A-7-7.txt'; '../../Campaña/A/LOS/A-7-8.txt'; '../../Campaña/A/LOS/A-7-9.txt'; '../../Campaña/A/LOS/A-7-10.txt'; '../../Campaña/A/LOS/A-7-10-11.txt'; '../../Campaña/A/LOS/A-7-11.txt'; '../../Campaña/A/LOS/A-7-11-12.txt'; '../../Campaña/A/LOS/A-7-12.txt'; '../../Campaña/A/LOS/A-7-12-13.txt'; '../../Campaña/A/LOS/A-7-13.txt'; '../../Campaña/A/LOS/A-7-13-14.txt'; '../../Campaña/A/LOS/A-7-14.txt'; '../../Campaña/A/LOS/A-7-14-15.txt'; '../../Campaña/A/LOS/A-7-15.txt'; '../../Campaña/A/LOS/A-7-15-16.txt'; '../../Campaña/A/LOS/A-7-16.txt'; }; filenameB_LOS = { '../../Campaña/B/LOS/B-1-1.txt'; '../../Campaña/B/LOS/B-2-1.txt'; '../../Campaña/B/LOS/B-3-1.txt'; '../../Campaña/B/LOS/B-4-1.txt'; '../../Campaña/B/LOS/B-5-1.txt'; '../../Campaña/B/LOS/B-6-1.txt'; '../../Campaña/B/LOS/B-1-2.txt'; '../../Campaña/B/LOS/B-2-2.txt'; '../../Campaña/B/LOS/B-3-2.txt'; '../../Campaña/B/LOS/B-4-2.txt'; '../../Campaña/B/LOS/B-5-2.txt'; '../../Campaña/B/LOS/B-6-2.txt'; '../../Campaña/B/LOS/B-1-5.txt'; '../../Campaña/B/LOS/B-2-5.txt'; '../../Campaña/B/LOS/B-3-5.txt'; '../../Campaña/B/LOS/B-4-5.txt'; '../../Campaña/B/LOS/B-5-5.txt'; '../../Campaña/B/LOS/B-6-5.txt'; '../../Campaña/B/LOS/B-1-6.txt'; '../../Campaña/B/LOS/B-2-6.txt'; '../../Campaña/B/LOS/B-3-6.txt'; '../../Campaña/B/LOS/B-4-6.txt'; '../../Campaña/B/LOS/B-5-6.txt'; '../../Campaña/B/LOS/B-6-6.txt'; '../../Campaña/B/LOS/B-1-7.txt'; '../../Campaña/B/LOS/B-2-7.txt'; '../../Campaña/B/LOS/B-3-7.txt'; '../../Campaña/B/LOS/B-4-7.txt'; '../../Campaña/B/LOS/B-5-7.txt'; '../../Campaña/B/LOS/B-6-7.txt'; }; filenameC_LOS = { '../../Campaña/C/LOS/C-1-0.txt'; '../../Campaña/C/LOS/C-2-0.txt'; '../../Campaña/C/LOS/C-3-0.txt'; '../../Campaña/C/LOS/C-4-0.txt'; '../../Campaña/C/LOS/C-5-0.txt'; '../../Campaña/C/LOS/C-6-0.txt'; '../../Campaña/C/LOS/C-1-1.txt'; '../../Campaña/C/LOS/C-2-1.txt'; '../../Campaña/C/LOS/C-3-1.txt'; '../../Campaña/C/LOS/C-4-1.txt'; '../../Campaña/C/LOS/C-5-1.txt'; '../../Campaña/C/LOS/C-6-1.txt'; '../../Campaña/C/LOS/C-1-2.txt'; '../../Campaña/C/LOS/C-2-2.txt'; '../../Campaña/C/LOS/C-3-2.txt'; '../../Campaña/C/LOS/C-4-2.txt'; '../../Campaña/C/LOS/C-5-2.txt'; '../../Campaña/C/LOS/C-6-2.txt'; '../../Campaña/C/LOS/C-1-5.txt'; '../../Campaña/C/LOS/C-2-5.txt'; '../../Campaña/C/LOS/C-3-5.txt'; '../../Campaña/C/LOS/C-4-5.txt'; '../../Campaña/C/LOS/C-5-5.txt'; '../../Campaña/C/LOS/C-6-5.txt'; '../../Campaña/C/LOS/C-1-6.txt'; '../../Campaña/C/LOS/C-2-6.txt'; '../../Campaña/C/LOS/C-3-6.txt'; '../../Campaña/C/LOS/C-4-6.txt'; '../../Campaña/C/LOS/C-5-6.txt'; '../../Campaña/C/LOS/C-6-6.txt'; '../../Campaña/C/LOS/C-1-7.txt'; '../../Campaña/C/LOS/C-2-7.txt';
109 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores '../../Campaña/C/LOS/C-3-7.txt'; '../../Campaña/C/LOS/C-4-7.txt'; '../../Campaña/C/LOS/C-5-7.txt'; '../../Campaña/C/LOS/C-6-7.txt' }; filenameD_LOS = { '../../Campaña/D/LOS/D-1-10.txt'; '../../Campaña/D/LOS/D-2-10.txt'; '../../Campaña/D/LOS/D-3-10.txt'; '../../Campaña/D/LOS/D-4-10.txt'; '../../Campaña/D/LOS/D-5-10.txt'; '../../Campaña/D/LOS/D-6-10.txt'; '../../Campaña/D/LOS/D-1-11.txt'; '../../Campaña/D/LOS/D-2-11.txt'; '../../Campaña/D/LOS/D-3-11.txt'; '../../Campaña/D/LOS/D-4-11.txt'; '../../Campaña/D/LOS/D-5-11.txt'; '../../Campaña/D/LOS/D-6-11.txt'; '../../Campaña/D/LOS/D-1-12.txt'; '../../Campaña/D/LOS/D-2-12.txt'; '../../Campaña/D/LOS/D-3-12.txt'; '../../Campaña/D/LOS/D-4-12.txt'; '../../Campaña/D/LOS/D-5-12.txt'; '../../Campaña/D/LOS/D-6-12.txt'; '../../Campaña/D/LOS/D-1-15.txt'; '../../Campaña/D/LOS/D-2-15.txt'; '../../Campaña/D/LOS/D-3-15.txt'; '../../Campaña/D/LOS/D-4-15.txt'; '../../Campaña/D/LOS/D-5-15.txt'; '../../Campaña/D/LOS/D-6-15.txt'; '../../Campaña/D/LOS/D-1-16.txt'; '../../Campaña/D/LOS/D-2-16.txt'; '../../Campaña/D/LOS/D-3-16.txt'; '../../Campaña/D/LOS/D-4-16.txt'; '../../Campaña/D/LOS/D-5-16.txt'; '../../Campaña/D/LOS/D-6-16.txt' }; filenameE_LOS = { '../../Campaña/E/LOS/E-1-10.txt'; '../../Campaña/E/LOS/E-2-10.txt'; '../../Campaña/E/LOS/E-3-10.txt'; '../../Campaña/E/LOS/E-4-10.txt'; '../../Campaña/E/LOS/E-5-10.txt'; '../../Campaña/E/LOS/E-6-10.txt'; '../../Campaña/E/LOS/E-1-11.txt'; '../../Campaña/E/LOS/E-2-11.txt'; '../../Campaña/E/LOS/E-3-11.txt'; '../../Campaña/E/LOS/E-4-11.txt'; '../../Campaña/E/LOS/E-5-11.txt'; '../../Campaña/E/LOS/E-6-11.txt'; '../../Campaña/E/LOS/E-1-12.txt'; '../../Campaña/E/LOS/E-2-12.txt'; '../../Campaña/E/LOS/E-3-12.txt'; '../../Campaña/E/LOS/E-4-12.txt'; '../../Campaña/E/LOS/E-5-12.txt'; '../../Campaña/E/LOS/E-6-12.txt'; '../../Campaña/E/LOS/E-1-15.txt'; '../../Campaña/E/LOS/E-2-15.txt'; '../../Campaña/E/LOS/E-3-15.txt'; '../../Campaña/E/LOS/E-4-15.txt'; '../../Campaña/E/LOS/E-5-15.txt'; '../../Campaña/E/LOS/E-6-15.txt'; '../../Campaña/E/LOS/E-1-16.txt'; '../../Campaña/E/LOS/E-2-16.txt'; '../../Campaña/E/LOS/E-3-16.txt'; '../../Campaña/E/LOS/E-4-16.txt'; '../../Campaña/E/LOS/E-5-16.txt'; '../../Campaña/E/LOS/E-6-16.txt' }; filenameF_LOS = { '../../Campaña/F/LOS/F-1-0.txt'; '../../Campaña/F/LOS/F-2-0.txt'; '../../Campaña/F/LOS/F-3-0.txt'; '../../Campaña/F/LOS/F-4-0.txt'; '../../Campaña/F/LOS/F-5-0.txt'; '../../Campaña/F/LOS/F-1-1.txt'; '../../Campaña/F/LOS/F-2-1.txt'; '../../Campaña/F/LOS/F-3-1.txt'; '../../Campaña/F/LOS/F-4-1.txt'; '../../Campaña/F/LOS/F-5-1.txt'; '../../Campaña/F/LOS/F-1-2.txt'; '../../Campaña/F/LOS/F-2-2.txt'; '../../Campaña/F/LOS/F-3-2.txt'; '../../Campaña/F/LOS/F-4-2.txt'; '../../Campaña/F/LOS/F-5-2.txt'; '../../Campaña/F/LOS/F-1-5.txt'; '../../Campaña/F/LOS/F-2-5.txt'; '../../Campaña/F/LOS/F-3-5.txt'; '../../Campaña/F/LOS/F-4-5.txt'; '../../Campaña/F/LOS/F-5-5.txt'; '../../Campaña/F/LOS/F-1-6.txt'; '../../Campaña/F/LOS/F-2-6.txt'; '../../Campaña/F/LOS/F-3-6.txt'; '../../Campaña/F/LOS/F-4-6.txt'; '../../Campaña/F/LOS/F-5-6.txt'; '../../Campaña/F/LOS/F-1-7.txt'; '../../Campaña/F/LOS/F-2-7.txt'; '../../Campaña/F/LOS/F-3-7.txt'; '../../Campaña/F/LOS/F-4-7.txt'; '../../Campaña/F/LOS/F-5-7.txt' }; filename = [filenameA_LOS; filenameB_LOS; filenameC_LOS; filenameD_LOS;... filenameE_LOS; filenameF_LOS];
Anexo A. Códigos Matlab 110 110 end get_all_filenames_NLOS.m %GET_ALL_FILENAMES_NLOS Devuelve los nombres de archivo para datos NLOS de la campaña % % [filename, filenameA_NLOS, filenameB_NLOS, filenameC_NLOS, filenameD_NLOS, filenameE_NLOS, filenameF_NLOS] = get_all_filenames_NLOS() % % Esta función retorna las rutas completas a los archivos de datos NLOS % (No Line of Sight) correspondientes a las campañas A, B, C, D, E y F. % % Salidas: % filename - Cell array que concatena todos los nombres de archivos NLOS de A a F. % filenameA_NLOS - Cell array con los nombres de archivos NLOS de la campaña A. % filenameB_NLOS - Cell array con los nombres de archivos NLOS de la campaña B. % filenameC_NLOS - Cell array con los nombres de archivos NLOS de la campaña C. % filenameD_NLOS - Cell array con los nombres de archivos NLOS de la campaña D. % filenameE_NLOS - Cell array con los nombres de archivos NLOS de la campaña E. % filenameF_NLOS - Cell array con los nombres de archivos NLOS de la campaña F. % % Notas: % - Las rutas están relativas a la ubicación del script. % - Estos archivos contienen datos específicos de mediciones NLOS de % cada campaña y se usan para análisis posteriores. % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 function [filename, filenameA_NLOS, filenameB_NLOS, filenameC_NLOS, filenameD_NLOS, filenameE_NLOS, filenameF_NLOS] = get_all_filenames_NLOS() filenameA_NLOS = { '../../Campaña/A/NLOS/A-4-0.txt'; '../../Campaña/A/NLOS/A-5-0.txt'; '../../Campaña/A/NLOS/A-6-0.txt'; '../../Campaña/A/NLOS/A-2-1.txt'; '../../Campaña/A/NLOS/A-3-1.txt'; '../../Campaña/A/NLOS/A-4-1.txt'; '../../Campaña/A/NLOS/A-5-1.txt'; '../../Campaña/A/NLOS/A-6-1.txt'; '../../Campaña/A/NLOS/A-1-2.txt'; '../../Campaña/A/NLOS/A-3-2.txt'; '../../Campaña/A/NLOS/A-4-2.txt'; '../../Campaña/A/NLOS/A-5-2.txt'; '../../Campaña/A/NLOS/A-6-2.txt'; '../../Campaña/A/NLOS/A-1-5.txt'; '../../Campaña/A/NLOS/A-2-5.txt'; '../../Campaña/A/NLOS/A-3-5.txt'; '../../Campaña/A/NLOS/A-4-5.txt'; '../../Campaña/A/NLOS/A-6-5.txt'; '../../Campaña/A/NLOS/A-2-6.txt'; '../../Campaña/A/NLOS/A-3-6.txt'; '../../Campaña/A/NLOS/A-5-6.txt'; '../../Campaña/A/NLOS/A-2-7.txt'; '../../Campaña/A/NLOS/A-3-7.txt' }; filenameB_NLOS = { '../../Campaña/B/NLOS/B-1-10.txt'; '../../Campaña/B/NLOS/B-2-10.txt'; '../../Campaña/B/NLOS/B-3-10.txt'; '../../Campaña/B/NLOS/B-4-10.txt'; '../../Campaña/B/NLOS/B-5-10.txt'; '../../Campaña/B/NLOS/B-6-10.txt';
111 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores '../../Campaña/B/NLOS/B-1-11.txt'; '../../Campaña/B/NLOS/B-2-11.txt'; '../../Campaña/B/NLOS/B-3-11.txt'; '../../Campaña/B/NLOS/B-4-11.txt'; '../../Campaña/B/NLOS/B-5-11.txt'; '../../Campaña/B/NLOS/B-6-11.txt'; '../../Campaña/B/NLOS/B-1-12.txt'; '../../Campaña/B/NLOS/B-2-12.txt'; '../../Campaña/B/NLOS/B-3-12.txt'; '../../Campaña/B/NLOS/B-4-12.txt'; '../../Campaña/B/NLOS/B-5-12.txt'; '../../Campaña/B/NLOS/B-6-12.txt'; '../../Campaña/B/NLOS/B-1-15.txt'; '../../Campaña/B/NLOS/B-3-15.txt'; '../../Campaña/B/NLOS/B-4-15.txt'; '../../Campaña/B/NLOS/B-5-15.txt'; '../../Campaña/B/NLOS/B-1-16.txt'; '../../Campaña/B/NLOS/B-2-16.txt'; '../../Campaña/B/NLOS/B-3-16.txt'; '../../Campaña/B/NLOS/B-4-16.txt'; '../../Campaña/B/NLOS/B-5-16.txt'; '../../Campaña/B/NLOS/B-6-16.txt'; '../../Campaña/B/NLOS/B-7-2.txt'; '../../Campaña/B/NLOS/B-7-3.txt'; '../../Campaña/B/NLOS/B-7-5.txt'; '../../Campaña/B/NLOS/B-7-6.txt'; '../../Campaña/B/NLOS/B-7-7.txt'; '../../Campaña/B/NLOS/B-7-8.txt'; '../../Campaña/B/NLOS/B-7-10.txt' }; filenameC_NLOS = { '../../Campaña/C/NLOS/C-1-10.txt'; '../../Campaña/C/NLOS/C-2-10.txt'; '../../Campaña/C/NLOS/C-3-10.txt'; '../../Campaña/C/NLOS/C-4-10.txt'; '../../Campaña/C/NLOS/C-5-10.txt'; '../../Campaña/C/NLOS/C-6-10.txt'; '../../Campaña/C/NLOS/C-1-11.txt'; '../../Campaña/C/NLOS/C-2-11.txt'; '../../Campaña/C/NLOS/C-3-11.txt'; '../../Campaña/C/NLOS/C-4-11.txt'; '../../Campaña/C/NLOS/C-5-11.txt'; '../../Campaña/C/NLOS/C-6-11.txt'; '../../Campaña/C/NLOS/C-1-12.txt'; '../../Campaña/C/NLOS/C-2-12.txt'; '../../Campaña/C/NLOS/C-3-12.txt'; '../../Campaña/C/NLOS/C-4-12.txt'; '../../Campaña/C/NLOS/C-5-12.txt'; '../../Campaña/C/NLOS/C-6-12.txt'; '../../Campaña/C/NLOS/C-1-15.txt'; '../../Campaña/C/NLOS/C-2-15.txt'; '../../Campaña/C/NLOS/C-3-15.txt'; '../../Campaña/C/NLOS/C-4-15.txt'; '../../Campaña/C/NLOS/C-5-15.txt'; '../../Campaña/C/NLOS/C-6-15.txt'; '../../Campaña/C/NLOS/C-1-16.txt'; '../../Campaña/C/NLOS/C-2-16.txt'; '../../Campaña/C/NLOS/C-3-16.txt'; '../../Campaña/C/NLOS/C-4-16.txt'; '../../Campaña/C/NLOS/C-5-16.txt'; '../../Campaña/C/NLOS/C-6-16.txt'; '../../Campaña/C/NLOS/C-7-1.txt'; '../../Campaña/C/NLOS/C-7-2.txt'; '../../Campaña/C/NLOS/C-7-4.txt'; '../../Campaña/C/NLOS/C-7-5.txt'; '../../Campaña/C/NLOS/C-7-6.txt'; '../../Campaña/C/NLOS/C-7-7.txt'; '../../Campaña/C/NLOS/C-7-8.txt'; '../../Campaña/C/NLOS/C-7-9.txt' }; filenameD_NLOS = { '../../Campaña/D/NLOS/D-7-12.txt'; '../../Campaña/D/NLOS/D-7-13-14.txt'; '../../Campaña/D/NLOS/D-7-14.txt'; '../../Campaña/D/NLOS/D-7-14-15.txt'; '../../Campaña/D/NLOS/D-7-15.txt'; '../../Campaña/D/NLOS/D-1-0.txt'; '../../Campaña/D/NLOS/D-2-0.txt'; '../../Campaña/D/NLOS/D-5-0.txt'; '../../Campaña/D/NLOS/D-6-0.txt'; '../../Campaña/D/NLOS/D-1-1.txt'; '../../Campaña/D/NLOS/D-2-1.txt'; '../../Campaña/D/NLOS/D-4-1.txt'; '../../Campaña/D/NLOS/D-6-1.txt'; '../../Campaña/D/NLOS/D-2-2.txt'; '../../Campaña/D/NLOS/D-3-2.txt'; '../../Campaña/D/NLOS/D-6-2.txt'; '../../Campaña/D/NLOS/D-1-5.txt'; '../../Campaña/D/NLOS/D-2-5.txt'; '../../Campaña/D/NLOS/D-3-5.txt'; '../../Campaña/D/NLOS/D-4-5.txt'; '../../Campaña/D/NLOS/D-5-5.txt'; '../../Campaña/D/NLOS/D-6-5.txt'; '../../Campaña/D/NLOS/D-1-6.txt'; '../../Campaña/D/NLOS/D-3-6.txt'; '../../Campaña/D/NLOS/D-4-6.txt'; '../../Campaña/D/NLOS/D-6-6.txt'; '../../Campaña/D/NLOS/D-1-7.txt'; '../../Campaña/D/NLOS/D-2-7.txt'; '../../Campaña/D/NLOS/D-5-7.txt'; '../../Campaña/D/NLOS/D-6-7.txt' }; filenameE_NLOS = { '../../Campaña/E/NLOS/E-7-13-14.txt'; '../../Campaña/E/NLOS/E-7-14.txt'; '../../Campaña/E/NLOS/E-7-14-15.txt'; '../../Campaña/E/NLOS/E-7-15.txt'; '../../Campaña/E/NLOS/E-7-15-16.txt'; '../../Campaña/E/NLOS/E-1-0.txt';
Anexo A. Códigos Matlab 112 112 '../../Campaña/E/NLOS/E-2-0.txt'; '../../Campaña/E/NLOS/E-3-0.txt'; '../../Campaña/E/NLOS/E-4-0.txt'; '../../Campaña/E/NLOS/E-5-0.txt'; '../../Campaña/E/NLOS/E-6-0.txt'; '../../Campaña/E/NLOS/E-1-1.txt'; '../../Campaña/E/NLOS/E-2-1.txt'; '../../Campaña/E/NLOS/E-3-1.txt'; '../../Campaña/E/NLOS/E-4-1.txt'; '../../Campaña/E/NLOS/E-5-1.txt'; '../../Campaña/E/NLOS/E-6-1.txt'; '../../Campaña/E/NLOS/E-1-2.txt'; '../../Campaña/E/NLOS/E-2-2.txt'; '../../Campaña/E/NLOS/E-3-2.txt'; '../../Campaña/E/NLOS/E-4-2.txt'; '../../Campaña/E/NLOS/E-5-2.txt'; '../../Campaña/E/NLOS/E-6-2.txt'; '../../Campaña/E/NLOS/E-1-5.txt'; '../../Campaña/E/NLOS/E-2-5.txt'; '../../Campaña/E/NLOS/E-3-5.txt'; '../../Campaña/E/NLOS/E-4-5.txt'; '../../Campaña/E/NLOS/E-5-5.txt'; '../../Campaña/E/NLOS/E-6-5.txt'; '../../Campaña/E/NLOS/E-1-6.txt'; '../../Campaña/E/NLOS/E-2-6.txt'; '../../Campaña/E/NLOS/E-3-6.txt'; '../../Campaña/E/NLOS/E-4-6.txt'; '../../Campaña/E/NLOS/E-5-6.txt'; '../../Campaña/E/NLOS/E-6-6.txt'; '../../Campaña/E/NLOS/E-1-7.txt'; '../../Campaña/E/NLOS/E-3-7.txt'; '../../Campaña/E/NLOS/E-4-7.txt'; '../../Campaña/E/NLOS/E-5-7.txt'; '../../Campaña/E/NLOS/E-6-7.txt' }; filenameF_NLOS = { '../../Campaña/F/NLOS/F-1-10.txt'; '../../Campaña/F/NLOS/F-2-10.txt'; '../../Campaña/F/NLOS/F-3-10.txt'; '../../Campaña/F/NLOS/F-4-10.txt'; '../../Campaña/F/NLOS/F-5-10.txt'; '../../Campaña/F/NLOS/F-6-10.txt'; '../../Campaña/F/NLOS/F-1-11.txt'; '../../Campaña/F/NLOS/F-2-11.txt'; '../../Campaña/F/NLOS/F-3-11.txt'; '../../Campaña/F/NLOS/F-4-11.txt'; '../../Campaña/F/NLOS/F-5-11.txt'; '../../Campaña/F/NLOS/F-6-11.txt'; '../../Campaña/F/NLOS/F-1-12.txt'; '../../Campaña/F/NLOS/F-2-12.txt'; '../../Campaña/F/NLOS/F-3-12.txt'; '../../Campaña/F/NLOS/F-4-12.txt'; '../../Campaña/F/NLOS/F-5-12.txt'; '../../Campaña/F/NLOS/F-1-15.txt'; '../../Campaña/F/NLOS/F-3-15.txt'; '../../Campaña/F/NLOS/F-4-15.txt'; '../../Campaña/F/NLOS/F-5-15.txt'; '../../Campaña/F/NLOS/F-1-16.txt'; '../../Campaña/F/NLOS/F-2-16.txt'; '../../Campaña/F/NLOS/F-3-16.txt'; '../../Campaña/F/NLOS/F-4-16.txt'; '../../Campaña/F/NLOS/F-6-16.txt'; % ... % '../../Campaña/F/NLOS/F-7-2.txt'; '../../Campaña/F/NLOS/F-7-4.txt'; % '../../Campaña/F/NLOS/F-7-5.txt'; '../../Campaña/F/NLOS/F-7-6.txt'; % '../../Campaña/F/NLOS/F-7-7.txt'; '../../Campaña/F/NLOS/F-7-8.txt'; % '../../Campaña/F/NLOS/F-7-10.txt' }; filename = [filenameA_NLOS; filenameB_NLOS; filenameC_NLOS;... filenameD_NLOS; filenameE_NLOS; filenameF_NLOS]; end Grafica.m %GRAFICA Genera un histograma para diferentes tipos de datos filtrados % % Grafica(datos_filtrados, valor, i) crea un histograma basado en los datos % contenidos en datos_filtrados y realiza distintas gráficas según el valor % de i, mostrando además líneas de referencia para la media y el valor real. % También mejora la estética del gráfico, configurando etiquetas, % leyendas, cuadrícula, y estilo de fuente. % % Entradas: % datos_filtrados : Vector numérico con los datos que se desean graficar
113 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores % en el histograma. % % valor : Valor real de referencia contra el cual se comparan % las medidas de datos_filtrados (por ejemplo, valor % verdadero de distancia o ángulo). % % i : Entero que determina el tipo de gráfica a realizar: % - i = 1: Grafica las medidas de distancia de un punto % frente a su valor real. % - i = 2: Grafica las medidas de ángulo de un punto % frente a su valor real. % - i = 3: Grafica las medidas de error de un conjunto % de puntos frente a 0. % - i = 4: Grafica las medidas de error normalizado % de un conjunto de puntos frente a 0. % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 function Grafica(datos_filtrados, valor, i) media = mean(datos_filtrados); etiquetas = ["Distancia", "Ángulo", "Error"]; unidades = [" (cm)"," (°)"," (cm)"]; idx = (i > 2) + (i > 1) + 1; % para i=1,2,3,4 % Crear el histograma figure; if (idx > 2) dataMin = min(datos_filtrados); dataMax = max(datos_filtrados); dataRange = dataMax - dataMin; if all(mod(datos_filtrados,1)==0) && dataRange < 50 bin_edges = (dataMin-0.5):(dataMax+0.5); xticks_vals = dataMin:dataMax; else numBins = min(200, round(length(datos_filtrados)/5)); bin_width = dataRange / numBins; bin_edges = dataMin - bin_width : bin_width : dataMax... + bin_width; xticks_vals = linspace(dataMin, dataMax, 6); end else % Asegura que cada entero tenga su propio bin bin_edges = (min(datos_filtrados)-0.5):(max(datos_filtrados)+0.5); xticks_vals = min(datos_filtrados):max(datos_filtrados); end % Crear el histograma con bins ajustados histogram(datos_filtrados, 'BinEdges', bin_edges, 'FaceColor',... [0.2 0.6 1],'EdgeColor' ... , 'k', 'FaceAlpha', 0.8); hold on; if (idx == 1 || idx == 2) l1 = xline(media, '--b', 'Media', 'LineWidth', 2); l2 = xline(valor, '--r', 'Valor real', 'LineWidth', 2);
Anexo A. Códigos Matlab 114 114 set(l1, 'FontName', 'Times New Roman', 'FontSize', 20) set(l2, 'FontName', 'Times New Roman', 'FontSize', 20) legend('Número de repeticiones', 'Media', 'Valor real') else legend('Número de repeticiones') end % Mejorar la estética del gráfico grid on % Activar la cuadrícula ax = gca; ax.GridColor = [0.8 0.8 0.8]; % Hacer la cuadrícula más tenue ax.GridAlpha = 0.3; % Hacer la cuadrícula más sutil ax.Box = 'off'; % Quitar borde superior y derecho ax.LineWidth = 1.2; % Engrosar los ejes ax.FontSize = 18; ax.FontName = 'Times New Roman'; if (i==4) t = title("Histograma de " + etiquetas(idx) + ... " normalizado con la distancia", 'FontName',... 'Times New Roman','FontSize', 24, 'FontWeight', 'bold'); xlabel(etiquetas(idx), 'FontName', 'Times New Roman', 'FontSize', 24) else % Agregar etiquetas y título con mejor formato t = title("Histograma de " + etiquetas(idx), 'FontName',... 'Times New Roman', 'FontSize', 24, 'FontWeight', 'bold'); xlabel(etiquetas(idx)+unidades(idx), 'FontName', ... 'Times New Roman', 'FontSize', 24) end ylabel('Frecuencia', 'FontName', 'Times New Roman', 'FontSize', 24) set(legend, 'FontName', 'Times New Roman', 'FontSize', 28) % Mejorar la posición del título t.Units = 'normalized'; t.Position(2) = t.Position(2)+0.015; % Ajustar los ticks para que solo aparezcan números enteros xticks(xticks_vals) % Ajustar los límites de los ejes para que ocupe todo el espacio axis tight; end is_LOS.m %IS_LOS Determina si un archivo pertenece a la categoría LOS o NLOS para cada letra de campaña % % is_LOS = is_LOS(filename) recibe un nombre de archivo y devuelve un vector % lógico de 6 elementos donde cada posición corresponde a una letra % de campaña ('A' a 'F'). % % Para cada letra, la función busca si el nombre de archivo contiene esa letra % dentro de la ruta, y luego verifica si el archivo está etiquetado como 'LOS'
115 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores % o 'NLOS'. % % Salida: % is_LOS : Vector columna de 6 elementos donde: % 1 indica que el archivo para esa letra es LOS, % 0 indica que es NLOS o no se encuentra la letra. % % Nota: % - Si un archivo no tiene etiqueta 'LOS' o 'NLOS', se muestra un mensaje y se % asigna 0 para esa letra. % - La función asume que los nombres de archivo incluyen el patrón '/[letra]/' % para identificar la campaña correspondiente. % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 function is_LOS = is_LOS(filename) is_LOS = zeros(6, 1); % Inicializamos con ceros letras = {'A', 'B', 'C', 'D', 'E', 'F'}; for j = 1:length(letras) letra = letras{j}; idx = find(contains(filename, ['/' letra '/']), 1); if ~isempty(idx) % Verificamos si el archivo indica LOS o NLOS if contains(filename{idx}, 'NLOS', 'IgnoreCase', true) is_LOS(j) = 0; elseif contains(filename{idx}, 'LOS', 'IgnoreCase', true) is_LOS(j) = 1; else fprintf('Archivo sin etiqueta LOS/NLOS: %s\n', letra); is_LOS(j) = 0; end else is_LOS(j) = 0; end end end Simulacion_Modelo_LOS.m %SIMULACION_MODELO_LOS Simula errores en medidas de distancia bajo modelo LOS % % Simulacion_Modelo_LOS(vErrorNorm) recibe un vector con errores normalizados % y genera una simulación de errores ficticios siguiendo una distribución % logística ajustada a esos datos. % % La función genera un conjunto de errores simulados multiplicados por % distancias aleatorias entre 0 y 12 metros, para luego graficar la % comparación entre la distancia ideal y la distancia medida con error. % % Entrada: % vErrorNorm : Vector con errores normalizados observados (sin unidades) %
Anexo A. Códigos Matlab 122 122 % Ajustar los ticks del eje X y Y a la unidad deseada xticks(0:1:38); % desde 0 hasta 10 cada 0.5 yticks(0:1:23); % desde -1 hasta 1 cada 0.5 % Activar la grilla grid on; % Opcional: hacer la grilla más visible ax = gca; ax.GridAlpha = 0.2; % transparencia del grid ax.GridLineStyle = '--'; % estilo del grid xlabel('X (losetas)', 'FontName', 'Times New Roman', 'FontSize', 18); ylabel('Y (losetas)', 'FontName', 'Times New Roman', 'FontSize', 18); title('Mapa del mallado', 'FontName', 'Times New Roman', 'FontSize', ... 20, 'FontWeight', 'bold'); % Anclas % Etiquetas de las anclas (A-F) anchor_labels = {'A', 'B', 'C', 'D', 'E', 'F'}; for i = 1:size(anchors, 1) text(anchors(i,1), anchors(i,2), anchor_labels{i}, ... 'HorizontalAlignment', 'center', ... 'FontName', 'Times New Roman', ... 'FontSize', 10, ... 'FontWeight', 'bold', ... 'Color', 'blue'); end plot(anchors(:,1), anchors(:,2), 'bs', 'MarkerSize', 10, ... 'DisplayName', 'Anclas'); % Habitación izquierda plot([0 0], [6 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([0 19], [23 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([19 19], [6 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); % Habitación derecha plot([19 38], [23 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([38 38], [6 23], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); % Parte inferior de las habitaciones plot([0 38], [6 6], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); % Pasillo plot([0 0], [0 6], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([38 38], [0 6], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); plot([0 38], [0 0], 'k-', 'LineWidth', 2, 'HandleVisibility','off'); % Etiquetas text(9.5, 16, 'Laboratorio 1', 'HorizontalAlignment','center', ... 'FontName', 'Times New Roman', 'FontSize', 18); text(28.5, 16, 'Laboratorio 2', 'HorizontalAlignment','center', ... 'FontName', 'Times New Roman', 'FontSize', 18); text(19, 2, 'Pasillo', 'HorizontalAlignment','center', 'FontName', ... 'Times New Roman', 'FontSize', 18); end
123 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores vTerminaciones.m %VTERMINACIONES Genera nombres de ficheros representando posiciones en un mallado % % ficheros = vTerminaciones() devuelve un cell array con los nombres de ficheros % que representan combinaciones válidas de filas y columnas de un mallado, % excluyendo ciertas columnas prohibidas según reglas específicas. % % Reglas y detalles: % - Filas consideradas: 1 a 7 % - Columnas consideradas: 0 a 16 % - Columnas prohibidas para filas 1 a 6: 3, 4, 8, 9, 13, 14 % - Para la fila 7 se excluye la columna 0 % - En la fila 7 se agregan mallados intercalados en forma de archivos % con nombres '7-colInicio-colFin.txt' para columnas desde 10 a 15 % % Entrada: i % - Si toma el valor 0, comienza el mallado en la columna 0 % - Si toma el valor 1, comienza el mallado en la columna 1 % % Salida: % ficheros : cell array con nombres de archivos en formato: % 'fila-columna.txt' o '7-colInicio-colFin.txt' % % Autor: Sergio Ramírez Ricoy % Fecha: 17-06-2025 function ficheros = vTerminaciones(i) % Definimos los rangos filas = 1:7; % filas de 1 a 7 if i == 0 columnas = 0:16; % columnas de 0 a 16 else columnas = 1:16; % columnas de 0 a 16 end columnas_prohibidas = [3, 4, 8, 9, 13, 14]; % Inicializamos una celda para almacenar los nombres ficheros = {}; % Contador para ir guardando idx = 1; for fila = filas for columna = columnas % Para filas 1 a 6, saltamos columnas prohibidas if (fila >= 1 && fila <= 6) &&... any(columna == columnas_prohibidas) continue; end if i == 0 % Saltar columna 0 en fila 7 if fila == 7 && columna == 0 continue; end
Anexo A. Códigos Matlab 124 124 end % Nombre normal nombre = sprintf('%d-%d.txt', fila, columna); ficheros{idx} = nombre; idx = idx + 1; end % Extra: en la fila 7 agregamos también los mallados intercalados if fila == 7 for columna = 10:15 % De 10 a 15 (mallados de 10-11 hasta 15-16) nombre_intercalado = ... sprintf('7-%d-%d.txt', columna, columna+1); ficheros{idx} = nombre_intercalado; idx = idx + 1; end end end end
125 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores ANEXO B. INSTALACIÓN DEL ENTORNO PYTHON En este anexo se detallan los pasos a seguir para la preparación del entorno Python permitiendo así su uso en el modelo UCI, descrito en la sección 3.3.1.2: Descarga e instalación de Python 1. Accede a la página oficial de descargas de Python: https://www.python.org/downloads/. 2. Descarga la versión 3.10 de Python, es que sea esa versión. 3. Ejecuta el instalador y marca la casilla "Add Python to PATH". 4. Abre una terminal (CMD o PowerShell) y ejecuta uno de los siguientes comandos para verificar que Python se ha instalado correctamente: py -- version / python – versión Si la instalación ha sido exitosa, se mostrará la versión de Python instalada. Instalación y verificación de pip Para instalar bibliotecas adicionales, se necesita Pip, el gestor de paquetes de Python. 1. Descarga el pip si no lo tienes instalado: py -m ensurepip --default-pip 2. Comprueba que está correctamente descargado: py -m pip --version Creación y activación de un entorno virtual Un entorno virtual es una carpeta aislada donde puedes instalar paquetes de Python sin afectar al sistema global. Esto evita conflictos entre diferentes proyectos que requieren distintas versiones de bibliotecas. 1. Ubicarse en el directorio del proyecto. Navega hasta la carpeta donde se alojará el entorno virtual: cd uwb-qorvo-tools 2. Crear el entorno virtual. Ejecuta el siguiente comando para generar un entorno virtual dentro del directorio actual: python -m venv .venv 3. Activar el entorno virtual. Para activar el entorno en PowerShell, usa:
Anexo B. Instalación del entorno python 126 126 .\.venv\Scripts\activate.ps1 4. Instalar paquetes dentro del entorno virtual. Una vez activado el entorno, instala las dependencias del proyecto ejecutando: pip install . --use-feature=in-tree-build Con estos pasos, el entorno de desarrollo en Python estará correctamente configurado y listo para su uso.
127 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores ANEXO C. PROCEDIMIENTO PARA IDENTIFICAR EL PUERTO COM EN WINDOWS Para establecer una comunicación correcta entre el dispositivo y el software desarrollado, es necesario conocer el número del puerto COM asignado por el sistema operativo. A continuación, se describe el procedimiento para identificar dicho puerto en un entorno Windows: 1. Conectar el dispositivo USB al ordenador. 2. Acceder al Administrador de dispositivos. Para ello, se puede buscar "Administrador de dispositivos" o "Device Manager" desde el menú de inicio de Windows. 3. Una vez abierto el administrador, expandir la categoría denominada “Puertos (COM y LPT)”. 4. Localizar una entrada con la denominación: o USB Serial Device (COMx) o Dispositivo serie USB (COMx). o El valor ‘x’ indicado entre paréntesis corresponde al número del puerto COM asignado al dispositivo conectado.
Anexo C. Procedimiento para identificar el puerto COM en Windows 128 128
129 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores REFERENCIAS [1] Qorvo. (s.f.). QM33120WDK1 Product Overview. https://www.qorvo.com/products/p/QM33120WDK1 [2] Qorvo. (2024). nRF52840 Quick Start Guide [Manual del usuario]. [3] De Rojas Malpartida, P. M. (2021). Diseño de un método eficiente de localización en interiores para un sistema Ultra Wideband en presencia de obstáculos (Trabajo de Fin de Máster). Universidad de Sevilla. [4] Stocker, M., Brunner, H., Schuh, M., Boano, C. A., & Romer, K. (2022). On the Performance of IEEE 802.15.4z-Compliant Ultra-Wideband Devices. Proceedings - 5th Workshop on Benchmarking Cyber-Physical Systems and Internet of Things, CPS-IoTBench 2022, 28-33. [5] MathWorks. Introducción a Ultra-Wideband (UWB). https://es.mathworks.com/discovery/ultra-wideband.html [6] Madero, M. J. (2024).!Tema 5: Otras tecnologías inalámbricas [Diapositivas de PowerPoint]. Universidad de Sevilla. [7] Qorvo. (s.f.). Ultra-Wideband forum. https://forum.qorvo.com/c/wireless-connectivity/ultra-wideband/5 [8] Rivera Robles, T. (2014). Localización en interiores con UWB: Técnicas de estimación de tiempo de llegada en detector de energía (Trabajo de Fin de Grado). Universidad de Sevilla. [9] De la Calle Rozadillas, L. (2017). Evaluación de dispositivos UWB para localización en interiores con medidas de distancia (Trabajo de Fin de Grado). Universidad de Sevilla. [10] García Castellano, M. (2009). Diseño de una antena compacta de banda ultraancha en tecnología de circuito impreso (Proyecto Fin de Carrera). Universidad de Sevilla. [11] Molina Villamil, H. (2017). Diseño de turbo códigos para redes de sensores basadas en tecnologías de ancho de banda ultra-amplio (UWB) (Trabajo de Fin de Grado). Centro de Investigación Científica y de Educación Superior de Ensenada (CICESE), Baja California, México. [12] Qorvo. (2024). QM33120 Data Sheet [Manual del usuario]. [13] Ximena González, D. (2011). Estudio comparativo del estándar UWB frente a Bluetooth y Zigbee (Trabajo de Fin de Grado). Universidad Austral de Chile [14] Martínez García, Andrés. (2010). Estudio de canal para sistemas Ultra Wide Band (Proyecto Fin de Carrera). Universitat Politècnica de Catalunya. [15] Arias de Reyna Domínguez, E. (2024).!Ultra Wideband technology. Standardization in IEEE 802.15.4 [Diapositivas de Communications and Data Analysis in IoT]. Universidad de Sevilla.
Referencias 130 130 [16] Fredy Ospina Galeano, Jhon. (2020). Caracterización óptica y morfológica de películas delgadas de TiFe2O4 crecidas mediante la técnica PLD (Trabajo de Fin de Grado). Universidad tecnológica de Pereira [17] Z. Bai, Y. Zhong, D. Yuan and K. Kwak (2008). Convolutionally Encoded TH-BPSK UWB System over Multipath Channels. Shanghai, China, 26-28 May 2008. IEEE Xplore. [18] Singh, R., & Jassal, B. S. (2016). Lower Bounds of Correlation Measure for Time Hopping codes in UWB communication Systems. [19] Feasycom. (s.f.). Protocolo UWB: Productos y aplicaciones. https://www.feasycom.com [20] Rohde & Schwarz. (s.f.). Comunicación y determinación de distancia en la banda ultraancha (UWB). https://www.rohde-schwarz.com/es/soluciones/wireless-communications-testing/wirelessstandards/ultra-wideband-uwb/ultra-wideband-uwb_253919.html#gallery-8 [21] Qorvo. (2024). UWB-Qorvo-Tools-guide. [Manual del usuario]. [22] Qorvo. (2024). uwb-l1-configuration-R12.7.0-288. [Manual del usuario]. [23] Jiménez Tejero, A. (2008). Efecto del sistema UWB sobre sistemas de telecomunicaciones con bandas de operación por debajo de los 3 GHz (Proyecto Fin de Carrera). Universidad Autónoma de Madrid, Escuela Politécnica Superior. [24] Barral, V., Escudero, C. J., García-Naya, J. A., & Maneiro-Catoira, R. (2019). NLOS identification and mitigation using low-cost UWB devices. Sensors (Switzerland), 19(16). [25] Dardari, D., Conti, A., Ferner, U., Giorgetti, A., & Win, M. Z. (2009). Ranging with ultrawide bandwidth signals in multipath environments. Proceedings of the IEEE, 97(2), 404-425. [26] Suárez, J. L. G. (2010). Revision del estado del arte de IR-Ultra-Wideband y simulación de la respuesta impulsiva del canal IEEE 802.15.4a. [27] Diaz, J. (2003). Tecnología ultra-wideband (UWB) la revolución a corto alcance. [28] Orange. (2024). UWB: Qué es esta tecnología de conectividad (y por qué sustituirá al Bluetooth). https://blog.orange.es/innovacion/uwb-que-es-conectividad/ [29] Murillo Fuentes, J. J., & Boloix Tortosa, R. (2024). Tema 2: Elementos de un sistema de radiocomunicación [Diapositivas de Fundamentos de Radiocomunicación]. Universidad de Sevilla. [30] Ferrando Navarro, A. (2020). Caracterización del canal radio a través de técnicas de clusterización (Trabajo de Fin de Grado). Universitat Politècnica de València. [31] Betancur, L. Cardona, Narcis. Navarro, A. Traver, L. (2015). Modelo Estadistico de Canal para Redes de Area Corporales en canales de banda Ultra Ancha.
131 Evaluación de dispositivos UWB con el estándar IEEE 802.15.4z para localización en interiores [32] Molisch, A. F., Balakrishnan, K., Cassioli, D., Chong, C.-C., Emami, S., Fort, A., Karedal, J., Kunisch, J., Schantz, H., Schuster, U., & Siwiak, K. (s. f.). IEEE 802.15.4a channel model-final report. www.802wirelessworld.com https://www.ieee802.org/15/pub/04/15-04-0662-02-004a-channel-model-final-report-r1.pdf [33] M. Flament and A. Svensson (2003). Virtual cellular networks for 60 GHz wireless infrastructure, IEEE International Conference on Communications. [34]Rohde & Schwarz (2021). R&S®CMP200 – fine-tuned for ultra-wideband.[Video]. https://www.youtube.com/watch?v=3dRe513T380 [35] Qorvo. (2024). APS011. [Manual del usuario]. [36] Tiemann, J., Friedrich, J., & Wietfeld, C. (2022). Experimental Evaluation of IEEE 802.15.4z UWB Ranging Performance under Interference. Sensors, 22(4). [37] Liu, Z., Hakala, T., Hyyppa, J., Kukko, A., & Chen, R. (2024). Performance Comparison of UWB IEEE 802.15.4z and IEEE 802.15.4 in Ranging, Energy Efficiency, and Positioning. IEEE Sensors Journal, 24(8), 12481-12489. [38] Padilla Esquivel, A. (2019). Análisis del efecto de los obstáculos en un sistema Ultra Wideband de localización en interiores (Trabajo de Fin de Máster). Universidad de Sevilla. [39] Monsalve Infantes, J. M. (s.f.). Estado del arte de los sistemas de localización en interiores (Proyecto Fin de Carrera). Universidad de Sevilla. [40] A. Tahat, G. Kaddoum, S. Yousefi, S. Valaee and F. Gagnon (2016). A Look at the Recent Wireless Positioning Techniques With a Focus on Algorithms for Moving Receivers. In IEEE Access. [41] Fira Consortium (2022). FiRa Presents: How UWB Angle-of-Arrival (AoA) Works. [Video]. https://www.youtube.com/watch?v=5k938MZiHXY [42] Van Herbruggen, B., Luchie, S., Wilssens, R., & De Poorter, E. (2024). Single Anchor Localization by Combining UWB Angle-of-Arrival and Two-Way-Ranging: an Experimental Evaluation of the DW3000. 2024 International Conference on Localization and GNSS, ICL-GNSS 2024 - Proceedings. [43] Alsindi, N. A., Alavi, B., & Pahlavan, K. (2009). Measurement and modeling of ultrawideband TOA-based ranging in indoor multipath environments. IEEE Transactions on Vehicular Technology, 58(3), 1046–1058. [44] Distribución log-normal. Wikipedia. https://en.wikipedia.org/w/index.php?title=Log-normal_distribution&oldid= [45] Distribución logística. Wikipedia. https://es.wikipedia.org/w/index.php?title=Distribución_logística&oldid=