Las mediciones del radio seguramente están sujetas a algún error. Yo esperaría que la cantidad de error fuera proporcional a los propios radios. Supongamos que las mediciones son, por lo demás, insesgadas. Una solución razonable es la siguiente mínimos cuadrados no lineales ponderados con pesos inversamente proporcionales a los radios al cuadrado.
Esto es algo estándar disponible en (entre otras cosas) Python, R
, Mathematica y muchos paquetes estadísticos completos, por lo que me limitaré a ilustrarlo. He aquí algunos datos obtenidos midiendo las distancias, con un error relativo del 10%, a cinco puntos de acceso aleatorios que rodean la ubicación del dispositivo:
Mathematica sólo necesita una línea de código y ningún tiempo de CPU medible para calcular el ajuste:
fit = NonlinearModelFit[data, Norm[{x, y} - {x0, y0}], {x0, y0}, {x, y}, Weights -> 1/observations^2]
Editar
Para radios grandes, se pueden encontrar soluciones más precisas (esféricas o elipsoidales) simplemente sustituyendo la distancia euclidiana Norm[{x, y} - {x0, y0}]
por una función para calcular la distancia esférica o elipsoidal. En Mathematica esto podría hacerse, Por ejemplo , a través de
fit = NonlinearModelFit[data, GeoDistance[{x, y}, {x0, y0}], {x0, y0}, {x, y},
Weights -> 1/observations^2]
--fin de la edición
Una ventaja de utilizar una técnica estadística como ésta es que puede producir intervalos de confianza para los parámetros (que son las coordenadas del dispositivo) e incluso una elipse de confianza simultánea para la ubicación del dispositivo.
ellipsoid = fit["ParameterConfidenceRegion", ConfidenceLevel -> 0.95];
fit["ParameterConfidenceIntervalTable", ConfidenceLevel -> 0.95]
Es instructivo trazar los datos y la solución:
Graphics[{Opacity[0.2], EdgeForm[Opacity[0.75]], White, Disk[Most[#], Last[#]] & /@ data,
Opacity[1], Red, ellipsoid,
PointSize[0.0125], Blue, Point[source], Red, Point[solution],
PointSize[0.0083], White, Point @ points},
Background -> Black, ImageSize -> 600]
-
Los puntos blancos son las ubicaciones de los puntos de acceso (conocidos).
-
El punto azul grande es la verdadera ubicación del dispositivo.
-
Los círculos grises representan los radios medidos. Lo ideal sería que todos se cruzaran en la verdadera ubicación del dispositivo, pero obviamente no es así, debido a los errores de medición.
-
El punto rojo grande es la ubicación estimada del dispositivo.
-
La elipse roja delimita una región de confianza del 95% para la localización del dispositivo.
La forma de la elipse en este caso es interesante: la incertidumbre de localización es mayor a lo largo de una línea NW-SE. En este caso, las distancias a tres puntos de acceso (al NE y al SO) apenas cambian y hay una compensación de errores entre las distancias a los otros dos puntos de acceso (al norte y al sureste).
(En algunos sistemas se puede obtener una región de confianza más precisa como contorno de una función de probabilidad; esta elipse es sólo una aproximación de segundo orden a dicho contorno).
Cuando los radios se miden sin error, todos los círculos tendrán al menos un punto de intersección mutua y -si ese punto es único- será la solución única.
Este método funciona con dos o más puntos de acceso. Se necesitan tres o más para obtener intervalos de confianza. Cuando sólo se dispone de dos, encuentra uno de los puntos de intersección (si existen); en caso contrario, selecciona una ubicación adecuada entre los dos puntos de acceso.
0 votos
¿en qué idioma trabaja?
0 votos
Principalmente PHP, un poco de JavaScript. Supongo que tenía que mencionar esto antes, pero yo soy un desarrollador web y para entender la respuesta de Whuber voy a tener que encontrar un matemático.
0 votos
¿Los radios se derivan de la intensidad relativa de las señales?
0 votos
Sí. En realidad los radios están en dBm
0 votos
Esperaba algo así: lo bueno es que las intensidades de la señal decaerán con (casi) una ley cuadrada inversa y se medirán (normalmente) con un error relativo constante, al menos dentro de un rango de trabajo efectivo. Esto implica que los radios se medirán con un error proporcional a su inversa plazas Esto puede incorporarse directamente a la solución de mínimos cuadrados ponderados ajustando las ponderaciones en consecuencia.
0 votos
@KarlisBaumanis ¿lograste resolver esto en PHP? Compártelo, si lo has hecho.
0 votos
@KarlisBaumanis ¿Lo has resuelto en PHP?
1 votos
@Reddox, en parte - He conseguido calcularlo con php_exec() usando mathematica en el lado del servidor.