2012-04-26 20 views
28

En primer lugar, estoy tratando de hacer todo este desastre en C# (.net 4) así que si se te ocurre algún código que me ayude, será apreciado, pero realmente todo ayudaría en este punto.¿Cómo triangular correctamente las torres de telefonía GSM para obtener una ubicación?

Tengo una situación en la que tengo un dispositivo que solo puede obtener información GSM Cell (por cierto, a través del comando AT+KCELL), así que tengo una colección de valores sobre torres celulares (cada LAC, MCC, MNC, ID de celda, Señal Fuerza y ​​el primer avance de sincronización). Creo que, por lo tanto, estoy en un buen lugar para poder encontrar algún tipo de coordenadas de longitud y latitud (aunque inexactas, pero bueno, sí). Aquí es donde busco ayuda porque ahora mi pequeño cerebro está confundido ...

Puedo ver varios servicios que brindan resolución de celda (Google, Open Cell ID, etc.) y toman LAC, MCC etc. argumentos y devolver una coordenada. Me imagino que lo que devuelvan sería, por lo tanto, la coordenada de la torre en la que paso. Así que en mi caso podría enviar todos los LAC, etc. que tengo, y obtener una colección de longitud y latitudes. Brillante, pero ese no es el lugar donde está mi dispositivo. Ahora creo que necesito hacer algún tipo de triangulación y aquí es donde mi falta de conocimiento me está perjudicando.

Así que estoy en lo cierto hasta ahora? Asumiendo que soy, ¿cómo realizo este cálculo (hay algo por ahí que me dirá qué hacer con todos estos números o, mejor aún, alguna biblioteca de código abierto, puedo hacer referencia y alimentar todo esto para obtener algo sensato) ?

Supongo que necesitaría usar el avance de temporización para calcular una distancia aproximada desde una torre de telefonía móvil (tal vez usando la potencia de la señal de alguna manera), pero ¿qué debo hacer? Como puedes ver, ¡estoy fuera de mi alcance aquí!

Por ejemplo, esto es algo que podría obtener de vuelta de la mencionada comando AT:

5,74,33,32f210,157e,8101,50,0,79,3,32f210,157e,80f7,37,64,5,32f210,157e,810b,37,55,32,32f210,157e,9d3,27,41,33,32f210,157e,edf8,15 

romperlo y analizarlo me gustaría conseguir (espero que analizar este derecho - existe la posibilidad existe un error en mi rutina de análisis, por supuesto, pero parece razonable):

Number of cells: 5 

Cell 1

LAC: 5502 
MNC: 1 
MCC: 232 
Cell ID: 33025 
Signal: 80 
ARFCN: 74 
BSIC: 33 
Timing advance: 0 
Longitude: 14.2565389 
Latitude: 48.2248439 

Cell 2

LAC: 5502 
MNC: 1 
MCC: 232 
Cell ID: 33015 
Signal: 55 
ARFCN: 79 
BSIC: 3 
Longitude: 14.2637736 
Latitude: 48.2331576 

Cell 3

LAC: 5502 
MNC: 1 
MCC: 232 
Cell ID: 33035 
Signal: 55 
ARFCN: 64 
BSIC: 5 
Longitude: 14.2488966 
Latitude: 48.232513 

Cell 4

LAC: 5502 
MNC: 1 
MCC: 232 
Cell ID: 2515 
Signal: 39 
ARFCN: 55 
BSIC: 32 
Longitude: 14.2488163 
Latitude: 48.2277972 

Cell 5

LAC: 5502 
MNC: 1 
MCC: 232 
Cell ID: 60920 
Signal: 21 
ARFCN: 41 
BSIC: 33 
Longitude: 14.2647612 
Latitude: 48.2299558 

Entonces, ¿con toda esa información cómo encuentro, de la manera más precisa, dónde estoy?

+0

cualquier posibilidad de publicación los datos que obtienes ... al menos un 50% porque tengo curiosidad ;-) – gordatron

+0

Creo que puede haber diferentes técnicas para hacer esto dependiendo de exactamente qué datos tienes. Podría responder, pero sería mejor recopilar todos los datos que pueda obtener y publicar una pregunta en: http: //math.stackexchange.com/ a menos que haya alguien que haya hecho esto antes y esté dispuesto a compartir la información específica – gordatron

+0

@gordatron He agregado un ejemplo - gracias por mirar mi pregunta – kmp

Respuesta

34

Te puedo ayudar con un poco de la teoría.

La triangulación consiste básicamente en encontrar el punto de intersección de 3 círculos.

Cada torre móvil es el centro de un círculo. El tamaño del círculo es relativo a la intensidad de la señal de esa torre.

El lugar donde se superponen los 3 círculos es donde está el usuario.

Usted puede hacer algo de triangulación muy básico de la siguiente manera:

 
3 Towers at 
tx1,ty1 
tx2,ty2 
tx3,ty3 

With signal strengths s1, s2, s3 

We calculate the weight of each signal. Essentially a number from 0 to 1 for each tower where the sum of the weights adds up to 1. 

Weighted signal w1, w2, w3 where: 
w1 = s1/(s1+s2+s3) 
w2 = s2/(s1+s2+s3) 
w3 = s3/(s1+s2+s3) 


User will be at 
x: (w1 * tx1 + w2 * tx2+ w3 * tx3) 
y: (w1 * ty1 + w2 * ty2+ w3 * ty3) 

Aquí está un ejemplo de trabajo utilizando los valores de su pregunta:

 

s1 = 80 
s2 = 55 
s3 = 55 
s4 = 55 
s5 = 21 

w1 = 80/(80 + 55 + 55 + 55 + 21) 
w2 = 55/(80 + 55 + 55 + 55 + 21) 
w3 = 55/(80 + 55 + 55 + 55 + 21) 
w4 = 55/(80 + 55 + 55 + 55 + 21) 
w5 = 21/(80 + 55 + 55 + 55 + 21) 

w1 = 0.3007519 
w2 = 0.2067669 
w3 = 0.2067669 
w4 = 0.2067669 
w5 = 0.0789474 

1. Longitude: 14.2565389 
1. Latitude: 48.2248439 

2. Longitude: 14.2637736 
2. Latitude: 48.2331576 

3. Longitude: 14.2488966 
3. Latitude: 48.232513 

4. Longitude: 14.2488163 
4. Latitude: 48.2277972 


5. Longitude: 14.2647612 
5. Latitude: 48.2299558 


Location Longitude = 
14.2565389 * 0.3007519 + 
14.2637736 * 0.2067669 + 
14.2488966 * 0.2067669 + 
14.2488163 * 0.2067669 + 
14.2647612 * 0.0789474 

Location Latitude: = 
48.2248439 * 0.3007519 + 
48.2331576 * 0.2067669 + 
48.232513 * 0.2067669 + 
48.2277972 * 0.2067669 + 
48.2299558 * 0.0789474 

Result Longitude: 14.255507 
Result Latitude: 48.2291628 

+1

Gracias por responder: desde entonces he incluido valores de longitud y latitud (según el servicio de resolución de códigos de celda de Google) para cada una de las celdas, así que conecté las tres con mayor potencia de señal en los cálculos que das . Se trata de una ubicación en África (x: 16.0764901666667 y: 4.75214030350877), pero todas las celdas se encuentran en Austria, por lo que no parece del todo correcto, ¿hay alguna posibilidad de que haya un error tipográfico allí? – kmp

+0

Lo siento, creo que mi fórmula está un poco mal, dame 5. –

+0

Sí, no debería haber estado dividiendo por 3. Mira si eso es mejor. Actualicé la pregunta con un ejemplo usando tus valores. Ahora está en Austria :-) –

3

Esta no es una respuesta realmente, pero es un primer plato y podría agregar más a él:

Los identificadores de la célula se publican al parecer:

http://openbmap.org/

yo encontramos este enlace desde esta página wiki que tiene enlaces a otras fuentes de datos de ID de celda: http://en.wikipedia.org/wiki/Cell_ID)

ver la parte inferior de la página de la es un enlace a los datos de identificación de células:

http://openbmap.org/latest/cellular/raw/input_raw.zip

también encontré este video de youtube donde unos chicos están jugando un poco con algunas aplicaciones que tienen ubicaciones de las torres celulares que parece:

http://www.youtube.com/watch?v=CYvVN5dJD7A

posiblemente entre los identificadores de celda y fuerza de la señal se puede hacer una conjetura ..

pero que yo sepa para la triangulación general, lo que necesita saber la ubicación exacta de por lo menos tres torres y su distancia exacta de ellos (esto podría sea ​​una distancia aproximada con la intensidad de la señal, pero puede ser demasiado precisa).

parece que Wikipedia está diciendo que su hecho de esta manera .. utilizar una combinación de qué celda donde se encuentra, la torre más cercana y señalar puntos fuertes para obtener su ubicación:

http://en.wikipedia.org/wiki/Mobile_phone_tracking

Cuestiones relacionadas