universidad de sevilla escuela superior de ingenierÍa...
TRANSCRIPT
-
UNIVERSIDAD DE SEVILLA
ESCUELA SUPERIOR DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA DE SISTEMAS Y AUTOMÁTICA
Detección de ataques de spoofing a los
sistemas de navegación global.
AUTOR: FERNANDO GARCÍA ZAPATA
TUTOR: ANÍBAL OLLERO BATURONE
SEPTIEMBRE 2013, SEVILLA
-
1
Índice Capítulo 1. Introducción ............................................................................................................................... 3
Evolución histórica de los sistemas GNSS ................................................................................................. 3
Las amenazas a los sistemas GNSS ........................................................................................................... 4
Receptores GPS basados en software ...................................................................................................... 5
Capítulo 2. Estado del arte de la seguridad GPS .......................................................................................... 6
2.1 Técnicas de spoofing ........................................................................................................................... 6
2.1.2 Ataque mediante simulador de señales GPS ............................................................................... 6
2.1.3 Ataque mediante un receptor-spoofer GPS ................................................................................. 6
2.1.4 Ataque mediante varios receptores-spoofers GPS ...................................................................... 7
2.2 Técnicas anti-spoofing ........................................................................................................................ 8
2.2.1 Discriminación por ángulo de llegada .......................................................................................... 8
2.2.2 Autenticación de señales GPS .................................................................................................... 11
2.2.3 Monitorización de la calidad de la señal recibida ...................................................................... 13
2.2.4 Correlación de la señal P ............................................................................................................ 15
Capítulo 3. Sistema GPS .............................................................................................................................. 16
3.1 Introducción ...................................................................................................................................... 16
3.2 Descripción del sistema .................................................................................................................... 17
3.3 Descripción de las señales GPS ......................................................................................................... 18
3.4 Modulación y código C/A .................................................................................................................. 20
3.5 Datos de navegación ......................................................................................................................... 21
3.6 Funcionamiento del sistema GPS ...................................................................................................... 23
3.7 Adquisición ........................................................................................................................................ 25
3.8 Seguimiento o tracking ..................................................................................................................... 26
3.9 Extracción de los datos de navegación ............................................................................................. 27
Capítulo 4. Anti-spoofing utilizando la señal P(Y) ..................................................................................... 29
4.1 Procesamiento de las señales secretas para autenticación .............................................................. 29
4.2 Implementación del mecanismo de autenticación ........................................................................... 32
4.3 Introducción al receptor software “Soft-GNSS” ............................................................................... 33
postProcessing.m ................................................................................................................................ 35
Acquisition.m....................................................................................................................................... 35
Tracking.m .......................................................................................................................................... 36
4.4 Modificación del receptor software SoftGNSS v3.0 .......................................................................... 37
-
2
initSettings.m ...................................................................................................................................... 38
postProcessing.m ................................................................................................................................ 40
Tracking.m .......................................................................................................................................... 43
CheckSpoof.m ...................................................................................................................................... 47
Capítulo 5. Resultados ................................................................................................................................ 52
Capítulo 6. Conclusiones y líneas futuras de desarrollo ............................................................................ 58
Conclusiones ........................................................................................................................................... 58
Líneas futuras de desarrollo .................................................................................................................... 58
REFERENCIAS .............................................................................................................................................. 60
APÉNDICE A. TOMA DE LOS DATOS GPS. .................................................................................................. 61
-
3
Capítulo 1. Introducción
A lo largo de este proyecto vamos a desarrollar, aplicar y analizar los resultados de una técnica anti-
spoofing para los sistemas GPS, en concreto una que utiliza la señal militar para detectar ataques de
spoofing.
En este primer capítulo haremos una pequeña introducción sobre la evolución de los sistemas de
navegación, las amenazas que han surgido y cómo ha proliferado el desarrollo de sistemas de
navegación basados en software.
En el siguiente capítulo haremos un repaso sobre las técnicas, tanto de ataque como de defensa, del
sistema GPS actual. Observaremos como a medida que han aparecido nuevas técnicas para atacar estos
sistemas, se han desarrollado también mecanismos de defensa para combatirlos. Estudiaremos varias
técnicas desarrolladas en los últimos años por numerosos investigadores.
En el capítulo tres describiremos, de forma detallada, el funcionamiento del sistema GPS. Es primordial
entenderlo, ya que así podremos analizar cuáles son sus debilidades, cómo puede ser atacado y cómo
podemos defendernos de estos ataques.
Durante el capítulo cuatro describimos de forma detallada uno de los mecanismos de defensa que
existen para los sistemas GPS. Además desarrollaremos, en Matlab y utilizando un receptor GPS
software, este mecanismo para poder estudiar posteriormente sus resultados.
En el capítulo cinco presentamos los resultados de aplicar el mecanismo desarrollado en el capítulo
cuatro, tanto en una situación en la que el sistema está siendo atacado como en una situación donde no
se produce el ataque, para comprobar como no arroja falsos positivos (no indica que estamos bajo un
ataque cuando no lo estamos) y detecta correctamente cuando sí se está atacando al sistema.
Finalmente, en el capítulo seis, se detallan las conclusiones obtenidas tras analizar los resultados.
También se proponen líneas futuras de desarrollo, de manera que el trabajo aquí desarrollado pueda ser
ampliado e implementado en sistemas que funcionen en tiempo real.
Evolución histórica de los sistemas GNSS
Hoy en día los sistemas de navegación son ampliamente utilizados en cientos de millones de
dispositivos, y son cada vez más los servicios, en muchos casos críticos, que basan su funcionamiento en
una correcta sincronización temporal y en el conocimiento de la posición exacta que es ofrecido gracias
a los GNSS (sistemas de navegación global por satélite).
Un ejemplo de este tipo de servicios son el guiado de aviones en condiciones de poca o ninguna
visibilidad (ya sea por ser de noche o por inclemencias meteorológicas) o la sincronización de las redes
de comunicaciones móviles.
-
4
Pero no solo los sistemas de navegación por satélite se utilizan en infraestructuras críticas para la
sociedad, si no que cada día están más implantados en la vida del ciudadano y forman una parte vital de
los servicios que utilizamos todos los días, tales como equipos que utilizan nuestra posición para calcular
rutas y guiarnos hasta un punto de destino.
Por estos motivos resulta cada vez más importante garantizar la integridad y seguridad de los
sistemas de navegación, ya que además, como se ha demostrado con muchos otros casos de nuevas
tecnologías que han surgido a lo largo de la historia reciente, tales como internet, cuanto más usado y
crítico se vuelve un servicio, más intereses (y, por tanto, personas) aparecen e intentan atacarlo y sacar
provecho de sus vulnerabilidades.
Dentro de los sistemas GNSS, analizaremos el caso particular del GPS, ya que es con mucha
diferencia el más usado en la actualidad. Los otros sistemas son GLONASS, muy poco operativo desde el
desmantelamiento de la Unión Soviética, y Galileo, que aún no está en funcionamiento y es poco
probable que lo esté antes de 2019. Además, Galileo será capaz de funcionar también con señales GPS,
así que las vulnerabilidades GPS constituirán vulnerabilidades también en Galileo en la medida en que
ambos sean compatibles.
En el sistema GPS debemos diferenciar, desde el punto de vista de la seguridad, del uso civil y del
militar. En el caso del militar, hoy en día la seguridad no es un problema, ya que desde su concepción se
pensó en hacer un sistema que fuese robusto e invulnerable (al menos, en la medida de lo posible). No
ocurre así con el uso civil, que como veremos, no presenta ninguna medida de seguridad.
Las amenazas a los sistemas GNSS
Una característica de los sistemas GNSS es que los receptores en la Tierra funcionan con señales
de muy baja potencia, de hecho con un nivel de potencia que es menor que el ruido térmico de los
propios sistemas. Esto provoca que el tipo de ataque más común y sencillo de llevar a cabo consista en
ataques de denegación de servicio (DoS, “denial of service”), realizados mediante el “jamming”, creando
interferencias.
Existe otro tipo de ataque, mucho más peligroso, denominado “spoofing”. Este ataque consiste en
la suplantación de la señal GNSS, de manera que los receptores calculen posiciones incorrectas. Este
ataque es mucho más dañino que el de denegación de servicio, ya que permite que el usuario del
sistema GNSS reciba una posición incorrecta por parte del receptor sin que éste sea capaz de detectarlo.
Este ataque es posible debido a que las señales GPS no llevan ningún mecanismo de autenticación o
identificación para poder determinar que la señal recibida es legítima. En el nuevo sistema Galileo sí que
se prevé incluir un sistema de autenticación, pero probablemente constituya un servicio por el que haya
que pagar para su uso.
Los ataques de spoofing constituyen una amenaza real, como demuestra el hecho de que
numerosos ataques de este tipo han sido llevados a cabo por investigadores en entornos controlados.
-
5
Los métodos que se han desarrollado hasta ahora para mitigar este tipo de ataques se basan
principalmente en comprobaciones entre varios sistemas distintos (ya sean internos o externos al
sistema GNSS) y en la predicción de características de la señal de navegación que estamos recibiendo.
Receptores GPS basados en software
En los últimos diez años ha habido una explosión, en gran parte de la comunidad de
investigadores, en la implementación de receptores GPS mediante software. En estos sistemas se
implementan los correladores, el tracking de la señal y el procesamiento de los mensajes de navegación
para calcular la posición. Una característica común a la mayoría de receptores basados en software es
que no funcionan en tiempo real, es decir, no procesan la señal directamente, sino que utilizan como
entrada un fichero consistente en un log de señal GPS capturado de alguna otra forma.
Estos sistemas presentan una clara ventaja respecto a los sistemas basados en hardware
tradicionales: la flexibilidad a la hora de modificar, mejorar e implementar nuevas características al
sistema, y es por este último motivo por el que hemos decidido trabajar con un receptor GPS basado en
software, a pesar de que se han propuesto métodos para crear un dispositivo anti-spoofing [2].
Las entradas que utilizaremos para este receptor serán dos ficheros de datos con las señales GPS,
capturados ambos ficheros en el mismo momento separados una distancia de varios metros.
-
6
Capítulo 2. Estado del arte de la seguridad GPS
Vamos a realizar un pequeño recorrido por las diferentes técnicas para realizar ataques de spoofing
al sistema GPS y los mecanismos que se han desarrollado para descubrir estos ataques.
2.1 Técnicas de spoofing
Para evaluar la forma de mitigar los ataques de spoofing, primero debemos conocer cuáles son los
tipos de ataques que existen. Estos ataques pueden ser desde muy simples hasta realmente sofisticados,
llegando en casos muy extremos (utilizando una gran cantidad de recursos y tecnología) a ser
prácticamente indetectables
Los clasificaremos según el nivel de sofisticación del ataque.
2.1.2 Ataque mediante simulador de señales GPS
El tipo de ataque más sencillo consiste en conectar un amplificador y una antena a un generador
de señales GPS. Con esto lograríamos radiar señales GPS falsas con los datos que nosotros configuremos
en el generador de señales.
Sin embargo, existen varios inconvenientes en este tipo de ataques. El primero, y quizás el más
importante, es el coste: un simulador de señales GNSS puede llegar a costar más de 250 mil euros.
Algunas empresas ofrecen opción de alquilar este tipo de equipos por algo menos de mil euros a la
semana, lo que hace más viable un ataque de este tipo de corta duración que un ataque continuado
durante un tiempo prolongado. Otro inconveniente es el tamaño, ya que la mayoría de simuladores GPS
son equipos pesados y muy grandes. Esto lleva a que no se pueda realizar este tipo de ataques en
entornos controlados por fuerzas de seguridad o simplemente de forma discreta (por ejemplo, sería
inviable este tipo de ataque en un aeropuerto).
Como vemos, este tipo de ataque es muy sencillo de llevar a cabo, pero solo teóricamente, para
llevarlo a la práctica hacen falta grandes recursos económicos y que la zona de ataque no esté
controlada ni haya mucha afluencia de personas.
2.1.3 Ataque mediante un receptor-spoofer GPS
-
7
Una de las mayores dificultades de realizar con éxito un ataque de spoofing es obtener, de
forma más o menos precisa, la posición y velocidad de la antena del receptor al que queremos atacar.
Esto es importante porque, como veremos en las técnicas anti-spoofing, podríamos detectar que un
ataque se está produciendo si estos datos que recibimos del receptor GPS no son coherentes con el
estado de nuestro sistema.
Para solventar este problema, uno de los ataques consiste en crear un pequeño
(suficientemente pequeño como para que sea portable) receptor GPS que sea también capaz de emitir
una señal GPS spoofeada [2]. La forma de proceder sería posicionar este pequeño receptor cerca de la
antena del sistema que queremos atacar, tal y como se indica en la Figura 1, de manera que ambos
reciban aproximadamente la misma posición, velocidad y tiempo. Con estos datos, nuestro receptor
sería capaz de generar una señal suficientemente elaborada que logre realizar con éxito un ataque de
spoofing.
Figura 1. Esquema de los dispositivos para realizar un ataque.
Por supuesto, este tipo de ataque también tiene sus inconvenientes. Hoy en día no existen
equipos receptores-spoofers de GPS disponibles en el mercado, lo que reduce drásticamente el número
de personas capaces de llevar a cabo este ataque.
Por otro lado, el software que debería llevar este sistema debería ser bastante elaborado, ya que
debería implementar no solo un sistema de recepción de GPS, sino también un sistema generador de
señales GPS que además deberá utilizar los datos que está recibiendo el receptor, lo que implica que
debe haber sincronización entre el receptor GPS y el emisor de señales GPS spoofeadas. Esto, a pesar de
que la estructura de los mensajes GPS es pública y está perfectamente documentada, es complejo y
requiere muchos conocimientos, no solo de software sino también de electrónica y hardware.
Otro inconveniente es que es necesario acceso físico al sistema que quieres atacar, y además este
sistema no debe ser revisado por personas, ya que detectarían el receptor y el ataque quedaría anulado.
2.1.4 Ataque mediante varios receptores-spoofers GPS
Este es el tipo de ataque más complicado de realizar, ya que requiere mucha coordinación, que
las señales que emita cada equipo tenga la fase correcta, que no se ataquen entre ellos, etc.
Ante este tipo de ataque, no hay defensa posible, al menos no con el sistema GPS actual, la única forma
-
8
de detectarlos sería mediante autenticación criptográfica (como tiene previsto implementar Galileo, por
ejemplo) pero esto no es posible con la tecnología GPS.
Se necesitan tantos equipos receptores-spoofers como antenas tenga el objetivo al que se desea
atacar. Todos estos equipos deben estar sincronizados en fase, es decir, deben tener algún mecanismo
de sincronización o compartir un oscilador. También deben situarse de forma que los equipos no se
spoofeen entre ellos. El objetivo de esta configuración (varios dispositivos, atacando cada uno a una
antena) es el de evitar un tipo de técnica anti-spoofing que veremos posteriormente.
Estos son, básicamente, todos los tipos de ataques de spoofing que se pueden llevar a cabo
actualmente.
Vamos ahora a analizar las diferentes técnicas que los investigadores han propuesto durante los
últimos años para mitigar, o al menos detectar, estos ataques.
2.2 Técnicas anti-spoofing
A medida que han ido apareciendo nuevas formas de atacar los sistemas GNSS, también han
surgido métodos para detectarlos.
Hay que distinguir entre la detección y la actuación. Mientras que, como veremos, sí se han
desarrollado técnicas para detectar los ataques, no hay forma de evitarlos o pararlos, por lo que el único
mecanismo de actuación posible ante un ataque de este tipo es dejar de confiar en los datos aportados
por el sistema GPS.
2.2.1 Discriminación por ángulo de llegada
Este mecanismo detecta el ataque gracias al uso de múltiples antenas receptoras. Se basa en la
observación de las diferencias de las portadoras L1 captadas entre diferentes antenas que comparten un
oscilador común.
-
9
Figura 2. Se observa la diferencia entre la fase de la señal que recibe cada antena.
Como vemos en la Figura 2, las líneas discontinuas representan las zonas de fase constante de la
señal emitida por el satélite, separadas una distancia igual a la longitud de onda, y que son
perpendiculares al vector S, que es un vector que va desde el receptor hasta el satélite (representaría la
línea de visión, LOS).
En este caso, en el que el receptor no está siendo atacado, la diferencia de fase de portadora L1
que ven las dos antenas respecto al satélite será previsible:
𝑑𝜑𝑖 = 𝑏𝑇𝐴�̂�𝑖 + 𝑁𝑖 + 𝐵 + 𝛾𝑖
Donde:
- i hace referencia al satélite del que estamos calculando la fase
- b es el vector que une las dos antenas
- A es una matriz de cosenos direccionales para rotar vectores
- �̂�𝑖 es el vector de la línea de visión (LOS) hasta el satélite
- 𝑁𝑖 es un número aleatorio que variará para cada satélite
- B es un valor que dependerá de la implementación que realicemos del sistema.
- 𝛾𝑖 es la suma de todos los errores en la fase de la portadora para el satélite
-
10
Figura 3. Esquema de un sistema siendo atacado.
En el caso de que el receptor esté siendo atacado, como se observa en la Figura 3, la diferencia
de fase entre las dos antenas será distinta a la esperada, y gracias a este hecho detectaremos que se
está produciendo un ataque.
La Figura 4 muestra la variación de la fase para cuatro satélites distintos. Como vemos, para
cada satélite obtenemos una variación distinta.
Figura 4. Variación de fase para distintos satélites.
El problema de este sistema es que, como vemos en la ecuación, para poder estimar la fase
necesitamos la altura de las antenas. Esto no es un problema en el caso de sean estáticas, pero si están
en movimiento (por ejemplo, montadas en un avión) necesitaremos alguna forma de averiguar la altura
(y, obviamente, esta forma no puede ser utilizando las señales GPS).
-
11
El algoritmo para la detección de spoofing sería el siguiente:
1. Se calcula el valor de 𝑑𝜑𝑖 esperado. Para esto necesitamos conocer la altura de las antenas y el
valor B.
2. Se mide 𝑑𝜑𝑖 y se compara con el valor calculado.
3. Para cada satélite, el error entre el valor medido y el esperado se calcula cada 500 milisegundos,
aunque esta tasa podría ser mayor.
4. Basándonos en un umbral de error, que calcularemos en función de la elevación del satélite del
que recibamos la señal, el peor caso esperado, si existe o no multi-trayecto y en el error de la
altura de las antenas, aumentaremos o disminuiremos un contador de errores.
5. Si el contador de errores alcanza un número, que estimaremos en función de la tasa a la que
hayamos calculado los errores, se lanza una alarma de ataque.
Este sistema se puede realizar con tantas antenas como se desee, no únicamente con dos. Para
lograr engañar con éxito al sistema se necesitan tantos dispositivos spoofers como antenas, por lo que
este método de detección de ataques constituye un sistema muy robusto y difícil de vulnerar.
2.2.2 Autenticación de señales GPS
Un método para evitar el ataque de los sistemas GNSS, que ha sido ampliamente discutido en
numerosas conferencias [3], consiste en la implementación de algún tipo de mecanismo de
autenticación de señales para garantizar que la señal que estamos recibiendo es, efectivamente, la señal
que esperamos y no una producida por un elemento externo.
Una de las dificultades a la hora de diseñar una mejora de este tipo para los sistemas GNSS es
que debe ofrecer retrocompatiblidad, es decir, que los cambios que introduzcamos en la arquitectura
del sistema GNSS deben permitir que los receptores antiguos, aquellos que no implementan esos
cambios, puedan funcionar con normalidad. Este requisito es un imperativo, y dificulta mucho el diseño
de un cambio en los sistemas GNSS.
Una opción es implementar secuencias para la autenticación de señales. Este mecanismo de
control de acceso a las señales de navegación del satélite puede hacerse en dos capas distintas: en la
capa de datos o en la capa de modulación de señal.
Si se aplica en la capa de datos, el receptor será capaz de hacer un seguimiento de la señal, sin
embargo no podrá decodificar el contenido del mensaje, es decir, no será capaz de calcular la posición,
velocidad ni el tiempo (PVT).
Un control de acceso a la capa de señal requiere que se encripten los códigos PRN.
Para la implementación podríamos utilizar un cifrado continuo (que es más rápido y tiene una
implementación en hardware más sencilla que un cifrado en bloque). Este mecanismo consiste en un
cifrado de clave simétrica donde un flujo de bits no encriptados (planos) se combinan con un flujo de
bits pseudoaleatorios, habitualmente mediante un OR exclusivo (XOR). Para poder encriptar el código
-
12
PRN, a este código se le realiza el módulo 2 y se suma al flujo cifrado, de manera que obtenemos un
código PRN cifrado.
Suponiendo una señal BPSK donde la componente en fase está modulada por un código
conocido y la componente en cuadratura por un código encriptado, la señal transmitida seguiría el
siguiente modelo:
𝑠(𝑡) = ∑ [𝑂𝑎𝑘(𝑡)𝐷𝑘(𝑡)cos (2𝜋𝑓𝐿1𝑡)] +
𝑁𝑘=1 ∑ [𝑂𝑏
𝑘(𝑡)𝑆𝐶𝑘𝐷𝑘(𝑡)sin (2𝜋𝑓𝐿1𝑡)]𝑁𝑘=1
Donde:
- N es el número de satélites visibles.
- 𝑂𝑎𝑘 y 𝑂𝑏
𝑘 son los códigos públicos para cada satélite K.
- 𝑆𝐶𝑘 es el flujo de cifrado.
- 𝐷𝑘 son los datos transmitidos.
El método a seguir sería el siguiente: se observa el flujo de cifrado, 𝑆𝐶𝑘, durante un periodo de
tiempo determinado. Se extrae una parte del flujo binario con la referencia de tiempo epoch de la SAS
(Signal Authentication Sequences, secuencias de señales de autenticación) para una ventana de tiempo
determinada: por ejemplo, si en el instante 𝑛0 se observan 5000 chips del flujo binario, extraeríamos
𝑆𝐶𝑘[0: 5000, 𝑛0]. Como vemos, le añadimos la referencia de tiempo.
Figura 5. Diagrama de bloques para la creación de una señal cifrada.
La secuencia extraída es procesada y transmitida en el servicio de mensajes de navegación con
autenticación. Esta secuencia o mensaje, definido como la secuencia de señal de autenticación, sería así:
-
13
𝑆𝐴𝑆𝑘 = 𝑆𝐶𝑘[𝑛0 ∶ 𝑛0 + 𝑙]
Donde l es la longitud del código del SAS y 𝑛0 es el instante de observación del primer chip del
flujo de cifrado 𝑆𝐶𝑘.
Finalmente, durante el proceso de decodificación y tras la autenticación, el receptor obtiene el
SAS, genera la secuencia PN para ese tiempo epoch específico, y realiza la correlación de ésta con las
muestras del código encriptado. El resultado de esta correlación es pasado a un algoritmo que
determina, basándose en un umbral que puede haberse estimado previamente, el estado de seguridad
de la señal. En la Figura 6 se muestra un esquema de este proceso.
Figura 6. Diagrama de bloques para descifrar la señal.
El gran problema de este sistema es que requiere realizar modificaciones tanto a los receptores
GPS actuales como a la estructura de las señales GPS, lo cual no parece que vaya a ocurrir.
2.2.3 Monitorización de la calidad de la señal recibida
Este mecanismo se basa en la implementación de algoritmos que se ejecutarían en el receptor
GPS de estaciones de referencia, que se encargarían de monitorizar la calidad de las señales recibidas [4].
Esta técnica para detectar posibles ataques requiere tener varios receptores fijos en distintos
lugares de referencia. El hardware que equipen estas estaciones será más caro, ya que también debe ser
más fiable y, además, habrá pocos.
El fundamento de este mecanismo es que, idealmente, el pico de correlación que obtenemos
con los códigos PRN será exactamente igual en todos los receptores, independientemente de la
distancia que haya entre ellos.
-
14
Sin embargo, si se introduce una señal extraña, que en ese caso sería la señal de spoofing, los
picos de correlación ya no serán iguales, tal y como se muestra en la Figura 7.
Figura 7. Efecto de una señal extraña en los picos de correlación.
Parte de la monitorización consiste en la implementación de un algoritmo que busque
asimetrías en los picos de correlación. Estos algoritmos tomarían, como entrada, diferentes medidas de
las señales GPS, realizarían un procesamiento a estas medidas y entonces decidirían si la señal es
correcta o no. Esta decisión estará basada en tests estadísticos, y se podría utilizar el criterio de
Neyman-Pearson para decidir si una determinada señal pasa o no el test.
Para poder llevar a la práctica este método, necesitaríamos receptores que implementen varios
correladores por canal, como se entenderá a continuación.
Dos de los test más comunes son el “delta-test” y “ratio-test”.
Figura 8. Efecto de una forma de onda extraña en el seguimiento del código
El “delta-test” (∆-test) está diseñado para identificar asimetrías en los picos de correlación.
Hay que recordar que tendremos un pico de correlación cuando el código esté perfectamente alineado.
-
15
El discriminante del test es el siguiente:
∆𝑚=𝐼𝑒𝑎𝑟𝑙𝑦,𝑚 − 𝐼𝑙𝑎𝑡𝑒,𝑚
2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚
Donde 𝐼𝑒𝑎𝑟𝑙𝑦,𝑚, 𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 e 𝐼𝑙𝑎𝑡𝑒,𝑚 son, respectivamente, las acumulaciones en fase early,
prompt y late ya filtradas y m es el número del correlador. El dividir por 2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 normaliza el
resultado a un valor máximo de uno. El discriminador asume que, si se está haciendo el tracking de la
señal y estamos en fase con ella, los valores de 𝑄𝑒𝑎𝑟𝑙𝑦,𝑚, 𝑄𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 y 𝑄𝑙𝑎𝑡𝑒,𝑚 son, aproximadamente,
cero.
El “ratio-test” es un test que detecta máximos planos, picos de correlación estrechos o muy
altos. El discriminante de este test es:
𝑅𝑚 =𝐼𝑒𝑎𝑟𝑙𝑦,𝑚 + 𝐼𝑙𝑎𝑡𝑒,𝑚
2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚
Donde, al igual que antes, se asume que estamos en fase con la señal (es decir, que estamos en
la fase de “tracking” o seguimiento).
Los receptores multi-correlación generan m pares de discriminantes por canal. Una vez están
bien determinados los efectos multitrayecto y el ruido térmico, los discriminantes realizan los dos tests
estadísticos con el fin de determinar si la señal que recibimos es correcta o no.
2.2.4 Correlación de la señal P
Este es otro de los mecanismos anti-spoofing que se han propuesto a lo largo de los últimos
años [5], [6].
Este sistema hace uso de la señal militar, que es una señal sin interés para los receptores civiles,
como mecanismo de comprobación de que la señal GPS recibida es correcta.
Para ello necesitamos dos receptores, uno que se encuentre en un lugar seguro, de manera que
la señal que reciba se encuentre siempre fuera del peligro de ser falsa, y otro que sería el que utilizaría
el usuario, que sería un receptor GPS normal.
Periódicamente, el receptor GPS del usuario mandaría la señal militar que está captando de cada
satélite del que está recibiendo la señal.
Este mecanismo es el que he implementado, y por tanto lo describiremos con detalle más adelante.
-
16
Capítulo 3. Sistema GPS
3.1 Introducción
El sistema GPS (Global Positioning System) es un sistema de navegación global (GNSS por sus siglas
anglosajonas) que permite determinar la posición de cualquier objeto que tenga visibilidad con los
satélites que forman el sistema.
Fue creado por el Departamento de Defensa de los Estados Unidos, que actualmente es también el
encargado de operarlo.
En 1957, la Unión Soviética lanzó al espacio el Sputnik I, el primer satélite artificial de la historia,
cuyo propósito era aportar información sobre la concentración de electrones en la ionosfera. Este
satélite emitía una señal de forma periódica, y fue este hecho el que llamó la atención de los científicos
estadounidenses, George Weiffenbach y William Guier, que pensaron en utilizar la variación de la
frecuencia que sufría esa señal debido al efecto Doppler para así poder determinar la posición del
Sputnik.
Gracias a estos dos científicos y su logro se planteó la posibilidad de realizar el cálculo inverso:
determinar la posición de un objeto en la Tierra a partir de la señal que emitan satélites cuya órbita
estuviera determinada con suficiente precisión. Esta idea fue rápidamente llevada a la realidad por la
Armada Estadounidense, que desarrolló el sistema TRANSIT, el primer sistema que permitía determinar
la posición de un observador en la Tierra a partir de la información que enviaban los satélites, y que
quedó operativo en 1964.
Este sistema primitivo tenía fines únicamente militares, aunque en 1967, tres años después de su
puesta en marcha, se puso disponible para fines comerciales. Las actualizaciones de la posición se hacían
cada cuarenta minutos, y el observador debía permanecer prácticamente estático para obtener
información precisa, por lo que no se le encontró uso comercial.
Posteriormente, en esa misma década, gracias al desarrollo de los relojes atómicos, mucho más
precisos que los que había hasta entonces, se pensó en desarrollar un nuevo sistema, más avanzado,
que permitiera calcular la posición de forma más precisa y de objetos en movimiento. Así, en 1973, se
combinaron los programas de la Armada Estadounidense y de la Fuerza Aérea de los Estados Unidos,
dando lugar al sistema conocido como NAVSTAR GPS.
Entre 1978 y 1985 se desarrollaron y pusieron en marcha once satélites, que fueron sustituidos y
ampliados en sucesivas generaciones, hasta completar la constelación de satélites actual, con capacidad
para operar en cualquier parte del mundo.
El sistema NAVSTAR garantiza siempre la presencia de, al menos, cuatro satélites sobre el horizonte.
Este número corresponde al número mínimo de satélites necesarios para determinar la posición de un
objeto con exactitud.
-
17
3.2 Descripción del sistema
El sistema GPS está compuesto por tres segmentos bien diferenciados:
Segmento Espacial
Este segmento es el formado por los satélites que conforman la constelación NAVSTAR y
que emiten la señal desde el espacio. Está formado por 24 satélites, distribuidos en seis órbitas
(cuatro satélites por órbita) con un período de rotación de doce horas, un altitud de 20200 km
sobre la Tierra, una inclinación respecto al ecuador terrestre de 55 grados, y una vida útil de
unos siete años y medio por satélite.
Estos satélites actúan como puntos de referencia a partir de los cuales los receptores
GPS, mediante triangulación, calculan su posición en la Tierra. Para que esta triangulación arroje
un resultado preciso, hacen falta al menos cuatro satélites visibles, aunque con tres sería
suficiente en caso de que no nos importe saber a qué altura sobre la superficie de la Tierra nos
encontramos.
Segmento de Control
Está formado por una serie de estaciones terrenas, distribuidas por la superficie
terrestre, que se encargan de monitorizar constantemente cada satélite, analizando las señales
emitidas por estos, y actualizar la información de navegación de los satélites, enviándole la
información actualizada periódicamente.
Las estaciones están situadas cerca del plano ecuatorial, y en ellas se encuentran
receptores con relojes de muy alta precisión.
Segmento de usuario
Este segmento no interactúa con los otros segmentos, y es el correspondiente a los
receptores GPS, que reciben la señal emitida por los satélites y calculan la posición. En el caso de
los receptores militares, utilizarán señales que proporcionan más precisión y que no están
accesibles a los receptores comerciales, que tienen un error sensiblemente mayor que los
receptores militares.
-
18
3.3 Descripción de las señales GPS
Las señales GPS son transmitidas por los satélites en dos frecuencias distintas, ambas pertenecientes
a la banda L. Se utiliza esta banda para aprovechar las condiciones de propagación de ondas de radio en
el espacio a estas frecuencias:
- Los retrasos producidos por la Ionosfera son muy altos para frecuencias por debajo de los 100
MHz y por encima de los 10 GHz.
- La velocidad de propagación de las ondas electromagnéticas a través del aire se hace menor a
medida que la frecuencia disminuye.
- Los códigos PRN (que se explican más adelante) requieren un alto ancho de banda para la
modulación en la frecuencia de la portadora, por tanto, necesitamos frecuencias altas para
tener un ancho de banda también alto.
- Las frecuencias deben estar en un rango en el que la señal no se vea afectada por fenómenos
tales como la lluvia, nubes o nieve.
Las frecuencias utilizadas se denominan L1 y L2, y son múltiplos de una frecuencia fundamental, f0
𝑓0 = 10.23 𝑀𝐻𝑧
𝑓𝐿1 = 154𝑓0 = 1575.42 𝑀𝐻𝑧
𝑓𝐿2 = 120𝑓0 = 1227.60 𝑀𝐻𝑧
En el segmento de usuario del sistema GPS, las únicas señales involucradas son las que envían los
satélites, así que a partir de ahora me referiré a ellas simplemente como “señales”, sin indicar de
manera explícita que son las enviadas por los satélites.
Las señales tienen tres partes bien diferenciadas:
- Portadora: es la señal a la frecuencia L1 o L2, y es la utilizada para modular la señal de
información.
- Datos de navegación: aquí es donde se encuentra toda la información correspondiente a las
órbitas de los satélites. Esta información es actualizada por las estaciones terrestres
correspondientes al segmento de control, y son enviadas a los satélites periódicamente.
Estos datos tienen un régimen binario de 50 bits por segundo.
-
19
- Secuencia de propagación: todos los satélites tienen dos secuencias o códigos de propagación.
El primero, llamado código de adquisición o código C/A, que es el utilizado por los sistemas
receptores GPS no militares, y el código P, que es un código encriptado utilizado para uso militar.
El código C/A, está formado por 1023 chips (un chip corresponde a un bit), y se repite cada
milisegundo, mientras que el código P es más largo, formado por aproximadamente 2.35∙1034
chips y se retransmite cada 266 días aproximadamente. Este código tiene un campo que indica
en qué instante del código está enviando, para que el receptor pueda sincronizarse. El código
C/A se transmite en la frecuencia L1, mientras que el P se transmite en la frecuencia L1 y L2.
Vamos a basarnos en el esquema de la Figura 9 para explicar los pasos para generar la señal GPS.
Figura 9. Esquema de generación señal GPS
Por un lado, generamos los datos de navegación a una tasa de 50 bits por segundo, como
indicamos antes, y de forma paralela generamos el código C/A correspondiente al satélite que vaya a
enviar la señal.
Cuando tenemos ambas señales, las combinamos mediante una suma de módulo 2
(correspondiente a una operación XOR entre las dos señales digitales). También combinamos, mediante
la misma operación, los datos de navegación con la señal P(Y).
La señal que obtenemos como resultado de estas operaciones se modula a la frecuencia L1 y L2,
utilizando una modulación BPSK (binary phase shift keying). Es importante hacer notar que ambos
códigos están modulados en fase y cuadratura, esto es, hay una diferencia de fase de noventa grados
entre ambos códigos.
-
20
La señal que se transmite puede ser descrita, por tanto, mediante la ecuación:
𝑠𝑘(𝑡) = √2𝑃𝐶(𝐶𝑘(𝑡) ⊕ 𝐷𝑘(𝑡)) cos(2𝜋𝑓𝐿1𝑡) + √2𝑃𝑃𝐿1 (𝑃𝑘(𝑡) ⊕ 𝐷𝑘(𝑡)) sin(2𝜋𝑓𝐿1𝑡) +
√2𝑃𝑃𝐿2(𝑃𝑘(𝑡) ⊕ 𝐷𝑘(𝑡)) sin(2𝜋𝑓𝐿2𝑡)
Donde:
- PC es la potencia de la señal que va con el código C/A.
- PPL1 es la potencia de la señal con el código P en la frecuencia L1.
- PPL2 es la potencia de la señal con el código P en la frecuencia L2.
- Ck es el código C/A asignado al satélite k.
- Dk son los datos de navegación correspondientes al satélite k.
- fL1 y fl2 son las frecuencias L1 y L2 respectivamente.
El código C/A se repite cada milisegundo, mientras que un bit de los datos de navegación se envía
cada veinte milisegundos. Esto quiere decir que por cada bit de los datos de navegación, la señal
contiene veinte códigos C/A completos.
3.4 Modulación y código C/A
El sistema GPS utiliza una modulación CDMA basada en código PRN.
Los códigos PRN (pseudorandom noise), transmitidos por los satélites GPS, son secuencias
determinísticas con características similares al ruido blanco gaussiano.
El código C/A es la suma de dos secuencias PRN de longitud 2𝑛 − 1, con n = 10. Este código es único
para cada satélite, siempre es el mismo y es público, es decir, es conocido.
Estos códigos son utilizados como las secuencias de propagación de las señales GPS debido a sus
propiedades, siendo sus características más importantes las referidas a la correlación.
- Correlación cruzada: todos los códigos C/A están no correlados respecto al resto de códigos.
Esto es, para dos códigos, Ci y CK correspondientes a los satélites k e i, la correlación cruzada
puede expresarse como:
𝑟𝑖𝑘(𝑚) = ∑ 𝐶𝑖(𝑙)𝐶𝑘(𝑙 + 𝑚) ≈ 0
1022
𝑙=0
-
21
- Autocorrelación: todos los códigos C/A están no correlados consigo mismos siempre que el
desfase sea distinto de cero. Gracias a esta propiedad es fácil averiguar cuando dos códigos C/A
similares se encuentran alineados, tal y como se observa en la Figura 10. Esta propiedad puede
expresarse como:
𝑟𝑘𝑘(𝑚) = ∑ 𝐶𝑘(𝑙)𝐶𝑘(𝑙 + 𝑚) ≈ 0, 𝑝𝑎𝑟𝑎 |𝑚| ≥ 1
1022
𝑙=0
Figura 10. Autocorrelación normalizada de un código C/A. Se observa que el máximo se da para un desfase igual a cero.
3.5 Datos de navegación
Los datos de navegación están formados por tramas de 1500 bits de longitud, estando cada una
de estas tramas formadas a su vez por cinco sub-tramas, cada una de 300 bits de longitud, tal y como se
muestra en la Figura 10.
Una sub-trama está formada por diez palabras, donde cada palabra tiene una longitud de treinta bits.
Las sub-tramas 1, 2 y 3 se repiten (tienen los mismos datos) en cada trama, mientras que las tramas 4 y
5 tienen 25 versiones distintas (todas con la misma estructura pero con diferentes datos). Como el
régimen binario es de 50 bits por segundo, se tardan seis segundos en transmitir una sub-trama
completa, treinta segundos en una trama completa y doce minutos y medio en enviar un mensaje de
navegación completo.
-
22
Figura 11. Estructura de los datos de navegación GPS.
Las sub-tramas están formadas por diez palabras y siempre comienzan con dos palabras especiales,
telemetry (TLM) y handover-word (HOW). TLM es la primera palabra y se repite en cada sub-trama, por
lo que se repite cada seis segundos. Contiene un preámbulo de ocho bits, seguido por 16 bits de uso
reservado y de paridad. El preámbulo es utilizado para sincronización de la trama. HOW contiene una
versión truncada, de 17 bits, del tiempo de la semana (TOW o time of week), seguido por dos bits de
bandera. Los tres bits siguientes identifican la sub-trama, para así saber cuál de las cinco sub-tramas es
la que estamos procesando.
Además de las palabras TLM y HOW, cada sub-trama contiene otras ocho palabras.
- Sub-trama 1: aquí van contenidos todos los datos referentes a la información del reloj. Esta
información es necesaria para poder establecer en qué instante fue transmitido el mensaje por
el satélite. Además, en esta sub-trama van también los datos relativos a la salud del satélite,
indicando si los datos son o no fiables.
- Sub-tramas 2 y 3: en estas sub-tramas van los datos correspondientes a las efemérides. Estos
datos son los que indican la órbita del satélite, y son necesarios para poder establecer la
posición del receptor.
- Sub-tramas 4 y 5: aquí van la información relativa al almanaque. La información del almanaque
es la misma que la de las efemérides y la del reloj, pero con menos precisión. Además, los
satélites envían información en el almanaque sobre el resto de satélites, pero en las efemérides
cada satélite envía información relativa únicamente a sí mismo.
-
23
3.6 Funcionamiento del sistema GPS
La idea detrás del sistema GPS es utilizar los satélites en el espacio como puntos de referencia para,
aplicando triangulación, calcular nuestra posición.
La información que recibe un receptor de un satélite le permite saber qué satélite es el que envía
los datos, cuál es la posición del satélite y el instante exacto a la que esa información fue enviada (salió
del satélite).
El receptor comparará el instante al que la señal fue enviada por el satélite y el instante en que ha
recibido esa información. La diferencia de ambos tiempos dará el tiempo de propagación, y con este
tiempo y la velocidad de propagación de la señal es posible calcular la distancia entre el receptor y el
satélite.
El receptor tendrá esta información de cada satélite con el que tenga visibilidad, por lo que
mediante triangulación podrá calcular su posición. Una vez tiene la distancia entre él y un satélite, sabrá
que su posición se encuentra en la superficie de una esfera de radio esa distancia calculada y de centro
la posición del satélite. Si tiene la distancia con dos satélites, aplicará este principio con ambos satélites
y la posición deberá encontrarse en la intersección de ambas esferas, que es un círculo, por lo que aún
no puede determinar su posición. Con un tercer satélite, aplicando el mismo principio que con dos,
obtendrá dos puntos (correspondientes a la intersección de tres esferas). Utilizando un cuarto satélite,
no hay lugar a dudas de la posición en la que se encuentra el receptor, ya que la intersección entre las
cuatro esferas es un único punto. En la Figura 12 se muestra gráficamente la aplicación de este
algoritmo.
Figura 12. Triangulación con tres satélites en tres pasos.
Recalculando la posición continuamente, permite al receptor conocer también su velocidad y la
dirección de movimiento.
-
24
Otra forma de determinar la velocidad a que se mueve el receptor es utilizando el efecto Doppler,
ya que se produce precisamente por la diferencia de velocidades entre emisor y receptor. Calculando la
diferencia entre la frecuencia de emisión de la señal y la frecuencia a la que la recibimos, sabiendo que
esta diferencia viene producida por el efecto Doppler, un receptor será capaz de calcular la velocidad a
la que se está moviendo.
Para poder realizar estos cálculos de la posición, necesitamos ser capaces de recibir los datos de
navegación. Este no es un problema trivial, ya que a pesar de que la señal sale de los satélites a una
frecuencia determinada (L1 o L2), debido al efecto Doppler no será esa la frecuencia la que la señal
llegue a nosotros, sino que habrá una pequeña variación. Además, también tenemos que lidiar con el
problema de la sincronización. Debemos averiguar, de alguna manera, qué información estamos
recibiendo en el momento en que empecemos a recibir la señal, es decir, el desfase que hay (aquí el
desfase es la diferencia entre el momento en que empezó a transmitirse la unidad de información que
estamos recibiendo y el momento en que empezamos a recibirla).
El procesamiento de señal para los sistemas de navegación (tanto para GPS como para Galileo) está
basado en un sistema de canales, donde un canal representa la adquisición de datos de un satélite. Esto
quiere decir que nos harán falta al menos cuatro canales para calcular la posición de un receptor (ya que
cada canal estará recibiendo datos de un satélite). Antes de asociar un canal a un satélite, necesitamos
saber qué satélites están visibles. En función de la forma en que averigüemos esto, hablaremos de un
inicio frío o un inicio caliente:
- Inicio caliente o warm start: en este tipo de inicio, el receptor combina la información que tenía
almacenada del almanaque y la última posición que computó. Los datos del almanaque los
utiliza para hacer una estimación gruesa de la posición de los satélites en el instante actual. Esta
información a su vez se utiliza junto a la de la última posición calculada para estimar qué
satélites deben estar visibles.
Sin embargo, hay dos casos en los que esta opción de inicio no arrojará resultados positivos. Si el
receptor está alejado de la última posición en la que estuvo (por ejemplo, en otro continente),
los satélites que calcule como satélites visibles no lo estarán realmente. Tampoco funcionará si
ha pasado mucho tiempo desde la última vez que el receptor actualizó la información
correspondiente al almanaque, ya que los satélites podrían haber variado su posición.
- Inicio frío o cold start: en este tipo de inicio, el receptor no utiliza ninguna información
almacenada, sino que empieza a buscar todos los satélites hasta encontrar alguno que esté
visible.
El problema de este método es que es muy lento, pueden pasar varios minutos hasta que el
receptor tenga los datos suficientes para calcular la posición.
Además del modo de inicio, existen dos fases para lograr la sincronización correcta entre el receptor
GPS y la señal recibida. Estas fases son adquisición y seguimiento.
-
25
3.7 Adquisición
El propósito de esta fase es identificar todos los satélites visibles para el receptor.
Además, si el satélite está visible, tras la fase de adquisición los siguientes parámetros tienen que
quedar determinados:
- Frecuencia: la frecuencia de la señal recibida no será exactamente la frecuencia a la que la señal
fue transmitida por el satélite, si no que habrá variaciones debido al efecto Doppler. La
variación producida por este efecto, suponiendo la máxima velocidad del satélite y una
velocidad muy alta del receptor, será de unos 10 kHz. Para un receptor estacionario la variación
nunca será superior a 5 kHz.
- Fase del código: este parámetro hace referencia al punto exacto del bloque de datos que
estamos procesando en el que el código C/A comienza. En caso de estar analizando un bloque
de datos correspondiente a un milisegundo, habrá un código C/A completo y un comienzo de
código C/A.
Existen muchos métodos para realizar la adquisición, aunque todos se basan en las propiedades de
las señales GPS, en especial de la propiedad de autocorrelación del código C/A.
La señal recibida, s(t), será una combinación de todas las señales de los N satélites visibles:
𝑠(𝑡) = ∑ 𝑠𝑛(𝑡)
𝑁
𝑛=1
Cuando estemos realizando la adquisición del satélite k, la señal s(t) será multiplicada con el código C/A
local correspondiente a ese satélite. Gracias a la propiedad de correlación cruzada que vimos
anteriormente, tras realizar esta multiplicación, las señales del resto de satélites se verán reducidas
prácticamente a cero. Sin embargo, para que esto ocurra, la fase del código C/A debe estar
perfectamente alineada.
Una vez hemos obtenido la señal del satélite de interés, debemos bajarla a banda base para trabajar con
ella. Para eso multiplicamos la señal por una portadora generada localmente a la frecuencia de la señal.
Sin embargo, como dijimos antes, a priori no sabemos la frecuencia exacta de la señal, ya que habrá
variaciones de hasta 10 kHz. Es posible buscar la frecuencia probando con diferentes frecuencias, en
pasos de 500 Hz, lo que nos da 41 frecuencias distintas para probar. Una búsqueda, tanto de la fase de
código como de la frecuencia, con un resultado positivo, se muestra en la Figura 13.
Como vemos, la fase de adquisición es una fase de búsqueda. Se prueba cada una de las diferentes fases
del código (puede haber hasta 1023, ya que ese es el número de bits del código), y lo mismo para cada
una de las frecuencias posibles. Cuando se han realizado todas las pruebas, se busca el máximo valor de
señal obtenido, y si supera un umbral determinado, diremos que el satélite es visible. En caso contrario,
el satélite no estará visible y probaremos con otro satélite distinto.
-
26
Figura 13. Adquisición positiva tras completar la búsqueda en código y frecuencia.
3.8 Seguimiento o tracking
El propósito de esta fase es refinar los valores de fases de código y de frecuencia obtenidos en la fase de
adquisición, además de mantener actualizados estos valores, ya que a medida que pasa el tiempo y
tanto los satélites como el receptor se van moviendo, van cambiando.
El seguimiento está compuesto por dos partes diferenciadas:
- Seguimiento del código: hemos de mantener la fase del código actualizada para poder extraer
correctamente los datos de navegación. Para esto se suele utilizar un DLL, donde tres códigos
C/A locales son generados y correlados con la señal recibida. A cada uno de estos códigos se les
llama Early code, Prompt Code, y Late code. Habitualmente estarán separados (el desfase entre
ellos será) de medio chip.
- Seguimiento de la frecuencia/fase de la señal: debemos mantener actualizada la frecuencia del
oscilador local para poder bajar a banda base la señal correctamente. Esta parte puede ser
implementada de dos formas: utilizando un seguidor de fase o un seguidor de frecuencia.
A continuación, en la Figura 14 se muestra un diagrama de bloques completo para implementar un
sistema de seguimiento para un canal.
Se observa que primero se multiplica la señal por una señal sinusoidal sin desfasar y por otra
desfasada 90 grados, a la misma frecuencia de la señal, para así poder bajarla a banda base tanto la
componente en fase, I, correspondiente al código C/A, como la componente en cuadratura, Q,
correspondiente al código P.
-
27
El siguiente paso es multiplicar por los códigos Early, Prompt y Late y se integra. Debido a la
propiedad de correlación cruzada de los códigos C/A, en este punto la señal en cuadratura, señal Q,
se hace prácticamente cero.
Figura 14. Diagrama de bloques para realizar el seguimiento en un canal.
La fase de tracking o seguimiento se realiza continuamente, para poder seguir los cambios de fase del
código y de frecuencia. Si en algún momento, durante esta fase, se perdiera la señal del satélite, se
comenzaría de nuevo con la fase de adquisición.
3.9 Extracción de los datos de navegación
Cuando se está realizando la fase de seguimiento, somos capaces de comenzar a extraer los bits de los
datos de navegación.
El valor de un bit se halla integrando los datos recibidos durante veinte milisegundos.
Una vez leídos unos treinta segundos de datos, hemos debido hallar el comienzo de una sub-trama, lo
cual es necesario para poder estimar en qué momento fue enviado el mensaje.
Cuando tenemos el instante de transmisión, debemos extraer los datos de las efemérides, para poder
establecer la posición del satélite cuando fueron enviados los datos.
-
28
Finalmente, deberemos calcular los pseudorangos, esto es, las distancias desde el receptor a los satélites.
Para esto nos basamos en el instante en el que fueron transmitidos los datos y el instante en el que lo
hemos recibido, obteniendo así el tiempo de transmisión y, a partir de ahí como conocemos la velocidad
de propagación de la señal GPS, obtendremos la distancia entre el receptor y el satélite.
-
29
Capítulo 4. Anti-spoofing utilizando la señal P(Y)
Determinadas señales de los distintos sistemas de navegación están especialmente diseñadas para
prevenir ataques de spoofing, o simplemente para evitar el acceso no autorizado. Algunos ejemplos los
constituyen señales tales como la señal P(Y) en el caso de GPS o el código P del sistema GLONASS.
Estas señales son desconocidas para el atacante, por lo que a la hora de hacer spoofing no podrá
replicarlas.
Sin embargo, los usuarios civiles no tienen acceso al contenido de la señal P(Y), e incluso los receptores
GPS militares autorizados utilizan hardware adicional para evitar el spoofing.
A pesar de esto, los investigadores Todd E. Humphreys, Mark L. Psiaki, Brady W. O'Hanlon, Jahshan A.
Bhatti y Daniel P. Shepard han propuesto un método que utiliza estas señales para realizar la
autenticación de las señales recibidas, asegurando así que un receptor no está siendo atacado o
detectando el ataque si se produjese.
Vamos a realizar la demostración de que este método arroja resultados positivos, de manera que podría
ser implementado en sistemas reales como mecanismo para detectar ataques.
A pesar de que utilicemos el sistema GPS, este mecanismo se podría utilizar en cualquier sistema de
navegación que tenga al menos una señal segura, incluso si el contenido de esta no es accesible
(característica presente en todos los sistemas de navegación actuales).
4.1 Procesamiento de las señales secretas para autenticación
Vamos a suponer que un receptor GPS se encuentra recibiendo una señal válida, es decir, estamos en la
fase de tracking, a la frecuencia L1. Como vimos anteriormente, la señal transmitida estará compuesta
por la señal portadora, que será una onda sinusoidal, el código C/A y P correspondiente a cada satélite, y
los datos de navegación.
Escogemos la frecuencia L1 porque en ella viajan tanto el código C/A como el código P, transmitidos en
fase y cuadratura. Por tanto, un receptor estaría recibiendo la siguiente señal:
𝑠𝐿1(𝑡) = ∑[𝑠𝑖𝐿1,𝐶/𝐴(𝑡) + 𝑠
𝑖𝐿1,𝑃(𝑌)(𝑡)]
𝑁
𝑖=1
Ahora nos centramos en las componentes tanto de datos como de código para un satélite concreto.
Eliminamos el subíndice L1 por comodidad.
𝑠1𝑖(𝑡) = 𝐴1
𝑖𝐷𝑖(𝑡 − 𝜏𝑖𝐶,1)𝑥𝐶(𝑡 − 𝜏𝑖
𝐶,1) cos[2𝜋(𝑓𝐿1 + 𝑓𝐷,1𝑖) + 𝜃𝑖]
+ 𝐵1𝑖𝐷𝑖(𝑡 − 𝜏𝑖𝑃,1) 𝑥𝑃(𝑡 − 𝜏
𝑖𝑃,1)sin[2𝜋(𝑓𝐿1 + 𝑓𝐷,1
𝑖) + 𝜃𝑖]
Donde:
- Los subíndices C y P se refieren al código C/A y P, respectivamente.
-
30
- A y B son parámetros de escala que modelan la potencia recibida de la señal.
- D representa los datos de navegación.
- 𝑥𝑃 y 𝑥𝐶 representan el código P y el código C/A, respectivamente.
- 𝜏𝑃 y 𝜏𝐶 representan la fase de la señal P(Y) y de la señal GPS, respectivamente.
- 𝜃 representa diferencia de fase entre la señal recibida y el oscilador local.
- 𝑓𝐷 es la variación de frecuencia producida por el efecto Doppler.
Como indicamos antes, ahora el receptor, al estar en la fase de tracking, se encargará de separar las
componentes de la señal en componente en fase y componente en cuadratura y bajarlas a banda base.
La señal de salida tras ese proceso podemos expresarla como:
𝑠1(𝑡) = 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1){𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1] + 𝑖
∙ 𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]}
+ 𝐵1𝐷(𝑡 − 𝜏𝑃,1)𝑥𝑃(𝑡 − 𝜏𝑃,1){𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1] − 𝑖
∙ 𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]}
Donde el superíndice ^ indica que son estimaciones.
El siguiente paso en la fase de seguimiento, como vimos, consiste en multiplicar estas señales por los
códigos C/A e integrarlas. Vamos a suponer que se multiplica por un único código C/A (ya que los otros
dos presentarán una correlación muy baja y no afectarán al resultado). Como 𝑥𝐶 y 𝑥𝑃 son ortogonales, la
correlación cruzada de ambos llevará a la componente 𝑥𝑃 a cero.
Obtendremos dos salidas, una para cada componente de la señal, e integrando sobre un intervalo de
tiempo 𝑇𝐶, tendremos:
𝑆𝐼,1 = ∫ 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]𝑑𝑡𝑇𝐶
0
𝑆𝑄,1 = ∫ 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]𝑑𝑡𝑇𝐶
0
Se puede observar, por tanto, que durante la fase de seguimiento se busca maximizar 𝑆𝐼,1, lo que
implica reducir 𝑆𝑄,1 hasta llevarlo a cero.
Este proceso es similar, con algunas pequeñas variaciones, en todos los receptores GPS comerciales.
-
31
Lo que pretendemos hacer es procesar de la misma forma las señales en dos receptores que se
encuentren en puntos distintos, sabiendo que la única diferencia, a efectos de la señal P(Y), que habrá
entre ambos receptores es la diferencia de tiempo que tarda la señal en llegar desde el satélite a cada
uno de los receptores. Esto mismo expresado de forma matemática es lo siguiente:
𝑠𝑒ñ𝑎𝑙 𝑟𝑒𝑐𝑖𝑏𝑖𝑑𝑎 𝑒𝑛 𝑙𝑎 𝑙𝑜𝑐𝑎𝑙𝑖𝑧𝑎𝑐𝑖ó𝑛 1: 𝑥𝑃(𝑡 − 𝜏𝑃,1)
𝑠𝑒ñ𝑎𝑙 𝑟𝑒𝑐𝑖𝑏𝑖𝑑𝑎 𝑒𝑛 𝑙𝑎 𝑙𝑜𝑐𝑎𝑙𝑖𝑧𝑎𝑐𝑖ó𝑛 2: 𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2)
Si, una vez bajada la señal a banda base (tanto su componente I como su componente Q), y antes de
multiplicar por el código C/A, realizamos una correlación de las señales Q de ambos receptores,
tendremos la siguiente expresión:
𝑆𝑄,1:2 = ∫ 𝐵1𝐵2𝐷𝑇𝐶
0
(𝑡 − 𝜏𝑃,1)𝐷(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2) 𝑥𝑃(𝑡 − 𝜏𝑃,1)𝑑𝑡
Donde hemos eliminado el término del coseno y el seno ya que, al bajar a banda base, el coseno tiende
a uno y el seno a cero.
Si ambos receptores están recibiendo la misma señal P(Y), el resultado de esta operación arrojará un
pico de correlación cuando ambas señales estén desfasadas una cantidad ∆𝑡 = 𝜏𝑃,2 − 𝜏𝑃,1. La aparición
de este pico indicará que, efectivamente, ambos receptores están recibiendo la misma señal P(Y) y que,
por tanto, no están siendo atacados.
Sin embargo, debemos encontrar alguna forma de medir ese pico de correlación para indicar que,
efectivamente, no se está produciendo un ataque. Observar directamente un pico en la correlación
queda rápidamente descartado, ya que implicaría que cada milisegundo deberíamos comprobar si
aparece un pico o no, y no solo es que el ojo humano no sea tan rápido, es que implicaría que
deberíamos estar atentos continuamente a la salida de la correlación, lo que no tiene tampoco sentido.
Tampoco podemos utilizar como medida la magnitud del pico de correlación, ya que para señales
débiles puede aparecer un pico con una magnitud relativamente baja, mientras que para señales fuertes
(con una potencia medianamente alta) una correlación negativa puede dar un valor bastante alto,
debido a la magnitud de las señales, como se observa en la Figura 15.
-
32
Figura 15. Correlación de dos señales iguales, pero de distinta magnitud, consigo mismas. Se ve que, en la de la derecha los valores de correlación negativos son más altos que el pico de la de la izquierda.
Finalmente, abordaremos esta cuestión de la misma forma que se aborda la detección de un satélite en
el proceso de adquisición. Estableceremos un coeficiente de spoofing o coeficiente de correlación, que
definiremos como el resultado de la división entre el mayor valor y el segundo mayor valor de la
correlación.
Si este coeficiente es mayor que un umbral determinado, concluiremos que no se está produciendo un
ataque y viceversa.
4.2 Implementación del mecanismo de autenticación
Vamos a implementar este sistema de autenticación utilizando la señal P(Y).
Debido a que desarrollar el hardware necesario para hacer una implementación real del sistema sería
muy costoso, tanto técnicamente como económicamente, vamos a realizarla en software, utilizando
para ello como herramientas Matlab y un receptor GPS desarrollado sobre Matlab. Esto nos permitirá,
además, poder probar el sistema, ya que en la implementación real, tendríamos que realizar el spoofing
para comprobar que efectivamente funciona, lo cual es ilegal además de peligroso.
El receptor software GPS que utilizaremos es el denominado “SoftGNSS v3.0” [7], desarrollado por Dennis M.Akos y Darius Plausinaitis, y que se distribuye bajo la licencia de software libre GNU. Nuestro objetivo será que el sistema sea capaz de trabajar con dos ficheros a la vez (en la versión que se distribuye solo trabaja con un fichero) y que nos indique si, en los datos recogidos por cualquiera de los
-
33
dos ficheros, se está produciendo un ataque de spoofing o si por el contrario todo funciona de forma correcta.
4.3 Introducción al receptor software “Soft-GNSS”
Este software está desarrollado en Matlab, mediante el lenguaje “Matlab Language”, utilizado para
programar sobre esta plataforma.
El receptor recibe como entrada un fichero, que deberá ser un fichero generado por la recepción de las
señales GPS sin ningún tipo de procesamiento, es decir, de las señales en “raw”.
Durante la primera fase, la de adquisición, se determinan qué satélites están visibles para el receptor.
Estos satélites son asignados a una estructura de canales, incluyendo información sobre la frecuencia
Doppler, el desfase del código C/A, la potencia recibida, etc.
La siguiente fase es la de seguimiento. Durante esta fase el software irá leyendo bloques de bytes del
fichero correspondientes a un milisegundo de recepción, y realizará las operaciones necesarias para
determinar los datos que está recibiendo.
Esto se hace secuencialmente para cada canal, es decir, primero se procesará un canal, y cuando se
termine de procesar por completo, pasará al siguiente canal y comenzará de nuevo el proceso con este
nuevo canal.
Cuando termine la fase de seguimiento de todos los canales, el software decodificará los datos de
navegación recibidos en cada canal, y los procesará hasta determinar la posición del receptor, arrojando
como salida una figura similar a la de la Figura 16. En caso de no haber suficientes canales o no ser la
muestra (el fichero) lo suficientemente largo como para calcular una posición, el programa arrojará
todos los datos que ha reunido tanto de la fase de adquisición como de la de tracking.
De forma un poco más precisa, el código sigue el siguiente workflow:
- Primero, unos poco milisegundos son leídos y pasados a la función de adquisición. Esta función
buscará la presencia de señales GPS válidas, y para las que haya presentes, estimará la fase del
código C/A y la frecuencia Doppler. El resultado se almacenará en una estructura llamada
acqResults.
- Tras este proceso, la función preRun lee la estructura de resultados, acqResults, e inicializa todos
los canales necesarios (uno por cada satélite encontrado en el proceso de adquisición). Esta
función también limpia el workspace de Matlab mediante la sentencia clear.
- Tras la inicialización de los canales, un bloque de datos, correspondiente a un milisegundo, es
leído del fichero y pasado a la función de tracking. Las efemérides decodificadas se almacenan
en una estructura, eph. Los resultados del tracking, tales como las salidas de los correladores,
discriminadores, etc. Se almacenan en una estructura llamada trackResults.
-
34
- Una vez ha terminado el tracking para todos los canales, la función postNavigation comenzará a
analizar la señal que hemos obtenido. Identificará el comienzo de una sub-trama, el tiempo de
propagación de la señal y estimará los pseudorangos.
- Finalmente, se calculan las coordenadas del receptor que generó el fichero y se convierten a un
sistema de coordenadas como UTM o WGS84.
Figura 16. Resultado del procesamiento de un fichero en coordenadas UTM.
Vamos a analizar y a explicar brevemente los ficheros más importantes para nosotros. Como no estamos
interesados en calcular la posición, no explicaré ninguno de los ficheros que tienen como misión esta
tarea.
InitSettings.m
Es el fichero principal de configuración del software. Creará una estructura, settings, que almacenará las
variables comunes a todos los bloques que forman el sistema. Esto quiere decir que los cambios que
hagamos en esta estructura, a través de este fichero, se verán en todas las funciones del programa.
Los parámetros más importantes a configurar son los siguientes:
- Settings.fileName: aquí deberemos poner la ruta hacia el fichero que queremos procesar.
- Settings.IF: frecuencia a la que se encuentran los datos del fichero.
-
35
- Settings.samplingFreq: frecuencia de muestreo a la que tomamos los datos del fichero.
- Settings.msToProcess: número de milisegundos que queremos procesar por canal.
Hay bastantes más parámetros, aunque los que en general diferirán según cómo hayas hecho la
adquisición y muestreo de las señales para guardarlas en el fichero son los que he mostrado.
postProcessing.m
Este script se encargará de ejecutar todas las funciones, desde la de adquisición hasta la que calcula e
imprime los resultados de navegación.
Es el fichero principal que se encarga de conectar entre sí todas las funciones y el resto de los scripts.
Mantiene las estructuras de datos y se encarga de pasárselas como parámetros a las funciones que los
necesiten.
Acquisition.m
Aquí está definida la función acquisition. Esta función implementa un algoritmo especial para hallar el
desfase de código y de frecuencia, basado en la transformada de Fourier.
La función busca la presencia de una señal GPS en pasos de 0.5 kHz. Para cada paso de frecuencia, se
produce una búsqueda del desfase de código, almacenando el resultado de la correlación, esto es, se
almacena el resultado de la correlación para cada paso de frecuencia.
Una vez terminado el barrido en frecuencia, la función busca el pico más alto de todas las correlaciones
que hemos almacenado. Una vez encontrado este pico, se busca el segundo pico más alto, y se dividen
ambos picos. El resultado de esta división es el coeficiente que se utilizará para determinar si hay
presencia de señal GPS o no. El umbral de decisión puede ajustarse en el fichero initSettings.m, en la
variable settings.acqTreshold.
Si el coeficiente es mayor que el umbral de decisión, se hace una aproximación más fina de la frecuencia
de la señal, ya que un error de 0.5 kHz es demasiado alto para que el PLL pueda comenzar con el
tracking.
Los parámetros que utiliza la función no son más que los datos del fichero, la estructura settings y una
tabla, generada anteriormente, con los códigos C/A de cada satélite.
-
36
Figura 17. Resultado del proceso de adquisición de un fichero.
Tracking.m
Esta función se encarga de hacer el seguimiento de las señales GPS de cada canal.
Recibe los siguientes parámetros: un bloque de datos del fichero, la estructura channel, que contiene
información relativa a los canales (si están activos, PRN, etc), y una tabla de códigos C/A.
La función procesará el fichero, para cada canal, y devolverá dos estructuras: el resultado del tracking,
en la estructura trackResults, y una versión actualizada de la estructura channel.
La estructura channel se utiliza para pasar información de cada canal, además de para almacenar nueva
información del mismo. Además, permite realizar el seguimiento de forma continua, ya que para cada
milisegundo procesado se almacena la frecuencia, el desfase de código, etc., y estos datos son utilizados
para procesar el siguiente milisegundo, que a su vez actualizará la estructura una vez termine.
La estructura trackResults contiene los resultados, para cada canal, de cada uno de los milisegundos
procesados, y serán mostrados en pantalla una vez finalice el proceso, tal y como se muestra en la
Figura 18.
Es en esta función donde se realiza la correlación con los códigos C/A, por lo que será de vital
importancia cuando queramos implementar el mecanismo anti-spoofing, ya que aquí se encontrarán las
señales de interés.
-
37
Figura 18. Datos generados tras el proceso de tracking para un canal.
Para iniciar el software, habrá establecer el directorio de trabajo de Matlab en el directorio donde se
encuentren los ficheros, o bien añadirlo al Path de Matlab, y ejecutar el script init.m.
4.4 Modificación del receptor software SoftGNSS v3.0
Para poder implementar el sistema anti-spoofing necesitamos realizar varias modificaciones al programa.
Primero debemos tener claro qué necesitamos y qué tendremos que modificar. Utilizaremos dos
ficheros, por lo que debemos añadir la capacidad al sistema de trabajar con dos ficheros.
Esto significa que tendremos que mantener dos estructuras channel, de manera que cada una mantenga
los datos del fichero que está procesando. Si quisiéramos hallar la posición de ambos receptores,
deberíamos añadir también una nueva estructura trackResults, sin embargo no estamos interesados en
el cálculo de la posición, así que podemos dejar esa estructura tal y como está y que calcule únicamente
la posición de uno de los dos ficheros.
Por supuesto, al trabajar con dos ficheros, necesitaremos también dos descriptores de fichero, que es la
forma en la que MATLAB trabaja con ellos.
A la hora de realizar la adquisición, deberemos realizarla de ambos ficheros. Para determinar si se está
sufriendo spoofing, compararemos las señales P(Y) recibidas por un receptor y por el otro, tal y como
explicamos antes. Sin embargo, debemos comprobar la señal P(Y) recibida en cada receptor y entre los
mismos satélites, es decir, debemos correlar las señales P(Y) de ambos receptores siempre que
provengan de un satélite que ambos receptores tengan en común. Esto quiere decir que, tras la
-
38
adquisición, deberemos desechar aquellos canales que no correspondan a satélites visibles para ambos
receptores.
Una vez terminada la adquisición, viene la fase de seguimiento. Lo ideal sería hacer el seguimiento de
ambos ficheros en paralelo, pero en Matlab eso no es posible, sino que ha de hacerse de forma
secuencial. Por tanto, deberemos hacer el tracking, que se realiza en bloques de datos correspondientes
a un milisegundo, de cada fichero de forma secuencial, es decir, hacer el tracking correspondiente a un
milisegundo de un fichero, hacer lo mismo con el otro fichero, y así sucesivamente hasta terminar el
número de milisegundos total procesados. Esto deberá hacerse para cada canal.
También debemos ser capaces de simular, de alguna manera, el spoofing, ya que como se indicó antes,
realizarlo de forma real es ilegal. Para simular el ataque deberemos sustituir la señal P(Y) de uno de los
ficheros por otra señal, por ejemplo un ruido blanco gaussiano, que sería lo esperado si se realizara un
ataque de estas características.
Vamos a ir realizando modificaciones al código para lograr estos objetivos.
initSettings.m
En primer lugar, necesitamos trabajar con dos ficheros, por lo que el sistema debe ofrecernos esta
posibilidad. Debemos ser capaces de indicarle al software qué ficheros vamos a utilizar, por lo que
añadimos en la estructura settings un nuevo parámetro que indique la ruta al segundo fichero con el
que trabajaremos, llamado secondfileName.
También debemos ser capaces de indicarle al software si queremos que haga spoofing o no, es decir, si
queremos que la señal P(Y) de uno de los dos ficheros sea modificada para simular un ataque de
spoofing. Esta variable solo podrá tener dos valores, true si queremos que sí se haga spoofing, y false, si
queremos que no se realice el ataque.
Para tal fin, añadimos una nueva variable a la estructura settings, llamada makeSpoof.
Antes definimos la estrategia para determinar si se estaba produciendo un ataque o no. Calcularemos
un coeficiente de spoofing, y en caso de que sea superior a un umbral determinado, concluiremos que
no se está produciendo ningún ataque. De alguna manera debemos indicar el valor de este umbral, así
que para tal fin creamos la variable spoofTreshold dentro de la estructura settings.
Por otro lado, si volvemos a la ecuación de la correlación entre las dos señales P(Y)
𝑆𝑄,1:2 = ∫ 𝐵1𝐵2𝐷𝑇𝐶
0
(𝑡 − 𝜏𝑃,1)𝐷(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 − 𝜏𝑃,1)𝑑𝑡
Observamos que existe un valor, ∆𝑡, que corresponde a la diferencia entre lo que tarda la señal en llegar
a un receptor y al otro. En nuestro caso, que trabajamos con ficheros, esta diferencia temporal será un
desfase provocado no solo por la diferencia entre los tiempos de llegada de la señal a cada receptor,
sino por la diferencia entre los instantes en que se comienzan a recoger los datos de cada fichero.
-
39
Por muy precisos que seamos, los aparatos tienen un tiempo de calentamiento, que será diferente para
cada uno de los dispositivos que utilicemos para capturar los datos y guardarlos en un fichero, por lo
que el valor ∆𝑡 puede llegar a ser significativo, de cientos de milisegundos. En el caso de que un humano
tenga que, manualmente, iniciar cada dispositivo, el retardo puede llegar a ser de varios segundos.
Aumentar el máximo valor posible de ∆𝑡 implica aumentar el rango de la correlación que tendremos que
hacer para poder encontrar el pico. Es decir, si ∆𝑡 puede ser de hasta un segundo, quiere decir que
tendremos que correlar al menos un segundo de la señal P(Y) de ambos ficheros, ya que en caso utilizar
una señal de menos de un segundo, ∆𝑡 podría caer fuera del rango de correlación y por tanto obtener
un falso positivo (creer que estamos siendo atacados cuando, en realidad, simplemente es que la
ventana de tiempo debería ser mayor). Este fenómeno se ilustra en la Figura 19.
Figura 19. A la izquierda, correlación con una ventana insuficiente, a la derecha la misma correlación con una ventana temporal más grande.
Para controlar el tamaño máximo de esta ventana temporal, creamos una nueva variable en la
estructura settings, con el nombre msMaxToCheck, que indicará el número máximo de milisegundos que
queremos de tamaño para la ventana temporal.
Por tanto, al fichero initSettings finalmente le hemos añadido las siguientes líneas:
settings.secondfileName = ‘segundoFichero’; settings.msMaxToCheck = 3000; settings.makeSpoof = false; settings.spoofTreshold = 3.5;
Los datos que aparecen corresponden a una configuración de ejemplo.
-
40
postProcessing.m
Como indicamos, este script se encarga, entre otras cosas, de mantener y pasar las estructuras a las
diferentes funciones. Por tanto, aquí realizaremos todos los cambios necesarios a estas estructuras
antes de pasárselo a las funciones.
Además, también es el encargado de llamar a las funciones, por lo que si necesitamos llamar más de una
vez a una función, cambiar el orden de las llamadas, etc. Tendremos que realizar esos cambios en este
fichero.
En primer lugar, tenemos que abrir dos ficheros, por lo que tendremos dos descriptores de ficheros
distintos. Al ser ficheros raw, los abrimos en modo lectura binaria. Para ello están las siguientes líneas
de código:
[fid, message] = fopen(settings.fileName, 'rb'); [fid2, message2] = fopen(settings.secondfileName, 'rb');
Al existir dos ficheros, necesitaremos realizar la adquisición dos veces. Esto implica, además de tener
que llamar dos veces a la función con los parámetros correspondientes, tener dos estructuras de datos
para poder almacenar los resultados de la adquisición. También deberemos llamar dos veces a la
función que imprime estos resultados, para poder evaluarlos.
disp (' Acquiring satellites for file 1...'); acqResults = acquisition(data, settings);
disp(' Acquiring satellites for file 2...'); data = fread(fid2, 11*samplesPerCode, settings.dataType)'; acqResults2 = acquisition(data, settings);
plotAcquisition(acqResults); plotAcquisition(acqResults2);
Ahora vendría la llamada a la función de tracking. Sin embargo, tal y como indicamos anteriormente,
solo haremos el seguimiento de los canales que se encuentren en ambos ficheros.
Esto quiere decir que tenemos que añadir el código necesario para poder eliminar los canales (más bien,
los satélites asociados a esos canales) que no sean iguales en ambos ficheros.
Para ello escribimos el siguiente código:
for i=1:settings.numberOfChannels for b=1:settings.numberOfChannels if(channel(i).PRN == channel2(b).PRN) break; end if(b == settings.numberOfChannels) channel(i).PRN = 0; end end end
-
41
Como vemos, recorremos ambos arrays de estructuras de datos, channel y channel2, que es donde
están almacenados los datos correspondientes a los canales, y aquellos cuyos satélites, dados por el
campo PRN, no sean comunes a ambos ficheros, los eliminamos, poniéndole el campo PRN a cero.
Una vez nos hemos asegurado de que vamos a procesar los mismos canales para ambos ficheros,
necesitamos reordenar las estructuras channel y channel2, de manera que estén ordenadas.
Esto es necesario porque, cuando realicemos el seguimiento, deberemos hacerlo del mismo satélite en
ambos ficheros, por lo que en las estructuras channel y channel2 deben aparecer los satélites en el
mismo orden.
En la Figura 20 observamos el resultado tras la fase de adquisición de dos ficheros donde no tenían
visibilidad los mismos satélites (solo uno en común).
Figura 20. Adquisición de dos ficheros que tienen visibilidad con distintos satélites
Para ello creamos la función SortStruct, que nos ordenará una estructura, de mayor a menor, según el
campo que le indiquemos.
channel = SortStruct(channel, 1); channel2 = SortStruct(channel2, 1);
El campo PRN es el primero de la estructura channel, por eso le pasamos un “1” como segundo
parámetro a la función.
La función SortStruct hace lo siguiente:
- Crea un cell array de tres dimensiones a partir de la estructura de da